Himax 10.36寸 incell触摸调试

news/2024/9/28 17:57:44/文章来源:https://www.cnblogs.com/wmc245376374/p/18438222

触摸是带笔的,数据比较大,用的是spi接口。

 

一、添加驱动:

  drivers/input/touchscreen/hxchipset

 

二、dts配置

&spi4 {status = "okay";pinctrl-0 = <&spi4m1_cs0 &spi4m1_cs1 &spi4m1_pins>;himax_touch@0 {compatible = "himax,hxcommon"; reg = <0>;spi-max-frequency = <10000000>; status = "okay";pinctrl-names = "default";pinctrl-0 = <&touch_int>;himax,irq-gpio =  <&gpio1 RK_PB5 IRQ_TYPE_LEVEL_LOW>;himax,rst-gpio = <&gpio1 RK_PB4 GPIO_ACTIVE_HIGH>;himax,panel-coords = <0 1200 0 2000>;himax,display-coords = <0 1200 0 2000>;report_type = <1>;};
};

 

三、添加固件

diff --git a/device.mk b/device.mk
old mode 100644
new mode 100755
index b454e36..db1b079
--- a/device.mk
+++ b/device.mk
@@ -44,6 +44,8 @@ PRODUCT_COPY_FILES += \PRODUCT_COPY_FILES += \$(LOCAL_PATH)/init.rk3588.rc:$(TARGET_COPY_OUT_VENDOR)/etc/init/hw/init.rk3588.rc \+       $(LOCAL_PATH)/rk3588s_s/Himax_firmware.bin:$(TARGET_COPY_OUT_VENDOR)/etc/firmware/Himax_firmware.bin \$(LOCAL_PATH)/wake_lock_filter.xml:system/etc/wake_lock_filter.xml \

厂家提供正确驱动,驱动正常加载,提供的固件正常加载(/vendor/etc/firmware/Himax_firmware.bin),如果时序正确,那这时候一般都有触点了.
如果有触点,但方向反了或者镜像,那一般是固件没给对,需要提供正确对应的固件。

 

四、调试过程遇到的一些问题点

  1.触摸不稳定,偶尔休眠唤醒或者开机没有触摸,那一般都是时序没有调好,
    VCCD, VSP, VSN, LCM_RST, TP_RST这几个信号的时序要控制好:

  VSP, VSN时序添加显示驱动中

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
old mode 100644
new mode 100755
index 4e298108a62e..c4e5b96d61f7
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -143,6 +143,9 @@ struct panel_simple {struct gpio_desc *reset_gpio;struct gpio_desc *hpd_gpio;+       struct gpio_desc *enn_gpio;
+       struct gpio_desc *enp_gpio;
+struct drm_display_mode override_mode;struct drm_dsc_picture_parameter_set *pps;
@@ -465,6 +468,9 @@ static int panel_simple_unprepare(struct drm_panel *panel)gpiod_direction_output(p->reset_gpio, 1);gpiod_direction_output(p->enable_gpio, 0);+       gpiod_direction_output(p->enn_gpio, 0);
+       gpiod_direction_output(p->enp_gpio, 0);
+panel_simple_regulator_disable(p);if (p->desc->delay.unprepare)
@@ -518,6 +524,9 @@ static int panel_simple_prepare(struct drm_panel *panel)gpiod_direction_output(p->enable_gpio, 1);+       gpiod_direction_output(p->enn_gpio, 1);
+       gpiod_direction_output(p->enp_gpio, 1);
+delay = p->desc->delay.prepare;if (p->no_hpd)delay += p->desc->delay.hpd_absent_delay;
@@ -810,6 +819,27 @@ static int panel_simple_probe(struct device *dev, const struct pane
l_desc *desc)return err;}+       panel->enn_gpio = devm_gpiod_get_optional(dev, "enn", GPIOD_ASIS);
+       if (IS_ERR(panel->enn_gpio)) {
+               err = PTR_ERR(panel->enn_gpio);
+               if (err != -EPROBE_DEFER)
+                       dev_err(dev, "failed to get enn GPIO: %d\n", err);
+               return err;
+       }
+
+       panel->enp_gpio = devm_gpiod_get_optional(dev, "enp", GPIOD_ASIS);
+       if (IS_ERR(panel->enp_gpio)) {
+               err = PTR_ERR(panel->enp_gpio);
+               if (err != -EPROBE_DEFER)
+                       dev_err(dev, "failed to get enp GPIO: %d\n", err);
+               return err;
+       }
+
+       gpiod_direction_output(panel->enn_gpio, 1);
+       gpiod_direction_output(panel->enp_gpio, 1);
+
+       msleep(10);
+panel->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_ASIS);if (IS_ERR(panel->reset_gpio)) {err = PTR_ERR(panel->reset_gpio);

1.每次开机触摸不行,休眠唤醒后才有触摸。

  需要在u-boot里面添加VSP, VSN信号的控制:

diff --git a/drivers/video/drm/rockchip_panel.c b/drivers/video/drm/rockchip_panel.c
old mode 100644
new mode 100755
index de7e5e25c2..80eba26247
--- a/drivers/video/drm/rockchip_panel.c
+++ b/drivers/video/drm/rockchip_panel.c
@@ -67,6 +67,9 @@ struct rockchip_panel_priv {struct gpio_desc enable_gpio;struct gpio_desc reset_gpio;+       struct gpio_desc enn_gpio;
+       struct gpio_desc enp_gpio;
+int cmd_type;struct gpio_desc spi_sdi_gpio;struct gpio_desc spi_scl_gpio;
@@ -285,6 +288,16 @@ static void panel_simple_prepare(struct rockchip_panel *panel)if (plat->delay.prepare)mdelay(plat->delay.prepare);+               //wmc add
+       if (dm_gpio_is_valid(&priv->enn_gpio))
+               dm_gpio_set_value(&priv->enn_gpio, 1);
+
+       if (dm_gpio_is_valid(&priv->enp_gpio))
+               dm_gpio_set_value(&priv->enp_gpio, 1);
+
+++ b/drivers/video/drm/rockchip_panel.c
@@ -67,6 +67,9 @@ struct rockchip_panel_priv {struct gpio_desc enable_gpio;struct gpio_desc reset_gpio;+       struct gpio_desc enn_gpio;
+       struct gpio_desc enp_gpio;
+int cmd_type;struct gpio_desc spi_sdi_gpio;struct gpio_desc spi_scl_gpio;
@@ -285,6 +288,16 @@ static void panel_simple_prepare(struct rockchip_panel *panel)if (plat->delay.prepare)mdelay(plat->delay.prepare);+               //wmc add
+       if (dm_gpio_is_valid(&priv->enn_gpio))
+               dm_gpio_set_value(&priv->enn_gpio, 1);
+
+       if (dm_gpio_is_valid(&priv->enp_gpio))
+               dm_gpio_set_value(&priv->enp_gpio, 1);
+
+       mdelay(10);
+       /////////////
+if (dm_gpio_is_valid(&priv->reset_gpio))dm_gpio_set_value(&priv->reset_gpio, 1);@@ -339,6 +352,14 @@ static void panel_simple_unprepare(struct rockchip_panel *panel)if (dm_gpio_is_valid(&priv->reset_gpio))dm_gpio_set_value(&priv->reset_gpio, 1);+       //wmc add
+       if (dm_gpio_is_valid(&priv->enn_gpio))
+               dm_gpio_set_value(&priv->enn_gpio, 0);
+
+       if (dm_gpio_is_valid(&priv->enp_gpio))
+               dm_gpio_set_value(&priv->enp_gpio, 0);
+       /////////////
+if (dm_gpio_is_valid(&priv->enable_gpio))dm_gpio_set_value(&priv->enable_gpio, 0);@@ -470,6 +491,20 @@ static int rockchip_panel_probe(struct udevice *dev)printf("%s: Cannot get reset GPIO: %d\n", __func__, ret);return ret;}
+       
+       ret = gpio_request_by_name(dev, "enn-gpios", 0,
+                                  &priv->enn_gpio, GPIOD_IS_OUT);
+       if (ret && ret != -ENOENT) {
+               printf("%s: Cannot get enn GPIO: %d\n", __func__, ret);
+               return ret;
+       }
+
+       ret = gpio_request_by_name(dev, "enp-gpios", 0,
+                                  &priv->enp_gpio, GPIOD_IS_OUT);
+       if (ret && ret != -ENOENT) {
+               printf("%s: Cannot get enp GPIO: %d\n", __func__, ret);
+               return ret;
+       }ret = uclass_get_device_by_phandle(UCLASS_PANEL_BACKLIGHT, dev,"backlight", &priv->backlight);

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/805297.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

加塞

加塞 rnk7,\(100+30+10+15=155\)。 题目来源:2022 牛客 OI 赛前集训营-提高组(第三场) T1 一般图最小匹配 说的很复杂,实际水题。就是从 \(n\) 个数中选 \(2m\) 个数,两个两个求差后,求这个差的和的最小值。 显然排序之后求差是最小的,但显然不能直接贪心,考虑 DP。 先…

『模拟赛』CSP-S模拟6

『模拟赛记录』CSP-S模拟6Rank 一般 恼了怎么又狠狠挂分啊啊啊啊A. 一般图最小匹配 签。(这么多天终于签上了是吧) 结论是,跟图完全没关系。题意转换完就是从 \(n\) 个数中选出 \(m\) 对差的绝对值之和最小的数。显然我们选的每一对数都应该是这 \(n\) 个数中相邻的一组,so…

ESXi 5.5 系统克隆到SD卡或USB磁盘上

对于如何将安装在本地磁盘上的ESXi系统克隆到SD卡或USB磁盘上,以便快速实现ESXi主机的VSAN-Ready状态。正好猫猫也有点兴趣,所以,就研究了下这个方式,大致的工作思路就是“先通过dd命令将ESXi系统克隆到VMFS Datastore成为一个文件,然后再从文件弄到SD卡或USB磁盘即可”。…

昆明理工大学计算机考研专业课答题卡

--昆工昆明理工大学、计算机技术、人工智能、软件工程、网络空间安全、891计算机专业核心综合、计算机系统结构、计算机软件与理论、网络与信息安全、计算机应用技术、综合程序设计

BUUCTF(PWN)- rip

BUUCTF(PWN)- rip 打开题目得到靶机信息: node5.buuoj.cn:29045 和附件 pwn1查看文件信息为 64-bit ,用 ida 打开附件 首先 shift+f12 查找字符串,能看见 system、/bin/sh 字样,点击 please input 或者 ok,bye!!! 跳转直接进入 main 函数查看gets 并没有限制输入,gets 函…

Springboot实战——黑马点评之秒杀优化

Springboot实战——黑马点评之 秒杀优化 1 秒杀优化 先来复习以下,秒杀优惠券业务的现有实现逻辑:以上流程图中的操作串行执行,效率极低。 其中 判断秒杀库存 以及 校验一人一单 属于对数据库的读取,耗时较少;扣减库存 以及 创建订单 属于对数据库的写操作,耗时相对较久。…

PARTVI-Oracle数据库管理与开发-数据库管理员的概念

18. 数据库管理员的概念 18.1. 数据库管理员的职责 数据库管理员(DBA)的主要责任是使企业数据对其用户可用。DBA必须与开发人员紧密合作,确保他们的应用程序有效地使用数据库,并与系统管理员合作,确保物理资源充足且使用高效。Oracle DBA负责了解Oracle数据库架构以及数据…

实验作业1

实验一 任务一 源代码#include<stdio.h> int main() {printf(" o \n");printf("<H>\n");printf("I I\n");printf(" o \n");printf("<H>\n");printf("I I\n");return 0; }效果 源代码#incl…

01. 感知层环境安装

1. 软件以及驱动的安装安装ZigBee无线网络节点开发平台 IAR Embedded Workbench(简称EW) 安装串口驱动(CH340芯片)。点击安装64位的。后续就可以使用串口对开发板进行调试。 仿真器驱动程序(用来烧录代码)的安装。 安装串口工具(XCOM)。2. IAR创建工程打开安装的IAR软件,点击…

黑马PM-内容项目-需求分析

需求分析的定义需求分析的时机需求分析的步骤

带笔TP gt9xx调试

一.添加驱动把供应商提供的驱动替换掉sdk里面默认的驱动drivers/input/touchscreen/gt9xx 二.dts配置:&i2c3 {status = "okay";pinctrl-names = "default";pinctrl-0 = <&i2c3m0_xfer>;gt9xx: gt9xx@5d {compatible = "goodix,gt9xx&q…

P3313 [SDOI2014] 旅行

题目思路 为每个宗教维护一个线段数,查询时,树剖时在对应宗教上查询区间即可。 使用动态开点线段树,每次最多新建 \(\log n\) 个节点,不会 MLE。 代码 #include <bits/stdc++.h>#define range 1, 100000using namespace std;const int N = 100010;struct edge {int t…