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>
This commit is contained in:
Родитель
5e238b548a
Коммит
f8354c60ca
|
@ -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 */
|
||||
|
|
|
@ -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) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче