刚把driver加入kernel,发现touch的点击报点不准,厂商给出了解决方案:将附件里对应的cfg贴到GT9xx.h里的CTP_CFG_GROUP2即可,然后我们很傻很天真的把cfg放到了h文件中,结果发现还是那个样子,于是就得看看代码到底咋回事了哦
先看h文件里的#define CTP_CFG_GROUP2 {\
}
然后看这个在哪里用了在c文件里
u8 cfg_info_group2[] = CTP_CFG_GROUP2;
u8 *send_cfg_buf[] = {cfg_info_group0,cfg_info_group1,cfg_info_group2, cfg_info_group3,cfg_info_group4, cfg_info_group5};
memcpy(&config[GTP_ADDR_LENGTH], send_cfg_buf[sensor_id], ts->gtp_cfg_len);但是这句话是有前提的
#ifdef GTP_CONFIG_OF 这个GTP_CONFIG_OF开启,所以走的是上面也就是dtsi里的config2
GTP_DEBUG("Get config data from device tree.");
u8 config[GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH]
= {GTP_REG_CONFIG_DATA >> 8, GTP_REG_CONFIG_DATA & 0xff};
ret = gtp_parse_dt_cfg(&ts->client->dev, &config[GTP_ADDR_LENGTH], &ts->gtp_cfg_len, sensor_id);
if (ret < 0) {
GTP_ERROR("Failed to parse config data form device tree.");
ts->pnl_init_error = 1;
return -1;
}
#else
GTP_DEBUG("Get config data from header file.");
if ((!cfg_info_len[1]) && (!cfg_info_len[2]) &&
(!cfg_info_len[3]) && (!cfg_info_len[4]) &&
(!cfg_info_len[5]))
{
sensor_id = 0;
}
ts->gtp_cfg_len = cfg_info_len[sensor_id];
memset(&config[GTP_ADDR_LENGTH], 0, GTP_CONFIG_MAX_LENGTH);
memcpy(&config[GTP_ADDR_LENGTH], send_cfg_buf[sensor_id], ts->gtp_cfg_len);
#endif
drv_cfg_version = config[2]; //填满version config数据就是拿来配置这些参数的
所以应该把config的参数添加到dtsi里
goodix,cfg-group2 = [
00 D0 02 00 05 0A 35 01 01 08 28 05
50 32 03 05 00 00 00 00 00 00 00 17
19 1E 14 8C 2E 0E 3C 3E D3 07 00 00
00 99 03 1D 00 00 00 00 00 00 00 00
00 00 00 1E 82 94 C5 02 07 00 00 04
C7 23 00 9B 2F 00 7B 3F 00 64 54 00 55 71 00 55 18 38 60 00 F0 4A 3A FF FF 27 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 1C 1A 18 16 14 12 10 0E 0C 02 04 06 08 0A 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14 13 12 10 0F 0C 0A 08 06 04 02 00 2A 29 28 26 24 22 21 20 1F 1E 1D 1C 18 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 42 01];
};
果然生效了