diff options
author | Michael Hsu <mhsu@nvidia.com> | 2011-10-14 17:26:07 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:52:39 -0800 |
commit | 645f91c68b19172da28779e86c2d60045fc64705 (patch) | |
tree | bc570f012238e1578d528f004048a477ad361a92 /arch/arm/mach-tegra/baseband-xmm-power.h | |
parent | 7a6f2363adc93e15bc2b1f96a3b4db9d75a43552 (diff) |
arm: tegra: comms: GPIO changes for XMM modem ver 1130 or later
XMM modem version 1130 (or later) changes the GPIO power up
sequence. Add module variable to support pre-1130 and post-1130
modem versions.
BUG 828389
Reviewed-on: http://git-master/r/58240
(cherry picked from commit 0639c200face90d6dd0144acc7362c02909fa66c)
Change-Id: If3a3486741d72d1251deeca3759af6b39c2031f1
Reviewed-on: http://git-master/r/62750
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: Rf848b30671a8739c11a376011165db6165f0a259
Diffstat (limited to 'arch/arm/mach-tegra/baseband-xmm-power.h')
-rw-r--r-- | arch/arm/mach-tegra/baseband-xmm-power.h | 50 |
1 files changed, 48 insertions, 2 deletions
diff --git a/arch/arm/mach-tegra/baseband-xmm-power.h b/arch/arm/mach-tegra/baseband-xmm-power.h index 8025c9a956ce..53e71bf7b32a 100644 --- a/arch/arm/mach-tegra/baseband-xmm-power.h +++ b/arch/arm/mach-tegra/baseband-xmm-power.h @@ -14,9 +14,24 @@ * */ +#ifndef BASEBAND_XMM_POWER_H +#define BASREBAND_XMM_POWER_H + #include <linux/pm.h> #include <linux/suspend.h> +#define TEGRA_EHCI_DEVICE "/sys/devices/platform/tegra-ehci.1/ehci_power" + +#define XMM_MODEM_VER_1121 0x1121 +#define XMM_MODEM_VER_1130 0x1130 + +/* shared between baseband-xmm-* modules so they can agree on same + * modem configuration + */ +extern unsigned long modem_ver; +extern unsigned long modem_flash; +extern unsigned long modem_pm; + enum baseband_type { BASEBAND_XMM, }; @@ -45,7 +60,34 @@ struct baseband_power_platform_data { } modem; }; -static enum { +enum baseband_xmm_power_work_state_t { + BBXMM_WORK_UNINIT, + BBXMM_WORK_INIT, + /* initialize flash modem */ + BBXMM_WORK_INIT_FLASH_STEP1, + /* initialize flash (with power management support) modem */ + BBXMM_WORK_INIT_FLASH_PM_STEP1, + BBXMM_WORK_INIT_FLASH_PM_VER_LT_1130_STEP1, + BBXMM_WORK_INIT_FLASH_PM_VER_GE_1130_STEP1, + /* initialize flashless (with power management support) modem */ + BBXMM_WORK_INIT_FLASHLESS_PM_STEP1, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_LT_1130_WAIT_IRQ, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_LT_1130_STEP1, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_LT_1130_STEP2, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_GE_1130_STEP1, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_GE_1130_STEP2, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_GE_1130_STEP3, + BBXMM_WORK_INIT_FLASHLESS_PM_VER_GE_1130_STEP4, +}; + +struct baseband_xmm_power_work_t { + /* work structure must be first structure member */ + struct work_struct work; + /* xmm modem state */ + enum baseband_xmm_power_work_state_t state; +}; + +enum baseband_xmm_powerstate_t { BBXMM_PS_UNINIT = 0, BBXMM_PS_INIT = 1, BBXMM_PS_L0 = 2, @@ -56,6 +98,10 @@ static enum { BBXMM_PS_L3 = 7, BBXMM_PS_L3TOL0 = 8, BBXMM_PS_LAST = -1, -} baseband_xmm_powerstate; +}; + +irqreturn_t baseband_xmm_power_ipc_ap_wake_irq(int irq, void *dev_id); void baseband_xmm_set_power_status(unsigned int status); + +#endif /* BASREBAND_XMM_POWER_H */ |