OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 8010|回复: 21

GT911触摸屏驱动分享以及遇到的一些问题

[复制链接]

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
发表于 2021-5-26 21:35:52 | 显示全部楼层 |阅读模式
  1. #include <linux/module.h>
  2. #include <linux/ratelimit.h>
  3. #include <linux/interrupt.h>
  4. #include <linux/input.h>
  5. #include <linux/i2c.h>
  6. #include <linux/uaccess.h>
  7. #include <linux/delay.h>
  8. #include <linux/debugfs.h>
  9. #include <linux/slab.h>
  10. #include <linux/gpio.h>
  11. #include <linux/of_gpio.h>
  12. #include <linux/input/mt.h>
  13. #include <linux/input/touchscreen.h>


  14. #define GT911_DEBUG 0
  15. #define GT911_DEBUG_PRINTK 0


  16. struct _gt911_pointsInfo                //编译器默认4字节对齐
  17. {
  18.         u8        reversed;
  19.         u8        P1_trackId;
  20.         u16 P1_x;
  21.         u16 P1_y;
  22.         u16 P1_size;
  23.         u8        Reserved1;

  24.         u8        P2_trackId;
  25.         u16 P2_x;
  26.         u16 P2_y;
  27.         u16 P2_size;
  28.         u8        Reserved2;

  29.         u8        P3_trackId;
  30.         u16 P3_x;
  31.         u16 P3_y;
  32.         u16 P3_size;
  33.         u8        Reserved3;

  34.         u8        P4_trackId;
  35.         u16 P4_x;
  36.         u16 P4_y;
  37.         u16 P4_size;
  38.         u8        Reserved4;

  39.         u8        P5_trackId;
  40.         u16 P5_x;
  41.         u16 P5_y;
  42.         u16 P5_size;
  43.         u8        Reserved5;
  44. };


  45. union gt911_pointsInfo
  46. {
  47.         struct _gt911_pointsInfo pInfo;
  48.         u8 data[41];
  49. };

  50. struct gt911_ts_data
  51. {
  52.         struct i2c_client *client;
  53.         struct input_dev *input;
  54.         int irq;
  55.         int rst_pin;
  56.         int irq_pin;
  57.        
  58.         int x_max;                                                //x最大坐标值
  59.         int y_max;

  60.         u8 triger_type;
  61.         u8 touch_number;
  62.         u8 number_touchPoints;
  63.        
  64.         #pragma pack(4)
  65.         union gt911_pointsInfo pointsInfo;
  66.         #pragma pack()
  67. };

  68. const u8 triger_type[4] = {IRQF_TRIGGER_RISING,IRQF_TRIGGER_FALLING,IRQF_TRIGGER_LOW,IRQF_TRIGGER_HIGH};

  69. static int gt11_read_reg(struct i2c_client *client, u16 cmd, u8* data, u8 len)
  70. {
  71.         int ret = 0;
  72.         u8 buf[2];
  73.         struct i2c_msg msg[2] = {

  74.                 {
  75.                         .addr         = client->addr,
  76.                         .flags         = 0,
  77.                         .len        = 2,
  78.                         .buf        = buf,
  79.                 },

  80.                 {

  81.                         .addr         = client->addr,
  82.                         .flags         = I2C_M_RD,
  83.                         .len        = len,
  84.                         .buf        = data,

  85.                 },

  86.         };
  87.         buf[0] = (u8)((cmd >> 8)&0xff);
  88.         buf[1] = (u8)(cmd &0xff);       


  89.     ret = i2c_transfer(client->adapter, msg, 2);
  90.         if(ret < 0)
  91.                 printk("read_reg:%d\n",ret);
  92.         return ret < 0 ? ret : 0;
  93. }


  94. static int gt11_write_reg(struct i2c_client *client, u16 cmd, u8* data, u8 len)
  95. {
  96.         int ret = 0;
  97.         u8 buf[100];
  98.         struct i2c_msg msg = {

  99.                         .addr         = client->addr,
  100.                         .flags         = 0,
  101.                         .len        = len + 2,
  102.                         .buf        = buf,
  103.         };
  104.         memset(buf, 0, 100);
  105.         buf[0] = (u8)((cmd >> 8)&0xff);
  106.         buf[1] = (u8)(cmd &0xff);
  107.         memcpy(&buf[2],data,len);
  108.                
  109.         ret = i2c_transfer(client->adapter, &msg, 1);
  110.         if(ret < 0)
  111.                 printk("write_reg:%d\n",ret);
  112.         return ret < 0 ? ret : 0;
  113. }



  114. static int gt911_getInfo(struct i2c_client *client)
  115. {
  116.         int ret = 0;
  117.         struct gt911_ts_data *tsdata = i2c_get_clientdata(client);

  118.         ret = gt11_read_reg(client, 0x8048, (u8 *)(&tsdata->x_max), 2);
  119.         if(ret)
  120.         {
  121.                 printk("gt11 read reg fail %s %d\n",__FUNCTION__,__LINE__);
  122.                 goto fail;
  123.         }
  124.         ret = gt11_read_reg(client, 0x804A, (u8 *)(&tsdata->y_max), 2);
  125.         if(ret)
  126.         {
  127.                 printk("gt11 read reg fail %s %d\n",__FUNCTION__,__LINE__);
  128.                 goto fail;
  129.         }

  130.         ret = gt11_read_reg(client, 0x804C, (u8 *)(&tsdata->touch_number), 1);
  131.         if(ret)
  132.         {
  133.                 printk("gt11 read reg fail %s %d\n",__FUNCTION__,__LINE__);
  134.                 goto fail;
  135.         }
  136.         tsdata->touch_number &= 0x0f;

  137.         ret = gt11_read_reg(client, 0x804D, (u8 *)(&tsdata->triger_type), 1);
  138.         if(ret)
  139.         {
  140.                 printk("gt11 read reg fail %s %d\n",__FUNCTION__,__LINE__);
  141.                 goto fail;
  142.         }
  143.         tsdata->triger_type &= 0x03;
  144.         tsdata->triger_type = triger_type[tsdata->triger_type];
  145.        
  146. fail:       
  147.         return ret;

  148.        
  149. }

  150. static int gt911_reset(struct i2c_client *client)
  151. {
  152.         int error;
  153.         struct gt911_ts_data *tsdata = i2c_get_clientdata(client);

  154.         tsdata->rst_pin = of_get_named_gpio(client->dev.of_node, "goodix,rst-gpio", 0);
  155.         if (gpio_is_valid(tsdata->rst_pin)) {
  156.                 error = devm_gpio_request_one(&client->dev,
  157.                                         tsdata->rst_pin, GPIOF_OUT_INIT_LOW,
  158.                                         "goodix,rst-gpio");
  159.                 if (error) {
  160.                         dev_err(&client->dev,
  161.                                 "Failed to request GPIO %d as rst pin, error %d\n",
  162.                                 tsdata->rst_pin, error);
  163.                         return error;
  164.                 }

  165.                
  166.         }
  167.        
  168.        
  169.         tsdata->irq_pin = of_get_named_gpio(client->dev.of_node, "goodix,irq-gpio", 0);//default 0
  170.         if (gpio_is_valid(tsdata->irq_pin)) {
  171.                 error = devm_gpio_request_one(&client->dev,
  172.                                         tsdata->irq_pin, GPIOF_OUT_INIT_LOW,
  173.                                         "goodix,irq-gpio");
  174.                 if (error) {
  175.                         dev_err(&client->dev,
  176.                                 "Failed to request GPIO %d as irq pin, error %d\n",
  177.                                 tsdata->irq_pin, error);
  178.                         return error;
  179.                 }

  180.                 msleep(5);
  181.                
  182.         }

  183.         gpio_set_value(tsdata->rst_pin, 1);
  184.         msleep(10);

  185.         error = gpio_direction_input(tsdata->irq_pin);
  186.         if (error) {
  187.                 dev_err(&client->dev,
  188.                                 "Failed to set GPIO input %d as irq pin, error %d\n",
  189.                                 tsdata->irq_pin, error);
  190.         }
  191.         msleep(10);
  192.         client->addr = 0x5d;
  193.        
  194.         return error;                       
  195. }


  196. #if GT911_DEBUG
  197. static void gt911_debugInfo(struct gt911_ts_data *tsdata)
  198. {
  199.        
  200.         printk("touch num:%#x\n",tsdata->number_touchPoints);
  201.         printk("P1 track id:%d\n",tsdata->pointsInfo.pInfo.P1_trackId);
  202.         printk("P1 x:%d  y:%d\n\n",tsdata->pointsInfo.pInfo.P1_x,tsdata->pointsInfo.pInfo.P1_y);

  203.         printk("P2 track id:%d\n",tsdata->pointsInfo.pInfo.P2_trackId);
  204.         printk("P2 x:%d  y:%d\n\n",tsdata->pointsInfo.pInfo.P2_x,tsdata->pointsInfo.pInfo.P2_y);

  205.         printk("P3 track id:%d\n",tsdata->pointsInfo.pInfo.P3_trackId);
  206.         printk("P3 x:%d  y:%d\n\n",tsdata->pointsInfo.pInfo.P3_x,tsdata->pointsInfo.pInfo.P3_y);

  207.         printk("P4 track id:%d\n",tsdata->pointsInfo.pInfo.P4_trackId);
  208.         printk("P4 x:%d  y:%d\n\n",tsdata->pointsInfo.pInfo.P4_x,tsdata->pointsInfo.pInfo.P4_y);

  209.         printk("P5 track id:%d\n",tsdata->pointsInfo.pInfo.P5_trackId);
  210.         printk("P5 x:%d  y:%d\n\n",tsdata->pointsInfo.pInfo.P5_x,tsdata->pointsInfo.pInfo.P5_y);
  211. }
  212. #endif
  213. static irqreturn_t gt911_ts_isr(int irq, void *dev_id)
  214. {
  215.         struct gt911_ts_data *tsdata = dev_id;
  216.         int ret = 0, i = 0,j = 0;
  217.         u8 trackId = 0;
  218.         u16 x,y,P_size;
  219.         static u8 preTouchNum = 0;
  220.         static u8 pretouchTrackID[5];
  221.        
  222.         ret = gt11_read_reg(tsdata->client, 0x814E, (u8 *)(&tsdata->number_touchPoints), 1);
  223.         if(ret)
  224.         {
  225.                 printk("gt11 read reg fail %s %d\n",__FUNCTION__,__LINE__);
  226.                 goto fail;
  227.         }

  228.        
  229.         if(!(tsdata->number_touchPoints & 0x80))
  230.         {
  231.                 #if GT911_DEBUG_PRINTK
  232.                         printk("buffer status error %s %d\n",__FUNCTION__,__LINE__);
  233.                 #endif
  234.                 goto fail;
  235.         }

  236.         if((tsdata->number_touchPoints & 0x0f) > tsdata->touch_number)
  237.                 goto fail;

  238.         if(tsdata->number_touchPoints & 0x0f)
  239.                 ret = gt11_read_reg(tsdata->client, 0x814E, tsdata->pointsInfo.data, 41);
  240.         else{

  241.                 #if GT911_DEBUG_PRINTK
  242.                         printk("finger up %s %d\n",__FUNCTION__,__LINE__);
  243.                 #endif

  244.                
  245.                 if(preTouchNum)
  246.                 {
  247.                         for(i=0; i< preTouchNum; i++)
  248.                         {
  249.                                 input_mt_slot(tsdata->input, pretouchTrackID[i]);
  250.                                 input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, false);

  251.                                 #if GT911_DEBUG_PRINTK
  252.                                         printk("finger up ID %d %s %d\n",pretouchTrackID[i],__FUNCTION__,__LINE__);
  253.                                 #endif
  254.                         }
  255.        
  256.                         preTouchNum = 0;
  257.                 }

  258.                 input_mt_report_pointer_emulation(tsdata->input, true);
  259.                 input_sync(tsdata->input);
  260.                
  261.                 goto fail;
  262.         }
  263.                        
  264.         if(ret)
  265.         {
  266.                 printk("gt11 read reg fail %s %d\n",__FUNCTION__,__LINE__);
  267.                 goto fail;
  268.         }

  269.         for(i=0; i< tsdata->touch_number; i++)
  270.         {
  271.                 u8 *buf = &tsdata->pointsInfo.data[i * 8 + 1];
  272.                 trackId = buf[0];
  273.                 x = (buf[2] << 8) | buf[1];
  274.                 y = (buf[4] << 8) | buf[3];
  275.                 P_size = (buf[6] << 8) | buf[5];

  276.                 if(preTouchNum <= (tsdata->number_touchPoints & 0x0f))                                //触摸点增加或者保持触摸点数量
  277.                 {
  278.                         if(!((tsdata->number_touchPoints & 0x0f) > i))                                        //上报所有的点
  279.                                 break;
  280.                         input_mt_slot(tsdata->input, trackId);
  281.                         input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, true);
  282.                        
  283.                         input_report_abs(tsdata->input, ABS_MT_POSITION_X, x);
  284.                         input_report_abs(tsdata->input, ABS_MT_POSITION_Y, y);
  285.                         input_report_abs(tsdata->input, ABS_MT_TOUCH_MAJOR, P_size);

  286.                         #if GT911_DEBUG_PRINTK
  287.                                 printk("finger increase down ID:%d %s %d\n",trackId,__FUNCTION__,__LINE__);
  288.                         #endif
  289.                        

  290.                 }else {                                                                                                                                //触摸点减少
  291.                         if(!(preTouchNum > i))                                                                                        //处理上报上次所有的点
  292.                                 break;


  293.                         for(; j < preTouchNum;j++)
  294.                         {
  295.                                 if(pretouchTrackID[j] != trackId)
  296.                                 {                                       
  297.                                         input_mt_slot(tsdata->input, pretouchTrackID[j]);
  298.                                         input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, false);

  299.                                         #if GT911_DEBUG_PRINTK
  300.                                                 printk("finger decrease up ID:%d %s %d\n",pretouchTrackID[j],__FUNCTION__,__LINE__);
  301.                                         #endif
  302.                                        
  303.                                 }else {
  304.                                
  305.                                         input_mt_slot(tsdata->input, trackId);
  306.                                         input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER, true);
  307.                                        
  308.                                         input_report_abs(tsdata->input, ABS_MT_POSITION_X, x);
  309.                                         input_report_abs(tsdata->input, ABS_MT_POSITION_Y, y);
  310.                                         input_report_abs(tsdata->input, ABS_MT_TOUCH_MAJOR, P_size);

  311.                                         #if GT911_DEBUG_PRINTK
  312.                                                 printk("finger decrease down j:%d ID:%d %s %d\n",j,trackId,__FUNCTION__,__LINE__);
  313.                                         #endif
  314.                                        
  315.                                         j++;
  316.                                         break;
  317.                                 }

  318.                         }
  319.                
  320.                 }
  321.                
  322.         }

  323.         input_mt_report_pointer_emulation(tsdata->input, true);
  324.         input_sync(tsdata->input);

  325.        
  326.         preTouchNum = tsdata->number_touchPoints & 0x0f;
  327.         for(i=0; i< tsdata->touch_number; i++)
  328.         {
  329.                 u8 *buf = &tsdata->pointsInfo.data[i * 8 + 1];
  330.                 pretouchTrackID[i] = buf[0];
  331.         }

  332.        
  333.         #if GT911_DEBUG
  334.                 gt911_debugInfo(tsdata);
  335.         #endif

  336. fail:
  337.         gt11_write_reg(tsdata->client, 0x814E, "\x00", 1);
  338.         return IRQ_HANDLED;
  339. }


  340. static int gt911_ts_probe(struct i2c_client *client,const struct i2c_device_id *id)
  341. {
  342.         int ret = 0;
  343.         struct gt911_ts_data *tsdata;
  344.         struct input_dev *input;

  345.         tsdata = devm_kzalloc(&client->dev, sizeof(*tsdata), GFP_KERNEL);
  346.         if (!tsdata) {
  347.                 dev_err(&client->dev, "failed to allocate driver data.\n");
  348.                 return -ENOMEM;
  349.         }
  350.         tsdata->client = client;
  351.         i2c_set_clientdata(client, tsdata);       


  352.         gt911_reset(client);
  353.        
  354.         ret = gt11_write_reg(tsdata->client, 0x814E, "\x00", 1);
  355.         if(ret)
  356.         {
  357.                 printk("gt11 write reg fail %s %d\n",__FUNCTION__,__LINE__);
  358.                 goto fail;
  359.         }
  360.         ret = gt911_getInfo(client);
  361.         if(ret)
  362.         {
  363.                 printk("gt11 write reg fail %s %d\n",__FUNCTION__,__LINE__);
  364.                 goto fail;
  365.         }

  366.         input = devm_input_allocate_device(&client->dev);
  367.         if (!input) {
  368.                 dev_err(&client->dev, "failed to allocate input data.\n");
  369.                 return -ENOMEM;
  370.         }       
  371.         input_set_drvdata(input, tsdata);
  372.         tsdata->input = input;

  373.         input->name = client->name;
  374.         input->id.bustype = BUS_I2C;
  375.         input->dev.parent = &client->dev;

  376.         input_set_capability(input, EV_KEY , BTN_TOUCH);
  377.         __set_bit(EV_ABS, input->evbit);
  378.         __set_bit(INPUT_PROP_DIRECT, input->propbit);
  379.         input_set_abs_params(input, ABS_X, 0, tsdata->x_max , 0, 0);
  380.         input_set_abs_params(input, ABS_Y, 0, tsdata->y_max, 0, 0);
  381.         input_set_abs_params(input, ABS_MT_POSITION_X,
  382.                              0, tsdata->x_max, 0, 0);
  383.         input_set_abs_params(input, ABS_MT_POSITION_Y,
  384.                              0, tsdata->y_max, 0, 0);
  385.        
  386.         input_set_abs_params(input, ABS_MT_TOUCH_MAJOR,
  387.                              0, 255, 0, 0);

  388.        
  389.         ret = input_mt_init_slots(input, tsdata->touch_number, 0);
  390.         if (ret) {
  391.                 dev_err(&client->dev, "Unable to init MT slots.\n");
  392.                 goto fail;
  393.         }

  394.         ret = input_register_device(input);
  395.         if (ret)
  396.         {
  397.                 dev_err(&client->dev, "Unable to register input device.\n");
  398.                 goto fail;
  399.                
  400.         }

  401.        
  402.         ret = devm_request_threaded_irq(&client->dev, client->irq, NULL,
  403.                                         gt911_ts_isr,
  404.                                         tsdata->triger_type | IRQF_ONESHOT,
  405.                                         client->name, tsdata);
  406.        
  407.         return 0;

  408. fail:
  409.         return ret;

  410. }


  411. static int gt911_ts_remove(struct i2c_client *client)
  412. {
  413.         struct gt911_ts_data *tsdata = i2c_get_clientdata(client);

  414.         input_unregister_device(tsdata->input);

  415.         return 0;
  416. }






  417. static const struct i2c_device_id gt911_ts_id[] = {
  418.         { "goodix,gt9xx", 0, },
  419.         { /* sentinel */ }
  420. };

  421. static const struct of_device_id gt911_of_match[] = {
  422.         { .compatible = "goodix,gt9xx", },
  423.         { /* sentinel */ }
  424. };


  425. static struct i2c_driver gt911_ts_driver = {
  426.         .driver = {
  427.                 .owner = THIS_MODULE,
  428.                 .name = "gt911",
  429.                 .of_match_table = of_match_ptr(gt911_of_match),

  430.         },
  431.         .id_table = gt911_ts_id,
  432.         .probe    = gt911_ts_probe,
  433.         .remove   = gt911_ts_remove,
  434. };

  435. module_i2c_driver(gt911_ts_driver);


  436. MODULE_LICENSE("GPL");



复制代码
使用insmod加载这个驱动是没有问题的,  但是编译进内核经过调试发现初始化那部分有问题,也就是获取屏幕分辨率和触摸点数量获取的都是零。导致后续处理出问题。但是 i2c_transfer函数无错误返回。且i2c adapter在加载这个驱动之前就注册成功了。有哪位大师能解决此问题,请留言。

后来使用一个歪招,用脚本加载这个触摸屏触动,进而使用tslib。
享受技术
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-5-27 14:17:09 | 显示全部楼层
结贴,将228行的 msleep(10) 改成 msleep(100)就行了。     看了芯片手册的上电顺序,应该和这个上电顺序有关。
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-5-27 14:18:07 | 显示全部楼层
改过后,编译近内核是没问题的,  TS_LIB测试也通过
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-16 11:15:45 | 显示全部楼层
tw1157727586 发表于 2021-5-27 14:18
改过后,编译近内核是没问题的,  TS_LIB测试也通过

可否发一下设备树,我调试了半天,就是触摸没反应,也试了其他的驱动,也都是一样,我都怀疑是硬件有问题了
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-16 17:15:15 | 显示全部楼层
        goodix_ts@5d {
                compatible = "goodix,gt9xx";
                                pinctrl-names = "default";
                reg = <0x5d>;
                status = "okay";
                interrupt-parent = <&gpio1>;
                interrupts = <5 0>;
                               
                pinctrl-0 = <&ts_int_pin
                             &ts_reset_pin>;
                goodix,rst-gpio = <&gpio5 2  GPIO_ACTIVE_LOW>;
                goodix,irq-gpio = <&gpio1 5  GPIO_ACTIVE_LOW>;
        };



                ts_int_pin: ts_int_pin_mux {
                        fsl,pins = <
                                MX6UL_PAD_GPIO1_IO05__GPIO1_IO05        0x10B0
                        >;
                };

享受技术
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-16 17:18:48 | 显示全部楼层
冷月枫 发表于 2021-8-16 11:15
可否发一下设备树,我调试了半天,就是触摸没反应,也试了其他的驱动,也都是一样,我都怀疑是硬件有问题 ...


        goodix_ts@5d {
                compatible = "goodix,gt9xx";
                                pinctrl-names = "default";
                reg = <0x5d>;
                status = "okay";
                interrupt-parent = <&gpio1>;
                interrupts = <5 0>;
                                
                pinctrl-0 = <&ts_int_pin
                             &ts_reset_pin>;
                goodix,rst-gpio = <&gpio5 2  GPIO_ACTIVE_LOW>;
                goodix,irq-gpio = <&gpio1 5  GPIO_ACTIVE_LOW>;
        };



                ts_int_pin: ts_int_pin_mux {
                        fsl,pins = <
                                MX6UL_PAD_GPIO1_IO05__GPIO1_IO05        0x10B0
                        >;
                };
享受技术
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-17 11:23:47 | 显示全部楼层
tw1157727586 发表于 2021-8-16 17:15
goodix_ts@5d {
                compatible = "goodix,gt9xx";
                                pinctrl-names = "default"; ...

多谢,昨天我也搞定了
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-17 11:24:33 | 显示全部楼层
冷月枫 发表于 2021-8-17 11:23
多谢,昨天我也搞定了

        /*  触摸 */
        gt911:gt911@5d {
                compatible = "goodix,gt9111","goodix,gt9xx";
                reg = <0x5d>;
                pinctrl-names = "default";
                //pinctrl-0 = <&pinctrl_tsc
                                                                //&pinctrl_tsc_reset >;
                pinctrl-0 = <&pinctrl_tsc>;                                        
                interrupt-parent = <&gpio1>;
                interrupts = <9 2>;  /* 使用的是9号中断 因为引脚是9  触发方式是2 下降沿触发 */
                rst-gpio = <&gpio5 9 GPIO_ACTIVE_LOW>;
                irq-gpio = <&gpio1 9 GPIO_ACTIVE_LOW>;

           goodix,cfg-group0 = [
                        41 20 03 E0 01 05 BD 00 01 0F
                        14 0F 5F 32 03 05 00 00 00 00
                        00 00 00 18 1A 1C 14 89 29 0B
                        3A 38 8F 04 00 00 01 21 02 1D
                        00 01 00 00 00 00 00 00 00 00
                        00 28 50 94 C5 02 08 00 00 04
                        80 2A 00 80 31 00 83 38 00 8C
                        41 00 9B 4A 00 9A 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00
                        00 00 16 14 12 10 0E 0C 0A 08
                        06 04 02 FF FF FF 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00
                        00 00 00 02 04 06 08 0A 0F 10
                        12 16 18 1C 1D 1E 1F 20 21 22
                        FF FF FF FF FF FF FF FF 00 00
                        00 00 00 00 00 00 00 00 00 00
                        00 00 00 00 B7 01];
/* 可以使用 但是触摸不太准 */
/*goodix,cfg-group0 = [
                        5A 20 03 E0 01 05 3D 00 02 08 28
                        08 5A 46 03 05 00 00 00 00 00 00
                        04 04 04 04 03 88 29 0A 4B 4D 0C
                        08 00 00 00 21 02 1D 00 01 00 00
                        00 00 00 00 00 00 00 46 64 94 D5
                        02 07 00 00 04 83 48 00 77 4D 00
                        6D 53 00 64 59 00 5A 60 00 5A 00
                        00 00 00 00 00 00 00 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00 00
                        00 00 02 04 06 08 0A 0C 0E 10 12
                        14 FF FF FF FF 00 00 00 00 00 00
                        00 00 00 00 00 00 00 00 00 00 00
                        02 04 06 08 0F 10 12 16 18 1C 1D
                        1E 1F 20 21 22 FF FF FF FF FF FF
                        FF FF FF 00 00 00 00 00 00 00 00
                        00 00 00 00 00 00 00 00 D6 01];
                */
                status = "okay";
        };
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-17 11:26:36 | 显示全部楼层
冷月枫 发表于 2021-8-17 11:24
/*  触摸 */
        gt911:gt911@5d {
                compatible = "goodix,gt9111","goodix,gt9xx";

今天试了一下,不需要配置文件也行,但共有的问题是,不管使用不使用配置文件触摸都有一点偏差,有知道怎么解决的吗?
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-17 11:30:41 | 显示全部楼层
冷月枫 发表于 2021-8-17 11:26
今天试了一下,不需要配置文件也行,但共有的问题是,不管使用不使用配置文件触摸都有一点偏差,有知道怎 ...

我没用配置文件,一般这个文件在出厂的时候厂家都会初始化进行校准。没必要二次校准。  如果不准的话会不会是出厂安装的时候有点问题。
享受技术
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-17 11:31:05 | 显示全部楼层
tw1157727586 发表于 2021-8-17 11:30
我没用配置文件,一般这个文件在出厂的时候厂家都会初始化进行校准。没必要二次校准。  如果不准的话会不 ...

使用tslib
享受技术
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-17 14:13:20 | 显示全部楼层

电容触摸也需要校准吗
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-17 14:13:49 | 显示全部楼层
冷月枫 发表于 2021-8-17 14:13
电容触摸也需要校准吗

好的,我试试
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-17 17:08:59 | 显示全部楼层
冷月枫 发表于 2021-8-17 14:13
电容触摸也需要校准吗

电容屏基本不需要校准的,但是tslib提供了校准功能
享受技术
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-17 20:37:55 | 显示全部楼层
tw1157727586 发表于 2021-8-17 17:08
电容屏基本不需要校准的,但是tslib提供了校准功能

我试了,还是有一点偏差,最边上触摸不到,校准不校准感觉没什么区别
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-18 09:23:55 | 显示全部楼层
冷月枫 发表于 2021-8-17 20:37
我试了,还是有一点偏差,最边上触摸不到,校准不校准感觉没什么区别

你看看最后出来最大的数值是不是你屏幕尺寸
享受技术
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-18 11:55:06 | 显示全部楼层
tw1157727586 发表于 2021-8-18 09:23
你看看最后出来最大的数值是不是你屏幕尺寸

799,少了1
回复 支持 反对

使用道具 举报

5

主题

123

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1820
金钱
1820
注册时间
2019-7-23
在线时间
281 小时
 楼主| 发表于 2021-8-20 13:12:34 | 显示全部楼层

刚好啊, 0-799  800个点
享受技术
回复 支持 反对

使用道具 举报

4

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
102
金钱
102
注册时间
2020-5-4
在线时间
21 小时
发表于 2021-8-20 22:01:13 | 显示全部楼层
tw1157727586 发表于 2021-8-20 13:12
刚好啊, 0-799  800个点

好的,现在能用了,多谢
回复 支持 反对

使用道具 举报

1

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
355
金钱
355
注册时间
2015-12-11
在线时间
78 小时
发表于 2021-11-10 12:12:34 | 显示全部楼层
围观大佬666
回复 支持 反对

使用道具 举报

5

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2020-10-28
在线时间
32 小时
发表于 2021-12-17 16:45:22 | 显示全部楼层
GT911 ID不是28或AB吗? 为什么写的是5d
回复 支持 反对

使用道具 举报

0

主题

50

帖子

0

精华

高级会员

Rank: 4

积分
984
金钱
984
注册时间
2019-7-3
在线时间
185 小时
发表于 2021-12-22 13:20:35 | 显示全部楼层
mawenchaoask 发表于 2021-12-17 16:45
GT911 ID不是28或AB吗? 为什么写的是5d

7位地址和8位地址。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 14:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表