fbb6bf6fb3ccf048c69e7ac14ee8bc1516112b08
[platform/kernel/linux-starfive.git] / sound / soc / codecs / adau1372.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Analog Devices ADAU1372 Audio Codec driver
4  *
5  * Copyright 2016 Analog Devices Inc.
6  * Author: Lars-Peter Clausen <lars@metafoo.de>
7  */
8
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/gpio/consumer.h>
12 #include <linux/init.h>
13 #include <linux/module.h>
14 #include <linux/pm.h>
15 #include <linux/slab.h>
16
17 #include <sound/core.h>
18 #include <sound/pcm.h>
19 #include <sound/pcm_params.h>
20 #include <sound/tlv.h>
21 #include <sound/soc.h>
22
23 #include "adau1372.h"
24 #include "adau-utils.h"
25
26 struct adau1372 {
27         struct clk *clk;
28         struct regmap *regmap;
29         void (*switch_mode)(struct device *dev);
30         bool use_pll;
31         bool enabled;
32         bool clock_provider;
33
34         struct snd_pcm_hw_constraint_list rate_constraints;
35         unsigned int slot_width;
36
37         struct clk *mclk;
38         struct gpio_desc *pd_gpio;
39         struct device *dev;
40 };
41
42 #define ADAU1372_REG_CLK_CTRL           0x00
43 #define ADAU1372_REG_PLL(x)             (0x01 + (x))
44 #define ADAU1372_REG_DAC_SOURCE         0x11
45 #define ADAU1372_REG_SOUT_SOURCE_0_1    0x13
46 #define ADAU1372_REG_SOUT_SOURCE_2_3    0x14
47 #define ADAU1372_REG_SOUT_SOURCE_4_5    0x15
48 #define ADAU1372_REG_SOUT_SOURCE_6_7    0x16
49 #define ADAU1372_REG_ADC_SDATA_CH       0x17
50 #define ADAU1372_REG_ASRCO_SOURCE_0_1   0x18
51 #define ADAU1372_REG_ASRCO_SOURCE_2_3   0x19
52 #define ADAU1372_REG_ASRC_MODE          0x1a
53 #define ADAU1372_REG_ADC_CTRL0          0x1b
54 #define ADAU1372_REG_ADC_CTRL1          0x1c
55 #define ADAU1372_REG_ADC_CTRL2          0x1d
56 #define ADAU1372_REG_ADC_CTRL3          0x1e
57 #define ADAU1372_REG_ADC_VOL(x)         (0x1f + (x))
58 #define ADAU1372_REG_PGA_CTRL(x)        (0x23 + (x))
59 #define ADAU1372_REG_PGA_BOOST          0x28
60 #define ADAU1372_REG_MICBIAS            0x2d
61 #define ADAU1372_REG_DAC_CTRL           0x2e
62 #define ADAU1372_REG_DAC_VOL(x)         (0x2f + (x))
63 #define ADAU1372_REG_OP_STAGE_MUTE      0x31
64 #define ADAU1372_REG_SAI0               0x32
65 #define ADAU1372_REG_SAI1               0x33
66 #define ADAU1372_REG_SOUT_CTRL          0x34
67 #define ADAU1372_REG_MODE_MP(x)         (0x38 + (x))
68 #define ADAU1372_REG_OP_STAGE_CTRL      0x43
69 #define ADAU1372_REG_DECIM_PWR          0x44
70 #define ADAU1372_REG_INTERP_PWR         0x45
71 #define ADAU1372_REG_BIAS_CTRL0         0x46
72 #define ADAU1372_REG_BIAS_CTRL1         0x47
73
74 #define ADAU1372_CLK_CTRL_PLL_EN        BIT(7)
75 #define ADAU1372_CLK_CTRL_XTAL_DIS      BIT(4)
76 #define ADAU1372_CLK_CTRL_CLKSRC        BIT(3)
77 #define ADAU1372_CLK_CTRL_CC_MDIV       BIT(1)
78 #define ADAU1372_CLK_CTRL_MCLK_EN       BIT(0)
79
80 #define ADAU1372_SAI0_DELAY1            (0x0 << 6)
81 #define ADAU1372_SAI0_DELAY0            (0x1 << 6)
82 #define ADAU1372_SAI0_DELAY_MASK        (0x3 << 6)
83 #define ADAU1372_SAI0_SAI_I2S           (0x0 << 4)
84 #define ADAU1372_SAI0_SAI_TDM2          (0x1 << 4)
85 #define ADAU1372_SAI0_SAI_TDM4          (0x2 << 4)
86 #define ADAU1372_SAI0_SAI_TDM8          (0x3 << 4)
87 #define ADAU1372_SAI0_SAI_MASK          (0x3 << 4)
88 #define ADAU1372_SAI0_FS_48             0x0
89 #define ADAU1372_SAI0_FS_8              0x1
90 #define ADAU1372_SAI0_FS_12             0x2
91 #define ADAU1372_SAI0_FS_16             0x3
92 #define ADAU1372_SAI0_FS_24             0x4
93 #define ADAU1372_SAI0_FS_32             0x5
94 #define ADAU1372_SAI0_FS_96             0x6
95 #define ADAU1372_SAI0_FS_192            0x7
96 #define ADAU1372_SAI0_FS_MASK           0xf
97
98 #define ADAU1372_SAI1_TDM_TS            BIT(7)
99 #define ADAU1372_SAI1_BCLK_TDMC         BIT(6)
100 #define ADAU1372_SAI1_LR_MODE           BIT(5)
101 #define ADAU1372_SAI1_LR_POL            BIT(4)
102 #define ADAU1372_SAI1_BCLKRATE          BIT(2)
103 #define ADAU1372_SAI1_BCLKEDGE          BIT(1)
104 #define ADAU1372_SAI1_MS                BIT(0)
105
106 static const unsigned int adau1372_rates[] = {
107         [ADAU1372_SAI0_FS_8] = 8000,
108         [ADAU1372_SAI0_FS_12] = 12000,
109         [ADAU1372_SAI0_FS_16] = 16000,
110         [ADAU1372_SAI0_FS_24] = 24000,
111         [ADAU1372_SAI0_FS_32] = 32000,
112         [ADAU1372_SAI0_FS_48] = 48000,
113         [ADAU1372_SAI0_FS_96] = 96000,
114         [ADAU1372_SAI0_FS_192] = 192000,
115 };
116
117 /* 8k, 12k, 24k, 48k */
118 #define ADAU1372_RATE_MASK_TDM8 0x17
119 /* + 16k, 96k */
120 #define ADAU1372_RATE_MASK_TDM4_MASTER (ADAU1372_RATE_MASK_TDM8 | 0x48 | 0x20)
121 /* +32k */
122 #define ADAU1372_RATE_MASK_TDM4 (ADAU1372_RATE_MASK_TDM4_MASTER | 0x20)
123 /* + 192k */
124 #define ADAU1372_RATE_MASK_TDM2 (ADAU1372_RATE_MASK_TDM4 | 0x80)
125
126 static const DECLARE_TLV_DB_MINMAX(adau1372_digital_tlv, -9563, 0);
127 static const DECLARE_TLV_DB_SCALE(adau1372_pga_tlv, -1200, 75, 0);
128 static const DECLARE_TLV_DB_SCALE(adau1372_pga_boost_tlv, 0, 1000, 0);
129
130 static const char * const adau1372_bias_text[] = {
131         "Normal operation", "Extreme power saving", "Enhanced performance",
132         "Power saving",
133 };
134
135 static const unsigned int adau1372_bias_adc_values[] = {
136         0, 2, 3,
137 };
138
139 static const char * const adau1372_bias_adc_text[] = {
140         "Normal operation", "Enhanced performance", "Power saving",
141 };
142
143 static const char * const adau1372_bias_dac_text[] = {
144         "Normal operation", "Power saving", "Superior performance",
145         "Enhanced performance",
146 };
147
148 static SOC_ENUM_SINGLE_DECL(adau1372_bias_hp_enum,
149         ADAU1372_REG_BIAS_CTRL0, 6, adau1372_bias_text);
150 static SOC_ENUM_SINGLE_DECL(adau1372_bias_afe0_1_enum,
151         ADAU1372_REG_BIAS_CTRL0, 4, adau1372_bias_text);
152 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_bias_adc2_3_enum,
153         ADAU1372_REG_BIAS_CTRL0, 2, 0x3, adau1372_bias_adc_text,
154         adau1372_bias_adc_values);
155 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_bias_adc0_1_enum,
156         ADAU1372_REG_BIAS_CTRL0, 0, 0x3, adau1372_bias_adc_text,
157         adau1372_bias_adc_values);
158 static SOC_ENUM_SINGLE_DECL(adau1372_bias_afe2_3_enum,
159         ADAU1372_REG_BIAS_CTRL1, 4, adau1372_bias_text);
160 static SOC_ENUM_SINGLE_DECL(adau1372_bias_mic_enum,
161         ADAU1372_REG_BIAS_CTRL1, 2, adau1372_bias_text);
162 static SOC_ENUM_SINGLE_DECL(adau1372_bias_dac_enum,
163         ADAU1372_REG_BIAS_CTRL1, 0, adau1372_bias_dac_text);
164
165 static const char * const adau1372_hpf_text[] = {
166         "Off",
167         "1 Hz",
168         "4 Hz",
169         "8 Hz",
170 };
171
172 static SOC_ENUM_SINGLE_DECL(adau1372_hpf0_1_enum, ADAU1372_REG_ADC_CTRL2, 5,
173                             adau1372_hpf_text);
174 static SOC_ENUM_SINGLE_DECL(adau1372_hpf2_3_enum, ADAU1372_REG_ADC_CTRL3, 5,
175                             adau1372_hpf_text);
176 static const struct snd_kcontrol_new adau1372_controls[] = {
177         SOC_SINGLE_TLV("ADC 0 Capture Volume", ADAU1372_REG_ADC_VOL(0),
178                        0, 0xff, 1, adau1372_digital_tlv),
179         SOC_SINGLE_TLV("ADC 1 Capture Volume", ADAU1372_REG_ADC_VOL(1),
180                        0, 0xff, 1, adau1372_digital_tlv),
181         SOC_SINGLE_TLV("ADC 2 Capture Volume", ADAU1372_REG_ADC_VOL(2),
182                        0, 0xff, 1, adau1372_digital_tlv),
183         SOC_SINGLE_TLV("ADC 3 Capture Volume", ADAU1372_REG_ADC_VOL(3),
184                        0, 0xff, 1, adau1372_digital_tlv),
185         SOC_SINGLE("ADC 0 Capture Switch", ADAU1372_REG_ADC_CTRL0, 3, 1, 1),
186         SOC_SINGLE("ADC 1 Capture Switch", ADAU1372_REG_ADC_CTRL0, 4, 1, 1),
187         SOC_SINGLE("ADC 2 Capture Switch", ADAU1372_REG_ADC_CTRL1, 3, 1, 1),
188         SOC_SINGLE("ADC 3 Capture Switch", ADAU1372_REG_ADC_CTRL1, 4, 1, 1),
189
190         SOC_ENUM("ADC 0+1 High-Pass-Filter", adau1372_hpf0_1_enum),
191         SOC_ENUM("ADC 2+3 High-Pass-Filter", adau1372_hpf2_3_enum),
192
193         SOC_SINGLE_TLV("PGA 0 Capture Volume", ADAU1372_REG_PGA_CTRL(0),
194                        0, 0x3f, 0, adau1372_pga_tlv),
195         SOC_SINGLE_TLV("PGA 1 Capture Volume", ADAU1372_REG_PGA_CTRL(1),
196                        0, 0x3f, 0, adau1372_pga_tlv),
197         SOC_SINGLE_TLV("PGA 2 Capture Volume", ADAU1372_REG_PGA_CTRL(2),
198                        0, 0x3f, 0, adau1372_pga_tlv),
199         SOC_SINGLE_TLV("PGA 3 Capture Volume", ADAU1372_REG_PGA_CTRL(3),
200                        0, 0x3f, 0, adau1372_pga_tlv),
201         SOC_SINGLE_TLV("PGA 0 Boost Capture Volume", ADAU1372_REG_PGA_BOOST,
202                        0, 1, 0, adau1372_pga_boost_tlv),
203         SOC_SINGLE_TLV("PGA 1 Boost Capture Volume", ADAU1372_REG_PGA_BOOST,
204                        1, 1, 0, adau1372_pga_boost_tlv),
205         SOC_SINGLE_TLV("PGA 2 Boost Capture Volume", ADAU1372_REG_PGA_BOOST,
206                        2, 1, 0, adau1372_pga_boost_tlv),
207         SOC_SINGLE_TLV("PGA 3 Boost Capture Volume", ADAU1372_REG_PGA_BOOST,
208                        3, 1, 0, adau1372_pga_boost_tlv),
209         SOC_SINGLE("PGA 0 Capture Switch", ADAU1372_REG_PGA_CTRL(0), 7, 1, 1),
210         SOC_SINGLE("PGA 1 Capture Switch", ADAU1372_REG_PGA_CTRL(1), 7, 1, 1),
211         SOC_SINGLE("PGA 2 Capture Switch", ADAU1372_REG_PGA_CTRL(2), 7, 1, 1),
212         SOC_SINGLE("PGA 3 Capture Switch", ADAU1372_REG_PGA_CTRL(3), 7, 1, 1),
213
214         SOC_SINGLE_TLV("DAC 0 Playback Volume", ADAU1372_REG_DAC_VOL(0),
215                        0, 0xff, 1, adau1372_digital_tlv),
216         SOC_SINGLE_TLV("DAC 1 Playback Volume", ADAU1372_REG_DAC_VOL(1),
217                        0, 0xff, 1, adau1372_digital_tlv),
218         SOC_SINGLE("DAC 0 Playback Switch", ADAU1372_REG_DAC_CTRL, 3, 1, 1),
219         SOC_SINGLE("DAC 1 Playback Switch", ADAU1372_REG_DAC_CTRL, 4, 1, 1),
220
221         SOC_ENUM("Headphone Bias", adau1372_bias_hp_enum),
222         SOC_ENUM("Microphone Bias", adau1372_bias_mic_enum),
223         SOC_ENUM("AFE 0+1 Bias", adau1372_bias_afe0_1_enum),
224         SOC_ENUM("AFE 2+3 Bias", adau1372_bias_afe2_3_enum),
225         SOC_ENUM("ADC 0+1 Bias", adau1372_bias_adc0_1_enum),
226         SOC_ENUM("ADC 2+3 Bias", adau1372_bias_adc2_3_enum),
227         SOC_ENUM("DAC 0+1 Bias", adau1372_bias_dac_enum),
228 };
229
230 static const char * const adau1372_decimator_mux_text[] = {
231         "ADC",
232         "DMIC",
233 };
234
235 static SOC_ENUM_SINGLE_DECL(adau1372_decimator0_1_mux_enum, ADAU1372_REG_ADC_CTRL2,
236                             2, adau1372_decimator_mux_text);
237
238 static const struct snd_kcontrol_new adau1372_decimator0_1_mux_control =
239         SOC_DAPM_ENUM("Decimator 0+1 Capture Mux", adau1372_decimator0_1_mux_enum);
240
241 static SOC_ENUM_SINGLE_DECL(adau1372_decimator2_3_mux_enum, ADAU1372_REG_ADC_CTRL3,
242                             2, adau1372_decimator_mux_text);
243
244 static const struct snd_kcontrol_new adau1372_decimator2_3_mux_control =
245         SOC_DAPM_ENUM("Decimator 2+3 Capture Mux", adau1372_decimator2_3_mux_enum);
246
247 static const unsigned int adau1372_asrco_mux_values[] = {
248         4, 5, 6, 7,
249 };
250
251 static const char * const adau1372_asrco_mux_text[] = {
252         "Decimator0",
253         "Decimator1",
254         "Decimator2",
255         "Decimator3",
256 };
257
258 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_asrco0_mux_enum, ADAU1372_REG_ASRCO_SOURCE_0_1,
259                                   0, 0xf, adau1372_asrco_mux_text, adau1372_asrco_mux_values);
260 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_asrco1_mux_enum, ADAU1372_REG_ASRCO_SOURCE_0_1,
261                                   4, 0xf, adau1372_asrco_mux_text, adau1372_asrco_mux_values);
262 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_asrco2_mux_enum, ADAU1372_REG_ASRCO_SOURCE_2_3,
263                                   0, 0xf, adau1372_asrco_mux_text, adau1372_asrco_mux_values);
264 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_asrco3_mux_enum, ADAU1372_REG_ASRCO_SOURCE_2_3,
265                                   4, 0xf, adau1372_asrco_mux_text, adau1372_asrco_mux_values);
266
267 static const struct snd_kcontrol_new adau1372_asrco0_mux_control =
268         SOC_DAPM_ENUM("Output ASRC0 Capture Mux", adau1372_asrco0_mux_enum);
269 static const struct snd_kcontrol_new adau1372_asrco1_mux_control =
270         SOC_DAPM_ENUM("Output ASRC1 Capture Mux", adau1372_asrco1_mux_enum);
271 static const struct snd_kcontrol_new adau1372_asrco2_mux_control =
272         SOC_DAPM_ENUM("Output ASRC2 Capture Mux", adau1372_asrco2_mux_enum);
273 static const struct snd_kcontrol_new adau1372_asrco3_mux_control =
274         SOC_DAPM_ENUM("Output ASRC3 Capture Mux", adau1372_asrco3_mux_enum);
275
276 static const unsigned int adau1372_sout_mux_values[] = {
277         4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
278 };
279
280 static const char * const adau1372_sout_mux_text[] = {
281         "Output ASRC0",
282         "Output ASRC1",
283         "Output ASRC2",
284         "Output ASRC3",
285         "Serial Input 0",
286         "Serial Input 1",
287         "Serial Input 2",
288         "Serial Input 3",
289         "Serial Input 4",
290         "Serial Input 5",
291         "Serial Input 6",
292         "Serial Input 7",
293 };
294
295 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout0_mux_enum, ADAU1372_REG_SOUT_SOURCE_0_1,
296                                   0, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
297 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout1_mux_enum, ADAU1372_REG_SOUT_SOURCE_0_1,
298                                   4, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
299 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout2_mux_enum, ADAU1372_REG_SOUT_SOURCE_2_3,
300                                   0, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
301 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout3_mux_enum, ADAU1372_REG_SOUT_SOURCE_2_3,
302                                   4, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
303 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout4_mux_enum, ADAU1372_REG_SOUT_SOURCE_4_5,
304                                   0, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
305 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout5_mux_enum, ADAU1372_REG_SOUT_SOURCE_4_5,
306                                   4, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
307 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout6_mux_enum, ADAU1372_REG_SOUT_SOURCE_6_7,
308                                   0, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
309 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_sout7_mux_enum, ADAU1372_REG_SOUT_SOURCE_6_7,
310                                   4, 0xf, adau1372_sout_mux_text, adau1372_sout_mux_values);
311
312 static const struct snd_kcontrol_new adau1372_sout0_mux_control =
313         SOC_DAPM_ENUM("Serial Output 0 Capture Mux", adau1372_sout0_mux_enum);
314 static const struct snd_kcontrol_new adau1372_sout1_mux_control =
315         SOC_DAPM_ENUM("Serial Output 1 Capture Mux", adau1372_sout1_mux_enum);
316 static const struct snd_kcontrol_new adau1372_sout2_mux_control =
317         SOC_DAPM_ENUM("Serial Output 2 Capture Mux", adau1372_sout2_mux_enum);
318 static const struct snd_kcontrol_new adau1372_sout3_mux_control =
319         SOC_DAPM_ENUM("Serial Output 3 Capture Mux", adau1372_sout3_mux_enum);
320 static const struct snd_kcontrol_new adau1372_sout4_mux_control =
321         SOC_DAPM_ENUM("Serial Output 4 Capture Mux", adau1372_sout4_mux_enum);
322 static const struct snd_kcontrol_new adau1372_sout5_mux_control =
323         SOC_DAPM_ENUM("Serial Output 5 Capture Mux", adau1372_sout5_mux_enum);
324 static const struct snd_kcontrol_new adau1372_sout6_mux_control =
325         SOC_DAPM_ENUM("Serial Output 6 Capture Mux", adau1372_sout6_mux_enum);
326 static const struct snd_kcontrol_new adau1372_sout7_mux_control =
327         SOC_DAPM_ENUM("Serial Output 7 Capture Mux", adau1372_sout7_mux_enum);
328
329 static const char * const adau1372_asrci_mux_text[] = {
330         "Serial Input 0+1",
331         "Serial Input 2+3",
332         "Serial Input 4+5",
333         "Serial Input 6+7",
334 };
335
336 static SOC_ENUM_SINGLE_DECL(adau1372_asrci_mux_enum,
337         ADAU1372_REG_ASRC_MODE, 2, adau1372_asrci_mux_text);
338
339 static const struct snd_kcontrol_new adau1372_asrci_mux_control =
340         SOC_DAPM_ENUM("Input ASRC Playback Mux", adau1372_asrci_mux_enum);
341
342 static const unsigned int adau1372_dac_mux_values[] = {
343         12, 13
344 };
345
346 static const char * const adau1372_dac_mux_text[] = {
347         "Input ASRC0",
348         "Input ASRC1",
349 };
350
351 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_dac0_mux_enum, ADAU1372_REG_DAC_SOURCE,
352                                   0, 0xf, adau1372_dac_mux_text, adau1372_dac_mux_values);
353 static SOC_VALUE_ENUM_SINGLE_DECL(adau1372_dac1_mux_enum, ADAU1372_REG_DAC_SOURCE,
354                                   4, 0xf, adau1372_dac_mux_text, adau1372_dac_mux_values);
355
356 static const struct snd_kcontrol_new adau1372_dac0_mux_control =
357         SOC_DAPM_ENUM("DAC 0 Playback Mux", adau1372_dac0_mux_enum);
358 static const struct snd_kcontrol_new adau1372_dac1_mux_control =
359         SOC_DAPM_ENUM("DAC 1 Playback Mux", adau1372_dac1_mux_enum);
360
361 static const struct snd_soc_dapm_widget adau1372_dapm_widgets[] = {
362         SND_SOC_DAPM_INPUT("AIN0"),
363         SND_SOC_DAPM_INPUT("AIN1"),
364         SND_SOC_DAPM_INPUT("AIN2"),
365         SND_SOC_DAPM_INPUT("AIN3"),
366         SND_SOC_DAPM_INPUT("DMIC0_1"),
367         SND_SOC_DAPM_INPUT("DMIC2_3"),
368
369         SND_SOC_DAPM_SUPPLY("MICBIAS0", ADAU1372_REG_MICBIAS, 4, 0, NULL, 0),
370         SND_SOC_DAPM_SUPPLY("MICBIAS1", ADAU1372_REG_MICBIAS, 5, 0, NULL, 0),
371
372         SND_SOC_DAPM_PGA("PGA0", ADAU1372_REG_PGA_CTRL(0), 6, 0, NULL, 0),
373         SND_SOC_DAPM_PGA("PGA1", ADAU1372_REG_PGA_CTRL(1), 6, 0, NULL, 0),
374         SND_SOC_DAPM_PGA("PGA2", ADAU1372_REG_PGA_CTRL(2), 6, 0, NULL, 0),
375         SND_SOC_DAPM_PGA("PGA3", ADAU1372_REG_PGA_CTRL(3), 6, 0, NULL, 0),
376         SND_SOC_DAPM_ADC("ADC0", NULL, ADAU1372_REG_ADC_CTRL2, 0, 0),
377         SND_SOC_DAPM_ADC("ADC1", NULL, ADAU1372_REG_ADC_CTRL2, 1, 0),
378         SND_SOC_DAPM_ADC("ADC2", NULL, ADAU1372_REG_ADC_CTRL3, 0, 0),
379         SND_SOC_DAPM_ADC("ADC3", NULL, ADAU1372_REG_ADC_CTRL3, 1, 0),
380
381         SND_SOC_DAPM_SUPPLY("ADC0 Filter", ADAU1372_REG_DECIM_PWR, 0, 0, NULL, 0),
382         SND_SOC_DAPM_SUPPLY("ADC1 Filter", ADAU1372_REG_DECIM_PWR, 1, 0, NULL, 0),
383         SND_SOC_DAPM_SUPPLY("ADC2 Filter", ADAU1372_REG_DECIM_PWR, 2, 0, NULL, 0),
384         SND_SOC_DAPM_SUPPLY("ADC3 Filter", ADAU1372_REG_DECIM_PWR, 3, 0, NULL, 0),
385         SND_SOC_DAPM_SUPPLY("Output ASRC0 Decimator", ADAU1372_REG_DECIM_PWR, 4, 0, NULL, 0),
386         SND_SOC_DAPM_SUPPLY("Output ASRC1 Decimator", ADAU1372_REG_DECIM_PWR, 5, 0, NULL, 0),
387         SND_SOC_DAPM_SUPPLY("Output ASRC2 Decimator", ADAU1372_REG_DECIM_PWR, 6, 0, NULL, 0),
388         SND_SOC_DAPM_SUPPLY("Output ASRC3 Decimator", ADAU1372_REG_DECIM_PWR, 7, 0, NULL, 0),
389
390         SND_SOC_DAPM_MUX("Decimator0 Mux", SND_SOC_NOPM, 0, 0, &adau1372_decimator0_1_mux_control),
391         SND_SOC_DAPM_MUX("Decimator1 Mux", SND_SOC_NOPM, 0, 0, &adau1372_decimator0_1_mux_control),
392         SND_SOC_DAPM_MUX("Decimator2 Mux", SND_SOC_NOPM, 0, 0, &adau1372_decimator2_3_mux_control),
393         SND_SOC_DAPM_MUX("Decimator3 Mux", SND_SOC_NOPM, 0, 0, &adau1372_decimator2_3_mux_control),
394
395         SND_SOC_DAPM_MUX("Output ASRC0 Mux", SND_SOC_NOPM, 0, 0, &adau1372_asrco0_mux_control),
396         SND_SOC_DAPM_MUX("Output ASRC1 Mux", SND_SOC_NOPM, 0, 0, &adau1372_asrco1_mux_control),
397         SND_SOC_DAPM_MUX("Output ASRC2 Mux", SND_SOC_NOPM, 0, 0, &adau1372_asrco2_mux_control),
398         SND_SOC_DAPM_MUX("Output ASRC3 Mux", SND_SOC_NOPM, 0, 0, &adau1372_asrco3_mux_control),
399         SND_SOC_DAPM_MUX("Serial Output 0 Capture Mux", SND_SOC_NOPM, 0, 0,
400                          &adau1372_sout0_mux_control),
401         SND_SOC_DAPM_MUX("Serial Output 1 Capture Mux", SND_SOC_NOPM, 0, 0,
402                          &adau1372_sout1_mux_control),
403         SND_SOC_DAPM_MUX("Serial Output 2 Capture Mux", SND_SOC_NOPM, 0, 0,
404                          &adau1372_sout2_mux_control),
405         SND_SOC_DAPM_MUX("Serial Output 3 Capture Mux", SND_SOC_NOPM, 0, 0,
406                          &adau1372_sout3_mux_control),
407         SND_SOC_DAPM_MUX("Serial Output 4 Capture Mux", SND_SOC_NOPM, 0, 0,
408                          &adau1372_sout4_mux_control),
409         SND_SOC_DAPM_MUX("Serial Output 5 Capture Mux", SND_SOC_NOPM, 0, 0,
410                          &adau1372_sout5_mux_control),
411         SND_SOC_DAPM_MUX("Serial Output 6 Capture Mux", SND_SOC_NOPM, 0, 0,
412                          &adau1372_sout6_mux_control),
413         SND_SOC_DAPM_MUX("Serial Output 7 Capture Mux", SND_SOC_NOPM, 0, 0,
414                          &adau1372_sout7_mux_control),
415
416         SND_SOC_DAPM_AIF_IN("Serial Input 0", NULL, 0, SND_SOC_NOPM, 0, 0),
417         SND_SOC_DAPM_AIF_IN("Serial Input 1", NULL, 1, SND_SOC_NOPM, 0, 0),
418         SND_SOC_DAPM_AIF_IN("Serial Input 2", NULL, 2, SND_SOC_NOPM, 0, 0),
419         SND_SOC_DAPM_AIF_IN("Serial Input 3", NULL, 3, SND_SOC_NOPM, 0, 0),
420         SND_SOC_DAPM_AIF_IN("Serial Input 4", NULL, 4, SND_SOC_NOPM, 0, 0),
421         SND_SOC_DAPM_AIF_IN("Serial Input 5", NULL, 5, SND_SOC_NOPM, 0, 0),
422         SND_SOC_DAPM_AIF_IN("Serial Input 6", NULL, 6, SND_SOC_NOPM, 0, 0),
423         SND_SOC_DAPM_AIF_IN("Serial Input 7", NULL, 7, SND_SOC_NOPM, 0, 0),
424
425         SND_SOC_DAPM_AIF_OUT("Serial Output 0", NULL, 0, SND_SOC_NOPM, 0, 0),
426         SND_SOC_DAPM_AIF_OUT("Serial Output 1", NULL, 1, SND_SOC_NOPM, 0, 0),
427         SND_SOC_DAPM_AIF_OUT("Serial Output 2", NULL, 2, SND_SOC_NOPM, 0, 0),
428         SND_SOC_DAPM_AIF_OUT("Serial Output 3", NULL, 3, SND_SOC_NOPM, 0, 0),
429         SND_SOC_DAPM_AIF_OUT("Serial Output 4", NULL, 4, SND_SOC_NOPM, 0, 0),
430         SND_SOC_DAPM_AIF_OUT("Serial Output 5", NULL, 5, SND_SOC_NOPM, 0, 0),
431         SND_SOC_DAPM_AIF_OUT("Serial Output 6", NULL, 6, SND_SOC_NOPM, 0, 0),
432         SND_SOC_DAPM_AIF_OUT("Serial Output 7", NULL, 7, SND_SOC_NOPM, 0, 0),
433
434         SND_SOC_DAPM_SUPPLY("Output ASRC Supply", ADAU1372_REG_ASRC_MODE, 1, 0, NULL, 0),
435         SND_SOC_DAPM_SUPPLY("Input ASRC Supply", ADAU1372_REG_ASRC_MODE, 0, 0, NULL, 0),
436
437         SND_SOC_DAPM_SUPPLY("DAC1 Modulator", ADAU1372_REG_INTERP_PWR, 3, 0, NULL, 0),
438         SND_SOC_DAPM_SUPPLY("DAC0 Modulator", ADAU1372_REG_INTERP_PWR, 2, 0, NULL, 0),
439         SND_SOC_DAPM_SUPPLY("Input ASRC1 Interpolator", ADAU1372_REG_INTERP_PWR, 1, 0, NULL, 0),
440         SND_SOC_DAPM_SUPPLY("Input ASRC0 Interpolator", ADAU1372_REG_INTERP_PWR, 0, 0, NULL, 0),
441
442         SND_SOC_DAPM_MUX("Input ASRC0 Mux", SND_SOC_NOPM, 0, 0, &adau1372_asrci_mux_control),
443         SND_SOC_DAPM_MUX("Input ASRC1 Mux", SND_SOC_NOPM, 0, 0, &adau1372_asrci_mux_control),
444
445         SND_SOC_DAPM_MUX("DAC 0 Mux", SND_SOC_NOPM, 0, 0, &adau1372_dac0_mux_control),
446         SND_SOC_DAPM_MUX("DAC 1 Mux", SND_SOC_NOPM, 0, 0, &adau1372_dac1_mux_control),
447
448         SND_SOC_DAPM_DAC("DAC0", NULL, ADAU1372_REG_DAC_CTRL, 0, 0),
449         SND_SOC_DAPM_DAC("DAC1", NULL, ADAU1372_REG_DAC_CTRL, 1, 0),
450
451         SND_SOC_DAPM_OUT_DRV("OP_STAGE_LP", ADAU1372_REG_OP_STAGE_CTRL, 0, 1, NULL, 0),
452         SND_SOC_DAPM_OUT_DRV("OP_STAGE_LN", ADAU1372_REG_OP_STAGE_CTRL, 1, 1, NULL, 0),
453         SND_SOC_DAPM_OUT_DRV("OP_STAGE_RP", ADAU1372_REG_OP_STAGE_CTRL, 2, 1, NULL, 0),
454         SND_SOC_DAPM_OUT_DRV("OP_STAGE_RN", ADAU1372_REG_OP_STAGE_CTRL, 3, 1, NULL, 0),
455
456         SND_SOC_DAPM_OUTPUT("HPOUTL"),
457         SND_SOC_DAPM_OUTPUT("HPOUTR"),
458 };
459
460 #define ADAU1372_SOUT_ROUTES(x) \
461         { "Serial Output " #x " Capture Mux", "Output ASRC0", "Output ASRC0 Mux" }, \
462         { "Serial Output " #x " Capture Mux", "Output ASRC1", "Output ASRC1 Mux" }, \
463         { "Serial Output " #x " Capture Mux", "Output ASRC2", "Output ASRC2 Mux" }, \
464         { "Serial Output " #x " Capture Mux", "Output ASRC3", "Output ASRC3 Mux" }, \
465         { "Serial Output " #x " Capture Mux", "Serial Input 0", "Serial Input 0" }, \
466         { "Serial Output " #x " Capture Mux", "Serial Input 1", "Serial Input 1" }, \
467         { "Serial Output " #x " Capture Mux", "Serial Input 2", "Serial Input 2" }, \
468         { "Serial Output " #x " Capture Mux", "Serial Input 3", "Serial Input 3" }, \
469         { "Serial Output " #x " Capture Mux", "Serial Input 4", "Serial Input 4" }, \
470         { "Serial Output " #x " Capture Mux", "Serial Input 5", "Serial Input 5" }, \
471         { "Serial Output " #x " Capture Mux", "Serial Input 6", "Serial Input 6" }, \
472         { "Serial Output " #x " Capture Mux", "Serial Input 7", "Serial Input 7" }, \
473         { "Serial Output " #x, NULL, "Serial Output " #x " Capture Mux" }, \
474         { "Capture", NULL, "Serial Output " #x }
475
476 #define ADAU1372_ASRCO_ROUTES(x) \
477         { "Output ASRC" #x " Mux", "Decimator0", "Decimator0 Mux" }, \
478         { "Output ASRC" #x " Mux", "Decimator1", "Decimator1 Mux" }, \
479         { "Output ASRC" #x " Mux", "Decimator2", "Decimator2 Mux" }, \
480         { "Output ASRC" #x " Mux", "Decimator3", "Decimator3 Mux" }
481
482 static const struct snd_soc_dapm_route adau1372_dapm_routes[] = {
483         { "PGA0", NULL, "AIN0" },
484         { "PGA1", NULL, "AIN1" },
485         { "PGA2", NULL, "AIN2" },
486         { "PGA3", NULL, "AIN3" },
487
488         { "ADC0", NULL, "PGA0" },
489         { "ADC1", NULL, "PGA1" },
490         { "ADC2", NULL, "PGA2" },
491         { "ADC3", NULL, "PGA3" },
492
493         { "Decimator0 Mux", "ADC", "ADC0" },
494         { "Decimator1 Mux", "ADC", "ADC1" },
495         { "Decimator2 Mux", "ADC", "ADC2" },
496         { "Decimator3 Mux", "ADC", "ADC3" },
497
498         { "Decimator0 Mux", "DMIC", "DMIC0_1" },
499         { "Decimator1 Mux", "DMIC", "DMIC0_1" },
500         { "Decimator2 Mux", "DMIC", "DMIC2_3" },
501         { "Decimator3 Mux", "DMIC", "DMIC2_3" },
502
503         { "Decimator0 Mux", NULL, "ADC0 Filter" },
504         { "Decimator1 Mux", NULL, "ADC1 Filter" },
505         { "Decimator2 Mux", NULL, "ADC2 Filter" },
506         { "Decimator3 Mux", NULL, "ADC3 Filter" },
507
508         { "Output ASRC0 Mux", NULL, "Output ASRC Supply" },
509         { "Output ASRC1 Mux", NULL, "Output ASRC Supply" },
510         { "Output ASRC2 Mux", NULL, "Output ASRC Supply" },
511         { "Output ASRC3 Mux", NULL, "Output ASRC Supply" },
512         { "Output ASRC0 Mux", NULL, "Output ASRC0 Decimator" },
513         { "Output ASRC1 Mux", NULL, "Output ASRC1 Decimator" },
514         { "Output ASRC2 Mux", NULL, "Output ASRC2 Decimator" },
515         { "Output ASRC3 Mux", NULL, "Output ASRC3 Decimator" },
516
517         ADAU1372_ASRCO_ROUTES(0),
518         ADAU1372_ASRCO_ROUTES(1),
519         ADAU1372_ASRCO_ROUTES(2),
520         ADAU1372_ASRCO_ROUTES(3),
521
522         ADAU1372_SOUT_ROUTES(0),
523         ADAU1372_SOUT_ROUTES(1),
524         ADAU1372_SOUT_ROUTES(2),
525         ADAU1372_SOUT_ROUTES(3),
526         ADAU1372_SOUT_ROUTES(4),
527         ADAU1372_SOUT_ROUTES(5),
528         ADAU1372_SOUT_ROUTES(6),
529         ADAU1372_SOUT_ROUTES(7),
530
531         { "Serial Input 0", NULL, "Playback" },
532         { "Serial Input 1", NULL, "Playback" },
533         { "Serial Input 2", NULL, "Playback" },
534         { "Serial Input 3", NULL, "Playback" },
535         { "Serial Input 4", NULL, "Playback" },
536         { "Serial Input 5", NULL, "Playback" },
537         { "Serial Input 6", NULL, "Playback" },
538         { "Serial Input 7", NULL, "Playback" },
539
540         { "Input ASRC0 Mux", "Serial Input 0+1", "Serial Input 0" },
541         { "Input ASRC1 Mux", "Serial Input 0+1", "Serial Input 1" },
542         { "Input ASRC0 Mux", "Serial Input 2+3", "Serial Input 2" },
543         { "Input ASRC1 Mux", "Serial Input 2+3", "Serial Input 3" },
544         { "Input ASRC0 Mux", "Serial Input 4+5", "Serial Input 4" },
545         { "Input ASRC1 Mux", "Serial Input 4+5", "Serial Input 5" },
546         { "Input ASRC0 Mux", "Serial Input 6+7", "Serial Input 6" },
547         { "Input ASRC1 Mux", "Serial Input 6+7", "Serial Input 7" },
548         { "Input ASRC0 Mux", NULL, "Input ASRC Supply" },
549         { "Input ASRC1 Mux", NULL, "Input ASRC Supply" },
550         { "Input ASRC0 Mux", NULL, "Input ASRC0 Interpolator" },
551         { "Input ASRC1 Mux", NULL, "Input ASRC1 Interpolator" },
552
553         { "DAC 0 Mux", "Input ASRC0", "Input ASRC0 Mux" },
554         { "DAC 0 Mux", "Input ASRC1", "Input ASRC1 Mux" },
555         { "DAC 1 Mux", "Input ASRC0", "Input ASRC0 Mux" },
556         { "DAC 1 Mux", "Input ASRC1", "Input ASRC1 Mux" },
557
558         { "DAC0", NULL, "DAC 0 Mux" },
559         { "DAC1", NULL, "DAC 1 Mux" },
560         { "DAC0", NULL, "DAC0 Modulator" },
561         { "DAC1", NULL, "DAC1 Modulator" },
562
563         { "OP_STAGE_LP", NULL, "DAC0" },
564         { "OP_STAGE_LN", NULL, "DAC0" },
565         { "OP_STAGE_RP", NULL, "DAC1" },
566         { "OP_STAGE_RN", NULL, "DAC1" },
567
568         { "HPOUTL", NULL, "OP_STAGE_LP" },
569         { "HPOUTL", NULL, "OP_STAGE_LN" },
570         { "HPOUTR", NULL, "OP_STAGE_RP" },
571         { "HPOUTR", NULL, "OP_STAGE_RN" },
572 };
573
574 static int adau1372_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
575 {
576         struct adau1372 *adau1372 = snd_soc_dai_get_drvdata(dai);
577         unsigned int sai0 = 0, sai1 = 0;
578         bool invert_lrclk = false;
579
580         switch (fmt & SND_SOC_DAIFMT_CLOCK_PROVIDER_MASK) {
581         case SND_SOC_DAIFMT_CBP_CFP:
582                 adau1372->clock_provider = true;
583                 sai1 |= ADAU1372_SAI1_MS;
584                 break;
585         case SND_SOC_DAIFMT_CBC_CFC:
586                 adau1372->clock_provider = false;
587                 break;
588         default:
589                 return -EINVAL;
590         }
591
592         switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
593         case SND_SOC_DAIFMT_NB_NF:
594                 invert_lrclk = false;
595                 break;
596         case SND_SOC_DAIFMT_NB_IF:
597                 invert_lrclk = true;
598                 break;
599         case SND_SOC_DAIFMT_IB_NF:
600                 invert_lrclk = false;
601                 sai1 |= ADAU1372_SAI1_BCLKEDGE;
602                 break;
603         case SND_SOC_DAIFMT_IB_IF:
604                 invert_lrclk = true;
605                 sai1 |= ADAU1372_SAI1_BCLKEDGE;
606                 break;
607         }
608
609         switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
610         case SND_SOC_DAIFMT_I2S:
611                 sai0 |= ADAU1372_SAI0_DELAY1;
612                 break;
613         case SND_SOC_DAIFMT_LEFT_J:
614                 sai0 |= ADAU1372_SAI0_DELAY0;
615                 invert_lrclk = !invert_lrclk;
616                 break;
617         case SND_SOC_DAIFMT_DSP_A:
618                 sai0 |= ADAU1372_SAI0_DELAY1;
619                 sai1 |= ADAU1372_SAI1_LR_MODE;
620                 break;
621         case SND_SOC_DAIFMT_DSP_B:
622                 sai0 |= ADAU1372_SAI0_DELAY0;
623                 sai1 |= ADAU1372_SAI1_LR_MODE;
624                 break;
625         }
626
627         if (invert_lrclk)
628                 sai1 |= ADAU1372_SAI1_LR_POL;
629
630         regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI0, ADAU1372_SAI0_DELAY_MASK, sai0);
631         regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI1,
632                            ADAU1372_SAI1_MS | ADAU1372_SAI1_BCLKEDGE |
633                            ADAU1372_SAI1_LR_MODE | ADAU1372_SAI1_LR_POL, sai1);
634
635         return 0;
636 }
637
638 static int adau1372_hw_params(struct snd_pcm_substream *substream,
639                               struct snd_pcm_hw_params *params, struct snd_soc_dai *dai)
640 {
641         struct adau1372 *adau1372 = snd_soc_dai_get_drvdata(dai);
642         unsigned int rate = params_rate(params);
643         unsigned int slot_width;
644         unsigned int sai0, sai1;
645         unsigned int i;
646
647         for (i = 0; i < ARRAY_SIZE(adau1372_rates); i++) {
648                 if (rate == adau1372_rates[i])
649                         break;
650         }
651
652         if (i == ARRAY_SIZE(adau1372_rates))
653                 return -EINVAL;
654
655         sai0 = i;
656
657         slot_width = adau1372->slot_width;
658         if (slot_width == 0)
659                 slot_width = params_width(params);
660
661         switch (slot_width) {
662         case 16:
663                 sai1 = ADAU1372_SAI1_BCLKRATE;
664                 break;
665         case 32:
666                 sai1 = 0;
667                 break;
668         default:
669                 return -EINVAL;
670         }
671
672         regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI0, ADAU1372_SAI0_FS_MASK, sai0);
673         regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI1, ADAU1372_SAI1_BCLKRATE, sai1);
674
675         return 0;
676 }
677
678 static int adau1372_set_tdm_slot(struct snd_soc_dai *dai, unsigned int tx_mask,
679                                  unsigned int rx_mask, int slots, int width)
680 {
681         struct adau1372 *adau1372 = snd_soc_dai_get_drvdata(dai);
682         unsigned int sai0, sai1;
683
684         /* I2S mode */
685         if (slots == 0) {
686                 /* The other settings dont matter in I2S mode */
687                 regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI0,
688                                    ADAU1372_SAI0_SAI_MASK, ADAU1372_SAI0_SAI_I2S);
689                 adau1372->rate_constraints.mask = ADAU1372_RATE_MASK_TDM2;
690                 adau1372->slot_width = 0;
691                 return 0;
692         }
693
694         /* We have 8 channels anything outside that is not supported */
695         if ((tx_mask & ~0xff) != 0 || (rx_mask & ~0xff) != 0)
696                 return -EINVAL;
697
698         switch (width) {
699         case 16:
700                 sai1 = ADAU1372_SAI1_BCLK_TDMC;
701                 break;
702         case 32:
703                 sai1 = 0;
704                 break;
705         default:
706                 return -EINVAL;
707         }
708
709         switch (slots) {
710         case 2:
711                 sai0 = ADAU1372_SAI0_SAI_TDM2;
712                 adau1372->rate_constraints.mask = ADAU1372_RATE_MASK_TDM2;
713                 break;
714         case 4:
715                 sai0 = ADAU1372_SAI0_SAI_TDM4;
716                 if (adau1372->clock_provider)
717                         adau1372->rate_constraints.mask = ADAU1372_RATE_MASK_TDM4_MASTER;
718                 else
719                         adau1372->rate_constraints.mask = ADAU1372_RATE_MASK_TDM4;
720                 break;
721         case 8:
722                 sai0 = ADAU1372_SAI0_SAI_TDM8;
723                 adau1372->rate_constraints.mask = ADAU1372_RATE_MASK_TDM8;
724                 break;
725         default:
726                 return -EINVAL;
727         }
728
729         adau1372->slot_width = width;
730
731         regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI0, ADAU1372_SAI0_SAI_MASK, sai0);
732         regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI1, ADAU1372_SAI1_BCLK_TDMC, sai1);
733
734         /* Mask is inverted in hardware */
735         regmap_write(adau1372->regmap, ADAU1372_REG_SOUT_CTRL, ~tx_mask);
736
737         return 0;
738 }
739
740 static int adau1372_set_tristate(struct snd_soc_dai *dai, int tristate)
741 {
742         struct adau1372 *adau1372 = snd_soc_dai_get_drvdata(dai);
743         unsigned int sai1;
744
745         if (tristate)
746                 sai1 = ADAU1372_SAI1_TDM_TS;
747         else
748                 sai1 = 0;
749
750         return regmap_update_bits(adau1372->regmap, ADAU1372_REG_SAI1, ADAU1372_SAI1_TDM_TS, sai1);
751 }
752
753 static int adau1372_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai)
754 {
755         struct adau1372 *adau1372 = snd_soc_dai_get_drvdata(dai);
756
757         snd_pcm_hw_constraint_list(substream->runtime, 0, SNDRV_PCM_HW_PARAM_RATE,
758                                    &adau1372->rate_constraints);
759
760         return 0;
761 }
762
763 static void adau1372_enable_pll(struct adau1372 *adau1372)
764 {
765         unsigned int val, timeout = 0;
766         int ret;
767
768         regmap_update_bits(adau1372->regmap, ADAU1372_REG_CLK_CTRL,
769                            ADAU1372_CLK_CTRL_PLL_EN, ADAU1372_CLK_CTRL_PLL_EN);
770         do {
771                 /* Takes about 1ms to lock */
772                 usleep_range(1000, 2000);
773                 ret = regmap_read(adau1372->regmap, ADAU1372_REG_PLL(5), &val);
774                 if (ret)
775                         break;
776                 timeout++;
777         } while (!(val & 1) && timeout < 3);
778
779         if (ret < 0 || !(val & 1))
780                 dev_err(adau1372->dev, "Failed to lock PLL\n");
781 }
782
783 static void adau1372_set_power(struct adau1372 *adau1372, bool enable)
784 {
785         if (adau1372->enabled == enable)
786                 return;
787
788         if (enable) {
789                 unsigned int clk_ctrl = ADAU1372_CLK_CTRL_MCLK_EN;
790
791                 clk_prepare_enable(adau1372->mclk);
792                 if (adau1372->pd_gpio)
793                         gpiod_set_value(adau1372->pd_gpio, 0);
794
795                 if (adau1372->switch_mode)
796                         adau1372->switch_mode(adau1372->dev);
797
798                 regcache_cache_only(adau1372->regmap, false);
799
800                 /*
801                  * Clocks needs to be enabled before any other register can be
802                  * accessed.
803                  */
804                 if (adau1372->use_pll) {
805                         adau1372_enable_pll(adau1372);
806                         clk_ctrl |= ADAU1372_CLK_CTRL_CLKSRC;
807                 }
808
809                 regmap_update_bits(adau1372->regmap, ADAU1372_REG_CLK_CTRL,
810                                    ADAU1372_CLK_CTRL_MCLK_EN | ADAU1372_CLK_CTRL_CLKSRC, clk_ctrl);
811                 regcache_sync(adau1372->regmap);
812         } else {
813                 if (adau1372->pd_gpio) {
814                         /*
815                          * This will turn everything off and reset the register
816                          * map. No need to do any register writes to manually
817                          * turn things off.
818                          */
819                         gpiod_set_value(adau1372->pd_gpio, 1);
820                         regcache_mark_dirty(adau1372->regmap);
821                 } else {
822                         regmap_update_bits(adau1372->regmap, ADAU1372_REG_CLK_CTRL,
823                                            ADAU1372_CLK_CTRL_MCLK_EN | ADAU1372_CLK_CTRL_PLL_EN, 0);
824                 }
825                 clk_disable_unprepare(adau1372->mclk);
826                 regcache_cache_only(adau1372->regmap, true);
827         }
828
829         adau1372->enabled = enable;
830 }
831
832 static int adau1372_set_bias_level(struct snd_soc_component *component,
833                                    enum snd_soc_bias_level level)
834 {
835         struct adau1372 *adau1372 = snd_soc_component_get_drvdata(component);
836
837         switch (level) {
838         case SND_SOC_BIAS_ON:
839                 break;
840         case SND_SOC_BIAS_PREPARE:
841                 break;
842         case SND_SOC_BIAS_STANDBY:
843                 adau1372_set_power(adau1372, true);
844                 break;
845         case SND_SOC_BIAS_OFF:
846                 adau1372_set_power(adau1372, false);
847                 break;
848         }
849
850         return 0;
851 }
852
853 static const struct snd_soc_component_driver adau1372_driver = {
854         .set_bias_level = adau1372_set_bias_level,
855         .controls = adau1372_controls,
856         .num_controls = ARRAY_SIZE(adau1372_controls),
857         .dapm_widgets = adau1372_dapm_widgets,
858         .num_dapm_widgets = ARRAY_SIZE(adau1372_dapm_widgets),
859         .dapm_routes = adau1372_dapm_routes,
860         .num_dapm_routes = ARRAY_SIZE(adau1372_dapm_routes),
861         .endianness = 1,
862 };
863
864 static const struct snd_soc_dai_ops adau1372_dai_ops = {
865         .set_fmt = adau1372_set_dai_fmt,
866         .set_tdm_slot = adau1372_set_tdm_slot,
867         .set_tristate = adau1372_set_tristate,
868         .hw_params = adau1372_hw_params,
869         .startup = adau1372_startup,
870 };
871
872 #define ADAU1372_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |     SNDRV_PCM_FMTBIT_S32_LE)
873
874 static struct snd_soc_dai_driver adau1372_dai_driver = {
875         .name = "adau1372",
876         .playback = {
877                 .stream_name = "Playback",
878                 .channels_min = 2,
879                 .channels_max = 8,
880                 .rates = SNDRV_PCM_RATE_KNOT,
881                 .formats = ADAU1372_FORMATS,
882                 .sig_bits = 24,
883         },
884         .capture = {
885                 .stream_name = "Capture",
886                 .channels_min = 2,
887                 .channels_max = 8,
888                 .rates = SNDRV_PCM_RATE_KNOT,
889                 .formats = ADAU1372_FORMATS,
890                 .sig_bits = 24,
891         },
892         .ops = &adau1372_dai_ops,
893         .symmetric_rate = 1,
894 };
895
896 static int adau1372_setup_pll(struct adau1372 *adau1372, unsigned int rate)
897 {
898         u8 regs[5];
899         unsigned int i;
900         int ret;
901
902         ret = adau_calc_pll_cfg(rate, 49152000, regs);
903         if (ret < 0)
904                 return ret;
905
906         for (i = 0; i < ARRAY_SIZE(regs); i++)
907                 regmap_write(adau1372->regmap, ADAU1372_REG_PLL(i), regs[i]);
908
909         return 0;
910 }
911
912 int adau1372_probe(struct device *dev, struct regmap *regmap,
913                    void (*switch_mode)(struct device *dev))
914 {
915         struct adau1372 *adau1372;
916         unsigned int clk_ctrl;
917         unsigned long rate;
918         int ret;
919
920         if (IS_ERR(regmap))
921                 return PTR_ERR(regmap);
922
923         adau1372 = devm_kzalloc(dev, sizeof(*adau1372), GFP_KERNEL);
924         if (!adau1372)
925                 return -ENOMEM;
926
927         adau1372->clk = devm_clk_get(dev, "mclk");
928         if (IS_ERR(adau1372->clk))
929                 return PTR_ERR(adau1372->clk);
930
931         adau1372->pd_gpio = devm_gpiod_get_optional(dev, "powerdown", GPIOD_OUT_HIGH);
932         if (IS_ERR(adau1372->pd_gpio))
933                 return PTR_ERR(adau1372->pd_gpio);
934
935         adau1372->regmap = regmap;
936         adau1372->switch_mode = switch_mode;
937         adau1372->dev = dev;
938         adau1372->rate_constraints.list = adau1372_rates;
939         adau1372->rate_constraints.count = ARRAY_SIZE(adau1372_rates);
940         adau1372->rate_constraints.mask = ADAU1372_RATE_MASK_TDM2;
941
942         dev_set_drvdata(dev, adau1372);
943
944         /*
945          * The datasheet says that the internal MCLK always needs to run at
946          * 12.288MHz. Automatically choose a valid configuration from the
947          * external clock.
948          */
949         rate = clk_get_rate(adau1372->clk);
950
951         switch (rate) {
952         case 12288000:
953                 clk_ctrl = ADAU1372_CLK_CTRL_CC_MDIV;
954                 break;
955         case 24576000:
956                 clk_ctrl = 0;
957                 break;
958         default:
959                 clk_ctrl = 0;
960                 ret = adau1372_setup_pll(adau1372, rate);
961                 if (ret < 0)
962                         return ret;
963                 adau1372->use_pll = true;
964                 break;
965         }
966
967         /*
968          * Most of the registers are inaccessible unless the internal clock is
969          * enabled.
970          */
971         regcache_cache_only(regmap, true);
972
973         regmap_update_bits(regmap, ADAU1372_REG_CLK_CTRL, ADAU1372_CLK_CTRL_CC_MDIV, clk_ctrl);
974
975         /*
976          * No pinctrl support yet, put the multi-purpose pins in the most
977          * sensible mode for general purpose CODEC operation.
978          */
979         regmap_write(regmap, ADAU1372_REG_MODE_MP(1), 0x00); /* SDATA OUT */
980         regmap_write(regmap, ADAU1372_REG_MODE_MP(6), 0x12); /* CLOCKOUT */
981
982         regmap_write(regmap, ADAU1372_REG_OP_STAGE_MUTE, 0x0);
983
984         regmap_write(regmap, 0x7, 0x01); /* CLOCK OUT */
985
986         return  devm_snd_soc_register_component(dev, &adau1372_driver, &adau1372_dai_driver, 1);
987 }
988 EXPORT_SYMBOL(adau1372_probe);
989
990 static const struct reg_default adau1372_reg_defaults[] = {
991         { ADAU1372_REG_CLK_CTRL,                0x00 },
992         { ADAU1372_REG_PLL(0),                  0x00 },
993         { ADAU1372_REG_PLL(1),                  0x00 },
994         { ADAU1372_REG_PLL(2),                  0x00 },
995         { ADAU1372_REG_PLL(3),                  0x00 },
996         { ADAU1372_REG_PLL(4),                  0x00 },
997         { ADAU1372_REG_PLL(5),                  0x00 },
998         { ADAU1372_REG_DAC_SOURCE,              0x10 },
999         { ADAU1372_REG_SOUT_SOURCE_0_1,         0x54 },
1000         { ADAU1372_REG_SOUT_SOURCE_2_3,         0x76 },
1001         { ADAU1372_REG_SOUT_SOURCE_4_5,         0x54 },
1002         { ADAU1372_REG_SOUT_SOURCE_6_7,         0x76 },
1003         { ADAU1372_REG_ADC_SDATA_CH,            0x04 },
1004         { ADAU1372_REG_ASRCO_SOURCE_0_1,        0x10 },
1005         { ADAU1372_REG_ASRCO_SOURCE_2_3,        0x32 },
1006         { ADAU1372_REG_ASRC_MODE,               0x00 },
1007         { ADAU1372_REG_ADC_CTRL0,               0x19 },
1008         { ADAU1372_REG_ADC_CTRL1,               0x19 },
1009         { ADAU1372_REG_ADC_CTRL2,               0x00 },
1010         { ADAU1372_REG_ADC_CTRL3,               0x00 },
1011         { ADAU1372_REG_ADC_VOL(0),              0x00 },
1012         { ADAU1372_REG_ADC_VOL(1),              0x00 },
1013         { ADAU1372_REG_ADC_VOL(2),              0x00 },
1014         { ADAU1372_REG_ADC_VOL(3),              0x00 },
1015         { ADAU1372_REG_PGA_CTRL(0),             0x40 },
1016         { ADAU1372_REG_PGA_CTRL(1),             0x40 },
1017         { ADAU1372_REG_PGA_CTRL(2),             0x40 },
1018         { ADAU1372_REG_PGA_CTRL(3),             0x40 },
1019         { ADAU1372_REG_PGA_BOOST,               0x00 },
1020         { ADAU1372_REG_MICBIAS,                 0x00 },
1021         { ADAU1372_REG_DAC_CTRL,                0x18 },
1022         { ADAU1372_REG_DAC_VOL(0),              0x00 },
1023         { ADAU1372_REG_DAC_VOL(1),              0x00 },
1024         { ADAU1372_REG_OP_STAGE_MUTE,           0x0f },
1025         { ADAU1372_REG_SAI0,                    0x00 },
1026         { ADAU1372_REG_SAI1,                    0x00 },
1027         { ADAU1372_REG_SOUT_CTRL,               0x00 },
1028         { ADAU1372_REG_MODE_MP(0),              0x00 },
1029         { ADAU1372_REG_MODE_MP(1),              0x10 },
1030         { ADAU1372_REG_MODE_MP(4),              0x00 },
1031         { ADAU1372_REG_MODE_MP(5),              0x00 },
1032         { ADAU1372_REG_MODE_MP(6),              0x11 },
1033         { ADAU1372_REG_OP_STAGE_CTRL,           0x0f },
1034         { ADAU1372_REG_DECIM_PWR,               0x00 },
1035         { ADAU1372_REG_INTERP_PWR,              0x00 },
1036         { ADAU1372_REG_BIAS_CTRL0,              0x00 },
1037         { ADAU1372_REG_BIAS_CTRL1,              0x00 },
1038 };
1039
1040 static bool adau1372_volatile_register(struct device *dev, unsigned int reg)
1041 {
1042         if (reg == ADAU1372_REG_PLL(5))
1043                 return true;
1044
1045         return false;
1046 }
1047
1048 const struct regmap_config adau1372_regmap_config = {
1049         .val_bits = 8,
1050         .reg_bits = 16,
1051         .max_register = 0x4d,
1052
1053         .reg_defaults = adau1372_reg_defaults,
1054         .num_reg_defaults = ARRAY_SIZE(adau1372_reg_defaults),
1055         .volatile_reg = adau1372_volatile_register,
1056         .cache_type = REGCACHE_RBTREE,
1057 };
1058 EXPORT_SYMBOL_GPL(adau1372_regmap_config);
1059
1060 MODULE_DESCRIPTION("ASoC ADAU1372 CODEC driver");
1061 MODULE_AUTHOR("Lars-Peter Clausen <lars@metafoo.de>");
1062 MODULE_LICENSE("GPL v2");