Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1eee4af3 authored by Deepak Sikri's avatar Deepak Sikri Committed by Dmitry Torokhov
Browse files

Input: spear-keyboard - fix for balancing the enable_irq_wake



This patch handles the fix for unbalanced irq for the cases when
enable_irq_wake fails, and a warning related to same is displayed
on the console. The workaround is handled at the driver level.

Signed-off-by: default avatarDeepak Sikri <deepak.sikri@st.com>
Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent d852f959
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -60,10 +60,11 @@ struct spear_kbd {
	struct clk *clk;
	unsigned int irq;
	unsigned int mode;
	unsigned int suspended_rate;
	unsigned short last_key;
	unsigned short keycodes[NUM_ROWS * NUM_COLS];
	bool rep;
	unsigned int suspended_rate;
	bool irq_wake_enabled;
	u32 mode_ctl_reg;
};

@@ -333,7 +334,8 @@ static int spear_kbd_suspend(struct device *dev)
	mode_ctl_reg = readl_relaxed(kbd->io_base + MODE_CTL_REG);

	if (device_may_wakeup(&pdev->dev)) {
		enable_irq_wake(kbd->irq);
		if (!enable_irq_wake(kbd->irq))
			kbd->irq_wake_enabled = true;

		/*
		 * reprogram the keyboard operating frequency as on some
@@ -379,7 +381,10 @@ static int spear_kbd_resume(struct device *dev)
	mutex_lock(&input_dev->mutex);

	if (device_may_wakeup(&pdev->dev)) {
		if (kbd->irq_wake_enabled) {
			kbd->irq_wake_enabled = false;
			disable_irq_wake(kbd->irq);
		}
	} else {
		if (input_dev->users)
			clk_enable(kbd->clk);