linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/5] ARM: pxa168: add keypad support
@ 2010-08-26  9:18 Mark F. Brown
  2010-08-26  9:18 ` [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory Mark F. Brown
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Mark F. Brown @ 2010-08-26  9:18 UTC (permalink / raw)
  To: Eric Miao, Haojian Zhuang, Mark F. Brown, linux-arm-kernel,
	linux-kernel, linux-input
  Cc: Mark F. Brown

In order to add keypad support for pxa168

1) Make pxa27x_keypad.h accessible to mach-mmp
2) Add a special interrupt handler for pxa168 keypad interrupts
This interrupt handler fixes an issue on the SoC that prevents the
keypad driver from being able to clear the keypad interrupt.
3) Add initial board level support

Mark F. Brown (5):
  ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory
  ARM: pxa168: added keypad support
  ARM: pxa168: added wake clear register support for APMU
  ARM: pxa168: added special case handler for keypad interrupts
  ARM: pxa168: aspenite: add board support for keypad

 arch/arm/mach-mmp/aspenite.c                   |   27 +++++++++++
 arch/arm/mach-mmp/include/mach/mfp-pxa168.h    |    7 +++
 arch/arm/mach-mmp/include/mach/pxa168.h        |    7 +++
 arch/arm/mach-mmp/include/mach/regs-apmu.h     |   12 +++++
 arch/arm/mach-mmp/irq-pxa168.c                 |   23 +++++++++-
 arch/arm/mach-mmp/pxa168.c                     |    3 +
 arch/arm/mach-pxa/devices.c                    |    2 +-
 arch/arm/mach-pxa/em-x270.c                    |    2 +-
 arch/arm/mach-pxa/ezx.c                        |    2 +-
 arch/arm/mach-pxa/include/mach/pxa27x_keypad.h |   59 ------------------------
 arch/arm/mach-pxa/littleton.c                  |    2 +-
 arch/arm/mach-pxa/mainstone.c                  |    4 +-
 arch/arm/mach-pxa/mioa701.c                    |    2 +-
 arch/arm/mach-pxa/palmld.c                     |    2 +-
 arch/arm/mach-pxa/palmt5.c                     |    2 +-
 arch/arm/mach-pxa/palmtreo.c                   |    2 +-
 arch/arm/mach-pxa/palmtx.c                     |    2 +-
 arch/arm/mach-pxa/palmz72.c                    |    2 +-
 arch/arm/mach-pxa/tavorevb.c                   |    2 +-
 arch/arm/mach-pxa/z2.c                         |    2 +-
 arch/arm/mach-pxa/zylonite.c                   |    2 +-
 arch/arm/plat-pxa/include/plat/pxa27x_keypad.h |   59 ++++++++++++++++++++++++
 drivers/input/keyboard/Kconfig                 |    2 +-
 drivers/input/keyboard/pxa27x_keypad.c         |    2 +-
 24 files changed, 154 insertions(+), 77 deletions(-)
 delete mode 100644 arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
 create mode 100644 arch/arm/plat-pxa/include/plat/pxa27x_keypad.h


^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory
  2010-08-26  9:18 [PATCH 0/5] ARM: pxa168: add keypad support Mark F. Brown
@ 2010-08-26  9:18 ` Mark F. Brown
  2010-08-31  4:13   ` Eric Miao
  2010-08-26  9:18 ` [PATCH 2/5] ARM: pxa168: added keypad support Mark F. Brown
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-08-26  9:18 UTC (permalink / raw)
  To: Eric Miao, Haojian Zhuang, Mark F. Brown, linux-arm-kernel,
	linux-kernel, linux-input
  Cc: Mark F. Brown

mach-mmp utilizes pxa27x_keypad code so we need to move header to
platform pxa directory.

Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
---
 arch/arm/mach-pxa/devices.c                    |    2 +-
 arch/arm/mach-pxa/em-x270.c                    |    2 +-
 arch/arm/mach-pxa/ezx.c                        |    2 +-
 arch/arm/mach-pxa/include/mach/pxa27x_keypad.h |   59 ------------------------
 arch/arm/mach-pxa/littleton.c                  |    2 +-
 arch/arm/mach-pxa/mainstone.c                  |    4 +-
 arch/arm/mach-pxa/mioa701.c                    |    2 +-
 arch/arm/mach-pxa/palmld.c                     |    2 +-
 arch/arm/mach-pxa/palmt5.c                     |    2 +-
 arch/arm/mach-pxa/palmtreo.c                   |    2 +-
 arch/arm/mach-pxa/palmtx.c                     |    2 +-
 arch/arm/mach-pxa/palmz72.c                    |    2 +-
 arch/arm/mach-pxa/tavorevb.c                   |    2 +-
 arch/arm/mach-pxa/z2.c                         |    2 +-
 arch/arm/mach-pxa/zylonite.c                   |    2 +-
 arch/arm/plat-pxa/include/plat/pxa27x_keypad.h |   59 ++++++++++++++++++++++++
 drivers/input/keyboard/pxa27x_keypad.c         |    2 +-
 17 files changed, 75 insertions(+), 75 deletions(-)
 delete mode 100644 arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
 create mode 100644 arch/arm/plat-pxa/include/plat/pxa27x_keypad.h

diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
index a2fc859..08b4103 100644
--- a/arch/arm/mach-pxa/devices.c
+++ b/arch/arm/mach-pxa/devices.c
@@ -11,7 +11,7 @@
 #include <mach/mmc.h>
 #include <mach/irda.h>
 #include <mach/ohci.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/pxa2xx_spi.h>
 #include <mach/camera.h>
 #include <mach/audio.h>
diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c
index 0517c17..51286a7 100644
--- a/arch/arm/mach-pxa/em-x270.c
+++ b/arch/arm/mach-pxa/em-x270.c
@@ -43,7 +43,7 @@
 #include <mach/pxafb.h>
 #include <mach/ohci.h>
 #include <mach/mmc.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <plat/i2c.h>
 #include <mach/camera.h>
 #include <mach/pxa2xx_spi.h>
diff --git a/arch/arm/mach-pxa/ezx.c b/arch/arm/mach-pxa/ezx.c
index 3fe61f4..f997e84 100644
--- a/arch/arm/mach-pxa/ezx.c
+++ b/arch/arm/mach-pxa/ezx.c
@@ -32,7 +32,7 @@
 #include <mach/ohci.h>
 #include <plat/i2c.h>
 #include <mach/hardware.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/camera.h>
 
 #include "devices.h"
diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
deleted file mode 100644
index 7b4eadc..0000000
--- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef __ASM_ARCH_PXA27x_KEYPAD_H
-#define __ASM_ARCH_PXA27x_KEYPAD_H
-
-#include <linux/input.h>
-#include <linux/input/matrix_keypad.h>
-
-#define MAX_MATRIX_KEY_ROWS	(8)
-#define MAX_MATRIX_KEY_COLS	(8)
-#define MATRIX_ROW_SHIFT	(3)
-#define MAX_DIRECT_KEY_NUM	(8)
-
-/* pxa3xx keypad platform specific parameters
- *
- * NOTE:
- * 1. direct_key_num indicates the number of keys in the direct keypad
- *    _plus_ the number of rotary-encoder sensor inputs,  this can be
- *    left as 0 if only rotary encoders are enabled,  the driver will
- *    automatically calculate this
- *
- * 2. direct_key_map is the key code map for the direct keys, if rotary
- *    encoder(s) are enabled, direct key 0/1(2/3) will be ignored
- *
- * 3. rotary can be either interpreted as a relative input event (e.g.
- *    REL_WHEEL/REL_HWHEEL) or specific keys (e.g. UP/DOWN/LEFT/RIGHT)
- *
- * 4. matrix key and direct key will use the same debounce_interval by
- *    default, which should be sufficient in most cases
- */
-struct pxa27x_keypad_platform_data {
-
-	/* code map for the matrix keys */
-	unsigned int	matrix_key_rows;
-	unsigned int	matrix_key_cols;
-	unsigned int	*matrix_key_map;
-	int		matrix_key_map_size;
-
-	/* direct keys */
-	int		direct_key_num;
-	unsigned int	direct_key_map[MAX_DIRECT_KEY_NUM];
-
-	/* rotary encoders 0 */
-	int		enable_rotary0;
-	int		rotary0_rel_code;
-	int		rotary0_up_key;
-	int		rotary0_down_key;
-
-	/* rotary encoders 1 */
-	int		enable_rotary1;
-	int		rotary1_rel_code;
-	int		rotary1_up_key;
-	int		rotary1_down_key;
-
-	/* key debounce interval */
-	unsigned int	debounce_interval;
-};
-
-extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
-
-#endif /* __ASM_ARCH_PXA27x_KEYPAD_H */
diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c
index 83f3236..eb58506 100644
--- a/arch/arm/mach-pxa/littleton.c
+++ b/arch/arm/mach-pxa/littleton.c
@@ -43,7 +43,7 @@
 #include <mach/pxafb.h>
 #include <mach/mmc.h>
 #include <mach/pxa2xx_spi.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/littleton.h>
 #include <plat/i2c.h>
 #include <plat/pxa3xx_nand.h>
diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
index c2a8717..126dca1 100644
--- a/arch/arm/mach-pxa/mainstone.c
+++ b/arch/arm/mach-pxa/mainstone.c
@@ -41,7 +41,7 @@
 #include <asm/mach/irq.h>
 #include <asm/mach/flash.h>
 
-#include <mach/pxa27x.h>
+#include <plat/pxa27x.h>
 #include <mach/gpio.h>
 #include <mach/mainstone.h>
 #include <mach/audio.h>
@@ -50,7 +50,7 @@
 #include <mach/mmc.h>
 #include <mach/irda.h>
 #include <mach/ohci.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 
 #include "generic.h"
 #include "devices.h"
diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
index dc66942..ffb3f5a 100644
--- a/arch/arm/mach-pxa/mioa701.c
+++ b/arch/arm/mach-pxa/mioa701.c
@@ -45,7 +45,7 @@
 
 #include <mach/pxa27x.h>
 #include <mach/regs-rtc.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/pxafb.h>
 #include <mach/mmc.h>
 #include <mach/udc.h>
diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c
index 91038ee..3ff0c4a 100644
--- a/arch/arm/mach-pxa/palmld.c
+++ b/arch/arm/mach-pxa/palmld.c
@@ -39,7 +39,7 @@
 #include <mach/mmc.h>
 #include <mach/pxafb.h>
 #include <mach/irda.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/palmasoc.h>
 #include <mach/palm27x.h>
 
diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c
index 1c28199..5b9f766 100644
--- a/arch/arm/mach-pxa/palmt5.c
+++ b/arch/arm/mach-pxa/palmt5.c
@@ -39,7 +39,7 @@
 #include <mach/mmc.h>
 #include <mach/pxafb.h>
 #include <mach/irda.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
 #include <mach/palm27x.h>
diff --git a/arch/arm/mach-pxa/palmtreo.c b/arch/arm/mach-pxa/palmtreo.c
index 52defd5..f685a60 100644
--- a/arch/arm/mach-pxa/palmtreo.c
+++ b/arch/arm/mach-pxa/palmtreo.c
@@ -39,7 +39,7 @@
 #include <mach/mmc.h>
 #include <mach/pxafb.h>
 #include <mach/irda.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/ohci.h>
 #include <mach/pxa2xx-regs.h>
diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c
index 144dc2b..89a3792 100644
--- a/arch/arm/mach-pxa/palmtx.c
+++ b/arch/arm/mach-pxa/palmtx.c
@@ -43,7 +43,7 @@
 #include <mach/mmc.h>
 #include <mach/pxafb.h>
 #include <mach/irda.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
 #include <mach/palm27x.h>
diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c
index 87e4b10..38f4425 100644
--- a/arch/arm/mach-pxa/palmz72.c
+++ b/arch/arm/mach-pxa/palmz72.c
@@ -41,7 +41,7 @@
 #include <mach/mmc.h>
 #include <mach/pxafb.h>
 #include <mach/irda.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/udc.h>
 #include <mach/palmasoc.h>
 #include <mach/palm27x.h>
diff --git a/arch/arm/mach-pxa/tavorevb.c b/arch/arm/mach-pxa/tavorevb.c
index f02dcb5..0f440c9 100644
--- a/arch/arm/mach-pxa/tavorevb.c
+++ b/arch/arm/mach-pxa/tavorevb.c
@@ -25,7 +25,7 @@
 
 #include <mach/pxa930.h>
 #include <mach/pxafb.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 
 #include "devices.h"
 #include "generic.h"
diff --git a/arch/arm/mach-pxa/z2.c b/arch/arm/mach-pxa/z2.c
index f0d0228..8c44bc4 100644
--- a/arch/arm/mach-pxa/z2.c
+++ b/arch/arm/mach-pxa/z2.c
@@ -37,7 +37,7 @@
 #include <mach/z2.h>
 #include <mach/pxafb.h>
 #include <mach/mmc.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <mach/pxa2xx_spi.h>
 
 #include <plat/i2c.h>
diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
index 2edad61..69df3ed 100644
--- a/arch/arm/mach-pxa/zylonite.c
+++ b/arch/arm/mach-pxa/zylonite.c
@@ -30,7 +30,7 @@
 #include <mach/zylonite.h>
 #include <mach/mmc.h>
 #include <mach/ohci.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 #include <plat/pxa3xx_nand.h>
 
 #include "devices.h"
diff --git a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
new file mode 100644
index 0000000..7b4eadc
--- /dev/null
+++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
@@ -0,0 +1,59 @@
+#ifndef __ASM_ARCH_PXA27x_KEYPAD_H
+#define __ASM_ARCH_PXA27x_KEYPAD_H
+
+#include <linux/input.h>
+#include <linux/input/matrix_keypad.h>
+
+#define MAX_MATRIX_KEY_ROWS	(8)
+#define MAX_MATRIX_KEY_COLS	(8)
+#define MATRIX_ROW_SHIFT	(3)
+#define MAX_DIRECT_KEY_NUM	(8)
+
+/* pxa3xx keypad platform specific parameters
+ *
+ * NOTE:
+ * 1. direct_key_num indicates the number of keys in the direct keypad
+ *    _plus_ the number of rotary-encoder sensor inputs,  this can be
+ *    left as 0 if only rotary encoders are enabled,  the driver will
+ *    automatically calculate this
+ *
+ * 2. direct_key_map is the key code map for the direct keys, if rotary
+ *    encoder(s) are enabled, direct key 0/1(2/3) will be ignored
+ *
+ * 3. rotary can be either interpreted as a relative input event (e.g.
+ *    REL_WHEEL/REL_HWHEEL) or specific keys (e.g. UP/DOWN/LEFT/RIGHT)
+ *
+ * 4. matrix key and direct key will use the same debounce_interval by
+ *    default, which should be sufficient in most cases
+ */
+struct pxa27x_keypad_platform_data {
+
+	/* code map for the matrix keys */
+	unsigned int	matrix_key_rows;
+	unsigned int	matrix_key_cols;
+	unsigned int	*matrix_key_map;
+	int		matrix_key_map_size;
+
+	/* direct keys */
+	int		direct_key_num;
+	unsigned int	direct_key_map[MAX_DIRECT_KEY_NUM];
+
+	/* rotary encoders 0 */
+	int		enable_rotary0;
+	int		rotary0_rel_code;
+	int		rotary0_up_key;
+	int		rotary0_down_key;
+
+	/* rotary encoders 1 */
+	int		enable_rotary1;
+	int		rotary1_rel_code;
+	int		rotary1_up_key;
+	int		rotary1_down_key;
+
+	/* key debounce interval */
+	unsigned int	debounce_interval;
+};
+
+extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
+
+#endif /* __ASM_ARCH_PXA27x_KEYPAD_H */
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index 0e53b3b..0610d10 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -32,7 +32,7 @@
 #include <asm/mach/map.h>
 
 #include <mach/hardware.h>
-#include <mach/pxa27x_keypad.h>
+#include <plat/pxa27x_keypad.h>
 /*
  * Keypad Controller registers
  */
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/5] ARM: pxa168: added keypad support
  2010-08-26  9:18 [PATCH 0/5] ARM: pxa168: add keypad support Mark F. Brown
  2010-08-26  9:18 ` [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory Mark F. Brown
@ 2010-08-26  9:18 ` Mark F. Brown
  2010-08-31  4:56   ` Haojian Zhuang
  2010-08-26  9:18 ` [PATCH 3/5] ARM: pxa168: added wake clear register support for APMU Mark F. Brown
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-08-26  9:18 UTC (permalink / raw)
  To: Eric Miao, Haojian Zhuang, Mark F. Brown, linux-arm-kernel,
	linux-kernel, linux-input
  Cc: Mark F. Brown

Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
---
 arch/arm/mach-mmp/include/mach/mfp-pxa168.h |    7 +++++++
 arch/arm/mach-mmp/include/mach/pxa168.h     |    7 +++++++
 arch/arm/mach-mmp/pxa168.c                  |    3 +++
 drivers/input/keyboard/Kconfig              |    2 +-
 4 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h
index ded43c4..4621067 100644
--- a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h
+++ b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h
@@ -289,4 +289,11 @@
 #define GPIO86_PWM1_OUT		MFP_CFG(GPIO86, AF2)
 #define GPIO86_PWM2_OUT		MFP_CFG(GPIO86, AF3)
 
+/* Keypad */
+#define GPIO109_KP_MKIN1        MFP_CFG(GPIO109, AF7)
+#define GPIO110_KP_MKIN0        MFP_CFG(GPIO110, AF7)
+#define GPIO111_KP_MKOUT7       MFP_CFG(GPIO111, AF7)
+#define GPIO112_KP_MKOUT6       MFP_CFG(GPIO112, AF7)
+#define GPIO121_KP_MKIN4        MFP_CFG(GPIO121, AF7)
+
 #endif /* __ASM_MACH_MFP_PXA168_H */
diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h b/arch/arm/mach-mmp/include/mach/pxa168.h
index 220738f..f34e663 100644
--- a/arch/arm/mach-mmp/include/mach/pxa168.h
+++ b/arch/arm/mach-mmp/include/mach/pxa168.h
@@ -11,6 +11,7 @@ extern void __init pxa168_init_irq(void);
 #include <plat/i2c.h>
 #include <plat/pxa3xx_nand.h>
 #include <video/pxa168fb.h>
+#include <plat/pxa27x_keypad.h>
 
 extern struct pxa_device_desc pxa168_device_uart1;
 extern struct pxa_device_desc pxa168_device_uart2;
@@ -27,6 +28,7 @@ extern struct pxa_device_desc pxa168_device_ssp4;
 extern struct pxa_device_desc pxa168_device_ssp5;
 extern struct pxa_device_desc pxa168_device_nand;
 extern struct pxa_device_desc pxa168_device_fb;
+extern struct pxa_device_desc pxa168_device_keypad;
 
 static inline int pxa168_add_uart(int id)
 {
@@ -105,4 +107,9 @@ static inline int pxa168_add_fb(struct pxa168fb_mach_info *mi)
 	return pxa_register_device(&pxa168_device_fb, mi, sizeof(*mi));
 }
 
+static inline int pxa168_add_keypad(struct pxa27x_keypad_platform_data *data)
+{
+	return pxa_register_device(&pxa168_device_keypad, data, sizeof(*data));
+}
+
 #endif /* __ASM_MACH_PXA168_H */
diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c
index eaebf66..2fa16fb 100644
--- a/arch/arm/mach-mmp/pxa168.c
+++ b/arch/arm/mach-mmp/pxa168.c
@@ -77,6 +77,7 @@ static APBC_CLK(ssp2, PXA168_SSP2, 4, 0);
 static APBC_CLK(ssp3, PXA168_SSP3, 4, 0);
 static APBC_CLK(ssp4, PXA168_SSP4, 4, 0);
 static APBC_CLK(ssp5, PXA168_SSP5, 4, 0);
+static APBC_CLK(keypad, PXA168_KPC, 0, 32000);
 
 static APMU_CLK(nand, NAND, 0x01db, 208000000);
 static APMU_CLK(lcd, LCD, 0x7f, 312000000);
@@ -98,6 +99,7 @@ static struct clk_lookup pxa168_clkregs[] = {
 	INIT_CLKREG(&clk_ssp5, "pxa168-ssp.4", NULL),
 	INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
 	INIT_CLKREG(&clk_lcd, "pxa168-fb", NULL),
+	INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL),
 };
 
 static int __init pxa168_init(void)
@@ -150,3 +152,4 @@ PXA168_DEVICE(ssp3, "pxa168-ssp", 2, SSP3, 0xd401f000, 0x40, 56, 57);
 PXA168_DEVICE(ssp4, "pxa168-ssp", 3, SSP4, 0xd4020000, 0x40, 58, 59);
 PXA168_DEVICE(ssp5, "pxa168-ssp", 4, SSP5, 0xd4021000, 0x40, 60, 61);
 PXA168_DEVICE(fb, "pxa168-fb", -1, LCD, 0xd420b000, 0x1c8);
+PXA168_DEVICE(keypad, "pxa27x-keypad", -1, KEYPAD, 0xd4012000, 0x4c);
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index 9cc488d..aa037fe 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -338,7 +338,7 @@ config KEYBOARD_OPENCORES
 
 config KEYBOARD_PXA27x
 	tristate "PXA27x/PXA3xx keypad support"
-	depends on PXA27x || PXA3xx
+	depends on PXA27x || PXA3xx || ARCH_MMP
 	help
 	  Enable support for PXA27x/PXA3xx keypad controller.
 
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/5] ARM: pxa168: added wake clear register support for APMU
  2010-08-26  9:18 [PATCH 0/5] ARM: pxa168: add keypad support Mark F. Brown
  2010-08-26  9:18 ` [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory Mark F. Brown
  2010-08-26  9:18 ` [PATCH 2/5] ARM: pxa168: added keypad support Mark F. Brown
@ 2010-08-26  9:18 ` Mark F. Brown
  2010-08-26  9:18 ` [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts Mark F. Brown
  2010-08-26  9:18 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Mark F. Brown
  4 siblings, 0 replies; 17+ messages in thread
From: Mark F. Brown @ 2010-08-26  9:18 UTC (permalink / raw)
  To: Eric Miao, Haojian Zhuang, Mark F. Brown, linux-arm-kernel,
	linux-kernel, linux-input
  Cc: Mark F. Brown

Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
---
 arch/arm/mach-mmp/include/mach/regs-apmu.h |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-mmp/include/mach/regs-apmu.h b/arch/arm/mach-mmp/include/mach/regs-apmu.h
index 9190305..ac47023 100644
--- a/arch/arm/mach-mmp/include/mach/regs-apmu.h
+++ b/arch/arm/mach-mmp/include/mach/regs-apmu.h
@@ -33,4 +33,16 @@
 #define APMU_FNRST_DIS	(1 << 1)
 #define APMU_AXIRST_DIS	(1 << 0)
 
+/* Wake Clear Register */
+#define APMU_WAKE_CLR	APMU_REG(0x07c)
+
+#define APMU_PXA168_KP_WAKE_CLR		(1 << 7)
+#define APMU_PXA168_CFI_WAKE_CLR	(1 << 6)
+#define APMU_PXA168_XD_WAKE_CLR		(1 << 5)
+#define APMU_PXA168_MSP_WAKE_CLR	(1 << 4)
+#define APMU_PXA168_SD4_WAKE_CLR	(1 << 3)
+#define APMU_PXA168_SD3_WAKE_CLR	(1 << 2)
+#define APMU_PXA168_SD2_WAKE_CLR	(1 << 1)
+#define APMU_PXA168_SD1_WAKE_CLR	(1 << 0)
+
 #endif /* __ASM_MACH_REGS_APMU_H */
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
  2010-08-26  9:18 [PATCH 0/5] ARM: pxa168: add keypad support Mark F. Brown
                   ` (2 preceding siblings ...)
  2010-08-26  9:18 ` [PATCH 3/5] ARM: pxa168: added wake clear register support for APMU Mark F. Brown
@ 2010-08-26  9:18 ` Mark F. Brown
  2010-08-31  4:53   ` Haojian Zhuang
  2010-08-26  9:18 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Mark F. Brown
  4 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-08-26  9:18 UTC (permalink / raw)
  To: Eric Miao, Haojian Zhuang, Mark F. Brown, linux-arm-kernel,
	linux-kernel, linux-input
  Cc: Mark F. Brown

Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
---
 arch/arm/mach-mmp/irq-pxa168.c |   23 ++++++++++++++++++++++-
 1 files changed, 22 insertions(+), 1 deletions(-)

diff --git a/arch/arm/mach-mmp/irq-pxa168.c b/arch/arm/mach-mmp/irq-pxa168.c
index 52ff2f0..bfb0984 100644
--- a/arch/arm/mach-mmp/irq-pxa168.c
+++ b/arch/arm/mach-mmp/irq-pxa168.c
@@ -17,6 +17,8 @@
 #include <linux/io.h>
 
 #include <mach/regs-icu.h>
+#include <mach/regs-apmu.h>
+#include <mach/cputype.h>
 
 #include "common.h"
 
@@ -42,6 +44,19 @@ static struct irq_chip icu_irq_chip = {
 	.unmask	= icu_unmask_irq,
 };
 
+void handle_pxa168_keypad_irq(unsigned int irq, struct irq_desc *desc)
+{
+	uint32_t val;
+	uint32_t mask = APMU_PXA168_KP_WAKE_CLR;
+
+	/* clear keypad wake event */
+	val = __raw_readl(APMU_WAKE_CLR);
+	__raw_writel(val |  mask, APMU_WAKE_CLR);
+
+	/* handle irq */
+	handle_level_irq(irq, desc);
+}
+
 void __init icu_init_irq(void)
 {
 	int irq;
@@ -49,7 +64,13 @@ void __init icu_init_irq(void)
 	for (irq = 0; irq < 64; irq++) {
 		icu_mask_irq(irq);
 		set_irq_chip(irq, &icu_irq_chip);
-		set_irq_handler(irq, handle_level_irq);
+
+		/* special handler for keypad */
+		if (cpu_is_pxa168() && irq == IRQ_PXA168_KEYPAD)
+			set_irq_handler(irq, handle_pxa168_keypad_irq);
+		else
+			set_irq_handler(irq, handle_level_irq);
+
 		set_irq_flags(irq, IRQF_VALID);
 	}
 }
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
  2010-08-26  9:18 [PATCH 0/5] ARM: pxa168: add keypad support Mark F. Brown
                   ` (3 preceding siblings ...)
  2010-08-26  9:18 ` [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts Mark F. Brown
@ 2010-08-26  9:18 ` Mark F. Brown
  2010-08-31  5:00   ` Haojian Zhuang
  4 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-08-26  9:18 UTC (permalink / raw)
  To: Eric Miao, Haojian Zhuang, Mark F. Brown, linux-arm-kernel,
	linux-kernel, linux-input
  Cc: Mark F. Brown

Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
---
 arch/arm/mach-mmp/aspenite.c |   27 +++++++++++++++++++++++++++
 1 files changed, 27 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
index 9e1bd6b..1b788c5 100644
--- a/arch/arm/mach-mmp/aspenite.c
+++ b/arch/arm/mach-mmp/aspenite.c
@@ -24,6 +24,8 @@
 #include <mach/pxa168.h>
 #include <mach/gpio.h>
 #include <video/pxa168fb.h>
+#include <linux/input.h>
+#include <plat/pxa27x_keypad.h>
 
 #include "common.h"
 
@@ -97,6 +99,13 @@ static unsigned long common_pin_config[] __initdata = {
 	GPIO81_LCD_DD21,
 	GPIO82_LCD_DD22,
 	GPIO83_LCD_DD23,
+
+	/* Keypad */
+	GPIO109_KP_MKIN1,
+	GPIO110_KP_MKIN0,
+	GPIO111_KP_MKOUT7,
+	GPIO112_KP_MKOUT6,
+	GPIO121_KP_MKIN4,
 };
 
 static struct smc91x_platdata smc91x_info = {
@@ -193,6 +202,23 @@ struct pxa168fb_mach_info aspenite_lcd_info = {
 	.invert_pixclock	= 0,
 };
 
+static unsigned int aspenite_matrix_key_map[] = {
+	KEY(0, 6, KEY_UP),	/* SW 4 */
+	KEY(0, 7, KEY_DOWN),	/* SW 5 */
+	KEY(1, 6, KEY_LEFT),	/* SW 6 */
+	KEY(1, 7, KEY_RIGHT),	/* SW 7 */
+	KEY(4, 6, KEY_ENTER),	/* SW 8 */
+	KEY(4, 7, KEY_ESC),	/* SW 9 */
+};
+
+static struct pxa27x_keypad_platform_data aspenite_keypad_info __initdata = {
+	.matrix_key_rows	= 8,
+	.matrix_key_cols	= 8,
+	.matrix_key_map		= aspenite_matrix_key_map,
+	.matrix_key_map_size	= ARRAY_SIZE(aspenite_matrix_key_map),
+	.debounce_interval	= 30,
+};
+
 static void __init common_init(void)
 {
 	mfp_config(ARRAY_AND_SIZE(common_pin_config));
@@ -203,6 +229,7 @@ static void __init common_init(void)
 	pxa168_add_ssp(1);
 	pxa168_add_nand(&aspenite_nand_info);
 	pxa168_add_fb(&aspenite_lcd_info);
+	pxa168_add_keypad(&aspenite_keypad_info);
 
 	/* off-chip devices */
 	platform_device_register(&smc91x_device);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory
  2010-08-26  9:18 ` [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory Mark F. Brown
@ 2010-08-31  4:13   ` Eric Miao
  0 siblings, 0 replies; 17+ messages in thread
From: Eric Miao @ 2010-08-31  4:13 UTC (permalink / raw)
  To: Mark F. Brown; +Cc: Haojian Zhuang, linux-arm-kernel, linux-kernel, linux-input

On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
> mach-mmp utilizes pxa27x_keypad code so we need to move header to
> platform pxa directory.

Good move. I'm actually very inclined to move this into include/linux/input/.

And you may try '-M' when generating patches with 'git format-patch', and
see the difference of the output.

>
> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
> ---
>  arch/arm/mach-pxa/devices.c                    |    2 +-
>  arch/arm/mach-pxa/em-x270.c                    |    2 +-
>  arch/arm/mach-pxa/ezx.c                        |    2 +-
>  arch/arm/mach-pxa/include/mach/pxa27x_keypad.h |   59 ------------------------
>  arch/arm/mach-pxa/littleton.c                  |    2 +-
>  arch/arm/mach-pxa/mainstone.c                  |    4 +-
>  arch/arm/mach-pxa/mioa701.c                    |    2 +-
>  arch/arm/mach-pxa/palmld.c                     |    2 +-
>  arch/arm/mach-pxa/palmt5.c                     |    2 +-
>  arch/arm/mach-pxa/palmtreo.c                   |    2 +-
>  arch/arm/mach-pxa/palmtx.c                     |    2 +-
>  arch/arm/mach-pxa/palmz72.c                    |    2 +-
>  arch/arm/mach-pxa/tavorevb.c                   |    2 +-
>  arch/arm/mach-pxa/z2.c                         |    2 +-
>  arch/arm/mach-pxa/zylonite.c                   |    2 +-
>  arch/arm/plat-pxa/include/plat/pxa27x_keypad.h |   59 ++++++++++++++++++++++++
>  drivers/input/keyboard/pxa27x_keypad.c         |    2 +-
>  17 files changed, 75 insertions(+), 75 deletions(-)
>  delete mode 100644 arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
>  create mode 100644 arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
>
> diff --git a/arch/arm/mach-pxa/devices.c b/arch/arm/mach-pxa/devices.c
> index a2fc859..08b4103 100644
> --- a/arch/arm/mach-pxa/devices.c
> +++ b/arch/arm/mach-pxa/devices.c
> @@ -11,7 +11,7 @@
>  #include <mach/mmc.h>
>  #include <mach/irda.h>
>  #include <mach/ohci.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/pxa2xx_spi.h>
>  #include <mach/camera.h>
>  #include <mach/audio.h>
> diff --git a/arch/arm/mach-pxa/em-x270.c b/arch/arm/mach-pxa/em-x270.c
> index 0517c17..51286a7 100644
> --- a/arch/arm/mach-pxa/em-x270.c
> +++ b/arch/arm/mach-pxa/em-x270.c
> @@ -43,7 +43,7 @@
>  #include <mach/pxafb.h>
>  #include <mach/ohci.h>
>  #include <mach/mmc.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <plat/i2c.h>
>  #include <mach/camera.h>
>  #include <mach/pxa2xx_spi.h>
> diff --git a/arch/arm/mach-pxa/ezx.c b/arch/arm/mach-pxa/ezx.c
> index 3fe61f4..f997e84 100644
> --- a/arch/arm/mach-pxa/ezx.c
> +++ b/arch/arm/mach-pxa/ezx.c
> @@ -32,7 +32,7 @@
>  #include <mach/ohci.h>
>  #include <plat/i2c.h>
>  #include <mach/hardware.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/camera.h>
>
>  #include "devices.h"
> diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
> deleted file mode 100644
> index 7b4eadc..0000000
> --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
> +++ /dev/null
> @@ -1,59 +0,0 @@
> -#ifndef __ASM_ARCH_PXA27x_KEYPAD_H
> -#define __ASM_ARCH_PXA27x_KEYPAD_H
> -
> -#include <linux/input.h>
> -#include <linux/input/matrix_keypad.h>
> -
> -#define MAX_MATRIX_KEY_ROWS    (8)
> -#define MAX_MATRIX_KEY_COLS    (8)
> -#define MATRIX_ROW_SHIFT       (3)
> -#define MAX_DIRECT_KEY_NUM     (8)
> -
> -/* pxa3xx keypad platform specific parameters
> - *
> - * NOTE:
> - * 1. direct_key_num indicates the number of keys in the direct keypad
> - *    _plus_ the number of rotary-encoder sensor inputs,  this can be
> - *    left as 0 if only rotary encoders are enabled,  the driver will
> - *    automatically calculate this
> - *
> - * 2. direct_key_map is the key code map for the direct keys, if rotary
> - *    encoder(s) are enabled, direct key 0/1(2/3) will be ignored
> - *
> - * 3. rotary can be either interpreted as a relative input event (e.g.
> - *    REL_WHEEL/REL_HWHEEL) or specific keys (e.g. UP/DOWN/LEFT/RIGHT)
> - *
> - * 4. matrix key and direct key will use the same debounce_interval by
> - *    default, which should be sufficient in most cases
> - */
> -struct pxa27x_keypad_platform_data {
> -
> -       /* code map for the matrix keys */
> -       unsigned int    matrix_key_rows;
> -       unsigned int    matrix_key_cols;
> -       unsigned int    *matrix_key_map;
> -       int             matrix_key_map_size;
> -
> -       /* direct keys */
> -       int             direct_key_num;
> -       unsigned int    direct_key_map[MAX_DIRECT_KEY_NUM];
> -
> -       /* rotary encoders 0 */
> -       int             enable_rotary0;
> -       int             rotary0_rel_code;
> -       int             rotary0_up_key;
> -       int             rotary0_down_key;
> -
> -       /* rotary encoders 1 */
> -       int             enable_rotary1;
> -       int             rotary1_rel_code;
> -       int             rotary1_up_key;
> -       int             rotary1_down_key;
> -
> -       /* key debounce interval */
> -       unsigned int    debounce_interval;
> -};
> -
> -extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
> -
> -#endif /* __ASM_ARCH_PXA27x_KEYPAD_H */
> diff --git a/arch/arm/mach-pxa/littleton.c b/arch/arm/mach-pxa/littleton.c
> index 83f3236..eb58506 100644
> --- a/arch/arm/mach-pxa/littleton.c
> +++ b/arch/arm/mach-pxa/littleton.c
> @@ -43,7 +43,7 @@
>  #include <mach/pxafb.h>
>  #include <mach/mmc.h>
>  #include <mach/pxa2xx_spi.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/littleton.h>
>  #include <plat/i2c.h>
>  #include <plat/pxa3xx_nand.h>
> diff --git a/arch/arm/mach-pxa/mainstone.c b/arch/arm/mach-pxa/mainstone.c
> index c2a8717..126dca1 100644
> --- a/arch/arm/mach-pxa/mainstone.c
> +++ b/arch/arm/mach-pxa/mainstone.c
> @@ -41,7 +41,7 @@
>  #include <asm/mach/irq.h>
>  #include <asm/mach/flash.h>
>
> -#include <mach/pxa27x.h>
> +#include <plat/pxa27x.h>
>  #include <mach/gpio.h>
>  #include <mach/mainstone.h>
>  #include <mach/audio.h>
> @@ -50,7 +50,7 @@
>  #include <mach/mmc.h>
>  #include <mach/irda.h>
>  #include <mach/ohci.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>
>  #include "generic.h"
>  #include "devices.h"
> diff --git a/arch/arm/mach-pxa/mioa701.c b/arch/arm/mach-pxa/mioa701.c
> index dc66942..ffb3f5a 100644
> --- a/arch/arm/mach-pxa/mioa701.c
> +++ b/arch/arm/mach-pxa/mioa701.c
> @@ -45,7 +45,7 @@
>
>  #include <mach/pxa27x.h>
>  #include <mach/regs-rtc.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/pxafb.h>
>  #include <mach/mmc.h>
>  #include <mach/udc.h>
> diff --git a/arch/arm/mach-pxa/palmld.c b/arch/arm/mach-pxa/palmld.c
> index 91038ee..3ff0c4a 100644
> --- a/arch/arm/mach-pxa/palmld.c
> +++ b/arch/arm/mach-pxa/palmld.c
> @@ -39,7 +39,7 @@
>  #include <mach/mmc.h>
>  #include <mach/pxafb.h>
>  #include <mach/irda.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/palmasoc.h>
>  #include <mach/palm27x.h>
>
> diff --git a/arch/arm/mach-pxa/palmt5.c b/arch/arm/mach-pxa/palmt5.c
> index 1c28199..5b9f766 100644
> --- a/arch/arm/mach-pxa/palmt5.c
> +++ b/arch/arm/mach-pxa/palmt5.c
> @@ -39,7 +39,7 @@
>  #include <mach/mmc.h>
>  #include <mach/pxafb.h>
>  #include <mach/irda.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/udc.h>
>  #include <mach/palmasoc.h>
>  #include <mach/palm27x.h>
> diff --git a/arch/arm/mach-pxa/palmtreo.c b/arch/arm/mach-pxa/palmtreo.c
> index 52defd5..f685a60 100644
> --- a/arch/arm/mach-pxa/palmtreo.c
> +++ b/arch/arm/mach-pxa/palmtreo.c
> @@ -39,7 +39,7 @@
>  #include <mach/mmc.h>
>  #include <mach/pxafb.h>
>  #include <mach/irda.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/udc.h>
>  #include <mach/ohci.h>
>  #include <mach/pxa2xx-regs.h>
> diff --git a/arch/arm/mach-pxa/palmtx.c b/arch/arm/mach-pxa/palmtx.c
> index 144dc2b..89a3792 100644
> --- a/arch/arm/mach-pxa/palmtx.c
> +++ b/arch/arm/mach-pxa/palmtx.c
> @@ -43,7 +43,7 @@
>  #include <mach/mmc.h>
>  #include <mach/pxafb.h>
>  #include <mach/irda.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/udc.h>
>  #include <mach/palmasoc.h>
>  #include <mach/palm27x.h>
> diff --git a/arch/arm/mach-pxa/palmz72.c b/arch/arm/mach-pxa/palmz72.c
> index 87e4b10..38f4425 100644
> --- a/arch/arm/mach-pxa/palmz72.c
> +++ b/arch/arm/mach-pxa/palmz72.c
> @@ -41,7 +41,7 @@
>  #include <mach/mmc.h>
>  #include <mach/pxafb.h>
>  #include <mach/irda.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/udc.h>
>  #include <mach/palmasoc.h>
>  #include <mach/palm27x.h>
> diff --git a/arch/arm/mach-pxa/tavorevb.c b/arch/arm/mach-pxa/tavorevb.c
> index f02dcb5..0f440c9 100644
> --- a/arch/arm/mach-pxa/tavorevb.c
> +++ b/arch/arm/mach-pxa/tavorevb.c
> @@ -25,7 +25,7 @@
>
>  #include <mach/pxa930.h>
>  #include <mach/pxafb.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>
>  #include "devices.h"
>  #include "generic.h"
> diff --git a/arch/arm/mach-pxa/z2.c b/arch/arm/mach-pxa/z2.c
> index f0d0228..8c44bc4 100644
> --- a/arch/arm/mach-pxa/z2.c
> +++ b/arch/arm/mach-pxa/z2.c
> @@ -37,7 +37,7 @@
>  #include <mach/z2.h>
>  #include <mach/pxafb.h>
>  #include <mach/mmc.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <mach/pxa2xx_spi.h>
>
>  #include <plat/i2c.h>
> diff --git a/arch/arm/mach-pxa/zylonite.c b/arch/arm/mach-pxa/zylonite.c
> index 2edad61..69df3ed 100644
> --- a/arch/arm/mach-pxa/zylonite.c
> +++ b/arch/arm/mach-pxa/zylonite.c
> @@ -30,7 +30,7 @@
>  #include <mach/zylonite.h>
>  #include <mach/mmc.h>
>  #include <mach/ohci.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  #include <plat/pxa3xx_nand.h>
>
>  #include "devices.h"
> diff --git a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
> new file mode 100644
> index 0000000..7b4eadc
> --- /dev/null
> +++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
> @@ -0,0 +1,59 @@
> +#ifndef __ASM_ARCH_PXA27x_KEYPAD_H
> +#define __ASM_ARCH_PXA27x_KEYPAD_H
> +
> +#include <linux/input.h>
> +#include <linux/input/matrix_keypad.h>
> +
> +#define MAX_MATRIX_KEY_ROWS    (8)
> +#define MAX_MATRIX_KEY_COLS    (8)
> +#define MATRIX_ROW_SHIFT       (3)
> +#define MAX_DIRECT_KEY_NUM     (8)
> +
> +/* pxa3xx keypad platform specific parameters
> + *
> + * NOTE:
> + * 1. direct_key_num indicates the number of keys in the direct keypad
> + *    _plus_ the number of rotary-encoder sensor inputs,  this can be
> + *    left as 0 if only rotary encoders are enabled,  the driver will
> + *    automatically calculate this
> + *
> + * 2. direct_key_map is the key code map for the direct keys, if rotary
> + *    encoder(s) are enabled, direct key 0/1(2/3) will be ignored
> + *
> + * 3. rotary can be either interpreted as a relative input event (e.g.
> + *    REL_WHEEL/REL_HWHEEL) or specific keys (e.g. UP/DOWN/LEFT/RIGHT)
> + *
> + * 4. matrix key and direct key will use the same debounce_interval by
> + *    default, which should be sufficient in most cases
> + */
> +struct pxa27x_keypad_platform_data {
> +
> +       /* code map for the matrix keys */
> +       unsigned int    matrix_key_rows;
> +       unsigned int    matrix_key_cols;
> +       unsigned int    *matrix_key_map;
> +       int             matrix_key_map_size;
> +
> +       /* direct keys */
> +       int             direct_key_num;
> +       unsigned int    direct_key_map[MAX_DIRECT_KEY_NUM];
> +
> +       /* rotary encoders 0 */
> +       int             enable_rotary0;
> +       int             rotary0_rel_code;
> +       int             rotary0_up_key;
> +       int             rotary0_down_key;
> +
> +       /* rotary encoders 1 */
> +       int             enable_rotary1;
> +       int             rotary1_rel_code;
> +       int             rotary1_up_key;
> +       int             rotary1_down_key;
> +
> +       /* key debounce interval */
> +       unsigned int    debounce_interval;
> +};
> +
> +extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
> +
> +#endif /* __ASM_ARCH_PXA27x_KEYPAD_H */
> diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
> index 0e53b3b..0610d10 100644
> --- a/drivers/input/keyboard/pxa27x_keypad.c
> +++ b/drivers/input/keyboard/pxa27x_keypad.c
> @@ -32,7 +32,7 @@
>  #include <asm/mach/map.h>
>
>  #include <mach/hardware.h>
> -#include <mach/pxa27x_keypad.h>
> +#include <plat/pxa27x_keypad.h>
>  /*
>  * Keypad Controller registers
>  */
> --
> 1.7.0.4
>
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
  2010-08-26  9:18 ` [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts Mark F. Brown
@ 2010-08-31  4:53   ` Haojian Zhuang
  2010-08-31  6:28     ` Mark F. Brown
  0 siblings, 1 reply; 17+ messages in thread
From: Haojian Zhuang @ 2010-08-31  4:53 UTC (permalink / raw)
  To: Mark F. Brown
  Cc: Eric Miao, Haojian Zhuang, linux-arm-kernel, linux-kernel, linux-input

On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
> ---
>  arch/arm/mach-mmp/irq-pxa168.c |   23 ++++++++++++++++++++++-
>  1 files changed, 22 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-mmp/irq-pxa168.c b/arch/arm/mach-mmp/irq-pxa168.c
> index 52ff2f0..bfb0984 100644
> --- a/arch/arm/mach-mmp/irq-pxa168.c
> +++ b/arch/arm/mach-mmp/irq-pxa168.c
> @@ -17,6 +17,8 @@
>  #include <linux/io.h>
>
>  #include <mach/regs-icu.h>
> +#include <mach/regs-apmu.h>
> +#include <mach/cputype.h>
>
>  #include "common.h"
>
> @@ -42,6 +44,19 @@ static struct irq_chip icu_irq_chip = {
>        .unmask = icu_unmask_irq,
>  };
>
> +void handle_pxa168_keypad_irq(unsigned int irq, struct irq_desc *desc)
> +{
> +       uint32_t val;
> +       uint32_t mask = APMU_PXA168_KP_WAKE_CLR;
> +
> +       /* clear keypad wake event */
> +       val = __raw_readl(APMU_WAKE_CLR);
> +       __raw_writel(val |  mask, APMU_WAKE_CLR);
> +
> +       /* handle irq */
> +       handle_level_irq(irq, desc);
> +}
> +

Why should you clear wakeup event status in IRQ handler? If system is
resumed by keypad event, you should clear this wakeup source in resume
code. I think that IRQ code should not be binded with wakeup event at
here.

>  void __init icu_init_irq(void)
>  {
>        int irq;
> @@ -49,7 +64,13 @@ void __init icu_init_irq(void)
>        for (irq = 0; irq < 64; irq++) {
>                icu_mask_irq(irq);
>                set_irq_chip(irq, &icu_irq_chip);
> -               set_irq_handler(irq, handle_level_irq);
> +
> +               /* special handler for keypad */
> +               if (cpu_is_pxa168() && irq == IRQ_PXA168_KEYPAD)
> +                       set_irq_handler(irq, handle_pxa168_keypad_irq);
> +               else
> +                       set_irq_handler(irq, handle_level_irq);
> +
>                set_irq_flags(irq, IRQF_VALID);
>        }
>  }
> --
> 1.7.0.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/5] ARM: pxa168: added keypad support
  2010-08-26  9:18 ` [PATCH 2/5] ARM: pxa168: added keypad support Mark F. Brown
@ 2010-08-31  4:56   ` Haojian Zhuang
  0 siblings, 0 replies; 17+ messages in thread
From: Haojian Zhuang @ 2010-08-31  4:56 UTC (permalink / raw)
  To: Mark F. Brown
  Cc: Eric Miao, Haojian Zhuang, linux-arm-kernel, linux-kernel, linux-input

On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
> ---
>  arch/arm/mach-mmp/include/mach/mfp-pxa168.h |    7 +++++++
>  arch/arm/mach-mmp/include/mach/pxa168.h     |    7 +++++++
>  arch/arm/mach-mmp/pxa168.c                  |    3 +++
>  drivers/input/keyboard/Kconfig              |    2 +-
>  4 files changed, 18 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h
> index ded43c4..4621067 100644
> --- a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h
> +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h
> @@ -289,4 +289,11 @@
>  #define GPIO86_PWM1_OUT                MFP_CFG(GPIO86, AF2)
>  #define GPIO86_PWM2_OUT                MFP_CFG(GPIO86, AF3)
>
> +/* Keypad */
> +#define GPIO109_KP_MKIN1        MFP_CFG(GPIO109, AF7)
> +#define GPIO110_KP_MKIN0        MFP_CFG(GPIO110, AF7)
> +#define GPIO111_KP_MKOUT7       MFP_CFG(GPIO111, AF7)
> +#define GPIO112_KP_MKOUT6       MFP_CFG(GPIO112, AF7)
> +#define GPIO121_KP_MKIN4        MFP_CFG(GPIO121, AF7)
> +
>  #endif /* __ASM_MACH_MFP_PXA168_H */
> diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h b/arch/arm/mach-mmp/include/mach/pxa168.h
> index 220738f..f34e663 100644
> --- a/arch/arm/mach-mmp/include/mach/pxa168.h
> +++ b/arch/arm/mach-mmp/include/mach/pxa168.h
> @@ -11,6 +11,7 @@ extern void __init pxa168_init_irq(void);
>  #include <plat/i2c.h>
>  #include <plat/pxa3xx_nand.h>
>  #include <video/pxa168fb.h>
> +#include <plat/pxa27x_keypad.h>
>
>  extern struct pxa_device_desc pxa168_device_uart1;
>  extern struct pxa_device_desc pxa168_device_uart2;
> @@ -27,6 +28,7 @@ extern struct pxa_device_desc pxa168_device_ssp4;
>  extern struct pxa_device_desc pxa168_device_ssp5;
>  extern struct pxa_device_desc pxa168_device_nand;
>  extern struct pxa_device_desc pxa168_device_fb;
> +extern struct pxa_device_desc pxa168_device_keypad;
>
>  static inline int pxa168_add_uart(int id)
>  {
> @@ -105,4 +107,9 @@ static inline int pxa168_add_fb(struct pxa168fb_mach_info *mi)
>        return pxa_register_device(&pxa168_device_fb, mi, sizeof(*mi));
>  }
>
> +static inline int pxa168_add_keypad(struct pxa27x_keypad_platform_data *data)
> +{
> +       return pxa_register_device(&pxa168_device_keypad, data, sizeof(*data));
> +}
> +
>  #endif /* __ASM_MACH_PXA168_H */
> diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c
> index eaebf66..2fa16fb 100644
> --- a/arch/arm/mach-mmp/pxa168.c
> +++ b/arch/arm/mach-mmp/pxa168.c
> @@ -77,6 +77,7 @@ static APBC_CLK(ssp2, PXA168_SSP2, 4, 0);
>  static APBC_CLK(ssp3, PXA168_SSP3, 4, 0);
>  static APBC_CLK(ssp4, PXA168_SSP4, 4, 0);
>  static APBC_CLK(ssp5, PXA168_SSP5, 4, 0);
> +static APBC_CLK(keypad, PXA168_KPC, 0, 32000);
>
>  static APMU_CLK(nand, NAND, 0x01db, 208000000);
>  static APMU_CLK(lcd, LCD, 0x7f, 312000000);
> @@ -98,6 +99,7 @@ static struct clk_lookup pxa168_clkregs[] = {
>        INIT_CLKREG(&clk_ssp5, "pxa168-ssp.4", NULL),
>        INIT_CLKREG(&clk_nand, "pxa3xx-nand", NULL),
>        INIT_CLKREG(&clk_lcd, "pxa168-fb", NULL),
> +       INIT_CLKREG(&clk_keypad, "pxa27x-keypad", NULL),
>  };
>
>  static int __init pxa168_init(void)
> @@ -150,3 +152,4 @@ PXA168_DEVICE(ssp3, "pxa168-ssp", 2, SSP3, 0xd401f000, 0x40, 56, 57);
>  PXA168_DEVICE(ssp4, "pxa168-ssp", 3, SSP4, 0xd4020000, 0x40, 58, 59);
>  PXA168_DEVICE(ssp5, "pxa168-ssp", 4, SSP5, 0xd4021000, 0x40, 60, 61);
>  PXA168_DEVICE(fb, "pxa168-fb", -1, LCD, 0xd420b000, 0x1c8);
> +PXA168_DEVICE(keypad, "pxa27x-keypad", -1, KEYPAD, 0xd4012000, 0x4c);
> diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
> index 9cc488d..aa037fe 100644
> --- a/drivers/input/keyboard/Kconfig
> +++ b/drivers/input/keyboard/Kconfig
> @@ -338,7 +338,7 @@ config KEYBOARD_OPENCORES
>
>  config KEYBOARD_PXA27x
>        tristate "PXA27x/PXA3xx keypad support"
> -       depends on PXA27x || PXA3xx
> +       depends on PXA27x || PXA3xx || ARCH_MMP
>        help
>          Enable support for PXA27x/PXA3xx keypad controller.
>
> --
> 1.7.0.4
>
It seems good. Acked

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
  2010-08-26  9:18 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Mark F. Brown
@ 2010-08-31  5:00   ` Haojian Zhuang
  2010-09-03  4:50     ` Mark F. Brown
  0 siblings, 1 reply; 17+ messages in thread
From: Haojian Zhuang @ 2010-08-31  5:00 UTC (permalink / raw)
  To: Mark F. Brown
  Cc: Eric Miao, Haojian Zhuang, linux-arm-kernel, linux-kernel, linux-input

On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
> ---
>  arch/arm/mach-mmp/aspenite.c |   27 +++++++++++++++++++++++++++
>  1 files changed, 27 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
> index 9e1bd6b..1b788c5 100644
> --- a/arch/arm/mach-mmp/aspenite.c
> +++ b/arch/arm/mach-mmp/aspenite.c
> @@ -24,6 +24,8 @@
>  #include <mach/pxa168.h>
>  #include <mach/gpio.h>
>  #include <video/pxa168fb.h>
> +#include <linux/input.h>
> +#include <plat/pxa27x_keypad.h>
>
>  #include "common.h"
>
> @@ -97,6 +99,13 @@ static unsigned long common_pin_config[] __initdata = {
>        GPIO81_LCD_DD21,
>        GPIO82_LCD_DD22,
>        GPIO83_LCD_DD23,
> +
> +       /* Keypad */
> +       GPIO109_KP_MKIN1,
> +       GPIO110_KP_MKIN0,
> +       GPIO111_KP_MKOUT7,
> +       GPIO112_KP_MKOUT6,
> +       GPIO121_KP_MKIN4,
>  };
>
>  static struct smc91x_platdata smc91x_info = {
> @@ -193,6 +202,23 @@ struct pxa168fb_mach_info aspenite_lcd_info = {
>        .invert_pixclock        = 0,
>  };
>
> +static unsigned int aspenite_matrix_key_map[] = {
> +       KEY(0, 6, KEY_UP),      /* SW 4 */
> +       KEY(0, 7, KEY_DOWN),    /* SW 5 */
> +       KEY(1, 6, KEY_LEFT),    /* SW 6 */
> +       KEY(1, 7, KEY_RIGHT),   /* SW 7 */
> +       KEY(4, 6, KEY_ENTER),   /* SW 8 */
> +       KEY(4, 7, KEY_ESC),     /* SW 9 */
> +};
> +
> +static struct pxa27x_keypad_platform_data aspenite_keypad_info __initdata = {
> +       .matrix_key_rows        = 8,
> +       .matrix_key_cols        = 8,
It seems that maxium columns is 5, not 8.

> +       .matrix_key_map         = aspenite_matrix_key_map,
> +       .matrix_key_map_size    = ARRAY_SIZE(aspenite_matrix_key_map),
> +       .debounce_interval      = 30,
> +};
> +
>  static void __init common_init(void)
>  {
>        mfp_config(ARRAY_AND_SIZE(common_pin_config));
> @@ -203,6 +229,7 @@ static void __init common_init(void)
>        pxa168_add_ssp(1);
>        pxa168_add_nand(&aspenite_nand_info);
>        pxa168_add_fb(&aspenite_lcd_info);
> +       pxa168_add_keypad(&aspenite_keypad_info);
>
>        /* off-chip devices */
>        platform_device_register(&smc91x_device);
> --
> 1.7.0.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
  2010-08-31  4:53   ` Haojian Zhuang
@ 2010-08-31  6:28     ` Mark F. Brown
  2010-08-31  7:05       ` Eric Miao
  0 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-08-31  6:28 UTC (permalink / raw)
  To: Haojian Zhuang
  Cc: Eric Miao, Haojian Zhuang, linux-arm-kernel, linux-kernel, linux-input

On Tue, Aug 31, 2010 at 12:53 AM, Haojian Zhuang
<haojian.zhuang@gmail.com> wrote:
> On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
>> ---
>>  arch/arm/mach-mmp/irq-pxa168.c |   23 ++++++++++++++++++++++-
>>  1 files changed, 22 insertions(+), 1 deletions(-)
>>
>> diff --git a/arch/arm/mach-mmp/irq-pxa168.c b/arch/arm/mach-mmp/irq-pxa168.c
>> index 52ff2f0..bfb0984 100644
>> --- a/arch/arm/mach-mmp/irq-pxa168.c
>> +++ b/arch/arm/mach-mmp/irq-pxa168.c
>> @@ -17,6 +17,8 @@
>>  #include <linux/io.h>
>>
>>  #include <mach/regs-icu.h>
>> +#include <mach/regs-apmu.h>
>> +#include <mach/cputype.h>
>>
>>  #include "common.h"
>>
>> @@ -42,6 +44,19 @@ static struct irq_chip icu_irq_chip = {
>>        .unmask = icu_unmask_irq,
>>  };
>>
>> +void handle_pxa168_keypad_irq(unsigned int irq, struct irq_desc *desc)
>> +{
>> +       uint32_t val;
>> +       uint32_t mask = APMU_PXA168_KP_WAKE_CLR;
>> +
>> +       /* clear keypad wake event */
>> +       val = __raw_readl(APMU_WAKE_CLR);
>> +       __raw_writel(val |  mask, APMU_WAKE_CLR);
>> +
>> +       /* handle irq */
>> +       handle_level_irq(irq, desc);
>> +}
>> +
>
> Why should you clear wakeup event status in IRQ handler? If system is
> resumed by keypad event, you should clear this wakeup source in resume
> code. I think that IRQ code should not be binded with wakeup event at
> here.
>
>>  void __init icu_init_irq(void)
>>  {
>>        int irq;
>> @@ -49,7 +64,13 @@ void __init icu_init_irq(void)
>>        for (irq = 0; irq < 64; irq++) {
>>                icu_mask_irq(irq);
>>                set_irq_chip(irq, &icu_irq_chip);
>> -               set_irq_handler(irq, handle_level_irq);
>> +
>> +               /* special handler for keypad */
>> +               if (cpu_is_pxa168() && irq == IRQ_PXA168_KEYPAD)
>> +                       set_irq_handler(irq, handle_pxa168_keypad_irq);
>> +               else
>> +                       set_irq_handler(irq, handle_level_irq);
>> +
>>                set_irq_flags(irq, IRQF_VALID);
>>        }
>>  }
>> --
>> 1.7.0.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
>>
>

Haojian, this is an usual case, but without that clear wake event you
will not be able to clear the keypad interrupt. For my push to open
source I re-wrote the workaround code and added it as a special case
IRQ handler. In the Marvell pxa168 code base it is actually located in
the keypad interrupt handler as the function clear_wakeup(). I felt it
was better to isolate this code in the mmp common code base instead.

Regards,
-- Mark

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
  2010-08-31  6:28     ` Mark F. Brown
@ 2010-08-31  7:05       ` Eric Miao
  2010-08-31  7:13         ` Mark F. Brown
  0 siblings, 1 reply; 17+ messages in thread
From: Eric Miao @ 2010-08-31  7:05 UTC (permalink / raw)
  To: Mark F. Brown
  Cc: Haojian Zhuang, Haojian Zhuang, linux-arm-kernel, linux-kernel,
	linux-input

On Tue, Aug 31, 2010 at 2:28 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
> On Tue, Aug 31, 2010 at 12:53 AM, Haojian Zhuang
> <haojian.zhuang@gmail.com> wrote:
>> On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>>> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
>>> ---
>>>  arch/arm/mach-mmp/irq-pxa168.c |   23 ++++++++++++++++++++++-
>>>  1 files changed, 22 insertions(+), 1 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-mmp/irq-pxa168.c b/arch/arm/mach-mmp/irq-pxa168.c
>>> index 52ff2f0..bfb0984 100644
>>> --- a/arch/arm/mach-mmp/irq-pxa168.c
>>> +++ b/arch/arm/mach-mmp/irq-pxa168.c
>>> @@ -17,6 +17,8 @@
>>>  #include <linux/io.h>
>>>
>>>  #include <mach/regs-icu.h>
>>> +#include <mach/regs-apmu.h>
>>> +#include <mach/cputype.h>
>>>
>>>  #include "common.h"
>>>
>>> @@ -42,6 +44,19 @@ static struct irq_chip icu_irq_chip = {
>>>        .unmask = icu_unmask_irq,
>>>  };
>>>
>>> +void handle_pxa168_keypad_irq(unsigned int irq, struct irq_desc *desc)
>>> +{
>>> +       uint32_t val;
>>> +       uint32_t mask = APMU_PXA168_KP_WAKE_CLR;
>>> +
>>> +       /* clear keypad wake event */
>>> +       val = __raw_readl(APMU_WAKE_CLR);
>>> +       __raw_writel(val |  mask, APMU_WAKE_CLR);
>>> +
>>> +       /* handle irq */
>>> +       handle_level_irq(irq, desc);
>>> +}
>>> +
>>
>> Why should you clear wakeup event status in IRQ handler? If system is
>> resumed by keypad event, you should clear this wakeup source in resume
>> code. I think that IRQ code should not be binded with wakeup event at
>> here.
>>
>>>  void __init icu_init_irq(void)
>>>  {
>>>        int irq;
>>> @@ -49,7 +64,13 @@ void __init icu_init_irq(void)
>>>        for (irq = 0; irq < 64; irq++) {
>>>                icu_mask_irq(irq);
>>>                set_irq_chip(irq, &icu_irq_chip);
>>> -               set_irq_handler(irq, handle_level_irq);
>>> +
>>> +               /* special handler for keypad */
>>> +               if (cpu_is_pxa168() && irq == IRQ_PXA168_KEYPAD)
>>> +                       set_irq_handler(irq, handle_pxa168_keypad_irq);
>>> +               else
>>> +                       set_irq_handler(irq, handle_level_irq);
>>> +
>>>                set_irq_flags(irq, IRQF_VALID);
>>>        }
>>>  }
>>> --
>>> 1.7.0.4
>>>
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>> Please read the FAQ at  http://www.tux.org/lkml/
>>>
>>
>
> Haojian, this is an usual case, but without that clear wake event you
> will not be able to clear the keypad interrupt. For my push to open
> source I re-wrote the workaround code and added it as a special case
> IRQ handler. In the Marvell pxa168 code base it is actually located in
> the keypad interrupt handler as the function clear_wakeup(). I felt it
> was better to isolate this code in the mmp common code base instead.

I'd rather the irq handler not being changed and use platform_data instead.
How about something below:

diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h
b/arch/arm/mach-mmp/include/mach/pxa168.h
index 27e1bc7..d2b7946 100644
--- a/arch/arm/mach-mmp/include/mach/pxa168.h
+++ b/arch/arm/mach-mmp/include/mach/pxa168.h
@@ -5,6 +5,7 @@ struct sys_timer;

 extern struct sys_timer pxa168_timer;
 extern void __init pxa168_init_irq(void);
+extern void pxa168_clear_keypad_wakeup(void);

 #include <linux/i2c.h>
 #include <mach/devices.h>
@@ -97,4 +98,10 @@ static inline int pxa168_add_nand(struct
pxa3xx_nand_platform_data *info)
 {
 	return pxa_register_device(&pxa168_device_nand, info, sizeof(*info));
 }
+
+static inline int pxa168_add_keypad(struct pxa27x_keypad_platform_data *info)
+{
+	info->clear_wakeup = pxa168_clear_keypad_wakeup;
+	return pxa_register_device(&pxa168_device_keypad, info, sizeof(*info));
+}
 #endif /* __ASM_MACH_PXA168_H */
diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
index 7b4eadc..3a6bfe7 100644
--- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
+++ b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
@@ -52,6 +52,7 @@ struct pxa27x_keypad_platform_data {

 	/* key debounce interval */
 	unsigned int	debounce_interval;
+	void		(*clear_wakeup);
 };

 extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
diff --git a/drivers/input/keyboard/pxa27x_keypad.c
b/drivers/input/keyboard/pxa27x_keypad.c
index f32404f..3fb94fe 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -330,10 +330,20 @@ static void pxa27x_keypad_scan_direct(struct
pxa27x_keypad *keypad)
 	keypad->direct_key_state = new_state;
 }

+static void clear_wakeup(struct pxa27x_keypad *keypad)
+{
+	struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
+
+	if (pdata->clear_wakeup)
+		(pdata->clear_wakeup)();
+}
+
 static irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id)
 {
 	struct pxa27x_keypad *keypad = dev_id;
-	unsigned long kpc = keypad_readl(KPC);
+	unsigned long kpc;
+
+	kpc = keypad_readl(KPC);

 	if (kpc & KPC_DI)
 		pxa27x_keypad_scan_direct(keypad);

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
  2010-08-31  7:05       ` Eric Miao
@ 2010-08-31  7:13         ` Mark F. Brown
  2010-08-31  7:15           ` Eric Miao
  0 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-08-31  7:13 UTC (permalink / raw)
  To: Eric Miao
  Cc: Haojian Zhuang, Haojian Zhuang, linux-arm-kernel, linux-kernel,
	linux-input

On Tue, Aug 31, 2010 at 3:05 AM, Eric Miao <eric.y.miao@gmail.com> wrote:
> On Tue, Aug 31, 2010 at 2:28 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>> On Tue, Aug 31, 2010 at 12:53 AM, Haojian Zhuang
>> <haojian.zhuang@gmail.com> wrote:
>>> On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>>>> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
>>>> ---
>>>>  arch/arm/mach-mmp/irq-pxa168.c |   23 ++++++++++++++++++++++-
>>>>  1 files changed, 22 insertions(+), 1 deletions(-)
>>>>
>>>> diff --git a/arch/arm/mach-mmp/irq-pxa168.c b/arch/arm/mach-mmp/irq-pxa168.c
>>>> index 52ff2f0..bfb0984 100644
>>>> --- a/arch/arm/mach-mmp/irq-pxa168.c
>>>> +++ b/arch/arm/mach-mmp/irq-pxa168.c
>>>> @@ -17,6 +17,8 @@
>>>>  #include <linux/io.h>
>>>>
>>>>  #include <mach/regs-icu.h>
>>>> +#include <mach/regs-apmu.h>
>>>> +#include <mach/cputype.h>
>>>>
>>>>  #include "common.h"
>>>>
>>>> @@ -42,6 +44,19 @@ static struct irq_chip icu_irq_chip = {
>>>>        .unmask = icu_unmask_irq,
>>>>  };
>>>>
>>>> +void handle_pxa168_keypad_irq(unsigned int irq, struct irq_desc *desc)
>>>> +{
>>>> +       uint32_t val;
>>>> +       uint32_t mask = APMU_PXA168_KP_WAKE_CLR;
>>>> +
>>>> +       /* clear keypad wake event */
>>>> +       val = __raw_readl(APMU_WAKE_CLR);
>>>> +       __raw_writel(val |  mask, APMU_WAKE_CLR);
>>>> +
>>>> +       /* handle irq */
>>>> +       handle_level_irq(irq, desc);
>>>> +}
>>>> +
>>>
>>> Why should you clear wakeup event status in IRQ handler? If system is
>>> resumed by keypad event, you should clear this wakeup source in resume
>>> code. I think that IRQ code should not be binded with wakeup event at
>>> here.
>>>
>>>>  void __init icu_init_irq(void)
>>>>  {
>>>>        int irq;
>>>> @@ -49,7 +64,13 @@ void __init icu_init_irq(void)
>>>>        for (irq = 0; irq < 64; irq++) {
>>>>                icu_mask_irq(irq);
>>>>                set_irq_chip(irq, &icu_irq_chip);
>>>> -               set_irq_handler(irq, handle_level_irq);
>>>> +
>>>> +               /* special handler for keypad */
>>>> +               if (cpu_is_pxa168() && irq == IRQ_PXA168_KEYPAD)
>>>> +                       set_irq_handler(irq, handle_pxa168_keypad_irq);
>>>> +               else
>>>> +                       set_irq_handler(irq, handle_level_irq);
>>>> +
>>>>                set_irq_flags(irq, IRQF_VALID);
>>>>        }
>>>>  }
>>>> --
>>>> 1.7.0.4
>>>>
>>>> --
>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>> the body of a message to majordomo@vger.kernel.org
>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>> Please read the FAQ at  http://www.tux.org/lkml/
>>>>
>>>
>>
>> Haojian, this is an usual case, but without that clear wake event you
>> will not be able to clear the keypad interrupt. For my push to open
>> source I re-wrote the workaround code and added it as a special case
>> IRQ handler. In the Marvell pxa168 code base it is actually located in
>> the keypad interrupt handler as the function clear_wakeup(). I felt it
>> was better to isolate this code in the mmp common code base instead.
>
> I'd rather the irq handler not being changed and use platform_data instead.
> How about something below:
>
> diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h
> b/arch/arm/mach-mmp/include/mach/pxa168.h
> index 27e1bc7..d2b7946 100644
> --- a/arch/arm/mach-mmp/include/mach/pxa168.h
> +++ b/arch/arm/mach-mmp/include/mach/pxa168.h
> @@ -5,6 +5,7 @@ struct sys_timer;
>
>  extern struct sys_timer pxa168_timer;
>  extern void __init pxa168_init_irq(void);
> +extern void pxa168_clear_keypad_wakeup(void);
>
>  #include <linux/i2c.h>
>  #include <mach/devices.h>
> @@ -97,4 +98,10 @@ static inline int pxa168_add_nand(struct
> pxa3xx_nand_platform_data *info)
>  {
>        return pxa_register_device(&pxa168_device_nand, info, sizeof(*info));
>  }
> +
> +static inline int pxa168_add_keypad(struct pxa27x_keypad_platform_data *info)
> +{
> +       info->clear_wakeup = pxa168_clear_keypad_wakeup;
> +       return pxa_register_device(&pxa168_device_keypad, info, sizeof(*info));
> +}
>  #endif /* __ASM_MACH_PXA168_H */
> diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
> b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
> index 7b4eadc..3a6bfe7 100644
> --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
> +++ b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
> @@ -52,6 +52,7 @@ struct pxa27x_keypad_platform_data {
>
>        /* key debounce interval */
>        unsigned int    debounce_interval;
> +       void            (*clear_wakeup);
>  };
>
>  extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
> diff --git a/drivers/input/keyboard/pxa27x_keypad.c
> b/drivers/input/keyboard/pxa27x_keypad.c
> index f32404f..3fb94fe 100644
> --- a/drivers/input/keyboard/pxa27x_keypad.c
> +++ b/drivers/input/keyboard/pxa27x_keypad.c
> @@ -330,10 +330,20 @@ static void pxa27x_keypad_scan_direct(struct
> pxa27x_keypad *keypad)
>        keypad->direct_key_state = new_state;
>  }
>
> +static void clear_wakeup(struct pxa27x_keypad *keypad)
> +{
> +       struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
> +
> +       if (pdata->clear_wakeup)
> +               (pdata->clear_wakeup)();
> +}
> +
>  static irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id)
>  {
>        struct pxa27x_keypad *keypad = dev_id;
> -       unsigned long kpc = keypad_readl(KPC);
> +       unsigned long kpc;
> +
> +       kpc = keypad_readl(KPC);
>
>        if (kpc & KPC_DI)
>                pxa27x_keypad_scan_direct(keypad);
>

Ok if you are fine with that I will make that change and resubmit!

Regards,
-- Mark

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
  2010-08-31  7:13         ` Mark F. Brown
@ 2010-08-31  7:15           ` Eric Miao
  0 siblings, 0 replies; 17+ messages in thread
From: Eric Miao @ 2010-08-31  7:15 UTC (permalink / raw)
  To: Mark F. Brown
  Cc: Haojian Zhuang, Haojian Zhuang, linux-arm-kernel, linux-kernel,
	linux-input

On Tue, Aug 31, 2010 at 3:13 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
> On Tue, Aug 31, 2010 at 3:05 AM, Eric Miao <eric.y.miao@gmail.com> wrote:
>> On Tue, Aug 31, 2010 at 2:28 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>>> On Tue, Aug 31, 2010 at 12:53 AM, Haojian Zhuang
>>> <haojian.zhuang@gmail.com> wrote:
>>>> On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>>>>> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
>>>>> ---
>>>>>  arch/arm/mach-mmp/irq-pxa168.c |   23 ++++++++++++++++++++++-
>>>>>  1 files changed, 22 insertions(+), 1 deletions(-)
>>>>>
>>>>> diff --git a/arch/arm/mach-mmp/irq-pxa168.c b/arch/arm/mach-mmp/irq-pxa168.c
>>>>> index 52ff2f0..bfb0984 100644
>>>>> --- a/arch/arm/mach-mmp/irq-pxa168.c
>>>>> +++ b/arch/arm/mach-mmp/irq-pxa168.c
>>>>> @@ -17,6 +17,8 @@
>>>>>  #include <linux/io.h>
>>>>>
>>>>>  #include <mach/regs-icu.h>
>>>>> +#include <mach/regs-apmu.h>
>>>>> +#include <mach/cputype.h>
>>>>>
>>>>>  #include "common.h"
>>>>>
>>>>> @@ -42,6 +44,19 @@ static struct irq_chip icu_irq_chip = {
>>>>>        .unmask = icu_unmask_irq,
>>>>>  };
>>>>>
>>>>> +void handle_pxa168_keypad_irq(unsigned int irq, struct irq_desc *desc)
>>>>> +{
>>>>> +       uint32_t val;
>>>>> +       uint32_t mask = APMU_PXA168_KP_WAKE_CLR;
>>>>> +
>>>>> +       /* clear keypad wake event */
>>>>> +       val = __raw_readl(APMU_WAKE_CLR);
>>>>> +       __raw_writel(val |  mask, APMU_WAKE_CLR);
>>>>> +
>>>>> +       /* handle irq */
>>>>> +       handle_level_irq(irq, desc);
>>>>> +}
>>>>> +
>>>>
>>>> Why should you clear wakeup event status in IRQ handler? If system is
>>>> resumed by keypad event, you should clear this wakeup source in resume
>>>> code. I think that IRQ code should not be binded with wakeup event at
>>>> here.
>>>>
>>>>>  void __init icu_init_irq(void)
>>>>>  {
>>>>>        int irq;
>>>>> @@ -49,7 +64,13 @@ void __init icu_init_irq(void)
>>>>>        for (irq = 0; irq < 64; irq++) {
>>>>>                icu_mask_irq(irq);
>>>>>                set_irq_chip(irq, &icu_irq_chip);
>>>>> -               set_irq_handler(irq, handle_level_irq);
>>>>> +
>>>>> +               /* special handler for keypad */
>>>>> +               if (cpu_is_pxa168() && irq == IRQ_PXA168_KEYPAD)
>>>>> +                       set_irq_handler(irq, handle_pxa168_keypad_irq);
>>>>> +               else
>>>>> +                       set_irq_handler(irq, handle_level_irq);
>>>>> +
>>>>>                set_irq_flags(irq, IRQF_VALID);
>>>>>        }
>>>>>  }
>>>>> --
>>>>> 1.7.0.4
>>>>>
>>>>> --
>>>>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>>>>> the body of a message to majordomo@vger.kernel.org
>>>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>>>> Please read the FAQ at  http://www.tux.org/lkml/
>>>>>
>>>>
>>>
>>> Haojian, this is an usual case, but without that clear wake event you
>>> will not be able to clear the keypad interrupt. For my push to open
>>> source I re-wrote the workaround code and added it as a special case
>>> IRQ handler. In the Marvell pxa168 code base it is actually located in
>>> the keypad interrupt handler as the function clear_wakeup(). I felt it
>>> was better to isolate this code in the mmp common code base instead.
>>
>> I'd rather the irq handler not being changed and use platform_data instead.
>> How about something below:
>>
>> diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h
>> b/arch/arm/mach-mmp/include/mach/pxa168.h
>> index 27e1bc7..d2b7946 100644
>> --- a/arch/arm/mach-mmp/include/mach/pxa168.h
>> +++ b/arch/arm/mach-mmp/include/mach/pxa168.h
>> @@ -5,6 +5,7 @@ struct sys_timer;
>>
>>  extern struct sys_timer pxa168_timer;
>>  extern void __init pxa168_init_irq(void);
>> +extern void pxa168_clear_keypad_wakeup(void);
>>
>>  #include <linux/i2c.h>
>>  #include <mach/devices.h>
>> @@ -97,4 +98,10 @@ static inline int pxa168_add_nand(struct
>> pxa3xx_nand_platform_data *info)
>>  {
>>        return pxa_register_device(&pxa168_device_nand, info, sizeof(*info));
>>  }
>> +
>> +static inline int pxa168_add_keypad(struct pxa27x_keypad_platform_data *info)
>> +{
>> +       info->clear_wakeup = pxa168_clear_keypad_wakeup;
>> +       return pxa_register_device(&pxa168_device_keypad, info, sizeof(*info));
>> +}
>>  #endif /* __ASM_MACH_PXA168_H */
>> diff --git a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
>> b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
>> index 7b4eadc..3a6bfe7 100644
>> --- a/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
>> +++ b/arch/arm/mach-pxa/include/mach/pxa27x_keypad.h
>> @@ -52,6 +52,7 @@ struct pxa27x_keypad_platform_data {
>>
>>        /* key debounce interval */
>>        unsigned int    debounce_interval;
>> +       void            (*clear_wakeup);
>>  };
>>
>>  extern void pxa_set_keypad_info(struct pxa27x_keypad_platform_data *info);
>> diff --git a/drivers/input/keyboard/pxa27x_keypad.c
>> b/drivers/input/keyboard/pxa27x_keypad.c
>> index f32404f..3fb94fe 100644
>> --- a/drivers/input/keyboard/pxa27x_keypad.c
>> +++ b/drivers/input/keyboard/pxa27x_keypad.c
>> @@ -330,10 +330,20 @@ static void pxa27x_keypad_scan_direct(struct
>> pxa27x_keypad *keypad)
>>        keypad->direct_key_state = new_state;
>>  }
>>
>> +static void clear_wakeup(struct pxa27x_keypad *keypad)
>> +{
>> +       struct pxa27x_keypad_platform_data *pdata = keypad->pdata;
>> +
>> +       if (pdata->clear_wakeup)
>> +               (pdata->clear_wakeup)();
>> +}
>> +
>>  static irqreturn_t pxa27x_keypad_irq_handler(int irq, void *dev_id)
>>  {
>>        struct pxa27x_keypad *keypad = dev_id;
>> -       unsigned long kpc = keypad_readl(KPC);
>> +       unsigned long kpc;
>> +
>> +       kpc = keypad_readl(KPC);
>>
>>        if (kpc & KPC_DI)
>>                pxa27x_keypad_scan_direct(keypad);
>>
>
> Ok if you are fine with that I will make that change and resubmit!
>

Thanks.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
  2010-08-31  5:00   ` Haojian Zhuang
@ 2010-09-03  4:50     ` Mark F. Brown
  2010-09-03 14:11       ` Marek Vasut
  0 siblings, 1 reply; 17+ messages in thread
From: Mark F. Brown @ 2010-09-03  4:50 UTC (permalink / raw)
  To: Haojian Zhuang
  Cc: Eric Miao, Haojian Zhuang, linux-arm-kernel, linux-kernel, linux-input

On Tue, Aug 31, 2010 at 1:00 AM, Haojian Zhuang
<haojian.zhuang@gmail.com> wrote:
> On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> wrote:
>> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
>> ---
>>  arch/arm/mach-mmp/aspenite.c |   27 +++++++++++++++++++++++++++
>>  1 files changed, 27 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
>> index 9e1bd6b..1b788c5 100644
>> --- a/arch/arm/mach-mmp/aspenite.c
>> +++ b/arch/arm/mach-mmp/aspenite.c
>> @@ -24,6 +24,8 @@
>>  #include <mach/pxa168.h>
>>  #include <mach/gpio.h>
>>  #include <video/pxa168fb.h>
>> +#include <linux/input.h>
>> +#include <plat/pxa27x_keypad.h>
>>
>>  #include "common.h"
>>
>> @@ -97,6 +99,13 @@ static unsigned long common_pin_config[] __initdata = {
>>        GPIO81_LCD_DD21,
>>        GPIO82_LCD_DD22,
>>        GPIO83_LCD_DD23,
>> +
>> +       /* Keypad */
>> +       GPIO109_KP_MKIN1,
>> +       GPIO110_KP_MKIN0,
>> +       GPIO111_KP_MKOUT7,
>> +       GPIO112_KP_MKOUT6,
>> +       GPIO121_KP_MKIN4,
>>  };
>>
>>  static struct smc91x_platdata smc91x_info = {
>> @@ -193,6 +202,23 @@ struct pxa168fb_mach_info aspenite_lcd_info = {
>>        .invert_pixclock        = 0,
>>  };
>>
>> +static unsigned int aspenite_matrix_key_map[] = {
>> +       KEY(0, 6, KEY_UP),      /* SW 4 */
>> +       KEY(0, 7, KEY_DOWN),    /* SW 5 */
>> +       KEY(1, 6, KEY_LEFT),    /* SW 6 */
>> +       KEY(1, 7, KEY_RIGHT),   /* SW 7 */
>> +       KEY(4, 6, KEY_ENTER),   /* SW 8 */
>> +       KEY(4, 7, KEY_ESC),     /* SW 9 */
>> +};
>> +
>> +static struct pxa27x_keypad_platform_data aspenite_keypad_info __initdata = {
>> +       .matrix_key_rows        = 8,
>> +       .matrix_key_cols        = 8,
> It seems that maxium columns is 5, not 8.
>
>> +       .matrix_key_map         = aspenite_matrix_key_map,
>> +       .matrix_key_map_size    = ARRAY_SIZE(aspenite_matrix_key_map),
>> +       .debounce_interval      = 30,
>> +};
>> +
>>  static void __init common_init(void)
>>  {
>>        mfp_config(ARRAY_AND_SIZE(common_pin_config));
>> @@ -203,6 +229,7 @@ static void __init common_init(void)
>>        pxa168_add_ssp(1);
>>        pxa168_add_nand(&aspenite_nand_info);
>>        pxa168_add_fb(&aspenite_lcd_info);
>> +       pxa168_add_keypad(&aspenite_keypad_info);
>>
>>        /* off-chip devices */
>>        platform_device_register(&smc91x_device);
>> --
>> 1.7.0.4
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> Please read the FAQ at  http://www.tux.org/lkml/
>>
>
The maximum keypad columns are 8 and the maximum keypad rows are 5 for
Aspenite. I will correct that in my patch resubmission!

Regards,
-- Mark

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
  2010-09-03  4:50     ` Mark F. Brown
@ 2010-09-03 14:11       ` Marek Vasut
  2010-09-03 14:39         ` Eric Miao
  0 siblings, 1 reply; 17+ messages in thread
From: Marek Vasut @ 2010-09-03 14:11 UTC (permalink / raw)
  To: Mark F. Brown
  Cc: Haojian Zhuang, Eric Miao, Haojian Zhuang, linux-arm-kernel,
	linux-kernel, linux-input

Dne Pá 3. září 2010 06:50:28 Mark F. Brown napsal(a):
> On Tue, Aug 31, 2010 at 1:00 AM, Haojian Zhuang
> 
> <haojian.zhuang@gmail.com> wrote:
> > On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com> 
wrote:
> >> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
> >> ---
> >>  arch/arm/mach-mmp/aspenite.c |   27 +++++++++++++++++++++++++++
> >>  1 files changed, 27 insertions(+), 0 deletions(-)
> >> 
> >> diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
> >> index 9e1bd6b..1b788c5 100644
> >> --- a/arch/arm/mach-mmp/aspenite.c
> >> +++ b/arch/arm/mach-mmp/aspenite.c
> >> @@ -24,6 +24,8 @@
> >>  #include <mach/pxa168.h>
> >>  #include <mach/gpio.h>
> >>  #include <video/pxa168fb.h>
> >> +#include <linux/input.h>
> >> +#include <plat/pxa27x_keypad.h>
> >> 
> >>  #include "common.h"
> >> 
> >> @@ -97,6 +99,13 @@ static unsigned long common_pin_config[] __initdata =
> >> { GPIO81_LCD_DD21,
> >>        GPIO82_LCD_DD22,
> >>        GPIO83_LCD_DD23,
> >> +
> >> +       /* Keypad */
> >> +       GPIO109_KP_MKIN1,
> >> +       GPIO110_KP_MKIN0,
> >> +       GPIO111_KP_MKOUT7,
> >> +       GPIO112_KP_MKOUT6,
> >> +       GPIO121_KP_MKIN4,
> >>  };
> >> 
> >>  static struct smc91x_platdata smc91x_info = {
> >> @@ -193,6 +202,23 @@ struct pxa168fb_mach_info aspenite_lcd_info = {
> >>        .invert_pixclock        = 0,
> >>  };
> >> 
> >> +static unsigned int aspenite_matrix_key_map[] = {
> >> +       KEY(0, 6, KEY_UP),      /* SW 4 */
> >> +       KEY(0, 7, KEY_DOWN),    /* SW 5 */
> >> +       KEY(1, 6, KEY_LEFT),    /* SW 6 */
> >> +       KEY(1, 7, KEY_RIGHT),   /* SW 7 */
> >> +       KEY(4, 6, KEY_ENTER),   /* SW 8 */
> >> +       KEY(4, 7, KEY_ESC),     /* SW 9 */
> >> +};
> >> +
> >> +static struct pxa27x_keypad_platform_data aspenite_keypad_info
> >> __initdata = { +       .matrix_key_rows        = 8,
> >> +       .matrix_key_cols        = 8,
> > 
> > It seems that maxium columns is 5, not 8.
> > 
> >> +       .matrix_key_map         = aspenite_matrix_key_map,
> >> +       .matrix_key_map_size    = ARRAY_SIZE(aspenite_matrix_key_map),
> >> +       .debounce_interval      = 30,
> >> +};
> >> +
> >>  static void __init common_init(void)
> >>  {
> >>        mfp_config(ARRAY_AND_SIZE(common_pin_config));
> >> @@ -203,6 +229,7 @@ static void __init common_init(void)
> >>        pxa168_add_ssp(1);
> >>        pxa168_add_nand(&aspenite_nand_info);
> >>        pxa168_add_fb(&aspenite_lcd_info);
> >> +       pxa168_add_keypad(&aspenite_keypad_info);
> >> 
> >>        /* off-chip devices */
> >>        platform_device_register(&smc91x_device);
> >> --
> >> 1.7.0.4
> >> 
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe linux-kernel"
> >> in the body of a message to majordomo@vger.kernel.org
> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> >> Please read the FAQ at  http://www.tux.org/lkml/
> 
> The maximum keypad columns are 8 and the maximum keypad rows are 5 for
> Aspenite. I will correct that in my patch resubmission!

Eric, did you merge this already ? If so, we'll need a separate patch here?

> 
> Regards,
> -- Mark
> --
> To unsubscribe from this list: send the line "unsubscribe linux-input" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
  2010-09-03 14:11       ` Marek Vasut
@ 2010-09-03 14:39         ` Eric Miao
  0 siblings, 0 replies; 17+ messages in thread
From: Eric Miao @ 2010-09-03 14:39 UTC (permalink / raw)
  To: Marek Vasut
  Cc: Mark F. Brown, Haojian Zhuang, Haojian Zhuang, linux-arm-kernel,
	linux-kernel, linux-input

On Fri, Sep 3, 2010 at 10:11 PM, Marek Vasut <marek.vasut@gmail.com> wrote:
> Dne Pá 3. září 2010 06:50:28 Mark F. Brown napsal(a):
>> On Tue, Aug 31, 2010 at 1:00 AM, Haojian Zhuang
>>
>> <haojian.zhuang@gmail.com> wrote:
>> > On Thu, Aug 26, 2010 at 5:18 PM, Mark F. Brown <mark.brown314@gmail.com>
> wrote:
>> >> Signed-off-by: Mark F. Brown <mark.brown314@gmail.com>
>> >> ---
>> >>  arch/arm/mach-mmp/aspenite.c |   27 +++++++++++++++++++++++++++
>> >>  1 files changed, 27 insertions(+), 0 deletions(-)
>> >>
>> >> diff --git a/arch/arm/mach-mmp/aspenite.c b/arch/arm/mach-mmp/aspenite.c
>> >> index 9e1bd6b..1b788c5 100644
>> >> --- a/arch/arm/mach-mmp/aspenite.c
>> >> +++ b/arch/arm/mach-mmp/aspenite.c
>> >> @@ -24,6 +24,8 @@
>> >>  #include <mach/pxa168.h>
>> >>  #include <mach/gpio.h>
>> >>  #include <video/pxa168fb.h>
>> >> +#include <linux/input.h>
>> >> +#include <plat/pxa27x_keypad.h>
>> >>
>> >>  #include "common.h"
>> >>
>> >> @@ -97,6 +99,13 @@ static unsigned long common_pin_config[] __initdata =
>> >> { GPIO81_LCD_DD21,
>> >>        GPIO82_LCD_DD22,
>> >>        GPIO83_LCD_DD23,
>> >> +
>> >> +       /* Keypad */
>> >> +       GPIO109_KP_MKIN1,
>> >> +       GPIO110_KP_MKIN0,
>> >> +       GPIO111_KP_MKOUT7,
>> >> +       GPIO112_KP_MKOUT6,
>> >> +       GPIO121_KP_MKIN4,
>> >>  };
>> >>
>> >>  static struct smc91x_platdata smc91x_info = {
>> >> @@ -193,6 +202,23 @@ struct pxa168fb_mach_info aspenite_lcd_info = {
>> >>        .invert_pixclock        = 0,
>> >>  };
>> >>
>> >> +static unsigned int aspenite_matrix_key_map[] = {
>> >> +       KEY(0, 6, KEY_UP),      /* SW 4 */
>> >> +       KEY(0, 7, KEY_DOWN),    /* SW 5 */
>> >> +       KEY(1, 6, KEY_LEFT),    /* SW 6 */
>> >> +       KEY(1, 7, KEY_RIGHT),   /* SW 7 */
>> >> +       KEY(4, 6, KEY_ENTER),   /* SW 8 */
>> >> +       KEY(4, 7, KEY_ESC),     /* SW 9 */
>> >> +};
>> >> +
>> >> +static struct pxa27x_keypad_platform_data aspenite_keypad_info
>> >> __initdata = { +       .matrix_key_rows        = 8,
>> >> +       .matrix_key_cols        = 8,
>> >
>> > It seems that maxium columns is 5, not 8.
>> >
>> >> +       .matrix_key_map         = aspenite_matrix_key_map,
>> >> +       .matrix_key_map_size    = ARRAY_SIZE(aspenite_matrix_key_map),
>> >> +       .debounce_interval      = 30,
>> >> +};
>> >> +
>> >>  static void __init common_init(void)
>> >>  {
>> >>        mfp_config(ARRAY_AND_SIZE(common_pin_config));
>> >> @@ -203,6 +229,7 @@ static void __init common_init(void)
>> >>        pxa168_add_ssp(1);
>> >>        pxa168_add_nand(&aspenite_nand_info);
>> >>        pxa168_add_fb(&aspenite_lcd_info);
>> >> +       pxa168_add_keypad(&aspenite_keypad_info);
>> >>
>> >>        /* off-chip devices */
>> >>        platform_device_register(&smc91x_device);
>> >> --
>> >> 1.7.0.4
>> >>
>> >> --
>> >> To unsubscribe from this list: send the line "unsubscribe linux-kernel"
>> >> in the body of a message to majordomo@vger.kernel.org
>> >> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>> >> Please read the FAQ at  http://www.tux.org/lkml/
>>
>> The maximum keypad columns are 8 and the maximum keypad rows are 5 for
>> Aspenite. I will correct that in my patch resubmission!
>
> Eric, did you merge this already ? If so, we'll need a separate patch here?
>

Nope. Together with Mark's other change to the pxa27x_keypad platform_data
for the wakeup cleanup in IRQ, I'd expect a v2 series of this patchset.

>>
>> Regards,
>> -- Mark
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-input" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2010-09-03 14:40 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-08-26  9:18 [PATCH 0/5] ARM: pxa168: add keypad support Mark F. Brown
2010-08-26  9:18 ` [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory Mark F. Brown
2010-08-31  4:13   ` Eric Miao
2010-08-26  9:18 ` [PATCH 2/5] ARM: pxa168: added keypad support Mark F. Brown
2010-08-31  4:56   ` Haojian Zhuang
2010-08-26  9:18 ` [PATCH 3/5] ARM: pxa168: added wake clear register support for APMU Mark F. Brown
2010-08-26  9:18 ` [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts Mark F. Brown
2010-08-31  4:53   ` Haojian Zhuang
2010-08-31  6:28     ` Mark F. Brown
2010-08-31  7:05       ` Eric Miao
2010-08-31  7:13         ` Mark F. Brown
2010-08-31  7:15           ` Eric Miao
2010-08-26  9:18 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Mark F. Brown
2010-08-31  5:00   ` Haojian Zhuang
2010-09-03  4:50     ` Mark F. Brown
2010-09-03 14:11       ` Marek Vasut
2010-09-03 14:39         ` Eric Miao

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).