ENGR00116921 Keypad will not respond if pressing during boot

The keypad interrupt registering must be put at the end of probe,
behind the timer init. Otherwise, interrupt will occur during keypad initial.

Signed-off-by: Xinyu Chen <xinyu.chen@freescale.com>
This commit is contained in:
Xinyu Chen
2009-10-26 11:13:00 +08:00
committed by Matt Sealey
parent 655e612017
commit a3fb73c8be

View File

@@ -774,19 +774,8 @@ static int mxc_kpp_probe(struct platform_device *pdev)
kpp_dev.kpp_rows = keypad->rowmax;
key_pad_enabled = 0;
/*
* Request for IRQ number for keypad port. The Interrupt handler
* function (mxc_kpp_interrupt) is called when ever interrupt occurs on
* keypad port.
*/
irq = platform_get_irq(pdev, 0);
keypad->irq = irq;
retval = request_irq(irq, mxc_kpp_interrupt, 0, MOD_NAME, MOD_NAME);
if (retval) {
pr_debug("KPP: request_irq(%d) returned error %d\n",
MXC_INT_KPP, retval);
return retval;
}
/* Enable keypad clock */
kpp_clk = clk_get(&pdev->dev, "kpp_clk");
@@ -915,6 +904,18 @@ static int mxc_kpp_probe(struct platform_device *pdev)
/* Initialize the polling timer */
init_timer(&kpp_dev.poll_timer);
/*
* Request for IRQ number for keypad port. The Interrupt handler
* function (mxc_kpp_interrupt) is called when ever interrupt occurs on
* keypad port.
*/
retval = request_irq(irq, mxc_kpp_interrupt, 0, MOD_NAME, MOD_NAME);
if (retval) {
pr_debug("KPP: request_irq(%d) returned error %d\n",
MXC_INT_KPP, retval);
goto err3;
}
/* By default, devices should wakeup if they can */
/* So keypad is set as "should wakeup" as it can */
device_init_wakeup(&pdev->dev, 1);