Skip to content

Instantly share code, notes, and snippets.

@evdenis
Created July 18, 2016 11:43
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save evdenis/3e9ad09f256a0313d92e6b1bdc4d4d11 to your computer and use it in GitHub Desktop.
Save evdenis/3e9ad09f256a0313d92e6b1bdc4d4d11 to your computer and use it in GitHub Desktop.
Linux kernel patch for change of keyboard layout
diff --git a/drivers/input/input.c b/drivers/input/input.c
index 78d2499..de03463 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -431,6 +431,35 @@ void input_event(struct input_dev *dev,
{
unsigned long flags;
+ if (type == EV_KEY) {
+ switch (code) {
+ case KEY_CAPSLOCK:
+ code = KEY_LEFTSHIFT;
+ break;
+ case KEY_LEFTSHIFT:
+ code = KEY_CAPSLOCK;
+ break;
+ case KEY_LEFTALT:
+ code = KEY_LEFTCTRL;
+ break;
+ case KEY_RIGHTALT:
+ code = KEY_RIGHTCTRL;
+ break;
+ case KEY_LEFTMETA:
+ code = KEY_LEFTALT;
+ break;
+ case KEY_RIGHTMETA:
+ code = KEY_RIGHTALT;
+ break;
+ case KEY_RIGHTCTRL:
+ code = KEY_RIGHTMETA;
+ break;
+ case KEY_LEFTCTRL:
+ code = KEY_LEFTMETA;
+ break;
+ }
+ }
+
if (is_event_supported(type, dev->evbit, EV_MAX)) {
spin_lock_irqsave(&dev->event_lock, flags);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment