aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/modem_if/modem_modemctl_device_cbp72.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/modem_if/modem_modemctl_device_cbp72.c')
-rw-r--r--drivers/misc/modem_if/modem_modemctl_device_cbp72.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/misc/modem_if/modem_modemctl_device_cbp72.c b/drivers/misc/modem_if/modem_modemctl_device_cbp72.c
index b8d2711..2617be8 100644
--- a/drivers/misc/modem_if/modem_modemctl_device_cbp72.c
+++ b/drivers/misc/modem_if/modem_modemctl_device_cbp72.c
@@ -43,8 +43,10 @@ static irqreturn_t phone_active_handler(int irq, void *arg)
phone_state, phone_reset, phone_active);
if (phone_reset && phone_active) {
- phone_state = STATE_ONLINE;
- mc->bootd->modem_state_changed(mc->bootd, phone_state);
+ if (mc->phone_state == STATE_BOOTING) {
+ phone_state = STATE_ONLINE;
+ mc->bootd->modem_state_changed(mc->bootd, phone_state);
+ }
} else if (phone_reset && !phone_active) {
if (mc->phone_state == STATE_ONLINE) {
phone_state = STATE_CRASH_EXIT;
@@ -70,6 +72,10 @@ static int cbp72_on(struct modem_ctl *mc)
{
mif_info("start!!!\n");
+ /* prevent sleep during bootloader downloading */
+ if (!wake_lock_active(&mc->mc_wake_lock))
+ wake_lock(&mc->mc_wake_lock);
+
gpio_set_value(mc->gpio_cp_on, 0);
if (mc->gpio_cp_off)
gpio_set_value(mc->gpio_cp_off, 1);
@@ -178,6 +184,9 @@ static int cbp72_boot_off(struct modem_ctl *mc)
return -ENXIO;
}
mc->bootd->modem_state_changed(mc->bootd, STATE_ONLINE);
+
+ wake_unlock(&mc->mc_wake_lock);
+
return 0;
}
@@ -253,6 +262,8 @@ int cbp72_init_modemctl_device(struct modem_ctl *mc, struct modem_data *pdata)
return ret;
}
+ wake_lock_init(&mc->mc_wake_lock, WAKE_LOCK_SUSPEND, "cbp72_wake_lock");
+
ret = enable_irq_wake(irq);
if (ret)
mif_err("enable_irq_wake fail (%d)\n", ret);