Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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 */
+6 −1
Original line number Diff line number Diff line
@@ -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) {