From: Sasha Levin <sashal@kernel.org>
To: stable@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Tony Lindgren <tony@atomide.com>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
Sasha Levin <sashal@kernel.org>,
linux-input@vger.kernel.org
Subject: [PATCH AUTOSEL 4.14 14/59] Input: omap-keypad - fix idle configuration to not block SoC idle states
Date: Wed, 26 Dec 2018 17:37:54 -0500 [thread overview]
Message-ID: <20181226223839.150262-14-sashal@kernel.org> (raw)
In-Reply-To: <20181226223839.150262-1-sashal@kernel.org>
From: Tony Lindgren <tony@atomide.com>
[ Upstream commit e2ca26ec4f01486661b55b03597c13e2b9c18b73 ]
With PM enabled, I noticed that pressing a key on the droid4 keyboard will
block deeper idle states for the SoC. Let's fix this by using IRQF_ONESHOT
and stop constantly toggling the device OMAP4_KBD_IRQENABLE register as
suggested by Dmitry Torokhov <dmitry.torokhov@gmail.com>.
>From the hardware point of view, looks like we need to manage the registers
for OMAP4_KBD_IRQENABLE and OMAP4_KBD_WAKEUPENABLE together to avoid
blocking deeper SoC idle states. And with toggling of OMAP4_KBD_IRQENABLE
register now gone with IRQF_ONESHOT, also the SoC idle state problem is
gone during runtime. We still also need to clear OMAP4_KBD_WAKEUPENABLE in
omap4_keypad_close() though to pair it with omap4_keypad_open() to prevent
blocking deeper SoC idle states after rmmod omap4-keypad.
Reported-by: Pavel Machek <pavel@ucw.cz>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/input/keyboard/omap4-keypad.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/drivers/input/keyboard/omap4-keypad.c b/drivers/input/keyboard/omap4-keypad.c
index ce8e2baf31bb..616fdd94b069 100644
--- a/drivers/input/keyboard/omap4-keypad.c
+++ b/drivers/input/keyboard/omap4-keypad.c
@@ -126,12 +126,8 @@ static irqreturn_t omap4_keypad_irq_handler(int irq, void *dev_id)
{
struct omap4_keypad *keypad_data = dev_id;
- if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS)) {
- /* Disable interrupts */
- kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
- OMAP4_VAL_IRQDISABLE);
+ if (kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS))
return IRQ_WAKE_THREAD;
- }
return IRQ_NONE;
}
@@ -173,11 +169,6 @@ static irqreturn_t omap4_keypad_irq_thread_fn(int irq, void *dev_id)
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
kbd_read_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS));
- /* enable interrupts */
- kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
- OMAP4_DEF_IRQENABLE_EVENTEN |
- OMAP4_DEF_IRQENABLE_LONGKEY);
-
return IRQ_HANDLED;
}
@@ -214,9 +205,10 @@ static void omap4_keypad_close(struct input_dev *input)
disable_irq(keypad_data->irq);
- /* Disable interrupts */
+ /* Disable interrupts and wake-up events */
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQENABLE,
OMAP4_VAL_IRQDISABLE);
+ kbd_writel(keypad_data, OMAP4_KBD_WAKEUPENABLE, 0);
/* clear pending interrupts */
kbd_write_irqreg(keypad_data, OMAP4_KBD_IRQSTATUS,
@@ -364,7 +356,7 @@ static int omap4_keypad_probe(struct platform_device *pdev)
}
error = request_threaded_irq(keypad_data->irq, omap4_keypad_irq_handler,
- omap4_keypad_irq_thread_fn, 0,
+ omap4_keypad_irq_thread_fn, IRQF_ONESHOT,
"omap4-keypad", keypad_data);
if (error) {
dev_err(&pdev->dev, "failed to register interrupt\n");
--
2.19.1
next prev parent reply other threads:[~2018-12-26 22:37 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-12-26 22:37 [PATCH AUTOSEL 4.14 01/59] pinctrl: meson: fix pull enable register calculation Sasha Levin
2018-12-26 22:37 ` Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 02/59] powerpc: Fix COFF zImage booting on old powermacs Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 03/59] powerpc/mm: Fix linux page tables build with some configs Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 04/59] HID: ite: Add USB id match for another ITE based keyboard rfkill key quirk Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 06/59] ARM: dts: imx7d-nitrogen7: Fix the description of the Wifi clock Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 07/59] Input: restore EV_ABS ABS_RESERVED Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 12/59] netfilter: seqadj: re-load tcp header pointer after possible head reallocation Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 13/59] scsi: bnx2fc: Fix NULL dereference in error handling Sasha Levin
2018-12-26 22:37 ` Sasha Levin [this message]
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 15/59] Input: synaptics - enable RMI on ThinkPad T560 Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 16/59] ibmvnic: Fix non-atomic memory allocation in IRQ context Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 17/59] ieee802154: ca8210: fix possible u8 overflow in ca8210_rx_done Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 18/59] x86/mm: Fix guard hole handling Sasha Levin
2018-12-26 22:37 ` Sasha Levin
2018-12-26 22:37 ` [PATCH AUTOSEL 4.14 19/59] x86/dump_pagetables: Fix LDT remap address marker Sasha Levin
2018-12-26 22:37 ` Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 22/59] netfilter: ipset: do not call ipset_nest_end after nla_nest_cancel Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 23/59] netfilter: nat: can't use dst_hold on noref dst Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 27/59] scsi: target: iscsi: cxgbit: fix csk leak Sasha Levin
2018-12-26 22:38 ` Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 28/59] scsi: target: iscsi: cxgbit: add missing spin_lock_init() Sasha Levin
2018-12-26 22:38 ` Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 43/59] SUNRPC: Fix a race with XPRT_CONNECTING Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 51/59] mac80211: free skb fraglist before freeing the skb Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 52/59] kbuild: fix false positive warning/error about missing libelf Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 53/59] net/mlx5: Typo fix in del_sw_hw_rule Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 55/59] gpio: mvebu: only fail on missing clk if pwm is actually to be used Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 56/59] Input: synaptics - enable SMBus for HP EliteBook 840 G4 Sasha Levin
2018-12-26 22:38 ` [PATCH AUTOSEL 4.14 59/59] serial/sunsu: fix refcount leak Sasha Levin
2018-12-26 22:38 ` Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20181226223839.150262-14-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=dmitry.torokhov@gmail.com \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=tony@atomide.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.