Ejemplo n.º 1
0
void kc_hs_jack_change_state(bool jack_state)
{

	int result = 0;
	uint mic_flag = 0;


	HS_DBG_PRINT("%s: g_jack_state:%d, jack_state:%d\n", __func__, g_jack_state, jack_state);
	if (g_init_flag) {
		if (g_jack_state != jack_state) {
			hs->mic_on = hs->hs_on = (jack_state ? 1 : 0);
			if (jack_state) {

				msleep(HEADSET_GET_WAIT);
				result = pmic_kc_mic_is_en(&mic_flag);	
				HS_DBG_PRINT("%s: result:%d, mic_flag:%d\n", __func__, result, mic_flag);
				if (0 == result) {
					hs->mic_on = (mic_flag ? 1 : 0);
				}

			} else {
				if (g_switch_state) {
					kc_hs_switch_change_state(false);
				}
			}
			HS_DBG_PRINT("### %s: hs->mic_on:%d, hs->hs_on:%d\n", __func__, hs->mic_on, hs->hs_on);
			update_state();
			g_jack_state = jack_state;
		}
	} else {
		HS_DBG_PRINT("%s: no init\n", __func__);
	}
}
static void chgic_interrupt_mic_sw(u8 interrupt_case)
{
    if (earphone_flg)
    {
        if ((interrupt_case & CHGIC_DATA_04H_SW) != CHGIC_DATA_04H_SW)
        {
            if ((interrupt_case & CHGIC_DATA_04H_SW_ON) != 0)
            {
                key_dm_driver_set_port(0x11);
                kc_hs_switch_change_state(true);
            }
            else if ((interrupt_case & CHGIC_DATA_04H_SW_OFF) != 0)
            {
                key_dm_driver_set_port(0x10);
                kc_hs_switch_change_state(false);
            }
        }
    }
    else
    {
        bk_interrupt_mask = CHGIC_DATA_06H_STANDBY;
    }
}