Lines Matching refs:component
111 static void wm8958_micd_set_rate(struct snd_soc_component *component)
113 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
122 sysclk = snd_soc_component_read(component, WM8994_CLOCKING_1);
153 dev_dbg(component->dev, "MICD rate %d,%d for %dHz %s\n",
157 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1,
162 static int configure_aif_clock(struct snd_soc_component *component, int aif)
164 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
202 dev_dbg(component->dev, "Dividing AIF%d clock to %dHz\n",
208 snd_soc_component_update_bits(component, WM8994_AIF1_CLOCKING_1 + offset,
215 static int configure_clock(struct snd_soc_component *component)
217 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
218 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
222 configure_aif_clock(component, 0);
223 configure_aif_clock(component, 1);
233 wm8958_micd_set_rate(component);
242 change = snd_soc_component_update_bits(component, WM8994_CLOCKING_1,
247 wm8958_micd_set_rate(component);
255 struct snd_soc_component *component = snd_soc_dapm_to_component(source->dapm);
256 int reg = snd_soc_component_read(component, WM8994_CLOCKING_1);
304 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
314 ret = snd_soc_component_read(component, mc->reg);
323 static void wm8994_set_drc(struct snd_soc_component *component, int drc)
325 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
333 save = snd_soc_component_read(component, base);
338 snd_soc_component_update_bits(component, base + i, 0xffff,
341 snd_soc_component_update_bits(component, base, WM8994_AIF1DAC1_DRC_ENA |
361 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
362 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
376 wm8994_set_drc(component, drc);
384 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
385 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
395 static void wm8994_set_retune_mobile(struct snd_soc_component *component, int block)
397 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
434 dev_dbg(component->dev, "ReTune Mobile %d %s/%dHz for %dHz sample rate\n",
443 save = snd_soc_component_read(component, base);
447 snd_soc_component_update_bits(component, base + i, 0xffff,
450 snd_soc_component_update_bits(component, base, WM8994_AIF1DAC1_EQ_ENA, save);
468 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
469 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
483 wm8994_set_retune_mobile(component, block);
491 struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol);
492 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
742 static void wm1811_jackdet_set_mode(struct snd_soc_component *component, u16 mode)
744 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
761 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
765 static void active_reference(struct snd_soc_component *component)
767 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
773 dev_dbg(component->dev, "Active refcount incremented, now %d\n",
777 wm1811_jackdet_set_mode(component, WM1811_JACKDET_MODE_AUDIO);
782 static void active_dereference(struct snd_soc_component *component)
784 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
791 dev_dbg(component->dev, "Active refcount decremented, now %d\n",
801 wm1811_jackdet_set_mode(component, mode);
810 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
811 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
815 return configure_clock(component);
834 configure_clock(component);
841 static void vmid_reference(struct snd_soc_component *component)
843 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
845 pm_runtime_get_sync(component->dev);
849 dev_dbg(component->dev, "Referencing VMID, refcount is now %d\n",
853 snd_soc_component_update_bits(component, WM8994_ANTIPOP_1,
857 wm_hubs_vmid_ena(component);
865 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
877 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_1,
884 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
892 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
904 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_1,
911 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
920 static void vmid_dereference(struct snd_soc_component *component)
922 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
926 dev_dbg(component->dev, "Dereferencing VMID, refcount is now %d\n",
931 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_3,
938 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_3,
945 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
951 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_1,
957 snd_soc_component_update_bits(component, WM8994_ANTIPOP_1,
963 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_3,
970 snd_soc_component_update_bits(component, WM8994_ANTIPOP_2,
976 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_1,
980 pm_runtime_put(component->dev);
986 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
990 vmid_reference(component);
994 vmid_dereference(component);
1001 static bool wm8994_check_class_w_digital(struct snd_soc_component *component)
1007 reg = snd_soc_component_read(component, WM8994_DAC1_LEFT_MIXER_ROUTING);
1010 dev_vdbg(component->dev, "Class W source AIF2DAC\n");
1014 dev_vdbg(component->dev, "Class W source AIF1DAC2\n");
1018 dev_vdbg(component->dev, "Class W source AIF1DAC1\n");
1022 dev_vdbg(component->dev, "DAC mixer setting: %x\n", reg);
1026 reg_r = snd_soc_component_read(component, WM8994_DAC1_RIGHT_MIXER_ROUTING);
1028 dev_vdbg(component->dev, "Left and right DAC mixers different\n");
1033 snd_soc_component_update_bits(component, WM8994_CLASS_W_1,
1039 static void wm8994_update_vu_bits(struct snd_soc_component *component)
1041 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1046 snd_soc_component_write(component, wm8994_vu_bits[i].reg,
1047 snd_soc_component_read(component,
1053 snd_soc_component_write(component,
1055 snd_soc_component_read(component,
1059 static int aif_mclk_set(struct snd_soc_component *component, int aif, bool enable)
1061 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1070 val = snd_soc_component_read(component, WM8994_AIF1_CLOCKING_1 + offset);
1087 dev_err(component->dev, "Failed to enable MCLK%d\n",
1101 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1102 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1121 ret = aif_mclk_set(component, 0, true);
1129 val = snd_soc_component_read(component, WM8994_AIF1_CONTROL_1);
1140 val = snd_soc_component_read(component, WM8994_AIF1_CONTROL_2);
1151 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_4,
1153 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5,
1155 snd_soc_component_update_bits(component, WM8994_CLOCKING_1,
1160 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_4, mask,
1165 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5, mask,
1173 wm8994_update_vu_bits(component);
1178 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5,
1180 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_4,
1183 val = snd_soc_component_read(component, WM8994_CLOCKING_1);
1188 snd_soc_component_update_bits(component, WM8994_CLOCKING_1,
1196 aif_mclk_set(component, 0, false);
1206 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1214 ret = aif_mclk_set(component, 1, true);
1218 val = snd_soc_component_read(component, WM8994_AIF2_CONTROL_1);
1229 val = snd_soc_component_read(component, WM8994_AIF2_CONTROL_2);
1239 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_4,
1242 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5,
1245 snd_soc_component_update_bits(component, WM8994_CLOCKING_1,
1250 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_4,
1255 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5,
1263 wm8994_update_vu_bits(component);
1268 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5,
1271 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_4,
1275 val = snd_soc_component_read(component, WM8994_CLOCKING_1);
1280 snd_soc_component_update_bits(component, WM8994_CLOCKING_1,
1288 aif_mclk_set(component, 1, false);
1298 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1299 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1316 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1317 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1334 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1335 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1341 snd_soc_component_update_bits(component, WM8994_AIF1_CLOCKING_1,
1349 snd_soc_component_update_bits(component, WM8994_AIF2_CLOCKING_1,
1367 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1368 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
1374 snd_soc_component_update_bits(component, WM8994_AIF1_CLOCKING_1,
1381 snd_soc_component_update_bits(component, WM8994_AIF2_CLOCKING_1,
1409 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1412 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_5,
1450 struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);
1451 dev_dbg(component->dev, "SRC status: %x\n",
1452 snd_soc_component_read(component,
1518 struct snd_soc_component *component = snd_soc_dapm_kcontrol_component(kcontrol);
1523 wm_hubs_update_class_w(component);
2205 static int _wm8994_set_fll(struct snd_soc_component *component, int id, int src,
2208 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
2232 reg = snd_soc_component_read(component, WM8994_FLL1_CONTROL_1 + reg_offset);
2273 clk1 = snd_soc_component_read(component, WM8994_CLOCKING_1);
2278 reg = snd_soc_component_read(component, aif_reg);
2282 dev_err(component->dev, "FLL%d is currently providing SYSCLK\n",
2288 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_1 + reg_offset,
2293 reg = snd_soc_component_read(component, WM8994_FLL1_CONTROL_5
2314 dev_dbg(component->dev, "Bypassing FLL%d\n", id + 1);
2315 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_5 + reg_offset,
2322 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_2 + reg_offset,
2326 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_3 + reg_offset,
2329 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_4 + reg_offset,
2334 snd_soc_component_update_bits(component, WM8958_FLL1_EFS_1 + reg_offset,
2337 snd_soc_component_update_bits(component, WM8958_FLL1_EFS_2 + reg_offset,
2340 snd_soc_component_update_bits(component, WM8958_FLL1_EFS_2 + reg_offset,
2344 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_5 + reg_offset,
2371 dev_err(component->dev, "Failed to enable MCLK for FLL%d\n",
2379 active_reference(component);
2383 vmid_reference(component);
2387 vmid_reference(component);
2401 snd_soc_component_update_bits(component, WM8994_FLL1_CONTROL_1 + reg_offset,
2409 dev_warn(component->dev,
2418 vmid_dereference(component);
2422 vmid_dereference(component);
2428 active_dereference(component);
2437 configure_clock(component);
2444 dev_dbg(component->dev, "Configuring AIFs for 128fs\n");
2446 wm8994->aifdiv[0] = snd_soc_component_read(component, WM8994_AIF1_RATE)
2448 wm8994->aifdiv[1] = snd_soc_component_read(component, WM8994_AIF2_RATE)
2451 snd_soc_component_update_bits(component, WM8994_AIF1_RATE,
2453 snd_soc_component_update_bits(component, WM8994_AIF2_RATE,
2456 snd_soc_component_update_bits(component, WM8994_AIF1_RATE,
2459 snd_soc_component_update_bits(component, WM8994_AIF2_RATE,
2484 return _wm8994_set_fll(dai->component, id, src, freq_in, freq_out);
2507 struct snd_soc_component *component = dai->component;
2508 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
2567 snd_soc_component_update_bits(component, WM8994_CLOCKING_2,
2569 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_2,
2572 snd_soc_component_update_bits(component, WM8994_POWER_MANAGEMENT_2,
2581 configure_clock(component);
2588 dev_dbg(component->dev, "Configuring AIFs for 128fs\n");
2590 wm8994->aifdiv[0] = snd_soc_component_read(component, WM8994_AIF1_RATE)
2592 wm8994->aifdiv[1] = snd_soc_component_read(component, WM8994_AIF2_RATE)
2595 snd_soc_component_update_bits(component, WM8994_AIF1_RATE,
2597 snd_soc_component_update_bits(component, WM8994_AIF2_RATE,
2600 snd_soc_component_update_bits(component, WM8994_AIF1_RATE,
2603 snd_soc_component_update_bits(component, WM8994_AIF2_RATE,
2614 static int wm8994_set_bias_level(struct snd_soc_component *component,
2617 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
2620 wm_hubs_set_bias_level(component, level);
2631 snd_soc_component_update_bits(component, WM8958_MICBIAS1,
2633 snd_soc_component_update_bits(component, WM8958_MICBIAS2,
2640 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_STANDBY)
2641 active_reference(component);
2645 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_OFF) {
2650 snd_soc_component_update_bits(component,
2662 snd_soc_component_update_bits(component, WM8994_ANTIPOP_1,
2669 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_PREPARE)
2670 active_dereference(component);
2676 snd_soc_component_update_bits(component, WM8958_MICBIAS1,
2679 snd_soc_component_update_bits(component, WM8958_MICBIAS2,
2689 if (snd_soc_component_get_bias_level(component) == SND_SOC_BIAS_STANDBY)
2697 int wm8994_vmid_mode(struct snd_soc_component *component, enum wm8994_vmid_mode mode)
2699 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
2700 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
2757 struct snd_soc_component *component = dai->component;
2758 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
2861 snd_soc_component_update_bits(component, WM8958_AIF3_CONTROL_1,
2870 snd_soc_component_update_bits(component, aif1_reg,
2874 snd_soc_component_update_bits(component, ms_reg, WM8994_AIF1_MSTR,
2876 snd_soc_component_update_bits(component, dac_reg,
2878 snd_soc_component_update_bits(component, adc_reg,
2913 struct snd_soc_component *component = dai->component;
2914 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
2942 dev_dbg(component->dev, "AIF1 using split LRCLK\n");
2955 dev_dbg(component->dev, "AIF2 using split LRCLK\n");
3014 (snd_soc_component_read(component, aif1_reg) & 0x18) == 0x18)
3064 snd_soc_component_update_bits(component, aif1_reg, WM8994_AIF1_WL_MASK, aif1);
3065 snd_soc_component_update_bits(component, aif2_reg, WM8994_AIF1_MONO, aif2);
3066 snd_soc_component_update_bits(component, bclk_reg, WM8994_AIF1_BCLK_DIV_MASK, bclk);
3067 snd_soc_component_update_bits(component, lrclk_reg, WM8994_AIF1DAC_RATE_MASK,
3069 snd_soc_component_update_bits(component, rate_reg, WM8994_AIF1_SR_MASK |
3076 wm8994_set_retune_mobile(component, 0);
3077 wm8994_set_retune_mobile(component, 1);
3081 wm8994_set_retune_mobile(component, 2);
3093 struct snd_soc_component *component = dai->component;
3094 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3130 return snd_soc_component_update_bits(component, aif1_reg, WM8994_AIF1_WL_MASK, aif1);
3136 struct snd_soc_component *component = codec_dai->component;
3156 snd_soc_component_update_bits(component, mute_reg, WM8994_AIF1DAC1_MUTE, reg);
3163 struct snd_soc_component *component = codec_dai->component;
3184 return snd_soc_component_update_bits(component, reg, mask, val);
3189 struct snd_soc_component *component = dai->component;
3192 snd_soc_component_update_bits(component, WM8994_GPIO_3,
3194 snd_soc_component_update_bits(component, WM8994_GPIO_4,
3196 snd_soc_component_update_bits(component, WM8994_GPIO_5,
3299 static int wm8994_component_suspend(struct snd_soc_component *component)
3301 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3307 ret = _wm8994_set_fll(component, i + 1, 0, 0, 0);
3309 dev_warn(component->dev, "Failed to stop FLL%d: %d\n",
3313 snd_soc_component_force_bias_level(component, SND_SOC_BIAS_OFF);
3318 static int wm8994_component_resume(struct snd_soc_component *component)
3320 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3327 ret = _wm8994_set_fll(component, i + 1,
3332 dev_warn(component->dev, "Failed to restore FLL%d: %d\n",
3345 struct snd_soc_component *component = wm8994->hubs.component;
3398 dev_dbg(component->dev, "Allocated %d unique ReTune Mobile names\n",
3404 ret = snd_soc_add_component_controls(wm8994->hubs.component, controls,
3407 dev_err(wm8994->hubs.component->dev,
3413 struct snd_soc_component *component = wm8994->hubs.component;
3421 wm_hubs_handle_analogue_pdata(component, pdata->lineout1_diff,
3432 dev_dbg(component->dev, "%d DRC configurations\n", pdata->num_drc_cfgs);
3445 wm8994->drc_texts = devm_kcalloc(wm8994->hubs.component->dev,
3456 ret = snd_soc_add_component_controls(wm8994->hubs.component, controls,
3459 wm8994_set_drc(component, i);
3461 ret = snd_soc_add_component_controls(wm8994->hubs.component,
3467 dev_err(wm8994->hubs.component->dev,
3471 dev_dbg(component->dev, "%d ReTune Mobile configurations\n",
3477 snd_soc_add_component_controls(wm8994->hubs.component, wm8994_eq_controls,
3482 snd_soc_component_write(component, WM8958_MICBIAS1 + i,
3491 * @component: WM8994 component
3503 int wm8994_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *jack,
3506 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
3507 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3513 dev_warn(component->dev, "Not a WM8994\n");
3517 pm_runtime_get_sync(component->dev);
3535 dev_warn(component->dev, "Invalid MICBIAS %d\n", micbias);
3540 dev_warn(component->dev, "Failed to configure MICBIAS%d: %d\n",
3543 dev_dbg(component->dev, "Configuring microphone detection on %d %p\n",
3556 snd_soc_component_update_bits(component, WM8994_MICBIAS, WM8994_MICD_ENA, reg);
3559 snd_soc_component_update_bits(component, WM8994_IRQ_DEBOUNCE,
3566 pm_runtime_put(component->dev);
3639 struct snd_soc_component *component = priv->hubs.component;
3642 trace_snd_soc_jack_irq(dev_name(component->dev));
3645 pm_wakeup_event(component->dev, 300);
3654 static void wm1811_micd_stop(struct snd_soc_component *component)
3656 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
3657 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3662 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1, WM8958_MICD_ENA, 0);
3664 wm1811_jackdet_set_mode(component, WM1811_JACKDET_MODE_JACK);
3670 static void wm8958_button_det(struct snd_soc_component *component, u16 status)
3672 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3707 wm1811_micd_stop(wm8994->hubs.component);
3714 wm8958_micd_set_rate(wm8994->hubs.component);
3725 struct snd_soc_component *component = data;
3726 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3731 dev_dbg(component->dev, "Detected open circuit\n");
3743 dev_dbg(component->dev, "Detected microphone\n");
3748 wm8958_micd_set_rate(component);
3756 dev_dbg(component->dev, "Detected headphone\n");
3759 wm8958_micd_set_rate(component);
3762 wm1811_micd_stop(component);
3775 struct snd_soc_component *component = wm8994->hubs.component;
3776 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
3778 pm_runtime_get_sync(component->dev);
3788 dev_dbg(component->dev, "Starting mic detection\n");
3799 wm1811_jackdet_set_mode(component, WM1811_JACKDET_MODE_MIC);
3801 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1,
3807 pm_runtime_put(component->dev);
3814 struct snd_soc_component *component = wm8994->hubs.component;
3815 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
3819 pm_runtime_get_sync(component->dev);
3825 reg = snd_soc_component_read(component, WM1811_JACKDET_CTRL);
3827 dev_err(component->dev, "Failed to read jack status: %d\n", reg);
3829 pm_runtime_put(component->dev);
3833 dev_dbg(component->dev, "JACKDET %x\n", reg);
3838 dev_dbg(component->dev, "Jack detected\n");
3840 wm8958_micd_set_rate(component);
3842 snd_soc_component_update_bits(component, WM8958_MICBIAS2,
3846 snd_soc_component_update_bits(component, WM1811_JACKDET_CTRL,
3854 dev_dbg(component->dev, "Jack not detected\n");
3863 snd_soc_component_update_bits(component, WM8958_MICBIAS2,
3867 snd_soc_component_update_bits(component, WM1811_JACKDET_CTRL,
3872 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1,
3874 wm1811_jackdet_set_mode(component, WM1811_JACKDET_MODE_JACK);
3895 pm_runtime_put(component->dev);
3910 * @component: WM8958 component
3927 int wm8958_mic_detect(struct snd_soc_component *component, struct snd_soc_jack *jack,
3931 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
3932 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
3944 pm_runtime_get_sync(component->dev);
3965 wm8994->mic_id_cb_data = component;
3968 wm8958_micd_set_rate(component);
3980 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_2,
3983 WARN_ON(snd_soc_component_get_bias_level(component) > SND_SOC_BIAS_STANDBY);
3991 snd_soc_component_update_bits(component, WM1811_JACKDET_CTRL,
3994 snd_soc_component_update_bits(component, WM8958_MICBIAS2,
3997 snd_soc_component_update_bits(component, WM8994_LDO_1,
3999 wm1811_jackdet_set_mode(component,
4002 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1,
4007 snd_soc_component_update_bits(component, WM8958_MIC_DETECT_1,
4009 wm1811_jackdet_set_mode(component, WM1811_JACKDET_MODE_NONE);
4014 pm_runtime_put(component->dev);
4025 struct snd_soc_component *component = wm8994->hubs.component;
4027 pm_runtime_get_sync(component->dev);
4035 pm_runtime_put(component->dev);
4041 struct snd_soc_component *component = wm8994->hubs.component;
4049 if (!(snd_soc_component_read(component, WM8958_MIC_DETECT_1) & WM8958_MICD_ENA))
4055 pm_runtime_get_sync(component->dev);
4062 reg = snd_soc_component_read(component, WM8958_MIC_DETECT_3);
4064 dev_err(component->dev,
4067 pm_runtime_put(component->dev);
4072 dev_dbg(component->dev, "Mic detect data not valid\n");
4083 dev_warn(component->dev, "No impedance range reported for jack\n");
4086 trace_snd_soc_jack_irq(dev_name(component->dev));
4091 ret = snd_soc_component_read(component, WM1811_JACKDET_CTRL);
4093 dev_err(component->dev, "Failed to read jack status: %d\n",
4096 dev_dbg(component->dev, "Ignoring removed jack\n");
4115 wm8958_button_det(component, reg);
4118 pm_runtime_put(component->dev);
4124 struct snd_soc_component *component = data;
4126 dev_err(component->dev, "FIFO error\n");
4133 struct snd_soc_component *component = data;
4135 dev_err(component->dev, "Thermal warning\n");
4142 struct snd_soc_component *component = data;
4144 dev_crit(component->dev, "Thermal shutdown\n");
4149 static int wm8994_component_probe(struct snd_soc_component *component)
4151 struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component);
4152 struct wm8994 *control = dev_get_drvdata(component->dev->parent);
4153 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
4157 snd_soc_component_init_regmap(component, control->regmap);
4159 wm8994->hubs.component = component;
4236 snd_soc_component_update_bits(component, WM8994_ANALOGUE_HP_1,
4245 wm8994_fifo_error, "FIFO error", component);
4247 wm8994_temp_warn, "Thermal warning", component);
4249 wm8994_temp_shut, "Thermal shutdown", component);
4267 dev_warn(component->dev,
4277 dev_warn(component->dev,
4286 dev_warn(component->dev,
4295 dev_warn(component->dev,
4310 dev_warn(component->dev,
4346 pm_runtime_get_sync(component->dev);
4354 dev_err(component->dev, "Failed to read GPIO1 state: %d\n", ret);
4366 dev_err(component->dev, "Failed to read GPIO6 state: %d\n", ret);
4376 pm_runtime_put(component->dev);
4380 snd_soc_component_update_bits(component, wm8994_vu_bits[i].reg,
4386 snd_soc_component_update_bits(component,
4393 snd_soc_component_update_bits(component, WM8994_AIF1_DAC1_FILTERS_2,
4396 snd_soc_component_update_bits(component, WM8994_AIF1_DAC2_FILTERS_2,
4399 snd_soc_component_update_bits(component, WM8994_AIF2_DAC_FILTERS_2,
4409 snd_soc_component_update_bits(component, WM8994_AIF1_CONTROL_1,
4420 snd_soc_component_update_bits(component, WM8958_MICBIAS1,
4422 snd_soc_component_update_bits(component, WM8958_MICBIAS2,
4430 wm_hubs_update_class_w(component);
4434 wm_hubs_add_analogue_controls(component);
4435 snd_soc_add_component_controls(component, wm8994_common_snd_controls,
4442 snd_soc_add_component_controls(component, wm8994_snd_controls,
4463 snd_soc_add_component_controls(component, wm8994_snd_controls,
4465 snd_soc_add_component_controls(component, wm8958_snd_controls,
4487 snd_soc_add_component_controls(component, wm8958_snd_controls,
4500 wm_hubs_add_analogue_routes(component, 0, 0);
4538 wm8958_dsp2_init(component);
4563 wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_FIFOS_ERR, component);
4564 wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_TEMP_SHUT, component);
4565 wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_TEMP_WARN, component);
4570 static void wm8994_component_remove(struct snd_soc_component *component)
4572 struct wm8994_priv *wm8994 = snd_soc_component_get_drvdata(component);
4582 wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_FIFOS_ERR, component);
4583 wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_TEMP_SHUT, component);
4584 wm8994_free_irq(wm8994->wm8994, WM8994_IRQ_TEMP_WARN, component);