|
103 | 103 | #define ACP_SDW1_STAT BIT(2) |
104 | 104 | #define ACP_ERROR_IRQ BIT(29) |
105 | 105 |
|
| 106 | +#define ACP_AUDIO0_TX_THRESHOLD 0x1c |
| 107 | +#define ACP_AUDIO1_TX_THRESHOLD 0x1a |
| 108 | +#define ACP_AUDIO2_TX_THRESHOLD 0x18 |
| 109 | +#define ACP_AUDIO0_RX_THRESHOLD 0x1b |
| 110 | +#define ACP_AUDIO1_RX_THRESHOLD 0x19 |
| 111 | +#define ACP_AUDIO2_RX_THRESHOLD 0x17 |
| 112 | +#define ACP_P1_AUDIO1_TX_THRESHOLD BIT(6) |
| 113 | +#define ACP_P1_AUDIO1_RX_THRESHOLD BIT(5) |
| 114 | +#define ACP_SDW_DMA_IRQ_MASK 0x1F800000 |
| 115 | +#define ACP_P1_SDW_DMA_IRQ_MASK 0x60 |
| 116 | +#define ACP63_SDW0_DMA_MAX_STREAMS 6 |
| 117 | +#define ACP63_SDW1_DMA_MAX_STREAMS 2 |
| 118 | +#define ACP_P1_AUDIO_TX_THRESHOLD 6 |
| 119 | +#define SDW0_DMA_TX_IRQ_MASK(i) (ACP_AUDIO0_TX_THRESHOLD - (2 * (i))) |
| 120 | +#define SDW0_DMA_RX_IRQ_MASK(i) (ACP_AUDIO0_RX_THRESHOLD - (2 * (i))) |
| 121 | +#define SDW1_DMA_IRQ_MASK(i) (ACP_P1_AUDIO_TX_THRESHOLD - (i)) |
| 122 | + |
| 123 | +#define ACP_DELAY_US 5 |
| 124 | +#define ACP_SDW_RING_BUFF_ADDR_OFFSET (128 * 1024) |
| 125 | +#define SDW0_MEM_WINDOW_START 0x4800000 |
| 126 | +#define ACP_SDW_SRAM_PTE_OFFSET 0x03800400 |
| 127 | +#define SDW0_PTE_OFFSET 0x400 |
| 128 | +#define SDW_FIFO_SIZE 0x100 |
| 129 | +#define SDW_DMA_SIZE 0x40 |
| 130 | +#define ACP_SDW0_FIFO_OFFSET 0x100 |
| 131 | +#define ACP_SDW_PTE_OFFSET 0x100 |
| 132 | +#define SDW_FIFO_OFFSET 0x100 |
| 133 | +#define SDW_PTE_OFFSET(i) (SDW0_PTE_OFFSET + ((i) * 0x600)) |
| 134 | +#define ACP_SDW_FIFO_OFFSET(i) (ACP_SDW0_FIFO_OFFSET + ((i) * 0x500)) |
| 135 | +#define SDW_MEM_WINDOW_START(i) (SDW0_MEM_WINDOW_START + ((i) * 0xC0000)) |
| 136 | + |
| 137 | +#define SDW_PLAYBACK_MIN_NUM_PERIODS 2 |
| 138 | +#define SDW_PLAYBACK_MAX_NUM_PERIODS 8 |
| 139 | +#define SDW_PLAYBACK_MAX_PERIOD_SIZE 8192 |
| 140 | +#define SDW_PLAYBACK_MIN_PERIOD_SIZE 1024 |
| 141 | +#define SDW_CAPTURE_MIN_NUM_PERIODS 2 |
| 142 | +#define SDW_CAPTURE_MAX_NUM_PERIODS 8 |
| 143 | +#define SDW_CAPTURE_MAX_PERIOD_SIZE 8192 |
| 144 | +#define SDW_CAPTURE_MIN_PERIOD_SIZE 1024 |
| 145 | + |
| 146 | +#define SDW_MAX_BUFFER (SDW_PLAYBACK_MAX_PERIOD_SIZE * SDW_PLAYBACK_MAX_NUM_PERIODS) |
| 147 | +#define SDW_MIN_BUFFER SDW_MAX_BUFFER |
| 148 | + |
106 | 149 | enum acp_config { |
107 | 150 | ACP_CONFIG_0 = 0, |
108 | 151 | ACP_CONFIG_1, |
@@ -140,6 +183,36 @@ struct pdm_dev_data { |
140 | 183 | struct sdw_dma_dev_data { |
141 | 184 | void __iomem *acp_base; |
142 | 185 | struct mutex *acp_lock; /* used to protect acp common register access */ |
| 186 | + struct snd_pcm_substream *sdw0_dma_stream[ACP63_SDW0_DMA_MAX_STREAMS]; |
| 187 | + struct snd_pcm_substream *sdw1_dma_stream[ACP63_SDW1_DMA_MAX_STREAMS]; |
| 188 | +}; |
| 189 | + |
| 190 | +struct acp_sdw_dma_stream { |
| 191 | + u16 num_pages; |
| 192 | + u16 channels; |
| 193 | + u32 stream_id; |
| 194 | + u32 instance; |
| 195 | + dma_addr_t dma_addr; |
| 196 | + u64 bytescount; |
| 197 | +}; |
| 198 | + |
| 199 | +union acp_sdw_dma_count { |
| 200 | + struct { |
| 201 | + u32 low; |
| 202 | + u32 high; |
| 203 | + } bcount; |
| 204 | + u64 bytescount; |
| 205 | +}; |
| 206 | + |
| 207 | +struct sdw_dma_ring_buf_reg { |
| 208 | + u32 reg_dma_size; |
| 209 | + u32 reg_fifo_addr; |
| 210 | + u32 reg_fifo_size; |
| 211 | + u32 reg_ring_buf_size; |
| 212 | + u32 reg_ring_buf_addr; |
| 213 | + u32 water_mark_size_reg; |
| 214 | + u32 pos_low_reg; |
| 215 | + u32 pos_high_reg; |
143 | 216 | }; |
144 | 217 |
|
145 | 218 | /** |
|
0 commit comments