Skip to content

Commit

Permalink
Input: spear_keyboard - use correct io accessors
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Shiraz Hashim authored and Dmitry Torokhov committed Jul 8, 2012
1 parent 5bdea83 commit e99191f
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions drivers/input/keyboard/spear-keyboard.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down Expand Up @@ -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;

Expand All @@ -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);
Expand All @@ -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;
}
Expand All @@ -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;

Expand All @@ -114,26 +114,26 @@ 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;
}

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);

Expand Down

0 comments on commit e99191f

Please sign in to comment.