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; } }
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; } }
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; } }
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; }
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__); } }
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; }
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; }
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); } } }