static void lid_report(struct work_struct *work) { struct delayed_work *delay_work; struct rk_lid_drvdata *lid_data; struct rk_lid_platform_data *rk_lid_pdata ; int value = 0; static int old_value = 1; int err; delay_work=container_of(work, struct delayed_work,work); lid_data = container_of(delay_work, struct rk_lid_drvdata, lid_delay_work); rk_lid_pdata = lid_data->rk_lid_pdata; if (lid_data->input == NULL){ printk("[%s]LID input device doesn't exist\n",__FUNCTION__); return; } wake_unlock(&lidaction_wake_lock); value = gpio_get_value(rk_lid_pdata->lid_gpio); if(old_value != value){ lidprintk("[lid_report][line %d]value = %d,old_value=%d\n", __LINE__,value,old_value); if(value == rk_lid_pdata->lid_close_value){ lidstate = lidstates[1]; lidprintk("lid: computer close *****************\n"); //input_report_switch(lid_data->input, KEY_LID, 0); if(get_suspend_state()==0){ lidprintk("lid: report poweron to sheep\n"); rk29_send_power_key(1); rk29_send_power_key(0); } } else { lidstate = lidstates[2]; lidprintk("lid: computer opened *****************\n"); //input_report_switch(lid_data->input, KEY_LID, 1); if(get_suspend_state()!=0){ lidprintk("lid: report poweron to wakeup\n"); rk29_send_power_key(1); rk29_send_power_key(0); } } input_sync(lid_data->input); free_irq(lid_data->irq,lid_data); lid_data->irq = gpio_to_irq(rk_lid_pdata->lid_gpio); err = request_irq(lid_data->irq, lid_interrupt_handler,value?IRQF_TRIGGER_LOW : IRQF_TRIGGER_HIGH, "rk_lid", lid_data); if(unlikely(err)){ printk("[LID-ERROR]%s,,request irq error,err=%d\n",__FUNCTION__,err); return ; } old_value = value; enable_irq_wake(lid_data->irq); } else{ lidprintk("[lid_report][line %d]value = %d,old_value=%d\n", __LINE__,value,old_value); old_value = value; enable_irq_wake(lid_data->irq); enable_irq(lid_data->irq); } }
static int _trout_fm_open(struct file *file) { int ret = -EINVAL; int status; TROUT_PRINT("start open fm module..."); if (atomic_read(&is_fm_open)) { TROUT_PRINT("trout_fm has been opened!"); return -1; } if (get_suspend_state() != PM_SUSPEND_ON) { TROUT_PRINT("The system is suspending!"); return -2; } /*ret = nonseekable_open(inode, filep); if (ret < 0) { TROUT_PRINT("open misc device failed."); return ret; }*/ Set_Trout_PowerOn(2/*FM_MODE*/); ret = trout_fm_init(); if(ret < 0) { TROUT_PRINT("trout_fm_init failed!"); return ret; } ret = trout_fm_get_status(&status); if(ret < 0) { TROUT_PRINT("trout_read_fm_en failed!"); return ret; } if(status) { TROUT_PRINT("trout fm have been opened."); } else { ret = trout_fm_en(); if(ret < 0) { TROUT_PRINT("trout_fm_en failed!"); return ret; } ret = trout_fm_iis_pin_cfg(); if(ret < 0) { TROUT_PRINT("trout_fm_iis_pin_cfg failed!"); return ret; } } /* set trout wifi goto sleep */ #ifdef TROUT_WIFI_POWER_SLEEP_ENABLE wifimac_sleep(); #endif atomic_cmpxchg(&is_fm_open, 0, 1); TROUT_PRINT("Open fm module success."); return 0; }
static void Q7x27_kybd_volkey2(struct work_struct *work) { struct Q7x27_kybd_record *kbdrec= container_of(work, struct Q7x27_kybd_record, kybd_volkey2); struct input_dev *idev = kbdrec->Q7x27_kybd_idev; bool debounceDelay = false; bool voldn_val = (bool)gpio_get_value(kbdrec->voldn_pin); //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++misty suspend_state_t SuspendState = PM_SUSPEND_ON;//0 //-----------------------------------------------------------------misty /* FIH, PeterKCTseng, @20090520 { */ /* The active type of input pin */ #if ACTIVE_MODE_ENABLE // Peter, Debug bool state; #endif /* } FIH, PeterKCTseng, @20090520 */ //fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"[Misty]VOL DN <%d>\n", voldn_val); //printk(KERN_INFO "VOL DN <%d>\n", voldn_val); disable_irq(MSM_GPIO_TO_INT(kbdrec->voldn_pin)); //+++++++++++++++++++++++++++++++FIH_F0X_misty if(EnableKeyInt) { SuspendState = get_suspend_state(); if(SuspendState == PM_SUSPEND_MEM) { if(idev) { input_report_key(idev, KEY_VOLUMEDOWN, KBD_IN_KEYPRESS); //printk(KERN_INFO "FIH: keypress KEY_VOLUMEDOWN\n"); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keypress KEY_VOLUMEDOWNP\n"); input_report_key(idev, KEY_VOLUMEDOWN, KBD_IN_KEYRELEASE); //printk(KERN_INFO "FIH: keyrelease KEY_VOLUMEDOWN\n"); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keyrelease KEY_VOLUMEDOWN\n"); input_sync(idev); } } //-------------------------------FIH_F0X_misty else { /* FIH, PeterKCTseng, @20090520 { */ /* The active type of input pin */ #if ACTIVE_MODE_ENABLE // Peter, Debug state = (kbdrec->active.voldn_pin_actype == ACTIVE_HIGH) ? voldn_val : !voldn_val; //printk(KERN_INFO "active type= %d \n", state); #endif /* } FIH, PeterKCTseng, @20090520 */ if(idev) { if (state) { input_report_key(idev, KEY_VOLUMEDOWN, KBD_IN_KEYPRESS); //printk(KERN_INFO "FIH: keypress KEY_VOLUMEDOWN\n"); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keypress KEY_VOLUMEDOWN\n"); // FIH, WillChen, 2009/08/14 ++ //Press VolumeUp+VolumeDown+End key to force panic and dump log #ifdef CONFIG_FIH_FXX_FORCEPANIC VDN_Key = true; if (VUP_Key && VDN_Key && END_key) { printk(KERN_ERR "KPD: Three key panic!!\n"); flag = 1; wake_up(&wq); msleep(5000); panic("Three key panic"); } #endif // FIH, WillChen, 2009/08/14 -- } else { input_report_key(idev, KEY_VOLUMEDOWN, KBD_IN_KEYRELEASE); //printk(KERN_INFO "FIH: keyrelease KEY_VOLUMEDOWN\n"); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keyrelease KEY_VOLUMEDOWN\n"); debounceDelay = true; // FIH, WillChen, 2009/08/14 ++ //Press VolumeUp+VolumeDown+End key to force panic and dump log #ifdef CONFIG_FIH_FXX_FORCEPANIC VDN_Key = false; #endif // FIH, WillChen, 2009/08/14 -- } input_sync(idev); //printk(KERN_INFO "FIH: keypress KEY_VOLUMEDOWN\n"); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keypress KEY_VOLUMEDOWN\n"); } if (debounceDelay) { mdelay(KBD_DEBOUNCE_TIME); //Debounce } } }//if(EnableKeyInt) enable_irq(MSM_GPIO_TO_INT(kbdrec->voldn_pin)); }
int LGE_ErrorHandler_Main( int crash_side, char * message) { ram_console_setpanic(); if (hidden_reset_enable) { if (crash_side == MODEM_CRASH) { unsigned *temp; printk(KERN_INFO"%s: arm9 has crashed...\n",__func__); printk(KERN_INFO"%s\n", message); atomic_notifier_call_chain(&panic_notifier_list, 0, "arm9 has crashed...\n"); temp = lge_get_fb_copy_virt_addr(); *temp = 0x12345678; printk(KERN_INFO"%s: hidden magic %x\n",__func__, temp[0]); return SMSM_SYSTEM_REBOOT; } return 0; } if(BLUE_ERROR_HANDLER_LEVEL != 0) { if (get_suspend_state() != PM_SUSPEND_ON) { lcd_suspend = 0; } switch(crash_side) { case MODEM_CRASH: case APPL_CRASH: case ANDROID_CRASH: if(!LG_ErrorHandler_enable) { LG_ErrorHandler_enable = 1; raw_local_irq_enable(); if (message != NULL) display_info_LCD(crash_side, message); } break; case ANDROID_DISPLAY_INFO : if (message != NULL) display_info_LCD(crash_side, message); return 0; default : break; } } raw_local_irq_disable(); preempt_disable(); smsm_reset_modem(SMSM_APPS_SHUTDOWN); if(BLUE_ERROR_HANDLER_LEVEL == 0) { mdelay(100); return SMSM_SYSTEM_REBOOT; } while(1) { gpio_set_value(36,0); gpio_set_value(32,1); gpio_set_value(33,1); if(gpio_get_value(38)==0) { printk("Pressed Volume up key\n"); return SMSM_SYSTEM_DOWNLOAD; } else if(gpio_get_value(37) ==0 ) { printk("Pressed Volume down key\n"); return SMSM_SYSTEM_REBOOT; } mdelay(200); ; } }
int Q7x27_kybd_hookswitch_irqsetup(bool activate_irq) { int rc = 0; bool hook_sw_val; suspend_state_t SuspendState = PM_SUSPEND_ON;//FIH, KarenLiao, @20090731: [F0X.FC-41]: The action of Inserting headset is the wake up action. //printk(KERN_INFO "Q7x27_kybd_hookswitch_irqsetup \n"); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Q7x27_kybd_hookswitch_irqsetup\n"); //+++ FIH, KarenLiao, @20090731: [F0X.FC-41]: The action of Inserting headset is the wake up action. SuspendState = get_suspend_state(); if(SuspendState == PM_SUSPEND_MEM)//3 { if(kpdev) { input_report_key(kpdev, KEY_RINGSWITCH, KBD_IN_KEYPRESS); //printk(KERN_INFO "FIH: keypress KEY_RINGSWITCH = %d\n", KEY_LEFTSHIFT); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keypress KEY_RINGSWITCH = %d\n",KEY_LEFTSHIFT); input_report_key(kpdev, KEY_RINGSWITCH, KBD_IN_KEYRELEASE); //printk(KERN_INFO "FIH: keyrelease KEY_RINGSWITCH = %d\n", KEY_LEFTSHIFT); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"FIH: keyrelease KEY_RINGSWITCH = %d\n",KEY_LEFTSHIFT); input_sync(kpdev); } } //--- FIH, KarenLiao, @20090731: [F0X.FC-41]: The action of Inserting headset is the wake up action. if (activate_irq && (gpio_get_value(rd->hook_sw_pin) == 1)) { /* FIH, PeterKCTseng, @20090603 { */ /* clear pending interrupt */ gpio_clear_detect_status(rd->hook_sw_pin); hook_sw_val = (bool)gpio_get_value(rd->hook_sw_pin); //printk(KERN_INFO "Read back hook switch eky <%d>\n", hook_sw_val); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Read back hook switch key <%d>\n", hook_sw_val); mdelay(250); /* } FIH, PeterKCTseng, @20090603 */ rc = request_irq(MSM_GPIO_TO_INT(rd->hook_sw_pin), &Q7x27_kybd_irqhandler, (IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING), Q7x27_kybd_name, rd); if (rc < 0) { //printk(KERN_ERR // "Could not register for %s interrupt " // "(rc = %d)\n", Q7x27_kybd_name, rc); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Could not register for %s interrupt(rc = %d) \n",Q7x27_kybd_name, rc); rc = -EIO; } fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Hook Switch IRQ Enable!\n"); //printk(KERN_INFO "Hook Switch IRQ Enable! \n"); rd->bHookSWIRQEnabled = true; } else { if (rd->bHookSWIRQEnabled) { //printk(KERN_INFO "Free IRQ\n"); free_irq(MSM_GPIO_TO_INT(rd->hook_sw_pin), rd); fih_printk(Q7x27_kybd_debug_mask, FIH_DEBUG_ZONE_G0,"Hook Switch IRQ disable\n"); //printk(KERN_INFO "Hook Switch IRQ disable! \n"); rd->bHookSWIRQEnabled = false; } } return rc; }