aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/input/keyboard/spear-keyboard.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/input/keyboard/spear-keyboard.c b/drivers/input/keyboard/spear-keyboard.c
index a51cdc75466a..c499387d8735 100644
--- a/drivers/input/keyboard/spear-keyboard.c
+++ b/drivers/input/keyboard/spear-keyboard.c
@@ -33,13 +33,10 @@
33#define INTR_MASK 0x54 33#define INTR_MASK 0x54
34 34
35/* Register Values */ 35/* Register Values */
36/*
37 * pclk freq mask = (APB FEQ -1)= 82 MHZ.Programme bit 15-9 in mode
38 * control register as 1010010(82MHZ)
39 */
40#define PCLK_FREQ_MSK 0xA400 /* 82 MHz */
41#define NUM_ROWS 16 36#define NUM_ROWS 16
42#define NUM_COLS 16 37#define NUM_COLS 16
38#define MODE_CTL_PCLK_FREQ_SHIFT 9
39#define MODE_CTL_PCLK_FREQ_MSK 0x7F
43 40
44#define MODE_CTL_KEYBOARD (0x2 << 0) 41#define MODE_CTL_KEYBOARD (0x2 << 0)
45#define MODE_CTL_SCAN_RATE_10 (0x0 << 2) 42#define MODE_CTL_SCAN_RATE_10 (0x0 << 2)
@@ -113,8 +110,12 @@ static int spear_kbd_open(struct input_dev *dev)
113 if (error) 110 if (error)
114 return error; 111 return error;
115 112
113 /* keyboard rate to be programmed is input clock (in MHz) - 1 */
114 val = clk_get_rate(kbd->clk) / 1000000 - 1;
115 val = (val & MODE_CTL_PCLK_FREQ_MSK) << MODE_CTL_PCLK_FREQ_SHIFT;
116
116 /* program keyboard */ 117 /* program keyboard */
117 val = MODE_CTL_SCAN_RATE_80 | MODE_CTL_KEYBOARD | PCLK_FREQ_MSK | 118 val = MODE_CTL_SCAN_RATE_80 | MODE_CTL_KEYBOARD | val |
118 (kbd->mode << MODE_CTL_KEYNUM_SHIFT); 119 (kbd->mode << MODE_CTL_KEYNUM_SHIFT);
119 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); 120 writel_relaxed(val, kbd->io_base + MODE_CTL_REG);
120 writel_relaxed(1, kbd->io_base + STATUS_REG); 121 writel_relaxed(1, kbd->io_base + STATUS_REG);