diff options
author | Charulatha V <charu@ti.com> | 2011-05-05 20:15:16 +0530 |
---|---|---|
committer | Nishanth Menon <nm@ti.com> | 2011-07-14 11:53:26 -0700 |
commit | 05a85a97c89ac70fd176dd89c10a904a6c056114 (patch) | |
tree | f25209ca15e55c99fb2d014ad7bd929da1836cbb /drivers/gpio/gpio-omap.c | |
parent | 31c374b9458e8eeb347d6d34f75554e806117661 (diff) | |
download | kernel_samsung_tuna-05a85a97c89ac70fd176dd89c10a904a6c056114.zip kernel_samsung_tuna-05a85a97c89ac70fd176dd89c10a904a6c056114.tar.gz kernel_samsung_tuna-05a85a97c89ac70fd176dd89c10a904a6c056114.tar.bz2 |
GPIO: OMAP2+: Use flag to identify wakeup domain
In omap3, save/restore context is implemented for GPIO banks 2-6 as GPIO bank1
is in wakeup domain. Instead of identifying bank's power domain by bank id,
use 'loses_context' flag which is filled by pwrdm_can_ever_lose_context()
during dev_init.
For getting the powerdomain pointer, omap_hwmod_get_pwrdm() is used.
omap_device_get_pwrdm() could not be used as the pwrdm information needs to be
filled in pdata, whereas omap_device_get_pwrdm() could be used only after
omap_device_build() call.
Signed-off-by: Charulatha V <charu@ti.com>
Diffstat (limited to 'drivers/gpio/gpio-omap.c')
-rw-r--r-- | drivers/gpio/gpio-omap.c | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index 0fe08fc..e1df0e4 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -56,6 +56,7 @@ struct gpio_bank { u32 dbck_enable_mask; struct device *dev; bool dbck_flag; + bool loses_context; int stride; u32 width; u16 id; @@ -1177,7 +1178,7 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev) bank->dbck_flag = pdata->dbck_flag; bank->stride = pdata->bank_stride; bank->width = pdata->bank_width; - + bank->loses_context = pdata->loses_context; bank->regs = pdata->regs; if (bank->regs->set_dataout && bank->regs->clr_dataout) @@ -1333,8 +1334,7 @@ void omap2_gpio_prepare_for_idle(int off_mode) u32 l1 = 0, l2 = 0; int j; - /* TODO: Do not use cpu_is_omap34xx */ - if ((cpu_is_omap34xx()) && (bank->id == 0)) + if (!bank->loses_context) continue; for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++) @@ -1401,8 +1401,7 @@ void omap2_gpio_resume_after_idle(void) u32 l = 0, gen, gen0, gen1; int j; - /* TODO: Do not use cpu_is_omap34xx */ - if ((cpu_is_omap34xx()) && (bank->id == 0)) + if (!bank->loses_context) continue; for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++) @@ -1501,7 +1500,7 @@ void omap_gpio_save_context(void) list_for_each_entry(bank, &omap_gpio_list, node) { i++; - if (bank->id == 0) + if (!bank->loses_context) continue; gpio_context[i].irqenable1 = @@ -1535,7 +1534,7 @@ void omap_gpio_restore_context(void) list_for_each_entry(bank, &omap_gpio_list, node) { i++; - if (bank->id == 0) + if (!bank->loses_context) continue; __raw_writel(gpio_context[i].irqenable1, |