diff options
Diffstat (limited to 'sound/soc/stm/stm32_sai.h')
-rw-r--r-- | sound/soc/stm/stm32_sai.h | 73 |
1 files changed, 67 insertions, 6 deletions
diff --git a/sound/soc/stm/stm32_sai.h b/sound/soc/stm/stm32_sai.h index a801fda5066f..889974dc62d9 100644 --- a/sound/soc/stm/stm32_sai.h +++ b/sound/soc/stm/stm32_sai.h | |||
@@ -31,6 +31,10 @@ | |||
31 | #define STM_SAI_CLRFR_REGX 0x18 | 31 | #define STM_SAI_CLRFR_REGX 0x18 |
32 | #define STM_SAI_DR_REGX 0x1C | 32 | #define STM_SAI_DR_REGX 0x1C |
33 | 33 | ||
34 | /* Sub-block A registers, relative to sub-block A address */ | ||
35 | #define STM_SAI_PDMCR_REGX 0x40 | ||
36 | #define STM_SAI_PDMLY_REGX 0x44 | ||
37 | |||
34 | /******************** Bit definition for SAI_GCR register *******************/ | 38 | /******************** Bit definition for SAI_GCR register *******************/ |
35 | #define SAI_GCR_SYNCIN_SHIFT 0 | 39 | #define SAI_GCR_SYNCIN_SHIFT 0 |
36 | #define SAI_GCR_SYNCIN_MASK GENMASK(1, SAI_GCR_SYNCIN_SHIFT) | 40 | #define SAI_GCR_SYNCIN_MASK GENMASK(1, SAI_GCR_SYNCIN_SHIFT) |
@@ -75,10 +79,11 @@ | |||
75 | #define SAI_XCR1_NODIV BIT(SAI_XCR1_NODIV_SHIFT) | 79 | #define SAI_XCR1_NODIV BIT(SAI_XCR1_NODIV_SHIFT) |
76 | 80 | ||
77 | #define SAI_XCR1_MCKDIV_SHIFT 20 | 81 | #define SAI_XCR1_MCKDIV_SHIFT 20 |
78 | #define SAI_XCR1_MCKDIV_WIDTH 4 | 82 | #define SAI_XCR1_MCKDIV_WIDTH(x) (((x) == SAI_STM32F4) ? 4 : 6) |
79 | #define SAI_XCR1_MCKDIV_MASK GENMASK(24, SAI_XCR1_MCKDIV_SHIFT) | 83 | #define SAI_XCR1_MCKDIV_MASK(x) GENMASK((SAI_XCR1_MCKDIV_SHIFT + (x) - 1),\ |
84 | SAI_XCR1_MCKDIV_SHIFT) | ||
80 | #define SAI_XCR1_MCKDIV_SET(x) ((x) << SAI_XCR1_MCKDIV_SHIFT) | 85 | #define SAI_XCR1_MCKDIV_SET(x) ((x) << SAI_XCR1_MCKDIV_SHIFT) |
81 | #define SAI_XCR1_MCKDIV_MAX ((1 << SAI_XCR1_MCKDIV_WIDTH) - 1) | 86 | #define SAI_XCR1_MCKDIV_MAX(x) ((1 << SAI_XCR1_MCKDIV_WIDTH(x)) - 1) |
82 | 87 | ||
83 | #define SAI_XCR1_OSR_SHIFT 26 | 88 | #define SAI_XCR1_OSR_SHIFT 26 |
84 | #define SAI_XCR1_OSR BIT(SAI_XCR1_OSR_SHIFT) | 89 | #define SAI_XCR1_OSR BIT(SAI_XCR1_OSR_SHIFT) |
@@ -125,7 +130,6 @@ | |||
125 | #define SAI_XFRCR_FSOFF BIT(SAI_XFRCR_FSOFF_SHIFT) | 130 | #define SAI_XFRCR_FSOFF BIT(SAI_XFRCR_FSOFF_SHIFT) |
126 | 131 | ||
127 | /****************** Bit definition for SAI_XSLOTR register ******************/ | 132 | /****************** Bit definition for SAI_XSLOTR register ******************/ |
128 | |||
129 | #define SAI_XSLOTR_FBOFF_SHIFT 0 | 133 | #define SAI_XSLOTR_FBOFF_SHIFT 0 |
130 | #define SAI_XSLOTR_FBOFF_MASK GENMASK(4, SAI_XSLOTR_FBOFF_SHIFT) | 134 | #define SAI_XSLOTR_FBOFF_MASK GENMASK(4, SAI_XSLOTR_FBOFF_SHIFT) |
131 | #define SAI_XSLOTR_FBOFF_SET(x) ((x) << SAI_XSLOTR_FBOFF_SHIFT) | 135 | #define SAI_XSLOTR_FBOFF_SET(x) ((x) << SAI_XSLOTR_FBOFF_SHIFT) |
@@ -179,8 +183,65 @@ | |||
179 | #define SAI_XCLRFR_SHIFT 0 | 183 | #define SAI_XCLRFR_SHIFT 0 |
180 | #define SAI_XCLRFR_MASK GENMASK(6, SAI_XCLRFR_SHIFT) | 184 | #define SAI_XCLRFR_MASK GENMASK(6, SAI_XCLRFR_SHIFT) |
181 | 185 | ||
186 | /****************** Bit definition for SAI_PDMCR register ******************/ | ||
187 | #define SAI_PDMCR_PDMEN BIT(0) | ||
188 | |||
189 | #define SAI_PDMCR_MICNBR_SHIFT 4 | ||
190 | #define SAI_PDMCR_MICNBR_MASK GENMASK(5, SAI_PDMCR_MICNBR_SHIFT) | ||
191 | #define SAI_PDMCR_MICNBR_SET(x) ((x) << SAI_PDMCR_MICNBR_SHIFT) | ||
192 | |||
193 | #define SAI_PDMCR_CKEN1 BIT(8) | ||
194 | #define SAI_PDMCR_CKEN2 BIT(9) | ||
195 | #define SAI_PDMCR_CKEN3 BIT(10) | ||
196 | #define SAI_PDMCR_CKEN4 BIT(11) | ||
197 | |||
198 | /****************** Bit definition for (SAI_PDMDLY register ****************/ | ||
199 | #define SAI_PDMDLY_1L_SHIFT 0 | ||
200 | #define SAI_PDMDLY_1L_MASK GENMASK(2, SAI_PDMDLY_1L_SHIFT) | ||
201 | #define SAI_PDMDLY_1L_WIDTH 3 | ||
202 | |||
203 | #define SAI_PDMDLY_1R_SHIFT 4 | ||
204 | #define SAI_PDMDLY_1R_MASK GENMASK(6, SAI_PDMDLY_1R_SHIFT) | ||
205 | #define SAI_PDMDLY_1R_WIDTH 3 | ||
206 | |||
207 | #define SAI_PDMDLY_2L_SHIFT 8 | ||
208 | #define SAI_PDMDLY_2L_MASK GENMASK(10, SAI_PDMDLY_2L_SHIFT) | ||
209 | #define SAI_PDMDLY_2L_WIDTH 3 | ||
210 | |||
211 | #define SAI_PDMDLY_2R_SHIFT 12 | ||
212 | #define SAI_PDMDLY_2R_MASK GENMASK(14, SAI_PDMDLY_2R_SHIFT) | ||
213 | #define SAI_PDMDLY_2R_WIDTH 3 | ||
214 | |||
215 | #define SAI_PDMDLY_3L_SHIFT 16 | ||
216 | #define SAI_PDMDLY_3L_MASK GENMASK(18, SAI_PDMDLY_3L_SHIFT) | ||
217 | #define SAI_PDMDLY_3L_WIDTH 3 | ||
218 | |||
219 | #define SAI_PDMDLY_3R_SHIFT 20 | ||
220 | #define SAI_PDMDLY_3R_MASK GENMASK(22, SAI_PDMDLY_3R_SHIFT) | ||
221 | #define SAI_PDMDLY_3R_WIDTH 3 | ||
222 | |||
223 | #define SAI_PDMDLY_4L_SHIFT 24 | ||
224 | #define SAI_PDMDLY_4L_MASK GENMASK(26, SAI_PDMDLY_4L_SHIFT) | ||
225 | #define SAI_PDMDLY_4L_WIDTH 3 | ||
226 | |||
227 | #define SAI_PDMDLY_4R_SHIFT 28 | ||
228 | #define SAI_PDMDLY_4R_MASK GENMASK(30, SAI_PDMDLY_4R_SHIFT) | ||
229 | #define SAI_PDMDLY_4R_WIDTH 3 | ||
230 | |||
231 | #define STM_SAI_IS_F4(ip) ((ip)->conf->version == SAI_STM32F4) | ||
232 | #define STM_SAI_IS_H7(ip) ((ip)->conf->version == SAI_STM32H7) | ||
233 | |||
182 | enum stm32_sai_version { | 234 | enum stm32_sai_version { |
183 | SAI_STM32F4 | 235 | SAI_STM32F4, |
236 | SAI_STM32H7 | ||
237 | }; | ||
238 | |||
239 | /** | ||
240 | * struct stm32_sai_conf - SAI configuration | ||
241 | * @version: SAI version | ||
242 | */ | ||
243 | struct stm32_sai_conf { | ||
244 | int version; | ||
184 | }; | 245 | }; |
185 | 246 | ||
186 | /** | 247 | /** |
@@ -195,6 +256,6 @@ struct stm32_sai_data { | |||
195 | struct platform_device *pdev; | 256 | struct platform_device *pdev; |
196 | struct clk *clk_x8k; | 257 | struct clk *clk_x8k; |
197 | struct clk *clk_x11k; | 258 | struct clk *clk_x11k; |
198 | int version; | 259 | struct stm32_sai_conf *conf; |
199 | int irq; | 260 | int irq; |
200 | }; | 261 | }; |