Skip to contentSkip to conversation

s3c: Fix GPIOs bank H and J not being preserved during suspend on S3C24XX

PATCH New Christian Pellegrin 3 participants 5 messages Mar 30, 2010 – May 6, 2010

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 s3c: Fix GPIOs bank H and J not being preserved during suspend on S3C24XX

With this patch the platform-specific define for the last defined GPIO on S3C machines is used instead of a hard-coded value (which is right only for the s3c2410). The gpio_nr being incremented by 1 too much (look for the gpio_nr++ in the for instruction) is fixed too although it doesn't make any trouble on current S3C implementations.

---
 arch/arm/mach-s3c2410/include/mach/gpio-track.h |    2 +-
 arch/arm/plat-samsung/pm-gpio.c                 |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-s3c2410/include/mach/gpio-track.h +1 -1
index acb2591..6371eaa 100644
@@ -23,7 +23,7 @@ static inline struct s3c_gpio_chip *s3c_gpiolib_getchip(unsigned int pin)
 {
 	struct s3c_gpio_chip *chip;
 
-	if (pin > S3C2410_GPG(10))
+	if (pin > S3C_GPIO_END)
 		return NULL;
 
 	chip = &s3c24xx_gpios[pin/32];
arch/arm/plat-samsung/pm-gpio.c +1 -1
index 69a4c7f..1aac746 100644
@@ -343,7 +343,7 @@ void s3c_pm_save_gpios(void)
 			  ourchip->pm_save[2],
 			  ourchip->pm_save[3]);
 
-		gpio_nr += ourchip->chip.ngpio;
+		gpio_nr += ourchip->chip.ngpio - 1;
 		gpio_nr += CONFIG_S3C_GPIO_SPACE;
 	}
 }
Signature · 1 line
1.5.6.5
#1 lore raw

PATCH 1/1 s3c: Fix GPIOs bank H and J not being preserved during suspend on S3C24XX

? ????????? ?? 30 ????? 2010 11:23:06 ????? Christian Pellegrin ???????:

Quoted 7 lines

With this patch the platform-specific define for the last defined GPIO on S3C machines is used instead of a hard-coded value (which is right only for the s3c2410). The gpio_nr being incremented by 1 too much (look for the gpio_nr++ in the for instruction) is fixed too although it doesn't make any trouble on current S3C implementations.

Quoted 24 lines
---
 arch/arm/mach-s3c2410/include/mach/gpio-track.h |    2 +-
 arch/arm/plat-samsung/pm-gpio.c                 |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
(quoted diff) +0 -0

b/arch/arm/mach-s3c2410/include/mach/gpio-track.h index acb2591..6371eaa 100644

arch/arm/mach-s3c2410/include/mach/gpio-track.h +1 -1
@@ -23,7 +23,7 @@ static inline struct s3c_gpio_chip
 *s3c_gpiolib_getchip(unsigned int pin) {
 	struct s3c_gpio_chip *chip;
 
-	if (pin > S3C2410_GPG(10))
+	if (pin > S3C_GPIO_END)
 		return NULL;
 
 	chip = &s3c24xx_gpios[pin/32];
(quoted diff) +0 -0

b/arch/arm/plat-samsung/pm-gpio.c index 69a4c7f..1aac746 100644

arch/arm/plat-samsung/pm-gpio.c void s3c_pm_save_gpios(void) · line 349

Quoted 8 lines
arch/arm/plat-samsung/pm-gpio.c +1 -1
@@ -343,7 +343,7 @@ void s3c_pm_save_gpios(void)
 			  ourchip->pm_save[2],
 			  ourchip->pm_save[3]);
 
-		gpio_nr += ourchip->chip.ngpio;
+		gpio_nr += ourchip->chip.ngpio - 1;
 		gpio_nr += CONFIG_S3C_GPIO_SPACE;
 	}
 }

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100423/4a85e3ff/attachment.sig>

#2 lore raw

PATCH 1/1 s3c: Fix GPIOs bank H and J not being preserved during suspend on S3C24XX

In reply to Christian Pellegrin
Quoted 17 lines · Christian Pellegrin

With this patch the platform-specific define for the last defined GPIO on S3C machines is used instead of a hard-coded value (which is right only for the s3c2410). The gpio_nr being incremented by 1 too much (look for the gpio_nr++ in the for instruction) is fixed too although it doesn't make any trouble on current S3C implementations.

---
 arch/arm/mach-s3c2410/include/mach/gpio-track.h |    2 +-
 arch/arm/plat-samsung/pm-gpio.c                 |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/mach-s3c2410/include/mach/gpio-track.h +0 -0
index acb2591..6371eaa 100644

arch/arm/mach-s3c2410/include/mach/gpio-track.h static inline struct s3c_gpio_chip *s3c_gpiolib_getchip(unsigned int pin) · line 29

Quoted 8 lines
arch/arm/mach-s3c2410/include/mach/gpio-track.h +1 -1
@@ -23,7 +23,7 @@ static inline struct s3c_gpio_chip *s3c_gpiolib_getchip(unsigned int pin)
 {
 	struct s3c_gpio_chip *chip;
 
-	if (pin > S3C2410_GPG(10))
+	if (pin > S3C_GPIO_END)
 		return NULL;
 
 	chip = &s3c24xx_gpios[pin/32];

This may get removed in the up-comming s3c2410_gpio fallout, so I'll keep this in mind if it is needed. Series should be posted in the next few days.

arch/arm/plat-samsung/pm-gpio.c void s3c_pm_save_gpios(void) · line 349

Quoted 13 lines
arch/arm/plat-samsung/pm-gpio.c +1 -1
index 69a4c7f..1aac746 100644
@@ -343,7 +343,7 @@ void s3c_pm_save_gpios(void)
 			  ourchip->pm_save[2],
 			  ourchip->pm_save[3]);
 
-		gpio_nr += ourchip->chip.ngpio;
+		gpio_nr += ourchip->chip.ngpio - 1;
 		gpio_nr += CONFIG_S3C_GPIO_SPACE;
 	}
 }

Hmm, think a better fix for this would be to remove the gpio_nr++ in the for() loop.

could you send the gpio fix with the above change as a seperate patch please?

Signature · 4 lines
Ben

Q:      What's a light-year?
A:      One-third less calories than a regular year.
#3 lore raw

PATCH 1/1 s3c: Fix GPIOs bank H and J not being preserved during suspend on S3C24XX

Quoted 4 lines · Ben Dooks

could you send the gpio fix with the above change as a seperate patch please?

Yes, no problem, I'll just wait for the "up-comming s3c2410_gpio fallout" patches so I can test everything with the new functions.

BTW there is a nastiness in mixing old-style s3c24xx gpios and gpiolib ones for the J port found in the s3c2440. For the former you have to use S3C241?_GPJ* macros in regs-gpioj.h, for the later S3C2410_GPJ(). The reason of this is the "hole" in GPIO registers address which breaks S3C2410_GPIO_BASE. So I'm looking forward for your reorganization of s3c24xx gpio to see if a patch is needed for this. Right now I'm using:

(quoted diff) +0 -0

b/arch/arm/mach-s3c2410/include/mach/regs-gpio.h
index ebc85c6..a2eab90 100644

arch/arm/mach-s3c2410/include/mach/regs-gpio.h +10 -1
@@ -37,7 +37,16 @@
                                  S3C2400_BASEC2H(pin)+S3C24XX_VA_GPIO)
 
 
-#define S3C2410_GPIO_BASE(pin)   ((((pin) & ~31) >> 1) + S3C24XX_VA_GPIO)
+#if !defined(__ASSEMBLER__) && defined(S3C24XX_VA_GPIO)
+static inline void *S3C2410_GPIO_BASE(unsigned int pin)
+{
+	unsigned int off = (pin & ~31) >> 1;
+
+	if ((pin & ~31) == S3C2410_GPIO_J_START)
+		off += 0x50;
+	return S3C24XX_VA_GPIO + off;
+}
+#endif
 #define S3C2410_GPIO_OFFSET(pin) ((pin) & 31)
 

so if I use, by mistake, S3C2410_GPJ() in s3c2410_gpio_cfgpin I don't shoot myself in the foot. If I understand you intentions S3C241?_GPJ* will go away after the mentioned patch series. Anyway I wait for your reorganization of s3c gpios to resubmit these patches if needed.

Thanks,

Signature · 5 lines
Christian Pellegrin, see http://www.evolware.org/chri/
"Real Programmers don't play tennis, or any other sport which requires
you to change clothes. Mountain climbing is OK, and Real Programmers
wear their climbing boots to work in case a mountain should suddenly
spring up in the middle of the computer room."
#4 lore raw

PATCH 1/1 s3c: Fix GPIOs bank H and J not being preserved during suspend on S3C24XX

Quoted 10 lines · christian pellegrin
Quoted 4 lines · Ben Dooks

could you send the gpio fix with the above change as a seperate patch please?

Yes, no problem, I'll just wait for the "up-comming s3c2410_gpio fallout" patches so I can test everything with the new functions.

Quoted 7 lines

BTW there is a nastiness in mixing old-style s3c24xx gpios and gpiolib ones for the J port found in the s3c2440. For the former you have to use S3C241?_GPJ* macros in regs-gpioj.h, for the later S3C2410_GPJ(). The reason of this is the "hole" in GPIO registers address which breaks S3C2410_GPIO_BASE. So I'm looking forward for your reorganization of s3c24xx gpio to see if a patch is needed for this. Right now I'm using:

Yes, one of the reasons for these changes is to remove the gpio->regaddr mappings we've been keeping around for a while. Given the new gpiolib code it makes sense to base all the platform specific calls off the same numbering scheme and even use the same data structures.

I'll post a series from the following, possibly later today.

http://git.fluff.org/gitweb?p=bjdooks/linux.git;a=shortlog;h=refs/heads/for-2635/s3c24xx-gpio

Quoted 39 lines
arch/arm/mach-s3c2410/include/mach/regs-gpio.h +10 -1
index ebc85c6..a2eab90 100644
@@ -37,7 +37,16 @@
                                  S3C2400_BASEC2H(pin)+S3C24XX_VA_GPIO)
 
 
-#define S3C2410_GPIO_BASE(pin)   ((((pin) & ~31) >> 1) + S3C24XX_VA_GPIO)
+#if !defined(__ASSEMBLER__) && defined(S3C24XX_VA_GPIO)
+static inline void *S3C2410_GPIO_BASE(unsigned int pin)
+{
+	unsigned int off = (pin & ~31) >> 1;
+
+	if ((pin & ~31) == S3C2410_GPIO_J_START)
+		off += 0x50;
+	return S3C24XX_VA_GPIO + off;
+}
+#endif
 #define S3C2410_GPIO_OFFSET(pin) ((pin) & 31)
 

so if I use, by mistake, S3C2410_GPJ() in s3c2410_gpio_cfgpin I don't shoot myself in the foot. If I understand you intentions S3C241?_GPJ* will go away after the mentioned patch series. Anyway I wait for your reorganization of s3c gpios to resubmit these patches if needed.

Thanks,

Signature · 9 lines
Christian Pellegrin, see http://www.evolware.org/chri/
"Real Programmers don't play tennis, or any other sport which requires
you to change clothes. Mountain climbing is OK, and Real Programmers
wear their climbing boots to work in case a mountain should suddenly
spring up in the middle of the computer room."
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Signature · 5 lines
-- 
Ben

Q:      What's a light-year?
A:      One-third less calories than a regular year.