示例#1
0
/* simply declare this function as extern at test point, and call it */
void mdm_force_fatal(void)
{
	pr_info("%s: Reseting the mdm due to AP request\n", __func__);

	force_dump = 1;

	notify_modem_fatal();
	subsystem_restart(EXTERNAL_MODEM);
}
示例#2
0
/* simply declare this function as extern at test point, and call it */
void mdm_force_fatal(void)
{
	pr_info("%s: Reseting the mdm due to AP request\n", __func__);

	force_dump = 1;

	if (in_irq())
		queue_work(mdm_queue, &mdm_fatal_work);
	else {
		notify_modem_fatal();
		subsystem_restart(EXTERNAL_MODEM);
	}
}
示例#3
0
static void mdm2ap_status_check(struct work_struct *work)
{
	/*
	 * If the mdm modem did not pull the MDM2AP_STATUS gpio
	 * high then call subsystem_restart.
	 */
	if (gpio_get_value(mdm_drv->mdm2ap_status_gpio) == 0) {
		pr_err("%s: MDM2AP_STATUS gpio did not go high\n",
			   __func__);
		mdm_drv->mdm_ready = 0;
		notify_modem_fatal();
		subsystem_restart(EXTERNAL_MODEM);
	}
}
static void mdm_status_fn(struct work_struct *work)
{
	int value = gpio_get_value(mdm_drv->mdm2ap_status_gpio);

	if (!mdm_drv->mdm_ready)
		return;

	mdm_drv->ops->status_cb(mdm_drv, value);

	pr_err("%s: status:%d\n", __func__, value);

	if ((value == 0)) {
		pr_info("%s: unexpected reset external modem\n", __func__);
		notify_modem_fatal();
		subsystem_restart(EXTERNAL_MODEM);
	} else if (value == 1) {
		pr_info("%s: status = 1: mdm is now ready\n", __func__);
	}
}
示例#5
0
static void mdm_fatal_fn(struct work_struct *work)
{
	pr_info("%s: Reseting the mdm due to an errfatal\n", __func__);
	notify_modem_fatal();
	subsystem_restart(EXTERNAL_MODEM);
}