From: khilman@deeprootsystems.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 02/32] OMAP3: PM: GPIO context save/restore
Date: Thu, 22 Oct 2009 16:09:23 -0700 [thread overview]
Message-ID: <1256252993-24328-3-git-send-email-khilman@deeprootsystems.com> (raw)
In-Reply-To: <1256252993-24328-2-git-send-email-khilman@deeprootsystems.com>
From: Rajendra Nayak <rnayak@ti.com>
Add context save and restore to enable off-mode.
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
---
arch/arm/plat-omap/gpio.c | 92 ++++++++++++++++++++++++++++++++
arch/arm/plat-omap/include/plat/gpio.h | 3 +-
2 files changed, 94 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 487bea7..4f81ea3 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -290,6 +290,23 @@ static struct gpio_bank gpio_bank_34xx[6] = {
METHOD_GPIO_24XX },
};
+struct omap3_gpio_regs {
+ u32 sysconfig;
+ u32 irqenable1;
+ u32 irqenable2;
+ u32 wake_en;
+ u32 ctrl;
+ u32 oe;
+ u32 leveldetect0;
+ u32 leveldetect1;
+ u32 risingdetect;
+ u32 fallingdetect;
+ u32 dataout;
+ u32 setwkuena;
+ u32 setdataout;
+};
+
+static struct omap3_gpio_regs gpio_context[OMAP34XX_NR_GPIOS];
#endif
#ifdef CONFIG_ARCH_OMAP4
@@ -2036,6 +2053,81 @@ void omap2_gpio_resume_after_retention(void)
#endif
+#ifdef CONFIG_ARCH_OMAP34XX
+/* 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 = 1; i < gpio_bank_count; i++) {
+ struct gpio_bank *bank = &gpio_bank[i];
+ gpio_context[i].sysconfig =
+ __raw_readl(bank->base + OMAP24XX_GPIO_SYSCONFIG);
+ gpio_context[i].irqenable1 =
+ __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1);
+ gpio_context[i].irqenable2 =
+ __raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE2);
+ gpio_context[i].wake_en =
+ __raw_readl(bank->base + OMAP24XX_GPIO_WAKE_EN);
+ gpio_context[i].ctrl =
+ __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
+ gpio_context[i].oe =
+ __raw_readl(bank->base + OMAP24XX_GPIO_OE);
+ gpio_context[i].leveldetect0 =
+ __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT0);
+ gpio_context[i].leveldetect1 =
+ __raw_readl(bank->base + OMAP24XX_GPIO_LEVELDETECT1);
+ gpio_context[i].risingdetect =
+ __raw_readl(bank->base + OMAP24XX_GPIO_RISINGDETECT);
+ gpio_context[i].fallingdetect =
+ __raw_readl(bank->base + OMAP24XX_GPIO_FALLINGDETECT);
+ gpio_context[i].dataout =
+ __raw_readl(bank->base + OMAP24XX_GPIO_DATAOUT);
+ gpio_context[i].setwkuena =
+ __raw_readl(bank->base + OMAP24XX_GPIO_SETWKUENA);
+ gpio_context[i].setdataout =
+ __raw_readl(bank->base + OMAP24XX_GPIO_SETDATAOUT);
+ }
+}
+
+/* restore the required registers of bank 2-6 */
+void omap_gpio_restore_context(void)
+{
+ int i;
+
+ for (i = 1; i < gpio_bank_count; i++) {
+ struct gpio_bank *bank = &gpio_bank[i];
+ __raw_writel(gpio_context[i].sysconfig,
+ bank->base + OMAP24XX_GPIO_SYSCONFIG);
+ __raw_writel(gpio_context[i].irqenable1,
+ bank->base + OMAP24XX_GPIO_IRQENABLE1);
+ __raw_writel(gpio_context[i].irqenable2,
+ bank->base + OMAP24XX_GPIO_IRQENABLE2);
+ __raw_writel(gpio_context[i].wake_en,
+ bank->base + OMAP24XX_GPIO_WAKE_EN);
+ __raw_writel(gpio_context[i].ctrl,
+ bank->base + OMAP24XX_GPIO_CTRL);
+ __raw_writel(gpio_context[i].oe,
+ bank->base + OMAP24XX_GPIO_OE);
+ __raw_writel(gpio_context[i].leveldetect0,
+ bank->base + OMAP24XX_GPIO_LEVELDETECT0);
+ __raw_writel(gpio_context[i].leveldetect1,
+ bank->base + OMAP24XX_GPIO_LEVELDETECT1);
+ __raw_writel(gpio_context[i].risingdetect,
+ bank->base + OMAP24XX_GPIO_RISINGDETECT);
+ __raw_writel(gpio_context[i].fallingdetect,
+ bank->base + OMAP24XX_GPIO_FALLINGDETECT);
+ __raw_writel(gpio_context[i].dataout,
+ bank->base + OMAP24XX_GPIO_DATAOUT);
+ __raw_writel(gpio_context[i].setwkuena,
+ bank->base + OMAP24XX_GPIO_SETWKUENA);
+ __raw_writel(gpio_context[i].setdataout,
+ bank->base + OMAP24XX_GPIO_SETDATAOUT);
+ }
+}
+#endif
+
/*
* This may get called early from board specific init
* for boards that have interrupts routed via FPGA.
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
index 633ff68..de7c547 100644
--- a/arch/arm/plat-omap/include/plat/gpio.h
+++ b/arch/arm/plat-omap/include/plat/gpio.h
@@ -76,7 +76,8 @@ extern void omap2_gpio_prepare_for_retention(void);
extern void omap2_gpio_resume_after_retention(void);
extern void omap_set_gpio_debounce(int gpio, int enable);
extern void omap_set_gpio_debounce_time(int gpio, int enable);
-
+extern void omap_gpio_save_context(void);
+extern void omap_gpio_restore_context(void);
/*-------------------------------------------------------------------------*/
/* Wrappers for "new style" GPIO calls, using the new infrastructure
--
1.6.4.3
next prev parent reply other threads:[~2009-10-22 23:09 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-10-22 23:09 [PATCH v2 00/32] OMAP3: PM: base off-mode support Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 01/32] OMAP3: PM: GPMC context save/restore Kevin Hilman
2009-10-22 23:09 ` Kevin Hilman [this message]
2009-10-22 23:09 ` [PATCH v2 03/32] OMAP3: PM: INTC " Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 04/32] OMAP3: PM: PRCM " Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 05/32] OMAP3: PM: Populate scratchpad contents Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 06/32] OMAP3: PM: SCM context save/restore Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 07/32] OMAP3: PM: restore SRAM functions after off-mode Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 08/32] OMAP3: PM: handle PER/NEON/CORE in idle Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 09/32] OMAP3: PM: Restore MMU table entry Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 10/32] OMAP3: PM: MPU off-mode support Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 11/32] OMAP3: PM: CORE domain " Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 12/32] OMAP: PM: DMA context save/restore for " Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 13/32] OMAP3 PM: off-mode support for HS/EMU devices Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 14/32] OMAP3: PM: save secure RAM only during init Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 15/32] OMAP3: PM: Enable SDRAM auto-refresh during sleep Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 16/32] OMAP3: PM: Save and restore also CM_CLKSEL1_PLL_IVA2 Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 17/32] OMAP3: PM: Fix secure SRAM context save/restore Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 18/32] ARM: OMAP: SMS: save/restore of SMS_SYSCONFIG for off-mode Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 19/32] OMAP3: PM: Fix PLL_MOD CLKEN offset in scratchpad Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 20/32] OMAP: PM: Clear DMA channel state after a wakeup Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 21/32] OMAP: Store reboot mode in scratchpad on OMAP34xx Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 22/32] OMAP3: PM: SDRC auto-refresh workaround for off-mode Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 23/32] OMAP3: PM: Fix INTC context save/restore Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 24/32] PM: Disable usb host HW save and restore Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 25/32] OMAP3: PM: Wait for SDRC ready iso a blind delay Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 26/32] OMAP3: PM debug: allow runtime toggle of PM features Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 27/32] PM debug: allow configurable wakeup from suspend on OMAP GPtimer Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 28/32] OMAP3: PM: decouple PER and CORE context save and restore Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 29/32] OMAP3: PM: Prevent PER from going OFF when CORE is going INA Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 30/32] OMAP3: PM: MPU and CORE should stay awake if there is CAM domain ACTIVE Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 31/32] OMAP3: PM: Enable IO-CHAIN wakeup Kevin Hilman
2009-10-22 23:09 ` [PATCH v2 32/32] OMAP3: PM: Program SDRC to send self refresh on timeout of AUTO_CNT Kevin Hilman
2009-11-13 10:05 ` [PATCH v2 26/32] OMAP3: PM debug: allow runtime toggle of PM features Gopinath, Thara
2009-11-16 18:31 ` Kevin Hilman
2009-10-23 8:32 ` [PATCH v2 12/32] OMAP: PM: DMA context save/restore for off-mode support Grazvydas Ignotas
2009-10-23 17:33 ` Kevin Hilman
2009-10-23 13:54 ` Venkatraman S
2009-10-23 17:57 ` Kevin Hilman
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=1256252993-24328-3-git-send-email-khilman@deeprootsystems.com \
--to=khilman@deeprootsystems.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).