Thread (1 message) 1 message, 1 author, 2021-10-18

Re: [PATCH v2 10/18] input&tty: Fix the keyboard led light display problem

From: Greg KH <gregkh@linuxfoundation.org>
Date: 2021-10-18 05:57:11
Also in: lkml

On Mon, Oct 18, 2021 at 10:01:34AM +0800, changlianzhi wrote:
quoted hunk
Switching from the desktop environment to the tty environment,
the state of the keyboard led lights and the state of the keyboard
lock are inconsistent. This is because the attribute kb->kbdmode
of the tty bound in the desktop environment (xorg) is set to
VC_OFF, which causes the ledstate and kb->ledflagstate
values of the bound tty to always be 0, which causes the switch
from the desktop When to the tty environment, the LED light
status is inconsistent with the keyboard lock status.

Signed-off-by: lianzhi chang <redacted>
---
v2 10/18:
(1) Move the definition of ledstate to the input module
(/drivers/input/input.c),
and set or get its value through the input_update_ledstate(Replace the
update_value_ledstate function defined in the last patch, and optimize
the code according to the proposal) and input_get_ledstate functions.
(2) To update the ledstate reference in keyboard.c, you must first get
the value through input_get_ledstate.
(3)Some macro definitions have been added to input.c.

drivers/input/input.c | 46 ++++++++++++++++++++++++++++++++++++++-
drivers/tty/vt/keyboard.c | 19 ++++++++++++++--
include/linux/input.h | 3 +++
3 files changed, 65 insertions(+), 3 deletions(-)
diff --git a/drivers/input/input.c b/drivers/input/input.c
index ccaeb2426385..8c0ef947ac34 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -37,6 +37,11 @@ static DEFINE_IDA(input_ida);
static LIST_HEAD(input_dev_list);
static LIST_HEAD(input_handler_list);
+#define VC_SCROLLOCK 0 /* scroll-lock mode */
+#define VC_NUMLOCK 1 /* numeric lock mode */
+#define VC_CAPSLOCK 2 /* capslock mode */
+static unsigned int ledstate = -1U; /* undefined */
+
/*
* input_mutex protects access to both input_dev_list and input_handler_list.
* This also causes input_[un]register_device and input_[un]register_handler
@@ -472,8 +477,12 @@ void input_inject_event(struct input_handle *handle,
rcu_read_lock();
grab = rcu_dereference(dev->grab);
- if (!grab || grab == handle)
+ if (!grab || grab == handle) {
input_handle_event(dev, type, code, value);
+
+ if (type == EV_LED && code <= LED_SCROLLL)
+ input_update_ledstate(code, value);
+ }
rcu_read_unlock();
spin_unlock_irqrestore(&dev->event_lock, flags);
@@ -481,6 +490,41 @@ void input_inject_event(struct input_handle *handle,
}
EXPORT_SYMBOL(input_inject_event);
+void input_update_ledstate(unsigned int flag, unsigned int value)
+{
+ unsigned int bit;
+
+ switch (flag) {
+ case LED_NUML:
<snip>

Again, your email client corrupted the patch and made it so that it can
not be applied :(

Please just use git send-email.

thanks,

greg k-h
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help