Input: spear_keyboard - generalize keyboard frequency configuration
authorShiraz Hashim <shiraz.hashim@st.com>
Sun, 8 Jul 2012 01:01:07 +0000 (18:01 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 8 Jul 2012 01:01:55 +0000 (18:01 -0700)
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>
drivers/input/keyboard/spear-keyboard.c

index a51cdc75466a5bbfa89891ccec673df86643924c..c499387d8735aea3044fcec080682aa58d1a5305 100644 (file)
 #define INTR_MASK      0x54
 
 /* Register Values */
-/*
- * pclk freq mask = (APB FEQ -1)= 82 MHZ.Programme bit 15-9 in mode
- * control register as 1010010(82MHZ)
- */
-#define PCLK_FREQ_MSK  0xA400  /* 82 MHz */
 #define NUM_ROWS       16
 #define NUM_COLS       16
+#define MODE_CTL_PCLK_FREQ_SHIFT       9
+#define MODE_CTL_PCLK_FREQ_MSK         0x7F
 
 #define MODE_CTL_KEYBOARD      (0x2 << 0)
 #define MODE_CTL_SCAN_RATE_10  (0x0 << 2)
@@ -113,8 +110,12 @@ static int spear_kbd_open(struct input_dev *dev)
        if (error)
                return error;
 
+       /* keyboard rate to be programmed is input clock (in MHz) - 1 */
+       val = clk_get_rate(kbd->clk) / 1000000 - 1;
+       val = (val & MODE_CTL_PCLK_FREQ_MSK) << MODE_CTL_PCLK_FREQ_SHIFT;
+
        /* program keyboard */
-       val = MODE_CTL_SCAN_RATE_80 | MODE_CTL_KEYBOARD | PCLK_FREQ_MSK |
+       val = MODE_CTL_SCAN_RATE_80 | MODE_CTL_KEYBOARD | val |
                (kbd->mode << MODE_CTL_KEYNUM_SHIFT);
        writel_relaxed(val, kbd->io_base + MODE_CTL_REG);
        writel_relaxed(1, kbd->io_base + STATUS_REG);