summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/baseband-xmm-power.c
diff options
context:
space:
mode:
authorSeshendra Gadagottu <sgadagottu@nvidia.com>2011-08-26 19:28:35 +0530
committerDan Willemsen <dwillemsen@nvidia.com>2011-11-30 21:49:09 -0800
commit9dede38157de44667019dbbf1a23709a5b2e67a7 (patch)
tree51783c28dc001d72749d7b01ee47be06e5666b83 /arch/arm/mach-tegra/baseband-xmm-power.c
parentaa7c1a90e996fa6c9f0baa353b715cdacb6aeef9 (diff)
arm: tegra: xmm : Changes for CP initiated system resume
Added the changes required for CP initiated L3 -> L0 resume. BUG 828389 Reviewed-on: http://git-master/r/49462 (cherry picked from commit 58de177d5eb9ad81c6bfb25195a88011ce8622b9) Change-Id: I423a7ff7cd6d5b1679b6f643337b28d2af5ce602 Reviewed-on: http://git-master/r/54198 Tested-by: Seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-by: Michael Hsu <mhsu@nvidia.com> Tested-by: Michael Hsu <mhsu@nvidia.com> Reviewed-by: Venkat Moganty <vmoganty@nvidia.com> Rebase-Id: R7a831e137f784d10c0914ac9226b86f2c99ee2b1
Diffstat (limited to 'arch/arm/mach-tegra/baseband-xmm-power.c')
-rw-r--r--arch/arm/mach-tegra/baseband-xmm-power.c30
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 b9ad58e89c70..f0cd18988e6b 100644
--- a/arch/arm/mach-tegra/baseband-xmm-power.c
+++ b/arch/arm/mach-tegra/baseband-xmm-power.c
@@ -514,19 +514,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);