1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * ALSA SoC Audio Layer - Rockchip SAI Controller driver 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (c) 2022 Rockchip Electronics Co. Ltd. 6*4882a593Smuzhiyun */ 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun #ifndef _ROCKCHIP_SAI_H 9*4882a593Smuzhiyun #define _ROCKCHIP_SAI_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* XCR Transmit / Receive Control Register */ 12*4882a593Smuzhiyun #define SAI_XCR_EDGE_SHIFT_MASK BIT(22) 13*4882a593Smuzhiyun #define SAI_XCR_EDGE_SHIFT_1 BIT(22) 14*4882a593Smuzhiyun #define SAI_XCR_EDGE_SHIFT_0 0 15*4882a593Smuzhiyun #define SAI_XCR_CSR_MASK GENMASK(21, 20) 16*4882a593Smuzhiyun #define SAI_XCR_CSR(x) ((x - 1) << 20) 17*4882a593Smuzhiyun #define SAI_XCR_CSR_V(v) ((((v) & SAI_XCR_CSR_MASK) >> 20) + 1) 18*4882a593Smuzhiyun #define SAI_XCR_SJM_MASK BIT(19) 19*4882a593Smuzhiyun #define SAI_XCR_SJM_L BIT(19) 20*4882a593Smuzhiyun #define SAI_XCR_SJM_R 0 21*4882a593Smuzhiyun #define SAI_XCR_FBM_MASK BIT(18) 22*4882a593Smuzhiyun #define SAI_XCR_FBM_LSB BIT(18) 23*4882a593Smuzhiyun #define SAI_XCR_FBM_MSB 0 24*4882a593Smuzhiyun #define SAI_XCR_SNB_MASK GENMASK(17, 11) 25*4882a593Smuzhiyun #define SAI_XCR_SNB(x) ((x - 1) << 11) 26*4882a593Smuzhiyun #define SAI_XCR_VDJ_MASK BIT(10) 27*4882a593Smuzhiyun #define SAI_XCR_VDJ_L BIT(10) 28*4882a593Smuzhiyun #define SAI_XCR_VDJ_R 0 29*4882a593Smuzhiyun #define SAI_XCR_SBW_MASK GENMASK(9, 5) 30*4882a593Smuzhiyun #define SAI_XCR_SBW(x) ((x - 1) << 5) 31*4882a593Smuzhiyun #define SAI_XCR_SBW_V(v) ((((v) & SAI_XCR_SBW_MASK) >> 5) + 1) 32*4882a593Smuzhiyun #define SAI_XCR_VDW_MASK GENMASK(4, 0) 33*4882a593Smuzhiyun #define SAI_XCR_VDW(x) ((x - 1) << 0) 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun /* FSCR Frame Sync Control Register */ 36*4882a593Smuzhiyun #define SAI_FSCR_EDGE_MASK BIT(24) 37*4882a593Smuzhiyun #define SAI_FSCR_EDGE_DUAL BIT(24) 38*4882a593Smuzhiyun #define SAI_FSCR_EDGE_RISING 0 39*4882a593Smuzhiyun #define SAI_FSCR_FPW_MASK GENMASK(23, 12) 40*4882a593Smuzhiyun #define SAI_FSCR_FPW(x) ((x - 1) << 12) 41*4882a593Smuzhiyun #define SAI_FSCR_FW_MASK GENMASK(11, 0) 42*4882a593Smuzhiyun #define SAI_FSCR_FW(x) ((x - 1) << 0) 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun /* MONO_CR Mono Control Register */ 45*4882a593Smuzhiyun #define SAI_MCR_RX_MONO_SLOT_MASK GENMASK(8, 2) 46*4882a593Smuzhiyun #define SAI_MCR_RX_MONO_SLOT_SEL(x) ((x - 1) << 2) 47*4882a593Smuzhiyun #define SAI_MCR_RX_MONO_MASK BIT(1) 48*4882a593Smuzhiyun #define SAI_MCR_RX_MONO_EN BIT(1) 49*4882a593Smuzhiyun #define SAI_MCR_RX_MONO_DIS 0 50*4882a593Smuzhiyun #define SAI_MCR_TX_MONO_MASK BIT(0) 51*4882a593Smuzhiyun #define SAI_MCR_TX_MONO_EN BIT(0) 52*4882a593Smuzhiyun #define SAI_MCR_TX_MONO_DIS 0 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun /* XFER Transfer Start Register */ 55*4882a593Smuzhiyun #define SAI_XFER_RX_IDLE BIT(8) 56*4882a593Smuzhiyun #define SAI_XFER_TX_IDLE BIT(7) 57*4882a593Smuzhiyun #define SAI_XFER_FS_IDLE BIT(6) 58*4882a593Smuzhiyun #define SAI_XFER_RX_CNT_MASK BIT(5) 59*4882a593Smuzhiyun #define SAI_XFER_RX_CNT_EN BIT(5) 60*4882a593Smuzhiyun #define SAI_XFER_RX_CNT_DIS 0 61*4882a593Smuzhiyun #define SAI_XFER_TX_CNT_MASK BIT(4) 62*4882a593Smuzhiyun #define SAI_XFER_TX_CNT_EN BIT(4) 63*4882a593Smuzhiyun #define SAI_XFER_TX_CNT_DIS 0 64*4882a593Smuzhiyun #define SAI_XFER_RXS_MASK BIT(3) 65*4882a593Smuzhiyun #define SAI_XFER_RXS_EN BIT(3) 66*4882a593Smuzhiyun #define SAI_XFER_RXS_DIS 0 67*4882a593Smuzhiyun #define SAI_XFER_TXS_MASK BIT(2) 68*4882a593Smuzhiyun #define SAI_XFER_TXS_EN BIT(2) 69*4882a593Smuzhiyun #define SAI_XFER_TXS_DIS 0 70*4882a593Smuzhiyun #define SAI_XFER_FSS_MASK BIT(1) 71*4882a593Smuzhiyun #define SAI_XFER_FSS_EN BIT(1) 72*4882a593Smuzhiyun #define SAI_XFER_FSS_DIS 0 73*4882a593Smuzhiyun #define SAI_XFER_CLK_MASK BIT(0) 74*4882a593Smuzhiyun #define SAI_XFER_CLK_EN BIT(0) 75*4882a593Smuzhiyun #define SAI_XFER_CLK_DIS 0 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun /* CLR Clear Logic Register */ 78*4882a593Smuzhiyun #define SAI_CLR_FSC BIT(2) 79*4882a593Smuzhiyun #define SAI_CLR_RXC BIT(1) 80*4882a593Smuzhiyun #define SAI_CLR_TXC BIT(0) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun /* CKR Clock Generation Register */ 83*4882a593Smuzhiyun #define SAI_CKR_MDIV_MASK GENMASK(14, 3) 84*4882a593Smuzhiyun #define SAI_CKR_MDIV(x) ((x - 1) << 3) 85*4882a593Smuzhiyun #define SAI_CKR_MSS_MASK BIT(2) 86*4882a593Smuzhiyun #define SAI_CKR_MSS_SLAVE BIT(2) 87*4882a593Smuzhiyun #define SAI_CKR_MSS_MASTER 0 88*4882a593Smuzhiyun #define SAI_CKR_CKP_MASK BIT(1) 89*4882a593Smuzhiyun #define SAI_CKR_CKP_INVERTED BIT(1) 90*4882a593Smuzhiyun #define SAI_CKR_CKP_NORMAL 0 91*4882a593Smuzhiyun #define SAI_CKR_FSP_MASK BIT(0) 92*4882a593Smuzhiyun #define SAI_CKR_FSP_INVERTED BIT(0) 93*4882a593Smuzhiyun #define SAI_CKR_FSP_NORMAL 0 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun /* DMACR DMA Control Register */ 96*4882a593Smuzhiyun #define SAI_DMACR_RDE_MASK BIT(24) 97*4882a593Smuzhiyun #define SAI_DMACR_RDE(x) ((x) << 24) 98*4882a593Smuzhiyun #define SAI_DMACR_RDL_MASK GENMASK(20, 16) 99*4882a593Smuzhiyun #define SAI_DMACR_RDL(x) ((x - 1) << 16) 100*4882a593Smuzhiyun #define SAI_DMACR_TDE_MASK BIT(8) 101*4882a593Smuzhiyun #define SAI_DMACR_TDE(x) ((x) << 8) 102*4882a593Smuzhiyun #define SAI_DMACR_TDL_MASK GENMASK(4, 0) 103*4882a593Smuzhiyun #define SAI_DMACR_TDL(x) ((x) << 0) 104*4882a593Smuzhiyun 105*4882a593Smuzhiyun /* INTCR Interrupt Ctrl Register */ 106*4882a593Smuzhiyun #define SAI_INTCR_RXOIC BIT(18) 107*4882a593Smuzhiyun #define SAI_INTCR_RXOIE_MASK BIT(17) 108*4882a593Smuzhiyun #define SAI_INTCR_RXOIE(x) ((x) << 17) 109*4882a593Smuzhiyun #define SAI_INTCR_TXUIC BIT(2) 110*4882a593Smuzhiyun #define SAI_INTCR_TXUIE_MASK BIT(1) 111*4882a593Smuzhiyun #define SAI_INTCR_TXUIE(x) ((x) << 1) 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun /* INTSR Interrupt Status Register */ 114*4882a593Smuzhiyun #define SAI_INTSR_RXOI_INA 0 115*4882a593Smuzhiyun #define SAI_INTSR_RXOI_ACT BIT(17) 116*4882a593Smuzhiyun #define SAI_INTSR_TXUI_INA 0 117*4882a593Smuzhiyun #define SAI_INTSR_TXUI_ACT BIT(1) 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* XSHIFT: Transfer / Receive Frame Sync Shift Register */ 120*4882a593Smuzhiyun #define SAI_XSHIFT_SEL_MASK GENMASK(23, 0) 121*4882a593Smuzhiyun #define SAI_XSHIFT_SEL(x) (x) 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun /* SAI Registers */ 124*4882a593Smuzhiyun #define SAI_TXCR (0x0000) 125*4882a593Smuzhiyun #define SAI_FSCR (0x0004) 126*4882a593Smuzhiyun #define SAI_RXCR (0x0008) 127*4882a593Smuzhiyun #define SAI_MONO_CR (0x000c) 128*4882a593Smuzhiyun #define SAI_XFER (0x0010) 129*4882a593Smuzhiyun #define SAI_CLR (0x0014) 130*4882a593Smuzhiyun #define SAI_CKR (0x0018) 131*4882a593Smuzhiyun #define SAI_TXFIFOLR (0x001c) 132*4882a593Smuzhiyun #define SAI_RXFIFOLR (0x0020) 133*4882a593Smuzhiyun #define SAI_DMACR (0x0024) 134*4882a593Smuzhiyun #define SAI_INTCR (0x0028) 135*4882a593Smuzhiyun #define SAI_INTSR (0x002c) 136*4882a593Smuzhiyun #define SAI_TXDR (0x0030) 137*4882a593Smuzhiyun #define SAI_RXDR (0x0034) 138*4882a593Smuzhiyun #define SAI_PATH_SEL (0x0038) 139*4882a593Smuzhiyun #define SAI_TX_SLOT_MASK0 (0x003c) 140*4882a593Smuzhiyun #define SAI_TX_SLOT_MASK1 (0x0040) 141*4882a593Smuzhiyun #define SAI_TX_SLOT_MASK2 (0x0044) 142*4882a593Smuzhiyun #define SAI_TX_SLOT_MASK3 (0x0048) 143*4882a593Smuzhiyun #define SAI_RX_SLOT_MASK0 (0x004c) 144*4882a593Smuzhiyun #define SAI_RX_SLOT_MASK1 (0x0050) 145*4882a593Smuzhiyun #define SAI_RX_SLOT_MASK2 (0x0054) 146*4882a593Smuzhiyun #define SAI_RX_SLOT_MASK3 (0x0058) 147*4882a593Smuzhiyun #define SAI_TX_DATA_CNT (0x005c) 148*4882a593Smuzhiyun #define SAI_RX_DATA_CNT (0x0060) 149*4882a593Smuzhiyun #define SAI_TX_SHIFT (0x0064) 150*4882a593Smuzhiyun #define SAI_RX_SHIFT (0x0068) 151*4882a593Smuzhiyun #define SAI_VERSION (0x0070) 152*4882a593Smuzhiyun 153*4882a593Smuzhiyun #endif /* _ROCKCHIP_SAI_H */ 154