/* * Respond to timing out waiting for Modem * * NOTE: The function never returns. */ static void msm_pm_timeout(void) { #if defined(CONFIG_MSM_PM_TIMEOUT_RESET_CHIP) printk(KERN_EMERG "%s(): resetting chip\n", __func__); msm_proc_comm(PCOM_RESET_CHIP_IMM, NULL, NULL); #elif defined(CONFIG_MSM_PM_TIMEOUT_RESET_MODEM) printk(KERN_EMERG "%s(): resetting modem\n", __func__); msm_proc_comm_reset_modem_now(); #elif defined(CONFIG_MSM_PM_TIMEOUT_HALT) printk(KERN_EMERG "%s(): halting\n", __func__); #endif for (;;) ; }
static int lockup_capture_check(int keycode, u8 keypress) { #define NUM_CAPTURE_KEYS 3 #if defined (CONFIG_MACH_ESCAPE) //sdk_ed12 'F' + 'Vol_Down' + 'Pwr' static int capture_keys[NUM_CAPTURE_KEYS]={33, 114, 116}; #elif defined(CONFIG_MACH_GIO) static int capture_keys[NUM_CAPTURE_KEYS]={102, 115, 116}; //cha Home + Volume down + Pwr Key #elif defined(CONFIG_MACH_VINO) || defined(CONFIG_MACH_GIOS) static int capture_keys[]={KEY_VOLUMEUP, KEY_CAMERA, KEY_POWER}; #elif defined(CONFIG_MACH_RANT3) static int capture_keys[]={KEY_VOLUMEDOWN, KEY_P, KEY_POWER}; #else static int capture_keys[NUM_CAPTURE_KEYS]={158, 115, 116}; //cha back + volme up + pwr key // MBjgnoh 11.02.14 Volume down + back + Pwr Key #endif int i, capture_keys_size = 0; int capture_key_cnt = 0; capture_keys_size = ARRAY_SIZE(capture_keys); for(i=0;i<capture_keys_size;i++) { if(keycode == (capture_keys[i]&~0x80000000)) { if(keypress) capture_keys[i]|=0x80000000; else capture_keys[i]&=~0x80000000; } if(capture_keys[i]&0x80000000) capture_key_cnt++; } #ifndef TARGET_BUILD_USER printk("[lockup_capture_check] capture_key_cnt:%d, capture_keys_size:%d \n", capture_key_cnt, capture_keys_size); #endif if(capture_key_cnt == capture_keys_size) { // notify to ARM9 for ram dump writel(0xCCCC, MSM_SHARED_RAM_BASE + 0x30); printk("[PANIC] LOCKUP CAPTURED!!! \n"); msm_proc_comm_reset_modem_now(); } }
static ssize_t reset_modem_write(struct file *fp, const char __user *buf, size_t count, loff_t *pos) { unsigned char cmd[64]; int len; int time; int zero = 0; int r; if (count < 1) return 0; len = count > 63 ? 63 : count; if (copy_from_user(cmd, buf, len)) return -EFAULT; cmd[len] = 0; if (cmd[len-1] == '\n') { cmd[len-1] = 0; len--; } if (!strncmp(cmd, "wait", 4)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: WAIT\n", __FILE__, __LINE__, __func__); smsm_reset_modem(SMSM_MODEM_WAIT); } else if (!strncmp(cmd, "continue", 8)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: CONTINUE\n", __FILE__, __LINE__, __func__); smsm_reset_modem_cont(); } else if (!strncmp(cmd, "download", 8)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: DOWNLOAD\n", __FILE__, __LINE__, __func__); smsm_reset_modem(SMSM_SYSTEM_DOWNLOAD); } else if (sscanf(cmd, "deferred reset %i", &time) == 1) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: DEFERRED RESET %ims\n", __FILE__, __LINE__, __func__, time); if (time == 0) { r = 0; msm_proc_comm_reset_modem_now(); } else { r = msm_proc_comm(PCOM_RESET_MODEM, &time, &zero); } if (r < 0) return r; } else if (!strncmp(cmd, "deferred reset", 14)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: DEFERRED RESET 0ms\n", __FILE__, __LINE__, __func__); r = 0; msm_proc_comm_reset_modem_now(); if (r < 0) return r; } else if (!strncmp(cmd, "reset chip now", 14)) { uint param1 = 0x0; uint param2 = 0x0; D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: CHIP RESET IMMEDIATE\n", __FILE__, __LINE__, __func__); r = msm_proc_comm(PCOM_RESET_CHIP_IMM, ¶m1, ¶m2); if (r < 0) return r; } else if (!strncmp(cmd, "reset chip", 10)) { uint param1 = 0x0; uint param2 = 0x0; D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: CHIP RESET \n", __FILE__, __LINE__, __func__); r = msm_proc_comm(PCOM_RESET_CHIP, ¶m1, ¶m2); if (r < 0) return r; } else if (!strncmp(cmd, "reset", 5)) { printk(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: RESET\n", __FILE__, __LINE__, __func__); smsm_reset_modem(SMSM_RESET); } else return -EINVAL; return count; }
static ssize_t reset_modem_write(struct file *fp, const char __user *buf, size_t count, loff_t *pos) { unsigned char cmd[64]; int len; int time; int zero = 0; int r; if (count < 1) return 0; len = count > 63 ? 63 : count; if (copy_from_user(cmd, buf, len)) return -EFAULT; cmd[len] = 0; /* lazy */ if (cmd[len-1] == '\n') { cmd[len-1] = 0; len--; } if (!strncmp(cmd, "wait", 4)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: WAIT\n", __FILE__, __LINE__, __func__); smsm_reset_modem(SMSM_MODEM_WAIT); } else if (!strncmp(cmd, "continue", 8)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: CONTINUE\n", __FILE__, __LINE__, __func__); smsm_reset_modem_cont(); } else if (!strncmp(cmd, "download", 8)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: DOWNLOAD\n", __FILE__, __LINE__, __func__); smsm_reset_modem(SMSM_SYSTEM_DOWNLOAD); } else if (sscanf(cmd, "deferred reset %i", &time) == 1) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: DEFERRED RESET %ims\n", __FILE__, __LINE__, __func__, time); if (time == 0) { r = 0; msm_proc_comm_reset_modem_now(); } else { r = msm_proc_comm(PCOM_RESET_MODEM, &time, &zero); } if (r < 0) return r; } else if (!strncmp(cmd, "deferred reset", 14)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: DEFERRED RESET 0ms\n", __FILE__, __LINE__, __func__); r = 0; msm_proc_comm_reset_modem_now(); if (r < 0) return r; } else if (!strncmp(cmd, "reset chip now", 14)) { #ifndef CONFIG_SW_RESET uint param1 = 0x0; uint param2 = 0x0; #endif D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: CHIP RESET IMMEDIATE\n", __FILE__, __LINE__, __func__); #if defined(CONFIG_SW_RESET) r = sky_sys_rst_UserReset_imm(NULL); #else r = msm_proc_comm(PCOM_RESET_CHIP_IMM, ¶m1, ¶m2); #endif if (r < 0) return r; } else if (!strncmp(cmd, "reset chip", 10)) { #ifndef CONFIG_SW_RESET uint param1 = 0x0; uint param2 = 0x0; #endif D(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: CHIP RESET \n", __FILE__, __LINE__, __func__); #if defined(CONFIG_SW_RESET) r = sky_sys_rst_UserReset(NULL); #else r = msm_proc_comm(PCOM_RESET_CHIP, ¶m1, ¶m2); #endif if (r < 0) return r; #if defined(CONFIG_SW_RESET) } else if (!strncmp(cmd, "reset sw now", 12)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM SW RESTART: CHIP RESET IMMEDIATE\n", __FILE__, __LINE__, __func__); r = sky_sys_rst_SwReset_imm(NULL); if (r < 0) { D(KERN_ERR "ERROR: sky_sys_rst_SwReset_imm failed: %d\n", r); return r; } } else if (!strncmp(cmd, "reset sw exception", 8)) { D(KERN_ERR "INFO:%s:%i:%s: " "MODEM SW RESTART: CHIP EXCEPTION \n", __FILE__, __LINE__, __func__); BUG(); return 0; #endif } else if (!strncmp(cmd, "reset", 5)) { printk(KERN_ERR "INFO:%s:%i:%s: " "MODEM RESTART: RESET\n", __FILE__, __LINE__, __func__); smsm_reset_modem(SMSM_RESET); } #ifdef FEATURE_SKY_CHG_LOGO else if(!strncmp(cmd,"powerdown",9)) { printk(KERN_ERR "INFO:%s:%i:%s: " "MODEM POWER DOWN: OFF\n", __FILE__, __LINE__, __func__); r = msm_proc_comm(PCOM_POWER_DOWN, 0,0); if (r < 0) return r; for(;;) ; } #endif else return -EINVAL; return count; }