Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 295648
b: refs/heads/master
c: 065cd79
h: refs/heads/master
v: v3
  • Loading branch information
Tarun Kanti DebBarma committed Feb 6, 2012
1 parent 5f1c534 commit 60a4bc3
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 26 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 55b93c32520dc7ff0097db81db9b1e6b735951a9
refs/heads/master: 065cd795d2721f8d2d1f2967ee6ed0aec07a4202
54 changes: 29 additions & 25 deletions trunk/drivers/gpio/gpio-omap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1052,6 +1052,8 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
goto err_free;
}

platform_set_drvdata(pdev, bank);

pm_runtime_enable(bank->dev);
pm_runtime_irq_safe(bank->dev);
pm_runtime_get_sync(bank->dev);
Expand Down Expand Up @@ -1080,44 +1082,46 @@ static int __devinit omap_gpio_probe(struct platform_device *pdev)
#if defined(CONFIG_PM_SLEEP)
static int omap_gpio_suspend(struct device *dev)
{
struct gpio_bank *bank;
struct platform_device *pdev = to_platform_device(dev);
struct gpio_bank *bank = platform_get_drvdata(pdev);
void __iomem *base = bank->base;
void __iomem *wakeup_enable;
unsigned long flags;

list_for_each_entry(bank, &omap_gpio_list, node) {
void __iomem *base = bank->base;
void __iomem *wake_status;
unsigned long flags;
if (!bank->mod_usage || !bank->loses_context)
return 0;

if (!bank->regs->wkup_en)
return 0;
if (!bank->regs->wkup_en || !bank->suspend_wakeup)
return 0;

wake_status = bank->base + bank->regs->wkup_en;
wakeup_enable = bank->base + bank->regs->wkup_en;

spin_lock_irqsave(&bank->lock, flags);
bank->saved_wakeup = __raw_readl(wake_status);
_gpio_rmw(base, bank->regs->wkup_en, 0xffffffff, 0);
_gpio_rmw(base, bank->regs->wkup_en, bank->suspend_wakeup, 1);
spin_unlock_irqrestore(&bank->lock, flags);
}
spin_lock_irqsave(&bank->lock, flags);
bank->saved_wakeup = __raw_readl(wakeup_enable);
_gpio_rmw(base, bank->regs->wkup_en, 0xffffffff, 0);
_gpio_rmw(base, bank->regs->wkup_en, bank->suspend_wakeup, 1);
spin_unlock_irqrestore(&bank->lock, flags);

return 0;
}

static int omap_gpio_resume(struct device *dev)
{
struct gpio_bank *bank;
struct platform_device *pdev = to_platform_device(dev);
struct gpio_bank *bank = platform_get_drvdata(pdev);
void __iomem *base = bank->base;
unsigned long flags;

list_for_each_entry(bank, &omap_gpio_list, node) {
void __iomem *base = bank->base;
unsigned long flags;
if (!bank->mod_usage || !bank->loses_context)
return 0;

if (!bank->regs->wkup_en)
return 0;
if (!bank->regs->wkup_en || !bank->saved_wakeup)
return 0;

spin_lock_irqsave(&bank->lock, flags);
_gpio_rmw(base, bank->regs->wkup_en, 0xffffffff, 0);
_gpio_rmw(base, bank->regs->wkup_en, bank->saved_wakeup, 1);
spin_unlock_irqrestore(&bank->lock, flags);
}
spin_lock_irqsave(&bank->lock, flags);
_gpio_rmw(base, bank->regs->wkup_en, 0xffffffff, 0);
_gpio_rmw(base, bank->regs->wkup_en, bank->saved_wakeup, 1);
spin_unlock_irqrestore(&bank->lock, flags);

return 0;
}
Expand Down

0 comments on commit 60a4bc3

Please sign in to comment.