aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRajeev Kumar <rajeev-dlh.kumar@st.com>2012-02-24 03:51:40 -0500
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2012-02-28 04:18:32 -0500
commitf8354c60ca2212810c168d8f992559226c8c0e71 (patch)
treea9d8d77c9e6c7e76fa982c757e0eb82d98024998
parent5e238b548aac6227ce296d41364a3f7b10caff44 (diff)
Input: spear-keyboard - configure device according to supplied mode
Let platform pass mode information to keyboard driver according to which it configures itself. The mode can be - KEYPAD_9x9 0 - KEYPAD_6x6 1 - KEYPAD_2x2 2 Signed-off-by: Rajeev Kumar <rajeev-dlh.kumar@st.com> Signed-off-by: Viresh Kumar <viresh.kumar@st.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
-rw-r--r--arch/arm/plat-spear/include/plat/keyboard.h6
-rw-r--r--drivers/input/keyboard/spear-keyboard.c7
2 files changed, 12 insertions, 1 deletions
diff --git a/arch/arm/plat-spear/include/plat/keyboard.h b/arch/arm/plat-spear/include/plat/keyboard.h
index 130c045a5b89..c16cc31ecbed 100644
--- a/arch/arm/plat-spear/include/plat/keyboard.h
+++ b/arch/arm/plat-spear/include/plat/keyboard.h
@@ -140,10 +140,15 @@ int _name[] = { \
140 KEY(5, 5, KEY_ZENKAKUHANKAKU), \ 140 KEY(5, 5, KEY_ZENKAKUHANKAKU), \
141} 141}
142 142
143#define KEYPAD_9x9 0
144#define KEYPAD_6x6 1
145#define KEYPAD_2x2 2
146
143/** 147/**
144 * struct kbd_platform_data - spear keyboard platform data 148 * struct kbd_platform_data - spear keyboard platform data
145 * keymap: pointer to keymap data (table and size) 149 * keymap: pointer to keymap data (table and size)
146 * rep: enables key autorepeat 150 * rep: enables key autorepeat
151 * mode: choose keyboard support(9x9, 6x6, 2x2)
147 * 152 *
148 * This structure is supposed to be used by platform code to supply 153 * This structure is supposed to be used by platform code to supply
149 * keymaps to drivers that implement keyboards. 154 * keymaps to drivers that implement keyboards.
@@ -151,6 +156,7 @@ int _name[] = { \
151struct kbd_platform_data { 156struct kbd_platform_data {
152 const struct matrix_keymap_data *keymap; 157 const struct matrix_keymap_data *keymap;
153 bool rep; 158 bool rep;
159 unsigned int mode;
154}; 160};
155 161
156/* This function is used to set platform data field of pdev->dev */ 162/* This function is used to set platform data field of pdev->dev */
diff --git a/drivers/input/keyboard/spear-keyboard.c b/drivers/input/keyboard/spear-keyboard.c
index c88bd63dc9cc..933fb019b967 100644
--- a/drivers/input/keyboard/spear-keyboard.c
+++ b/drivers/input/keyboard/spear-keyboard.c
@@ -50,6 +50,7 @@
50#define ROW_MASK 0xF0 50#define ROW_MASK 0xF0
51#define COLUMN_MASK 0x0F 51#define COLUMN_MASK 0x0F
52#define ROW_SHIFT 4 52#define ROW_SHIFT 4
53#define KEY_MATRIX_SHIFT 6
53 54
54struct spear_kbd { 55struct spear_kbd {
55 struct input_dev *input; 56 struct input_dev *input;
@@ -57,6 +58,7 @@ struct spear_kbd {
57 void __iomem *io_base; 58 void __iomem *io_base;
58 struct clk *clk; 59 struct clk *clk;
59 unsigned int irq; 60 unsigned int irq;
61 unsigned int mode;
60 unsigned short last_key; 62 unsigned short last_key;
61 unsigned short keycodes[256]; 63 unsigned short keycodes[256];
62}; 64};
@@ -106,7 +108,8 @@ static int spear_kbd_open(struct input_dev *dev)
106 return error; 108 return error;
107 109
108 /* program keyboard */ 110 /* program keyboard */
109 val = SCAN_RATE_80 | MODE_KEYBOARD | PCLK_FREQ_MSK; 111 val = SCAN_RATE_80 | MODE_KEYBOARD | PCLK_FREQ_MSK |
112 (kbd->mode << KEY_MATRIX_SHIFT);
110 writew(val, kbd->io_base + MODE_REG); 113 writew(val, kbd->io_base + MODE_REG);
111 writeb(1, kbd->io_base + STATUS_REG); 114 writeb(1, kbd->io_base + STATUS_REG);
112 115
@@ -176,6 +179,8 @@ static int __devinit spear_kbd_probe(struct platform_device *pdev)
176 179
177 kbd->input = input_dev; 180 kbd->input = input_dev;
178 kbd->irq = irq; 181 kbd->irq = irq;
182 kbd->mode = pdata->mode;
183
179 kbd->res = request_mem_region(res->start, resource_size(res), 184 kbd->res = request_mem_region(res->start, resource_size(res),
180 pdev->name); 185 pdev->name);
181 if (!kbd->res) { 186 if (!kbd->res) {