Skip to content

Commit

Permalink
Input: spear-keyboard - configure device according to supplied mode
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Rajeev Kumar authored and Dmitry Torokhov committed Feb 28, 2012
1 parent 5e238b5 commit f8354c6
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
6 changes: 6 additions & 0 deletions arch/arm/plat-spear/include/plat/keyboard.h
Original file line number Diff line number Diff line change
Expand Up @@ -140,17 +140,23 @@ 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.
*/
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 */
Expand Down
7 changes: 6 additions & 1 deletion drivers/input/keyboard/spear-keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,15 @@
#define ROW_MASK 0xF0
#define COLUMN_MASK 0x0F
#define ROW_SHIFT 4
#define KEY_MATRIX_SHIFT 6

struct spear_kbd {
struct input_dev *input;
struct resource *res;
void __iomem *io_base;
struct clk *clk;
unsigned int irq;
unsigned int mode;
unsigned short last_key;
unsigned short keycodes[256];
};
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit f8354c6

Please sign in to comment.