void holiday_snddev_stereo_mic_pamp_on(int en)
{
	int ret;

	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_0, OTHC_SIGNAL_ALWAYS_ON);
		if (ret)
			pr_aud_err("%s: Enabling int mic power failed\n", __func__);

		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_ALWAYS_ON);
		if (ret)
			pr_aud_err("%s: Enabling back mic power failed\n", __func__);

		/* select internal mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL1), 0);
		if (support_audience)
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 1);
	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_0, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Disabling int mic power failed\n", __func__);

		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Disabling back mic power failed\n", __func__);
	}
}
Ejemplo n.º 2
0
void verdi_lte_snddev_bmic_pamp_on(int en)
{
	int ret;

	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		verdi_lte_audio_2v85_enable(en);

		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_ALWAYS_ON);
		if (ret)
			pr_aud_err("%s: Enabling int mic power failed\n", __func__);

		/* select internal mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS( \
			VERDI_LTE_AUD_STEREO_REC), 0);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_MIC_SEL), 0);
	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Enabling int mic power failed\n", __func__);

		verdi_lte_audio_2v85_enable(en);
	}
}
void doubleshot_snddev_fmspk_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		/* enable rx route */
		switch (system_rev) {
		case XA_DEV:
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_SPK_ENO), 1);
			break;
		case XB_DEV:
		case XC_DEV:
		default:
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_HANDSET_ENO), 1);
			set_speaker_amp(1);
			break;
		}
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_FM_SPK;
	} else {
		/* disable rx route */
		switch (system_rev) {
		case XA_DEV:
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_SPK_ENO), 0);
			break;
		case XB_DEV:
		case XC_DEV:
		default:
			set_speaker_amp(0);
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_HANDSET_ENO), 0);
			break;
		}
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_FM_SPK;
	}}
void holiday_imic_pamp_on_with_audience(int en)
{
	int ret, call_state=0;
	pr_aud_info("%s %d\n", __func__, en);

	call_state = msm_get_call_state();
	if (en) {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_0, OTHC_SIGNAL_ALWAYS_ON);
		if (ret)
			pr_aud_err("%s: Enabling int mic power failed\n", __func__);

		/* select internal mic path */
		if (call_state) {
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 0);
			ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_ALWAYS_ON);
			if (ret)
				pr_aud_err("%s: Enabling back mic power failed\n", __func__);
		} else {
			if (!force_a1026_on)
				gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 1);
		}
	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_0, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Enabling int mic power failed\n", __func__);
		if (call_state) {
			ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
			if (ret)
				pr_aud_err("%s: Enabling back mic power failed\n", __func__);
		}
	}
}
void mecha_snddev_hsed_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		if (system_rev == 0){
			/*gpio_set_value(PM8058_GPIO_PM_TO_SYS(MECHA_GPIO_AUD_AMP_EN_XA), 1);*/
			gpio_request(PM8058_GPIO_PM_TO_SYS(MECHA_GPIO_AUD_AMP_EN_XA),"HP_AMP_EN");
			gpio_direction_output(PM8058_GPIO_PM_TO_SYS(MECHA_GPIO_AUD_AMP_EN_XA), 1);
		}else{
			/*gpio_set_value(MECHA_GPIO_AUD_AMP_EN, 1);*/
			gpio_request(MECHA_GPIO_AUD_AMP_EN,"HP_AMP_EN");
			gpio_direction_output(MECHA_GPIO_AUD_AMP_EN, 1);
		}
		mdelay(90);
		set_headset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_HEADSET;
		mdelay(30);
	} else {
		set_headset_amp(0);
		if (system_rev == 0){
			/*gpio_set_value(PM8058_GPIO_PM_TO_SYS(MECHA_GPIO_AUD_AMP_EN_XA), 0);*/
			gpio_request(PM8058_GPIO_PM_TO_SYS(MECHA_GPIO_AUD_AMP_EN_XA),"HP_AMP_EN");
			gpio_direction_output(PM8058_GPIO_PM_TO_SYS(MECHA_GPIO_AUD_AMP_EN_XA), 0);
		}else{
			/*gpio_set_value(MECHA_GPIO_AUD_AMP_EN, 0);*/
			gpio_request(MECHA_GPIO_AUD_AMP_EN,"HP_AMP_EN");
			gpio_direction_output(MECHA_GPIO_AUD_AMP_EN, 0);
		}
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_HEADSET;
	}
}
Ejemplo n.º 6
0
void verdi_lte_reset_3254(void)
{
	pr_aud_err("hard reset aic3254\n");
	gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_CODEC_RST), 0);
	mdelay(1);
	gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_CODEC_RST), 1);
}
void holiday_selmic(int en)
{
	gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 0);
	force_a1026_on = 1;
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL1), en);
	}
}
Ejemplo n.º 8
0
void kingdom_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(KINGDOM_AUD_MICPATH_SEL), 1);
	} else
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(KINGDOM_AUD_MICPATH_SEL), 0);
}
void primou_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
#if 0
	if (en)
		gpio_request(PM8058_GPIO_PM_TO_SYS(PRIMOU_AUD_CODEC_EN), "aud_2v85_en");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(PRIMOU_AUD_CODEC_EN), 1);
		gpio_set_value(PRIMOU_AUD_CODEC_EN, 1);
	else
void shooter_u_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_SPK_ENO), 1);
	} else {
		
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_SPK_ENO), 0);
	}
}
void villec2_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_request(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_SPK_ENO), "AUD_SPK_ENO");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_SPK_ENO), 1);
	} else {
		gpio_request(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_SPK_ENO), "AUD_SPK_ENO");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_SPK_ENO), 0);
	}
}
void villec2_snddev_receiver_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_HANDSET_ENO), 1);
	} else {
		
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_HANDSET_ENO), 0);
	}
}
Ejemplo n.º 13
0
void primou_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(PRIMOU_AUD_SPK_SD), 1);
		mdelay(100);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(PRIMOU_AUD_SPK_SD), 0);
	}
}
Ejemplo n.º 14
0
void pyramid_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		/* select external mic path */
		gpio_request(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_MIC_SEL),
						"AUD_MIC_SEL");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_MIC_SEL), 1);
	}
}
Ejemplo n.º 15
0
void verdi_lte_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		verdi_lte_audio_2v85_enable(en);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_MIC_SEL), 1);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_MIC_SEL), 0);
		verdi_lte_audio_2v85_enable(en);
	}
}
void holiday_a1026_hw_reset(void)
{
	/* Reset A1026 chip */
	gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_A1026_RST), 0);

	/* Enable A1026 clock */
	gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_A1026_CLK), 1);
	mdelay(1);

	/* Take out of reset */
	gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_A1026_RST), 1);
}
Ejemplo n.º 17
0
void verdi_lte_snddev_fmhs_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_HP_EN), 1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_FM_HS;
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_FM_HS;
	}
}
void spade_snddev_fmhs_pamp_on(int en)
{
	if (en) {
		msleep(60);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_HP_EN), 1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_FM_HS;
		mdelay(5);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_FM_HS;
	}
}
void spade_snddev_receiver_pamp_on(int en)
{
	pr_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_EP_EN), 1);
		mdelay(5);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_RECEIVER;
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_EP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_RECEIVER;
	}
}
void rider_snddev_fmspk_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		msleep(50);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(RIDER_AUD_SPK_ENO), 1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_FM_SPK;
		msleep(5);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(RIDER_AUD_SPK_ENO), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_FM_SPK;
	}
}
void spade_snddev_hsed_pamp_on(int en)
{
	pr_info("%s %d\n", __func__, en);
	if (en) {
		msleep(60);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_HP_EN), 1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_HEADSET;
		mdelay(5);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_HEADSET;
	}
}
void villec2_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

#if 0 /* headset driver will handle this part, and corresponding to plug-in and plug-out */
	if (en) {
		/* select external mic path */
		gpio_request(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_2V85_EN), "AUD_2V85_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_2V85_EN), 1);
	} else {
		gpio_request(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_2V85_EN), "AUD_2V85_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(VILLEC2_AUD_2V85_EN), 0);
	}
#endif
}
Ejemplo n.º 23
0
void pyramid_snddev_fmhs_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_HP_EN), 1);
		set_headset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_FM_HS;
	} else {
		set_headset_amp(0);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_FM_HS;
	}
}
void shooter_u_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

#if 0 
	if (en) {
		
		gpio_request(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_2V85_EN), "AUD_2V85_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_2V85_EN), 1);
	} else {
		gpio_request(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_2V85_EN), "AUD_2V85_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_2V85_EN), 0);
	}
#endif
}
void holiday_snddev_fmhs_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_HANDSET_ENO), 1);
		set_headset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_FM_HS;
	} else {
		set_headset_amp(0);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_HANDSET_ENO), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_FM_HS;
	}
}
void runnymede_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_SPK_SD), 1);
		mdelay(30);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_SPEAKER;
	} else {
		/* Reset AIC3254 */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_SPK_SD), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_SPEAKER;
	}
}
void doubleshot_snddev_stereo_mic_pamp_on(int en)
{
	int ret;

	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_0, OTHC_SIGNAL_ALWAYS_ON);
		if (ret)
			pr_aud_err("%s: Enabling int mic power failed\n", __func__);

		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_ALWAYS_ON);
		if (ret)
			pr_aud_err("%s: Enabling back mic power failed\n", __func__);

		/* select external mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_MIC_SEL), 0);
	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_0, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Disabling int mic power failed\n", __func__);


		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Disabling back mic power failed\n", __func__);
	}
}
void doubleshot_snddev_emic_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	/*
	external micbias should be controlled by headset driver with doubleshot_mic_enable
	turn on with headset plugged in and turn off when headset unplugged.
	*/
	if (en) {
		/* select external mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_MIC_SEL), 1);

		/* TVOUT HP select low, it will be set to high when TVOUT turned on. */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_TVOUT_HP_SEL), 0);

	}
}
Ejemplo n.º 29
0
static int akm8975_wait_for_data_ready(struct akm8975_data *akm)
{
	int data_ready = gpio_get_value_cansleep(PM8058_GPIO_PM_TO_SYS(akm->pdata->gpio_data_ready_int));
	int err;

	if (data_ready)
		return 0;

	enable_irq(akm->irq);

	err = wait_for_completion_timeout(&akm->data_ready, 5*HZ);
	if (err > 0)
		return 0;

	akm8975_disable_irq(akm);

	if (err == 0) {
		pr_err("akm: wait timed out\n");
		akm8975_ecs_set_mode_power_down(akm); /* It will be restart next time */
		
		/* Wait at least 300us after changing mode. */
		udelay(300);
//		return -ETIMEDOUT;
	}

	pr_err("akm: wait restart\n");
	return err;
}
void holiday_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_HANDSET_ENO), 1);
		msleep(50);
		set_speaker_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_SPEAKER;
	} else {
		set_speaker_amp(0);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_HANDSET_ENO), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_SPEAKER;
	}
}