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