aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-omap.c
diff options
context:
space:
mode:
authorCharulatha V <charu@ti.com>2011-05-05 10:45:16 -0400
committerTarun Kanti DebBarma <tarun.kanti@ti.com>2012-02-06 03:43:40 -0500
commit0cde8d03dd297fa8e7e88cedeb498d0ed5b7776d (patch)
tree542a4f06bc659180898d9e9d6bc3e540ddd088f1 /drivers/gpio/gpio-omap.c
parent03e128ca35e5da22e9e65ec8ab158ec0e905fdea (diff)
gpio/omap: 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> Reviewed-by: Santosh Shilimkar <santosh.shilimkar@ti.com> Reviewed-by: Kevin Hilman <khilman@ti.com> Signed-off-by: Kevin Hilman <khilman@ti.com>
Diffstat (limited to 'drivers/gpio/gpio-omap.c')
-rw-r--r--drivers/gpio/gpio-omap.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index 6ea7390e7801..07efa15c3549 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -56,6 +56,7 @@ struct gpio_bank {
56 u32 dbck_enable_mask; 56 u32 dbck_enable_mask;
57 struct device *dev; 57 struct device *dev;
58 bool dbck_flag; 58 bool dbck_flag;
59 bool loses_context;
59 int stride; 60 int stride;
60 u32 width; 61 u32 width;
61 u16 id; 62 u16 id;
@@ -1181,7 +1182,7 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
1181 bank->dbck_flag = pdata->dbck_flag; 1182 bank->dbck_flag = pdata->dbck_flag;
1182 bank->stride = pdata->bank_stride; 1183 bank->stride = pdata->bank_stride;
1183 bank->width = pdata->bank_width; 1184 bank->width = pdata->bank_width;
1184 1185 bank->loses_context = pdata->loses_context;
1185 bank->regs = pdata->regs; 1186 bank->regs = pdata->regs;
1186 1187
1187 if (bank->regs->set_dataout && bank->regs->clr_dataout) 1188 if (bank->regs->set_dataout && bank->regs->clr_dataout)
@@ -1337,8 +1338,7 @@ void omap2_gpio_prepare_for_idle(int off_mode)
1337 u32 l1 = 0, l2 = 0; 1338 u32 l1 = 0, l2 = 0;
1338 int j; 1339 int j;
1339 1340
1340 /* TODO: Do not use cpu_is_omap34xx */ 1341 if (!bank->loses_context)
1341 if ((cpu_is_omap34xx()) && (bank->id == 0))
1342 continue; 1342 continue;
1343 1343
1344 for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++) 1344 for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++)
@@ -1405,8 +1405,7 @@ void omap2_gpio_resume_after_idle(void)
1405 u32 l = 0, gen, gen0, gen1; 1405 u32 l = 0, gen, gen0, gen1;
1406 int j; 1406 int j;
1407 1407
1408 /* TODO: Do not use cpu_is_omap34xx */ 1408 if (!bank->loses_context)
1409 if ((cpu_is_omap34xx()) && (bank->id == 0))
1410 continue; 1409 continue;
1411 1410
1412 for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++) 1411 for (j = 0; j < hweight_long(bank->dbck_enable_mask); j++)
@@ -1505,7 +1504,7 @@ void omap_gpio_save_context(void)
1505 list_for_each_entry(bank, &omap_gpio_list, node) { 1504 list_for_each_entry(bank, &omap_gpio_list, node) {
1506 i++; 1505 i++;
1507 1506
1508 if (bank->id == 0) 1507 if (!bank->loses_context)
1509 continue; 1508 continue;
1510 1509
1511 gpio_context[i].irqenable1 = 1510 gpio_context[i].irqenable1 =
@@ -1539,7 +1538,7 @@ void omap_gpio_restore_context(void)
1539 list_for_each_entry(bank, &omap_gpio_list, node) { 1538 list_for_each_entry(bank, &omap_gpio_list, node) {
1540 i++; 1539 i++;
1541 1540
1542 if (bank->id == 0) 1541 if (!bank->loses_context)
1543 continue; 1542 continue;
1544 1543
1545 __raw_writel(gpio_context[i].irqenable1, 1544 __raw_writel(gpio_context[i].irqenable1,