Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Shiraz Hashim and committed by
Dmitry Torokhov
98e4d4d6 f6f2efa3

+7 -6
+7 -6
drivers/input/keyboard/spear-keyboard.c
··· 33 33 #define INTR_MASK 0x54 34 34 35 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 36 #define NUM_ROWS 16 42 37 #define NUM_COLS 16 38 + #define MODE_CTL_PCLK_FREQ_SHIFT 9 39 + #define MODE_CTL_PCLK_FREQ_MSK 0x7F 43 40 44 41 #define MODE_CTL_KEYBOARD (0x2 << 0) 45 42 #define MODE_CTL_SCAN_RATE_10 (0x0 << 2) ··· 110 113 if (error) 111 114 return error; 112 115 116 + /* keyboard rate to be programmed is input clock (in MHz) - 1 */ 117 + val = clk_get_rate(kbd->clk) / 1000000 - 1; 118 + val = (val & MODE_CTL_PCLK_FREQ_MSK) << MODE_CTL_PCLK_FREQ_SHIFT; 119 + 113 120 /* program keyboard */ 114 - val = MODE_CTL_SCAN_RATE_80 | MODE_CTL_KEYBOARD | PCLK_FREQ_MSK | 121 + val = MODE_CTL_SCAN_RATE_80 | MODE_CTL_KEYBOARD | val | 115 122 (kbd->mode << MODE_CTL_KEYNUM_SHIFT); 116 123 writel_relaxed(val, kbd->io_base + MODE_CTL_REG); 117 124 writel_relaxed(1, kbd->io_base + STATUS_REG);