>From ff7b09789b14685fa8e0849f2bc048be5b16bd39 Mon Sep 17 00:00:00 2001 From: Jekyll Lai <[email protected]> Date: Sat, 1 Jan 2011 18:27:48 +0800 Subject: [PATCH 1/3] mid_keypad: setting multi-function-pin In some kboot version, there was no correct alternative pin setting that caused no interrupt trigger from keypad controller. An additional pin configuration can solve this defect.
Against the bug http://bugs.meego.com/show_bug.cgi?id=10961 Signed-off-by: Jekyll Lai <[email protected]> --- drivers/input/keyboard/intel_mid_keypad.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/drivers/input/keyboard/intel_mid_keypad.c b/drivers/input/keyboard/intel_mid_keypad.c index b41d50f..7e9b04a --- a/drivers/input/keyboard/intel_mid_keypad.c +++ b/drivers/input/keyboard/intel_mid_keypad.c @@ -531,12 +531,32 @@ static irqreturn_t mrst_keypad_irq_handler(int irq, void *dev_id) return IRQ_HANDLED; } +#define LANGWELL_GAFR 0xFF12C038 + +/* setting multi-function-pin */ +static void mrst_keypad_set_alt_func(void) +{ + u32 __iomem *mem = ioremap_nocache(LANGWELL_GAFR, 16); + u32 value; + if (!mem) { + pr_err("can not map GPIO controller address.\n"); + return; + } + value = (readl(mem + 1) & 0x0000ffff) | 0x55550000; + writel(value, mem + 1); + value = (readl(mem + 2) & 0xff000000) | 0x00555555; + writel(value, mem + 2); + iounmap(mem); +} + static int mrst_keypad_gpio_init(void) { int i, err, cnt = 0; int pins = KEYPAD_MATRIX_GPIO_IN_PIN + MAX_MATRIX_KEY_ROWS + MAX_MATRIX_KEY_COLS + MAX_DIRECT_KEY_NUM; + mrst_keypad_set_alt_func(); + /* explicitely tell which pins have been occupied... */ for (i = KEYPAD_MATRIX_GPIO_IN_PIN; i < pins; i++, cnt++) { err = gpio_request(i, NULL); -- 1.7.0.4 _______________________________________________ MeeGo-kernel mailing list [email protected] http://lists.meego.com/listinfo/meego-kernel
