void runnymede_snddev_bt_sco_pamp_on(int en)
{
	static int bt_sco_refcount;
	pr_aud_info("%s %d\n", __func__, en);
	mutex_lock(&bt_sco_lock);
	if (en) {
		if (++bt_sco_refcount == 1)
			config_gpio_table(aux_pcm_gpio_on,
					ARRAY_SIZE(aux_pcm_gpio_on));
	} else {
		if (--bt_sco_refcount == 0) {
			config_gpio_table(aux_pcm_gpio_off,
					ARRAY_SIZE(aux_pcm_gpio_off));
			gpio_set_value(runnymede_GPIO_BT_PCM_OUT, 0);
			gpio_set_value(runnymede_GPIO_BT_PCM_SYNC, 0);
			gpio_set_value(runnymede_GPIO_BT_PCM_CLK, 0);
		}
	}
	mutex_unlock(&bt_sco_lock);
}
void rider_snddev_bmic_pamp_on(int en)
{
	int ret;

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

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

		/* select internal mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(RIDER_AUD_MIC_SEL), 0);

	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
		if (ret)
			pr_err("%s: Enabling int mic power failed\n", __func__);
	}
}
void doubleshot_snddev_hs_spk_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		msleep(50);
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_HP_EN), 1);
		set_speaker_headset_amp(1);
		if (!atomic_read(&aic3254_ctl)) {
			curr_rx_mode |= BIT_SPEAKER;
			curr_rx_mode |= BIT_HEADSET;
		}
	} else {
		set_speaker_headset_amp(0);
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl)) {
			curr_rx_mode &= ~BIT_SPEAKER;
			curr_rx_mode &= ~BIT_HEADSET;
		}
	}
}
void doubleshot_snddev_imic_pamp_on(int en)
{
	int ret;

	pr_aud_info("%s %d\n", __func__, en);
	
	doubleshot_snddev_bmic_pamp_on(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__);

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

	}
}
static int32_t aprv2_core_fn_q(struct apr_client_data *data, void *priv)
{
	struct adsp_get_version *payload;
	uint32_t *payload1;
	struct adsp_service_info *svc_info;
	int i;

	pr_aud_info("core msg: payload len = %d\n", data->payload_size);
	switch (data->opcode) {
	case APR_BASIC_RSP_RESULT:{
		payload1 = data->payload;
		if (payload1[0] == ADSP_CMD_SET_POWER_COLLAPSE_STATE) {
			pr_aud_info("Cmd[0x%x] status[0x%x]\n", payload1[0],
							payload1[1]);
			break;
		} else
			pr_aud_err("Invalid cmd rsp[0x%x][0x%x]\n", payload1[0],
								payload1[1]);
		break;
	}
	case ADSP_GET_VERSION_RSP:{
		if (data->payload_size) {
			payload = data->payload;
			svc_info = (struct adsp_service_info *)
			((char *)payload + sizeof(struct adsp_get_version));
			pr_aud_info("----------------------------------------\n");
			pr_aud_info("Build id          = %x\n", payload->build_id);
			pr_aud_info("Number of services= %x\n", payload->svc_cnt);
			pr_aud_info("----------------------------------------\n");
			for (i = 0; i < payload->svc_cnt; i++)
				pr_aud_info("%s\t%x.%x\n",
				svc_names[svc_info[i].svc_id],
				(svc_info[i].svc_ver & 0xFFFF0000) >> 16,
				(svc_info[i].svc_ver & 0xFFFF));
			pr_aud_info("-----------------------------------------\n");
		} else
			pr_aud_info("zero payload for ADSP_GET_VERSION_RSP\n");
		break;
	}
void holiday_snddev_hs_spk_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);
		msleep(50);
		set_speaker_headset_amp(1);
		if (!atomic_read(&aic3254_ctl)) {
			curr_rx_mode |= BIT_SPEAKER;
			curr_rx_mode |= BIT_HEADSET;
		}
	} else {
		set_speaker_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_SPEAKER;
			curr_rx_mode &= ~BIT_HEADSET;
		}
	}
}
void pyramid_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		msleep(50);
		gpio_request(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_HP_EN),
						"AUD_HP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_HP_EN), 1);
		set_speaker_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_SPEAKER;
	} else {
		set_speaker_amp(0);
		gpio_request(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_HP_EN),
						"AUD_HP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(PYRAMID_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_SPEAKER;
	}
}
void shooter_u_snddev_hsed_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		msleep(30);
		gpio_request(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN),
						"AUD_HP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN), 1);
		set_headset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_HEADSET;
	} else {
		set_headset_amp(0);
		gpio_request(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN),
						"AUD_HP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_HEADSET;
	}
}
Example #9
0
int msm_set_voice_mute(int dir, int mute)
{
	MM_AUD_INFO("dir %x mute %x\n", dir, mute);
#ifdef CONFIG_2WCR
        if (!audio_dev_ctrl.voice_rx_dev
                || !audio_dev_ctrl.voice_tx_dev)
                return -EPERM;
#endif
	if (dir == DIR_TX) {
		routing_info.tx_mute = mute;
		broadcast_event(AUDDEV_EVT_DEVICE_VOL_MUTE_CHG,
			routing_info.voice_tx_dev_id, SESSION_IGNORE);
	} else{
		routing_info.rx_mute = mute;
		pr_aud_info("%s, rx_mute=%d\n", __func__, routing_info.rx_mute);
		broadcast_event(AUDDEV_EVT_DEVICE_VOL_MUTE_CHG,
			routing_info.voice_rx_dev_id, SESSION_IGNORE);
	}
	return 0;
}
void rider_snddev_hsed_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		/* enable rx route */
		msleep(30);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(RIDER_AUD_HANDSET_ENO), 1);
		set_headset_amp(1);

		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_HEADSET;
		msleep(5);
	} else {
		/* disable rx route */
		set_headset_amp(0);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(RIDER_AUD_HANDSET_ENO), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_HEADSET;
	}
}
void runnymede_snddev_poweramp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		mdelay(30);
		gpio_request(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_SPK_SD),
						"AMP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_SPK_SD), 1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_SPEAKER;
	} else {
		/* Reset AIC3254 */
		gpio_request(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_SPK_SD),
						"AMP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_SPK_SD), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_SPEAKER;
	}
}
void verdi_lte_snddev_stereo_mic_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_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 int mic power failed\n", \
				__func__);

		/* select internal mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS( \
			VERDI_LTE_AUD_STEREO_REC), 1);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(VERDI_LTE_AUD_MIC_SEL), 0);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS( \
			VERDI_LTE_AUD_STEREO_REC), 0);

		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 int mic power failed\n", \
				__func__);

		verdi_lte_audio_2v85_enable(en);
	}
}
void shooter_u_snddev_receiver_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		/* enable rx route */
		gpio_request(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN),
						"AUD_HP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN), 1);
		set_handset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_RECEIVER;
	} else {
		/* disable rx route */
		set_handset_amp(0);
		gpio_request(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN),
						"AUD_HP_EN");
		gpio_direction_output(PM8058_GPIO_PM_TO_SYS(SHOOTER_U_AUD_HP_EN), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_RECEIVER;
	}
}
Example #14
0
void spade_snddev_poweramp_on(int en)
{
	static int first_time = 1;
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		if (first_time) {
			msleep(70);
			first_time = 0;
		} else
			msleep(30);

		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_SPK_ENO), 1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_SPEAKER;
		mdelay(5);
	} else {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(SPADE_AUD_SPK_ENO), 0);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_SPEAKER;
	}
}
void pyramid_snddev_bmic_pamp_on(int en)
{
	int ret;

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

	if (en) {
		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_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), 0);
	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Enabling back mic power failed\n", __func__);
	}
}
void runnymede_snddev_receiver_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);

	if (en) {
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_AMP_EN), 1);
		gpio_request(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_AMP_EN),
						"HP_AMP_EN");
		mdelay(20);
		set_handset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_RECEIVER;
	} else {
		set_handset_amp(0);
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_AMP_EN), 0);
		gpio_request(PM8058_GPIO_PM_TO_SYS(runnymede_AUD_AMP_EN),
						"HP_AMP_EN");
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_RECEIVER;
	}
}
void mecha_snddev_receiver_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		mdelay(20);
		/*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);
		set_handset_amp(1);
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_RECEIVER;
		mdelay(60);
	} else {
		set_handset_amp(0);
		/*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_RECEIVER;
	}
}
void doubleshot_snddev_receiver_pamp_on(int en)
{
	pr_aud_info("%s %d\n", __func__, en);
	if (en) {
		/* enable rx route */
		if (system_rev == XA_DEV) {
			set_handset_amp(1);
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_HANDSET_ENO), 1);
		}
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode |= BIT_RECEIVER;
	} else {
		/* disable rx route */
		if (system_rev == XA_DEV) {
			set_handset_amp(0);
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(DOUBLESHOT_AUD_HANDSET_ENO), 0);
		}
		if (!atomic_read(&aic3254_ctl))
			curr_rx_mode &= ~BIT_RECEIVER;
	}
}
Example #19
0
static void audio_work_func(struct work_struct *work)
{
	int en = atomic_read(&beats_enabled);
	int gain;

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

	if (en) {
		for (gain = 0x10; gain >= 0x4; gain -= 0x4) {
			adie_codec_set_device_analog_volume(NULL, 2, gain);
			if (gain > 0x4)
				mdelay(50);
		}
	} else {
		for (gain = 0x08; gain <= 0x14; gain += 0x4) {
			adie_codec_set_device_analog_volume(NULL, 2, gain);
			if (gain < 0x14)
				mdelay(30);
		}
	}
}
static unsigned int runnymede_audio_2v85_enable(int en)
{
	int rc = 0;

	mutex_lock(&audio_2v85_usage_lock);
	if (en) {
		if (audio_2v85_usage_counter == 0)
			rc = runnymede_audio_2v85_power_on(1);
		audio_2v85_usage_counter++;
	} else {
		if (audio_2v85_usage_counter > 0) {
			audio_2v85_usage_counter--;
			if (audio_2v85_usage_counter == 0)
				rc = runnymede_audio_2v85_power_on(0);
		} else
			pr_aud_info("%s: counter error!\n", __func__);
	}
	mutex_unlock(&audio_2v85_usage_lock);

	return rc;
}
int update_aic3254_info(struct aic3254_info *info)
{
	struct msm_snddev_info *dev_info;
	int rc = 0;

	dev_info = audio_dev_ctrl_find_dev(info->dev_id);
	if (IS_ERR(dev_info))
		rc = -ENODEV;
	else {
		if ((dev_info->copp_id == PRIMARY_I2S_RX) ||
			(dev_info->copp_id == PRIMARY_I2S_TX)) {
			struct snddev_icodec_state *icodec;
			icodec = dev_info->private_data;
			icodec->data->aic3254_id = info->path_id;
			pr_aud_info("%s: update aic3254 id of device %s as %d\n",
				__func__, dev_info->name, icodec->data->aic3254_id);
		}
	}

	return rc;
}
static int snddev_icodec_close(struct msm_snddev_info *dev_info)
{
	int rc = 0;
	struct snddev_icodec_state *icodec;
	struct snddev_icodec_drv_state *drv = &snddev_icodec_drv;
	if (!dev_info) {
		rc = -EINVAL;
		goto error;
	}

	icodec = dev_info->private_data;
	pr_aud_info("snddev_icodec_close: device %s\n", dev_info->name);

	if (icodec->data->capability & SNDDEV_CAP_RX) {
		mutex_lock(&drv->rx_lock);
		if (!drv->rx_active) {
			mutex_unlock(&drv->rx_lock);
			rc = -EPERM;
			goto error;
		}
		rc = snddev_icodec_close_rx(icodec);
		if (!IS_ERR_VALUE(rc))
			drv->rx_active = 0;
		mutex_unlock(&drv->rx_lock);
	} else {
		mutex_lock(&drv->tx_lock);
		if (!drv->tx_active) {
			mutex_unlock(&drv->tx_lock);
			rc = -EPERM;
			goto error;
		}
		rc = snddev_icodec_close_tx(icodec);
		if (!IS_ERR_VALUE(rc))
			drv->tx_active = 0;
		mutex_unlock(&drv->tx_lock);
	}

error:
	return rc;
}
Example #23
0
int msm_adsp_get(const char *name, struct msm_adsp_module **out,
		 struct msm_adsp_ops *ops, void *driver_data)
{
	struct msm_adsp_module *module;
	int rc = 0;

	module = find_adsp_module_by_name(&adsp_info, name);
	if (!module)
		return -ENODEV;

	mutex_lock(&module->lock);
	MM_DBG("opening module %s\n", module->name);

	if (module->ops) {
		rc = -EBUSY;
		mutex_unlock(&module->lock);
		goto done;
	}

	module->ops = ops;
	module->driver_data = driver_data;
	*out = module;
	mutex_unlock(&module->lock);
	rc = rpc_adsp_rtos_app_to_modem(RPC_ADSP_RTOS_CMD_REGISTER_APP,
					module->id, module);
	if (rc) {
		mutex_lock(&module->lock);
		module->ops = NULL;
		module->driver_data = NULL;
		*out = NULL;
		pr_aud_err("REGISTER_APP failed\n");
		mutex_unlock(&module->lock);
		goto done;
	}

	pr_aud_info("module %s has been registered\n", module->name);

done:
	return rc;
}
static int snddev_icodec_set_freq(struct msm_snddev_info *dev_info, u32 rate)
{
	int rc;
	struct snddev_icodec_state *icodec;

	pr_aud_info("%s +++, rate: %d", __func__, rate);
	if (!dev_info) {
		rc = -EINVAL;
		goto error;
	}

	icodec = dev_info->private_data;

	if (support_adie) {
		if (adie_codec_freq_supported(icodec->data->profile, rate) != 0) {
			rc = -EINVAL;
			pr_aud_info("%s fail_1", __func__);
			goto error;
		} else {
			if (snddev_icodec_check_freq(rate) != 0) {
				rc = -EINVAL;
				pr_aud_info("%s fail_2", __func__);
				goto error;
			} else
				icodec->sample_rate = rate;
		}
	} else {
		if (snddev_icodec_check_freq(rate) != 0) {
			rc = -EINVAL;
			pr_aud_info("%s fail_3", __func__);
			goto error;
		} else
			icodec->sample_rate = rate;
	}

	if (icodec->enabled) {
		snddev_icodec_close(dev_info);
		snddev_icodec_open(dev_info);
	}

	pr_aud_info("%s ---, sample_rate: %d", __func__, icodec->sample_rate);
	return icodec->sample_rate;

error:
	pr_aud_info("%s err, rc: %d", __func__, rc);
	return rc;
}
void holiday_snddev_bmic_pamp_on(int en)
{
	int ret;

	pr_aud_info("%s (support_audience, en)=(%d, %d)\n",
		__func__, support_audience, en);
	if (en) {
		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 && !force_a1026_on)
			gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 1);
	} else {
		ret = pm8058_micbias_enable(OTHC_MICBIAS_1, OTHC_SIGNAL_OFF);
		if (ret)
			pr_aud_err("%s: Enabling back mic power failed\n", __func__);

	}
}
Example #26
0
static int __init marimba_codec_init(void)
{
	s32 rc;

	pr_aud_info("%s\n", __func__);
	rc = platform_driver_register(&marimba_codec_driver);
	if (IS_ERR_VALUE(rc))
		goto error;

	adie_codec.path[ADIE_CODEC_TX].img.regs = adie_codec_tx_regs;
	adie_codec.path[ADIE_CODEC_TX].img.img_sz =
	ARRAY_SIZE(adie_codec_tx_regs);
	adie_codec.path[ADIE_CODEC_RX].img.regs = adie_codec_rx_regs;
	adie_codec.path[ADIE_CODEC_RX].img.img_sz =
	ARRAY_SIZE(adie_codec_rx_regs);
	adie_codec.path[ADIE_CODEC_LB].img.regs = adie_codec_lb_regs;
	adie_codec.path[ADIE_CODEC_LB].img.img_sz =
	ARRAY_SIZE(adie_codec_lb_regs);
	mutex_init(&adie_codec.lock);
error:
	return rc;
}
Example #27
0
static int fm_audio_enable(struct audio *audio)
{
	if (audio->enabled)
		return 0;

	pr_aud_info("%s: fm dest= %08x fm_source = %08x\n", __func__,
			audio->fm_dst_copp_id, audio->fm_src_copp_id);

	/* do afe loopback here */

	if (audio->fm_dest && audio->fm_source) {
		if (afe_loopback(FM_ENABLE, audio->fm_dst_copp_id,
					audio->fm_src_copp_id) < 0) {
			pr_aud_err("%s: afe_loopback failed\n", __func__);
		}

		audio->running = 1;
	}

	audio->enabled = 1;
	return 0;
}
Example #28
0
void primou_hs_n1v8_enable(int en)
{
	int rc = 0;

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

	if (!vreg_audio_n1v8) {

		vreg_audio_n1v8 = vreg_get(NULL, "ncp");

		if (IS_ERR(vreg_audio_n1v8)) {
			printk(KERN_ERR "%s: vreg_get() failed (%ld)\n",
				__func__, PTR_ERR(vreg_audio_n1v8));
			rc = PTR_ERR(vreg_audio_n1v8);
			goto  vreg_aud_hp_1v8_faill;
		}
	}

	if (en) {
		rc = vreg_enable(vreg_audio_n1v8);
		if (rc) {
			printk(KERN_ERR "%s: vreg_enable() = %d \n",
					__func__, rc);
			goto vreg_aud_hp_1v8_faill;
		}
	} else {
		rc = vreg_disable(vreg_audio_n1v8);
		if (rc) {
			printk(KERN_ERR "%s: vreg_disable() = %d \n",
					__func__, rc);
			goto vreg_aud_hp_1v8_faill;
		}
	}
	return;
vreg_aud_hp_1v8_faill:
	printk(KERN_ERR "%s: failed (%ld)\n",
		__func__, PTR_ERR(vreg_audio_n1v8));
}
void shooter_u_mic_bias_on(int en)
{
#if 0
	int rc;
	pr_aud_info("%s\n", __func__);

	if (en) {
		snddev_reg_l11 = regulator_get(NULL, "8058_l11");
		if (IS_ERR(snddev_reg_l11)) {
			pr_aud_err("%s: regulator_get(%s) failed (%ld)\n",
				__func__, "8058_l11", PTR_ERR(snddev_reg_l11));
			return;
		}

		rc = regulator_set_voltage(snddev_reg_l11, 2850000, 2850000);
		if (rc < 0)
			pr_aud_err("%s: regulator_set_voltage(8058_l11) failed (%d)\n",
				__func__, rc);

		rc = regulator_enable(snddev_reg_l11);
		if (rc < 0)
			pr_aud_err("%s: regulator_enable(8058_l11) failed (%d)\n",
				__func__, rc);
	} else {

		if (!snddev_reg_l11)
			return;

		rc = regulator_disable(snddev_reg_l11);
		if (rc < 0)
			pr_aud_err("%s: regulator_disable(8058_l11) failed (%d)\n",
					__func__, rc);
		regulator_put(snddev_reg_l11);

		snddev_reg_l11 = NULL;
	}
#endif
}
void holiday_snddev_emic_pamp_on(int en)
{
	int call_state = 0;

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

	call_state = msm_get_call_state();
	/*
	external micbias should be controlled by headset driver with HOLIDAY_mic_enable
	turn on with headset plugged in and turn off when headset unplugged.
	*/
	if (en) {
		/* select internal mic path */
		gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL1), 1);
		if (support_audience) {
			if (call_state)
				gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 0);
			else
				gpio_set_value(PM8058_GPIO_PM_TO_SYS(HOLIDAY_AUD_MIC_SEL2), 1);
		}
	}
}