Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-only */
0002 /*
0003  * sound/soc/rockchip/rockchip_i2s.h
0004  *
0005  * ALSA SoC Audio Layer - Rockchip I2S Controller driver
0006  *
0007  * Copyright (c) 2014 Rockchip Electronics Co. Ltd.
0008  * Author: Jianqun xu <jay.xu@rock-chips.com>
0009  */
0010 
0011 #ifndef _ROCKCHIP_IIS_H
0012 #define _ROCKCHIP_IIS_H
0013 
0014 /*
0015  * TXCR
0016  * transmit operation control register
0017 */
0018 #define I2S_TXCR_RCNT_SHIFT 17
0019 #define I2S_TXCR_RCNT_MASK  (0x3f << I2S_TXCR_RCNT_SHIFT)
0020 #define I2S_TXCR_CSR_SHIFT  15
0021 #define I2S_TXCR_CSR(x)     (x << I2S_TXCR_CSR_SHIFT)
0022 #define I2S_TXCR_CSR_MASK   (3 << I2S_TXCR_CSR_SHIFT)
0023 #define I2S_TXCR_HWT        BIT(14)
0024 #define I2S_TXCR_SJM_SHIFT  12
0025 #define I2S_TXCR_SJM_R      (0 << I2S_TXCR_SJM_SHIFT)
0026 #define I2S_TXCR_SJM_L      (1 << I2S_TXCR_SJM_SHIFT)
0027 #define I2S_TXCR_FBM_SHIFT  11
0028 #define I2S_TXCR_FBM_MSB    (0 << I2S_TXCR_FBM_SHIFT)
0029 #define I2S_TXCR_FBM_LSB    (1 << I2S_TXCR_FBM_SHIFT)
0030 #define I2S_TXCR_IBM_SHIFT  9
0031 #define I2S_TXCR_IBM_NORMAL (0 << I2S_TXCR_IBM_SHIFT)
0032 #define I2S_TXCR_IBM_LSJM   (1 << I2S_TXCR_IBM_SHIFT)
0033 #define I2S_TXCR_IBM_RSJM   (2 << I2S_TXCR_IBM_SHIFT)
0034 #define I2S_TXCR_IBM_MASK   (3 << I2S_TXCR_IBM_SHIFT)
0035 #define I2S_TXCR_PBM_SHIFT  7
0036 #define I2S_TXCR_PBM_MODE(x)    (x << I2S_TXCR_PBM_SHIFT)
0037 #define I2S_TXCR_PBM_MASK   (3 << I2S_TXCR_PBM_SHIFT)
0038 #define I2S_TXCR_TFS_SHIFT  5
0039 #define I2S_TXCR_TFS_I2S    (0 << I2S_TXCR_TFS_SHIFT)
0040 #define I2S_TXCR_TFS_PCM    (1 << I2S_TXCR_TFS_SHIFT)
0041 #define I2S_TXCR_TFS_MASK   (1 << I2S_TXCR_TFS_SHIFT)
0042 #define I2S_TXCR_VDW_SHIFT  0
0043 #define I2S_TXCR_VDW(x)     ((x - 1) << I2S_TXCR_VDW_SHIFT)
0044 #define I2S_TXCR_VDW_MASK   (0x1f << I2S_TXCR_VDW_SHIFT)
0045 
0046 /*
0047  * RXCR
0048  * receive operation control register
0049 */
0050 #define I2S_RXCR_CSR_SHIFT  15
0051 #define I2S_RXCR_CSR(x)     (x << I2S_RXCR_CSR_SHIFT)
0052 #define I2S_RXCR_CSR_MASK   (3 << I2S_RXCR_CSR_SHIFT)
0053 #define I2S_RXCR_HWT        BIT(14)
0054 #define I2S_RXCR_SJM_SHIFT  12
0055 #define I2S_RXCR_SJM_R      (0 << I2S_RXCR_SJM_SHIFT)
0056 #define I2S_RXCR_SJM_L      (1 << I2S_RXCR_SJM_SHIFT)
0057 #define I2S_RXCR_FBM_SHIFT  11
0058 #define I2S_RXCR_FBM_MSB    (0 << I2S_RXCR_FBM_SHIFT)
0059 #define I2S_RXCR_FBM_LSB    (1 << I2S_RXCR_FBM_SHIFT)
0060 #define I2S_RXCR_IBM_SHIFT  9
0061 #define I2S_RXCR_IBM_NORMAL (0 << I2S_RXCR_IBM_SHIFT)
0062 #define I2S_RXCR_IBM_LSJM   (1 << I2S_RXCR_IBM_SHIFT)
0063 #define I2S_RXCR_IBM_RSJM   (2 << I2S_RXCR_IBM_SHIFT)
0064 #define I2S_RXCR_IBM_MASK   (3 << I2S_RXCR_IBM_SHIFT)
0065 #define I2S_RXCR_PBM_SHIFT  7
0066 #define I2S_RXCR_PBM_MODE(x)    (x << I2S_RXCR_PBM_SHIFT)
0067 #define I2S_RXCR_PBM_MASK   (3 << I2S_RXCR_PBM_SHIFT)
0068 #define I2S_RXCR_TFS_SHIFT  5
0069 #define I2S_RXCR_TFS_I2S    (0 << I2S_RXCR_TFS_SHIFT)
0070 #define I2S_RXCR_TFS_PCM    (1 << I2S_RXCR_TFS_SHIFT)
0071 #define I2S_RXCR_TFS_MASK   (1 << I2S_RXCR_TFS_SHIFT)
0072 #define I2S_RXCR_VDW_SHIFT  0
0073 #define I2S_RXCR_VDW(x)     ((x - 1) << I2S_RXCR_VDW_SHIFT)
0074 #define I2S_RXCR_VDW_MASK   (0x1f << I2S_RXCR_VDW_SHIFT)
0075 
0076 /*
0077  * CKR
0078  * clock generation register
0079 */
0080 #define I2S_CKR_TRCM_SHIFT  28
0081 #define I2S_CKR_TRCM(x) (x << I2S_CKR_TRCM_SHIFT)
0082 #define I2S_CKR_TRCM_TXRX   (0 << I2S_CKR_TRCM_SHIFT)
0083 #define I2S_CKR_TRCM_TXONLY (1 << I2S_CKR_TRCM_SHIFT)
0084 #define I2S_CKR_TRCM_RXONLY (2 << I2S_CKR_TRCM_SHIFT)
0085 #define I2S_CKR_TRCM_MASK   (3 << I2S_CKR_TRCM_SHIFT)
0086 #define I2S_CKR_MSS_SHIFT   27
0087 #define I2S_CKR_MSS_MASTER  (0 << I2S_CKR_MSS_SHIFT)
0088 #define I2S_CKR_MSS_SLAVE   (1 << I2S_CKR_MSS_SHIFT)
0089 #define I2S_CKR_MSS_MASK    (1 << I2S_CKR_MSS_SHIFT)
0090 #define I2S_CKR_CKP_SHIFT   26
0091 #define I2S_CKR_CKP_NORMAL  (0 << I2S_CKR_CKP_SHIFT)
0092 #define I2S_CKR_CKP_INVERTED    (1 << I2S_CKR_CKP_SHIFT)
0093 #define I2S_CKR_CKP_MASK    (1 << I2S_CKR_CKP_SHIFT)
0094 #define I2S_CKR_RLP_SHIFT   25
0095 #define I2S_CKR_RLP_NORMAL  (0 << I2S_CKR_RLP_SHIFT)
0096 #define I2S_CKR_RLP_INVERTED    (1 << I2S_CKR_RLP_SHIFT)
0097 #define I2S_CKR_RLP_MASK    (1 << I2S_CKR_RLP_SHIFT)
0098 #define I2S_CKR_TLP_SHIFT   24
0099 #define I2S_CKR_TLP_NORMAL  (0 << I2S_CKR_TLP_SHIFT)
0100 #define I2S_CKR_TLP_INVERTED    (1 << I2S_CKR_TLP_SHIFT)
0101 #define I2S_CKR_TLP_MASK    (1 << I2S_CKR_TLP_SHIFT)
0102 #define I2S_CKR_MDIV_SHIFT  16
0103 #define I2S_CKR_MDIV(x)     ((x - 1) << I2S_CKR_MDIV_SHIFT)
0104 #define I2S_CKR_MDIV_MASK   (0xff << I2S_CKR_MDIV_SHIFT)
0105 #define I2S_CKR_RSD_SHIFT   8
0106 #define I2S_CKR_RSD(x)      ((x - 1) << I2S_CKR_RSD_SHIFT)
0107 #define I2S_CKR_RSD_MASK    (0xff << I2S_CKR_RSD_SHIFT)
0108 #define I2S_CKR_TSD_SHIFT   0
0109 #define I2S_CKR_TSD(x)      ((x - 1) << I2S_CKR_TSD_SHIFT)
0110 #define I2S_CKR_TSD_MASK    (0xff << I2S_CKR_TSD_SHIFT)
0111 
0112 /*
0113  * FIFOLR
0114  * FIFO level register
0115 */
0116 #define I2S_FIFOLR_RFL_SHIFT    24
0117 #define I2S_FIFOLR_RFL_MASK (0x3f << I2S_FIFOLR_RFL_SHIFT)
0118 #define I2S_FIFOLR_TFL3_SHIFT   18
0119 #define I2S_FIFOLR_TFL3_MASK    (0x3f << I2S_FIFOLR_TFL3_SHIFT)
0120 #define I2S_FIFOLR_TFL2_SHIFT   12
0121 #define I2S_FIFOLR_TFL2_MASK    (0x3f << I2S_FIFOLR_TFL2_SHIFT)
0122 #define I2S_FIFOLR_TFL1_SHIFT   6
0123 #define I2S_FIFOLR_TFL1_MASK    (0x3f << I2S_FIFOLR_TFL1_SHIFT)
0124 #define I2S_FIFOLR_TFL0_SHIFT   0
0125 #define I2S_FIFOLR_TFL0_MASK    (0x3f << I2S_FIFOLR_TFL0_SHIFT)
0126 
0127 /*
0128  * DMACR
0129  * DMA control register
0130 */
0131 #define I2S_DMACR_RDE_SHIFT 24
0132 #define I2S_DMACR_RDE_DISABLE   (0 << I2S_DMACR_RDE_SHIFT)
0133 #define I2S_DMACR_RDE_ENABLE    (1 << I2S_DMACR_RDE_SHIFT)
0134 #define I2S_DMACR_RDL_SHIFT 16
0135 #define I2S_DMACR_RDL(x)    ((x - 1) << I2S_DMACR_RDL_SHIFT)
0136 #define I2S_DMACR_RDL_MASK  (0x1f << I2S_DMACR_RDL_SHIFT)
0137 #define I2S_DMACR_TDE_SHIFT 8
0138 #define I2S_DMACR_TDE_DISABLE   (0 << I2S_DMACR_TDE_SHIFT)
0139 #define I2S_DMACR_TDE_ENABLE    (1 << I2S_DMACR_TDE_SHIFT)
0140 #define I2S_DMACR_TDL_SHIFT 0
0141 #define I2S_DMACR_TDL(x)    ((x) << I2S_DMACR_TDL_SHIFT)
0142 #define I2S_DMACR_TDL_MASK  (0x1f << I2S_DMACR_TDL_SHIFT)
0143 
0144 /*
0145  * INTCR
0146  * interrupt control register
0147 */
0148 #define I2S_INTCR_RFT_SHIFT 20
0149 #define I2S_INTCR_RFT(x)    ((x - 1) << I2S_INTCR_RFT_SHIFT)
0150 #define I2S_INTCR_RXOIC     BIT(18)
0151 #define I2S_INTCR_RXOIE_SHIFT   17
0152 #define I2S_INTCR_RXOIE_DISABLE (0 << I2S_INTCR_RXOIE_SHIFT)
0153 #define I2S_INTCR_RXOIE_ENABLE  (1 << I2S_INTCR_RXOIE_SHIFT)
0154 #define I2S_INTCR_RXFIE_SHIFT   16
0155 #define I2S_INTCR_RXFIE_DISABLE (0 << I2S_INTCR_RXFIE_SHIFT)
0156 #define I2S_INTCR_RXFIE_ENABLE  (1 << I2S_INTCR_RXFIE_SHIFT)
0157 #define I2S_INTCR_TFT_SHIFT 4
0158 #define I2S_INTCR_TFT(x)    ((x - 1) << I2S_INTCR_TFT_SHIFT)
0159 #define I2S_INTCR_TFT_MASK  (0x1f << I2S_INTCR_TFT_SHIFT)
0160 #define I2S_INTCR_TXUIC     BIT(2)
0161 #define I2S_INTCR_TXUIE_SHIFT   1
0162 #define I2S_INTCR_TXUIE_DISABLE (0 << I2S_INTCR_TXUIE_SHIFT)
0163 #define I2S_INTCR_TXUIE_ENABLE  (1 << I2S_INTCR_TXUIE_SHIFT)
0164 
0165 /*
0166  * INTSR
0167  * interrupt status register
0168 */
0169 #define I2S_INTSR_TXEIE_SHIFT   0
0170 #define I2S_INTSR_TXEIE_DISABLE (0 << I2S_INTSR_TXEIE_SHIFT)
0171 #define I2S_INTSR_TXEIE_ENABLE  (1 << I2S_INTSR_TXEIE_SHIFT)
0172 #define I2S_INTSR_RXOI_SHIFT    17
0173 #define I2S_INTSR_RXOI_INA  (0 << I2S_INTSR_RXOI_SHIFT)
0174 #define I2S_INTSR_RXOI_ACT  (1 << I2S_INTSR_RXOI_SHIFT)
0175 #define I2S_INTSR_RXFI_SHIFT    16
0176 #define I2S_INTSR_RXFI_INA  (0 << I2S_INTSR_RXFI_SHIFT)
0177 #define I2S_INTSR_RXFI_ACT  (1 << I2S_INTSR_RXFI_SHIFT)
0178 #define I2S_INTSR_TXUI_SHIFT    1
0179 #define I2S_INTSR_TXUI_INA  (0 << I2S_INTSR_TXUI_SHIFT)
0180 #define I2S_INTSR_TXUI_ACT  (1 << I2S_INTSR_TXUI_SHIFT)
0181 #define I2S_INTSR_TXEI_SHIFT    0
0182 #define I2S_INTSR_TXEI_INA  (0 << I2S_INTSR_TXEI_SHIFT)
0183 #define I2S_INTSR_TXEI_ACT  (1 << I2S_INTSR_TXEI_SHIFT)
0184 
0185 /*
0186  * XFER
0187  * Transfer start register
0188 */
0189 #define I2S_XFER_RXS_SHIFT  1
0190 #define I2S_XFER_RXS_STOP   (0 << I2S_XFER_RXS_SHIFT)
0191 #define I2S_XFER_RXS_START  (1 << I2S_XFER_RXS_SHIFT)
0192 #define I2S_XFER_TXS_SHIFT  0
0193 #define I2S_XFER_TXS_STOP   (0 << I2S_XFER_TXS_SHIFT)
0194 #define I2S_XFER_TXS_START  (1 << I2S_XFER_TXS_SHIFT)
0195 
0196 /*
0197  * CLR
0198  * clear SCLK domain logic register
0199 */
0200 #define I2S_CLR_RXC BIT(1)
0201 #define I2S_CLR_TXC BIT(0)
0202 
0203 /*
0204  * TXDR
0205  * Transimt FIFO data register, write only.
0206 */
0207 #define I2S_TXDR_MASK   (0xff)
0208 
0209 /*
0210  * RXDR
0211  * Receive FIFO data register, write only.
0212 */
0213 #define I2S_RXDR_MASK   (0xff)
0214 
0215 /* Clock divider id */
0216 enum {
0217     ROCKCHIP_DIV_MCLK = 0,
0218     ROCKCHIP_DIV_BCLK,
0219 };
0220 
0221 /* channel select */
0222 #define I2S_CSR_SHIFT   15
0223 #define I2S_CHN_2   (0 << I2S_CSR_SHIFT)
0224 #define I2S_CHN_4   (1 << I2S_CSR_SHIFT)
0225 #define I2S_CHN_6   (2 << I2S_CSR_SHIFT)
0226 #define I2S_CHN_8   (3 << I2S_CSR_SHIFT)
0227 
0228 /* I2S REGS */
0229 #define I2S_TXCR    (0x0000)
0230 #define I2S_RXCR    (0x0004)
0231 #define I2S_CKR     (0x0008)
0232 #define I2S_FIFOLR  (0x000c)
0233 #define I2S_DMACR   (0x0010)
0234 #define I2S_INTCR   (0x0014)
0235 #define I2S_INTSR   (0x0018)
0236 #define I2S_XFER    (0x001c)
0237 #define I2S_CLR     (0x0020)
0238 #define I2S_TXDR    (0x0024)
0239 #define I2S_RXDR    (0x0028)
0240 
0241 /* io direction cfg register */
0242 #define I2S_IO_DIRECTION_MASK   (7)
0243 #define I2S_IO_8CH_OUT_2CH_IN   (0)
0244 #define I2S_IO_6CH_OUT_4CH_IN   (4)
0245 #define I2S_IO_4CH_OUT_6CH_IN   (6)
0246 #define I2S_IO_2CH_OUT_8CH_IN   (7)
0247 
0248 #endif /* _ROCKCHIP_IIS_H */