Commit 39ab9dde authored by Eric Miao's avatar Eric Miao Committed by Dmitry Torokhov
Browse files

Input: pxa27x_keypad - add wakeup support

parent e8ef4347
Loading
Loading
Loading
Loading
+14 −1
Original line number Diff line number Diff line
@@ -105,6 +105,8 @@ struct pxa27x_keypad {
	struct input_dev *input_dev;
	void __iomem *mmio_base;

	int irq;

	/* matrix key code map */
	unsigned int matrix_keycodes[MAX_MATRIX_KEY_NUM];

@@ -385,6 +387,10 @@ static int pxa27x_keypad_suspend(struct platform_device *pdev, pm_message_t stat
	struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);

	clk_disable(keypad->clk);

	if (device_may_wakeup(&pdev->dev))
		enable_irq_wake(keypad->irq);

	return 0;
}

@@ -393,6 +399,9 @@ static int pxa27x_keypad_resume(struct platform_device *pdev)
	struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
	struct input_dev *input_dev = keypad->input_dev;

	if (device_may_wakeup(&pdev->dev))
		disable_irq_wake(keypad->irq);

	mutex_lock(&input_dev->mutex);

	if (input_dev->users) {
@@ -497,6 +506,8 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
		goto failed_free_dev;
	}

	keypad->irq = irq;

	/* Register the input device */
	error = input_register_device(input_dev);
	if (error) {
@@ -504,6 +515,8 @@ static int __devinit pxa27x_keypad_probe(struct platform_device *pdev)
		goto failed_free_irq;
	}

	device_init_wakeup(&pdev->dev, 1);

	return 0;

failed_free_irq:
@@ -527,7 +540,7 @@ static int __devexit pxa27x_keypad_remove(struct platform_device *pdev)
	struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
	struct resource *res;

	free_irq(platform_get_irq(pdev, 0), pdev);
	free_irq(keypad->irq, pdev);

	clk_disable(keypad->clk);
	clk_put(keypad->clk);