static int tegra_dapm_event_int_mic(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { struct snd_soc_device *pdata = platform_get_drvdata(tegra_snd_device); int ctlval; //printk(KERN_INFO "####### tegra_dapm_event_int_mic event:%X\n", event); #if 0 if (tegra_wired_jack_conf.en_mic_int != -1) gpio_set_value_cansleep(tegra_wired_jack_conf.en_mic_int, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); if (tegra_wired_jack_conf.en_mic_ext != -1) gpio_set_value_cansleep(tegra_wired_jack_conf.en_mic_ext, SND_SOC_DAPM_EVENT_ON(event) ? 0 : 1); #endif if(SND_SOC_DAPM_EVENT_ON(event)) { ctlval = 0x200; } else { ctlval = 0x00; } snd_soc_write(pdata->card->codec, WM8903_CLOCK_RATE_TEST_4, ctlval); return 0; }
static int msm8930_spkramp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { pr_debug("%s() %x\n", __func__, SND_SOC_DAPM_EVENT_ON(event)); if (SND_SOC_DAPM_EVENT_ON(event)) { if (!strncmp(w->name, "Ext Spk Left Pos", 17)) msm8960_ext_spk_power_amp_on(SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Left Neg", 17)) msm8960_ext_spk_power_amp_on(SPK_AMP_NEG); else { pr_err("%s() Invalid Speaker Widget = %s\n", __func__, w->name); return -EINVAL; } } else { if (!strncmp(w->name, "Ext Spk Left Pos", 17)) msm8960_ext_spk_power_amp_off(SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Left Neg", 17)) msm8960_ext_spk_power_amp_off(SPK_AMP_NEG); else { pr_err("%s() Invalid Speaker Widget = %s\n", __func__, w->name); return -EINVAL; } } return 0; }
static int tegra_dapm_event_int_spk(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { #ifndef MACH_ACER_AUDIO if (tegra_wired_jack_conf.en_spkr != -1) { if (tegra_wired_jack_conf.amp_reg) { if (SND_SOC_DAPM_EVENT_ON(event) && !tegra_wired_jack_conf.amp_reg_enabled) { regulator_enable(tegra_wired_jack_conf.amp_reg); tegra_wired_jack_conf.amp_reg_enabled = 1; } else if (!SND_SOC_DAPM_EVENT_ON(event) && tegra_wired_jack_conf.amp_reg_enabled) { regulator_disable(tegra_wired_jack_conf.amp_reg); tegra_wired_jack_conf.amp_reg_enabled = 0; } } gpio_set_value_cansleep(tegra_wired_jack_conf.en_spkr, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); } #endif return 0; }
static int tegra_dapm_event_int_spk(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { //struct snd_soc_device *pdata = platform_get_drvdata(tegra_snd_device); //printk(KERN_INFO "####### tegra_dapm_event_int_spk event:%X\n", event); if (tegra_wired_jack_conf.en_spkr != -1) { if (tegra_wired_jack_conf.amp_reg) { if (SND_SOC_DAPM_EVENT_ON(event) && !tegra_wired_jack_conf.amp_reg_enabled) { regulator_enable(tegra_wired_jack_conf.amp_reg); tegra_wired_jack_conf.amp_reg_enabled = 1; } else if (!SND_SOC_DAPM_EVENT_ON(event) && tegra_wired_jack_conf.amp_reg_enabled) { regulator_disable(tegra_wired_jack_conf.amp_reg); tegra_wired_jack_conf.amp_reg_enabled = 0; } } if(SND_SOC_DAPM_EVENT_ON(event)) gpio_direction_output(tegra_wired_jack_conf.en_spk_int, true); gpio_set_value_cansleep(tegra_wired_jack_conf.en_spkr, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); if(!SND_SOC_DAPM_EVENT_ON(event)) gpio_direction_output(tegra_wired_jack_conf.en_spk_int, false); } return 0; }
static int tegra_aic326x_event_dmic(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { struct snd_soc_dapm_context *dapm = w->dapm; struct snd_soc_card *card = dapm->card; struct tegra_aic326x *machine = snd_soc_card_get_drvdata(card); struct tegra_asoc_platform_data *pdata = machine->pdata; if (machine->dmic_reg && machine->dmic_1v8_reg) { if (SND_SOC_DAPM_EVENT_ON(event)) { regulator_enable(machine->dmic_reg); regulator_enable(machine->dmic_1v8_reg); } else { regulator_disable(machine->dmic_reg); regulator_disable(machine->dmic_1v8_reg); } } if (!(machine->gpio_requested & GPIO_INT_MIC_EN)) return 0; gpio_set_value_cansleep(pdata->gpio_int_mic_en, !!SND_SOC_DAPM_EVENT_ON(event)); return 0; }
static int msm8960_spkramp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { #if defined (CONFIG_MACH_MSM8960_SIRIUSLTE) int ret; #endif pr_debug("%s() %x\n", __func__, SND_SOC_DAPM_EVENT_ON(event)); if (SND_SOC_DAPM_EVENT_ON(event)) { if (!strncmp(w->name, "Ext Spk Bottom Pos", 18)) msm8960_ext_spk_power_amp_on(BOTTOM_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Bottom Neg", 18)) msm8960_ext_spk_power_amp_on(BOTTOM_SPK_AMP_NEG); else if (!strncmp(w->name, "Ext Spk Top Pos", 15)) msm8960_ext_spk_power_amp_on(TOP_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Top Neg", 15)) msm8960_ext_spk_power_amp_on(TOP_SPK_AMP_NEG); else { pr_err("%s() Invalid Speaker Widget = %s\n", __func__, w->name); return -EINVAL; } #if defined (CONFIG_MACH_MSM8960_SIRIUSLTE) if (SND_SOC_DAPM_EVENT_ON(event) == SND_SOC_DAPM_POST_PMU) { ret = snd_subsystem_sp_poweron(); if (ret < 0) { pr_err("[ak7811] spkamp_event SPK ON fail...\n"); return -EINVAL; } } #endif } else { #if defined (CONFIG_MACH_MSM8960_SIRIUSLTE) ret = snd_subsystem_standby(SYSTEM_OFF); if (ret < 0) { pr_err("[ak7811] spkamp_event SPK OFF fail...\n"); return -EINVAL; } #endif if (!strncmp(w->name, "Ext Spk Bottom Pos", 18)) msm8960_ext_spk_power_amp_off(BOTTOM_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Bottom Neg", 18)) msm8960_ext_spk_power_amp_off(BOTTOM_SPK_AMP_NEG); else if (!strncmp(w->name, "Ext Spk Top Pos", 15)) msm8960_ext_spk_power_amp_off(TOP_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Top Neg", 15)) msm8960_ext_spk_power_amp_off(TOP_SPK_AMP_NEG); else { pr_err("%s() Invalid Speaker Widget = %s\n", __func__, w->name); return -EINVAL; } } return 0; }
static int sc881x_amp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { sc881x_dbg("Entering %s switch %s\n", __func__, SND_SOC_DAPM_EVENT_ON(event) ? "ON" : "OFF"); audio_speaker_enable(! !SND_SOC_DAPM_EVENT_ON(event)); sc881x_dbg("Leaving %s\n", __func__); return 0; }
static int msm8960_spkramp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { pr_debug("%s() %x\n", __func__, SND_SOC_DAPM_EVENT_ON(event)); if (SND_SOC_DAPM_EVENT_ON(event)) codec_poweramp_on(); else codec_poweramp_off(); return 0; }
static int sc881x_ear_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { sc881x_dbg("Entering %s switch %s\n", __func__, SND_SOC_DAPM_EVENT_ON(event) ? "ON" : "OFF"); if (audio_pa_amplifier && audio_pa_amplifier->earpiece.control) audio_pa_amplifier->earpiece. control(! !SND_SOC_DAPM_EVENT_ON(event), NULL); sc881x_dbg("Leaving %s\n", __func__); return 0; }
static int tegra_dapm_event_headphone(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { ASOC_FUNCTION(""); ASOC_DBG("SND_SOC_DAPM_EVENT_ON ? %d\n", SND_SOC_DAPM_EVENT_ON(event)); gpio_set_value_cansleep(s_wired_jack_conf._wired_jack_conf.en_headphone, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); return 0; }
static int spitz_mic_bias(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { if (machine_is_borzoi() || machine_is_spitz()) gpio_set_value(SPITZ_GPIO_MIC_BIAS, SND_SOC_DAPM_EVENT_ON(event)); if (machine_is_akita()) gpio_set_value(AKITA_GPIO_MIC_BIAS, SND_SOC_DAPM_EVENT_ON(event)); return 0; }
static int tegra_dapm_event_ext_mic(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { if (tegra_wired_jack_conf.en_mic_ext != -1) gpio_set_value_cansleep(tegra_wired_jack_conf.en_mic_ext, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); if (tegra_wired_jack_conf.en_mic_int != -1) gpio_set_value_cansleep(tegra_wired_jack_conf.en_mic_int, SND_SOC_DAPM_EVENT_ON(event) ? 0 : 1); return 0; }
static int bdw_rt5677_event_hp(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { struct snd_soc_dapm_context *dapm = w->dapm; struct snd_soc_card *card = dapm->card; struct bdw_rt5677_priv *bdw_rt5677 = snd_soc_card_get_drvdata(card); if (SND_SOC_DAPM_EVENT_ON(event)) msleep(70); gpiod_set_value_cansleep(bdw_rt5677->gpio_hp_en, SND_SOC_DAPM_EVENT_ON(event)); return 0; }
static int tegra_dapm_event_int_spk(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { struct snd_soc_codec *codec = w->codec; int CtrlReg = 0; ASOC_FUNCTION(""); ASOC_DBG("SND_SOC_DAPM_EVENT_ON ? %d\n", SND_SOC_DAPM_EVENT_ON(event)); if (s_wired_jack_conf._wired_jack_conf.en_spkr != -1) { if (SND_SOC_DAPM_EVENT_ON(event) && !s_wired_jack_conf.amp_reg_enabled) { s_wired_jack_conf.amp_reg_enabled = 1; if (!LUNA_SPEAKER_CORRECT_DACL_PHASE_EVT3_1()) { CtrlReg = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_0); CtrlReg = SET_REG_VAL(CtrlReg, 0x1, WM8903_DACL_DATINV_SHIFT, 0x1); snd_soc_write(codec, WM8903_AUDIO_INTERFACE_0, CtrlReg); } } else if (!SND_SOC_DAPM_EVENT_ON(event) && s_wired_jack_conf.amp_reg_enabled) { s_wired_jack_conf.amp_reg_enabled = 0; if (!LUNA_SPEAKER_CORRECT_DACL_PHASE_EVT3_1()) { CtrlReg = snd_soc_read(codec, WM8903_AUDIO_INTERFACE_0); CtrlReg = SET_REG_VAL(CtrlReg, 0x1, WM8903_DACL_DATINV_SHIFT, 0x0); snd_soc_write(codec, WM8903_AUDIO_INTERFACE_0, CtrlReg); } } gpio_set_value_cansleep(s_wired_jack_conf._wired_jack_conf.en_spkr, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); /* the amplifier needs 100ms to enable. wait 100ms after * gpio EN triggered */ if (SND_SOC_DAPM_EVENT_ON(event)) msleep(100); } return 0; }
static int platform_clock_control(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { struct snd_soc_dapm_context *dapm = w->dapm; struct snd_soc_card *card = dapm->card; struct snd_soc_dai *codec_dai; struct cht_mc_private *ctx = snd_soc_card_get_drvdata(card); int ret; /* See the comment in snd_cht_mc_probe() */ if (ctx->quirks & QUIRK_PMC_PLT_CLK_0) return 0; codec_dai = snd_soc_card_get_codec_dai(card, CHT_CODEC_DAI); if (!codec_dai) { dev_err(card->dev, "Codec dai not found; Unable to set platform clock\n"); return -EIO; } if (SND_SOC_DAPM_EVENT_ON(event)) { ret = clk_prepare_enable(ctx->mclk); if (ret < 0) { dev_err(card->dev, "could not configure MCLK state"); return ret; } } else { clk_disable_unprepare(ctx->mclk); } return 0; }
static int lineout_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *control, int event) { struct snd_soc_codec *codec = w->codec; struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); bool *flag; switch (w->shift) { case WM8993_LINEOUT1N_ENA_SHIFT: flag = &hubs->lineout1n_ena; break; case WM8993_LINEOUT1P_ENA_SHIFT: flag = &hubs->lineout1p_ena; break; case WM8993_LINEOUT2N_ENA_SHIFT: flag = &hubs->lineout2n_ena; break; case WM8993_LINEOUT2P_ENA_SHIFT: flag = &hubs->lineout2p_ena; break; default: WARN(1, "Unknown line output"); return -EINVAL; } *flag = SND_SOC_DAPM_EVENT_ON(event); return 0; }
static int int_clear(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = w->codec; u8 reg, reg2, reg3; if (SND_SOC_DAPM_EVENT_ON(event)) { snd_soc_read(codec, CS35L32_INT_STATUS_1); snd_soc_read(codec, CS35L32_INT_STATUS_2); pr_info("%s Read and Clear\n",__func__); } else { return 0; } mdelay(15); reg = snd_soc_read(codec, CS35L32_INT_STATUS_1); printk("INT 1 REG = %x\n", reg); reg2 = snd_soc_read(codec, CS35L32_INT_STATUS_2); printk("INT 2 REG = %x\n", reg2); snd_soc_update_bits(codec, CS35L32_PWRCTL1, CS35L32_PDN_ALL, 1); reg3 = snd_soc_read(codec, CS35L32_PWRCTL1); printk("PWRCTL1 REG = %x\n", reg3); mdelay(20); snd_soc_update_bits(codec, CS35L32_PWRCTL1, CS35L32_PDN_ALL, 0); reg3 = snd_soc_read(codec, CS35L32_PWRCTL1); printk("PWRCTL1 REG = %x\n", reg3); return 0; }
static int seaboard_event_dmic(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { struct snd_soc_codec *codec = w->codec; struct snd_soc_card *card = codec->card; struct tegra_seaboard *seaboard = snd_soc_card_get_drvdata(card); bool new_enabled; int ret; if (IS_ERR(seaboard->vdd_dmic)) return 0; new_enabled = !!SND_SOC_DAPM_EVENT_ON(event); if (seaboard->vdd_dmic_enabled == new_enabled) return 0; if (new_enabled) ret = regulator_enable(seaboard->vdd_dmic); else ret = regulator_disable(seaboard->vdd_dmic); if (!ret) seaboard->vdd_dmic_enabled = new_enabled; return ret; }
static int midas_ext_submicbias(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = w->codec; dev_dbg(codec->dev, "%s event is %02X", w->name, event); if (!check_rev00()) { switch (event) { case SND_SOC_DAPM_PRE_PMU: gpio_set_value(GPIO_SUB_MIC_BIAS_EN, 1); break; case SND_SOC_DAPM_POST_PMD: gpio_set_value(GPIO_SUB_MIC_BIAS_EN, 0); break; } } else { switch (event) { case SND_SOC_DAPM_PRE_PMU: gpio_set_value(GPIO_SUB_MIC_BIAS_EN_00, 1); break; case SND_SOC_DAPM_POST_PMD: gpio_set_value(GPIO_SUB_MIC_BIAS_EN_00, 0); break; } } #if 0 gpio_set_value(GPIO_SUB_MIC_BIAS_EN, SND_SOC_DAPM_EVENT_ON(event)); #endif return 0; }
static int rear_amp_event(struct snd_soc_dapm_widget *widget, struct snd_kcontrol *kctl, int event) { struct snd_soc_codec *codec = widget->codec; return rear_amp_power(codec, SND_SOC_DAPM_EVENT_ON(event)); }
static int twl6040_hf_drv_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = w->codec; struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec); int ret = 0; if (SND_SOC_DAPM_EVENT_ON(event)) { priv->non_lp++; /* enable HF external boost after HFDRVs to reduce pop noise */ if (priv->vddhf_reg && (++priv->hfdrv == 2)) { ret = regulator_enable(priv->vddhf_reg); if (ret) { dev_err(codec->dev, "failed to enable " "VDDHF regulator %d\n", ret); return ret; } } } else { priv->non_lp--; /* disable HF external boost before HFDRVs to reduce pop noise */ if (priv->vddhf_reg && (priv->hfdrv-- == 2)) { ret = regulator_disable(priv->vddhf_reg); if (ret) { dev_err(codec->dev, "failed to disable " "VDDHF regulator %d\n", ret); return ret; } } } return ret; }
static int tegra_dapm_event_ext_mic(struct snd_soc_dapm_widget* w, struct snd_kcontrol* k, int event) { //printk(KERN_INFO "####### tegra_dapm_event_ext_mic event:%X\n", event); #if 0 if (tegra_wired_jack_conf.en_mic_ext != -1) gpio_set_value_cansleep(tegra_wired_jack_conf.en_mic_ext, SND_SOC_DAPM_EVENT_ON(event) ? 1 : 0); if (tegra_wired_jack_conf.en_mic_int != -1) gpio_set_value_cansleep(tegra_wired_jack_conf.en_mic_int, SND_SOC_DAPM_EVENT_ON(event) ? 0 : 1); #endif return 0; }
static int tegra_alc5623_event_int_spk(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { struct snd_soc_dapm_context *dapm = w->dapm; struct snd_soc_card *card = dapm->card; struct snd_soc_codec *codec = dapm->codec; struct tegra_alc5623 *machine = snd_soc_card_get_drvdata(card); struct tegra_alc5623_platform_data *pdata = machine->pdata; static bool firstEnable = true; if (machine->spk_reg) { if (SND_SOC_DAPM_EVENT_ON(event)) regulator_enable(machine->spk_reg); else regulator_disable(machine->spk_reg); } /* * Manage both amps in the SMBA board. * Don't turn them on the first enable of the internal speaker. * This is to prevent the whine that results before the * userspace lib can set up the audio pathing. */ if (firstEnable == true && !!SND_SOC_DAPM_EVENT_ON(event)) { firstEnable = false; } else { // External Amp GPIO snd_soc_update_bits(codec, ALC5623_GPIO_OUTPUT_PIN_CTRL, ALC5623_GPIO_OUTPUT_GPIO_OUT_STATUS, (!!SND_SOC_DAPM_EVENT_ON(event))*ALC5623_GPIO_OUTPUT_GPIO_OUT_STATUS); // ALC5623 Internal Auxout Amp snd_soc_update_bits(codec, ALC5623_PWR_MANAG_ADD1, ALC5623_PWR_ADD1_AUX_OUT_AMP, (!!SND_SOC_DAPM_EVENT_ON(event))*ALC5623_PWR_ADD1_AUX_OUT_AMP); } if (!(machine->gpio_requested & GPIO_SPKR_EN)) { return 0; } gpio_set_value_cansleep(pdata->gpio_spkr_en, SND_SOC_DAPM_EVENT_ON(event)); return 0; }
static int kylew_amp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { kylew_dbg("Entering %s e=0x%x\n", __func__, event); audio_speaker_enable(SND_SOC_DAPM_EVENT_ON(event)); kylew_dbg("Leaving %s\n", __func__); return 0; }
static int msm_spkramp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { pr_debug("%s() %x\n", __func__, SND_SOC_DAPM_EVENT_ON(event)); if (SND_SOC_DAPM_EVENT_ON(event)) { if (!strncmp(w->name, "Ext Spk Bottom Pos", 18)) msm_ext_spk_power_amp_on(BOTTOM_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Bottom Neg", 18)) msm_ext_spk_power_amp_on(BOTTOM_SPK_AMP_NEG); else if (!strncmp(w->name, "Ext Spk Top Pos", 15)) msm_ext_spk_power_amp_on(TOP_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Top Neg", 15)) msm_ext_spk_power_amp_on(TOP_SPK_AMP_NEG); else if (!strncmp(w->name, "Dock Spk Pos", 12)) msm_ext_spk_power_amp_on(DOCK_SPK_AMP_POS); else if (!strncmp(w->name, "Dock Spk Neg", 12)) msm_ext_spk_power_amp_on(DOCK_SPK_AMP_NEG); else { pr_err("%s() Invalid Speaker Widget = %s\n", __func__, w->name); return -EINVAL; } } else { if (!strncmp(w->name, "Ext Spk Bottom Pos", 18)) msm_ext_spk_power_amp_off(BOTTOM_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Bottom Neg", 18)) msm_ext_spk_power_amp_off(BOTTOM_SPK_AMP_NEG); else if (!strncmp(w->name, "Ext Spk Top Pos", 15)) msm_ext_spk_power_amp_off(TOP_SPK_AMP_POS); else if (!strncmp(w->name, "Ext Spk Top Neg", 15)) msm_ext_spk_power_amp_off(TOP_SPK_AMP_NEG); else if (!strncmp(w->name, "Dock Spk Pos", 12)) msm_ext_spk_power_amp_off(DOCK_SPK_AMP_POS); else if (!strncmp(w->name, "Dock Spk Neg", 12)) msm_ext_spk_power_amp_off(DOCK_SPK_AMP_NEG); else { pr_err("%s() Invalid Speaker Widget = %s\n", __func__, w->name); return -EINVAL; } } return 0; }
static int msm8660_spkramp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { if (SND_SOC_DAPM_EVENT_ON(event)) extern_poweramp_on(); else extern_poweramp_off(); return 0; }
static int spk_amp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { if (SND_SOC_DAPM_EVENT_ON(event)) pmic_gpio_set_bit_val(MCU_GPIO_REG_GPIO_CONTROL_1, 0, 1); else pmic_gpio_set_bit_val(MCU_GPIO_REG_GPIO_CONTROL_1, 0, 0); return 0; }
static int rx1950_spk_power(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { if (SND_SOC_DAPM_EVENT_ON(event)) gpio_set_value(S3C2410_GPA(1), 1); else gpio_set_value(S3C2410_GPA(1), 0); return 0; }
static int n810_jack_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { if (SND_SOC_DAPM_EVENT_ON(event)) gpio_set_value(N810_HEADSET_AMP_GPIO, 1); else gpio_set_value(N810_HEADSET_AMP_GPIO, 0); return 0; }
static int dapm_audioreg_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { if (SND_SOC_DAPM_EVENT_ON(event)) ux500_ab8500_power_control_inc(); else ux500_ab8500_power_control_dec(); return 0; }