blob: 2a234955c3588693f502acb97f6679e5ed5da186 [file] [log] [blame]
/*
* 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_ */