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