static void twl6040_hs_hook_detect_work(struct work_struct *work) { struct twl6040_data *priv; struct snd_soc_codec *codec; struct twl6040_jack_data *jack; struct input_dev *ip_dev; priv = container_of(work, struct twl6040_data, hook_work.work); codec = priv->codec; jack = &priv->hs_jack; ip_dev = jack->headset_input; if (jack->jack) { if(jack->longkey_cnt == 0){ input_report_key(ip_dev, KEY_HOOK, 1); input_sync(ip_dev); } if(is_without_mic()){ if(jack->longkey_cnt < 6000){//10 min. schedule_delayed_work(&priv->hook_work, msecs_to_jiffies(100)); jack->longkey_cnt++; } else{//long key event input_report_key(ip_dev, KEY_HOOK, 0); input_sync(ip_dev); jack->longkey_cnt = 0; if(get_test_mode() == 1) { write_gkpd_value(KEY_HOOK); } } } else{//short key event input_report_key(ip_dev, KEY_HOOK, 0); input_sync(ip_dev); jack->longkey_cnt = 0; if(get_test_mode() == 1) { write_gkpd_value(KEY_HOOK); } } } }
static void hook_det_work(struct work_struct *work) { //printk("[JIWON] hook_det_work start\n"); #if 0/* 20110121 : no hook event skip */ if(headset_sw_data->is_suspend == 1 && get_twl4030_status() == 0) { printk("[LUCKYJUN77] suspend status \n"); return; } #endif if(headset_type == HUB_HEADPHONE) //detect type error case { //printk("[JIWON] hook_det_work : headphone -> headset\n"); // schedule_delayed_work(&headset_sw_data->delayed_work, msecs_to_jiffies(type_detection_tim*3)); headset_type = HUB_HEADSET; switch_set_state(&headset_sw_data->sdev, headset_type); } if(headset_type != HUB_HEADSET) return; if(hook_status == HOOK_RELEASED){ //printk("[JIWON] threshold area for hook key glitch1\n"); if(gpio_get_value(headset_sw_data->hook_gpio) == 0){ //threshold area for hook key glitch //printk("[JIWON] threshold area for hook key glitch2\n"); hook_status = HOOK_PRESSED; // input_report_key(headset_sw_data->ip_dev, KEY_HOOK, 1); schedule_delayed_work(&headset_sw_data->hook_delayed_work, msecs_to_jiffies(10 /*type_detection_tim/8*/)); /* 20110215 for EarJack & Hook Action */ } } else{ if(gpio_get_value(headset_sw_data->hook_gpio) == 0){ printk("[JIWON] HOOK_PRESSED\n"); input_report_key(headset_sw_data->ip_dev, KEY_HOOK, 1); input_sync(headset_sw_data->ip_dev); schedule_delayed_work(&headset_sw_data->hook_delayed_work, msecs_to_jiffies(hook_detection_tim)); /* 20110215 for EarJack & Hook Action */ } else { input_report_key(headset_sw_data->ip_dev, KEY_HOOK, 0); input_sync(headset_sw_data->ip_dev); printk("[JIWON] HOOK_RELEASED\n"); hook_status = HOOK_RELEASED; // 20100831 for TEST MODE [START_LGE] #if 0 //rajesh if(get_test_mode()) { write_gkpd_value(KEY_HOOK); } #endif // 20100831 for TEST MODE [END_LGE] } } }
static void hook_det_work(struct work_struct *work) { //DBG("[JIWON] hook_det_work start\n"); #if 0/* [email protected] 20110121 : no hook event skip */ if(headset_sw_data->is_suspend == 1 && get_twl4030_status() == 0) { DBG("[LUCKYJUN77] suspend status \n"); return; } #endif if(headset_type == HUB_HEADPHONE) //detect type error case { DBG("[JIWON] hook_det_work : headphone -> headset\n"); // schedule_delayed_work(&headset_sw_data->delayed_work, msecs_to_jiffies(type_detection_tim*3)); headset_type = HUB_HEADSET; switch_set_state(&headset_sw_data->sdev, headset_type); } if(headset_type != HUB_HEADSET) return; if(hook_status == HOOK_RELEASED){ if(gpio_get_value(headset_sw_data->hook_gpio) == 0){ //threshold area for hook key glitch //DBG("[JIWON] threshold area for hook key glitch2\n"); hook_status = HOOK_PRESSED; // input_report_key(headset_sw_data->ip_dev, KEY_HOOK, 1); #if defined(CONFIG_PRODUCT_LGE_LU6800) || defined(CONFIG_PRODUCT_LGE_KU5900)||defined(CONFIG_PRODUCT_LGE_P970) //20110404 [email protected] B HW Request.roll back the delay time. schedule_delayed_work(&headset_sw_data->hook_delayed_work, msecs_to_jiffies(10 /*type_detection_tim/8*/)); //20110401 [email protected] Not B-prj case #elif defined(CONFIG_PRODUCT_LGE_HUB) schedule_delayed_work(&headset_sw_data->hook_delayed_work, msecs_to_jiffies(type_detection_tim/8)); #endif } } else{ if(gpio_get_value(headset_sw_data->hook_gpio) == 0){ DBG("[JIWON] HOOK_PRESSED\n"); input_report_key(headset_sw_data->ip_dev, KEY_HOOK, 1); input_sync(headset_sw_data->ip_dev); #if defined(CONFIG_PRODUCT_LGE_LU6800) || defined(CONFIG_PRODUCT_LGE_KU5900)||defined(CONFIG_PRODUCT_LGE_P970) schedule_delayed_work(&headset_sw_data->hook_delayed_work, msecs_to_jiffies(hook_detection_tim)); /* 20110215 [email protected] for EarJack & Hook Action */ #elif defined(CONFIG_PRODUCT_LGE_HUB) schedule_delayed_work(&headset_sw_data->hook_delayed_work, msecs_to_jiffies(type_detection_tim)); #endif } else { input_report_key(headset_sw_data->ip_dev, KEY_HOOK, 0); input_sync(headset_sw_data->ip_dev); DBG("[JIWON] HOOK_RELEASED\n"); hook_status = HOOK_RELEASED; // 20100831 [email protected] for TEST MODE [START_LGE] if(get_test_mode()) { write_gkpd_value(KEY_HOOK); } // 20100831 [email protected] for TEST MODE [END_LGE] } } }