mirror of
https://github.com/armbian/build.git
synced 2025-08-12 14:16:57 +02:00
* Recycling of megous v5.16.4 patches The patches were sorted as far as possible. Some patches are renamed according to their place of application. The length of the patch name has been changed to improve readability using the `git format-patch --filename-max-length=75` method. The folder containing the patches will have the name `patches.name` and the corresponding file `series.name` for the convenience of processing and moving them upstream. But the control file remains `series.conf`. Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> * Add a series of armbian patches for 5.16 Signed-off-by: The-going <48602507+The-going@users.noreply.github.com> * Remove patches whose fixes are already in the kernel Signed-off-by: The-going <48602507+The-going@users.noreply.github.com>
217 lines
6.6 KiB
Diff
217 lines
6.6 KiB
Diff
From 4952c494ccf8b0019d5b35564ed136df8fff0ed7 Mon Sep 17 00:00:00 2001
|
|
From: Ondrej Jirman <megous@megous.com>
|
|
Date: Fri, 21 Jan 2022 23:24:20 +0100
|
|
Subject: [PATCH 316/446] input: kb151: Move default keymap to the drvier
|
|
|
|
Most users will not need to modify it, so let's not stuff device tree
|
|
by default. DT based keymap is still supported, too. Add a few error
|
|
messages, to help users with debugging issues with driver probing.
|
|
|
|
Signed-off-by: Ondrej Jirman <megous@megous.com>
|
|
---
|
|
drivers/input/keyboard/kb151.c | 135 ++++++++++++++++++++++++++++++---
|
|
1 file changed, 123 insertions(+), 12 deletions(-)
|
|
|
|
diff --git a/drivers/input/keyboard/kb151.c b/drivers/input/keyboard/kb151.c
|
|
index bb6250efe..41a68f0c3 100644
|
|
--- a/drivers/input/keyboard/kb151.c
|
|
+++ b/drivers/input/keyboard/kb151.c
|
|
@@ -1,10 +1,12 @@
|
|
// SPDX-License-Identifier: GPL-2.0-only
|
|
//
|
|
// Copyright (C) 2021 Samuel Holland <samuel@sholland.org>
|
|
+// Copyright (C) 2022 Ondřej Jirman <megi@xff.cz>
|
|
|
|
#include <linux/crc8.h>
|
|
#include <linux/i2c.h>
|
|
#include <linux/input/matrix_keypad.h>
|
|
+#include <dt-bindings/input/input.h>
|
|
#include <linux/interrupt.h>
|
|
#include <linux/module.h>
|
|
#include <linux/pm_wakeirq.h>
|
|
@@ -12,16 +14,113 @@
|
|
#define KB151_CRC8_POLYNOMIAL 0x07
|
|
|
|
#define KB151_DEVICE_ID_HI 0x00
|
|
-#define KB151_DEVICE_ID_HI_VALUE 0x4b
|
|
+#define KB151_DEVICE_ID_HI_VALUE 0x4b
|
|
#define KB151_DEVICE_ID_LO 0x01
|
|
-#define KB151_DEVICE_ID_LO_VALUE 0x42
|
|
+#define KB151_DEVICE_ID_LO_VALUE 0x42
|
|
#define KB151_FW_REVISION 0x02
|
|
#define KB151_FW_FEATURES 0x03
|
|
#define KB151_MATRIX_SIZE 0x06
|
|
#define KB151_SCAN_CRC 0x07
|
|
#define KB151_SCAN_DATA 0x08
|
|
#define KB151_SYS_CONFIG 0x20
|
|
-#define KB151_SYS_CONFIG_DISABLE_SCAN BIT(0)
|
|
+#define KB151_SYS_CONFIG_DISABLE_SCAN BIT(0)
|
|
+
|
|
+/* default regmap from the factory */
|
|
+
|
|
+#define DEFAULT_MAP_ROWS 12
|
|
+#define DEFAULT_MAP_COLS 12
|
|
+
|
|
+static const u32 kb151_default_keymap[] = {
|
|
+ MATRIX_KEY(0, 0, KEY_ESC),
|
|
+ MATRIX_KEY(0, 1, KEY_1),
|
|
+ MATRIX_KEY(0, 2, KEY_2),
|
|
+ MATRIX_KEY(0, 3, KEY_3),
|
|
+ MATRIX_KEY(0, 4, KEY_4),
|
|
+ MATRIX_KEY(0, 5, KEY_5),
|
|
+ MATRIX_KEY(0, 6, KEY_6),
|
|
+ MATRIX_KEY(0, 7, KEY_7),
|
|
+ MATRIX_KEY(0, 8, KEY_8),
|
|
+ MATRIX_KEY(0, 9, KEY_9),
|
|
+ MATRIX_KEY(0, 10, KEY_0),
|
|
+ MATRIX_KEY(0, 11, KEY_BACKSPACE),
|
|
+ MATRIX_KEY(1, 0, KEY_TAB),
|
|
+ MATRIX_KEY(1, 1, KEY_Q),
|
|
+ MATRIX_KEY(1, 2, KEY_W),
|
|
+ MATRIX_KEY(1, 3, KEY_E),
|
|
+ MATRIX_KEY(1, 4, KEY_R),
|
|
+ MATRIX_KEY(1, 5, KEY_T),
|
|
+ MATRIX_KEY(1, 6, KEY_Y),
|
|
+ MATRIX_KEY(1, 7, KEY_U),
|
|
+ MATRIX_KEY(1, 8, KEY_I),
|
|
+ MATRIX_KEY(1, 9, KEY_O),
|
|
+ MATRIX_KEY(1, 10, KEY_P),
|
|
+ MATRIX_KEY(1, 11, KEY_ENTER),
|
|
+ MATRIX_KEY(2, 0, KEY_LEFTMETA),
|
|
+ MATRIX_KEY(2, 1, KEY_A),
|
|
+ MATRIX_KEY(2, 2, KEY_S),
|
|
+ MATRIX_KEY(2, 3, KEY_D),
|
|
+ MATRIX_KEY(2, 4, KEY_F),
|
|
+ MATRIX_KEY(2, 5, KEY_G),
|
|
+ MATRIX_KEY(2, 6, KEY_H),
|
|
+ MATRIX_KEY(2, 7, KEY_J),
|
|
+ MATRIX_KEY(2, 8, KEY_K),
|
|
+ MATRIX_KEY(2, 9, KEY_L),
|
|
+ MATRIX_KEY(2, 10, KEY_SEMICOLON),
|
|
+ MATRIX_KEY(3, 0, KEY_LEFTSHIFT),
|
|
+ MATRIX_KEY(3, 1, KEY_Z),
|
|
+ MATRIX_KEY(3, 2, KEY_X),
|
|
+ MATRIX_KEY(3, 3, KEY_C),
|
|
+ MATRIX_KEY(3, 4, KEY_V),
|
|
+ MATRIX_KEY(3, 5, KEY_B),
|
|
+ MATRIX_KEY(3, 6, KEY_N),
|
|
+ MATRIX_KEY(3, 7, KEY_M),
|
|
+ MATRIX_KEY(3, 8, KEY_COMMA),
|
|
+ MATRIX_KEY(3, 9, KEY_DOT),
|
|
+ MATRIX_KEY(3, 10, KEY_SLASH),
|
|
+ MATRIX_KEY(4, 1, KEY_LEFTCTRL),
|
|
+ MATRIX_KEY(4, 4, KEY_SPACE),
|
|
+ MATRIX_KEY(4, 6, KEY_APOSTROPHE),
|
|
+ MATRIX_KEY(4, 8, KEY_RIGHTBRACE),
|
|
+ MATRIX_KEY(4, 9, KEY_LEFTBRACE),
|
|
+ MATRIX_KEY(5, 2, KEY_FN),
|
|
+ MATRIX_KEY(5, 3, KEY_LEFTALT),
|
|
+ MATRIX_KEY(5, 5, KEY_RIGHTALT),
|
|
+
|
|
+ /* FN layer */
|
|
+ MATRIX_KEY(6, 1, KEY_BACKSLASH), // |
|
|
+ MATRIX_KEY(6, 2, KEY_BACKSLASH),
|
|
+ MATRIX_KEY(6, 3, KEY_DOLLAR),
|
|
+ MATRIX_KEY(6, 4, KEY_EURO),
|
|
+ MATRIX_KEY(6, 5, KEY_GRAVE), // ~
|
|
+ MATRIX_KEY(6, 6, KEY_GRAVE),
|
|
+ MATRIX_KEY(6, 7, KEY_MINUS), // _
|
|
+ MATRIX_KEY(6, 8, KEY_EQUAL),
|
|
+ MATRIX_KEY(6, 9, KEY_MINUS),
|
|
+ MATRIX_KEY(6, 10, KEY_EQUAL),
|
|
+ MATRIX_KEY(6, 11, KEY_DELETE),
|
|
+
|
|
+ MATRIX_KEY(8, 0, KEY_SYSRQ),
|
|
+ MATRIX_KEY(8, 10, KEY_INSERT),
|
|
+
|
|
+ MATRIX_KEY(9, 0, KEY_LEFTSHIFT),
|
|
+ MATRIX_KEY(9, 8, KEY_HOME),
|
|
+ MATRIX_KEY(9, 9, KEY_UP),
|
|
+ MATRIX_KEY(9, 10, KEY_END),
|
|
+
|
|
+ MATRIX_KEY(10, 1, KEY_LEFTCTRL),
|
|
+ MATRIX_KEY(10, 6, KEY_LEFT),
|
|
+ MATRIX_KEY(10, 8, KEY_RIGHT),
|
|
+ MATRIX_KEY(10, 9, KEY_DOWN),
|
|
+
|
|
+ MATRIX_KEY(11, 2, KEY_FN),
|
|
+ MATRIX_KEY(11, 3, KEY_LEFTALT),
|
|
+ MATRIX_KEY(11, 5, KEY_RIGHTALT),
|
|
+};
|
|
+
|
|
+static const struct matrix_keymap_data kb151_default_keymap_data = {
|
|
+ .keymap = kb151_default_keymap,
|
|
+ .keymap_size = ARRAY_SIZE(kb151_default_keymap),
|
|
+};
|
|
|
|
struct kb151 {
|
|
struct input_dev *input;
|
|
@@ -86,8 +185,9 @@ static void kb151_update(struct i2c_client *client)
|
|
dev_dbg(&client->dev, "FN is now %s\n",
|
|
pressed ? "pressed" : "released");
|
|
kb151->fn_state = pressed;
|
|
- } else
|
|
- input_report_key(kb151->input, keymap[code], pressed);
|
|
+ } else {
|
|
+ input_report_key(kb151->input, keymap[code], pressed);
|
|
+ }
|
|
}
|
|
}
|
|
input_sync(kb151->input);
|
|
@@ -156,26 +256,36 @@ static int kb151_probe(struct i2c_client *client)
|
|
struct device *dev = &client->dev;
|
|
u8 info[KB151_MATRIX_SIZE + 1];
|
|
unsigned int kb_rows, kb_cols;
|
|
- unsigned int map_rows, map_cols;
|
|
+ unsigned int map_rows = DEFAULT_MAP_ROWS, map_cols = DEFAULT_MAP_COLS;
|
|
struct kb151 *kb151;
|
|
+ bool has_of_keymap;
|
|
int ret;
|
|
|
|
+ has_of_keymap = of_property_read_bool(dev->of_node, "linux,keymap");
|
|
+
|
|
ret = i2c_smbus_read_i2c_block_data(client, 0, sizeof(info), info);
|
|
- if (ret != sizeof(info))
|
|
+ if (ret != sizeof(info)) {
|
|
+ dev_err(dev, "KB151 was not detected on the bus (%d)\n", ret);
|
|
return ret;
|
|
+ }
|
|
|
|
if (info[KB151_DEVICE_ID_HI] != KB151_DEVICE_ID_HI_VALUE ||
|
|
- info[KB151_DEVICE_ID_LO] != KB151_DEVICE_ID_LO_VALUE)
|
|
+ info[KB151_DEVICE_ID_LO] != KB151_DEVICE_ID_LO_VALUE) {
|
|
+ dev_warn(dev, "Device on address %hu doesn't look like KB151\n",
|
|
+ client->addr);
|
|
return -ENODEV;
|
|
+ }
|
|
|
|
dev_info(dev, "Found KB151 with firmware %d.%d (features=%#x)\n",
|
|
info[KB151_FW_REVISION] >> 4,
|
|
info[KB151_FW_REVISION] & 0xf,
|
|
info[KB151_FW_FEATURES]);
|
|
|
|
- ret = matrix_keypad_parse_properties(dev, &map_rows, &map_cols);
|
|
- if (ret)
|
|
- return ret;
|
|
+ if (has_of_keymap) {
|
|
+ ret = matrix_keypad_parse_properties(dev, &map_rows, &map_cols);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+ }
|
|
|
|
kb_rows = info[KB151_MATRIX_SIZE] & 0xf;
|
|
kb_cols = info[KB151_MATRIX_SIZE] >> 4;
|
|
@@ -212,7 +322,8 @@ static int kb151_probe(struct i2c_client *client)
|
|
|
|
__set_bit(EV_REP, kb151->input->evbit);
|
|
|
|
- ret = matrix_keypad_build_keymap(NULL, NULL, map_rows, map_cols,
|
|
+ ret = matrix_keypad_build_keymap(has_of_keymap ? NULL : &kb151_default_keymap_data,
|
|
+ NULL, map_rows, map_cols,
|
|
NULL, kb151->input);
|
|
if (ret)
|
|
return dev_err_probe(dev, ret, "Failed to build keymap\n");
|
|
--
|
|
2.31.1
|
|
|