| /* |
| * 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_ */ |