diff options
Diffstat (limited to 'drivers/misc/modem_if/modem_modemctl_device_cbp72.c')
-rw-r--r-- | drivers/misc/modem_if/modem_modemctl_device_cbp72.c | 15 |
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); |