diff --git a/device/testing/linux-xiaomi-pipa/0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch b/device/testing/linux-xiaomi-pipa/0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch index 065521ce3..722c49026 100644 --- a/device/testing/linux-xiaomi-pipa/0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch +++ b/device/testing/linux-xiaomi-pipa/0001-arm64-dts-qcom-sm8250-xiaomi-pipa-Add-device-tree-fo.patch @@ -8,11 +8,11 @@ Co-developed-by: Ryo Kenrie Wongso Signed-off-by: Ryo Kenrie Wongso --- 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 @@ -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 = ; -+ linux,code = ; -+ debounce-interval = <15>; -+ linux,can-disable; -+ wakeup-source; -+ }; -+ + key-vol-up { + label = "Volume Up"; + gpios = <&pm8150_gpios 6 GPIO_ACTIVE_LOW>; diff --git a/device/testing/linux-xiaomi-pipa/0013-Input-keyboard-add-Xiaomi-Nanosic-803-keyboard.patch b/device/testing/linux-xiaomi-pipa/0013-Input-keyboard-add-Xiaomi-Nanosic-803-keyboard.patch index 61decbc79..9f22b28d0 100644 --- a/device/testing/linux-xiaomi-pipa/0013-Input-keyboard-add-Xiaomi-Nanosic-803-keyboard.patch +++ b/device/testing/linux-xiaomi-pipa/0013-Input-keyboard-add-Xiaomi-Nanosic-803-keyboard.patch @@ -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) { diff --git a/device/testing/linux-xiaomi-pipa/APKBUILD b/device/testing/linux-xiaomi-pipa/APKBUILD index 438064aab..bd14227e7 100644 --- a/device/testing/linux-xiaomi-pipa/APKBUILD +++ b/device/testing/linux-xiaomi-pipa/APKBUILD @@ -3,7 +3,7 @@ maintainer="bluebunny " _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 "