From 6c666e74385ab5920f66cdc525fc06046d5f7050 Mon Sep 17 00:00:00 2001 From: Rajeev Kumar Date: Fri, 24 Feb 2012 00:51:40 -0800 Subject: [PATCH] --- yaml --- r: 294015 b: refs/heads/master c: f8354c60ca2212810c168d8f992559226c8c0e71 h: refs/heads/master i: 294013: 9b0a670707b567633b26b1c6164f1df47f1b376f 294011: 89dacbb7d40fabeaf04f9e3f9d96eeb891f4da4b 294007: 4ab01aea8105d0db9eda6f6fcdcdd82bc39e91b9 293999: 5485e242fdb52f5a7169ab660efa81e5cfae4b0a 293983: 3633f769698b1b5c48b97ac4943a179b2dea07f2 293951: a0b6489be67839c718cfc4e88dbc13c2444a2dcd 293887: 53b5c2fe7b9bb0297dca6201aaead44892fc077e v: v3 --- [refs] | 2 +- trunk/arch/arm/plat-spear/include/plat/keyboard.h | 6 ++++++ trunk/drivers/input/keyboard/spear-keyboard.c | 7 ++++++- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 1be404cdae40..b381621dd332 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5e238b548aac6227ce296d41364a3f7b10caff44 +refs/heads/master: f8354c60ca2212810c168d8f992559226c8c0e71 diff --git a/trunk/arch/arm/plat-spear/include/plat/keyboard.h b/trunk/arch/arm/plat-spear/include/plat/keyboard.h index 130c045a5b89..c16cc31ecbed 100644 --- a/trunk/arch/arm/plat-spear/include/plat/keyboard.h +++ b/trunk/arch/arm/plat-spear/include/plat/keyboard.h @@ -140,10 +140,15 @@ int _name[] = { \ KEY(5, 5, KEY_ZENKAKUHANKAKU), \ } +#define KEYPAD_9x9 0 +#define KEYPAD_6x6 1 +#define KEYPAD_2x2 2 + /** * struct kbd_platform_data - spear keyboard platform data * keymap: pointer to keymap data (table and size) * rep: enables key autorepeat + * mode: choose keyboard support(9x9, 6x6, 2x2) * * This structure is supposed to be used by platform code to supply * keymaps to drivers that implement keyboards. @@ -151,6 +156,7 @@ int _name[] = { \ struct kbd_platform_data { const struct matrix_keymap_data *keymap; bool rep; + unsigned int mode; }; /* This function is used to set platform data field of pdev->dev */ diff --git a/trunk/drivers/input/keyboard/spear-keyboard.c b/trunk/drivers/input/keyboard/spear-keyboard.c index c88bd63dc9cc..933fb019b967 100644 --- a/trunk/drivers/input/keyboard/spear-keyboard.c +++ b/trunk/drivers/input/keyboard/spear-keyboard.c @@ -50,6 +50,7 @@ #define ROW_MASK 0xF0 #define COLUMN_MASK 0x0F #define ROW_SHIFT 4 +#define KEY_MATRIX_SHIFT 6 struct spear_kbd { struct input_dev *input; @@ -57,6 +58,7 @@ struct spear_kbd { void __iomem *io_base; struct clk *clk; unsigned int irq; + unsigned int mode; unsigned short last_key; unsigned short keycodes[256]; }; @@ -106,7 +108,8 @@ static int spear_kbd_open(struct input_dev *dev) return error; /* program keyboard */ - val = SCAN_RATE_80 | MODE_KEYBOARD | PCLK_FREQ_MSK; + val = SCAN_RATE_80 | MODE_KEYBOARD | PCLK_FREQ_MSK | + (kbd->mode << KEY_MATRIX_SHIFT); writew(val, kbd->io_base + MODE_REG); writeb(1, kbd->io_base + STATUS_REG); @@ -176,6 +179,8 @@ static int __devinit spear_kbd_probe(struct platform_device *pdev) kbd->input = input_dev; kbd->irq = irq; + kbd->mode = pdata->mode; + kbd->res = request_mem_region(res->start, resource_size(res), pdev->name); if (!kbd->res) {