| miklos_akos (statz) | ![]() #5, Főfasz (1045) |
5485 | #5a96 | ^ | Idézet | Tue, 23 Dec 2025 15:30:05 +01 |
| 185.187.*.* |
|
*.75.187.185.dialin.segfault.club |
| Szoval, `novatek-nvt-ts` update. Az alabbit okadtam bele a failelo ellenorzesbe:
> diff -Naur novatek-nvt-ts.c novatek-nvt-ts.c.new
--- novatek-nvt-ts.c 2025-10-20 14:02:37.000000000 +0200
+++ novatek-nvt-ts.c.new 2025-12-23 14:04:23.284529473 +0100
@@ -266,6 +266,11 @@
data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id) {
dev_err(dev, "Unsupported touchscreen parameters: %*ph\n",
NVT_TS_PARAMS_SIZE, data->buf);
+ dev_err(dev, "width? %d", width > NVT_TS_MAX_SIZE);
+ dev_err(dev, "height? %d", height > NVT_TS_MAX_SIZE);
+ dev_err(dev, "irq_type? %d", irq_type >= ARRAY_SIZE(nvt_ts_irq_type));
+ dev_err(dev, "wake_type? %d", data->buf[NVT_TS_PARAMS_WAKE_TYPE] != chip->wake_type);
+ dev_err(dev, "chip_id? %d", data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id);
return -EIO;
}
miklos_akos@t16g2 | ~/sdm660/linux-6.17.4-sdm660/drivers/input/touchscreen
>
Recompile utan az alabbit okadta ki a kernel, a failelo check erteke 1 [ 8.613601] novatek-nvt-ts 0-0001: width? 0 [ 8.622022] novatek-nvt-ts 0-0001: height? 0 [ 8.622231] novatek-nvt-ts 0-0001: irq_type? 0 [ 8.622264] novatek-nvt-ts 0-0001: wake_type? 1 [ 8.622311] novatek-nvt-ts 0-0001: chip_id? 0 Tehat ebbol az kovetkezik, hogy a chip->wake_type check failel, mert a driver nem tud vele mit kezdeni. A tobbi okes. Ugyhogy a leheto legrosszabb megoldast valasztottam egy "gyors" teszt erejeig:
--- novatek-nvt-ts.c 2025-10-20 14:02:37.000000000 +0200
+++ novatek-nvt-ts.c.new 2025-12-23 15:13:59.428648138 +0100
@@ -30,7 +30,8 @@
#define NVT_TS_PARAMS_WAKE_TYPE 0x0c
#define NVT_TS_PARAMS_CHIP_ID 0x0e
#define NVT_TS_PARAMS_SIZE 0x0f
-
+/* HACK FOR NOVATEK NT36672A */
+#define NVT_CHIP_NT36672A 0x01
#define NVT_TS_MAX_TOUCHES 10
#define NVT_TS_MAX_SIZE 4096
@@ -258,15 +259,35 @@
height = get_unaligned_be16(&data->buf[NVT_TS_PARAMS_HEIGHT]);
data->max_touches = data->buf[NVT_TS_PARAMS_MAX_TOUCH];
irq_type = data->buf[NVT_TS_PARAMS_IRQ_TYPE];
-
- if (width > NVT_TS_MAX_SIZE || height >= NVT_TS_MAX_SIZE ||
- data->max_touches > NVT_TS_MAX_TOUCHES ||
- irq_type >= ARRAY_SIZE(nvt_ts_irq_type) ||
- data->buf[NVT_TS_PARAMS_WAKE_TYPE] != chip->wake_type ||
- data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id) {
- dev_err(dev, "Unsupported touchscreen parameters: %*ph\n",
- NVT_TS_PARAMS_SIZE, data->buf);
- return -EIO;
+ if (chip->chip_id != NVT_CHIP_NT36672A) {
+ if (width > NVT_TS_MAX_SIZE || height >= NVT_TS_MAX_SIZE ||
+ data->max_touches > NVT_TS_MAX_TOUCHES ||
+ irq_type >= ARRAY_SIZE(nvt_ts_irq_type) ||
+ data->buf[NVT_TS_PARAMS_WAKE_TYPE] != chip->wake_type ||
+ data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id) {
+ dev_err(dev, "Unsupported touchscreen parameters: %*ph\n",
+ NVT_TS_PARAMS_SIZE, data->buf);
+ dev_err(dev, "width? %d", width > NVT_TS_MAX_SIZE);
+ dev_err(dev, "height? %d", height > NVT_TS_MAX_SIZE);
+ dev_err(dev, "irq_type? %d", irq_type >= ARRAY_SIZE(nvt_ts_irq_type));
+ dev_err(dev, "wake_type? %d", data->buf[NVT_TS_PARAMS_WAKE_TYPE] != chip->wake_type);
+ dev_err(dev, "chip_id? %d", data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id);
+ return -EIO;
+ }
+ } else {
+ dev_dbg(dev, "!!! WAKE_TYPE HACK FOR NOVATEK NT36672A !!! wake_type? %d", data->buf[NVT_TS_PARAMS_WAKE_TYPE]);
+ if (width > NVT_TS_MAX_SIZE || height >= NVT_TS_MAX_SIZE ||
+ data->max_touches > NVT_TS_MAX_TOUCHES ||
+ irq_type >= ARRAY_SIZE(nvt_ts_irq_type) ||
+ data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id) {
+ dev_err(dev, "Unsupported touchscreen parameters: %*ph\n",
+ NVT_TS_PARAMS_SIZE, data->buf);
+ dev_err(dev, "width? %d", width > NVT_TS_MAX_SIZE);
+ dev_err(dev, "height? %d", height > NVT_TS_MAX_SIZE);
+ dev_err(dev, "irq_type? %d", irq_type >= ARRAY_SIZE(nvt_ts_irq_type));
+ dev_err(dev, "chip_id? %d", data->buf[NVT_TS_PARAMS_CHIP_ID] != chip->chip_id);
+ return -EIO;
+ }
}
dev_info(dev, "Detected %dx%d touchscreen with %d max touches\n",
Igen, fogtam es kibasztam a chip->wake_type ellenorzest, legrosszabb esetben osszefossa magat az egesz, legjobb esetben mukodni fog az erintopanel. :] Most fordul az uj kernel, aztan mehet a flasheles. |