Skip to contentSkip to conversation

arm: exynos4: fix incorrect pad configuration for keypad row lines

PATCH New Thomas Abraham 3 participants 4 messages Sep 4, 2011 – Sep 15, 2011

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

PATCH 1/1 arm: exynos4: fix incorrect pad configuration for keypad row lines

The keypad controller requires a external pull-up for all the keypad row lines. Fix the incorrect pad configuration for keypad controller row lines by enabling the pad pull-up for the all row lines of the keypad controller.

---
SMDKV310 board does not have pull-up resistors populated for the keypad row lines (unlike the smdk boards for the previous Samsung SoC's). So the pad pull-up for all keypad row lines should be enabled for smdkv310 board.

The default requirement for the keypad controller is to enable the pull-up for all the keypad row lines. If a exynos4 based board has on-board pull-up's populated for keypad row lines, this patch would cause no harm. And in such cases, if internal pad pull-up is to be disabled (to reduce some power consumption), an alternative gpio configuration function can be supplied that does not enable the internal pad pull-up.

---
 arch/arm/mach-exynos4/setup-keypad.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)
arch/arm/mach-exynos4/setup-keypad.c +6 -5
index 1ee0ebf..7862bfb 100644
@@ -19,15 +19,16 @@ void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)
 
 	if (rows > 8) {
 		/* Set all the necessary GPX2 pins: KP_ROW[0~7] */
-		s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), 8, S3C_GPIO_SFN(3));
+		s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), 8, S3C_GPIO_SFN(3),
+					S3C_GPIO_PULL_UP);
 
 		/* Set all the necessary GPX3 pins: KP_ROW[8~] */
-		s3c_gpio_cfgrange_nopull(EXYNOS4_GPX3(0), (rows - 8),
-					 S3C_GPIO_SFN(3));
+		s3c_gpio_cfgall_range(EXYNOS4_GPX3(0), (rows - 8),
+					 S3C_GPIO_SFN(3), S3C_GPIO_PULL_UP);
 	} else {
 		/* Set all the necessary GPX2 pins: KP_ROW[x] */
-		s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), rows,
-					 S3C_GPIO_SFN(3));
+		s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), rows, S3C_GPIO_SFN(3),
+					S3C_GPIO_PULL_UP);
 	}
 
 	/* Set all the necessary GPX1 pins to special-function 3: KP_COL[x] */
Signature · 1 line
1.6.6.rc2
#1 lore raw

PATCH 1/1 arm: exynos4: fix incorrect pad configuration for keypad row lines

Quoted 4 lines

SMDKV310 board does not have pull-up resistors populated for the keypad row lines (unlike the smdk boards for the previous Samsung SoC's). So the pad pull-up for all keypad row lines should be enabled for smdkv310 board.

So does this change the behaviour of existing boards, and if so isn't it the SMDKV310 that hould be providing the alternate gpio configuration function ?

#2 lore raw

PATCH 1/1 arm: exynos4: fix incorrect pad configuration for keypad row lines

Hi Alan,

Quoted 8 lines · Alan Cox
Quoted 4 lines

SMDKV310 board does not have pull-up resistors populated for the keypad row lines (unlike the smdk boards for the previous Samsung SoC's). So the pad pull-up for all keypad row lines should be enabled for smdkv310 board.

So does this change the behaviour of existing boards, and if so isn't it the SMDKV310 that hould be providing the alternate gpio configuration function ?

Among the boards based on the Exynos4 SoC, only the smdk boards use the keypad controller for connecting the keys on the board. All other boards either use gpio keys or use some other mechanism for keyboard input. So this patch is applicable to only the existing exynos4 soc based smdk boards.

A pull-up for all the row lines is the default requirement of the keypad controller. So, in this patch, the default gpio and pad configuration function for keypad controller enables the internal pad pull-up. If a upcoming board based on exynos4 does populate pull-up for row lines on the board of the keypad, this patch would still not break anything. If required, such boards could provide another gpio and pad configuration function that disables the internal pull-up.

This patch modifies only the exynos4 keypad gpio/pad configuration setup function. All previous Samsung SoC's are not affected by this patch.

Thanks,
Thomas.

Quoted 2 lines
#3 lore raw

PATCH 1/1 arm: exynos4: fix incorrect pad configuration for keypad row lines

In reply to Thomas Abraham
Quoted 52 lines · Thomas Abraham

The keypad controller requires a external pull-up for all the keypad row lines. Fix the incorrect pad configuration for keypad controller row lines by enabling the pad pull-up for the all row lines of the keypad controller.

---
SMDKV310 board does not have pull-up resistors populated for the keypad row lines (unlike the smdk boards for the previous Samsung SoC's). So the pad pull-up for all keypad row lines should be enabled for smdkv310 board.

The default requirement for the keypad controller is to enable the pull-up for all the keypad row lines. If a exynos4 based board has on-board pull-up's populated for keypad row lines, this patch would cause no harm. And in such cases, if internal pad pull-up is to be disabled (to reduce some power consumption), an alternative gpio configuration function can be supplied that does not enable the internal pad pull-up.

---
 arch/arm/mach-exynos4/setup-keypad.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)
arch/arm/mach- renamed from arch/arm/mach-exynos4/setup-keypad.c +0 -0

exynos4/setup-keypad.c
index 1ee0ebf..7862bfb 100644

arch/arm/mach-exynos4/setup-keypad.c +5 -5
@@ -19,15 +19,16 @@ void samsung_keypad_cfg_gpio(unsigned int rows,
 unsigned int cols)
 
 	if (rows > 8) {
 		/* Set all the necessary GPX2 pins: KP_ROW[0~7] */
-		s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), 8,
 S3C_GPIO_SFN(3));
+		s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), 8,
 S3C_GPIO_SFN(3),
+					S3C_GPIO_PULL_UP);
 
 		/* Set all the necessary GPX3 pins: KP_ROW[8~] */
-		s3c_gpio_cfgrange_nopull(EXYNOS4_GPX3(0), (rows - 8),
-					 S3C_GPIO_SFN(3));
+		s3c_gpio_cfgall_range(EXYNOS4_GPX3(0), (rows - 8),
+					 S3C_GPIO_SFN(3),
 S3C_GPIO_PULL_UP);
 	} else {
 		/* Set all the necessary GPX2 pins: KP_ROW[x] */
-		s3c_gpio_cfgrange_nopull(EXYNOS4_GPX2(0), rows,
-					 S3C_GPIO_SFN(3));
+		s3c_gpio_cfgall_range(EXYNOS4_GPX2(0), rows,

S3C_GPIO_SFN(3),

arch/arm/mach-exynos4/setup-keypad.c void samsung_keypad_cfg_gpio(unsigned int rows, unsigned int cols)

Quoted 4 lines
arch/arm/mach-exynos4/setup-keypad.c +1 -0
+					S3C_GPIO_PULL_UP);
 	}
 
 	/* Set all the necessary GPX1 pins to special-function 3: KP_COL[x]

*/

Quoted 2 lines

--
1.6.6.rc2

Oops, you're right, applied.
Thanks.

Best regards,
Kgene.
--
Kukjin Kim <[email protected]>, Senior Engineer, SW Solution Development Team, Samsung Electronics Co., Ltd.