From: "Varadarajan, Charulatha" <charu@ti.com>
To: linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org
Cc: tony@atomide.com, khilman@deeprootsystems.com, paul@pwsan.com,
Charulatha V <charu@ti.com>
Subject: [PATCH 3/7] OMAP4: GPIO: Save/restore context
Date: Mon, 18 Apr 2011 20:36:53 +0530 [thread overview]
Message-ID: <1303139217-10285-4-git-send-email-charu@ti.com> (raw)
In-Reply-To: <no>
From: Charulatha V <charu@ti.com>
Modify the omap_gpio_save/restore_context to support OMAP4
architecture so that the OMAP GPIO driver need not be modified
when OMAP4 off mode support is available.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/plat-omap/gpio.c | 131 +++++++++++++++++++++++++++++---------------
1 files changed, 86 insertions(+), 45 deletions(-)
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 74085b5..e68da08 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -2022,43 +2022,62 @@ void omap2_gpio_resume_after_idle(void)
#endif
-#ifdef CONFIG_ARCH_OMAP3
-/* save the registers of bank 2-6 */
void omap_gpio_save_context(void)
{
int i;
- /* saving banks from 2-6 only since GPIO1 is in WKUP */
for (i = 0; i < gpio_bank_count; i++) {
struct gpio_bank *bank = &gpio_bank[i];
if (!bank->looses_context)
continue;
- bank->context.irqenable1 =
- __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1);
- bank->context.irqenable2 =
- __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE2);
- bank->context.wake_en =
- __raw_readl(bank->base + OMAP24XX_GPIO_WAKE_EN);
- bank->context.ctrl =
- __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
- bank->context.oe =
- __raw_readl(bank->base + OMAP24XX_GPIO_OE);
- bank->context.leveldetect0 =
- __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
- bank->context.leveldetect1 =
- __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
- bank->context.risingdetect =
- __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
- bank->context.fallingdetect =
- __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
- bank->context.dataout =
- __raw_readl(bank->base + OMAP24XX_GPIO_DATAOUT);
+ if (bank->method == METHOD_GPIO_24XX) {
+ bank->context.irqenable1 = __raw_readl(
+ bank->base + OMAP24XX_GPIO_IRQENABLE1);
+ bank->context.irqenable2 = __raw_readl(
+ bank->base + OMAP24XX_GPIO_IRQENABLE2);
+ bank->context.wake_en = __raw_readl(
+ bank->base + OMAP24XX_GPIO_WAKE_EN);
+ bank->context.ctrl = __raw_readl(
+ bank->base + OMAP24XX_GPIO_CTRL);
+ bank->context.oe = __raw_readl(
+ bank->base + OMAP24XX_GPIO_OE);
+ bank->context.leveldetect0 = __raw_readl(bank->base +
+ OMAP24XX_GPIO_LEVELDETECT0);
+ bank->context.leveldetect1 = __raw_readl(bank->base +
+ OMAP24XX_GPIO_LEVELDETECT1);
+ bank->context.risingdetect = __raw_readl(bank->base +
+ OMAP24XX_GPIO_RISINGDETECT);
+ bank->context.fallingdetect = __raw_readl(bank->base +
+ OMAP24XX_GPIO_FALLINGDETECT);
+ bank->context.dataout = __raw_readl(
+ bank->base + OMAP24XX_GPIO_DATAOUT);
+ } else if (bank->method == METHOD_GPIO_44XX) {
+ bank->context.irqenable1 = __raw_readl(
+ bank->base + OMAP4_GPIO_IRQSTATUSSET0);
+ bank->context.irqenable2 = __raw_readl(
+ bank->base + OMAP4_GPIO_IRQSTATUSSET1);
+ bank->context.wake_en = __raw_readl(
+ bank->base + OMAP4_GPIO_IRQWAKEN0);
+ bank->context.ctrl = __raw_readl(
+ bank->base + OMAP4_GPIO_CTRL);
+ bank->context.oe = __raw_readl(
+ bank->base + OMAP24XX_GPIO_OE);
+ bank->context.leveldetect0 = __raw_readl(bank->base +
+ OMAP4_GPIO_LEVELDETECT0);
+ bank->context.leveldetect1 = __raw_readl(bank->base +
+ OMAP4_GPIO_LEVELDETECT1);
+ bank->context.risingdetect = __raw_readl(bank->base +
+ OMAP4_GPIO_RISINGDETECT);
+ bank->context.fallingdetect = __raw_readl(bank->base +
+ OMAP4_GPIO_FALLINGDETECT);
+ bank->context.dataout = __raw_readl(
+ bank->base + OMAP4_GPIO_DATAOUT);
+ }
}
}
-/* restore the required registers of bank 2-6 */
void omap_gpio_restore_context(void)
{
int i;
@@ -2069,29 +2088,51 @@ void omap_gpio_restore_context(void)
if (!bank->looses_context)
continue;
- __raw_writel(bank->context.irqenable1,
- bank->base + OMAP24XX_GPIO_IRQENABLE1);
- __raw_writel(bank->context.irqenable2,
- bank->base + OMAP24XX_GPIO_IRQENABLE2);
- __raw_writel(bank->context.wake_en,
- bank->base + OMAP24XX_GPIO_WAKE_EN);
- __raw_writel(bank->context.ctrl,
- bank->base + OMAP24XX_GPIO_CTRL);
- __raw_writel(bank->context.oe,
- bank->base + OMAP24XX_GPIO_OE);
- __raw_writel(bank->context.leveldetect0,
- bank->base + OMAP24XX_GPIO_LEVELDETECT0);
- __raw_writel(bank->context.leveldetect1,
- bank->base + OMAP24XX_GPIO_LEVELDETECT1);
- __raw_writel(bank->context.risingdetect,
- bank->base + OMAP24XX_GPIO_RISINGDETECT);
- __raw_writel(bank->context.fallingdetect,
- bank->base + OMAP24XX_GPIO_FALLINGDETECT);
- __raw_writel(bank->context.dataout,
- bank->base + OMAP24XX_GPIO_DATAOUT);
+ if (bank->method == METHOD_GPIO_24XX) {
+ __raw_writel(bank->context.irqenable1, bank->base +
+ OMAP24XX_GPIO_IRQENABLE1);
+ __raw_writel(bank->context.irqenable2, bank->base +
+ OMAP24XX_GPIO_IRQENABLE2);
+ __raw_writel(bank->context.wake_en, bank->base +
+ OMAP24XX_GPIO_WAKE_EN);
+ __raw_writel(bank->context.ctrl, bank->base +
+ OMAP24XX_GPIO_CTRL);
+ __raw_writel(bank->context.oe, bank->base +
+ OMAP24XX_GPIO_OE);
+ __raw_writel(bank->context.leveldetect0, bank->base +
+ OMAP24XX_GPIO_LEVELDETECT0);
+ __raw_writel(bank->context.leveldetect1, bank->base +
+ OMAP24XX_GPIO_LEVELDETECT1);
+ __raw_writel(bank->context.risingdetect, bank->base +
+ OMAP24XX_GPIO_RISINGDETECT);
+ __raw_writel(bank->context.fallingdetect, bank->base +
+ OMAP24XX_GPIO_FALLINGDETECT);
+ __raw_writel(bank->context.dataout, bank->base +
+ OMAP24XX_GPIO_DATAOUT);
+ } else if (bank->method == METHOD_GPIO_44XX) {
+ __raw_writel(bank->context.irqenable1, bank->base +
+ OMAP4_GPIO_IRQSTATUSSET0);
+ __raw_writel(bank->context.irqenable2, bank->base +
+ OMAP4_GPIO_IRQSTATUSSET1);
+ __raw_writel(bank->context.wake_en, bank->base +
+ OMAP4_GPIO_IRQWAKEN0);
+ __raw_writel(bank->context.ctrl, bank->base +
+ OMAP4_GPIO_CTRL);
+ __raw_writel(bank->context.oe, bank->base +
+ OMAP24XX_GPIO_OE);
+ __raw_writel(bank->context.leveldetect0, bank->base +
+ OMAP4_GPIO_LEVELDETECT0);
+ __raw_writel(bank->context.leveldetect1, bank->base +
+ OMAP4_GPIO_LEVELDETECT1);
+ __raw_writel(bank->context.risingdetect, bank->base +
+ OMAP4_GPIO_RISINGDETECT);
+ __raw_writel(bank->context.fallingdetect, bank->base +
+ OMAP4_GPIO_FALLINGDETECT);
+ __raw_writel(bank->context.dataout, bank->base +
+ OMAP4_GPIO_DATAOUT);
+ }
}
}
-#endif
static struct platform_driver omap_gpio_driver = {
.probe = omap_gpio_probe,
--
1.7.1
next prev parent reply other threads:[~2011-04-18 15:03 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <no>
2011-04-18 15:06 ` [v2 0/7] OMAP: GPIO: Use PM runtime framework Varadarajan, Charulatha
2011-04-19 6:26 ` Tony Lindgren
2011-04-20 23:59 ` Kevin Hilman
2011-04-21 5:42 ` Tony Lindgren
2011-04-21 15:15 ` Kevin Hilman
2011-04-22 6:11 ` Tony Lindgren
2011-04-23 8:35 ` Linus Walleij
2011-04-26 7:29 ` Tony Lindgren
2011-04-27 13:18 ` Linus Walleij
2011-05-03 16:22 ` Kevin Hilman
2011-05-03 21:41 ` Linus Walleij
2011-05-04 6:19 ` Tony Lindgren
2011-05-12 0:57 ` Linus Walleij
2011-05-12 9:42 ` Kevin Hilman
2011-05-19 19:08 ` Grant Likely
2011-05-20 3:34 ` Shawn Guo
2011-05-19 19:05 ` Grant Likely
2011-04-18 15:06 ` [PATCH 1/7] OMAP: GPIO: Make gpio_context part of gpio_bank structure Varadarajan, Charulatha
2011-04-18 15:06 ` [PATCH 2/7] OMAP: GPIO: Use flag to identify wkup dmn GPIO Varadarajan, Charulatha
2011-04-18 15:06 ` Varadarajan, Charulatha [this message]
2011-04-21 0:26 ` [PATCH 3/7] OMAP4: GPIO: Save/restore context Kevin Hilman
2011-04-18 15:06 ` [PATCH 4/7] OMAP: GPIO: handle save/restore ctx in GPIO driver Varadarajan, Charulatha
2011-04-18 15:06 ` [PATCH 5/7] OMAP2+: GPIO: make workaround_enabled bank specific Varadarajan, Charulatha
2011-04-18 15:06 ` [PATCH 6/7] OMAP: GPIO: Cleanup prepare_for_idle/resume Varadarajan, Charulatha
2011-04-18 15:06 ` [PATCH 7/7] OMAP: GPIO: use PM runtime framework Varadarajan, Charulatha
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1303139217-10285-4-git-send-email-charu@ti.com \
--to=charu@ti.com \
--cc=khilman@deeprootsystems.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=paul@pwsan.com \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox