void tegra_headphone_switch(int isExt) { struct snd_soc_device *pdata = platform_get_drvdata(tegra_snd_device); struct tegra_audio_data* audio_data = pdata->card->codec->socdev->codec_data; if(isExt && (audio_data->codec_con & TEGRA_HEADPHONE)) { snd_soc_dapm_disable_pin(pdata->card->codec, "Headphone"); snd_soc_dapm_enable_pin(pdata->card->codec, "Ext Hp"); } else if(0 == isExt && (audio_data->codec_con & TEGRA_HEADPHONE)) { snd_soc_dapm_enable_pin(pdata->card->codec, "Headphone"); snd_soc_dapm_disable_pin(pdata->card->codec, "Ext Hp"); } else return; snd_soc_dapm_sync(pdata->card->codec); }
/* Logic for a aic3x as connected on the s6105 ip camera ref design */ static int s6105_aic3x_init(struct snd_soc_codec *codec) { /* Add s6105 specific widgets */ snd_soc_dapm_new_controls(codec, aic3x_dapm_widgets, ARRAY_SIZE(aic3x_dapm_widgets)); /* Set up s6105 specific audio path audio_map */ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); /* not present */ snd_soc_dapm_nc_pin(codec, "MONO_LOUT"); snd_soc_dapm_nc_pin(codec, "LINE2L"); snd_soc_dapm_nc_pin(codec, "LINE2R"); /* not connected */ snd_soc_dapm_nc_pin(codec, "MIC3L"); /* LINE2L on this chip */ snd_soc_dapm_nc_pin(codec, "MIC3R"); /* LINE2R on this chip */ snd_soc_dapm_nc_pin(codec, "LLOUT"); snd_soc_dapm_nc_pin(codec, "RLOUT"); snd_soc_dapm_nc_pin(codec, "HPRCOM"); /* always connected */ snd_soc_dapm_enable_pin(codec, "Audio In"); /* must correspond to audio_out_mux.private_value initializer */ snd_soc_dapm_disable_pin(codec, "Audio Out Differential"); snd_soc_dapm_sync(codec); snd_soc_dapm_enable_pin(codec, "Audio Out Stereo"); snd_soc_dapm_sync(codec); snd_ctl_add(codec->card, snd_ctl_new1(&audio_out_mux, codec)); return 0; }
static void cs42l52_beep_work(struct work_struct *work) { struct cs42l52_private *cs42l52 = container_of(work, struct cs42l52_private, beep_work); struct snd_soc_codec *codec = cs42l52->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int i; int val = 0; int best = 0; if (cs42l52->beep_rate) { for (i = 0; i < ARRAY_SIZE(beep_rates); i++) { if (abs(cs42l52->beep_rate - beep_rates[i]) < abs(cs42l52->beep_rate - beep_rates[best])) best = i; } dev_dbg(codec->dev, "Set beep rate %dHz for requested %dHz\n", beep_rates[best], cs42l52->beep_rate); val = (best << CS42L52_BEEP_RATE_SHIFT); snd_soc_dapm_enable_pin(dapm, "Beep"); } else { dev_dbg(codec->dev, "Disabling beep\n"); snd_soc_dapm_disable_pin(dapm, "Beep"); } snd_soc_update_bits(codec, CS42L52_BEEP_FREQ, CS42L52_BEEP_RATE_MASK, val); snd_soc_dapm_sync(dapm); }
static int smartq_wm8987_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int err = 0; /* set endpoints to not connected */ snd_soc_dapm_nc_pin(dapm, "LINPUT1"); snd_soc_dapm_nc_pin(dapm, "RINPUT1"); snd_soc_dapm_nc_pin(dapm, "OUT3"); snd_soc_dapm_nc_pin(dapm, "ROUT1"); /* set endpoints to default off mode */ snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); /* Headphone jack detection */ err = snd_soc_jack_new(codec, "Headphone Jack", SND_JACK_HEADPHONE, &smartq_jack); if (err) return err; err = snd_soc_jack_add_pins(&smartq_jack, ARRAY_SIZE(smartq_jack_pins), smartq_jack_pins); if (err) return err; err = snd_soc_jack_add_gpios(&smartq_jack, ARRAY_SIZE(smartq_jack_gpios), smartq_jack_gpios); return err; }
static void arizona_micsupp_check_cp(struct work_struct *work) { struct arizona_micsupp *micsupp = container_of(work, struct arizona_micsupp, check_cp_work); struct snd_soc_dapm_context *dapm = micsupp->arizona->dapm; struct arizona *arizona = micsupp->arizona; struct regmap *regmap = arizona->regmap; unsigned int reg; int ret; ret = regmap_read(regmap, ARIZONA_MIC_CHARGE_PUMP_1, ®); if (ret != 0) { dev_err(arizona->dev, "Failed to read CP state: %d\n", ret); return; } if (dapm) { if ((reg & (ARIZONA_CPMIC_ENA | ARIZONA_CPMIC_BYPASS)) == ARIZONA_CPMIC_ENA) snd_soc_dapm_force_enable_pin(dapm, "MICSUPP"); else snd_soc_dapm_disable_pin(dapm, "MICSUPP"); snd_soc_dapm_sync(dapm); } }
static int tegra_rt5631_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_card *card = codec->card; struct tegra_rt5631 *machine = snd_soc_card_get_drvdata(card); int ret; printk("%s+\n", __func__); if (machine_is_cardhu() || machine_is_ventana()) { ret = snd_soc_add_controls(codec, cardhu_controls, ARRAY_SIZE(cardhu_controls)); if (ret < 0) return ret; snd_soc_dapm_new_controls(dapm, cardhu_dapm_widgets, ARRAY_SIZE(cardhu_dapm_widgets)); } else { ret = snd_soc_add_controls(codec, tegra_rt5631_default_controls, ARRAY_SIZE(tegra_rt5631_default_controls)); if (ret < 0) return ret; snd_soc_dapm_new_controls(dapm, tegra_rt5631_default_dapm_widgets, ARRAY_SIZE(tegra_rt5631_default_dapm_widgets)); } snd_soc_dapm_add_routes(dapm, cardhu_audio_map, ARRAY_SIZE(cardhu_audio_map)); snd_soc_dapm_nc_pin(dapm, "MIC2"); snd_soc_dapm_nc_pin(dapm, "AXIL"); snd_soc_dapm_nc_pin(dapm, "AXIR"); snd_soc_dapm_nc_pin(dapm, "MONOIN_RXN"); snd_soc_dapm_nc_pin(dapm, "MONOIN_RXP"); snd_soc_dapm_nc_pin(dapm, "MONO"); snd_soc_dapm_disable_pin(dapm, "Int Mic"); snd_soc_dapm_disable_pin(dapm, "Mic Jack"); snd_soc_dapm_disable_pin(dapm, "Headphone Jack"); snd_soc_dapm_disable_pin(dapm, "Int Spk"); snd_soc_dapm_sync(dapm); return 0; }
static int byt_alc5645_init(struct snd_soc_pcm_runtime *runtime) { struct snd_soc_codec *codec = runtime->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_card *card = runtime->card; alc5645.codec = codec; mutex_init(&alc5645.mutex); alc5645.jack_status = false; pr_info("Enter:%s", __func__); /* Set codec bias level */ card->dapm.idle_bias_off = true; /* codec init registers */ /* TODO */ /* Keep the voice call paths active during suspend. Mark the end points ignore_suspend */ /*TODO: CHECK this */ snd_soc_dapm_ignore_suspend(dapm, "HPOL"); snd_soc_dapm_ignore_suspend(dapm, "HPOR"); snd_soc_dapm_ignore_suspend(dapm, "SPOL"); snd_soc_dapm_ignore_suspend(dapm, "SPOR"); snd_soc_dapm_ignore_suspend(dapm, "IN2P"); snd_soc_dapm_ignore_suspend(dapm, "IN2N"); snd_soc_dapm_ignore_suspend(dapm, "IN1P"); snd_soc_dapm_ignore_suspend(dapm, "IN1N"); snd_soc_dapm_enable_pin(dapm, "Headphone"); snd_soc_dapm_enable_pin(dapm, "Ext Spk"); snd_soc_dapm_enable_pin(dapm, "Headset AMIC"); snd_soc_dapm_enable_pin(dapm, "AMIC"); snd_soc_dapm_enable_pin(dapm, "IN2P"); snd_soc_dapm_enable_pin(dapm, "IN2N"); snd_soc_dapm_disable_pin(dapm, "DMIC"); snd_soc_dapm_disable_pin(dapm, "DMIC L2"); snd_soc_dapm_disable_pin(dapm, "DMIC R2"); snd_soc_dapm_disable_pin(dapm, "DMIC L1"); snd_soc_dapm_disable_pin(dapm, "DMIC R1"); snd_soc_dapm_disable_pin(dapm, "PDM1R"); snd_soc_dapm_disable_pin(dapm, "PDM1L"); snd_soc_dapm_disable_pin(dapm, "LOUTL"); snd_soc_dapm_disable_pin(dapm, "LOUTR"); mutex_lock(&codec->mutex); snd_soc_dapm_sync(dapm); mutex_unlock(&codec->mutex); return 0; }
/* * Logic for a wm8750 as connected on a Sharp SL-Cxx00 Device */ static int spitz_wm8750_init(struct snd_soc_codec *codec) { int i, err; /* NC codec pins */ snd_soc_dapm_disable_pin(codec, "RINPUT1"); snd_soc_dapm_disable_pin(codec, "LINPUT2"); snd_soc_dapm_disable_pin(codec, "RINPUT2"); snd_soc_dapm_disable_pin(codec, "LINPUT3"); snd_soc_dapm_disable_pin(codec, "RINPUT3"); snd_soc_dapm_disable_pin(codec, "OUT3"); snd_soc_dapm_disable_pin(codec, "MONO"); /* Add spitz specific controls */ for (i = 0; i < ARRAY_SIZE(wm8750_spitz_controls); i++) { err = snd_ctl_add(codec->card, snd_soc_cnew(&wm8750_spitz_controls[i], codec, NULL)); if (err < 0) return err; } /* Add spitz specific widgets */ snd_soc_dapm_new_controls(codec, wm8750_dapm_widgets, ARRAY_SIZE(wm8750_dapm_widgets)); /* Set up spitz specific audio paths */ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); snd_soc_dapm_sync(codec); return 0; }
static void tosa_ext_control(struct snd_soc_codec *codec) { /* set up jack connection */ switch (tosa_jack_func) { case TOSA_HP: snd_soc_dapm_disable_pin(codec, "Mic (Internal)"); snd_soc_dapm_enable_pin(codec, "Headphone Jack"); snd_soc_dapm_disable_pin(codec, "Headset Jack"); break; case TOSA_MIC_INT: snd_soc_dapm_enable_pin(codec, "Mic (Internal)"); snd_soc_dapm_disable_pin(codec, "Headphone Jack"); snd_soc_dapm_disable_pin(codec, "Headset Jack"); break; case TOSA_HEADSET: snd_soc_dapm_disable_pin(codec, "Mic (Internal)"); snd_soc_dapm_disable_pin(codec, "Headphone Jack"); snd_soc_dapm_enable_pin(codec, "Headset Jack"); break; } if (tosa_spk_func == TOSA_SPK_ON) snd_soc_dapm_enable_pin(codec, "Speaker"); else snd_soc_dapm_disable_pin(codec, "Speaker"); snd_soc_dapm_sync(codec); }
static int cht_ti_jack_event(struct notifier_block *nb, unsigned long event, void *data) { struct snd_soc_jack *jack = (struct snd_soc_jack *)data; struct snd_soc_dapm_context *dapm = &jack->card->dapm; if (event & SND_JACK_MICROPHONE) { snd_soc_dapm_force_enable_pin(dapm, "SHDN"); snd_soc_dapm_force_enable_pin(dapm, "MICBIAS"); snd_soc_dapm_sync(dapm); } else { snd_soc_dapm_disable_pin(dapm, "MICBIAS"); snd_soc_dapm_disable_pin(dapm, "SHDN"); snd_soc_dapm_sync(dapm); } return 0; }
static int sdp4430_twl6040_init(struct snd_soc_codec *codec) { int ret; /* Add SDP4430 specific controls */ ret = snd_soc_add_controls(codec, sdp4430_controls, ARRAY_SIZE(sdp4430_controls)); if (ret) return ret; /* Add SDP4430 specific widgets */ ret = snd_soc_dapm_new_controls(codec, sdp4430_twl6040_dapm_widgets, ARRAY_SIZE(sdp4430_twl6040_dapm_widgets)); if (ret) return ret; /* Set up SDP4430 specific audio path audio_map */ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); /* SDP4430 connected pins */ snd_soc_dapm_enable_pin(codec, "Ext Mic"); snd_soc_dapm_enable_pin(codec, "Ext Spk"); snd_soc_dapm_enable_pin(codec, "AFML"); snd_soc_dapm_enable_pin(codec, "AFMR"); snd_soc_dapm_disable_pin(codec, "Headset Mic"); snd_soc_dapm_disable_pin(codec, "Headset Stereophone"); ret = snd_soc_dapm_sync(codec); if (ret) return ret; /*Headset jack detection */ ret = snd_soc_jack_new(&snd_soc_sdp4430, "Headset Jack", SND_JACK_HEADSET, &hs_jack); if (ret) return ret; ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins), hs_jack_pins); twl6040_hs_jack_detect(codec, &hs_jack, SND_JACK_HEADSET); return ret; }
static int omap4panda_twl6040_init_hs(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; int ret; /* Add OMAP4 Panda specific controls */ ret = snd_soc_add_controls(codec, omap4panda_controls, ARRAY_SIZE(omap4panda_controls)); if (ret) return ret; /* Add OMAP4 Panda specific widgets */ ret = snd_soc_dapm_new_controls(codec->dapm, omap4panda_twl6040_dapm_widgets, ARRAY_SIZE(omap4panda_twl6040_dapm_widgets)); if (ret) return ret; /* Set up OMAP4 Panda specific audio path audio_map */ snd_soc_dapm_add_routes(codec->dapm, audio_map, ARRAY_SIZE(audio_map)); /* OMAP4 Panda connected pins */ snd_soc_dapm_enable_pin(codec->dapm, "Ext Spk"); snd_soc_dapm_enable_pin(codec->dapm, "AFML"); snd_soc_dapm_enable_pin(codec->dapm, "AFMR"); snd_soc_dapm_enable_pin(codec->dapm, "AuxL"); snd_soc_dapm_enable_pin(codec->dapm, "AuxR"); snd_soc_dapm_enable_pin(codec->dapm, "Headset Mic"); snd_soc_dapm_enable_pin(codec->dapm, "Headset Stereophone"); /* TWL6040 unused pins */ snd_soc_dapm_disable_pin(codec->dapm, "MAINMIC"); snd_soc_dapm_disable_pin(codec->dapm, "SUBMIC"); snd_soc_dapm_disable_pin(codec->dapm, "EP"); ret = snd_soc_dapm_sync(codec->dapm); if (ret) return ret; /* wait 500 ms before switching of HS power */ rtd->pmdown_time = 500; return ret; }
/* * Logic for a wm8750 as connected on a Z2 Device */ static int z2_wm8750_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; int ret; /* NC codec pins */ snd_soc_dapm_disable_pin(codec, "LINPUT3"); snd_soc_dapm_disable_pin(codec, "RINPUT3"); snd_soc_dapm_disable_pin(codec, "OUT3"); snd_soc_dapm_disable_pin(codec, "MONO"); /* Add z2 specific widgets */ snd_soc_dapm_new_controls(codec, wm8750_dapm_widgets, ARRAY_SIZE(wm8750_dapm_widgets)); /* Set up z2 specific audio paths */ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); ret = snd_soc_dapm_sync(codec); if (ret) goto err; /* Jack detection API stuff */ ret = snd_soc_jack_new(codec, "Headset Jack", SND_JACK_HEADSET, &hs_jack); if (ret) goto err; ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins), hs_jack_pins); if (ret) goto err; ret = snd_soc_jack_add_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios), hs_jack_gpios); if (ret) goto err; return 0; err: return ret; }
static void msm8960_ext_control(struct snd_soc_codec *codec) { struct snd_soc_dapm_context *dapm = &codec->dapm; pr_debug("%s: msm8960_spk_control = %d", __func__, msm8960_spk_control); if (msm8960_spk_control == MSM8960_SPK_ON) { snd_soc_dapm_enable_pin(dapm, "Ext Spk Bottom Pos"); snd_soc_dapm_enable_pin(dapm, "Ext Spk Bottom Neg"); snd_soc_dapm_enable_pin(dapm, "Ext USB AMP Pos"); snd_soc_dapm_enable_pin(dapm, "Ext USB AMP Neg"); } else { snd_soc_dapm_disable_pin(dapm, "Ext Spk Bottom Pos"); snd_soc_dapm_disable_pin(dapm, "Ext Spk Bottom Neg"); snd_soc_dapm_disable_pin(dapm, "Ext USB AMP Pos"); snd_soc_dapm_disable_pin(dapm, "Ext USB AMP Neg"); } snd_soc_dapm_sync(dapm); }
void tegra_ext_control(struct snd_soc_codec *codec, int new_con) { struct tegra_audio_data* audio_data = codec->socdev->codec_data; ASOC_FUNCTION(""); ASOC_DBG("+%s, newcon: %x\n", __func__, new_con); /* Disconnect old codec routes and connect new routes*/ if (new_con & TEGRA_HEADPHONE) snd_soc_dapm_enable_pin(codec, "Headphone"); else snd_soc_dapm_disable_pin(codec, "Headphone"); if (new_con & (TEGRA_LINEOUT | TEGRA_EAR_SPK)) snd_soc_dapm_enable_pin(codec, "Lineout"); else snd_soc_dapm_disable_pin(codec, "Lineout"); if (new_con & TEGRA_SPK) snd_soc_dapm_enable_pin(codec, "Int Spk"); else snd_soc_dapm_disable_pin(codec, "Int Spk"); if (new_con & TEGRA_INT_MIC) snd_soc_dapm_enable_pin(codec, "Int Mic"); else snd_soc_dapm_disable_pin(codec, "Int Mic"); if (new_con & TEGRA_EXT_MIC) snd_soc_dapm_enable_pin(codec, "Ext Mic"); else snd_soc_dapm_disable_pin(codec, "Ext Mic"); if (new_con & TEGRA_LINEIN) snd_soc_dapm_enable_pin(codec, "Linein"); else snd_soc_dapm_disable_pin(codec, "Linein"); if (new_con & TEGRA_HEADSET) { snd_soc_dapm_enable_pin(codec, "Ext Mic"); snd_soc_dapm_enable_pin(codec, "Headset"); } else { snd_soc_dapm_disable_pin(codec, "Ext Mic"); snd_soc_dapm_disable_pin(codec, "Headset"); } /* signal a DAPM event */ snd_soc_dapm_sync(codec); audio_data->codec_con = new_con; }
static void n810_ext_control(struct snd_soc_codec *codec) { if (n810_spk_func) snd_soc_dapm_enable_pin(codec, "Ext Spk"); else snd_soc_dapm_disable_pin(codec, "Ext Spk"); if (n810_jack_func) snd_soc_dapm_enable_pin(codec, "Headphone Jack"); else snd_soc_dapm_disable_pin(codec, "Headphone Jack"); if (n810_dmic_func) snd_soc_dapm_enable_pin(codec, "DMic"); else snd_soc_dapm_disable_pin(codec, "DMic"); snd_soc_dapm_sync(codec); }
static int sdp3430_twl4030_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int ret; /* */ snd_soc_dapm_enable_pin(dapm, "Ext Mic"); snd_soc_dapm_enable_pin(dapm, "Ext Spk"); snd_soc_dapm_disable_pin(dapm, "Headset Mic"); snd_soc_dapm_disable_pin(dapm, "Headset Stereophone"); /* */ snd_soc_dapm_nc_pin(dapm, "AUXL"); snd_soc_dapm_nc_pin(dapm, "AUXR"); snd_soc_dapm_nc_pin(dapm, "CARKITMIC"); snd_soc_dapm_nc_pin(dapm, "DIGIMIC0"); snd_soc_dapm_nc_pin(dapm, "DIGIMIC1"); snd_soc_dapm_nc_pin(dapm, "OUTL"); snd_soc_dapm_nc_pin(dapm, "OUTR"); snd_soc_dapm_nc_pin(dapm, "EARPIECE"); snd_soc_dapm_nc_pin(dapm, "PREDRIVEL"); snd_soc_dapm_nc_pin(dapm, "PREDRIVER"); snd_soc_dapm_nc_pin(dapm, "CARKITL"); snd_soc_dapm_nc_pin(dapm, "CARKITR"); /* */ ret = snd_soc_jack_new(codec, "Headset Jack", SND_JACK_HEADSET, &hs_jack); if (ret) return ret; ret = snd_soc_jack_add_pins(&hs_jack, ARRAY_SIZE(hs_jack_pins), hs_jack_pins); if (ret) return ret; ret = snd_soc_jack_add_gpios(&hs_jack, ARRAY_SIZE(hs_jack_gpios), hs_jack_gpios); return ret; }
static int aml_m1_suspend(struct platform_device *pdev, pm_message_t state) { struct aml_m1_mid_data *au_data = (struct aml_m1_mid_data *)platform_get_drvdata(pdev); struct audio_platform_data *pdata = au_data->pdata; struct snd_soc_codec* codec = au_data->codec; printk("aml_m1_suspend\n"); snd_soc_dapm_disable_pin(codec, "Ext Spk"); snd_soc_dapm_disable_pin(codec, "Headset Jack"); snd_soc_dapm_sync(codec); au_data->hp_level = -1; if(pdata->amp_power_control) (*pdata->amp_power_control)(0); return 0; }
static int tab3_card_suspend_pre(struct snd_soc_card *card) { #ifdef CONFIG_SEC_DEV_JACK struct snd_soc_codec *codec = card->rtd->codec; snd_soc_dapm_disable_pin(&codec->dapm, "AIF1CLK"); #endif return 0; }
/* Line discipline .close() */ static void cx81801_close(struct tty_struct *tty) { struct snd_soc_codec *codec = tty->disc_data; del_timer_sync(&cx81801_timer); v253_ops.close(tty); /* Prevent the hook switch from further changing the DAPM pins */ INIT_LIST_HEAD(&ams_delta_hook_switch.pins); /* Revert back to default audio input/output constellation */ snd_soc_dapm_disable_pin(codec, "Mouthpiece"); snd_soc_dapm_enable_pin(codec, "Earpiece"); snd_soc_dapm_enable_pin(codec, "Microphone"); snd_soc_dapm_disable_pin(codec, "Speaker"); snd_soc_dapm_disable_pin(codec, "AGCIN"); snd_soc_dapm_sync(codec); }
static int midas_card_suspend_pre(struct snd_soc_card *card) { struct snd_soc_codec *codec = card->rtd->codec; struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(codec); #ifdef CONFIG_SEC_DEV_JACK snd_soc_dapm_disable_pin(&codec->dapm, "AIF1CLK"); #endif return 0; }
static int bdw_rt5677_suspend_pre(struct snd_soc_card *card) { struct bdw_rt5677_priv *bdw_rt5677 = snd_soc_card_get_drvdata(card); struct snd_soc_dapm_context *dapm; if (bdw_rt5677->codec) { dapm = &bdw_rt5677->codec->dapm; snd_soc_dapm_disable_pin(dapm, "MICBIAS1"); } return 0; }
int snd_soc_component_disable_pin(struct snd_soc_component *component, const char *pin) { struct snd_soc_dapm_context *dapm = snd_soc_component_get_dapm(component); char *full_name; int ret; if (!component->name_prefix) return snd_soc_dapm_disable_pin(dapm, pin); full_name = kasprintf(GFP_KERNEL, "%s %s", component->name_prefix, pin); if (!full_name) return -ENOMEM; ret = snd_soc_dapm_disable_pin(dapm, full_name); kfree(full_name); return ret; }
static int jack_notifier_event(struct notifier_block *nb, unsigned long event, void *data) { struct snd_soc_codec *codec; struct wm8994_priv *wm8994; struct snd_soc_jack *jack; // Force enable will keep the MICBISA on, even when we stop reording jack = data; if(jack) { codec = jack->card->codec; wm8994 = snd_soc_codec_get_drvdata(codec); if(1 == event){ // Someone inserted a jack, we need to turn on mic bias2 for headset mic detection snd_soc_dapm_force_enable_pin( codec, "MICBIAS2"); pr_crit("MIC DETECT: ENABLE. Jack inserted\n"); // This will enable mic detection on 8958 wm8958_mic_detect( codec, &hp_jack, NULL, NULL); }else if (0 == event){ headphone_plugged = 0; if (headphone_switch) { switch_set_state(headphone_switch, headphone_plugged); } pr_crit("MIC DETECT: DISABLE. Jack removed\n"); // This will disable mic detection on 8958 wm8958_mic_detect( codec, NULL, NULL, NULL); if( wm8994->pdata->jack_is_mic) { dev_err(codec->dev, " Reporting headset removed\n"); wm8994->pdata->jack_is_mic = false; wm8994->micdet[0].jack->jack->type = SND_JACK_MICROPHONE; input_report_switch(wm8994->micdet[0].jack->jack->input_dev, SW_MICROPHONE_INSERT, 0); } else { dev_err(codec->dev, " Reporting headphone removed\n"); input_report_switch(wm8994->micdet[0].jack->jack->input_dev, SW_HEADPHONE_INSERT, 0); } input_sync(jack->jack->input_dev); snd_soc_dapm_disable_pin( codec, "MICBIAS2"); } } return 0; }
static int smdk_wm8580_init_paiftx(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; /* Enabling the microphone requires the fitting of a 0R * resistor to connect the line from the microphone jack. */ snd_soc_dapm_disable_pin(dapm, "MicIn"); return 0; }
static void mfld_lo_enable_out_pins(struct snd_soc_codec *codec) { struct mfld_mc_private *ctx = snd_soc_card_get_drvdata(codec->card); snd_soc_dapm_enable_pin(&codec->dapm, "IHFOUTL"); snd_soc_dapm_enable_pin(&codec->dapm, "IHFOUTR"); snd_soc_dapm_enable_pin(&codec->dapm, "LINEOUTL"); snd_soc_dapm_enable_pin(&codec->dapm, "LINEOUTR"); snd_soc_dapm_enable_pin(&codec->dapm, "VIB1OUT"); snd_soc_dapm_enable_pin(&codec->dapm, "VIB2OUT"); if (ctx->hs_switch) { snd_soc_dapm_enable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_disable_pin(&codec->dapm, "EPOUT"); } else { snd_soc_dapm_disable_pin(&codec->dapm, "Headphones"); snd_soc_dapm_enable_pin(&codec->dapm, "EPOUT"); } mutex_lock(&codec->mutex); snd_soc_dapm_sync(&codec->dapm); mutex_unlock(&codec->mutex); }
static int wm8997_codec_probe(struct snd_soc_codec *codec) { struct wm8997_priv *priv = snd_soc_codec_get_drvdata(codec); arizona_init_spk(codec); snd_soc_dapm_disable_pin(&codec->dapm, "HAPTICS"); priv->core.arizona->dapm = &codec->dapm; return 0; }
static int neo1973_wm8753_init(struct snd_soc_pcm_runtime *rtd) { struct snd_soc_codec *codec = rtd->codec; struct snd_soc_card *card = rtd->card; /* set up NC codec pins */ snd_soc_dapm_nc_pin(&codec->dapm, "OUT3"); snd_soc_dapm_nc_pin(&codec->dapm, "OUT4"); snd_soc_dapm_nc_pin(&codec->dapm, "LINE1"); snd_soc_dapm_nc_pin(&codec->dapm, "LINE2"); /* set endpoints to default off mode */ snd_soc_dapm_disable_pin(&card->dapm, "GSM Line Out"); snd_soc_dapm_disable_pin(&card->dapm, "GSM Line In"); snd_soc_dapm_disable_pin(&card->dapm, "Headset Mic"); snd_soc_dapm_disable_pin(&card->dapm, "Handset Mic"); snd_soc_dapm_disable_pin(&card->dapm, "Stereo Out"); snd_soc_dapm_disable_pin(&card->dapm, "Handset Spk"); /* allow audio paths from the GSM modem to run during suspend */ snd_soc_dapm_ignore_suspend(&card->dapm, "GSM Line Out"); snd_soc_dapm_ignore_suspend(&card->dapm, "GSM Line In"); snd_soc_dapm_ignore_suspend(&card->dapm, "Headset Mic"); snd_soc_dapm_ignore_suspend(&card->dapm, "Handset Mic"); snd_soc_dapm_ignore_suspend(&card->dapm, "Stereo Out"); snd_soc_dapm_ignore_suspend(&card->dapm, "Handset Spk"); return 0; }
static irqreturn_t t0_g_det_thread(int irq, void *data) { struct wm1811_machine_priv *wm1811 = data; struct wm8994_priv *wm8994 = snd_soc_codec_get_drvdata(wm1811->codec); struct snd_soc_codec *codec = wm8994->codec; if (wm1811->get_g_det_value_f()) { pr_info("%s: G_DET_N GPIO is High!!!!", __func__); mutex_lock(&wm8994->accdet_lock); snd_soc_update_bits(codec, WM8958_MICBIAS2, WM8958_MICB2_DISCH, WM8958_MICB2_DISCH); /* Enable debounce while removed */ snd_soc_update_bits(codec, WM1811_JACKDET_CTRL, WM1811_JACKDET_DB, WM1811_JACKDET_DB); wm8994->mic_detecting = false; wm8994->jack_mic = false; snd_soc_update_bits(codec, WM8958_MIC_DETECT_1, WM8958_MICD_ENA, 0); t0_jackdet_set_mode(codec, WM1811_JACKDET_MODE_JACK); mutex_unlock(&wm8994->accdet_lock); mutex_lock(&codec->mutex); snd_soc_dapm_disable_pin(&codec->dapm, "MICBIAS2"); snd_soc_dapm_sync(&codec->dapm); mutex_unlock(&codec->mutex); snd_soc_jack_report(wm8994->micdet[0].jack, 0, SND_JACK_MECHANICAL | SND_JACK_HEADSET | wm8994->btn_mask); } else { pr_info("%s: G_DET_N GPIO is Low!!!!", __func__); handle_nested_irq(WM1811_JACKDET_IRQ_NUM); msleep(100); handle_nested_irq(WM1811_MIC_IRQ_NUM); } return IRQ_HANDLED; }