Commit f8354c60 authored by Rajeev Kumar's avatar Rajeev Kumar Committed by Dmitry Torokhov

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: default avatarRajeev Kumar <rajeev-dlh.kumar@st.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@st.com>
Signed-off-by: default avatarDmitry Torokhov <dtor@mail.ru>
parent 5e238b54
...@@ -140,10 +140,15 @@ int _name[] = { \ ...@@ -140,10 +140,15 @@ int _name[] = { \
KEY(5, 5, KEY_ZENKAKUHANKAKU), \ 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 * struct kbd_platform_data - spear keyboard platform data
* keymap: pointer to keymap data (table and size) * keymap: pointer to keymap data (table and size)
* rep: enables key autorepeat * rep: enables key autorepeat
* mode: choose keyboard support(9x9, 6x6, 2x2)
* *
* This structure is supposed to be used by platform code to supply * This structure is supposed to be used by platform code to supply
* keymaps to drivers that implement keyboards. * keymaps to drivers that implement keyboards.
...@@ -151,6 +156,7 @@ int _name[] = { \ ...@@ -151,6 +156,7 @@ int _name[] = { \
struct kbd_platform_data { struct kbd_platform_data {
const struct matrix_keymap_data *keymap; const struct matrix_keymap_data *keymap;
bool rep; bool rep;
unsigned int mode;
}; };
/* This function is used to set platform data field of pdev->dev */ /* This function is used to set platform data field of pdev->dev */
......
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#define ROW_MASK 0xF0 #define ROW_MASK 0xF0
#define COLUMN_MASK 0x0F #define COLUMN_MASK 0x0F
#define ROW_SHIFT 4 #define ROW_SHIFT 4
#define KEY_MATRIX_SHIFT 6
struct spear_kbd { struct spear_kbd {
struct input_dev *input; struct input_dev *input;
...@@ -57,6 +58,7 @@ struct spear_kbd { ...@@ -57,6 +58,7 @@ struct spear_kbd {
void __iomem *io_base; void __iomem *io_base;
struct clk *clk; struct clk *clk;
unsigned int irq; unsigned int irq;
unsigned int mode;
unsigned short last_key; unsigned short last_key;
unsigned short keycodes[256]; unsigned short keycodes[256];
}; };
...@@ -106,7 +108,8 @@ static int spear_kbd_open(struct input_dev *dev) ...@@ -106,7 +108,8 @@ static int spear_kbd_open(struct input_dev *dev)
return error; return error;
/* program keyboard */ /* 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); writew(val, kbd->io_base + MODE_REG);
writeb(1, kbd->io_base + STATUS_REG); writeb(1, kbd->io_base + STATUS_REG);
...@@ -176,6 +179,8 @@ static int __devinit spear_kbd_probe(struct platform_device *pdev) ...@@ -176,6 +179,8 @@ static int __devinit spear_kbd_probe(struct platform_device *pdev)
kbd->input = input_dev; kbd->input = input_dev;
kbd->irq = irq; kbd->irq = irq;
kbd->mode = pdata->mode;
kbd->res = request_mem_region(res->start, resource_size(res), kbd->res = request_mem_region(res->start, resource_size(res),
pdev->name); pdev->name);
if (!kbd->res) { if (!kbd->res) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment