コード例 #1
0
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;
}
コード例 #2
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;
}
コード例 #3
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;
}
コード例 #4
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;
}
コード例 #5
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;
}
コード例 #6
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;
}
コード例 #7
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;
}
コード例 #8
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;
}
コード例 #9
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;
}
コード例 #10
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;
}
コード例 #11
0
ファイル: spitz.c プロジェクト: asdlei00/Ace-i
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;
}
コード例 #12
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;
}
コード例 #13
0
ファイル: bdw-rt5677.c プロジェクト: byxorna/linux-samus
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;
}
コード例 #14
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;
}
コード例 #15
0
ファイル: cht_bsw_max98090_ti.c プロジェクト: avagin/linux
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;
}
コード例 #16
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;
}
コード例 #17
0
ファイル: cs35l32.c プロジェクト: bju2000/kernel_lge_msm8994
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;
}
コード例 #18
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;
}
コード例 #19
0
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;
}
コード例 #20
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));
}
コード例 #21
0
ファイル: twl6040.c プロジェクト: panhenry/MyTest
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;
}
コード例 #22
0
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;
}
コード例 #23
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;
}
コード例 #24
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;
}
コード例 #25
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;
}
コード例 #26
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;
}
コード例 #27
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;
}
コード例 #28
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;
}
コード例 #29
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;
}
コード例 #30
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;
}