From 399353eb5dc7e9c1db94cc97c380dc7f66c51a4c Mon Sep 17 00:00:00 2001 From: lin <lin@kickpi.com> Date: Thu, 24 Apr 2025 07:46:24 +0000 Subject: [PATCH] feat(touchscreen) add send cfgs to gt9xx support --- longan/kernel/linux-4.9/drivers/input/touchscreen/gt9xx/gt9xx.c | 82 ++++++++++++++++++++++++++++++---------- 1 files changed, 61 insertions(+), 21 deletions(-) diff --git a/longan/kernel/linux-4.9/drivers/input/touchscreen/gt9xx/gt9xx.c b/longan/kernel/linux-4.9/drivers/input/touchscreen/gt9xx/gt9xx.c index 9111b01..88cec31 100755 --- a/longan/kernel/linux-4.9/drivers/input/touchscreen/gt9xx/gt9xx.c +++ b/longan/kernel/linux-4.9/drivers/input/touchscreen/gt9xx/gt9xx.c @@ -84,6 +84,7 @@ static int revert_x_flag = 0; static int revert_y_flag = 0; static int exchange_x_y_flag = 0; +static int gtp_send_cfgs = 0; static __u32 twi_id = 0; static char irq_pin_name[8]; @@ -171,6 +172,25 @@ dprintk(DEBUG_INIT,"info.exchange_x_y_flag:%d\n",info.exchange_x_y_flag); dprintk(DEBUG_INIT,"info.irq_gpio_number:%d\n",info.irq_gpio.gpio); dprintk(DEBUG_INIT,"info.wakeup_gpio_number:%d\n",info.wakeup_gpio.gpio); + } +} + +int gtp_parse_dt_cfg(struct device *dev, u8 *cfg, int *cfg_len, u8 sid) +{ + struct device_node *np = dev->of_node; + struct property *prop; + char cfg_name[18]; + + //rdzkj add for compatible of different screen by sensor_id + snprintf(cfg_name, sizeof(cfg_name), "goodix,cfg-group%d", sid); + GTP_INFO("get %s",cfg_name); + prop = of_find_property(np, cfg_name, cfg_len); + //add end + if (!prop || !prop->value || *cfg_len == 0 || *cfg_len > GTP_CONFIG_MAX_LENGTH) { + return -1;/* failed */ + } else { + memcpy(cfg, prop->value, *cfg_len); + return 0; } } @@ -345,18 +365,18 @@ { s32 ret = 0; -#if GTP_DRIVER_SEND_CFG +if( gtp_send_cfgs == 1 ) { s32 retry = 0; for (retry = 0; retry < 5; retry++) { - //ret = gtp_i2c_write(client, config , GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH); - // if (ret > 0) - // { - // break; - // } + ret = gtp_i2c_write(client, config , GTP_CONFIG_MAX_LENGTH + GTP_ADDR_LENGTH); + if (ret > 0) + { + break; + } } -#endif + } return ret; } @@ -768,8 +788,10 @@ static s32 gtp_init_panel(struct goodix_ts_data *ts) { s32 ret = -1; +if ( gtp_send_cfgs == 1) // Device tree determines whether to send_cfgs +{ + GTP_DEBUG("gtp_send_cfgs==1 into send_cfgs"); -#if GTP_DRIVER_SEND_CFG s32 i; u8 check_sum = 0; u8 rd_cfg_buf[16]; @@ -870,18 +892,35 @@ GTP_DEBUG("gt9xx:index = %d\n",index); } -printk("config send_cfg_buf******** \n"); -//index = rd_cfg_buf[GTP_ADDR_LENGTH]; -ts->gtp_cfg_len = cfg_info_len[index]; -GTP_DEBUG("gandy---SENSOR ID:%d\n", rd_cfg_buf[GTP_ADDR_LENGTH]); +// printk("config send_cfg_buf******** \n"); +// //index = rd_cfg_buf[GTP_ADDR_LENGTH]; +// ts->gtp_cfg_len = cfg_info_len[index]; +// GTP_DEBUG("gandy---SENSOR ID:%d\n", rd_cfg_buf[GTP_ADDR_LENGTH]); +// memset(&config[GTP_ADDR_LENGTH], 0, GTP_CONFIG_MAX_LENGTH); +// memcpy(&config[GTP_ADDR_LENGTH], send_cfg_buf[index], ts->gtp_cfg_len); + +GTP_DEBUG("Get config data from device tree."); memset(&config[GTP_ADDR_LENGTH], 0, GTP_CONFIG_MAX_LENGTH); -memcpy(&config[GTP_ADDR_LENGTH], send_cfg_buf[index], ts->gtp_cfg_len); +ret = gtp_parse_dt_cfg(&ts->client->dev, &config[GTP_ADDR_LENGTH], &ts->gtp_cfg_len, 0); +if (ret < 0) { + GTP_ERROR("Failed to parse config data form device tree."); + return -1; +} #if GTP_CUSTOM_CFG -config[RESOLUTION_LOC] = (u8)GTP_MAX_WIDTH; -config[RESOLUTION_LOC + 1] = (u8)(GTP_MAX_WIDTH>>8); -config[RESOLUTION_LOC + 2] = (u8)GTP_MAX_HEIGHT; -config[RESOLUTION_LOC + 3] = (u8)(GTP_MAX_HEIGHT>>8); +if ( exchange_x_y_flag == 1 ) { + config[RESOLUTION_LOC] = (u8)screen_max_y; + config[RESOLUTION_LOC + 1] = (u8)(screen_max_y>>8); + config[RESOLUTION_LOC + 2] = (u8)screen_max_x; + config[RESOLUTION_LOC + 3] = (u8)(screen_max_x>>8); +} +else { + config[RESOLUTION_LOC] = (u8)screen_max_x; + config[RESOLUTION_LOC + 1] = (u8)(screen_max_x>>8); + config[RESOLUTION_LOC + 2] = (u8)screen_max_y; + config[RESOLUTION_LOC + 3] = (u8)(screen_max_y>>8); +} + if (GTP_INT_TRIGGER == 0) //RISING { @@ -900,7 +939,7 @@ } config[ts->gtp_cfg_len] = (~check_sum) + 1; -#else //else DRIVER NEED NOT SEND CONFIG +}else{ //else DRIVER NEED NOT SEND CONFIG if(ts->gtp_cfg_len == 0) { @@ -914,7 +953,7 @@ ts->abs_y_max = GTP_MAX_HEIGHT; ts->int_trigger_type = GTP_INT_TRIGGER; } -#endif //endif GTP_DRIVER_SEND_CFG +} GTP_DEBUG_FUNC(); @@ -932,10 +971,10 @@ ret = gtp_send_cfg(ts->client); if (ret < 0) { - printk("\ngandy-----send config error.ret=%d\n",ret); + GTP_DEBUG("\ngandy-----send config error.ret=%d\n",ret); GTP_ERROR("Send config error."); } -printk("X_MAX = %d,Y_MAX = %d,TRIGGER = 0x%02x", +GTP_DEBUG("X_MAX = %d,Y_MAX = %d,TRIGGER = 0x%02x", ts->abs_x_max,ts->abs_y_max,ts->int_trigger_type); msleep(10); @@ -1588,6 +1627,7 @@ of_property_read_u32(np, "ctp_revert_x_flag", &revert_x_flag); of_property_read_u32(np, "ctp_revert_y_flag", &revert_y_flag); of_property_read_u32(np, "ctp_exchange_x_y_flag", &exchange_x_y_flag); + of_property_read_u32(np, "gtp_send_cfgs", >p_send_cfgs); #endif sunxi_gpio_to_name(CTP_IRQ_NUMBER,irq_pin_name); pr_err("gt %s, line:%d irq_pin_name = %s \n",__FUNCTION__, __LINE__, irq_pin_name); -- Gitblit v1.6.2