All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tarun Kanti DebBarma <tarun.kanti@ti.com>
To: linux-omap@vger.kernel.org
Cc: khilman@ti.com, santosh.shilimkar@ti.com, tony@atomide.com,
	linux-arm-kernel@lists.infradead.org, Charulatha V <charu@ti.com>
Subject: [PATCH v4 02/20] gpio/omap: use flag to identify wakeup domain
Date: Wed, 13 Jul 2011 19:24:01 +0530	[thread overview]
Message-ID: <1310565259-31267-3-git-send-email-tarun.kanti@ti.com> (raw)
In-Reply-To: <1310565259-31267-1-git-send-email-tarun.kanti@ti.com>

From: Charulatha V <charu@ti.com>

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>
---
 arch/arm/mach-omap2/gpio.c             |    6 ++++++
 arch/arm/plat-omap/include/plat/gpio.h |    1 +
 drivers/gpio/gpio-omap.c               |   13 ++++++-------
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
index f805cda..95195a8 100644
--- a/arch/arm/mach-omap2/gpio.c
+++ b/arch/arm/mach-omap2/gpio.c
@@ -24,6 +24,8 @@
 #include <plat/omap_hwmod.h>
 #include <plat/omap_device.h>
 
+#include "powerdomain.h"
+
 static struct omap_device_pm_latency omap_gpio_latency[] = {
 	[0] = {
 		.deactivate_func = omap_device_idle_hwmods,
@@ -39,6 +41,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
 	struct omap_gpio_dev_attr *dev_attr;
 	char *name = "omap_gpio";
 	int id;
+	struct powerdomain *pwrdm;
 
 	/*
 	 * extract the device id from name field available in the
@@ -107,6 +110,9 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
 		return -EINVAL;
 	}
 
+	pwrdm = omap_hwmod_get_pwrdm(oh);
+	pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
+
 	od = omap_device_build(name, id - 1, oh, pdata,
 				sizeof(*pdata),	omap_gpio_latency,
 				ARRAY_SIZE(omap_gpio_latency),
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
index dd330ed..58d0bf2 100644
--- a/arch/arm/plat-omap/include/plat/gpio.h
+++ b/arch/arm/plat-omap/include/plat/gpio.h
@@ -198,6 +198,7 @@ struct omap_gpio_platform_data {
 	int bank_width;		/* GPIO bank width */
 	int bank_stride;	/* Only needed for omap1 MPUIO */
 	bool dbck_flag;		/* dbck required or not - True for OMAP3&4 */
+	bool loses_context;	/* whether the bank would ever lose context */
 
 	struct omap_gpio_reg_offs *regs;
 };
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index b1333d8..93457bf 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;
@@ -1175,7 +1176,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)
@@ -1331,8 +1332,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++)
@@ -1399,8 +1399,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++)
@@ -1499,7 +1498,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 =
@@ -1533,7 +1532,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,
-- 
1.6.0.4


WARNING: multiple messages have this Message-ID (diff)
From: tarun.kanti@ti.com (Tarun Kanti DebBarma)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 02/20] gpio/omap: use flag to identify wakeup domain
Date: Wed, 13 Jul 2011 19:24:01 +0530	[thread overview]
Message-ID: <1310565259-31267-3-git-send-email-tarun.kanti@ti.com> (raw)
In-Reply-To: <1310565259-31267-1-git-send-email-tarun.kanti@ti.com>

From: Charulatha V <charu@ti.com>

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>
---
 arch/arm/mach-omap2/gpio.c             |    6 ++++++
 arch/arm/plat-omap/include/plat/gpio.h |    1 +
 drivers/gpio/gpio-omap.c               |   13 ++++++-------
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
index f805cda..95195a8 100644
--- a/arch/arm/mach-omap2/gpio.c
+++ b/arch/arm/mach-omap2/gpio.c
@@ -24,6 +24,8 @@
 #include <plat/omap_hwmod.h>
 #include <plat/omap_device.h>
 
+#include "powerdomain.h"
+
 static struct omap_device_pm_latency omap_gpio_latency[] = {
 	[0] = {
 		.deactivate_func = omap_device_idle_hwmods,
@@ -39,6 +41,7 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
 	struct omap_gpio_dev_attr *dev_attr;
 	char *name = "omap_gpio";
 	int id;
+	struct powerdomain *pwrdm;
 
 	/*
 	 * extract the device id from name field available in the
@@ -107,6 +110,9 @@ static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
 		return -EINVAL;
 	}
 
+	pwrdm = omap_hwmod_get_pwrdm(oh);
+	pdata->loses_context = pwrdm_can_ever_lose_context(pwrdm);
+
 	od = omap_device_build(name, id - 1, oh, pdata,
 				sizeof(*pdata),	omap_gpio_latency,
 				ARRAY_SIZE(omap_gpio_latency),
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
index dd330ed..58d0bf2 100644
--- a/arch/arm/plat-omap/include/plat/gpio.h
+++ b/arch/arm/plat-omap/include/plat/gpio.h
@@ -198,6 +198,7 @@ struct omap_gpio_platform_data {
 	int bank_width;		/* GPIO bank width */
 	int bank_stride;	/* Only needed for omap1 MPUIO */
 	bool dbck_flag;		/* dbck required or not - True for OMAP3&4 */
+	bool loses_context;	/* whether the bank would ever lose context */
 
 	struct omap_gpio_reg_offs *regs;
 };
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index b1333d8..93457bf 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;
@@ -1175,7 +1176,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)
@@ -1331,8 +1332,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++)
@@ -1399,8 +1399,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++)
@@ -1499,7 +1498,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 =
@@ -1533,7 +1532,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,
-- 
1.6.0.4

  parent reply	other threads:[~2011-07-13 13:54 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-13 13:53 [PATCH v4 00/20] gpio/omap: driver cleanup and fixes Tarun Kanti DebBarma
2011-07-13 13:53 ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 01/20] gpio/omap: remove dependency on gpio_bank_count Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` Tarun Kanti DebBarma [this message]
2011-07-13 13:54   ` [PATCH v4 02/20] gpio/omap: use flag to identify wakeup domain Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 03/20] gpio/omap: make gpio_context part of gpio_bank structure Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 04/20] gpio/omap: fix pwrdm_post_transition call sequence Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 05/20] gpio/omap: handle save/restore ctx in GPIO driver Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 06/20] gpio/omap: make non-wakeup GPIO part of pdata Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 07/20] gpio/omap: avoid cpu checks during module ena/disable Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 08/20] gpio/omap: further cleanup using wakeup_status register Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 09/20] gpio/omap: cleanup omap1 related macros Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 10/20] gpio/omap: use level/edge detect reg offsets Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 11/20] gpio/omap: remove hardcoded offsets in ctxt save/restore Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 12/20] gpio/omap: cleanup set_gpio_triggering function Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 13/20] gpio/omap: cleanup omap_gpio_mod_init function Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-14  5:56   ` Todd Poynor
2011-07-14  5:56     ` Todd Poynor
2011-07-14  5:57     ` DebBarma, Tarun Kanti
2011-07-14  5:57       ` DebBarma, Tarun Kanti
2011-07-13 13:54 ` [PATCH v4 14/20] gpio/omap: use pinctrl offset instead of macro Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 15/20] gpio/omap: use readl in irq_handler for all access Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 16/20] gpio/omap: remove bank->method & METHOD_* macros Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 17/20] gpio/omap: fix bankwidth for OMAP7xx MPUIO Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 18/20] gpio/omap: use pm-runtime framework Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-14  6:09   ` Todd Poynor
2011-07-14  6:09     ` Todd Poynor
2011-07-14  7:22     ` DebBarma, Tarun Kanti
2011-07-14  7:22       ` DebBarma, Tarun Kanti
2011-07-13 13:54 ` [PATCH v4 19/20] gpio/omap: optimize suspend and resume functions Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma
2011-07-13 13:54 ` [PATCH v4 20/20] gpio/omap: cleanup prepare_for_idle and resume_after_idle Tarun Kanti DebBarma
2011-07-13 13:54   ` Tarun Kanti DebBarma

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=1310565259-31267-3-git-send-email-tarun.kanti@ti.com \
    --to=tarun.kanti@ti.com \
    --cc=charu@ti.com \
    --cc=khilman@ti.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=santosh.shilimkar@ti.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.