* [PATCH 1/5] ARM: pxa27x/pxa3xx: moved pxa27x_keypad.h to platform pxa directory
[not found] <1282814339-10934-1-git-send-email-mark.brown314@gmail.com>
@ 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
` (5 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Mark F. Brown @ 2010-08-26 9:18 UTC (permalink / raw)
To: Eric Miao, Haojian Zhuang, linux-arm-kernel; +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] 16+ messages in thread
* [PATCH 2/5] ARM: pxa168: added keypad support
[not found] <1282814339-10934-1-git-send-email-mark.brown314@gmail.com>
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
` (4 subsequent siblings)
6 siblings, 1 reply; 16+ messages in thread
From: Mark F. Brown @ 2010-08-26 9:18 UTC (permalink / raw)
To: Eric Miao, Haojian Zhuang, linux-arm-kernel; +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] 16+ messages in thread
* [PATCH 3/5] ARM: pxa168: added wake clear register support for APMU
[not found] <1282814339-10934-1-git-send-email-mark.brown314@gmail.com>
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
` (3 subsequent siblings)
6 siblings, 0 replies; 16+ messages in thread
From: Mark F. Brown @ 2010-08-26 9:18 UTC (permalink / raw)
To: Eric Miao, Haojian Zhuang, linux-arm-kernel; +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] 16+ messages in thread
* [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
[not found] <1282814339-10934-1-git-send-email-mark.brown314@gmail.com>
` (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-26 9:18 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Mark F. Brown
` (2 subsequent siblings)
6 siblings, 0 replies; 16+ messages in thread
From: Mark F. Brown @ 2010-08-26 9:18 UTC (permalink / raw)
To: Eric Miao, Haojian Zhuang, linux-arm-kernel; +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] 16+ messages in thread
* [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
[not found] <1282814339-10934-1-git-send-email-mark.brown314@gmail.com>
` (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
[not found] ` <1282814339-10934-5-git-send-email-mark.brown314@gmail.com>
[not found] ` <1282814339-10934-6-git-send-email-mark.brown314@gmail.com>
6 siblings, 0 replies; 16+ messages in thread
From: Mark F. Brown @ 2010-08-26 9:18 UTC (permalink / raw)
To: Eric Miao, Haojian Zhuang, linux-arm-kernel; +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] 16+ 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; 16+ 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
>
>
--
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] 16+ messages in thread
* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
[not found] ` <1282814339-10934-5-git-send-email-mark.brown314@gmail.com>
@ 2010-08-31 4:53 ` Haojian Zhuang
2010-08-31 6:28 ` Mark F. Brown
0 siblings, 1 reply; 16+ 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/
>
--
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] 16+ 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; 16+ 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] 16+ messages in thread
* Re: [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
[not found] ` <1282814339-10934-6-git-send-email-mark.brown314@gmail.com>
@ 2010-08-31 5:00 ` Haojian Zhuang
2010-09-03 4:50 ` Mark F. Brown
0 siblings, 1 reply; 16+ 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/
>
--
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] 16+ messages in thread
* Re: [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts
2010-08-31 4:53 ` [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts Haojian Zhuang
@ 2010-08-31 6:28 ` Mark F. Brown
2010-08-31 7:05 ` Eric Miao
0 siblings, 1 reply; 16+ 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
--
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] 16+ 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; 16+ 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);
--
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 related [flat|nested] 16+ 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; 16+ 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
--
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] 16+ 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; 16+ 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.
--
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] 16+ messages in thread
* Re: [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad
2010-08-31 5:00 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Haojian Zhuang
@ 2010-09-03 4:50 ` Mark F. Brown
2010-09-03 14:11 ` Marek Vasut
0 siblings, 1 reply; 16+ 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
--
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] 16+ 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; 16+ messages in thread
From: Marek Vasut @ 2010-09-03 14:11 UTC (permalink / raw)
To: Mark F. Brown
Cc: Eric Miao, Haojian Zhuang, Haojian Zhuang, linux-kernel,
linux-input, linux-arm-kernel
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
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 16+ 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; 16+ messages in thread
From: Eric Miao @ 2010-09-03 14:39 UTC (permalink / raw)
To: Marek Vasut
Cc: Haojian Zhuang, Haojian Zhuang, linux-kernel, linux-input,
Mark F. Brown, linux-arm-kernel
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
>
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2010-09-03 14:39 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1282814339-10934-1-git-send-email-mark.brown314@gmail.com>
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-26 9:18 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad Mark F. Brown
[not found] ` <1282814339-10934-5-git-send-email-mark.brown314@gmail.com>
2010-08-31 4:53 ` [PATCH 4/5] ARM: pxa168: added special case handler for keypad interrupts 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
[not found] ` <1282814339-10934-6-git-send-email-mark.brown314@gmail.com>
2010-08-31 5:00 ` [PATCH 5/5] ARM: pxa168: aspenite: add board support for keypad 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).