|  | /* | 
|  | * Copyright (c) 2018 Intel Corporation. | 
|  | * | 
|  | * SPDX-License-Identifier: Apache-2.0 | 
|  | */ | 
|  |  | 
|  | /** @file | 
|  | * @brief I2S bus (SSP) driver for Intel CAVS. | 
|  | * | 
|  | * Limitations: | 
|  | * - DMA is used in simple single block transfer mode (with linked list | 
|  | *   enabled) and "interrupt on full transfer completion" mode. | 
|  | */ | 
|  |  | 
|  | #ifndef ZEPHYR_DRIVERS_I2S_I2S_CAVS_H_ | 
|  | #define ZEPHYR_DRIVERS_I2S_I2S_CAVS_H_ | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | extern "C" { | 
|  | #endif | 
|  |  | 
|  | struct i2s_cavs_ssp { | 
|  | uint32_t ssc0;		/* 0x00 - Control0 */ | 
|  | uint32_t ssc1;		/* 0x04 - Control1 */ | 
|  | uint32_t sss;		/* 0x08 - Status */ | 
|  | uint32_t ssit;		/* 0x0C - Interrupt Test */ | 
|  | uint32_t ssd;		/* 0x10 - Data */ | 
|  | uint32_t reserved0[5]; | 
|  | uint32_t ssto;		/* 0x28 - Time Out */ | 
|  | uint32_t sspsp;		/* 0x2C - Programmable Serial Protocol */ | 
|  | uint32_t sstsa;		/* 0x30 - TX Time Slot Active */ | 
|  | uint32_t ssrsa;		/* 0x34 - RX Time Slot Active */ | 
|  | uint32_t sstss;		/* 0x38 - Time Slot Status */ | 
|  | uint32_t reserved1; | 
|  | uint32_t ssc2;		/* 0x40 - Command / Status 2 */ | 
|  | uint32_t sspsp2;		/* 0x44 - Programmable Serial Protocol 2 */ | 
|  | uint32_t ssc3;		/* 0x48 - Command / Status 3 */ | 
|  | uint32_t ssioc;		/* 0x4C - IO Control */ | 
|  | }; | 
|  |  | 
|  | /* SSCR0 bits */ | 
|  | #define SSCR0_DSS_MASK		(0x0000000f) | 
|  | #define SSCR0_DSIZE(x)		((x) - 1) | 
|  | #define SSCR0_FRF		(0x00000030) | 
|  | #define SSCR0_MOT		(00 << 4) | 
|  | #define SSCR0_TI		(1 << 4) | 
|  | #define SSCR0_NAT		(2 << 4) | 
|  | #define SSCR0_PSP		(3 << 4) | 
|  | #define SSCR0_ECS		(1 << 6) | 
|  | #define SSCR0_SSE		(1 << 7) | 
|  | #define SSCR0_SCR_MASK		(0x000fff00) | 
|  | #define SSCR0_SCR(x)		((x) << 8) | 
|  | #define SSCR0_EDSS		(1 << 20) | 
|  | #define SSCR0_NCS		(1 << 21) | 
|  | #define SSCR0_RIM		(1 << 22) | 
|  | #define SSCR0_TIM		(1 << 23) | 
|  | #define SSCR0_FRDC(x)		(((x) - 1) << 24) | 
|  | #define SSCR0_ACS		(1 << 30) | 
|  | #define SSCR0_MOD		(1 << 31) | 
|  |  | 
|  | /* SSCR1 bits */ | 
|  | #define SSCR1_RIE		(1 << 0) | 
|  | #define SSCR1_TIE		(1 << 1) | 
|  | #define SSCR1_LBM		(1 << 2) | 
|  | #define SSCR1_SPO		(1 << 3) | 
|  | #define SSCR1_SPH		(1 << 4) | 
|  | #define SSCR1_MWDS		(1 << 5) | 
|  | #define SSCR1_EFWR		(1 << 14) | 
|  | #define SSCR1_STRF		(1 << 15) | 
|  | #define SSCR1_IFS		(1 << 16) | 
|  | #define SSCR1_PINTE		(1 << 18) | 
|  | #define SSCR1_TINTE		(1 << 19) | 
|  | #define SSCR1_RSRE		(1 << 20) | 
|  | #define SSCR1_TSRE		(1 << 21) | 
|  | #define SSCR1_TRAIL		(1 << 22) | 
|  | #define SSCR1_RWOT		(1 << 23) | 
|  | #define SSCR1_SFRMDIR		(1 << 24) | 
|  | #define SSCR1_SCLKDIR		(1 << 25) | 
|  | #define SSCR1_ECRB		(1 << 26) | 
|  | #define SSCR1_ECRA		(1 << 27) | 
|  | #define SSCR1_SCFR		(1 << 28) | 
|  | #define SSCR1_EBCEI		(1 << 29) | 
|  | #define SSCR1_TTE		(1 << 30) | 
|  | #define SSCR1_TTELP		(1 << 31) | 
|  |  | 
|  | /* SSCR2 bits */ | 
|  | #define SSCR2_TURM1		(1 << 1) | 
|  | #define SSCR2_SDFD		(1 << 14) | 
|  | #define SSCR2_SDPM		(1 << 16) | 
|  | #define SSCR2_LJDFD		(1 << 17) | 
|  |  | 
|  | /* SSR bits */ | 
|  | #define SSSR_TNF		(1 << 2) | 
|  | #define SSSR_RNE		(1 << 3) | 
|  | #define SSSR_BSY		(1 << 4) | 
|  | #define SSSR_TFS		(1 << 5) | 
|  | #define SSSR_RFS		(1 << 6) | 
|  | #define SSSR_ROR		(1 << 7) | 
|  | #define SSSR_TUR		(1 << 21) | 
|  |  | 
|  | /* SSPSP bits */ | 
|  | #define SSPSP_SCMODE(x)		((x) << 0) | 
|  | #define SSPSP_SFRMP(x)		((x) << 2) | 
|  | #define SSPSP_ETDS		(1 << 3) | 
|  | #define SSPSP_STRTDLY(x)	((x) << 4) | 
|  | #define SSPSP_DMYSTRT(x)	((x) << 7) | 
|  | #define SSPSP_SFRMDLY(x)	((x) << 9) | 
|  | #define SSPSP_SFRMWDTH(x)	((x) << 16) | 
|  | #define SSPSP_DMYSTOP(x)	((x) << 23) | 
|  | #define SSPSP_FSRT		(1 << 25) | 
|  | #define SSPSP_EDMYSTOP(x)	((x) << 26) | 
|  |  | 
|  | /* SSTSA bits */ | 
|  | #define SSTSA_TTSA(x)		(1 << x) | 
|  | #define SSTSA_TXEN		(1 << 8) | 
|  |  | 
|  | /* SSRSA bits */ | 
|  | #define SSRSA_RTSA(x)		(1 << x) | 
|  | #define SSRSA_RXEN		(1 << 8) | 
|  |  | 
|  | /* SSCR3 bits */ | 
|  | #define SSCR3_TFL_MASK		(0x0000003f) | 
|  | #define SSCR3_RFL_MASK		(0x00003f00) | 
|  | #define SSCR3_TFT_MASK		(0x003f0000) | 
|  | #define SSCR3_TX(x)		(((x) - 1) << 16) | 
|  | #define SSCR3_RFT_MASK		(0x3f000000) | 
|  | #define SSCR3_RX(x)		(((x) - 1) << 24) | 
|  |  | 
|  | /* SSIOC bits */ | 
|  | #define SSIOC_TXDPDEB		(1 << 1) | 
|  | #define SSIOC_SFCR		(1 << 4) | 
|  | #define SSIOC_SCOE		(1 << 5) | 
|  |  | 
|  | struct i2s_cavs_mn_div { | 
|  | uint32_t mval;		/* 0x00 - M value */ | 
|  | uint32_t nval;		/* 0x04 - N value */ | 
|  | }; | 
|  |  | 
|  | /* MVAL & NVAL bits */ | 
|  | #define I2S_MNVAL_MASK		(BIT_MASK(24)) | 
|  | #define I2S_MNVAL(x)		((x) & I2S_MNVAL_MASK) | 
|  |  | 
|  | #ifdef __cplusplus | 
|  | } | 
|  | #endif | 
|  |  | 
|  | #endif /* ZEPHYR_DRIVERS_I2S_I2S_CAVS_H_ */ |