From 072de836f53be56a70cecf70b43ae43b7ce17376 Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 11 Dec 2023 10:08:36 +0000
Subject: [PATCH] mk-rootfs.sh
---
kernel/drivers/input/touchscreen/gsl3673_800x1280.c | 62 +++++++++++++++++++++++++-----
1 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/kernel/drivers/input/touchscreen/gsl3673_800x1280.c b/kernel/drivers/input/touchscreen/gsl3673_800x1280.c
index 1910290..da97d92 100644
--- a/kernel/drivers/input/touchscreen/gsl3673_800x1280.c
+++ b/kernel/drivers/input/touchscreen/gsl3673_800x1280.c
@@ -28,6 +28,7 @@
#include "tp_suspend.h"
#include <linux/of_gpio.h>
#define GSL_DEBUG 0
+#define GSL9XX_VDDIO_1800
#define TP2680A_ID 0x88
#define TP2680B_ID 0x82
@@ -59,9 +60,10 @@
#include "gsl3680_tab106.h"
#define TP_SIZE_1366X768
#define Y_POL
-#elif defined(CONFIG_TOUCHSCREEN_GSL3673_800X1280)
+#elif IS_ENABLED(CONFIG_TOUCHSCREEN_GSL3673_800X1280)
#define TP_SIZE_800X1280
- #include "gsl3673_800x1280.h"
+ #include "rochkchip_gslX680_8inch_800x1280_tg806_10.h"
+// #include "gsl3673_800x1280.h"
#else
#include "gsl3680b_zm97f.h"
#define HAVE_TOUCH_KEY
@@ -103,7 +105,7 @@
#define GSL_STATUS_REG 0xe0
#define GSL_PAGE_REG 0xf0
-#define TPD_PROC_DEBUG
+//#define TPD_PROC_DEBUG
#ifdef TPD_PROC_DEBUG
#include <linux/proc_fs.h>
#include <linux/uaccess.h>
@@ -206,6 +208,7 @@
struct tp_device tp;
struct work_struct download_fw_work;
struct work_struct resume_work;
+ struct delayed_work delayed_work_init;
};
#if GSL_DEBUG
@@ -400,6 +403,29 @@
return rc;
}
+static void gsl_io_control(struct i2c_client *client)
+{
+#ifdef GSL9XX_VDDIO_1800
+ u8 buf[4] = {0};
+ int i;
+
+ for (i = 0; i < 5; i++) {
+ buf[0] = 0;
+ buf[1] = 0;
+ buf[2] = 0xfe;
+ buf[3] = 0x1;
+ gsl_ts_write(client, 0xf0, buf, 4);
+ buf[0] = 0x5;
+ buf[1] = 0;
+ buf[2] = 0;
+ buf[3] = 0x80;
+ gsl_ts_write(client, 0x78, buf, 4);
+ usleep_range(5*1000, 5*1100);
+ }
+ usleep_range(50*1000, 50*1100);
+#endif
+}
+
static void startup_chip(struct i2c_client *client)
{
u8 tmp = 0x00;
@@ -409,6 +435,7 @@
#endif
gsl_ts_write(client, 0xe0, &tmp, 1);
mdelay(5);
+ gsl_io_control(client);
}
static void reset_chip(struct i2c_client *client)
@@ -459,6 +486,20 @@
}
schedule_work(&ts->download_fw_work);
return 0;
+}
+
+static void gsl_delayed_work_init(struct work_struct *work)
+{
+ struct delayed_work *dwork = to_delayed_work(work);
+ struct gsl_ts *gsl3673_ts = container_of(dwork, struct gsl_ts,
+ delayed_work_init);
+ int rc;
+
+ rc = init_chip(gsl3673_ts->client);
+ if (rc < 0) {
+ dev_err(&gsl3673_ts->client->dev, "gsl_probe: init_chip failed\n");
+ cancel_work_sync(&gsl3673_ts->download_fw_work);
+ }
}
static int check_mem_data(struct i2c_client *client)
@@ -1158,20 +1199,19 @@
#endif
INIT_WORK(&ts->download_fw_work, gsl_download_fw_work);
INIT_WORK(&ts->resume_work, gsl_resume_work);
+ INIT_DELAYED_WORK(&ts->delayed_work_init, gsl_delayed_work_init);
- rc = init_chip(ts->client);
- if (rc < 0) {
- dev_err(&client->dev, "gsl_probe: init_chip failed\n");
- goto error_init_chip_fail;
- }
spin_lock_init(&ts->irq_lock);
client->irq = gpio_to_irq(ts->irq);
rc = devm_request_irq(&client->dev, client->irq, gsl_ts_irq,
IRQF_TRIGGER_RISING, client->name, ts);
if (rc < 0) {
dev_err(&client->dev, "gsl_probe: request irq failed\n");
- return rc;
+ goto error_mutex_destroy;
}
+
+ schedule_delayed_work(&ts->delayed_work_init,
+ msecs_to_jiffies(800));
#ifdef GSL_MONITOR
INIT_DELAYED_WORK(&gsl_monitor_work, gsl_monitor_worker);
gsl_monitor_workqueue = create_singlethread_workqueue
@@ -1183,8 +1223,6 @@
gsl_proc_flag = 0;
#endif
return 0;
-error_init_chip_fail:
- cancel_work_sync(&ts->download_fw_work);
error_mutex_destroy:
tp_unregister_fb(&ts->tp);
return rc;
@@ -1198,9 +1236,11 @@
cancel_delayed_work_sync(&gsl_monitor_work);
destroy_workqueue(gsl_monitor_workqueue);
#endif
+ tp_unregister_fb(&ts->tp);
device_init_wakeup(&client->dev, 0);
cancel_work_sync(&ts->work);
destroy_workqueue(ts->wq);
+ cancel_delayed_work_sync(&ts->delayed_work_init);
cancel_work_sync(&ts->download_fw_work);
return 0;
}
--
Gitblit v1.6.2