diff options
-rw-r--r-- | arch/arm/mach-tegra/baseband-xmm-power.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/arch/arm/mach-tegra/baseband-xmm-power.c b/arch/arm/mach-tegra/baseband-xmm-power.c index 0eb395f9ebfc..dc8f8191a95d 100644 --- a/arch/arm/mach-tegra/baseband-xmm-power.c +++ b/arch/arm/mach-tegra/baseband-xmm-power.c @@ -532,19 +532,29 @@ static int baseband_xmm_power_driver_resume(struct platform_device *device) struct baseband_power_platform_data *data = (struct baseband_power_platform_data *) device->dev.platform_data; int value; + int delay = 10000; /* maxmum delay in msec */ pr_debug("%s\n", __func__); - /* wake bb */ - gpio_set_value(data->modem.xmm.ipc_bb_wake, 1); - - pr_debug("waiting for host wakeup\n"); - do { - mdelay(1); - value = gpio_get_value(baseband_power_driver_data - ->modem.xmm.ipc_ap_wake); - } while (!value); - pr_debug("gpio host wakeup high <-\n"); + value = gpio_get_value(data->modem.xmm.ipc_ap_wake); + if (!value) { + pr_info("AP Initiated L3 -> L0\n"); + /* wake bb */ + gpio_set_value(data->modem.xmm.ipc_bb_wake, 1); + + pr_debug("waiting for host wakeup\n"); + do { + mdelay(1); + value = gpio_get_value(data->modem.xmm.ipc_ap_wake); + delay--; + } while ((!value) && (delay)); + if (delay) + pr_debug("gpio host wakeup high <-\n"); + else + pr_err("%s host wakeup not happened\n", __func__); + } else { + pr_info("CP Initiated L3 -> L0\n"); + } /* signal bb to resume hsic */ gpio_set_value(data->modem.xmm.ipc_hsic_active, 1); |