static void delayed_subsystem_restart_work_fn(struct work_struct *work) { if (!machine_is_m7_evm()) /* SSR is not supported on EVM board */ subsystem_restart(EXTERNAL_MODEM); else pr_err("SSR is not supported on EVM board. Skip it.\n"); }
static irqreturn_t qsc_errfatal(int irq, void *dev_id) { int value = gpio_get_value(mdm_drv->mdm2ap_errfatal_gpio); if( qsc_bootup_state != QSC_BOOT_MDM_HELPER_BOOTING && qsc_bootup_state != QSC_BOOT_MDM_BOOTLOAER_IRQ_RECEIVED ) pr_debug("%s: qsc got errfatal interrupt\n", __func__); if (mdm_drv->mdm_ready && (gpio_get_value(mdm_drv->mdm2ap_status_gpio) == 1)) { pr_err("%s: QSC2AP_ERRFATAL <%d>, reseting the qsc.\n", __func__, value); mdm_drv->mdm_ready = 0; if (!machine_is_m7_evm()) /* SSR is not supported on EVM board */ subsystem_restart(EXTERNAL_MODEM); } return IRQ_HANDLED; }
static void qsc2ap_status_check(struct work_struct *work) { int value = gpio_get_value(mdm_drv->mdm2ap_status_gpio); if (!mdm_drv->disable_status_check) { if (value == 0) { pr_err("%s: QSC2AP_STATUS gpio did not go high\n", __func__); pr_info("%s: QSC2AP_STATUS <%d>\n", __func__, value); mdm_drv->mdm_ready = 0; if (!machine_is_m7_evm()) subsystem_restart(EXTERNAL_MODEM); } else { gpio_direction_output(mdm_drv->ap2mdm_vddmin_gpio, 1); } } }
static void qsc2ap_status_check(struct work_struct *work) { /* * If the mdm modem did not pull the MDM2AP_STATUS gpio * high then call subsystem_restart. */ int value = gpio_get_value(mdm_drv->mdm2ap_status_gpio); if (!mdm_drv->disable_status_check) { if (value == 0) { pr_err("%s: QSC2AP_STATUS gpio did not go high\n", __func__); pr_info("%s: QSC2AP_STATUS <%d>\n", __func__, value); mdm_drv->mdm_ready = 0; if (!machine_is_m7_evm()) /* SSR is not supported on EVM board */ subsystem_restart(EXTERNAL_MODEM); } else { /* SSD_RIL: To control QSC enter DLOAD mode if QSC HW reset happens. */ gpio_direction_output(mdm_drv->ap2mdm_vddmin_gpio, 1); } } }