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
	}
}