linux-xiaomi-pipa: report tablet mode without keyboard
Part-of: <https://gitlab.postmarketos.org/postmarketOS/pmaports/-/merge_requests/9147>
This commit is contained in:
parent
d42381d36c
commit
4a6b2648f0
3 changed files with 81 additions and 20 deletions
|
|
@ -8,11 +8,11 @@ Co-developed-by: Ryo Kenrie Wongso <developer@damillora.com>
|
|||
Signed-off-by: Ryo Kenrie Wongso <developer@damillora.com>
|
||||
---
|
||||
arch/arm64/boot/dts/qcom/Makefile | 3 +-
|
||||
.../dts/qcom/sm8250-xiaomi-pipa-common.dtsi | 1425 +++++++++++++++++
|
||||
.../dts/qcom/sm8250-xiaomi-pipa-common.dtsi | 1414 +++++++++++++++++
|
||||
.../boot/dts/qcom/sm8250-xiaomi-pipa-csot.dts | 23 +
|
||||
.../dts/qcom/sm8250-xiaomi-pipa-tianma.dts | 23 +
|
||||
.../boot/dts/qcom/sm8250-xiaomi-pipa.dts | 541 -------
|
||||
5 files changed, 1473 insertions(+), 542 deletions(-)
|
||||
5 files changed, 1462 insertions(+), 542 deletions(-)
|
||||
create mode 100644 arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa-common.dtsi
|
||||
create mode 100644 arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa-csot.dts
|
||||
create mode 100644 arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa-tianma.dts
|
||||
|
|
@ -37,7 +37,7 @@ new file mode 100644
|
|||
index 000000000000..8c6672ffdd66
|
||||
--- /dev/null
|
||||
+++ b/arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa-common.dtsi
|
||||
@@ -0,0 +1,1425 @@
|
||||
@@ -0,0 +1,1414 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
+/*
|
||||
+ * Copyright (c) 2023 Luka Panio <lukapanio@gmail.com>
|
||||
|
|
@ -161,8 +161,7 @@ index 000000000000..8c6672ffdd66
|
|||
+ gpio_keys: gpio-keys {
|
||||
+ compatible = "gpio-keys";
|
||||
+
|
||||
+ pinctrl-0 = <&hall_sensor_default>, <&hall_sensor_fold_default>,
|
||||
+ <&vol_up_n>;
|
||||
+ pinctrl-0 = <&hall_sensor_default>, <&vol_up_n>;
|
||||
+ pinctrl-names = "default";
|
||||
+
|
||||
+ event-hall-sensor {
|
||||
|
|
@ -175,16 +174,6 @@ index 000000000000..8c6672ffdd66
|
|||
+ wakeup-source;
|
||||
+ };
|
||||
+
|
||||
+ event-hall-sensor-fold {
|
||||
+ label = "Hall Effect Sensor Fold";
|
||||
+ gpios = <&tlmm 121 GPIO_ACTIVE_LOW>;
|
||||
+ linux,input-type = <EV_SW>;
|
||||
+ linux,code = <SW_TABLET_MODE>;
|
||||
+ debounce-interval = <15>;
|
||||
+ linux,can-disable;
|
||||
+ wakeup-source;
|
||||
+ };
|
||||
+
|
||||
+ key-vol-up {
|
||||
+ label = "Volume Up";
|
||||
+ gpios = <&pm8150_gpios 6 GPIO_ACTIVE_LOW>;
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ diff -Naur a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa-common.dtsi b/arch/arm6
|
|||
|
||||
vreg_l3c_1p2: ldo3 {
|
||||
regulator-name = "vreg_l3c_1p2";
|
||||
@@ -671,6 +678,24 @@
|
||||
@@ -671,6 +678,27 @@
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -34,6 +34,9 @@ diff -Naur a/arch/arm64/boot/dts/qcom/sm8250-xiaomi-pipa-common.dtsi b/arch/arm6
|
|||
+ irq-gpios = <&tlmm 100 0x6001>;
|
||||
+ touchpad-resolution-x = <2879>;
|
||||
+ touchpad-resolution-y = <1799>;
|
||||
+ tablet-mode-gpios = <&tlmm 121 GPIO_ACTIVE_LOW>;
|
||||
+ pinctrl-0 = <&hall_sensor_fold_default>;
|
||||
+ pinctrl-names = "default";
|
||||
+ vdd_1v8-supply = <&vreg_l4c_1p8>;
|
||||
+ vdd_3v3-supply = <&vreg_l10c_3p3>;
|
||||
+ };
|
||||
|
|
@ -69,7 +72,7 @@ diff -Naur a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
|
|||
diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanosic_803.c
|
||||
--- a/drivers/input/keyboard/nanosic_803.c 1970-01-01 01:00:00.000000000 +0100
|
||||
+++ b/drivers/input/keyboard/nanosic_803.c 2026-07-09 10:02:23.822108712 +0200
|
||||
@@ -0,0 +1,842 @@
|
||||
@@ -0,0 +1,911 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * Nanosic 803 keyboard controller driver
|
||||
|
|
@ -198,6 +201,7 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ struct gpio_desc *sleep_gpio;
|
||||
+ struct gpio_desc *vdd_gpio;
|
||||
+ struct gpio_desc *irq_gpio;
|
||||
+ struct gpio_desc *tablet_mode_gpio;
|
||||
+ struct regulator *vdd_1v8;
|
||||
+ struct regulator *vdd_3v3;
|
||||
+ struct workqueue_struct *wq;
|
||||
|
|
@ -205,6 +209,7 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ struct timer_list finger_timer;
|
||||
+ struct mutex read_mutex;
|
||||
+ unsigned int irq_number;
|
||||
+ int tablet_mode_irq;
|
||||
+ char last_pressed_key[5];
|
||||
+ char last_modifier_state;
|
||||
+ char last_fn_key;
|
||||
|
|
@ -212,6 +217,7 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ bool finger_down;
|
||||
+ bool is_keyboard_connected;
|
||||
+ bool is_touchpad_connected;
|
||||
+ struct input_dev *tablet_mode_input_dev;
|
||||
+ bool caps_led_on;
|
||||
+ unsigned long last_touch_time;
|
||||
+ int last_x, last_y;
|
||||
|
|
@ -479,6 +485,48 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static void nanosic_update_tablet_mode(struct nanosic_803_priv *nanosic_dev)
|
||||
+{
|
||||
+ bool tablet_mode;
|
||||
+
|
||||
+ tablet_mode = !nanosic_dev->is_keyboard_connected ||
|
||||
+ gpiod_get_value_cansleep(nanosic_dev->tablet_mode_gpio);
|
||||
+ input_report_switch(nanosic_dev->tablet_mode_input_dev,
|
||||
+ SW_TABLET_MODE, tablet_mode);
|
||||
+ input_sync(nanosic_dev->tablet_mode_input_dev);
|
||||
+}
|
||||
+
|
||||
+static irqreturn_t nanosic_tablet_mode_irq_thread(int irq, void *dev_id)
|
||||
+{
|
||||
+ struct nanosic_803_priv *nanosic_dev = dev_id;
|
||||
+
|
||||
+ nanosic_update_tablet_mode(nanosic_dev);
|
||||
+ return IRQ_HANDLED;
|
||||
+}
|
||||
+
|
||||
+static int nanosic_register_tablet_mode(struct nanosic_803_priv *nanosic_dev)
|
||||
+{
|
||||
+ struct input_dev *tablet_mode_input_dev;
|
||||
+ int ret;
|
||||
+
|
||||
+ tablet_mode_input_dev = devm_input_allocate_device(nanosic_dev->dev);
|
||||
+ if (!tablet_mode_input_dev)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ tablet_mode_input_dev->name = "Nanosic 803 tablet mode";
|
||||
+ tablet_mode_input_dev->phys = "input/tablet-mode";
|
||||
+ tablet_mode_input_dev->id.bustype = BUS_I2C;
|
||||
+ input_set_capability(tablet_mode_input_dev, EV_SW, SW_TABLET_MODE);
|
||||
+
|
||||
+ nanosic_dev->tablet_mode_input_dev = tablet_mode_input_dev;
|
||||
+ ret = input_register_device(tablet_mode_input_dev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ nanosic_update_tablet_mode(nanosic_dev);
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static void nanosic_handle_hall(struct nanosic_803_priv *nanosic_dev, char *buf)
|
||||
+{
|
||||
|
|
@ -494,6 +542,7 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ nanosic_register_keyboard(nanosic_dev);
|
||||
+ if (nanosic_dev->is_touchpad_connected != was_touchpad_connected)
|
||||
+ nanosic_register_touchpad(nanosic_dev);
|
||||
+ nanosic_update_tablet_mode(nanosic_dev);
|
||||
+ } else if (buf[12] == 0x0) {
|
||||
+ dev_dbg(nanosic_dev->dev, "unregistering input devices\n");
|
||||
+ nanosic_dev->is_keyboard_connected = false;
|
||||
|
|
@ -502,6 +551,7 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ input_unregister_device(nanosic_dev->keyboard_input_dev);
|
||||
+ if (nanosic_dev->is_touchpad_connected != was_touchpad_connected)
|
||||
+ input_unregister_device(nanosic_dev->touchpad_input_dev);
|
||||
+ nanosic_update_tablet_mode(nanosic_dev);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
|
|
@ -760,6 +810,13 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ return PTR_ERR(nanosic_dev->vdd_gpio);
|
||||
+ }
|
||||
+
|
||||
+ nanosic_dev->tablet_mode_gpio = devm_gpiod_get(dev, "tablet-mode",
|
||||
+ GPIOD_IN);
|
||||
+ if (IS_ERR(nanosic_dev->tablet_mode_gpio)) {
|
||||
+ dev_err(dev, "Failed to get tablet mode GPIO\n");
|
||||
+ return PTR_ERR(nanosic_dev->tablet_mode_gpio);
|
||||
+ }
|
||||
+
|
||||
+ // Get regulators
|
||||
+ nanosic_dev->vdd_1v8 = devm_regulator_get(dev, "vdd_1v8");
|
||||
+ if (IS_ERR(nanosic_dev->vdd_1v8)) {
|
||||
|
|
@ -810,6 +867,21 @@ diff -Naur a/drivers/input/keyboard/nanosic_803.c b/drivers/input/keyboard/nanos
|
|||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ ret = nanosic_register_tablet_mode(nanosic_dev);
|
||||
+ if (ret)
|
||||
+ return dev_err_probe(dev, ret, "Failed to register tablet mode switch\n");
|
||||
+
|
||||
+ nanosic_dev->tablet_mode_irq = gpiod_to_irq(nanosic_dev->tablet_mode_gpio);
|
||||
+ if (nanosic_dev->tablet_mode_irq < 0)
|
||||
+ return nanosic_dev->tablet_mode_irq;
|
||||
+
|
||||
+ ret = devm_request_threaded_irq(dev, nanosic_dev->tablet_mode_irq, NULL,
|
||||
+ nanosic_tablet_mode_irq_thread,
|
||||
+ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
|
||||
+ "nanosic-tablet-mode", nanosic_dev);
|
||||
+ if (ret)
|
||||
+ return dev_err_probe(dev, ret, "Failed to request tablet mode IRQ\n");
|
||||
+
|
||||
+ // Set up IRQ
|
||||
+ nanosic_dev->irq_number = gpiod_to_irq(nanosic_dev->irq_gpio);
|
||||
+ if (nanosic_dev->irq_number < 0) {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ maintainer="bluebunny <bluebunny@postmarketos.org>"
|
|||
_flavor="xiaomi-pipa"
|
||||
pkgname=linux-$_flavor
|
||||
pkgver=7.1.4
|
||||
pkgrel=0
|
||||
pkgrel=1
|
||||
pkgdesc="Stable kernel for Xiaomi Pad 6"
|
||||
arch="aarch64"
|
||||
_carch="arm64"
|
||||
|
|
@ -92,7 +92,7 @@ package() {
|
|||
sha512sums="
|
||||
753b53b3f9a240b5838fe1156ad61f2356e2042941e571450492b5c8c46fd32140aede34fd4b074705650bac503deccec20ad9b8caee9d4c5fdc575401c76cc4 linux-7.1.4.tar.xz
|
||||
73fa3eab2ab9e420cd0eb8a366dd928e58ce17fc7c05a2a531b28cca8c0eb6fa0fd0b0708a74d2171e758f7c257095996875f14ea2f2a6fba68b22074fff2765 config-xiaomi-pipa.aarch64
|
||||
cdc7d83d87fe632a3589fdfd117a045f2da0873c1d78ed117b38649b83adee518f099f3dcf7908b1729d75535ba25a1685dc37fd1a5d14c64bbe0d41dd87a2d3 0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch
|
||||
ae45edd80a6df1807b242c9733092c4ca3f6fb316db1f42ba57ec9fc4bd94b2cfdb40dd467d725aaea5023364fdec4c4ec71ee535fdee93166d590887b13d800 0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch
|
||||
34eab30dde870322ad10ab7babee8acf7c5da2b2d5d38d5e4f67fad87be4e7d1426950b46c7d7344627ba034643f030b8f4656cbf941bb2f04b1d649530842d3 0002-power-supply-Add-driver-for-Qualcomm-PMIC-fuel-gauge.patch
|
||||
c3ca3b80e9a1d367572818afc45e6c19ca54ab5da03e615f3e537957bcac75a40171ee895f32e6141111702dea63ce4af6427333412d0f6eaa63506916c5d391 0003-Input-Add-nt36523-touchscreen-driver.patch
|
||||
6db0ea6e585e50054457b0d959efe691c7fcb6d68dc7144b456f7f04f140bd02a422008bfe40680d3d7b799d7192b007d94df97c7288644f2ffd321221d1a881 0004-drm-msm-dsi-change-sync-mode-to-sync-on-DSI0-rather-.patch
|
||||
|
|
@ -103,7 +103,7 @@ c829c3b074391276d37fd738614385763b0814bde9fbc0c292eca5d2b6bf6b45e2ebfe4bf6bfad79
|
|||
f98be67fa1826cc7f29a5ab07ff6457701701a13fd563bdae1b3eac47c32e74a08be18faeae7a57d326901f4c10d98f96fc87b2db094235efdefbcd74fc58692 0010-HACK-ASoC-codecs-aw88261-add-xiaomi-pipa-hacks.patch
|
||||
5968f28d1f67a89e58c37e532ceaf400b2fbf368f495a95b12550e15e272dab5939c1bc5e3fab2d0d358792a1e8a90303970bda625ffe3026002f65b7c35dea6 0011-FROMLIST-ASoC-qcom-qdsp6-q6afe-fix-clk-vote-response.patch
|
||||
c6683c513af7a98269a7a686c6ba24ff9387c4e50968bf0de64c1f4eaa9a01b65e17318a2b9cae52085b3e4afabf47aacc4f6fa5bb1a5d12d92cff1eab7bdd65 0012-HACK-ASoC-qcom-qdsp6-q6afe-pretend-the-AFE-vote-didn.patch
|
||||
d267410564c2acd1cc125984fca44b688b6a27d829827f98caa6a43b14fe93e722d7489786b9e8332e27551bedfa5b88de18b58349fec6071a668df84833b6b4 0013-Input-keyboard-add-Xiaomi-Nanosic-803-keyboard.patch
|
||||
2d0c15af501037c65700a3101148519630a9f4ef5fb67df358a465592d6f338fc30527fc3d762071a46b7ea41b5901ab2d235f6e3b17be2a96dc0c2f606fa321 0013-Input-keyboard-add-Xiaomi-Nanosic-803-keyboard.patch
|
||||
b4fa58b77ea1cf16e594efaaee800ee8790cad4fbe3662bd22d5be71d8cb6fd4fe95f8c9184c0c53c42a46aa3e2999e1053f8e8b532ac1e9c7b9b0fcb674dba9 0014-UPSTREAM-libbpf-Fix-UAF-in-strset__add_str.patch
|
||||
8589f3100677b35e0af9d72d4c44c399248df0dbaec4a9654e2c4eab65acafa1b1f1c52a47ed9df2d3f3dc6f8687c3cee82047ec6e1ebcad9d0e7731608c0688 0016-power-supply-add-nuvolta-rx1665-wireless-charger.patch
|
||||
"
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue