Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ASoC: qcom: Add register definition for codec rddma and wrdma

Add register definitions for codec read dma and write dma
lpass interface.

Signed-off-by: Srinivasa Rao Mandadapu <quic_srivasam@quicinc.com>
Co-developed-by: Venkata Prasad Potturu <quic_potturu@quicinc.com>
Signed-off-by: Venkata Prasad Potturu <quic_potturu@quicinc.com>
Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
Link: https://lore.kernel.org/r/1645716828-15305-5-git-send-email-quic_srivasam@quicinc.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Srinivasa Rao Mandadapu and committed by
Mark Brown
dc8d9766 16413d5c

+142 -6
+121 -6
sound/soc/qcom/lpass-lpaif-reg.h
··· 74 74 #define LPAIF_IRQSTAT_REG(v, port) LPAIF_IRQ_REG_ADDR(v, 0x4, (port)) 75 75 #define LPAIF_IRQCLEAR_REG(v, port) LPAIF_IRQ_REG_ADDR(v, 0xC, (port)) 76 76 77 + /* LPAIF RXTX IRQ */ 78 + #define LPAIF_RXTX_IRQ_REG_ADDR(v, addr, port) \ 79 + (v->rxtx_irq_reg_base + (addr) + v->rxtx_irq_reg_stride * (port)) 80 + 81 + #define LPAIF_RXTX_IRQEN_REG(v, port) LPAIF_RXTX_IRQ_REG_ADDR(v, 0x0, port) 82 + #define LPAIF_RXTX_IRQSTAT_REG(v, port) LPAIF_RXTX_IRQ_REG_ADDR(v, 0x4, port) 83 + #define LPAIF_RXTX_IRQCLEAR_REG(v, port) LPAIF_RXTX_IRQ_REG_ADDR(v, 0xC, port) 84 + 85 + /* LPAIF VA IRQ */ 86 + #define LPAIF_VA_IRQ_REG_ADDR(v, addr, port) \ 87 + (v->va_irq_reg_base + (addr) + v->va_irq_reg_stride * (port)) 88 + 89 + #define LPAIF_VA_IRQEN_REG(v, port) LPAIF_VA_IRQ_REG_ADDR(v, 0x0, port) 90 + #define LPAIF_VA_IRQSTAT_REG(v, port) LPAIF_VA_IRQ_REG_ADDR(v, 0x4, port) 91 + #define LPAIF_VA_IRQCLEAR_REG(v, port) LPAIF_VA_IRQ_REG_ADDR(v, 0xC, port) 77 92 78 93 #define LPASS_HDMITX_APP_IRQ_REG_ADDR(v, addr) \ 79 94 ((v->hdmi_irq_reg_base) + (addr)) ··· 154 139 (LPAIF_INTFDMA_REG(v, chan, reg, dai_id)) : \ 155 140 LPAIF_WRDMA##reg##_REG(v, chan)) 156 141 157 - #define LPAIF_DMACTL_REG(v, chan, dir, dai_id) __LPAIF_DMA_REG(v, chan, dir, CTL, dai_id) 158 - #define LPAIF_DMABASE_REG(v, chan, dir, dai_id) __LPAIF_DMA_REG(v, chan, dir, BASE, dai_id) 159 - #define LPAIF_DMABUFF_REG(v, chan, dir, dai_id) __LPAIF_DMA_REG(v, chan, dir, BUFF, dai_id) 160 - #define LPAIF_DMACURR_REG(v, chan, dir, dai_id) __LPAIF_DMA_REG(v, chan, dir, CURR, dai_id) 161 - #define LPAIF_DMAPER_REG(v, chan, dir, dai_id) __LPAIF_DMA_REG(v, chan, dir, PER, dai_id) 162 - #define LPAIF_DMAPERCNT_REG(v, chan, dir, dai_id) __LPAIF_DMA_REG(v, chan, dir, PERCNT, dai_id) 142 + #define LPAIF_DMACTL_REG(v, chan, dir, dai_id) \ 143 + (is_cdc_dma_port(dai_id) ? \ 144 + __LPAIF_CDC_DMA_REG(v, chan, dir, CTL, dai_id) : \ 145 + __LPAIF_DMA_REG(v, chan, dir, CTL, dai_id)) 146 + #define LPAIF_DMABASE_REG(v, chan, dir, dai_id) \ 147 + (is_cdc_dma_port(dai_id) ? \ 148 + __LPAIF_CDC_DMA_REG(v, chan, dir, BASE, dai_id) : \ 149 + __LPAIF_DMA_REG(v, chan, dir, BASE, dai_id)) 150 + #define LPAIF_DMABUFF_REG(v, chan, dir, dai_id) \ 151 + (is_cdc_dma_port(dai_id) ? \ 152 + __LPAIF_CDC_DMA_REG(v, chan, dir, BUFF, dai_id) : \ 153 + __LPAIF_DMA_REG(v, chan, dir, BUFF, dai_id)) 154 + #define LPAIF_DMACURR_REG(v, chan, dir, dai_id) \ 155 + (is_cdc_dma_port(dai_id) ? \ 156 + __LPAIF_CDC_DMA_REG(v, chan, dir, CURR, dai_id) : \ 157 + __LPAIF_DMA_REG(v, chan, dir, CURR, dai_id)) 158 + #define LPAIF_DMAPER_REG(v, chan, dir, dai_id) \ 159 + (is_cdc_dma_port(dai_id) ? \ 160 + __LPAIF_CDC_DMA_REG(v, chan, dir, PER, dai_id) : \ 161 + __LPAIF_DMA_REG(v, chan, dir, PER, dai_id)) 162 + #define LPAIF_DMAPERCNT_REG(v, chan, dir, dai_id) \ 163 + (is_cdc_dma_port(dai_id) ? \ 164 + __LPAIF_CDC_DMA_REG(v, chan, dir, PERCNT, dai_id) : \ 165 + __LPAIF_DMA_REG(v, chan, dir, PERCNT, dai_id)) 166 + 167 + #define LPAIF_CDC_RDMA_REG_ADDR(v, addr, chan, dai_id) \ 168 + (is_rxtx_cdc_dma_port(dai_id) ? \ 169 + (v->rxtx_rdma_reg_base + (addr) + v->rxtx_rdma_reg_stride * (chan)) : \ 170 + (v->va_rdma_reg_base + (addr) + v->va_rdma_reg_stride * (chan))) 171 + 172 + #define LPAIF_CDC_RXTX_RDMACTL_REG(v, chan, dai_id) \ 173 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x00, (chan), dai_id) 174 + #define LPAIF_CDC_RXTX_RDMABASE_REG(v, chan, dai_id) \ 175 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x04, (chan), dai_id) 176 + #define LPAIF_CDC_RXTX_RDMABUFF_REG(v, chan, dai_id) \ 177 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x08, (chan), dai_id) 178 + #define LPAIF_CDC_RXTX_RDMACURR_REG(v, chan, dai_id) \ 179 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x0C, (chan), dai_id) 180 + #define LPAIF_CDC_RXTX_RDMAPER_REG(v, chan, dai_id) \ 181 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x10, (chan), dai_id) 182 + #define LPAIF_CDC_RXTX_RDMA_INTF_REG(v, chan, dai_id) \ 183 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x50, (chan), dai_id) 184 + 185 + #define LPAIF_CDC_VA_RDMACTL_REG(v, chan, dai_id) LPAIF_CDC_RDMA_REG_ADDR(v, 0x00, (chan), dai_id) 186 + #define LPAIF_CDC_VA_RDMABASE_REG(v, chan, dai_id) LPAIF_CDC_RDMA_REG_ADDR(v, 0x04, (chan), dai_id) 187 + #define LPAIF_CDC_VA_RDMABUFF_REG(v, chan, dai_id) LPAIF_CDC_RDMA_REG_ADDR(v, 0x08, (chan), dai_id) 188 + #define LPAIF_CDC_VA_RDMACURR_REG(v, chan, dai_id) LPAIF_CDC_RDMA_REG_ADDR(v, 0x0C, (chan), dai_id) 189 + #define LPAIF_CDC_VA_RDMAPER_REG(v, chan, dai_id) LPAIF_CDC_RDMA_REG_ADDR(v, 0x10, (chan), dai_id) 190 + #define LPAIF_CDC_VA_RDMA_INTF_REG(v, chan, dai_id) \ 191 + LPAIF_CDC_RDMA_REG_ADDR(v, 0x50, (chan), dai_id) 192 + 193 + #define LPAIF_CDC_WRDMA_REG_ADDR(v, addr, chan, dai_id) \ 194 + (is_rxtx_cdc_dma_port(dai_id) ? \ 195 + (v->rxtx_wrdma_reg_base + (addr) + \ 196 + v->rxtx_wrdma_reg_stride * (chan - v->rxtx_wrdma_channel_start)) : \ 197 + (v->va_wrdma_reg_base + (addr) + \ 198 + v->va_wrdma_reg_stride * (chan - v->va_wrdma_channel_start))) 199 + 200 + #define LPAIF_CDC_RXTX_WRDMACTL_REG(v, chan, dai_id) \ 201 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x00, (chan), dai_id) 202 + #define LPAIF_CDC_RXTX_WRDMABASE_REG(v, chan, dai_id) \ 203 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x04, (chan), dai_id) 204 + #define LPAIF_CDC_RXTX_WRDMABUFF_REG(v, chan, dai_id) \ 205 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x08, (chan), dai_id) 206 + #define LPAIF_CDC_RXTX_WRDMACURR_REG(v, chan, dai_id) \ 207 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x0C, (chan), dai_id) 208 + #define LPAIF_CDC_RXTX_WRDMAPER_REG(v, chan, dai_id) \ 209 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x10, (chan), dai_id) 210 + #define LPAIF_CDC_RXTX_WRDMA_INTF_REG(v, chan, dai_id) \ 211 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x50, (chan), dai_id) 212 + 213 + #define LPAIF_CDC_VA_WRDMACTL_REG(v, chan, dai_id) \ 214 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x00, (chan), dai_id) 215 + #define LPAIF_CDC_VA_WRDMABASE_REG(v, chan, dai_id) \ 216 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x04, (chan), dai_id) 217 + #define LPAIF_CDC_VA_WRDMABUFF_REG(v, chan, dai_id) \ 218 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x08, (chan), dai_id) 219 + #define LPAIF_CDC_VA_WRDMACURR_REG(v, chan, dai_id) \ 220 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x0C, (chan), dai_id) 221 + #define LPAIF_CDC_VA_WRDMAPER_REG(v, chan, dai_id) \ 222 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x10, (chan), dai_id) 223 + #define LPAIF_CDC_VA_WRDMA_INTF_REG(v, chan, dai_id) \ 224 + LPAIF_CDC_WRDMA_REG_ADDR(v, 0x50, (chan), dai_id) 225 + 226 + #define __LPAIF_CDC_RDDMA_REG(v, chan, dir, reg, dai_id) \ 227 + (is_rxtx_cdc_dma_port(dai_id) ? LPAIF_CDC_RXTX_RDMA##reg##_REG(v, chan, dai_id) : \ 228 + LPAIF_CDC_VA_RDMA##reg##_REG(v, chan, dai_id)) 229 + 230 + #define __LPAIF_CDC_WRDMA_REG(v, chan, dir, reg, dai_id) \ 231 + (is_rxtx_cdc_dma_port(dai_id) ? LPAIF_CDC_RXTX_WRDMA##reg##_REG(v, chan, dai_id) : \ 232 + LPAIF_CDC_VA_WRDMA##reg##_REG(v, chan, dai_id)) 233 + 234 + #define __LPAIF_CDC_DMA_REG(v, chan, dir, reg, dai_id) \ 235 + ((dir == SNDRV_PCM_STREAM_PLAYBACK) ? \ 236 + __LPAIF_CDC_RDDMA_REG(v, chan, dir, reg, dai_id) : \ 237 + __LPAIF_CDC_WRDMA_REG(v, chan, dir, reg, dai_id)) 238 + 239 + #define LPAIF_CDC_INTF_REG(v, chan, dir, dai_id) \ 240 + ((dir == SNDRV_PCM_STREAM_PLAYBACK) ? \ 241 + LPAIF_CDC_RDMA_INTF_REG(v, chan, dai_id) : \ 242 + LPAIF_CDC_WRDMA_INTF_REG(v, chan, dai_id)) 243 + 244 + #define LPAIF_INTF_REG(v, chan, dir, dai_id) \ 245 + (is_cdc_dma_port(dai_id) ? \ 246 + LPAIF_CDC_INTF_REG(v, chan, dir, dai_id) : \ 247 + LPAIF_DMACTL_REG(v, chan, dir, dai_id)) 163 248 164 249 #define LPAIF_DMACTL_BURSTEN_SINGLE 0 165 250 #define LPAIF_DMACTL_BURSTEN_INCR4 1
+21
sound/soc/qcom/lpass.h
··· 38 38 return -EINVAL; \ 39 39 } while (0) 40 40 41 + static inline bool is_cdc_dma_port(int dai_id) 42 + { 43 + switch (dai_id) { 44 + case LPASS_CDC_DMA_RX0 ... LPASS_CDC_DMA_RX9: 45 + case LPASS_CDC_DMA_TX0 ... LPASS_CDC_DMA_TX8: 46 + case LPASS_CDC_DMA_VA_TX0 ... LPASS_CDC_DMA_VA_TX8: 47 + return true; 48 + } 49 + return false; 50 + } 51 + 52 + static inline bool is_rxtx_cdc_dma_port(int dai_id) 53 + { 54 + switch (dai_id) { 55 + case LPASS_CDC_DMA_RX0 ... LPASS_CDC_DMA_RX9: 56 + case LPASS_CDC_DMA_TX0 ... LPASS_CDC_DMA_TX8: 57 + return true; 58 + } 59 + return false; 60 + } 61 + 41 62 struct lpaif_i2sctl { 42 63 struct regmap_field *loopback; 43 64 struct regmap_field *spken;