blob: 896412d11a31c4a6e6ec02ac34add7d52fac3676 [file] [log] [blame]
xjb04a4022021-11-25 15:01:52 +08001// 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 */
42static 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, 0x0510 },
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 */
81static 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 */
95enum sgtl5000_regulator_supplies {
96 VDDA,
97 VDDIO,
98 VDDD,
99 SGTL5000_SUPPLY_NUM
100};
101
102/* vddd is optional supply */
103static 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
112enum 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
119enum {
120 I2S_LRCLK_STRENGTH_DISABLE,
121 I2S_LRCLK_STRENGTH_LOW,
122 I2S_LRCLK_STRENGTH_MEDIUM,
123 I2S_LRCLK_STRENGTH_HIGH,
124};
125
126enum {
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 */
134struct 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
149static 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
155static 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
166static 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
173static 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
190static 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
218static 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 */
258static 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
280static 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 */
332static 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 */
345static 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
354static 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 */
364static const char *adc_mux_text[] = {
365 "MIC_IN", "LINE_IN"
366};
367
368static SOC_ENUM_SINGLE_DECL(adc_enum,
369 SGTL5000_CHIP_ANA_CTRL, 2,
370 adc_mux_text);
371
372static const struct snd_kcontrol_new adc_mux =
373SOC_DAPM_ENUM("Capture Mux", adc_enum);
374
375/* input sources for headphone */
376static const char *hp_mux_text[] = {
377 "DAC", "LINE_IN"
378};
379
380static SOC_ENUM_SINGLE_DECL(hp_enum,
381 SGTL5000_CHIP_ANA_CTRL, 6,
382 hp_mux_text);
383
384static const struct snd_kcontrol_new hp_mux =
385SOC_DAPM_ENUM("Headphone Mux", hp_enum);
386
387/* input sources for DAC */
388static const char *dac_mux_text[] = {
389 "ADC", "I2S", "Rsvrd", "DAP"
390};
391
392static SOC_ENUM_SINGLE_DECL(dac_enum,
393 SGTL5000_CHIP_SSS_CTRL, SGTL5000_DAC_SEL_SHIFT,
394 dac_mux_text);
395
396static const struct snd_kcontrol_new dac_mux =
397SOC_DAPM_ENUM("Digital Input Mux", dac_enum);
398
399/* input sources for DAP */
400static const char *dap_mux_text[] = {
401 "ADC", "I2S"
402};
403
404static SOC_ENUM_SINGLE_DECL(dap_enum,
405 SGTL5000_CHIP_SSS_CTRL, SGTL5000_DAP_SEL_SHIFT,
406 dap_mux_text);
407
408static const struct snd_kcontrol_new dap_mux =
409SOC_DAPM_ENUM("DAP Mux", dap_enum);
410
411/* input sources for DAP mix */
412static const char *dapmix_mux_text[] = {
413 "ADC", "I2S"
414};
415
416static SOC_ENUM_SINGLE_DECL(dapmix_enum,
417 SGTL5000_CHIP_SSS_CTRL, SGTL5000_DAP_MIX_SEL_SHIFT,
418 dapmix_mux_text);
419
420static const struct snd_kcontrol_new dapmix_mux =
421SOC_DAPM_ENUM("DAP MIX Mux", dapmix_enum);
422
423
424static 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 */
468static 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 */
499static 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 */
532static 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 */
585static 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 */
623static 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 */
656static 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
672static const DECLARE_TLV_DB_SCALE(capture_6db_attenuate, -600, 600, 0);
673
674/* tlv for mic gain, 0db 20db 30db 40db */
675static 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% */
681static const DECLARE_TLV_DB_SCALE(dap_volume, 0, 1, 0);
682
683/* tlv for bass bands, -11.75db to 12.0db, step .25db */
684static const DECLARE_TLV_DB_SCALE(bass_band, -1175, 25, 0);
685
686/* tlv for hp volume, -51.5db to 12.0db, step .5db */
687static const DECLARE_TLV_DB_SCALE(headphone_volume, -5150, 50, 0);
688
689/* tlv for lineout volume, 31 steps of .5db each */
690static const DECLARE_TLV_DB_SCALE(lineout_volume, -1550, 50, 0);
691
692/* tlv for dap avc max gain, 0db, 6db, 12db */
693static const DECLARE_TLV_DB_SCALE(avc_max_gain, 0, 600, 0);
694
695/* tlv for dap avc threshold, */
696static const DECLARE_TLV_DB_MINMAX(avc_threshold, 0, 9600);
697
698static 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 */
769static 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 */
786static 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 */
853static 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 */
883static 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 */
1038static 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 */
1116static 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
1152static 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
1159static 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
1183static 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
1195static 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 */
1261static 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 */
1279static 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
1408static 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
1447static 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
1501err:
1502 return ret;
1503}
1504
1505static 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
1521static 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 */
1545static 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
1561static 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 /* Follow section 2.2.1.1 of AN3663 */
1637 ana_pwr = SGTL5000_ANA_POWER_DEFAULT;
1638 if (sgtl5000->num_supplies <= VDDD) {
1639 /* internal VDDD at 1.2V */
1640 ret = regmap_update_bits(sgtl5000->regmap,
1641 SGTL5000_CHIP_LINREG_CTRL,
1642 SGTL5000_LINREG_VDDD_MASK,
1643 LINREG_VDDD);
1644 if (ret)
1645 dev_err(&client->dev,
1646 "Error %d setting LINREG_VDDD\n", ret);
1647
1648 ana_pwr |= SGTL5000_LINEREG_D_POWERUP;
1649 dev_info(&client->dev,
1650 "Using internal LDO instead of VDDD: check ER1 erratum\n");
1651 } else {
1652 /* using external LDO for VDDD
1653 * Clear startup powerup and simple powerup
1654 * bits to save power
1655 */
1656 ana_pwr &= ~(SGTL5000_STARTUP_POWERUP
1657 | SGTL5000_LINREG_SIMPLE_POWERUP);
1658 dev_dbg(&client->dev, "Using external VDDD\n");
1659 }
1660 ret = regmap_write(sgtl5000->regmap, SGTL5000_CHIP_ANA_POWER, ana_pwr);
1661 if (ret)
1662 dev_err(&client->dev,
1663 "Error %d setting CHIP_ANA_POWER to %04x\n",
1664 ret, ana_pwr);
1665
1666 if (np) {
1667 if (!of_property_read_u32(np,
1668 "micbias-resistor-k-ohms", &value)) {
1669 switch (value) {
1670 case SGTL5000_MICBIAS_OFF:
1671 sgtl5000->micbias_resistor = 0;
1672 break;
1673 case SGTL5000_MICBIAS_2K:
1674 sgtl5000->micbias_resistor = 1;
1675 break;
1676 case SGTL5000_MICBIAS_4K:
1677 sgtl5000->micbias_resistor = 2;
1678 break;
1679 case SGTL5000_MICBIAS_8K:
1680 sgtl5000->micbias_resistor = 3;
1681 break;
1682 default:
1683 sgtl5000->micbias_resistor = 2;
1684 dev_err(&client->dev,
1685 "Unsuitable MicBias resistor\n");
1686 }
1687 } else {
1688 /* default is 4Kohms */
1689 sgtl5000->micbias_resistor = 2;
1690 }
1691 if (!of_property_read_u32(np,
1692 "micbias-voltage-m-volts", &value)) {
1693 /* 1250mV => 0 */
1694 /* steps of 250mV */
1695 if ((value >= 1250) && (value <= 3000))
1696 sgtl5000->micbias_voltage = (value / 250) - 5;
1697 else {
1698 sgtl5000->micbias_voltage = 0;
1699 dev_err(&client->dev,
1700 "Unsuitable MicBias voltage\n");
1701 }
1702 } else {
1703 sgtl5000->micbias_voltage = 0;
1704 }
1705 }
1706
1707 sgtl5000->lrclk_strength = I2S_LRCLK_STRENGTH_LOW;
1708 if (!of_property_read_u32(np, "lrclk-strength", &value)) {
1709 if (value > I2S_LRCLK_STRENGTH_HIGH)
1710 value = I2S_LRCLK_STRENGTH_LOW;
1711 sgtl5000->lrclk_strength = value;
1712 }
1713
1714 /* Ensure sgtl5000 will start with sane register values */
1715 sgtl5000_fill_defaults(client);
1716
1717 ret = devm_snd_soc_register_component(&client->dev,
1718 &sgtl5000_driver, &sgtl5000_dai, 1);
1719 if (ret)
1720 goto disable_clk;
1721
1722 return 0;
1723
1724disable_clk:
1725 clk_disable_unprepare(sgtl5000->mclk);
1726
1727disable_regs:
1728 regulator_bulk_disable(sgtl5000->num_supplies, sgtl5000->supplies);
1729 regulator_bulk_free(sgtl5000->num_supplies, sgtl5000->supplies);
1730
1731 return ret;
1732}
1733
1734static int sgtl5000_i2c_remove(struct i2c_client *client)
1735{
1736 struct sgtl5000_priv *sgtl5000 = i2c_get_clientdata(client);
1737
1738 clk_disable_unprepare(sgtl5000->mclk);
1739 regulator_bulk_disable(sgtl5000->num_supplies, sgtl5000->supplies);
1740 regulator_bulk_free(sgtl5000->num_supplies, sgtl5000->supplies);
1741
1742 return 0;
1743}
1744
1745static const struct i2c_device_id sgtl5000_id[] = {
1746 {"sgtl5000", 0},
1747 {},
1748};
1749
1750MODULE_DEVICE_TABLE(i2c, sgtl5000_id);
1751
1752static const struct of_device_id sgtl5000_dt_ids[] = {
1753 { .compatible = "fsl,sgtl5000", },
1754 { /* sentinel */ }
1755};
1756MODULE_DEVICE_TABLE(of, sgtl5000_dt_ids);
1757
1758static struct i2c_driver sgtl5000_i2c_driver = {
1759 .driver = {
1760 .name = "sgtl5000",
1761 .of_match_table = sgtl5000_dt_ids,
1762 },
1763 .probe = sgtl5000_i2c_probe,
1764 .remove = sgtl5000_i2c_remove,
1765 .id_table = sgtl5000_id,
1766};
1767
1768module_i2c_driver(sgtl5000_i2c_driver);
1769
1770MODULE_DESCRIPTION("Freescale SGTL5000 ALSA SoC Codec Driver");
1771MODULE_AUTHOR("Zeng Zhaoming <zengzm.kernel@gmail.com>");
1772MODULE_LICENSE("GPL");