pr_err("%s: !data\n", __func__);
return -EINVAL;
}
+ if (baseband_xmm_powerstate != BBXMM_PS_UNINIT)
+ return -EINVAL;
/* reset the state machine */
baseband_xmm_powerstate = BBXMM_PS_INIT;
pr_debug("%s {\n", __func__);
+ if (baseband_xmm_powerstate == BBXMM_PS_UNINIT)
+ return -EINVAL;
/* check for device / platform data */
if (!device) {
pr_err("%s: !device\n", __func__);
return -EINVAL;
}
+ ipc_ap_wake_state = IPC_AP_WAKE_UNINIT;
+
/* unregister usb host controller */
pr_info("%s: hsic device: %x\n", __func__, data->modem.xmm.hsic_device);
if (data->hsic_unregister)
gpio_set_value(data->modem.xmm.bb_rst, 0);
mdelay(1);
+ baseband_xmm_powerstate = BBXMM_PS_UNINIT;
pr_debug("%s }\n", __func__);
return 0;
/* check if modem is on */
if (power_onoff == 0) {
pr_debug("%s - flight mode - nop\n", __func__);
- baseband_xmm_set_power_status(BBXMM_PS_L3TOL0);
return 0;
}
}
/* free work structure */
- destroy_workqueue(workqueue);
+ if (workqueue) {
+ cancel_work_sync(baseband_xmm_power2_work);
+ destroy_workqueue(workqueue);
+ }
kfree(baseband_xmm_power2_work);
baseband_xmm_power2_work = (struct baseband_xmm_power_work_t *) 0;