diff options
| author | Shiraz Hashim <shiraz.hashim@st.com> | 2012-07-07 21:01:07 -0400 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2012-07-07 21:01:55 -0400 |
| commit | 98e4d4d6bcf130cbf5a684c4f98c345f13e2f28c (patch) | |
| tree | 350634dcf4980202aa76f91cfc2c3264f2a1d51e | |
| parent | f6f2efa35f6b76034e5a31a075218feaa10f1812 (diff) | |
Input: spear_keyboard - generalize keyboard frequency configuration
Current implementation hard coded keyboard frequency configuration
assuming input clock as fixed APB (83 MHz). Generalize the configuration
using clock framework APIs.
Signed-off-by: Shiraz Hashim <shiraz.hashim@st.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
| -rw-r--r-- | drivers/input/keyboard/spear-keyboard.c | 13 |
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); |
