static int headset_status_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { ucontrol->value.integer.value[0] = wcd9310_headsetJackStatusGet(); return 0; }
/*========================================================================== ** snd_extamp_api_SetDevice ** ** voice 0 multimedia ** 1 voice ** 2 tty **=========================================================================*/ void snd_extamp_api_SetDevice(int on, uint32_t cad_device) { int mode = 0; int new_mode = 0; UINT8 hp_flag = OFF, sp_flag = OFF; pantech_amp_log(0, "+++++ snd_extamp_api_SetDevice(%d, %d, %d)", on, mode, cad_device); #ifdef F_PANTECH_SND_EXTAMP_TEST_TOOL if (on) g_current_dev = cad_device; else g_current_dev = -1; #endif // ------------------------------------------------------------ /* #if defined(CONFIG_SKY_EF52S_BOARD) || defined(CONFIG_SKY_EF52K_BOARD) || defined(CONFIG_SKY_EF52L_BOARD) mode = MODE_MM; #else */ //for EF52 PATH if ( is_dual_path == 1 ) { mode = MODE_MM; pantech_amp_log(0, "MODE_MM"); } else if ( is_voice_call_mode == 1 ) { mode = MODE_VOICE; pantech_amp_log(0, "MODE_VOICE"); } else if ( is_vt_mode == 1 ) { mode = MODE_VT; pantech_amp_log(0, "MODE_VT"); } else { mode = MODE_MM; pantech_amp_log(0, "MODE_MM"); } //#endif //for EF52 PATH if (g_current_mode != mode) { new_mode = 1; g_current_mode = mode; } #ifdef CONFIG_SKY_SND_SPK_DEBUG_LOG // 20121217 jhsong : cannot hear in speaker, so debug msg log added pr_err("@#@#snd_extamp_api_SetDevice...............is_docking_mode (%d), cad_device : %d -> on : %d, mode : %d, new_mode : %d", is_docking_mode, cad_device, on, mode,new_mode); #endif #if defined(CONFIG_SKY_EF51S_BOARD) || defined(CONFIG_SKY_EF51K_BOARD) || defined(CONFIG_SKY_EF51L_BOARD) #if 0//def CONFIG_SKY_SND_DOCKING_CRADLE // Docking Gain Setting if ( is_docking_mode == 1 ) { if ( ( is_dual_path == 1 ) || ( wcd9310_headsetJackStatusGet() != 0 ) || ( cad_device == SND_DEVICE_HEADSET_RX ) ) { g_extamp_info[g_current_mode].bHpGainUp = HPAMP_GAIN_P_6_DB; } else { g_extamp_info[g_current_mode].bHpGainUp = g_extamp_info_org[g_current_mode].bHpGainUp; } new_mode = 1; amp_reset_mode = 1; } else #endif if ( ( is_dual_path == 1 ) && ( wcd9310_headsetJackStatusGet() != 0 ) ) { g_extamp_info[g_current_mode].bHpAtt = HPATT_GAIN_M_9_DB; new_mode = 1; amp_reset_mode = 1; } else { if ( amp_reset_mode == 1 ) { #if 0//def CONFIG_SKY_SND_DOCKING_CRADLE g_extamp_info[g_current_mode].bHpGainUp = g_extamp_info_org[g_current_mode].bHpGainUp; #endif g_extamp_info[g_current_mode].bHpAtt = g_extamp_info_org[g_current_mode].bHpAtt; new_mode = 1; amp_reset_mode = 0; } } #endif // ------------------------------------------------------------ switch(cad_device) { case SND_DEVICE_HANDSET_RX: { pantech_amp_log(0, "snd_extamp_api_SetDevice: SND_DEVICE_HANDSET_RX (%d)", on); hp_flag = ON; sp_flag = ON; g_extamp_info[g_current_mode].bHpCh = HP_CH_STEREO; g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_OFF; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_OFF; } break; case SND_DEVICE_HEADSET_RX: { pantech_amp_log(0, "snd_extamp_api_SetDevice: SND_DEVICE_HEADSET_RX (%d)", on); hp_flag = ON; g_extamp_info[g_current_mode].bHpCh = HP_CH_STEREO; if (on) { g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_ON; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_OFF; } else { g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_OFF; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_OFF; } } break; case SND_DEVICE_SPEAKER_RX: { pantech_amp_log(0, "snd_extamp_api_SetDevice: SND_DEVICE_SPEAKER_RX (%d)", on); sp_flag = ON; if (on) { g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_ON; } else { g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_OFF; } } break; case SND_DEVICE_TTY_HEADSET_MONO_RX: case SND_DEVICE_SPEAKER_HEADSET_RX: { pantech_amp_log(0, "snd_extamp_api_SetDevice: SND_DEVICE_SPEAKER_HEADSET_RX (%d)", on); hp_flag = ON; sp_flag = ON; g_extamp_info[g_current_mode].bHpCh = HP_CH_STEREO; if (on) { g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_ON; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_ON; } else { g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_OFF; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_OFF; } } break; case SND_DEVICE_DOCK_SPEAKER_RX: { pantech_amp_log(0, "snd_extamp_api_SetDevice: SND_DEVICE_DOCK_SPEAKER_RX (%d)", on); hp_flag = ON; sp_flag = ON; g_extamp_info[g_current_mode].bHpCh = HP_CH_STEREO; if (on) { g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_OFF; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_ON; g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_OFF; } else { g_extamp_info[g_current_mode].bHpMixer_Line1 = HP_MIX_OFF; g_extamp_info[g_current_mode].bHpMixer_Line2 = HP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line1 = SP_MIX_OFF; g_extamp_info[g_current_mode].bSpMixer_Line2 = SP_MIX_OFF; } } break; #if 0 // tty_test case SND_DEVICE_TTY_HEADSET_MONO_RX: { pantech_amp_log(0, "snd_extamp_api_SetDevice: SND_DEVICE_TTY_HEADSET_MONO_RX (%d)", on); hp_flag = ON; amp_reg_info.bHpCh = HP_CH_MONO; if (on) { amp_reg_info.bHpMixer_Line1 = HP_MIX_ON; amp_reg_info.bHpMixer_Line2 = HP_MIX_OFF; } else { amp_reg_info.bHpMixer_Line1 = HP_MIX_OFF; amp_reg_info.bHpMixer_Line2 = HP_MIX_OFF; } } break; #endif default: { pantech_amp_log(0, "snd_extamp_api_SetDevice: INVALID_DEVICE-%d (%d)", cad_device, on); } break; } // ------------------------------------------------------------ if (new_mode) { D4Hp3_PowerOn(&g_extamp_info[g_current_mode]); // set all reg values } else { D4Hp3_ControlMixer(hp_flag, sp_flag, &g_extamp_info[g_current_mode]); // set only mixer values } }