Lines Matching +full:use +full:- +full:case
1 // SPDX-License-Identifier: GPL-2.0
3 // es8396.c -- ES8396 ALSA SoC Audio Codec
7 // Authors: David Yang(yangxiaohua@everest-semi.com)
227 * Add a delay work-quenue, to debug DC calibration
255 case MICBIAS_3V: in es8396_valid_micbias()
256 case MICBIAS_2_8V: in es8396_valid_micbias()
257 case MICBIAS_2_5V: in es8396_valid_micbias()
258 case MICBIAS_2_3V: in es8396_valid_micbias()
259 case MICBIAS_2V: in es8396_valid_micbias()
260 case MICBIAS_1_5V: in es8396_valid_micbias()
271 case ANA_LDO_3V: in es8396_valid_analdo()
272 case ANA_LDO_2_9V: in es8396_valid_analdo()
273 case ANA_LDO_2_8V: in es8396_valid_analdo()
274 case ANA_LDO_2_7V: in es8396_valid_analdo()
275 case ANA_LDO_2_4V: in es8396_valid_analdo()
276 case ANA_LDO_2_3V: in es8396_valid_analdo()
277 case ANA_LDO_2_2V: in es8396_valid_analdo()
278 case ANA_LDO_2_1V: in es8396_valid_analdo()
289 case SPK_LDO_3_3V: in es8396_valid_spkldo()
290 case SPK_LDO_3_2V: in es8396_valid_spkldo()
291 case SPK_LDO_3V: in es8396_valid_spkldo()
292 case SPK_LDO_2_9V: in es8396_valid_spkldo()
293 case SPK_LDO_2_8V: in es8396_valid_spkldo()
294 case SPK_LDO_2_6V: in es8396_valid_spkldo()
295 case SPK_LDO_2_5V: in es8396_valid_spkldo()
296 case SPK_LDO_2_4V: in es8396_valid_spkldo()
308 struct snd_soc_component *component = es8396->component; in pcm_shutdown_depop_events()
310 mutex_lock(&es8396->pcm_shutdown_depop_mlock); in pcm_shutdown_depop_events()
313 es8396->aif1_select &= 0xfe; in pcm_shutdown_depop_events()
314 mutex_unlock(&es8396->pcm_shutdown_depop_mlock); in pcm_shutdown_depop_events()
321 struct snd_soc_component *component = es8396->component; in voice_shutdown_depop_events()
323 mutex_lock(&es8396->voice_shutdown_depop_mlock); in voice_shutdown_depop_events()
326 es8396->aif2_select &= 0xfe; in voice_shutdown_depop_events()
327 if (es8396->aif1_select != 0) { in voice_shutdown_depop_events()
333 mutex_unlock(&es8396->voice_shutdown_depop_mlock); in voice_shutdown_depop_events()
340 struct snd_soc_component *component = es8396->component; in init_cali_work_events()
342 mutex_lock(&es8396->init_cali_mlock); in init_cali_work_events()
344 if (es8396->pcm_pop_work_retry > 0) { in init_cali_work_events()
345 es8396->pcm_pop_work_retry--; in init_cali_work_events()
348 if (es8396->pcm_pop_work_retry) { in init_cali_work_events()
349 schedule_delayed_work(&es8396->init_cali_work, in init_cali_work_events()
355 /* use line out */ in init_cali_work_events()
362 mutex_unlock(&es8396->init_cali_mlock); in init_cali_work_events()
369 struct snd_soc_component *component = es8396->component; in voice_pop_work_events()
372 mutex_lock(&es8396->voice_depop_mlock); in voice_pop_work_events()
384 /* use line out */ in voice_pop_work_events()
395 snd_soc_component_write(component, 0x6A, 120 - i); in voice_pop_work_events()
396 snd_soc_component_write(component, 0x6B, 120 - i); in voice_pop_work_events()
400 mutex_unlock(&es8396->voice_depop_mlock); in voice_pop_work_events()
407 struct snd_soc_component *component = es8396->component; in pcm_pop_work_events()
410 mutex_lock(&es8396->pcm_depop_mlock); in pcm_pop_work_events()
415 /* use line out */ in pcm_pop_work_events()
423 snd_soc_component_write(component, 0x6A, 120 - i); in pcm_pop_work_events()
424 snd_soc_component_write(component, 0x6B, 120 - i); in pcm_pop_work_events()
427 mutex_unlock(&es8396->pcm_depop_mlock); in pcm_pop_work_events()
437 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in classd_event()
441 case SND_SOC_DAPM_PRE_PMU: /* prepare power up */ in classd_event()
457 if (es8396_valid_spkldo(es8396->spk_ldo_lvl) == false) { in classd_event()
459 return -EINVAL; in classd_event()
462 lvl = es8396->spk_ldo_lvl; in classd_event()
467 if (es8396->spkmono == 1) { /* speaker in mono mode */ in classd_event()
483 /* L&R DAC Vol=-6db */ in classd_event()
502 es8396->output_device_selected = 0; in classd_event()
504 case SND_SOC_DAPM_POST_PMU: /* after power up */ in classd_event()
506 schedule_delayed_work(&es8396->pcm_pop_work, in classd_event()
509 case SND_SOC_DAPM_PRE_PMD: /* prepare power down */ in classd_event()
517 /* snd_soc_component_update_bits(w->component, ES8396_DAC_CSM_REG66, in classd_event()
534 case SND_SOC_DAPM_POST_PMD: /* after power down */ in classd_event()
546 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in micbias_event()
551 case SND_SOC_DAPM_PRE_PMU: in micbias_event()
552 if (es8396_valid_micbias(es8396->mic_bias_lvl) == false) { in micbias_event()
554 return -EINVAL; in micbias_event()
556 regv = es8396->mic_bias_lvl; in micbias_event()
564 if (es8396->dmic_amic == MIC_DMIC) { in micbias_event()
572 case SND_SOC_DAPM_POST_PMD: in micbias_event()
588 struct snd_soc_component *component = es8396->component; in adc_depop_work_events()
591 mutex_lock(&es8396->adc_depop_mlock); in adc_depop_work_events()
593 mutex_unlock(&es8396->adc_depop_mlock); in adc_depop_work_events()
600 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in adc_event()
605 case SND_SOC_DAPM_PRE_PMU: in adc_event()
649 schedule_delayed_work(&es8396->adc_depop_work, in adc_event()
652 case SND_SOC_DAPM_PRE_PMD: in adc_event()
672 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm); in hpamp_event()
677 case SND_SOC_DAPM_PRE_PMU: in hpamp_event()
680 es8396->output_device_selected = 1; in hpamp_event()
682 case SND_SOC_DAPM_POST_PMU: in hpamp_event()
685 schedule_delayed_work(&es8396->pcm_pop_work, in hpamp_event()
688 case SND_SOC_DAPM_PRE_PMD: in hpamp_event()
694 case SND_SOC_DAPM_POST_PMD: in hpamp_event()
723 0, 4, TLV_DB_SCALE_ITEM(-1200, 150, 0),
724 8, 11, TLV_DB_SCALE_ITEM(-600, 150, 0));
729 /* -34.5db min scale, 1.5db steps, no mute */
730 static const DECLARE_TLV_DB_SCALE(vol_tlv, -600, 150, 0);
731 /* -34.5db min scale, 1.5db steps, no mute */
733 /* -46.5db min scale, 1.5db steps, no mute */
734 static const DECLARE_TLV_DB_SCALE(hp_tlv, -4800, 1200, 0);
735 /* -16.5db min scale, 1.5db steps, no mute */
736 static const DECLARE_TLV_DB_SCALE(adc_rec_tlv, -9600, 50, 0);
738 static const DECLARE_TLV_DB_SCALE(lineout_tlv, -1200, 1200, 0);
743 static const DECLARE_TLV_DB_SCALE(vdac_tlv, -9600, 50, 0);
751 *define the line in,mic in, phone in ,and aif1-2 in volume/switch
1095 "dmic disable,use adc",
1096 "ldata use ladc,rdata use ldmic at low clk",
1097 "ldata use ladc,rdata use rdmic at low clk",
1098 "ldata use ladc,rdata use rdmic at high clk",
1099 "ldata use ldmic at high clk,rdata use radc",
1100 "ldata use ldmic at high clk,rdata use ldmic at low clk",
1102 "ldata use ldmic at high clk,rdata use rdmic at low clk",
1103 "ldata use ldmic at high clk,rdata use rdmic at high clk",
1104 "ldata use rdmic at high clk,rdata use radc",
1106 "ldata use rdmic at high clk,rdata use ldmic at low clk",
1107 "ldata use rdmic at high clk,rdata use rdmic at low clk",
1108 "ldata use rdmic at high clk,rdata use rdmic at high clk",
1109 "ldata use ldmic at low clk,rdata use radc",
1110 "ldata use ldmic at low clk,rdata use ldmic at low clk",
1111 "ldata use ldmic at low clk,rdata use rdmic at low clk",
1113 "ldata use ldmic at low clk,rdata use rdmic at high clk",
1948 struct snd_soc_component *component = dai->component; in es8396_set_pll()
1954 case ES8396_PLL: in es8396_set_pll()
1957 return -EINVAL; in es8396_set_pll()
1966 case ES8396_PLL_NO_SRC_0: in es8396_set_pll()
1969 return -EINVAL; in es8396_set_pll()
1983 case ES8396_PLL_SRC_FRM_MCLK: in es8396_set_pll()
1987 /* use clk2 for pll clk source */ in es8396_set_pll()
1994 case ES8396_PLL_SRC_FRM_BCLK: in es8396_set_pll()
1998 /* use clk2 for pll clk source */ in es8396_set_pll()
2006 return -EINVAL; in es8396_set_pll()
2053 switch (priv->dvdd_pwr_vol) { in es8396_set_pll()
2054 case 0x18: in es8396_set_pll()
2060 case 0x25: in es8396_set_pll()
2066 case 0x33: in es8396_set_pll()
2085 priv->mclk[dai->id - 1] = freq_out; in es8396_set_pll()
2098 * if PLL not be used, use internal clk1 for mclk,
2099 * otherwise, use internal clk2 for PLL source.
2104 struct snd_soc_component *component = dai->component; in es8396_set_dai_sysclk()
2108 switch (dai->id) { in es8396_set_dai_sysclk()
2109 case ES8396_SDP1: in es8396_set_dai_sysclk()
2110 case ES8396_SDP2: in es8396_set_dai_sysclk()
2111 case ES8396_SDP3: in es8396_set_dai_sysclk()
2114 return -EINVAL; in es8396_set_dai_sysclk()
2117 /* the clock source form MCLK pin, don't use PLL */ in es8396_set_dai_sysclk()
2118 case ES8396_CLKID_MCLK: in es8396_set_dai_sysclk()
2124 /* always use clk1 */ in es8396_set_dai_sysclk()
2129 priv->sysclk[dai->id] = clk_id; in es8396_set_dai_sysclk()
2130 priv->mclk[dai->id] = freq; in es8396_set_dai_sysclk()
2136 switch (dai->id) { in es8396_set_dai_sysclk()
2137 case ES8396_SDP1: in es8396_set_dai_sysclk()
2138 /* bclkdiv m1 use clk1 */ in es8396_set_dai_sysclk()
2141 /* lrckdiv m3 use clk1 */ in es8396_set_dai_sysclk()
2145 case ES8396_SDP2: in es8396_set_dai_sysclk()
2146 case ES8396_SDP3: in es8396_set_dai_sysclk()
2147 /* bclkdiv m1 use clk1 */ in es8396_set_dai_sysclk()
2150 /* lrckdiv m4 use clk1 */ in es8396_set_dai_sysclk()
2159 /* the clock source form internal BCLK signal, don't use PLL */ in es8396_set_dai_sysclk()
2160 case ES8396_CLKID_BCLK: in es8396_set_dai_sysclk()
2165 /* always use clk1 */ in es8396_set_dai_sysclk()
2170 priv->sysclk[dai->id] = clk_id; in es8396_set_dai_sysclk()
2171 priv->mclk[dai->id] = freq; in es8396_set_dai_sysclk()
2177 switch (dai->id) { in es8396_set_dai_sysclk()
2178 case ES8396_SDP1: in es8396_set_dai_sysclk()
2179 /* bclkdiv m1 use clk1 */ in es8396_set_dai_sysclk()
2182 /* lrckdiv m3 use clk1 */ in es8396_set_dai_sysclk()
2186 case ES8396_SDP2: in es8396_set_dai_sysclk()
2187 case ES8396_SDP3: in es8396_set_dai_sysclk()
2188 /* bclkdiv m1 use clk1 */ in es8396_set_dai_sysclk()
2191 /* lrckdiv m4 use clk1 */ in es8396_set_dai_sysclk()
2200 case ES8396_CLKID_PLLO: in es8396_set_dai_sysclk()
2201 priv->sysclk[dai->id] = ES8396_CLKID_PLLO; in es8396_set_dai_sysclk()
2202 switch (dai->id) { in es8396_set_dai_sysclk()
2203 case ES8396_SDP1: in es8396_set_dai_sysclk()
2204 /* bclkdiv m1 use clk1 */ in es8396_set_dai_sysclk()
2207 /* lrckdiv m3 use clk1 */ in es8396_set_dai_sysclk()
2211 case ES8396_SDP2: in es8396_set_dai_sysclk()
2212 /* bclkdiv m1 use clk2 */ in es8396_set_dai_sysclk()
2215 /* lrckdiv m3 use clk2 */ in es8396_set_dai_sysclk()
2219 case ES8396_SDP3: in es8396_set_dai_sysclk()
2220 /* bclkdiv m1 use clk2 */ in es8396_set_dai_sysclk()
2223 /* lrckdiv m4 use clk2 */ in es8396_set_dai_sysclk()
2234 return -EINVAL; in es8396_set_dai_sysclk()
2296 struct snd_soc_component *component = codec_dai->component; in es8396_set_dai_fmt()
2298 u8 id = codec_dai->id; in es8396_set_dai_fmt()
2303 case ES8396_SDP1: in es8396_set_dai_fmt()
2307 case ES8396_SDP2: in es8396_set_dai_fmt()
2311 case ES8396_SDP3: in es8396_set_dai_fmt()
2316 return -EINVAL; in es8396_set_dai_fmt()
2320 case SND_SOC_DAIFMT_CBM_CFM: in es8396_set_dai_fmt()
2331 case SND_SOC_DAIFMT_CBS_CFS: in es8396_set_dai_fmt()
2336 return -EINVAL; in es8396_set_dai_fmt()
2343 case SND_SOC_DAIFMT_I2S: in es8396_set_dai_fmt()
2345 /* lrck polarity normal, TO CHECK THE L&R Inverted for i-net */ in es8396_set_dai_fmt()
2348 case SND_SOC_DAIFMT_LEFT_J: in es8396_set_dai_fmt()
2352 case SND_SOC_DAIFMT_RIGHT_J: in es8396_set_dai_fmt()
2358 return -EINVAL; in es8396_set_dai_fmt()
2361 case SND_SOC_DAIFMT_DSP_A: in es8396_set_dai_fmt()
2362 case SND_SOC_DAIFMT_DSP_B: in es8396_set_dai_fmt()
2371 return -EINVAL; in es8396_set_dai_fmt()
2375 pr_debug("es8396_set_dai_fmt-->\n"); in es8396_set_dai_fmt()
2377 priv->config[id].spc = spc; in es8396_set_dai_fmt()
2378 priv->config[id].mmcc = mmcc; in es8396_set_dai_fmt()
2387 struct snd_soc_component *component = dai->component; in es8396_pcm_hw_params()
2389 int id = dai->id; in es8396_pcm_hw_params()
2395 id, priv->mclk[0], srate, in es8396_pcm_hw_params()
2400 case ES8396_SDP1: in es8396_pcm_hw_params()
2409 priv->config[id].srate = srate; in es8396_pcm_hw_params()
2410 priv->config[id].lrcdiv = lrdiv; in es8396_pcm_hw_params()
2411 priv->config[id].sclkdiv = bdiv; in es8396_pcm_hw_params()
2413 case ES8396_SDP2: in es8396_pcm_hw_params()
2414 case ES8396_SDP3: in es8396_pcm_hw_params()
2423 priv->config[id].srate = srate; in es8396_pcm_hw_params()
2424 priv->config[id].lrcdiv = lrdiv; in es8396_pcm_hw_params()
2425 priv->config[id].sclkdiv = bdiv; in es8396_pcm_hw_params()
2428 return -EINVAL; in es8396_pcm_hw_params()
2441 case SND_SOC_BIAS_ON: in es8396_set_bias_level()
2453 case SND_SOC_BIAS_PREPARE: in es8396_set_bias_level()
2456 case SND_SOC_BIAS_STANDBY: in es8396_set_bias_level()
2457 if (es8396->aif1_select == 0 && es8396->aif2_select == 0) { in es8396_set_bias_level()
2461 if (es8396_valid_analdo(es8396->ana_ldo_lvl)) { in es8396_set_bias_level()
2462 value = es8396->ana_ldo_lvl; in es8396_set_bias_level()
2476 case SND_SOC_BIAS_OFF: in es8396_set_bias_level()
2485 struct snd_soc_component *component = dai->component; in es8396_set_tristate()
2486 int id = dai->id; in es8396_set_tristate()
2491 case ES8396_SDP1: in es8396_set_tristate()
2494 case ES8396_SDP2: in es8396_set_tristate()
2495 case ES8396_SDP3: in es8396_set_tristate()
2497 return -EINVAL; in es8396_set_tristate()
2499 return -EINVAL; in es8396_set_tristate()
2506 bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK); in es8396_pcm_startup()
2507 struct snd_soc_component *component = dai->component; in es8396_pcm_startup()
2521 if ((es8396->aif2_select & 0x01) == 0) { in es8396_pcm_startup()
2545 es8396->aif1_select |= 0x01; in es8396_pcm_startup()
2552 if (es8396->calibrate == 0) { in es8396_pcm_startup()
2554 es8396->calibrate = true; in es8396_pcm_startup()
2556 schedule_delayed_work(&es8396->pcm_pop_work, in es8396_pcm_startup()
2600 es8396->aif1_select |= 0x02; in es8396_pcm_startup()
2601 schedule_delayed_work(&es8396->adc_depop_work, in es8396_pcm_startup()
2610 bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK); in es8396_pcm_shutdown()
2611 struct snd_soc_component *component = dai->component; in es8396_pcm_shutdown()
2621 schedule_delayed_work(&es8396->pcm_shutdown_depop_work, in es8396_pcm_shutdown()
2627 es8396->aif1_select &= 0xfd; in es8396_pcm_shutdown()
2635 bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK); in es8396_voice_startup()
2636 struct snd_soc_component *component = dai->component; in es8396_voice_startup()
2645 es8396->aif2_select |= 0x01; in es8396_voice_startup()
2657 /* DSP-B, 1st SCLK after LRCK edge, I2S2 SDPIN */ in es8396_voice_startup()
2665 if ((es8396->aif1_select & 0x01) == 0) { in es8396_voice_startup()
2685 schedule_delayed_work(&es8396->voice_pop_work, in es8396_voice_startup()
2689 es8396->aif2_select |= 0x02; in es8396_voice_startup()
2736 struct snd_soc_component *component = dai->component; in es8396_voice_shutdown()
2738 bool playback = (substream->stream == SNDRV_PCM_STREAM_PLAYBACK); in es8396_voice_shutdown()
2742 /* DSP-B, 1st SCLK after LRCK edge, I2S2 SDPIN */ in es8396_voice_shutdown()
2746 schedule_delayed_work(&es8396->voice_shutdown_depop_work, in es8396_voice_shutdown()
2750 /* //DSP-B, 1st SCLK after LRCK edge, I2S2 SDPO */ in es8396_voice_shutdown()
2753 es8396->aif2_select &= 0xfd; in es8396_voice_shutdown()
2762 struct snd_soc_component *component = codec_dai->component; in es8396_aif1_mute()
2765 pr_debug("es8396_aif1_mute id = %d, mute = %d", codec_dai->id, mute); in es8396_aif1_mute()
2767 if (es8396->spk_ctl_gpio && es8396->aif2_select == 0) in es8396_aif1_mute()
2768 gpiod_set_value(es8396->spk_ctl_gpio, 0); in es8396_aif1_mute()
2769 if (es8396->lineout_ctl_gpio && es8396->aif2_select == 0) in es8396_aif1_mute()
2770 gpiod_set_value(es8396->lineout_ctl_gpio, 0); in es8396_aif1_mute()
2773 if (es8396->spk_ctl_gpio) in es8396_aif1_mute()
2774 gpiod_set_value(es8396->spk_ctl_gpio, 1); in es8396_aif1_mute()
2775 if (es8396->lineout_ctl_gpio) in es8396_aif1_mute()
2776 gpiod_set_value(es8396->lineout_ctl_gpio, 1); in es8396_aif1_mute()
2784 struct snd_soc_component *component = codec_dai->component; in es8396_aif2_mute()
2787 pr_debug("es8396_aif2_mute id = %d, mute = %d", codec_dai->id, mute); in es8396_aif2_mute()
2790 if (es8396->spk_ctl_gpio && es8396->aif1_select == 0) in es8396_aif2_mute()
2791 gpiod_set_value(es8396->spk_ctl_gpio, 0); in es8396_aif2_mute()
2792 if (es8396->lineout_ctl_gpio && es8396->aif1_select == 0) in es8396_aif2_mute()
2793 gpiod_set_value(es8396->lineout_ctl_gpio, 0); in es8396_aif2_mute()
2796 if (es8396->spk_ctl_gpio) in es8396_aif2_mute()
2797 gpiod_set_value(es8396->spk_ctl_gpio, 1); in es8396_aif2_mute()
2798 if (es8396->lineout_ctl_gpio) in es8396_aif2_mute()
2799 gpiod_set_value(es8396->lineout_ctl_gpio, 1); in es8396_aif2_mute()
2804 /* SNDRV_PCM_RATE_KNOT -> 12000, 24000 Hz, limit with constraint list */
2834 .name = "es8396-aif1",
2856 struct snd_soc_component *component = es8396->component; in es8396_suspend()
2869 struct snd_soc_component *component = es8396->component; in es8396_resume()
2886 es8396->component = component; in es8396_probe()
2887 es8396->mclk_clock = devm_clk_get(component->dev, "mclk"); in es8396_probe()
2888 if (PTR_ERR(es8396->mclk_clock) == -EPROBE_DEFER) in es8396_probe()
2889 return -EPROBE_DEFER; in es8396_probe()
2891 ret = clk_prepare_enable(es8396->mclk_clock); in es8396_probe()
2923 if (es8396_valid_analdo(es8396->ana_ldo_lvl) == false) { in es8396_probe()
2925 return -EINVAL; in es8396_probe()
2927 value = es8396->ana_ldo_lvl; in es8396_probe()
2967 if (es8396_valid_micbias(es8396->mic_bias_lvl) == false) { in es8396_probe()
2969 return -EINVAL; in es8396_probe()
2971 value = es8396->mic_bias_lvl; in es8396_probe()
2980 if (es8396->dmic_amic == MIC_AMIC) in es8396_probe()
2981 /*use analog mic */ in es8396_probe()
2985 /*use digital mic */ in es8396_probe()
2999 if (es8396->jackdet_enable == 1) { in es8396_probe()
3003 if (es8396->gpio_int_pol == 0) in es8396_probe()
3020 if (es8396->monoin_differential == 1) in es8396_probe()
3031 //codec->dapm.bias_level = SND_SOC_BIAS_STANDBY; in es8396_probe()
3034 INIT_DELAYED_WORK(&es8396->adc_depop_work, adc_depop_work_events); in es8396_probe()
3035 mutex_init(&es8396->adc_depop_mlock); in es8396_probe()
3036 INIT_DELAYED_WORK(&es8396->pcm_pop_work, pcm_pop_work_events); in es8396_probe()
3037 mutex_init(&es8396->pcm_depop_mlock); in es8396_probe()
3039 INIT_DELAYED_WORK(&es8396->voice_pop_work, voice_pop_work_events); in es8396_probe()
3040 mutex_init(&es8396->voice_depop_mlock); in es8396_probe()
3042 INIT_DELAYED_WORK(&es8396->init_cali_work, init_cali_work_events); in es8396_probe()
3043 mutex_init(&es8396->init_cali_mlock); in es8396_probe()
3045 INIT_DELAYED_WORK(&es8396->pcm_shutdown_depop_work, in es8396_probe()
3047 mutex_init(&es8396->pcm_shutdown_depop_mlock); in es8396_probe()
3049 INIT_DELAYED_WORK(&es8396->voice_shutdown_depop_work, in es8396_probe()
3051 mutex_init(&es8396->voice_shutdown_depop_mlock); in es8396_probe()
3103 return -EINVAL; in init_es8396_prv()
3105 es8396->dvdd_pwr_vol = 0x18; in init_es8396_prv()
3106 es8396->spkmono = false; in init_es8396_prv()
3107 es8396->earpiece = true; in init_es8396_prv()
3108 es8396->monoin_differential = true; in init_es8396_prv()
3109 es8396->lno_differential = 0; in init_es8396_prv()
3110 es8396->ana_ldo_lvl = ANA_LDO_2_1V; in init_es8396_prv()
3111 es8396->spk_ldo_lvl = SPK_LDO_3V; in init_es8396_prv()
3112 es8396->mic_bias_lvl = MICBIAS_3V; in init_es8396_prv()
3113 es8396->jackdet_enable = true; in init_es8396_prv()
3114 es8396->gpio_int_pol = 0; in init_es8396_prv()
3115 es8396->dmic_amic = MIC_AMIC; in init_es8396_prv()
3116 es8396->calibrate = false; in init_es8396_prv()
3117 es8396->pcm_pop_work_retry = 1; in init_es8396_prv()
3118 es8396->output_device_selected = 0; in init_es8396_prv()
3119 es8396->aif1_select = 0; in init_es8396_prv()
3120 es8396->aif2_select = 0; in init_es8396_prv()
3130 es8396 = devm_kzalloc(&i2c_client->dev, sizeof(struct es8396_private), in es8396_i2c_probe()
3133 return -ENOMEM; in es8396_i2c_probe()
3137 return -EINVAL; in es8396_i2c_probe()
3139 es8396->regmap = devm_regmap_init_i2c(i2c_client, &es8396_regmap_config); in es8396_i2c_probe()
3140 if (IS_ERR(es8396->regmap)) in es8396_i2c_probe()
3141 return PTR_ERR(es8396->regmap); in es8396_i2c_probe()
3147 es8396->spk_ctl_gpio = devm_gpiod_get_optional(&i2c_client->dev, in es8396_i2c_probe()
3148 "spk-con-gpio", in es8396_i2c_probe()
3150 if (IS_ERR(es8396->spk_ctl_gpio)) in es8396_i2c_probe()
3151 return PTR_ERR(es8396->spk_ctl_gpio); in es8396_i2c_probe()
3154 es8396->lineout_ctl_gpio = devm_gpiod_get_optional(&i2c_client->dev, in es8396_i2c_probe()
3155 "lineout-con-gpio", in es8396_i2c_probe()
3157 if (IS_ERR(es8396->lineout_ctl_gpio)) in es8396_i2c_probe()
3158 return PTR_ERR(es8396->lineout_ctl_gpio); in es8396_i2c_probe()
3160 return devm_snd_soc_register_component(&i2c_client->dev, in es8396_i2c_probe()
3168 struct snd_soc_component *component = es8396->component; in es8396_i2c_shutdown()
3170 if (es8396->spk_ctl_gpio) in es8396_i2c_shutdown()
3171 gpiod_set_value(es8396->spk_ctl_gpio, 0); in es8396_i2c_shutdown()
3206 MODULE_AUTHOR("DavidYang, Everest Semiconductor Co., Ltd, <yangxiaohua@everest-semi.com>");