Re: [Patch v7 1/2] input: add support for Nomadik SKE keypad controller
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2010-09-30 02:40:54
Subsystem:
arm port, arm/nomadik/ux500 architectures, input (keyboard, mouse, joystick, touchscreen) drivers, the rest · Maintainers:
Russell King, Linus Walleij, Dmitry Torokhov, Linus Torvalds
On Tue, Sep 28, 2010 at 03:02:04PM +0530, Sundar Iyer wrote:
Add support for the keypad controller in the Scroll Key Encoder (SKE) module on the Nomadik family and the DB8500 SoC. Acked-by: Linus Walleij <redacted> Signed-off-by: Sundar Iyer <redacted> Signed-off-by: Dmitry Torokhov <redacted>
Applied with the following small changes: arch/arm/mach-ux500/board-mop500.c | 2 +- arch/arm/plat-nomadik/include/plat/ske.h | 2 +- drivers/input/keyboard/nomadik-ske-keypad.c | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/arch/arm/mach-ux500/board-mop500.c b/arch/arm/mach-ux500/board-mop500.c
index 3450b74..5265fb9 100644
--- a/arch/arm/mach-ux500/board-mop500.c
+++ b/arch/arm/mach-ux500/board-mop500.c@@ -177,7 +177,7 @@ static const unsigned int ux500_keymap[] = { KEY(3, 2, KEY_7), }; -static struct matrix_keymap_data ux500_keymap_data = { +static const struct matrix_keymap_data ux500_keymap_data = { .keymap = ux500_keymap, .keymap_size = ARRAY_SIZE(ux500_keymap), };
diff --git a/arch/arm/plat-nomadik/include/plat/ske.h b/arch/arm/plat-nomadik/include/plat/ske.h
index 148b2bc..31382fb 100644
--- a/arch/arm/plat-nomadik/include/plat/ske.h
+++ b/arch/arm/plat-nomadik/include/plat/ske.h@@ -40,7 +40,7 @@ struct ske_keypad_platform_data { int (*init)(void); int (*exit)(void); - struct matrix_keymap_data *keymap_data; + const struct matrix_keymap_data *keymap_data; u8 krow; u8 kcol; u8 debounce_ms;
diff --git a/drivers/input/keyboard/nomadik-ske-keypad.c b/drivers/input/keyboard/nomadik-ske-keypad.c
index 8c6ce8a..6e0f230 100644
--- a/drivers/input/keyboard/nomadik-ske-keypad.c
+++ b/drivers/input/keyboard/nomadik-ske-keypad.c@@ -83,7 +83,7 @@ static void ske_keypad_set_bits(struct ske_keypad *keypad, u16 addr, } /* - * ske_keypad_chip_init : init keypad controller configuration + * ske_keypad_chip_init: init keypad controller configuration * * Enable Multi key press detection, auto scan mode */
@@ -144,7 +144,7 @@ static void ske_keypad_read_data(struct ske_keypad *keypad) * Read the auto scan registers * * Each SKE_ASRx (x=0 to x=3) contains two row values. - * lower byte contains row value for coloumn 2*x, + * lower byte contains row value for column 2*x, * upper byte contains row value for column 2*x + 1 */ for (i = 0; i < SKE_NUM_ASRX_REGISTERS; i++) {
@@ -152,7 +152,7 @@ static void ske_keypad_read_data(struct ske_keypad *keypad) if (!ske_asr) continue; - /* now that ASRx is zero, find out the coloumn x and row y*/ + /* now that ASRx is zero, find out the column x and row y*/ if (ske_asr & 0xff) { col = i * 2; status = ske_asr & 0xff;
@@ -251,7 +251,7 @@ static int __devinit ske_keypad_probe(struct platform_device *pdev) keypad->clk = clk_get(&pdev->dev, NULL); if (IS_ERR(keypad->clk)) { - dev_err(&pdev->dev, "failed to clk_get\n"); + dev_err(&pdev->dev, "failed to get clk\n"); error = PTR_ERR(keypad->clk); goto err_iounmap; }
@@ -285,8 +285,8 @@ static int __devinit ske_keypad_probe(struct platform_device *pdev) goto err_clk_disable; } - error = request_irq(keypad->irq, ske_keypad_irq, 0, - "ske-keypad", keypad); + error = request_threaded_irq(keypad->irq, NULL, ske_keypad_irq, + IRQF_ONESHOT, "ske-keypad", keypad); if (error) { dev_err(&pdev->dev, "allocate irq %d failed\n", keypad->irq); goto err_clk_disable;
The main change is use of request_threaded_irq() - we do need it as you msleep() in the handler. Thanks. -- Dmitry