ssize_t modem_reset_set(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int state; char* endp; if (!bsp_reset_is_connect_ril()) { pr_err("<modem_reset_set>: modem reset not to be connected to ril\n"); return count; } dev_info(dev, "Power set to %s\n", buf); state = simple_strtol(buf, &endp, 10); /*10 means read as dec*/ pr_err("endp = 0x%x\n", *(int*)endp); pr_err("count = %lu\n", (unsigned long)count); if (*buf == '\0' || *buf == *endp)/* return 0 means match failed */ { return count; } if (state == BALONG_MODEM_RESET) { bsp_modem_reset(); pr_err("modem reset %d\n", BALONG_MODEM_RESET); return count; } else if(state == BALONG_MODEM_OFF) { /*To make modem poweroff called only once when there are two rilds.*/ if(modem_power_off_flag) { pr_err("Balong_power: modem power off has been called! \n"); return count; } bsp_modem_power_off(); pr_err("modem power off %d\n", BALONG_MODEM_OFF); modem_power_off_flag = 1; return count; } else if(state == BALONG_MODEM_ON) /* TODO: 是否需要上电,根HIFI什么关系 */ { bsp_modem_power_on(); pr_err("modem power on %d\n", BALONG_MODEM_ON); } else if(state == BALONG_MODEM_RILD_SYS_ERR) { hisi_system_error(HISI_RDR_MOD_CP_RILD, 0, 0, NULL, 0); pr_err("modem reset using hisi_system_error by rild %d\n", BALONG_MODEM_RILD_SYS_ERR); } else if(state == BALONG_MODEM_3RD_SYS_ERR) { hisi_system_error(HISI_RDR_MOD_CP_3RD, 0, 0, NULL, 0); pr_err("modem reset using hisi_system_error by 3rd modem %d\n", HISI_RDR_MOD_CP_3RD); } else { pr_err("Balong_power : invalid code to balong power !!!!\n"); return count; } return count; }
void reset_reboot_system(enum RESET_TYPE type) { bsp_reset_bootflag_set(CCORE_BOOT_NORMAL); g_modem_reset_ctrl.modem_action = MODEM_NORMAL; hisi_system_error(HISI_RDR_MOD_CP_DO_RESET, (u32)type, g_modem_reset_ctrl.reset_cnt, NULL, 0); }
void system_error (u32 mod_id, u32 arg1, u32 arg2, char *data, u32 length) { hisi_system_error(mod_id, arg1, arg2, data, length); }