From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: "Samuel Thibault" <samuel.thibault@ens-lyon.org>,
"Pavel Machek" <pavel@ucw.cz>,
"Pali Rohár" <pali.rohar@gmail.com>
Cc: linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
rpurdie@rpsys.net,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Subject: [PATCH 3/3] tty/vt/keyboard: define LED triggers for VT keyboard lock states
Date: Mon, 8 Jun 2015 14:43:10 -0700 [thread overview]
Message-ID: <1433799790-31873-4-git-send-email-dmitry.torokhov@gmail.com> (raw)
In-Reply-To: <1433799790-31873-1-git-send-email-dmitry.torokhov@gmail.com>
From: Samuel Thibault <samuel.thibault@ens-lyon.org>
In addition to defining triggers for VT LED states, let's define triggers
for VT keyboard lock states, such as "kbd-shiftlock", "kbd-altgrlock", etc.
This permits to fix #7063 from userland by using a modifier to implement
proper CapsLock behavior and have the keyboard caps lock led show that
modifier state.
Signed-off-by: Samuel Thibault <samuel.thibault@ens-lyon.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
---
drivers/tty/vt/keyboard.c | 27 +++++++++++++++++++--------
1 file changed, 19 insertions(+), 8 deletions(-)
diff --git a/drivers/tty/vt/keyboard.c b/drivers/tty/vt/keyboard.c
index cff193e..1c420d9 100644
--- a/drivers/tty/vt/keyboard.c
+++ b/drivers/tty/vt/keyboard.c
@@ -130,7 +130,7 @@ static char rep; /* flag telling character repeat */
static int shift_state = 0;
-static unsigned char ledstate = 0xff; /* undefined */
+static unsigned int ledstate = -1U; /* undefined */
static unsigned char ledioctl;
/*
@@ -975,7 +975,7 @@ static void kbd_led_trigger_activate(struct led_classdev *cdev)
container_of(cdev->trigger, struct kbd_led_trigger, trigger);
tasklet_disable(&keyboard_tasklet);
- if (ledstate != 0xff)
+ if (ledstate != -1U)
led_trigger_event(&trigger->trigger,
ledstate & trigger->mask ?
LED_FULL : LED_OFF);
@@ -990,11 +990,23 @@ static void kbd_led_trigger_activate(struct led_classdev *cdev)
.mask = BIT(_led_bit), \
}
+#define KBD_LOCKSTATE_TRIGGER(_led_bit, _name) \
+ KBD_LED_TRIGGER((_led_bit) + 8, _name)
+
static struct kbd_led_trigger kbd_led_triggers[] = {
KBD_LED_TRIGGER(VC_SCROLLOCK, "kbd-scrollock"),
KBD_LED_TRIGGER(VC_NUMLOCK, "kbd-numlock"),
KBD_LED_TRIGGER(VC_CAPSLOCK, "kbd-capslock"),
KBD_LED_TRIGGER(VC_KANALOCK, "kbd-kanalock"),
+
+ KBD_LOCKSTATE_TRIGGER(VC_SHIFTLOCK, "kbd-shiftlock"),
+ KBD_LOCKSTATE_TRIGGER(VC_ALTGRLOCK, "kbd-altgrlock"),
+ KBD_LOCKSTATE_TRIGGER(VC_CTRLLOCK, "kbd-ctrllock"),
+ KBD_LOCKSTATE_TRIGGER(VC_ALTLOCK, "kbd-altlock"),
+ KBD_LOCKSTATE_TRIGGER(VC_SHIFTLLOCK, "kbd-shiftllock"),
+ KBD_LOCKSTATE_TRIGGER(VC_SHIFTRLOCK, "kbd-shiftrlock"),
+ KBD_LOCKSTATE_TRIGGER(VC_CTRLLLOCK, "kbd-ctrlllock"),
+ KBD_LOCKSTATE_TRIGGER(VC_CTRLRLOCK, "kbd-ctrlrlock"),
};
static void kbd_propagate_led_state(unsigned int old_state,
@@ -1073,7 +1085,7 @@ static void kbd_init_leds(void)
*/
static unsigned char getledstate(void)
{
- return ledstate;
+ return ledstate & 0xff;
}
void setledstate(struct kbd_struct *kb, unsigned int led)
@@ -1183,11 +1195,12 @@ void vt_kbd_con_stop(int console)
*/
static void kbd_bh(unsigned long dummy)
{
- unsigned char leds;
+ unsigned int leds;
unsigned long flags;
spin_lock_irqsave(&led_lock, flags);
leds = getleds();
+ leds |= (unsigned int)kbd->lockstate << 8;
spin_unlock_irqrestore(&led_lock, flags);
if (leds != ledstate) {
@@ -1539,10 +1552,8 @@ static void kbd_start(struct input_handle *handle)
{
tasklet_disable(&keyboard_tasklet);
- if (ledstate != 0xff) {
- unsigned int state = ledstate;
- kbd_update_leds_helper(handle, &state);
- }
+ if (ledstate != -1U)
+ kbd_update_leds_helper(handle, &ledstate);
tasklet_enable(&keyboard_tasklet);
}
--
2.2.0.rc0.207.ga3a616c
next prev parent reply other threads:[~2015-06-08 21:43 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-08 21:43 [PATCH 0/3] Switch input leds over to standard LED class devices Dmitry Torokhov
2015-06-08 21:43 ` [PATCH 1/3] Input: export LEDs as class devices in sysfs Dmitry Torokhov
2015-06-09 13:19 ` Samuel Thibault
2015-06-09 13:27 ` Samuel Thibault
2015-06-09 16:50 ` Dmitry Torokhov
2015-06-09 17:16 ` Samuel Thibault
2015-06-09 16:49 ` Dmitry Torokhov
2015-06-09 17:22 ` Samuel Thibault
2015-06-09 17:32 ` Dmitry Torokhov
2015-06-10 6:34 ` Pavel Machek
2015-06-09 17:42 ` [PATCH v2 " Dmitry Torokhov
2015-06-10 0:32 ` Samuel Thibault
2015-06-10 1:24 ` Dmitry Torokhov
2015-06-11 17:51 ` Pavel Machek
2015-06-15 10:03 ` Pavel Machek
2015-06-15 10:51 ` Pali Rohár
2015-07-21 11:14 ` Vlastimil Babka
2015-07-21 17:01 ` Dmitry Torokhov
2015-07-21 21:08 ` Pavel Machek
2015-07-22 13:12 ` Vlastimil Babka
2015-07-22 18:55 ` Jiri Kosina
2015-07-23 5:19 ` Vlastimil Babka
2015-07-23 5:42 ` Jiri Kosina
2015-07-22 14:41 ` Vlastimil Babka
2015-07-22 19:49 ` Jiri Kosina
2015-07-22 21:47 ` Pavel Machek
2015-07-22 21:50 ` Jiri Kosina
2015-07-22 21:49 ` Dmitry Torokhov
2015-07-22 22:01 ` Jiri Kosina
2015-06-08 21:43 ` [PATCH 2/3] tty/vt/keyboard: define LED triggers for VT LED states Dmitry Torokhov
2015-06-08 21:43 ` Dmitry Torokhov [this message]
2015-06-08 22:58 ` [PATCH 0/3] Switch input leds over to standard LED class devices Bastien Nocera
2015-06-08 23:16 ` Dmitry Torokhov
2015-06-09 10:54 ` Pavel Machek
2015-06-09 11:12 ` Pavel Machek
2015-06-09 11:22 ` Pali Rohár
2015-06-09 11:28 ` Pavel Machek
2015-06-09 12:22 ` Samuel Thibault
2015-06-09 11:26 ` Pavel Machek
2015-06-09 16:40 ` Dmitry Torokhov
2015-06-09 12:20 ` Samuel Thibault
2015-06-09 16:18 ` Pavel Machek
2015-06-09 16:32 ` Dmitry Torokhov
2015-06-09 16:37 ` Dmitry Torokhov
2015-06-09 13:42 ` Samuel Thibault
2015-06-09 13:50 ` Pali Rohár
2015-06-09 14:05 ` Samuel Thibault
[not found] ` <20090205113908.GA14224@const.inria.fr>
2015-06-09 14:17 ` caps lock led does not show up Samuel Thibault
2015-06-09 16:03 ` Bug#514464: " Anton Zinoviev
2015-06-11 8:08 ` Samuel Thibault
2015-06-11 14:28 ` Samuel Thibault
2015-06-11 15:37 ` Samuel Thibault
2015-06-25 15:41 ` Samuel Thibault
2015-07-02 16:39 ` Anton Zinoviev
2015-07-02 16:50 ` Samuel Thibault
2015-08-31 8:33 ` Samuel Thibault
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=1433799790-31873-4-git-send-email-dmitry.torokhov@gmail.com \
--to=dmitry.torokhov@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pali.rohar@gmail.com \
--cc=pavel@ucw.cz \
--cc=rpurdie@rpsys.net \
--cc=samuel.thibault@ens-lyon.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).