RK3399触摸屏驱动升级


一、内核源码修改
gt9xx: 驱动修改,添加goodix_update.c文件,用于读取用户层传送过来的配置文件数据
修改Makefile文件, goodix_gt9xx-y        +=goodix_update.o
kernel/drivers/input/touchscreen/gt9xx/Makefile
查看文件
@ -4,3 +4,4 @@ obj-y    += goodix_gt9xx.o
#goodix_gt9xx-y        +=goodix_tool.o
goodix_gt9xx-y        +=gt9xx.o
goodix_gt9xx-y        +=gt9xx_update.o
goodix_gt9xx-y        +=goodix_update.o

二、应用层源码修改
添加tsupdate文件夹,编写应用程序
tsupdate: 用户层文件,主要用于用户层读取触摸屏升级配置,并写入驱动。

三 Android 编译配置
1 device.mk修改

device/rockchip/rk3399/device.mk
查看文件
@ -19,6 +19,7 @@ PRODUCT_PROPERTY_OVERRIDES := \

#howard
PRODUCT_PACKAGES += netcheck
PRODUCT_PACKAGES += tsupdate
    
#howard
PRODUCT_PACKAGES += \


2 将tsupdate文件夹放入external文件夹下,其Android.mk如下

external/tsupdate/Android.mk
查看文件
@ -0,0 +1,16 @@

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
 
LOCAL_SRC_FILES:= \
    tsupdate.c \
 
LOCAL_SHARED_LIBRARIES := \
    libcutils libm\
#    liblog \
 
#LOCAL_LDLIBS    :=-llog
LOCAL_MODULE:= tsupdate
LOCAL_MODULE_TAGS := optional

include $(BUILD_EXECUTABLE)

三、上层app调用
public static void updateTouchscreen() {
    String cmd = "tsupdate";
    RootCommand(cmd);
    RootCommand("sleep 3");
    RootCommand("reboot");
}

调试日志
[    0.747101] goodix_ts_probe() start
[    0.747135] <<-GTP-INFO->> GTP Driver Version: V2.2<2014/01/14>
[    0.747146] <<-GTP-INFO->> GTP I2C Address: 0x14
[    0.747185] 4-0014 supply tp not found, using dummy regulator
[    0.769063] <<-GTP-INFO->> Guitar reset
[    0.878374] <<-GTP-INFO->> Chip Type: GOODIX_GT9
[    0.879993] 9_2_7_1_@_
[    0.880025] <<-GTP-INFO->> IC Version: 9271_1040
[    0.880035] IC PRODUCT ID: 9271<<-GTP-INFO->>   _1440 

[    0.880053] <<-GTP-DEBUG->> [1475]Config Groups' Lengths: 186, 0, 0, 0, 0, 0
[    0.881194] <<-GTP-INFO->> CTP_CONFIG_GROUP1 used, config length: 186
[    0.882372] <<-GTP-DEBUG->> [1550]CFG_GROUP1 Config Version: 80, 0x50; IC Config Version: 91, 0x5B
[    0.882403] <<-GTP-INFO->> Ic fixed config with config version(91, 0x5B)
[    0.883815] <<-GTP-INFO->> X_MAX = 1280, Y_MAX = 800, TRIGGER = 0x01
[    0.883854] <<-GTP-INFO->> create proc entry gt9xx_config success
[    0.883863] <<-GTP-INFO->> Ready to run update thread.
[    0.883871] <<-GTP-INFO->> Ready to run update thread. data=null, howard modifiy to ts
[    0.884249] input: goodix-ts as /devices/platform/ff3d0000.i2c/i2c-4/4-0014/input/input0
[    0.884473] <<-GTP-DEBUG->> [2821][update_proc]#howard##Begin gup_update_proc_spon ...... 
[    0.884515] <<-GTP-DEBUG->> [947]Search for /data/_goodix_update_.bin, /sdcard/_goodix_update_.bin for fw update.(1/50)
[    0.884584] <<-GTP-DEBUG->> [984]Search for /data/_goodix_config_.cfg, /mnt/sdcard/_goodix_config_.cfg for config update.(1/50)
[    0.884643] <<-GTP-DEBUG->> [2146]INT trigger type:1
[    0.884832] <<-GTP-INFO->>   _2160     ts->irq=157   ret = 0
[    0.884832] 
[    0.884868] <<-GTP-INFO->>   _2190     ts->irq=157   ret = 0
[    0.884868] 
[    0.884882] <<-GTP-INFO->> GTP works in interrupt mode.

分析
[    0.882372] <<-GTP-DEBUG->> [1550]CFG_GROUP1 Config Version: 80, 0x50; IC Config Version: 91, 0x5B
第一个字节50表示version,注意测试时,发现配置信息发送不下去。。。。
通过网上说明,当IC配置版本号为0x5A(90)以上,驱动将不会发送配置,以此可达到固化配置的目的,否则驱动将会将IC配置版本沮为0x41(65)
实测发现,高版本升低版本,需要复位触屏,调用gtp_recovery_reset才可以
解决办法:找一个寄存器,升级前,先配置为1,升级后配置为0.当重启检测不为0时,调用gtp_reset_guitar复位配置,升级完后,重新设置为1
i2ctransfer -f -y 4 w2@0x14 0x81 0x4A r1 当前读出来为0x00
1 升级前,先设置为5,并把在app中,advanceConfig中设置updateFlag为1,重启
i2ctransfer -f -y 4 w3@0x14 0x81 0x4A 0x05
2 内核启动检测GTP_REG_SENSOR_ID     0x814A是否不为0,若不为0,则复位GT9xx配置并重置为0
3 APP启动检测是否advanceConfig中设置updateFlag为1,若为1,则先清除updateFlag为0,并调用 i2ctransfer -f -y 4 w2@0x14 0x80 0x47 r186...升级触摸屏并重启。

注意,调试时,如果调用i2cset、 i2cget去读取/写入数据时,有时会发现不成功,原因是可能寄存器存在多个page,需要调用切换寄存器页操作

ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_CONFIG_DATA, &opr_buf[0], 1);
IC Config Version  0x5B,是通过GTP_REG_CONFIG_DATA读出来的

i2ctransfer -f -y 4 w2@0x14 0x81 0x47 r1
i2ctransfer -f -y 4 w2@0x14 0x80 0x47 r186

nct_zz:/ # i2ctransfer -f -y 4 w2@0x14 0x80 0x47 r186
0x5b 0x00 0x05 0x20 0x03 0x0a 0x3d 0x00 0x01 0x08 0x19 0x05 0x78 0x5a 0x03 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x1a 0x1e 0x14 0x8f 0x2f 0xaa 0x28 0x2a 0x31 0x0d 0x00 0x00 0x02 0x99 0x03 0x2d
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x1e 0x3e 0x94 0xc5 0x02 0x07 0x00 0x00 0x04 0x98 0x20 0x00 0x87 0x25 0x00 0x79 0x2b 0x00 0x6e 0x31 0x00 0x64 0x39 0x00 0x64 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x19 0x18 0x17 0x16 0x15 0x14 0x11 0x10
0x0f 0x0e 0x0d 0x0c 0x09 0x08 0x07 0x06 0x05 0x04 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x04 0x06 0x07 0x08 0x0a 0x0c 0x0d 0x0f 0x10 0x11 0x12 0x13 0x14 0x19 0x1b 0x1c
0x1e 0x1f 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0xff 0x09 0x00
nct_zz:/ #
如升级ts_xc9172.cfg (注意,不能在本txt中复制,有格式问题,可能notpad替换","为" "后,再复制notepad中的数据)
i2ctransfer -f -y 4 w188@0x14 0x80 0x47 0x50 0x00 0x05 0x20 0x03 0x0A 0x3D 0x00 0x01 0x08 0x19 0x05 0x50 0x3C 0x03 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x1A 0x1E 0x14 0x8F 0x2F 0xAA 0x35 0x37 0x31 0x0D 0x00 0x00 0x00 0x03 0x03 0x1D 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x2D 0x44 0x94 0xC5 0x02 0x07 0x00 0x00 0x04 0x86 0x2E 0x00 0x82 0x32 0x00 0x7E 0x37 0x00 0x7B 0x3C 0x00 0x79 0x41 0x00 0x79 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x19 0x18 0x17 0x16 0x15 0x14 0x11 0x10 0x0F 0x0E 0x0D 0x0C 0x09 0x08 0x07 0x06 0x05 0x04 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02 0x04 0x06 0x07 0x08 0x0A 0x0C 0x0D 0x0F 0x10 0x11 0x12 0x13 0x14 0x19 0x1B 0x1C 0x1E 0x1F 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x6A 0x01

如升级ts_xc9031-dw.cfg
i2ctransfer -f -y 4 w188@0x14 0x80 0x47 0x4A 0x00 0x05 0x20 0x03 0x0A 0x3D 0x20 0x02 0xCA 0x28 0x0A 0x5A 0x46 0x0A 0x05 0x00 0x00 0x00 0x00 0x00 0x00 0x03 0x18 0x1B 0x1E 0x14 0x8F 0x2F 0xAA 0x6E 0x70 0x09 0x0D 0x00 0x00 0x00 0x5A 0x02 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x32 0x00 0x64 0x96 0x94 0xC0 0x55 0x00 0x1E 0x00 0x04 0x85 0x68 0x00 0x82 0x71 0x00 0x7F 0x7A 0x00 0x7D 0x84 0x00 0x7C 0x90 0x00 0x7C 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0A 0x0B 0x0C 0x0D 0x0E 0x0F 0x10 0x11 0x12 0x13 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x2A 0x29 0x28 0x27 0x26 0x25 0x24 0x23 0x22 0x21 0x1C 0x1B 0x19 0x18 0x17 0x14 0x13 0x12 0x11 0x10 0x0D 0x0C 0x0B 0x0A 0x09 0x08 0x07 0x06 0x05 0x04 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x9D 0x01


i2ctransfer -f -y 4 w188@0x14 0x80 0x47 
#define GTP_READ_COOR_ADDR    0x814E
#define GTP_REG_SLEEP         0x8040
#define GTP_REG_SENSOR_ID     0x814A
#define GTP_REG_CONFIG_DATA   0x8047
#define GTP_REG_VERSION       0x8140
1 获取长度, 1个字节,其长度实际为cfg配置文件内参数的个数,186
ret = gtp_i2c_read_dbl_check(ts->client, GTP_REG_SENSOR_ID, &sensor_id, 1);
ts->gtp_cfg_len = cfg_info_len[sensor_id];

2 数据赋值0,1表示写地址
opr_buf[0] = (u8)((GTP_REG_CONFIG_DATA+1) >> 8);
opr_buf[1] = (u8)((GTP_REG_CONFIG_DATA+1) & 0xFF);
2---->gtp_cfg_len +2 传cfg数据

3 调用i2c写数据


i2ctransfer

sudo i2ctransfer -f -y 1 w3@0x36 0x50 0x81 0x01


0x36为I2C设备的地址, 0x5081为要写的寄存器地址, 0x01为写入的值。


sudo i2ctransfer -f -y 1 w2@0x36 0x30 0x0A r3


0x36为I2C设备的地址, 0x300A为要读的寄存器地址, r3为连续读3Byte, 0x56 0x08 0x41 为读到的寄存器的值。

其他命令
i2cdump、i2cget、i2cset只适用于读写8位的寄存器地址, 功能完全可由i2ctransfer代替, 所以不做介绍。

触摸屏驱动升级源码,含修改说明-Android文档类资源-CSDN下载

你可能感兴趣的:(RK3399开发笔记,android)