Input: spear_keyboard - use correct io accessors
authorShiraz Hashim <shiraz.hashim@st.com>
Sun, 8 Jul 2012 01:00:36 +0000 (18:00 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sun, 8 Jul 2012 01:01:47 +0000 (18:01 -0700)
All SPEAr keyboard registers are 32 bit wide and are word aligned. This
patch aligns all io access to be word size using relaxed version of
readl/writel.

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 45dd02cbcaa0cb63806349b50a60ce099e55c1a5..10dda9f8e706151d2601580665d753ee01eaf5de 100644 (file)
@@ -27,9 +27,9 @@
 #include <plat/keyboard.h>
 
 /* Keyboard Registers */
-#define MODE_REG       0x00    /* 16 bit reg */
-#define STATUS_REG     0x0C    /* 2 bit reg */
-#define DATA_REG       0x10    /* 8 bit reg */
+#define MODE_REG       0x00
+#define STATUS_REG     0x0C
+#define DATA_REG       0x10
 #define INTR_MASK      0x54
 
 /* Register Values */
@@ -72,9 +72,9 @@ static irqreturn_t spear_kbd_interrupt(int irq, void *dev_id)
        struct spear_kbd *kbd = dev_id;
        struct input_dev *input = kbd->input;
        unsigned int key;
-       u8 sts, val;
+       u32 sts, val;
 
-       sts = readb(kbd->io_base + STATUS_REG);
+       sts = readl_relaxed(kbd->io_base + STATUS_REG);
        if (!(sts & DATA_AVAIL))
                return IRQ_NONE;
 
@@ -84,7 +84,7 @@ static irqreturn_t spear_kbd_interrupt(int irq, void *dev_id)
        }
 
        /* following reads active (row, col) pair */
-       val = readb(kbd->io_base + DATA_REG);
+       val = readl_relaxed(kbd->io_base + DATA_REG);
        key = kbd->keycodes[val];
 
        input_event(input, EV_MSC, MSC_SCAN, val);
@@ -94,7 +94,7 @@ static irqreturn_t spear_kbd_interrupt(int irq, void *dev_id)
        kbd->last_key = key;
 
        /* clear interrupt */
-       writeb(0, kbd->io_base + STATUS_REG);
+       writel_relaxed(0, kbd->io_base + STATUS_REG);
 
        return IRQ_HANDLED;
 }
@@ -103,7 +103,7 @@ static int spear_kbd_open(struct input_dev *dev)
 {
        struct spear_kbd *kbd = input_get_drvdata(dev);
        int error;
-       u16 val;
+       u32 val;
 
        kbd->last_key = KEY_RESERVED;
 
@@ -114,13 +114,13 @@ static int spear_kbd_open(struct input_dev *dev)
        /* program keyboard */
        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);
+       writel_relaxed(val, kbd->io_base + MODE_REG);
+       writel_relaxed(1, kbd->io_base + STATUS_REG);
 
        /* start key scan */
-       val = readw(kbd->io_base + MODE_REG);
+       val = readl_relaxed(kbd->io_base + MODE_REG);
        val |= START_SCAN;
-       writew(val, kbd->io_base + MODE_REG);
+       writel_relaxed(val, kbd->io_base + MODE_REG);
 
        return 0;
 }
@@ -128,12 +128,12 @@ static int spear_kbd_open(struct input_dev *dev)
 static void spear_kbd_close(struct input_dev *dev)
 {
        struct spear_kbd *kbd = input_get_drvdata(dev);
-       u16 val;
+       u32 val;
 
        /* stop key scan */
-       val = readw(kbd->io_base + MODE_REG);
+       val = readl_relaxed(kbd->io_base + MODE_REG);
        val &= ~START_SCAN;
-       writew(val, kbd->io_base + MODE_REG);
+       writel_relaxed(val, kbd->io_base + MODE_REG);
 
        clk_disable(kbd->clk);