GNU Linux-libre 4.19.304-gnu1
[releases.git] / sound / soc / codecs / sgtl5000.c
1 // SPDX-License-Identifier: GPL-2.0
2 //
3 // sgtl5000.c  --  SGTL5000 ALSA SoC Audio driver
4 //
5 // Copyright 2010-2011 Freescale Semiconductor, Inc. All Rights Reserved.
6
7 #include <linux/module.h>
8 #include <linux/moduleparam.h>
9 #include <linux/init.h>
10 #include <linux/delay.h>
11 #include <linux/slab.h>
12 #include <linux/pm.h>
13 #include <linux/i2c.h>
14 #include <linux/clk.h>
15 #include <linux/log2.h>
16 #include <linux/regmap.h>
17 #include <linux/regulator/driver.h>
18 #include <linux/regulator/machine.h>
19 #include <linux/regulator/consumer.h>
20 #include <linux/of_device.h>
21 #include <sound/core.h>
22 #include <sound/tlv.h>
23 #include <sound/pcm.h>
24 #include <sound/pcm_params.h>
25 #include <sound/soc.h>
26 #include <sound/soc-dapm.h>
27 #include <sound/initval.h>
28
29 #include "sgtl5000.h"
30
31 #define SGTL5000_DAP_REG_OFFSET 0x0100
32 #define SGTL5000_MAX_REG_OFFSET 0x013A
33
34 /* Delay for the VAG ramp up */
35 #define SGTL5000_VAG_POWERUP_DELAY 500 /* ms */
36 /* Delay for the VAG ramp down */
37 #define SGTL5000_VAG_POWERDOWN_DELAY 500 /* ms */
38
39 #define SGTL5000_OUTPUTS_MUTE (SGTL5000_HP_MUTE | SGTL5000_LINE_OUT_MUTE)
40
41 /* default value of sgtl5000 registers */
42 static const struct reg_default sgtl5000_reg_defaults[] = {
43         { SGTL5000_CHIP_DIG_POWER,              0x0000 },
44         { SGTL5000_CHIP_I2S_CTRL,               0x0010 },
45         { SGTL5000_CHIP_SSS_CTRL,               0x0010 },
46         { SGTL5000_CHIP_ADCDAC_CTRL,            0x020c },
47         { SGTL5000_CHIP_DAC_VOL,                0x3c3c },
48         { SGTL5000_CHIP_PAD_STRENGTH,           0x015f },
49         { SGTL5000_CHIP_ANA_ADC_CTRL,           0x0000 },
50         { SGTL5000_CHIP_ANA_HP_CTRL,            0x1818 },
51         { SGTL5000_CHIP_ANA_CTRL,               0x0111 },
52         { SGTL5000_CHIP_REF_CTRL,               0x0000 },
53         { SGTL5000_CHIP_MIC_CTRL,               0x0000 },
54         { SGTL5000_CHIP_LINE_OUT_CTRL,          0x0000 },
55         { SGTL5000_CHIP_LINE_OUT_VOL,           0x0404 },
56         { SGTL5000_CHIP_PLL_CTRL,               0x5000 },
57         { SGTL5000_CHIP_CLK_TOP_CTRL,           0x0000 },
58         { SGTL5000_CHIP_ANA_STATUS,             0x0000 },
59         { SGTL5000_CHIP_SHORT_CTRL,             0x0000 },
60         { SGTL5000_CHIP_ANA_TEST2,              0x0000 },
61         { SGTL5000_DAP_CTRL,                    0x0000 },
62         { SGTL5000_DAP_PEQ,                     0x0000 },
63         { SGTL5000_DAP_BASS_ENHANCE,            0x0040 },
64         { SGTL5000_DAP_BASS_ENHANCE_CTRL,       0x051f },
65         { SGTL5000_DAP_AUDIO_EQ,                0x0000 },
66         { SGTL5000_DAP_SURROUND,                0x0040 },
67         { SGTL5000_DAP_EQ_BASS_BAND0,           0x002f },
68         { SGTL5000_DAP_EQ_BASS_BAND1,           0x002f },
69         { SGTL5000_DAP_EQ_BASS_BAND2,           0x002f },
70         { SGTL5000_DAP_EQ_BASS_BAND3,           0x002f },
71         { SGTL5000_DAP_EQ_BASS_BAND4,           0x002f },
72         { SGTL5000_DAP_MAIN_CHAN,               0x8000 },
73         { SGTL5000_DAP_MIX_CHAN,                0x0000 },
74         { SGTL5000_DAP_AVC_CTRL,                0x5100 },
75         { SGTL5000_DAP_AVC_THRESHOLD,           0x1473 },
76         { SGTL5000_DAP_AVC_ATTACK,              0x0028 },
77         { SGTL5000_DAP_AVC_DECAY,               0x0050 },
78 };
79
80 /* AVC: Threshold dB -> register: pre-calculated values */
81 static const u16 avc_thr_db2reg[97] = {
82         0x5168, 0x488E, 0x40AA, 0x39A1, 0x335D, 0x2DC7, 0x28CC, 0x245D, 0x2068,
83         0x1CE2, 0x19BE, 0x16F1, 0x1472, 0x1239, 0x103E, 0x0E7A, 0x0CE6, 0x0B7F,
84         0x0A3F, 0x0922, 0x0824, 0x0741, 0x0677, 0x05C3, 0x0522, 0x0493, 0x0414,
85         0x03A2, 0x033D, 0x02E3, 0x0293, 0x024B, 0x020B, 0x01D2, 0x019F, 0x0172,
86         0x014A, 0x0126, 0x0106, 0x00E9, 0x00D0, 0x00B9, 0x00A5, 0x0093, 0x0083,
87         0x0075, 0x0068, 0x005D, 0x0052, 0x0049, 0x0041, 0x003A, 0x0034, 0x002E,
88         0x0029, 0x0025, 0x0021, 0x001D, 0x001A, 0x0017, 0x0014, 0x0012, 0x0010,
89         0x000E, 0x000D, 0x000B, 0x000A, 0x0009, 0x0008, 0x0007, 0x0006, 0x0005,
90         0x0005, 0x0004, 0x0004, 0x0003, 0x0003, 0x0002, 0x0002, 0x0002, 0x0002,
91         0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0000, 0x0000,
92         0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
93
94 /* regulator supplies for sgtl5000, VDDD is an optional external supply */
95 enum sgtl5000_regulator_supplies {
96         VDDA,
97         VDDIO,
98         VDDD,
99         SGTL5000_SUPPLY_NUM
100 };
101
102 /* vddd is optional supply */
103 static const char *supply_names[SGTL5000_SUPPLY_NUM] = {
104         "VDDA",
105         "VDDIO",
106         "VDDD"
107 };
108
109 #define LDO_VOLTAGE             1200000
110 #define LINREG_VDDD     ((1600 - LDO_VOLTAGE / 1000) / 50)
111
112 enum sgtl5000_micbias_resistor {
113         SGTL5000_MICBIAS_OFF = 0,
114         SGTL5000_MICBIAS_2K = 2,
115         SGTL5000_MICBIAS_4K = 4,
116         SGTL5000_MICBIAS_8K = 8,
117 };
118
119 enum  {
120         I2S_LRCLK_STRENGTH_DISABLE,
121         I2S_LRCLK_STRENGTH_LOW,
122         I2S_LRCLK_STRENGTH_MEDIUM,
123         I2S_LRCLK_STRENGTH_HIGH,
124 };
125
126 enum {
127         HP_POWER_EVENT,
128         DAC_POWER_EVENT,
129         ADC_POWER_EVENT,
130         LAST_POWER_EVENT = ADC_POWER_EVENT
131 };
132
133 /* sgtl5000 private structure in codec */
134 struct sgtl5000_priv {
135         int sysclk;     /* sysclk rate */
136         int master;     /* i2s master or not */
137         int fmt;        /* i2s data format */
138         struct regulator_bulk_data supplies[SGTL5000_SUPPLY_NUM];
139         int num_supplies;
140         struct regmap *regmap;
141         struct clk *mclk;
142         int revision;
143         u8 micbias_resistor;
144         u8 micbias_voltage;
145         u8 lrclk_strength;
146         u16 mute_state[LAST_POWER_EVENT + 1];
147 };
148
149 static inline int hp_sel_input(struct snd_soc_component *component)
150 {
151         return (snd_soc_component_read32(component, SGTL5000_CHIP_ANA_CTRL) &
152                 SGTL5000_HP_SEL_MASK) >> SGTL5000_HP_SEL_SHIFT;
153 }
154
155 static inline u16 mute_output(struct snd_soc_component *component,
156                               u16 mute_mask)
157 {
158         u16 mute_reg = snd_soc_component_read32(component,
159                                               SGTL5000_CHIP_ANA_CTRL);
160
161         snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_CTRL,
162                             mute_mask, mute_mask);
163         return mute_reg;
164 }
165
166 static inline void restore_output(struct snd_soc_component *component,
167                                   u16 mute_mask, u16 mute_reg)
168 {
169         snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_CTRL,
170                 mute_mask, mute_reg);
171 }
172
173 static void vag_power_on(struct snd_soc_component *component, u32 source)
174 {
175         if (snd_soc_component_read32(component, SGTL5000_CHIP_ANA_POWER) &
176             SGTL5000_VAG_POWERUP)
177                 return;
178
179         snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
180                             SGTL5000_VAG_POWERUP, SGTL5000_VAG_POWERUP);
181
182         /* When VAG powering on to get local loop from Line-In, the sleep
183          * is required to avoid loud pop.
184          */
185         if (hp_sel_input(component) == SGTL5000_HP_SEL_LINE_IN &&
186             source == HP_POWER_EVENT)
187                 msleep(SGTL5000_VAG_POWERUP_DELAY);
188 }
189
190 static int vag_power_consumers(struct snd_soc_component *component,
191                                u16 ana_pwr_reg, u32 source)
192 {
193         int consumers = 0;
194
195         /* count dac/adc consumers unconditional */
196         if (ana_pwr_reg & SGTL5000_DAC_POWERUP)
197                 consumers++;
198         if (ana_pwr_reg & SGTL5000_ADC_POWERUP)
199                 consumers++;
200
201         /*
202          * If the event comes from HP and Line-In is selected,
203          * current action is 'DAC to be powered down'.
204          * As HP_POWERUP is not set when HP muxed to line-in,
205          * we need to keep VAG power ON.
206          */
207         if (source == HP_POWER_EVENT) {
208                 if (hp_sel_input(component) == SGTL5000_HP_SEL_LINE_IN)
209                         consumers++;
210         } else {
211                 if (ana_pwr_reg & SGTL5000_HP_POWERUP)
212                         consumers++;
213         }
214
215         return consumers;
216 }
217
218 static void vag_power_off(struct snd_soc_component *component, u32 source)
219 {
220         u16 ana_pwr = snd_soc_component_read32(component,
221                                              SGTL5000_CHIP_ANA_POWER);
222
223         if (!(ana_pwr & SGTL5000_VAG_POWERUP))
224                 return;
225
226         /*
227          * This function calls when any of VAG power consumers is disappearing.
228          * Thus, if there is more than one consumer at the moment, as minimum
229          * one consumer will definitely stay after the end of the current
230          * event.
231          * Don't clear VAG_POWERUP if 2 or more consumers of VAG present:
232          * - LINE_IN (for HP events) / HP (for DAC/ADC events)
233          * - DAC
234          * - ADC
235          * (the current consumer is disappearing right now)
236          */
237         if (vag_power_consumers(component, ana_pwr, source) >= 2)
238                 return;
239
240         snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
241                 SGTL5000_VAG_POWERUP, 0);
242         /* In power down case, we need wait 400-1000 ms
243          * when VAG fully ramped down.
244          * As longer we wait, as smaller pop we've got.
245          */
246         msleep(SGTL5000_VAG_POWERDOWN_DELAY);
247 }
248
249 /*
250  * mic_bias power on/off share the same register bits with
251  * output impedance of mic bias, when power on mic bias, we
252  * need reclaim it to impedance value.
253  * 0x0 = Powered off
254  * 0x1 = 2Kohm
255  * 0x2 = 4Kohm
256  * 0x3 = 8Kohm
257  */
258 static int mic_bias_event(struct snd_soc_dapm_widget *w,
259         struct snd_kcontrol *kcontrol, int event)
260 {
261         struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
262         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
263
264         switch (event) {
265         case SND_SOC_DAPM_POST_PMU:
266                 /* change mic bias resistor */
267                 snd_soc_component_update_bits(component, SGTL5000_CHIP_MIC_CTRL,
268                         SGTL5000_BIAS_R_MASK,
269                         sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
270                 break;
271
272         case SND_SOC_DAPM_PRE_PMD:
273                 snd_soc_component_update_bits(component, SGTL5000_CHIP_MIC_CTRL,
274                                 SGTL5000_BIAS_R_MASK, 0);
275                 break;
276         }
277         return 0;
278 }
279
280 static int vag_and_mute_control(struct snd_soc_component *component,
281                                  int event, int event_source)
282 {
283         static const u16 mute_mask[] = {
284                 /*
285                  * Mask for HP_POWER_EVENT.
286                  * Muxing Headphones have to be wrapped with mute/unmute
287                  * headphones only.
288                  */
289                 SGTL5000_HP_MUTE,
290                 /*
291                  * Masks for DAC_POWER_EVENT/ADC_POWER_EVENT.
292                  * Muxing DAC or ADC block have to wrapped with mute/unmute
293                  * both headphones and line-out.
294                  */
295                 SGTL5000_OUTPUTS_MUTE,
296                 SGTL5000_OUTPUTS_MUTE
297         };
298
299         struct sgtl5000_priv *sgtl5000 =
300                 snd_soc_component_get_drvdata(component);
301
302         switch (event) {
303         case SND_SOC_DAPM_PRE_PMU:
304                 sgtl5000->mute_state[event_source] =
305                         mute_output(component, mute_mask[event_source]);
306                 break;
307         case SND_SOC_DAPM_POST_PMU:
308                 vag_power_on(component, event_source);
309                 restore_output(component, mute_mask[event_source],
310                                sgtl5000->mute_state[event_source]);
311                 break;
312         case SND_SOC_DAPM_PRE_PMD:
313                 sgtl5000->mute_state[event_source] =
314                         mute_output(component, mute_mask[event_source]);
315                 vag_power_off(component, event_source);
316                 break;
317         case SND_SOC_DAPM_POST_PMD:
318                 restore_output(component, mute_mask[event_source],
319                                sgtl5000->mute_state[event_source]);
320                 break;
321         default:
322                 break;
323         }
324
325         return 0;
326 }
327
328 /*
329  * Mute Headphone when power it up/down.
330  * Control VAG power on HP power path.
331  */
332 static int headphone_pga_event(struct snd_soc_dapm_widget *w,
333         struct snd_kcontrol *kcontrol, int event)
334 {
335         struct snd_soc_component *component =
336                 snd_soc_dapm_to_component(w->dapm);
337
338         return vag_and_mute_control(component, event, HP_POWER_EVENT);
339 }
340
341 /* As manual describes, ADC/DAC powering up/down requires
342  * to mute outputs to avoid pops.
343  * Control VAG power on ADC/DAC power path.
344  */
345 static int adc_updown_depop(struct snd_soc_dapm_widget *w,
346         struct snd_kcontrol *kcontrol, int event)
347 {
348         struct snd_soc_component *component =
349                 snd_soc_dapm_to_component(w->dapm);
350
351         return vag_and_mute_control(component, event, ADC_POWER_EVENT);
352 }
353
354 static int dac_updown_depop(struct snd_soc_dapm_widget *w,
355         struct snd_kcontrol *kcontrol, int event)
356 {
357         struct snd_soc_component *component =
358                 snd_soc_dapm_to_component(w->dapm);
359
360         return vag_and_mute_control(component, event, DAC_POWER_EVENT);
361 }
362
363 /* input sources for ADC */
364 static const char *adc_mux_text[] = {
365         "MIC_IN", "LINE_IN"
366 };
367
368 static SOC_ENUM_SINGLE_DECL(adc_enum,
369                             SGTL5000_CHIP_ANA_CTRL, 2,
370                             adc_mux_text);
371
372 static const struct snd_kcontrol_new adc_mux =
373 SOC_DAPM_ENUM("Capture Mux", adc_enum);
374
375 /* input sources for headphone */
376 static const char *hp_mux_text[] = {
377         "DAC", "LINE_IN"
378 };
379
380 static SOC_ENUM_SINGLE_DECL(hp_enum,
381                             SGTL5000_CHIP_ANA_CTRL, 6,
382                             hp_mux_text);
383
384 static const struct snd_kcontrol_new hp_mux =
385 SOC_DAPM_ENUM("Headphone Mux", hp_enum);
386
387 /* input sources for DAC */
388 static const char *dac_mux_text[] = {
389         "ADC", "I2S", "Rsvrd", "DAP"
390 };
391
392 static SOC_ENUM_SINGLE_DECL(dac_enum,
393                             SGTL5000_CHIP_SSS_CTRL, SGTL5000_DAC_SEL_SHIFT,
394                             dac_mux_text);
395
396 static const struct snd_kcontrol_new dac_mux =
397 SOC_DAPM_ENUM("Digital Input Mux", dac_enum);
398
399 /* input sources for DAP */
400 static const char *dap_mux_text[] = {
401         "ADC", "I2S"
402 };
403
404 static SOC_ENUM_SINGLE_DECL(dap_enum,
405                             SGTL5000_CHIP_SSS_CTRL, SGTL5000_DAP_SEL_SHIFT,
406                             dap_mux_text);
407
408 static const struct snd_kcontrol_new dap_mux =
409 SOC_DAPM_ENUM("DAP Mux", dap_enum);
410
411 /* input sources for DAP mix */
412 static const char *dapmix_mux_text[] = {
413         "ADC", "I2S"
414 };
415
416 static SOC_ENUM_SINGLE_DECL(dapmix_enum,
417                             SGTL5000_CHIP_SSS_CTRL, SGTL5000_DAP_MIX_SEL_SHIFT,
418                             dapmix_mux_text);
419
420 static const struct snd_kcontrol_new dapmix_mux =
421 SOC_DAPM_ENUM("DAP MIX Mux", dapmix_enum);
422
423
424 static const struct snd_soc_dapm_widget sgtl5000_dapm_widgets[] = {
425         SND_SOC_DAPM_INPUT("LINE_IN"),
426         SND_SOC_DAPM_INPUT("MIC_IN"),
427
428         SND_SOC_DAPM_OUTPUT("HP_OUT"),
429         SND_SOC_DAPM_OUTPUT("LINE_OUT"),
430
431         SND_SOC_DAPM_SUPPLY("Mic Bias", SGTL5000_CHIP_MIC_CTRL, 8, 0,
432                             mic_bias_event,
433                             SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD),
434
435         SND_SOC_DAPM_PGA_E("HP", SGTL5000_CHIP_ANA_POWER, 4, 0, NULL, 0,
436                            headphone_pga_event,
437                            SND_SOC_DAPM_PRE_POST_PMU |
438                            SND_SOC_DAPM_PRE_POST_PMD),
439         SND_SOC_DAPM_PGA("LO", SGTL5000_CHIP_ANA_POWER, 0, 0, NULL, 0),
440
441         SND_SOC_DAPM_MUX("Capture Mux", SND_SOC_NOPM, 0, 0, &adc_mux),
442         SND_SOC_DAPM_MUX("Headphone Mux", SND_SOC_NOPM, 0, 0, &hp_mux),
443         SND_SOC_DAPM_MUX("Digital Input Mux", SND_SOC_NOPM, 0, 0, &dac_mux),
444         SND_SOC_DAPM_MUX("DAP Mux", SGTL5000_DAP_CTRL, 0, 0, &dap_mux),
445         SND_SOC_DAPM_MUX("DAP MIX Mux", SGTL5000_DAP_CTRL, 4, 0, &dapmix_mux),
446         SND_SOC_DAPM_MIXER("DAP", SGTL5000_CHIP_DIG_POWER, 4, 0, NULL, 0),
447
448
449         /* aif for i2s input */
450         SND_SOC_DAPM_AIF_IN("AIFIN", "Playback",
451                                 0, SGTL5000_CHIP_DIG_POWER,
452                                 0, 0),
453
454         /* aif for i2s output */
455         SND_SOC_DAPM_AIF_OUT("AIFOUT", "Capture",
456                                 0, SGTL5000_CHIP_DIG_POWER,
457                                 1, 0),
458
459         SND_SOC_DAPM_ADC_E("ADC", "Capture", SGTL5000_CHIP_ANA_POWER, 1, 0,
460                            adc_updown_depop, SND_SOC_DAPM_PRE_POST_PMU |
461                            SND_SOC_DAPM_PRE_POST_PMD),
462         SND_SOC_DAPM_DAC_E("DAC", "Playback", SGTL5000_CHIP_ANA_POWER, 3, 0,
463                            dac_updown_depop, SND_SOC_DAPM_PRE_POST_PMU |
464                            SND_SOC_DAPM_PRE_POST_PMD),
465 };
466
467 /* routes for sgtl5000 */
468 static const struct snd_soc_dapm_route sgtl5000_dapm_routes[] = {
469         {"Capture Mux", "LINE_IN", "LINE_IN"},  /* line_in --> adc_mux */
470         {"Capture Mux", "MIC_IN", "MIC_IN"},    /* mic_in --> adc_mux */
471
472         {"ADC", NULL, "Capture Mux"},           /* adc_mux --> adc */
473         {"AIFOUT", NULL, "ADC"},                /* adc --> i2s_out */
474
475         {"DAP Mux", "ADC", "ADC"},              /* adc --> DAP mux */
476         {"DAP Mux", NULL, "AIFIN"},             /* i2s --> DAP mux */
477         {"DAP", NULL, "DAP Mux"},               /* DAP mux --> dap */
478
479         {"DAP MIX Mux", "ADC", "ADC"},          /* adc --> DAP MIX mux */
480         {"DAP MIX Mux", NULL, "AIFIN"},         /* i2s --> DAP MIX mux */
481         {"DAP", NULL, "DAP MIX Mux"},           /* DAP MIX mux --> dap */
482
483         {"Digital Input Mux", "ADC", "ADC"},    /* adc --> audio mux */
484         {"Digital Input Mux", NULL, "AIFIN"},   /* i2s --> audio mux */
485         {"Digital Input Mux", NULL, "DAP"},     /* dap --> audio mux */
486         {"DAC", NULL, "Digital Input Mux"},     /* audio mux --> dac */
487
488         {"Headphone Mux", "DAC", "DAC"},        /* dac --> hp_mux */
489         {"LO", NULL, "DAC"},                    /* dac --> line_out */
490
491         {"Headphone Mux", "LINE_IN", "LINE_IN"},/* line_in --> hp_mux */
492         {"HP", NULL, "Headphone Mux"},          /* hp_mux --> hp */
493
494         {"LINE_OUT", NULL, "LO"},
495         {"HP_OUT", NULL, "HP"},
496 };
497
498 /* custom function to fetch info of PCM playback volume */
499 static int dac_info_volsw(struct snd_kcontrol *kcontrol,
500                           struct snd_ctl_elem_info *uinfo)
501 {
502         uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
503         uinfo->count = 2;
504         uinfo->value.integer.min = 0;
505         uinfo->value.integer.max = 0xfc - 0x3c;
506         return 0;
507 }
508
509 /*
510  * custom function to get of PCM playback volume
511  *
512  * dac volume register
513  * 15-------------8-7--------------0
514  * | R channel vol | L channel vol |
515  *  -------------------------------
516  *
517  * PCM volume with 0.5017 dB steps from 0 to -90 dB
518  *
519  * register values map to dB
520  * 0x3B and less = Reserved
521  * 0x3C = 0 dB
522  * 0x3D = -0.5 dB
523  * 0xF0 = -90 dB
524  * 0xFC and greater = Muted
525  *
526  * register value map to userspace value
527  *
528  * register value       0x3c(0dB)         0xf0(-90dB)0xfc
529  *                      ------------------------------
530  * userspace value      0xc0                         0
531  */
532 static int dac_get_volsw(struct snd_kcontrol *kcontrol,
533                          struct snd_ctl_elem_value *ucontrol)
534 {
535         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
536         int reg;
537         int l;
538         int r;
539
540         reg = snd_soc_component_read32(component, SGTL5000_CHIP_DAC_VOL);
541
542         /* get left channel volume */
543         l = (reg & SGTL5000_DAC_VOL_LEFT_MASK) >> SGTL5000_DAC_VOL_LEFT_SHIFT;
544
545         /* get right channel volume */
546         r = (reg & SGTL5000_DAC_VOL_RIGHT_MASK) >> SGTL5000_DAC_VOL_RIGHT_SHIFT;
547
548         /* make sure value fall in (0x3c,0xfc) */
549         l = clamp(l, 0x3c, 0xfc);
550         r = clamp(r, 0x3c, 0xfc);
551
552         /* invert it and map to userspace value */
553         l = 0xfc - l;
554         r = 0xfc - r;
555
556         ucontrol->value.integer.value[0] = l;
557         ucontrol->value.integer.value[1] = r;
558
559         return 0;
560 }
561
562 /*
563  * custom function to put of PCM playback volume
564  *
565  * dac volume register
566  * 15-------------8-7--------------0
567  * | R channel vol | L channel vol |
568  *  -------------------------------
569  *
570  * PCM volume with 0.5017 dB steps from 0 to -90 dB
571  *
572  * register values map to dB
573  * 0x3B and less = Reserved
574  * 0x3C = 0 dB
575  * 0x3D = -0.5 dB
576  * 0xF0 = -90 dB
577  * 0xFC and greater = Muted
578  *
579  * userspace value map to register value
580  *
581  * userspace value      0xc0                         0
582  *                      ------------------------------
583  * register value       0x3c(0dB)       0xf0(-90dB)0xfc
584  */
585 static int dac_put_volsw(struct snd_kcontrol *kcontrol,
586                          struct snd_ctl_elem_value *ucontrol)
587 {
588         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
589         int reg;
590         int l;
591         int r;
592
593         l = ucontrol->value.integer.value[0];
594         r = ucontrol->value.integer.value[1];
595
596         /* make sure userspace volume fall in (0, 0xfc-0x3c) */
597         l = clamp(l, 0, 0xfc - 0x3c);
598         r = clamp(r, 0, 0xfc - 0x3c);
599
600         /* invert it, get the value can be set to register */
601         l = 0xfc - l;
602         r = 0xfc - r;
603
604         /* shift to get the register value */
605         reg = l << SGTL5000_DAC_VOL_LEFT_SHIFT |
606                 r << SGTL5000_DAC_VOL_RIGHT_SHIFT;
607
608         snd_soc_component_write(component, SGTL5000_CHIP_DAC_VOL, reg);
609
610         return 0;
611 }
612
613 /*
614  * custom function to get AVC threshold
615  *
616  * The threshold dB is calculated by rearranging the calculation from the
617  * avc_put_threshold function: register_value = 10^(dB/20) * 0.636 * 2^15 ==>
618  * dB = ( fls(register_value) - 14.347 ) * 6.02
619  *
620  * As this calculation is expensive and the threshold dB values may not exceed
621  * 0 to 96 we use pre-calculated values.
622  */
623 static int avc_get_threshold(struct snd_kcontrol *kcontrol,
624                              struct snd_ctl_elem_value *ucontrol)
625 {
626         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
627         int db, i;
628         u16 reg = snd_soc_component_read32(component, SGTL5000_DAP_AVC_THRESHOLD);
629
630         /* register value 0 => -96dB */
631         if (!reg) {
632                 ucontrol->value.integer.value[0] = 96;
633                 ucontrol->value.integer.value[1] = 96;
634                 return 0;
635         }
636
637         /* get dB from register value (rounded down) */
638         for (i = 0; avc_thr_db2reg[i] > reg; i++)
639                 ;
640         db = i;
641
642         ucontrol->value.integer.value[0] = db;
643         ucontrol->value.integer.value[1] = db;
644
645         return 0;
646 }
647
648 /*
649  * custom function to put AVC threshold
650  *
651  * The register value is calculated by following formula:
652  *                                    register_value = 10^(dB/20) * 0.636 * 2^15
653  * As this calculation is expensive and the threshold dB values may not exceed
654  * 0 to 96 we use pre-calculated values.
655  */
656 static int avc_put_threshold(struct snd_kcontrol *kcontrol,
657                              struct snd_ctl_elem_value *ucontrol)
658 {
659         struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
660         int db;
661         u16 reg;
662
663         db = (int)ucontrol->value.integer.value[0];
664         if (db < 0 || db > 96)
665                 return -EINVAL;
666         reg = avc_thr_db2reg[db];
667         snd_soc_component_write(component, SGTL5000_DAP_AVC_THRESHOLD, reg);
668
669         return 0;
670 }
671
672 static const DECLARE_TLV_DB_SCALE(capture_6db_attenuate, -600, 600, 0);
673
674 /* tlv for mic gain, 0db 20db 30db 40db */
675 static const DECLARE_TLV_DB_RANGE(mic_gain_tlv,
676         0, 0, TLV_DB_SCALE_ITEM(0, 0, 0),
677         1, 3, TLV_DB_SCALE_ITEM(2000, 1000, 0)
678 );
679
680 /* tlv for DAP channels, 0% - 100% - 200% */
681 static const DECLARE_TLV_DB_SCALE(dap_volume, 0, 1, 0);
682
683 /* tlv for bass bands, -11.75db to 12.0db, step .25db */
684 static const DECLARE_TLV_DB_SCALE(bass_band, -1175, 25, 0);
685
686 /* tlv for hp volume, -51.5db to 12.0db, step .5db */
687 static const DECLARE_TLV_DB_SCALE(headphone_volume, -5150, 50, 0);
688
689 /* tlv for lineout volume, 31 steps of .5db each */
690 static const DECLARE_TLV_DB_SCALE(lineout_volume, -1550, 50, 0);
691
692 /* tlv for dap avc max gain, 0db, 6db, 12db */
693 static const DECLARE_TLV_DB_SCALE(avc_max_gain, 0, 600, 0);
694
695 /* tlv for dap avc threshold, */
696 static const DECLARE_TLV_DB_MINMAX(avc_threshold, 0, 9600);
697
698 static const struct snd_kcontrol_new sgtl5000_snd_controls[] = {
699         /* SOC_DOUBLE_S8_TLV with invert */
700         {
701                 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
702                 .name = "PCM Playback Volume",
703                 .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |
704                         SNDRV_CTL_ELEM_ACCESS_READWRITE,
705                 .info = dac_info_volsw,
706                 .get = dac_get_volsw,
707                 .put = dac_put_volsw,
708         },
709
710         SOC_DOUBLE("Capture Volume", SGTL5000_CHIP_ANA_ADC_CTRL, 0, 4, 0xf, 0),
711         SOC_SINGLE_TLV("Capture Attenuate Switch (-6dB)",
712                         SGTL5000_CHIP_ANA_ADC_CTRL,
713                         8, 1, 0, capture_6db_attenuate),
714         SOC_SINGLE("Capture ZC Switch", SGTL5000_CHIP_ANA_CTRL, 1, 1, 0),
715
716         SOC_DOUBLE_TLV("Headphone Playback Volume",
717                         SGTL5000_CHIP_ANA_HP_CTRL,
718                         0, 8,
719                         0x7f, 1,
720                         headphone_volume),
721         SOC_SINGLE("Headphone Playback Switch", SGTL5000_CHIP_ANA_CTRL,
722                         4, 1, 1),
723         SOC_SINGLE("Headphone Playback ZC Switch", SGTL5000_CHIP_ANA_CTRL,
724                         5, 1, 0),
725
726         SOC_SINGLE_TLV("Mic Volume", SGTL5000_CHIP_MIC_CTRL,
727                         0, 3, 0, mic_gain_tlv),
728
729         SOC_DOUBLE_TLV("Lineout Playback Volume",
730                         SGTL5000_CHIP_LINE_OUT_VOL,
731                         SGTL5000_LINE_OUT_VOL_LEFT_SHIFT,
732                         SGTL5000_LINE_OUT_VOL_RIGHT_SHIFT,
733                         0x1f, 1,
734                         lineout_volume),
735         SOC_SINGLE("Lineout Playback Switch", SGTL5000_CHIP_ANA_CTRL, 8, 1, 1),
736
737         SOC_SINGLE_TLV("DAP Main channel", SGTL5000_DAP_MAIN_CHAN,
738         0, 0xffff, 0, dap_volume),
739
740         SOC_SINGLE_TLV("DAP Mix channel", SGTL5000_DAP_MIX_CHAN,
741         0, 0xffff, 0, dap_volume),
742         /* Automatic Volume Control (DAP AVC) */
743         SOC_SINGLE("AVC Switch", SGTL5000_DAP_AVC_CTRL, 0, 1, 0),
744         SOC_SINGLE("AVC Hard Limiter Switch", SGTL5000_DAP_AVC_CTRL, 5, 1, 0),
745         SOC_SINGLE_TLV("AVC Max Gain Volume", SGTL5000_DAP_AVC_CTRL, 12, 2, 0,
746                         avc_max_gain),
747         SOC_SINGLE("AVC Integrator Response", SGTL5000_DAP_AVC_CTRL, 8, 3, 0),
748         SOC_SINGLE_EXT_TLV("AVC Threshold Volume", SGTL5000_DAP_AVC_THRESHOLD,
749                         0, 96, 0, avc_get_threshold, avc_put_threshold,
750                         avc_threshold),
751
752         SOC_SINGLE_TLV("BASS 0", SGTL5000_DAP_EQ_BASS_BAND0,
753         0, 0x5F, 0, bass_band),
754
755         SOC_SINGLE_TLV("BASS 1", SGTL5000_DAP_EQ_BASS_BAND1,
756         0, 0x5F, 0, bass_band),
757
758         SOC_SINGLE_TLV("BASS 2", SGTL5000_DAP_EQ_BASS_BAND2,
759         0, 0x5F, 0, bass_band),
760
761         SOC_SINGLE_TLV("BASS 3", SGTL5000_DAP_EQ_BASS_BAND3,
762         0, 0x5F, 0, bass_band),
763
764         SOC_SINGLE_TLV("BASS 4", SGTL5000_DAP_EQ_BASS_BAND4,
765         0, 0x5F, 0, bass_band),
766 };
767
768 /* mute the codec used by alsa core */
769 static int sgtl5000_digital_mute(struct snd_soc_dai *codec_dai, int mute)
770 {
771         struct snd_soc_component *component = codec_dai->component;
772         u16 i2s_pwr = SGTL5000_I2S_IN_POWERUP;
773
774         /*
775          * During 'digital mute' do not mute DAC
776          * because LINE_IN would be muted aswell. We want to mute
777          * only I2S block - this can be done by powering it off
778          */
779         snd_soc_component_update_bits(component, SGTL5000_CHIP_DIG_POWER,
780                         i2s_pwr, mute ? 0 : i2s_pwr);
781
782         return 0;
783 }
784
785 /* set codec format */
786 static int sgtl5000_set_dai_fmt(struct snd_soc_dai *codec_dai, unsigned int fmt)
787 {
788         struct snd_soc_component *component = codec_dai->component;
789         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
790         u16 i2sctl = 0;
791
792         sgtl5000->master = 0;
793         /*
794          * i2s clock and frame master setting.
795          * ONLY support:
796          *  - clock and frame slave,
797          *  - clock and frame master
798          */
799         switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
800         case SND_SOC_DAIFMT_CBS_CFS:
801                 break;
802         case SND_SOC_DAIFMT_CBM_CFM:
803                 i2sctl |= SGTL5000_I2S_MASTER;
804                 sgtl5000->master = 1;
805                 break;
806         default:
807                 return -EINVAL;
808         }
809
810         /* setting i2s data format */
811         switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
812         case SND_SOC_DAIFMT_DSP_A:
813                 i2sctl |= SGTL5000_I2S_MODE_PCM << SGTL5000_I2S_MODE_SHIFT;
814                 break;
815         case SND_SOC_DAIFMT_DSP_B:
816                 i2sctl |= SGTL5000_I2S_MODE_PCM << SGTL5000_I2S_MODE_SHIFT;
817                 i2sctl |= SGTL5000_I2S_LRALIGN;
818                 break;
819         case SND_SOC_DAIFMT_I2S:
820                 i2sctl |= SGTL5000_I2S_MODE_I2S_LJ << SGTL5000_I2S_MODE_SHIFT;
821                 break;
822         case SND_SOC_DAIFMT_RIGHT_J:
823                 i2sctl |= SGTL5000_I2S_MODE_RJ << SGTL5000_I2S_MODE_SHIFT;
824                 i2sctl |= SGTL5000_I2S_LRPOL;
825                 break;
826         case SND_SOC_DAIFMT_LEFT_J:
827                 i2sctl |= SGTL5000_I2S_MODE_I2S_LJ << SGTL5000_I2S_MODE_SHIFT;
828                 i2sctl |= SGTL5000_I2S_LRALIGN;
829                 break;
830         default:
831                 return -EINVAL;
832         }
833
834         sgtl5000->fmt = fmt & SND_SOC_DAIFMT_FORMAT_MASK;
835
836         /* Clock inversion */
837         switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
838         case SND_SOC_DAIFMT_NB_NF:
839                 break;
840         case SND_SOC_DAIFMT_IB_NF:
841                 i2sctl |= SGTL5000_I2S_SCLK_INV;
842                 break;
843         default:
844                 return -EINVAL;
845         }
846
847         snd_soc_component_write(component, SGTL5000_CHIP_I2S_CTRL, i2sctl);
848
849         return 0;
850 }
851
852 /* set codec sysclk */
853 static int sgtl5000_set_dai_sysclk(struct snd_soc_dai *codec_dai,
854                                    int clk_id, unsigned int freq, int dir)
855 {
856         struct snd_soc_component *component = codec_dai->component;
857         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
858
859         switch (clk_id) {
860         case SGTL5000_SYSCLK:
861                 sgtl5000->sysclk = freq;
862                 break;
863         default:
864                 return -EINVAL;
865         }
866
867         return 0;
868 }
869
870 /*
871  * set clock according to i2s frame clock,
872  * sgtl5000 provides 2 clock sources:
873  * 1. sys_mclk: sample freq can only be configured to
874  *      1/256, 1/384, 1/512 of sys_mclk.
875  * 2. pll: can derive any audio clocks.
876  *
877  * clock setting rules:
878  * 1. in slave mode, only sys_mclk can be used
879  * 2. as constraint by sys_mclk, sample freq should be set to 32 kHz, 44.1 kHz
880  * and above.
881  * 3. usage of sys_mclk is preferred over pll to save power.
882  */
883 static int sgtl5000_set_clock(struct snd_soc_component *component, int frame_rate)
884 {
885         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
886         int clk_ctl = 0;
887         int sys_fs;     /* sample freq */
888
889         /*
890          * sample freq should be divided by frame clock,
891          * if frame clock is lower than 44.1 kHz, sample freq should be set to
892          * 32 kHz or 44.1 kHz.
893          */
894         switch (frame_rate) {
895         case 8000:
896         case 16000:
897                 sys_fs = 32000;
898                 break;
899         case 11025:
900         case 22050:
901                 sys_fs = 44100;
902                 break;
903         default:
904                 sys_fs = frame_rate;
905                 break;
906         }
907
908         /* set divided factor of frame clock */
909         switch (sys_fs / frame_rate) {
910         case 4:
911                 clk_ctl |= SGTL5000_RATE_MODE_DIV_4 << SGTL5000_RATE_MODE_SHIFT;
912                 break;
913         case 2:
914                 clk_ctl |= SGTL5000_RATE_MODE_DIV_2 << SGTL5000_RATE_MODE_SHIFT;
915                 break;
916         case 1:
917                 clk_ctl |= SGTL5000_RATE_MODE_DIV_1 << SGTL5000_RATE_MODE_SHIFT;
918                 break;
919         default:
920                 return -EINVAL;
921         }
922
923         /* set the sys_fs according to frame rate */
924         switch (sys_fs) {
925         case 32000:
926                 clk_ctl |= SGTL5000_SYS_FS_32k << SGTL5000_SYS_FS_SHIFT;
927                 break;
928         case 44100:
929                 clk_ctl |= SGTL5000_SYS_FS_44_1k << SGTL5000_SYS_FS_SHIFT;
930                 break;
931         case 48000:
932                 clk_ctl |= SGTL5000_SYS_FS_48k << SGTL5000_SYS_FS_SHIFT;
933                 break;
934         case 96000:
935                 clk_ctl |= SGTL5000_SYS_FS_96k << SGTL5000_SYS_FS_SHIFT;
936                 break;
937         default:
938                 dev_err(component->dev, "frame rate %d not supported\n",
939                         frame_rate);
940                 return -EINVAL;
941         }
942
943         /*
944          * calculate the divider of mclk/sample_freq,
945          * factor of freq = 96 kHz can only be 256, since mclk is in the range
946          * of 8 MHz - 27 MHz
947          */
948         switch (sgtl5000->sysclk / frame_rate) {
949         case 256:
950                 clk_ctl |= SGTL5000_MCLK_FREQ_256FS <<
951                         SGTL5000_MCLK_FREQ_SHIFT;
952                 break;
953         case 384:
954                 clk_ctl |= SGTL5000_MCLK_FREQ_384FS <<
955                         SGTL5000_MCLK_FREQ_SHIFT;
956                 break;
957         case 512:
958                 clk_ctl |= SGTL5000_MCLK_FREQ_512FS <<
959                         SGTL5000_MCLK_FREQ_SHIFT;
960                 break;
961         default:
962                 /* if mclk does not satisfy the divider, use pll */
963                 if (sgtl5000->master) {
964                         clk_ctl |= SGTL5000_MCLK_FREQ_PLL <<
965                                 SGTL5000_MCLK_FREQ_SHIFT;
966                 } else {
967                         dev_err(component->dev,
968                                 "PLL not supported in slave mode\n");
969                         dev_err(component->dev, "%d ratio is not supported. "
970                                 "SYS_MCLK needs to be 256, 384 or 512 * fs\n",
971                                 sgtl5000->sysclk / frame_rate);
972                         return -EINVAL;
973                 }
974         }
975
976         /* if using pll, please check manual 6.4.2 for detail */
977         if ((clk_ctl & SGTL5000_MCLK_FREQ_MASK) == SGTL5000_MCLK_FREQ_PLL) {
978                 u64 out, t;
979                 int div2;
980                 int pll_ctl;
981                 unsigned int in, int_div, frac_div;
982
983                 if (sgtl5000->sysclk > 17000000) {
984                         div2 = 1;
985                         in = sgtl5000->sysclk / 2;
986                 } else {
987                         div2 = 0;
988                         in = sgtl5000->sysclk;
989                 }
990                 if (sys_fs == 44100)
991                         out = 180633600;
992                 else
993                         out = 196608000;
994                 t = do_div(out, in);
995                 int_div = out;
996                 t *= 2048;
997                 do_div(t, in);
998                 frac_div = t;
999                 pll_ctl = int_div << SGTL5000_PLL_INT_DIV_SHIFT |
1000                     frac_div << SGTL5000_PLL_FRAC_DIV_SHIFT;
1001
1002                 snd_soc_component_write(component, SGTL5000_CHIP_PLL_CTRL, pll_ctl);
1003                 if (div2)
1004                         snd_soc_component_update_bits(component,
1005                                 SGTL5000_CHIP_CLK_TOP_CTRL,
1006                                 SGTL5000_INPUT_FREQ_DIV2,
1007                                 SGTL5000_INPUT_FREQ_DIV2);
1008                 else
1009                         snd_soc_component_update_bits(component,
1010                                 SGTL5000_CHIP_CLK_TOP_CTRL,
1011                                 SGTL5000_INPUT_FREQ_DIV2,
1012                                 0);
1013
1014                 /* power up pll */
1015                 snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
1016                         SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP,
1017                         SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP);
1018
1019                 /* if using pll, clk_ctrl must be set after pll power up */
1020                 snd_soc_component_write(component, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
1021         } else {
1022                 /* otherwise, clk_ctrl must be set before pll power down */
1023                 snd_soc_component_write(component, SGTL5000_CHIP_CLK_CTRL, clk_ctl);
1024
1025                 /* power down pll */
1026                 snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
1027                         SGTL5000_PLL_POWERUP | SGTL5000_VCOAMP_POWERUP,
1028                         0);
1029         }
1030
1031         return 0;
1032 }
1033
1034 /*
1035  * Set PCM DAI bit size and sample rate.
1036  * input: params_rate, params_fmt
1037  */
1038 static int sgtl5000_pcm_hw_params(struct snd_pcm_substream *substream,
1039                                   struct snd_pcm_hw_params *params,
1040                                   struct snd_soc_dai *dai)
1041 {
1042         struct snd_soc_component *component = dai->component;
1043         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
1044         int channels = params_channels(params);
1045         int i2s_ctl = 0;
1046         int stereo;
1047         int ret;
1048
1049         /* sysclk should already set */
1050         if (!sgtl5000->sysclk) {
1051                 dev_err(component->dev, "%s: set sysclk first!\n", __func__);
1052                 return -EFAULT;
1053         }
1054
1055         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1056                 stereo = SGTL5000_DAC_STEREO;
1057         else
1058                 stereo = SGTL5000_ADC_STEREO;
1059
1060         /* set mono to save power */
1061         snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER, stereo,
1062                         channels == 1 ? 0 : stereo);
1063
1064         /* set codec clock base on lrclk */
1065         ret = sgtl5000_set_clock(component, params_rate(params));
1066         if (ret)
1067                 return ret;
1068
1069         /* set i2s data format */
1070         switch (params_width(params)) {
1071         case 16:
1072                 if (sgtl5000->fmt == SND_SOC_DAIFMT_RIGHT_J)
1073                         return -EINVAL;
1074                 i2s_ctl |= SGTL5000_I2S_DLEN_16 << SGTL5000_I2S_DLEN_SHIFT;
1075                 i2s_ctl |= SGTL5000_I2S_SCLKFREQ_32FS <<
1076                     SGTL5000_I2S_SCLKFREQ_SHIFT;
1077                 break;
1078         case 20:
1079                 i2s_ctl |= SGTL5000_I2S_DLEN_20 << SGTL5000_I2S_DLEN_SHIFT;
1080                 i2s_ctl |= SGTL5000_I2S_SCLKFREQ_64FS <<
1081                     SGTL5000_I2S_SCLKFREQ_SHIFT;
1082                 break;
1083         case 24:
1084                 i2s_ctl |= SGTL5000_I2S_DLEN_24 << SGTL5000_I2S_DLEN_SHIFT;
1085                 i2s_ctl |= SGTL5000_I2S_SCLKFREQ_64FS <<
1086                     SGTL5000_I2S_SCLKFREQ_SHIFT;
1087                 break;
1088         case 32:
1089                 if (sgtl5000->fmt == SND_SOC_DAIFMT_RIGHT_J)
1090                         return -EINVAL;
1091                 i2s_ctl |= SGTL5000_I2S_DLEN_32 << SGTL5000_I2S_DLEN_SHIFT;
1092                 i2s_ctl |= SGTL5000_I2S_SCLKFREQ_64FS <<
1093                     SGTL5000_I2S_SCLKFREQ_SHIFT;
1094                 break;
1095         default:
1096                 return -EINVAL;
1097         }
1098
1099         snd_soc_component_update_bits(component, SGTL5000_CHIP_I2S_CTRL,
1100                             SGTL5000_I2S_DLEN_MASK | SGTL5000_I2S_SCLKFREQ_MASK,
1101                             i2s_ctl);
1102
1103         return 0;
1104 }
1105
1106 /*
1107  * set dac bias
1108  * common state changes:
1109  * startup:
1110  * off --> standby --> prepare --> on
1111  * standby --> prepare --> on
1112  *
1113  * stop:
1114  * on --> prepare --> standby
1115  */
1116 static int sgtl5000_set_bias_level(struct snd_soc_component *component,
1117                                    enum snd_soc_bias_level level)
1118 {
1119         struct sgtl5000_priv *sgtl = snd_soc_component_get_drvdata(component);
1120         int ret;
1121
1122         switch (level) {
1123         case SND_SOC_BIAS_ON:
1124         case SND_SOC_BIAS_PREPARE:
1125         case SND_SOC_BIAS_STANDBY:
1126                 regcache_cache_only(sgtl->regmap, false);
1127                 ret = regcache_sync(sgtl->regmap);
1128                 if (ret) {
1129                         regcache_cache_only(sgtl->regmap, true);
1130                         return ret;
1131                 }
1132
1133                 snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
1134                                     SGTL5000_REFTOP_POWERUP,
1135                                     SGTL5000_REFTOP_POWERUP);
1136                 break;
1137         case SND_SOC_BIAS_OFF:
1138                 regcache_cache_only(sgtl->regmap, true);
1139                 snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_POWER,
1140                                     SGTL5000_REFTOP_POWERUP, 0);
1141                 break;
1142         }
1143
1144         return 0;
1145 }
1146
1147 #define SGTL5000_FORMATS (SNDRV_PCM_FMTBIT_S16_LE |\
1148                         SNDRV_PCM_FMTBIT_S20_3LE |\
1149                         SNDRV_PCM_FMTBIT_S24_LE |\
1150                         SNDRV_PCM_FMTBIT_S32_LE)
1151
1152 static const struct snd_soc_dai_ops sgtl5000_ops = {
1153         .hw_params = sgtl5000_pcm_hw_params,
1154         .digital_mute = sgtl5000_digital_mute,
1155         .set_fmt = sgtl5000_set_dai_fmt,
1156         .set_sysclk = sgtl5000_set_dai_sysclk,
1157 };
1158
1159 static struct snd_soc_dai_driver sgtl5000_dai = {
1160         .name = "sgtl5000",
1161         .playback = {
1162                 .stream_name = "Playback",
1163                 .channels_min = 1,
1164                 .channels_max = 2,
1165                 /*
1166                  * only support 8~48K + 96K,
1167                  * TODO modify hw_param to support more
1168                  */
1169                 .rates = SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_96000,
1170                 .formats = SGTL5000_FORMATS,
1171         },
1172         .capture = {
1173                 .stream_name = "Capture",
1174                 .channels_min = 1,
1175                 .channels_max = 2,
1176                 .rates = SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_96000,
1177                 .formats = SGTL5000_FORMATS,
1178         },
1179         .ops = &sgtl5000_ops,
1180         .symmetric_rates = 1,
1181 };
1182
1183 static bool sgtl5000_volatile(struct device *dev, unsigned int reg)
1184 {
1185         switch (reg) {
1186         case SGTL5000_CHIP_ID:
1187         case SGTL5000_CHIP_ADCDAC_CTRL:
1188         case SGTL5000_CHIP_ANA_STATUS:
1189                 return true;
1190         }
1191
1192         return false;
1193 }
1194
1195 static bool sgtl5000_readable(struct device *dev, unsigned int reg)
1196 {
1197         switch (reg) {
1198         case SGTL5000_CHIP_ID:
1199         case SGTL5000_CHIP_DIG_POWER:
1200         case SGTL5000_CHIP_CLK_CTRL:
1201         case SGTL5000_CHIP_I2S_CTRL:
1202         case SGTL5000_CHIP_SSS_CTRL:
1203         case SGTL5000_CHIP_ADCDAC_CTRL:
1204         case SGTL5000_CHIP_DAC_VOL:
1205         case SGTL5000_CHIP_PAD_STRENGTH:
1206         case SGTL5000_CHIP_ANA_ADC_CTRL:
1207         case SGTL5000_CHIP_ANA_HP_CTRL:
1208         case SGTL5000_CHIP_ANA_CTRL:
1209         case SGTL5000_CHIP_LINREG_CTRL:
1210         case SGTL5000_CHIP_REF_CTRL:
1211         case SGTL5000_CHIP_MIC_CTRL:
1212         case SGTL5000_CHIP_LINE_OUT_CTRL:
1213         case SGTL5000_CHIP_LINE_OUT_VOL:
1214         case SGTL5000_CHIP_ANA_POWER:
1215         case SGTL5000_CHIP_PLL_CTRL:
1216         case SGTL5000_CHIP_CLK_TOP_CTRL:
1217         case SGTL5000_CHIP_ANA_STATUS:
1218         case SGTL5000_CHIP_SHORT_CTRL:
1219         case SGTL5000_CHIP_ANA_TEST2:
1220         case SGTL5000_DAP_CTRL:
1221         case SGTL5000_DAP_PEQ:
1222         case SGTL5000_DAP_BASS_ENHANCE:
1223         case SGTL5000_DAP_BASS_ENHANCE_CTRL:
1224         case SGTL5000_DAP_AUDIO_EQ:
1225         case SGTL5000_DAP_SURROUND:
1226         case SGTL5000_DAP_FLT_COEF_ACCESS:
1227         case SGTL5000_DAP_COEF_WR_B0_MSB:
1228         case SGTL5000_DAP_COEF_WR_B0_LSB:
1229         case SGTL5000_DAP_EQ_BASS_BAND0:
1230         case SGTL5000_DAP_EQ_BASS_BAND1:
1231         case SGTL5000_DAP_EQ_BASS_BAND2:
1232         case SGTL5000_DAP_EQ_BASS_BAND3:
1233         case SGTL5000_DAP_EQ_BASS_BAND4:
1234         case SGTL5000_DAP_MAIN_CHAN:
1235         case SGTL5000_DAP_MIX_CHAN:
1236         case SGTL5000_DAP_AVC_CTRL:
1237         case SGTL5000_DAP_AVC_THRESHOLD:
1238         case SGTL5000_DAP_AVC_ATTACK:
1239         case SGTL5000_DAP_AVC_DECAY:
1240         case SGTL5000_DAP_COEF_WR_B1_MSB:
1241         case SGTL5000_DAP_COEF_WR_B1_LSB:
1242         case SGTL5000_DAP_COEF_WR_B2_MSB:
1243         case SGTL5000_DAP_COEF_WR_B2_LSB:
1244         case SGTL5000_DAP_COEF_WR_A1_MSB:
1245         case SGTL5000_DAP_COEF_WR_A1_LSB:
1246         case SGTL5000_DAP_COEF_WR_A2_MSB:
1247         case SGTL5000_DAP_COEF_WR_A2_LSB:
1248                 return true;
1249
1250         default:
1251                 return false;
1252         }
1253 }
1254
1255 /*
1256  * This precalculated table contains all (vag_val * 100 / lo_calcntrl) results
1257  * to select an appropriate lo_vol_* in SGTL5000_CHIP_LINE_OUT_VOL
1258  * The calculatation was done for all possible register values which
1259  * is the array index and the following formula: 10^((idx−15)/40) * 100
1260  */
1261 static const u8 vol_quot_table[] = {
1262         42, 45, 47, 50, 53, 56, 60, 63,
1263         67, 71, 75, 79, 84, 89, 94, 100,
1264         106, 112, 119, 126, 133, 141, 150, 158,
1265         168, 178, 188, 200, 211, 224, 237, 251
1266 };
1267
1268 /*
1269  * sgtl5000 has 3 internal power supplies:
1270  * 1. VAG, normally set to vdda/2
1271  * 2. charge pump, set to different value
1272  *      according to voltage of vdda and vddio
1273  * 3. line out VAG, normally set to vddio/2
1274  *
1275  * and should be set according to:
1276  * 1. vddd provided by external or not
1277  * 2. vdda and vddio voltage value. > 3.1v or not
1278  */
1279 static int sgtl5000_set_power_regs(struct snd_soc_component *component)
1280 {
1281         int vddd;
1282         int vdda;
1283         int vddio;
1284         u16 ana_pwr;
1285         u16 lreg_ctrl;
1286         int vag;
1287         int lo_vag;
1288         int vol_quot;
1289         int lo_vol;
1290         size_t i;
1291         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
1292
1293         vdda  = regulator_get_voltage(sgtl5000->supplies[VDDA].consumer);
1294         vddio = regulator_get_voltage(sgtl5000->supplies[VDDIO].consumer);
1295         vddd  = (sgtl5000->num_supplies > VDDD)
1296                 ? regulator_get_voltage(sgtl5000->supplies[VDDD].consumer)
1297                 : LDO_VOLTAGE;
1298
1299         vdda  = vdda / 1000;
1300         vddio = vddio / 1000;
1301         vddd  = vddd / 1000;
1302
1303         if (vdda <= 0 || vddio <= 0 || vddd < 0) {
1304                 dev_err(component->dev, "regulator voltage not set correctly\n");
1305
1306                 return -EINVAL;
1307         }
1308
1309         /* according to datasheet, maximum voltage of supplies */
1310         if (vdda > 3600 || vddio > 3600 || vddd > 1980) {
1311                 dev_err(component->dev,
1312                         "exceed max voltage vdda %dmV vddio %dmV vddd %dmV\n",
1313                         vdda, vddio, vddd);
1314
1315                 return -EINVAL;
1316         }
1317
1318         /* reset value */
1319         ana_pwr = snd_soc_component_read32(component, SGTL5000_CHIP_ANA_POWER);
1320         ana_pwr |= SGTL5000_DAC_STEREO |
1321                         SGTL5000_ADC_STEREO |
1322                         SGTL5000_REFTOP_POWERUP;
1323         lreg_ctrl = snd_soc_component_read32(component, SGTL5000_CHIP_LINREG_CTRL);
1324
1325         if (vddio < 3100 && vdda < 3100) {
1326                 /* enable internal oscillator used for charge pump */
1327                 snd_soc_component_update_bits(component, SGTL5000_CHIP_CLK_TOP_CTRL,
1328                                         SGTL5000_INT_OSC_EN,
1329                                         SGTL5000_INT_OSC_EN);
1330                 /* Enable VDDC charge pump */
1331                 ana_pwr |= SGTL5000_VDDC_CHRGPMP_POWERUP;
1332         } else {
1333                 ana_pwr &= ~SGTL5000_VDDC_CHRGPMP_POWERUP;
1334                 /*
1335                  * if vddio == vdda the source of charge pump should be
1336                  * assigned manually to VDDIO
1337                  */
1338                 if (vddio == vdda) {
1339                         lreg_ctrl |= SGTL5000_VDDC_ASSN_OVRD;
1340                         lreg_ctrl |= SGTL5000_VDDC_MAN_ASSN_VDDIO <<
1341                                     SGTL5000_VDDC_MAN_ASSN_SHIFT;
1342                 }
1343         }
1344
1345         snd_soc_component_write(component, SGTL5000_CHIP_LINREG_CTRL, lreg_ctrl);
1346
1347         snd_soc_component_write(component, SGTL5000_CHIP_ANA_POWER, ana_pwr);
1348
1349         /*
1350          * set ADC/DAC VAG to vdda / 2,
1351          * should stay in range (0.8v, 1.575v)
1352          */
1353         vag = vdda / 2;
1354         if (vag <= SGTL5000_ANA_GND_BASE)
1355                 vag = 0;
1356         else if (vag >= SGTL5000_ANA_GND_BASE + SGTL5000_ANA_GND_STP *
1357                  (SGTL5000_ANA_GND_MASK >> SGTL5000_ANA_GND_SHIFT))
1358                 vag = SGTL5000_ANA_GND_MASK >> SGTL5000_ANA_GND_SHIFT;
1359         else
1360                 vag = (vag - SGTL5000_ANA_GND_BASE) / SGTL5000_ANA_GND_STP;
1361
1362         snd_soc_component_update_bits(component, SGTL5000_CHIP_REF_CTRL,
1363                         SGTL5000_ANA_GND_MASK, vag << SGTL5000_ANA_GND_SHIFT);
1364
1365         /* set line out VAG to vddio / 2, in range (0.8v, 1.675v) */
1366         lo_vag = vddio / 2;
1367         if (lo_vag <= SGTL5000_LINE_OUT_GND_BASE)
1368                 lo_vag = 0;
1369         else if (lo_vag >= SGTL5000_LINE_OUT_GND_BASE +
1370                 SGTL5000_LINE_OUT_GND_STP * SGTL5000_LINE_OUT_GND_MAX)
1371                 lo_vag = SGTL5000_LINE_OUT_GND_MAX;
1372         else
1373                 lo_vag = (lo_vag - SGTL5000_LINE_OUT_GND_BASE) /
1374                     SGTL5000_LINE_OUT_GND_STP;
1375
1376         snd_soc_component_update_bits(component, SGTL5000_CHIP_LINE_OUT_CTRL,
1377                         SGTL5000_LINE_OUT_CURRENT_MASK |
1378                         SGTL5000_LINE_OUT_GND_MASK,
1379                         lo_vag << SGTL5000_LINE_OUT_GND_SHIFT |
1380                         SGTL5000_LINE_OUT_CURRENT_360u <<
1381                                 SGTL5000_LINE_OUT_CURRENT_SHIFT);
1382
1383         /*
1384          * Set lineout output level in range (0..31)
1385          * the same value is used for right and left channel
1386          *
1387          * Searching for a suitable index solving this formula:
1388          * idx = 40 * log10(vag_val / lo_cagcntrl) + 15
1389          */
1390         vol_quot = lo_vag ? (vag * 100) / lo_vag : 0;
1391         lo_vol = 0;
1392         for (i = 0; i < ARRAY_SIZE(vol_quot_table); i++) {
1393                 if (vol_quot >= vol_quot_table[i])
1394                         lo_vol = i;
1395                 else
1396                         break;
1397         }
1398
1399         snd_soc_component_update_bits(component, SGTL5000_CHIP_LINE_OUT_VOL,
1400                 SGTL5000_LINE_OUT_VOL_RIGHT_MASK |
1401                 SGTL5000_LINE_OUT_VOL_LEFT_MASK,
1402                 lo_vol << SGTL5000_LINE_OUT_VOL_RIGHT_SHIFT |
1403                 lo_vol << SGTL5000_LINE_OUT_VOL_LEFT_SHIFT);
1404
1405         return 0;
1406 }
1407
1408 static int sgtl5000_enable_regulators(struct i2c_client *client)
1409 {
1410         int ret;
1411         int i;
1412         int external_vddd = 0;
1413         struct regulator *vddd;
1414         struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client);
1415
1416         for (i = 0; i < ARRAY_SIZE(sgtl5000->supplies); i++)
1417                 sgtl5000->supplies[i].supply = supply_names[i];
1418
1419         vddd = regulator_get_optional(&client->dev, "VDDD");
1420         if (IS_ERR(vddd)) {
1421                 /* See if it's just not registered yet */
1422                 if (PTR_ERR(vddd) == -EPROBE_DEFER)
1423                         return -EPROBE_DEFER;
1424         } else {
1425                 external_vddd = 1;
1426                 regulator_put(vddd);
1427         }
1428
1429         sgtl5000->num_supplies = ARRAY_SIZE(sgtl5000->supplies)
1430                                  - 1 + external_vddd;
1431         ret = regulator_bulk_get(&client->dev, sgtl5000->num_supplies,
1432                                  sgtl5000->supplies);
1433         if (ret)
1434                 return ret;
1435
1436         ret = regulator_bulk_enable(sgtl5000->num_supplies,
1437                                     sgtl5000->supplies);
1438         if (!ret)
1439                 usleep_range(10, 20);
1440         else
1441                 regulator_bulk_free(sgtl5000->num_supplies,
1442                                     sgtl5000->supplies);
1443
1444         return ret;
1445 }
1446
1447 static int sgtl5000_probe(struct snd_soc_component *component)
1448 {
1449         int ret;
1450         u16 reg;
1451         struct sgtl5000_priv *sgtl5000 = snd_soc_component_get_drvdata(component);
1452         unsigned int zcd_mask = SGTL5000_HP_ZCD_EN | SGTL5000_ADC_ZCD_EN;
1453
1454         /* power up sgtl5000 */
1455         ret = sgtl5000_set_power_regs(component);
1456         if (ret)
1457                 goto err;
1458
1459         /* enable small pop, introduce 400ms delay in turning off */
1460         snd_soc_component_update_bits(component, SGTL5000_CHIP_REF_CTRL,
1461                                 SGTL5000_SMALL_POP, 1);
1462
1463         /* disable short cut detector */
1464         snd_soc_component_write(component, SGTL5000_CHIP_SHORT_CTRL, 0);
1465
1466         snd_soc_component_write(component, SGTL5000_CHIP_DIG_POWER,
1467                         SGTL5000_ADC_EN | SGTL5000_DAC_EN);
1468
1469         /* enable dac volume ramp by default */
1470         snd_soc_component_write(component, SGTL5000_CHIP_ADCDAC_CTRL,
1471                         SGTL5000_DAC_VOL_RAMP_EN |
1472                         SGTL5000_DAC_MUTE_RIGHT |
1473                         SGTL5000_DAC_MUTE_LEFT);
1474
1475         reg = ((sgtl5000->lrclk_strength) << SGTL5000_PAD_I2S_LRCLK_SHIFT | 0x5f);
1476         snd_soc_component_write(component, SGTL5000_CHIP_PAD_STRENGTH, reg);
1477
1478         snd_soc_component_update_bits(component, SGTL5000_CHIP_ANA_CTRL,
1479                 zcd_mask, zcd_mask);
1480
1481         snd_soc_component_update_bits(component, SGTL5000_CHIP_MIC_CTRL,
1482                         SGTL5000_BIAS_R_MASK,
1483                         sgtl5000->micbias_resistor << SGTL5000_BIAS_R_SHIFT);
1484
1485         snd_soc_component_update_bits(component, SGTL5000_CHIP_MIC_CTRL,
1486                         SGTL5000_BIAS_VOLT_MASK,
1487                         sgtl5000->micbias_voltage << SGTL5000_BIAS_VOLT_SHIFT);
1488         /*
1489          * enable DAP Graphic EQ
1490          * TODO:
1491          * Add control for changing between PEQ/Tone Control/GEQ
1492          */
1493         snd_soc_component_write(component, SGTL5000_DAP_AUDIO_EQ, SGTL5000_DAP_SEL_GEQ);
1494
1495         /* Unmute DAC after start */
1496         snd_soc_component_update_bits(component, SGTL5000_CHIP_ADCDAC_CTRL,
1497                 SGTL5000_DAC_MUTE_LEFT | SGTL5000_DAC_MUTE_RIGHT, 0);
1498
1499         return 0;
1500
1501 err:
1502         return ret;
1503 }
1504
1505 static const struct snd_soc_component_driver sgtl5000_driver = {
1506         .probe                  = sgtl5000_probe,
1507         .set_bias_level         = sgtl5000_set_bias_level,
1508         .controls               = sgtl5000_snd_controls,
1509         .num_controls           = ARRAY_SIZE(sgtl5000_snd_controls),
1510         .dapm_widgets           = sgtl5000_dapm_widgets,
1511         .num_dapm_widgets       = ARRAY_SIZE(sgtl5000_dapm_widgets),
1512         .dapm_routes            = sgtl5000_dapm_routes,
1513         .num_dapm_routes        = ARRAY_SIZE(sgtl5000_dapm_routes),
1514         .suspend_bias_off       = 1,
1515         .idle_bias_on           = 1,
1516         .use_pmdown_time        = 1,
1517         .endianness             = 1,
1518         .non_legacy_dai_naming  = 1,
1519 };
1520
1521 static const struct regmap_config sgtl5000_regmap = {
1522         .reg_bits = 16,
1523         .val_bits = 16,
1524         .reg_stride = 2,
1525
1526         .max_register = SGTL5000_MAX_REG_OFFSET,
1527         .volatile_reg = sgtl5000_volatile,
1528         .readable_reg = sgtl5000_readable,
1529
1530         .cache_type = REGCACHE_RBTREE,
1531         .reg_defaults = sgtl5000_reg_defaults,
1532         .num_reg_defaults = ARRAY_SIZE(sgtl5000_reg_defaults),
1533 };
1534
1535 /*
1536  * Write all the default values from sgtl5000_reg_defaults[] array into the
1537  * sgtl5000 registers, to make sure we always start with the sane registers
1538  * values as stated in the datasheet.
1539  *
1540  * Since sgtl5000 does not have a reset line, nor a reset command in software,
1541  * we follow this approach to guarantee we always start from the default values
1542  * and avoid problems like, not being able to probe after an audio playback
1543  * followed by a system reset or a 'reboot' command in Linux
1544  */
1545 static void sgtl5000_fill_defaults(struct i2c_client *client)
1546 {
1547         struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client);
1548         int i, ret, val, index;
1549
1550         for (i = 0; i < ARRAY_SIZE(sgtl5000_reg_defaults); i++) {
1551                 val = sgtl5000_reg_defaults[i].def;
1552                 index = sgtl5000_reg_defaults[i].reg;
1553                 ret = regmap_write(sgtl5000->regmap, index, val);
1554                 if (ret)
1555                         dev_err(&client->dev,
1556                                 "%s: error %d setting reg 0x%02x to 0x%04x\n",
1557                                 __func__, ret, index, val);
1558         }
1559 }
1560
1561 static int sgtl5000_i2c_probe(struct i2c_client *client,
1562                               const struct i2c_device_id *id)
1563 {
1564         struct sgtl5000_priv *sgtl5000;
1565         int ret, reg, rev;
1566         struct device_node *np = client->dev.of_node;
1567         u32 value;
1568         u16 ana_pwr;
1569
1570         sgtl5000 = devm_kzalloc(&client->dev, sizeof(*sgtl5000), GFP_KERNEL);
1571         if (!sgtl5000)
1572                 return -ENOMEM;
1573
1574         i2c_set_clientdata(client, sgtl5000);
1575
1576         ret = sgtl5000_enable_regulators(client);
1577         if (ret)
1578                 return ret;
1579
1580         sgtl5000->regmap = devm_regmap_init_i2c(client, &sgtl5000_regmap);
1581         if (IS_ERR(sgtl5000->regmap)) {
1582                 ret = PTR_ERR(sgtl5000->regmap);
1583                 dev_err(&client->dev, "Failed to allocate regmap: %d\n", ret);
1584                 goto disable_regs;
1585         }
1586
1587         sgtl5000->mclk = devm_clk_get(&client->dev, NULL);
1588         if (IS_ERR(sgtl5000->mclk)) {
1589                 ret = PTR_ERR(sgtl5000->mclk);
1590                 /* Defer the probe to see if the clk will be provided later */
1591                 if (ret == -ENOENT)
1592                         ret = -EPROBE_DEFER;
1593
1594                 if (ret != -EPROBE_DEFER)
1595                         dev_err(&client->dev, "Failed to get mclock: %d\n",
1596                                 ret);
1597                 goto disable_regs;
1598         }
1599
1600         ret = clk_prepare_enable(sgtl5000->mclk);
1601         if (ret) {
1602                 dev_err(&client->dev, "Error enabling clock %d\n", ret);
1603                 goto disable_regs;
1604         }
1605
1606         /* Need 8 clocks before I2C accesses */
1607         udelay(1);
1608
1609         /* read chip information */
1610         ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ID, &reg);
1611         if (ret) {
1612                 dev_err(&client->dev, "Error reading chip id %d\n", ret);
1613                 goto disable_clk;
1614         }
1615
1616         if (((reg & SGTL5000_PARTID_MASK) >> SGTL5000_PARTID_SHIFT) !=
1617             SGTL5000_PARTID_PART_ID) {
1618                 dev_err(&client->dev,
1619                         "Device with ID register %x is not a sgtl5000\n", reg);
1620                 ret = -ENODEV;
1621                 goto disable_clk;
1622         }
1623
1624         rev = (reg & SGTL5000_REVID_MASK) >> SGTL5000_REVID_SHIFT;
1625         dev_info(&client->dev, "sgtl5000 revision 0x%x\n", rev);
1626         sgtl5000->revision = rev;
1627
1628         /* reconfigure the clocks in case we're using the PLL */
1629         ret = regmap_write(sgtl5000->regmap,
1630                            SGTL5000_CHIP_CLK_CTRL,
1631                            SGTL5000_CHIP_CLK_CTRL_DEFAULT);
1632         if (ret)
1633                 dev_err(&client->dev,
1634                         "Error %d initializing CHIP_CLK_CTRL\n", ret);
1635
1636         /* Mute everything to avoid pop from the following power-up */
1637         ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_CTRL,
1638                            SGTL5000_CHIP_ANA_CTRL_DEFAULT);
1639         if (ret) {
1640                 dev_err(&client->dev,
1641                         "Error %d muting outputs via CHIP_ANA_CTRL\n", ret);
1642                 goto disable_clk;
1643         }
1644
1645         /*
1646          * If VAG is powered-on (e.g. from previous boot), it would be disabled
1647          * by the write to ANA_POWER in later steps of the probe code. This
1648          * may create a loud pop even with all outputs muted. The proper way
1649          * to circumvent this is disabling the bit first and waiting the proper
1650          * cool-down time.
1651          */
1652         ret = regmap_read(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, &value);
1653         if (ret) {
1654                 dev_err(&client->dev, "Failed to read ANA_POWER: %d\n", ret);
1655                 goto disable_clk;
1656         }
1657         if (value & SGTL5000_VAG_POWERUP) {
1658                 ret = regmap_update_bits(sgtl5000->regmap,
1659                                          SGTL5000_CHIP_ANA_POWER,
1660                                          SGTL5000_VAG_POWERUP,
1661                                          0);
1662                 if (ret) {
1663                         dev_err(&client->dev, "Error %d disabling VAG\n", ret);
1664                         goto disable_clk;
1665                 }
1666
1667                 msleep(SGTL5000_VAG_POWERDOWN_DELAY);
1668         }
1669
1670         /* Follow section 2.2.1.1 of AN3663 */
1671         ana_pwr = SGTL5000_ANA_POWER_DEFAULT;
1672         if (sgtl5000->num_supplies <= VDDD) {
1673                 /* internal VDDD at 1.2V */
1674                 ret = regmap_update_bits(sgtl5000->regmap,
1675                                          SGTL5000_CHIP_LINREG_CTRL,
1676                                          SGTL5000_LINREG_VDDD_MASK,
1677                                          LINREG_VDDD);
1678                 if (ret)
1679                         dev_err(&client->dev,
1680                                 "Error %d setting LINREG_VDDD\n", ret);
1681
1682                 ana_pwr |= SGTL5000_LINEREG_D_POWERUP;
1683                 dev_info(&client->dev,
1684                          "Using internal LDO instead of VDDD: check ER1 erratum\n");
1685         } else {
1686                 /* using external LDO for VDDD
1687                  * Clear startup powerup and simple powerup
1688                  * bits to save power
1689                  */
1690                 ana_pwr &= ~(SGTL5000_STARTUP_POWERUP
1691                              | SGTL5000_LINREG_SIMPLE_POWERUP);
1692                 dev_dbg(&client->dev, "Using external VDDD\n");
1693         }
1694         ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, ana_pwr);
1695         if (ret)
1696                 dev_err(&client->dev,
1697                         "Error %d setting CHIP_ANA_POWER to %04x\n",
1698                         ret, ana_pwr);
1699
1700         if (np) {
1701                 if (!of_property_read_u32(np,
1702                         "micbias-resistor-k-ohms", &value)) {
1703                         switch (value) {
1704                         case SGTL5000_MICBIAS_OFF:
1705                                 sgtl5000->micbias_resistor = 0;
1706                                 break;
1707                         case SGTL5000_MICBIAS_2K:
1708                                 sgtl5000->micbias_resistor = 1;
1709                                 break;
1710                         case SGTL5000_MICBIAS_4K:
1711                                 sgtl5000->micbias_resistor = 2;
1712                                 break;
1713                         case SGTL5000_MICBIAS_8K:
1714                                 sgtl5000->micbias_resistor = 3;
1715                                 break;
1716                         default:
1717                                 sgtl5000->micbias_resistor = 2;
1718                                 dev_err(&client->dev,
1719                                         "Unsuitable MicBias resistor\n");
1720                         }
1721                 } else {
1722                         /* default is 4Kohms */
1723                         sgtl5000->micbias_resistor = 2;
1724                 }
1725                 if (!of_property_read_u32(np,
1726                         "micbias-voltage-m-volts", &value)) {
1727                         /* 1250mV => 0 */
1728                         /* steps of 250mV */
1729                         if ((value >= 1250) && (value <= 3000))
1730                                 sgtl5000->micbias_voltage = (value / 250) - 5;
1731                         else {
1732                                 sgtl5000->micbias_voltage = 0;
1733                                 dev_err(&client->dev,
1734                                         "Unsuitable MicBias voltage\n");
1735                         }
1736                 } else {
1737                         sgtl5000->micbias_voltage = 0;
1738                 }
1739         }
1740
1741         sgtl5000->lrclk_strength = I2S_LRCLK_STRENGTH_LOW;
1742         if (!of_property_read_u32(np, "lrclk-strength", &value)) {
1743                 if (value > I2S_LRCLK_STRENGTH_HIGH)
1744                         value = I2S_LRCLK_STRENGTH_LOW;
1745                 sgtl5000->lrclk_strength = value;
1746         }
1747
1748         /* Ensure sgtl5000 will start with sane register values */
1749         sgtl5000_fill_defaults(client);
1750
1751         ret = devm_snd_soc_register_component(&client->dev,
1752                         &sgtl5000_driver, &sgtl5000_dai, 1);
1753         if (ret)
1754                 goto disable_clk;
1755
1756         return 0;
1757
1758 disable_clk:
1759         clk_disable_unprepare(sgtl5000->mclk);
1760
1761 disable_regs:
1762         regulator_bulk_disable(sgtl5000->num_supplies, sgtl5000->supplies);
1763         regulator_bulk_free(sgtl5000->num_supplies, sgtl5000->supplies);
1764
1765         return ret;
1766 }
1767
1768 static int sgtl5000_i2c_remove(struct i2c_client *client)
1769 {
1770         struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client);
1771
1772         regmap_write(sgtl5000->regmap, SGTL5000_CHIP_CLK_CTRL, SGTL5000_CHIP_CLK_CTRL_DEFAULT);
1773         regmap_write(sgtl5000->regmap, SGTL5000_CHIP_DIG_POWER, SGTL5000_DIG_POWER_DEFAULT);
1774         regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, SGTL5000_ANA_POWER_DEFAULT);
1775
1776         clk_disable_unprepare(sgtl5000->mclk);
1777         regulator_bulk_disable(sgtl5000->num_supplies, sgtl5000->supplies);
1778         regulator_bulk_free(sgtl5000->num_supplies, sgtl5000->supplies);
1779
1780         return 0;
1781 }
1782
1783 static void sgtl5000_i2c_shutdown(struct i2c_client *client)
1784 {
1785         sgtl5000_i2c_remove(client);
1786 }
1787
1788 static const struct i2c_device_id sgtl5000_id[] = {
1789         {"sgtl5000", 0},
1790         {},
1791 };
1792
1793 MODULE_DEVICE_TABLE(i2c, sgtl5000_id);
1794
1795 static const struct of_device_id sgtl5000_dt_ids[] = {
1796         { .compatible = "fsl,sgtl5000", },
1797         { /* sentinel */ }
1798 };
1799 MODULE_DEVICE_TABLE(of, sgtl5000_dt_ids);
1800
1801 static struct i2c_driver sgtl5000_i2c_driver = {
1802         .driver = {
1803                    .name = "sgtl5000",
1804                    .of_match_table = sgtl5000_dt_ids,
1805                    },
1806         .probe = sgtl5000_i2c_probe,
1807         .remove = sgtl5000_i2c_remove,
1808         .shutdown = sgtl5000_i2c_shutdown,
1809         .id_table = sgtl5000_id,
1810 };
1811
1812 module_i2c_driver(sgtl5000_i2c_driver);
1813
1814 MODULE_DESCRIPTION("Freescale SGTL5000 ALSA SoC Codec Driver");
1815 MODULE_AUTHOR("Zeng Zhaoming <zengzm.kernel@gmail.com>");
1816 MODULE_LICENSE("GPL");