20250731在荣品的PRO-RK3566开发板的Android13下解决敦泰的FT8206触控芯片的只有4点触控功能

20250731在荣品的PRO-RK3566开发板的Android13下调通敦泰的FT8206触控芯片的10点触控功能

20250731在荣品的PRO-RK3566开发板的Android13下解决敦泰的FT8206触控芯片的只有4点触控功能

2025/7/31 15:25

缘起:敦泰的FT8206触控芯片最大只支持4点触控,再加一根手指到5点就会出现Android13没有响应的情况!

看一下驱动中有没有限制点数

正常是10点的

我也看见了。FT8206支持10点 144HZ。但是 所使用 TP最高支持多少呢?

最大是可以支持10点的

这个有DTS设置吗?

或者你直接读02寄存器,读一下多指触摸时的点数

你这个好像是没有点数设置的

参考的代码是有点数设置

10指,X,Y坐标沿着对角线调换过来了

缘起:本文只分析I2C的挂载问题。

1、敦泰FT的代理商说所有的FT的驱动程序都是兼容的,不同的就是不是对应的驱动就不能升级upgrade了。

反正我也不需要升级。直接使用以前调通的FT5X06的驱动程序了。

Y:\Android13.0\kernel-5.10\drivers\input\touchscreen\edt-ft5x06.c

原厂的edt-ft5x06.c不能用的。我用的是 飞凌魔改过的版本。

DTS也直接拷贝的飞凌的。

2、荣品的PRO-RK3566开发板的Android13的坐标原点在左上角。

但是TP得坐标原点是根据固件不同而异。

你需要在报点的地方进行处理,或者要求供应商/屏厂修改适合你的项目的固件并预烧录进去了。

如果你的TP/LCD屏的硬件接线正确,在Android13下使用i2cdetect扫描I2C1。

很容易得到0x38有设备,但是没有挂载驱动程序。

1、FT8206。使用 FT5X06的驱动程序。

2、I2C可以读了。请问 这些寄存器的值对不?

3、现在是 TP触摸没有反应?用示波器 点IRQ中断引脚吗?TP坏了?

Z:\Android13.0\kernel-5.10\drivers\input\touchscreen\edt-ft5x06.c

中断处理函数:

static irqreturn_t edt_ft5x06_ts_isr(int irq, void *dev_id)

{

struct edt_ft5x06_ts_data *tsdata = dev_id;

struct device *dev = &tsdata->client->dev;

u8 cmd;

u8 rdbuf[63];

int i, type, x, y, id;

int offset, tplen, datalen, crclen;

int error;

printk("**** wyb 2024/4/3 19:57 %s %s %d\n", FILE, FUNCTION, LINE);

switch (tsdata->version) {

case EDT_M06:

cmd = 0xf9; /* tell the controller to send touch data */

offset = 5; /* where the actual touch data starts */

tplen = 4; /* data comes in so called frames */

crclen = 1; /* length of the crc data */

break;

case EDT_M09:

case EDT_M12:

case EV_FT:

case GENERIC_FT:

cmd = 0x0;

offset = 3;

tplen = 6;

crclen = 0;

break;

default:

goto out;

}

memset(rdbuf, 0, sizeof(rdbuf));

datalen = tplen * tsdata->max_support_points + offset + crclen;

error = edt_ft5x06_ts_readwrite(tsdata->client,

sizeof(cmd), &cmd,

datalen, rdbuf);

if (error) {

dev_err_ratelimited(dev, "Unable to fetch data, error: %d\n",

error);

goto out;

}

/* M09/M12 does not send header or CRC */

if (tsdata->version == EDT_M06) {

if (rdbuf[0] != 0xaa || rdbuf[1] != 0xaa ||

rdbuf[2] != datalen) {

dev_err_ratelimited(dev,

"Unexpected header: %02x%02x%02x!\n",

rdbuf[0], rdbuf[1], rdbuf[2]);

goto out;

}

if (!edt_ft5x06_ts_check_crc(tsdata, rdbuf, datalen))

goto out;

}

for (i = 0; i < tsdata->max_support_points; i++) {

u8 *buf = &rdbuf[i * tplen + offset];

type = buf[0] >> 6;

/* ignore Reserved events */

if (type == TOUCH_EVENT_RESERVED)

continue;

/* M06 sometimes sends bogus coordinates in TOUCH_DOWN */

if (tsdata->version == EDT_M06 && type == TOUCH_EVENT_DOWN)

continue;

x = get_unaligned_be16(buf) & 0x0fff;

y = get_unaligned_be16(buf + 2) & 0x0fff;

/* The FT5x26 send the y coordinate first */

if (tsdata->version == EV_FT)

swap(x, y);

id = (buf[2] >> 4) & 0x0f;

input_mt_slot(tsdata->input, id);

if (input_mt_report_slot_state(tsdata->input, MT_TOOL_FINGER,

type != TOUCH_EVENT_UP))

{

//touchscreen_report_pos(tsdata->input, &tsdata->prop, x, y, true);

//printk("**** wyb 2024/4/3 19:57 %s %s %d x=%d, y=%d, x2=%d, y2=%d\n", FILE, FUNCTION, LINE, x, y, y, 1200-x);

// system rotation : Counterclockwise rotation 90
touchscreen_report_pos(tsdata->input, &tsdata->prop, 1200-x, 1920-y, true);
//printk("**** wyb 2024/4/3 19:57 %s %s %d x=%d, y=%d, x2=%d, y2=%d\n", FILE, FUNCTION, LINE, x, y, 1200-x, 1920-y);
printk("**** wyb 2025/7/31 10:29 %s %s %d x=%d, y=%d, x2=%d, y2=%d i=%d, tsdata->max_support_points=%d\n", FILE, FUNCTION, LINE, x, y, 1200-x, 1920-y, i, tsdata->max_support_points);

//touchscreen_report_pos(tsdata->input, &tsdata->prop, 1920-y, 1200-x, true);

//printk("**** wyb 2024/4/3 19:57 %s %s %d x=%d, y=%d, x2=%d, y2=%d\n", FILE, FUNCTION, LINE, x, y, 1920-y, 1200-x);

//touchscreen_report_pos(tsdata->input, &tsdata->prop, 1200-x, 1920-y, true);

//printk("**** wyb 2024/4/3 19:57 %s %s %d x=%d, y=%d, x2=%d, y2=%d\n", FILE, FUNCTION, LINE, x, y, 1200-x, 1920-y);

//touchscreen_report_pos(tsdata->input, &tsdata->prop, 1920-x, 1200-y, true);

//touchscreen_report_pos(tsdata->input, &tsdata->prop, 1920-y, 1200-x, true);

//touchscreen_report_pos(tsdata->input, &tsdata->prop, y, 1200-x, true);

//printk("**** wyb 2024/4/3 19:57 %s %s %d x=%d, y=%d, x2=%d, y2=%d\n", FILE, FUNCTION, LINE, x, y, y, 1200-x);

}

}

input_mt_report_pointer_emulation(tsdata->input, true);

input_sync(tsdata->input);

out:

return IRQ_HANDLED;

}

static SIMPLE_DEV_PM_OPS(edt_ft5x06_ts_pm_ops,

edt_ft5x06_ts_suspend, edt_ft5x06_ts_resume);

static const struct edt_i2c_chip_data edt_ft5x06_data = {
.max_support_points = 5,
};

static const struct edt_i2c_chip_data edt_ft5506_data = {

.max_support_points = 10,

};

static const struct edt_i2c_chip_data edt_ft6236_data = {
.max_support_points = 2,
};

static const struct i2c_device_id edt_ft5x06_ts_id[] = {

{ .name = "edt-ft5x06", .driver_data = (long)&edt_ft5x06_data },

{ .name = "edt-ft5506", .driver_data = (long)&edt_ft5506_data },

{ .name = "ev-ft5726", .driver_data = (long)&edt_ft5506_data },

/* Note no edt- prefix for compatibility with the ft6236.c driver */

{ .name = "ft6236", .driver_data = (long)&edt_ft6236_data },

{ /* sentinel */ }

};

MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);

修改为:

static SIMPLE_DEV_PM_OPS(edt_ft5x06_ts_pm_ops,

edt_ft5x06_ts_suspend, edt_ft5x06_ts_resume);

static const struct edt_i2c_chip_data edt_ft5x06_data = {
//.max_support_points = 5,
.max_support_points = 10,
};

static const struct edt_i2c_chip_data edt_ft5506_data = {

.max_support_points = 10,

};

static const struct edt_i2c_chip_data edt_ft6236_data = {
//.max_support_points = 2,
.max_support_points = 10,
};

static const struct i2c_device_id edt_ft5x06_ts_id[] = {

{ .name = "edt-ft5x06", .driver_data = (long)&edt_ft5x06_data },

{ .name = "edt-ft5506", .driver_data = (long)&edt_ft5506_data },

{ .name = "ev-ft5726", .driver_data = (long)&edt_ft5506_data },

/* Note no edt- prefix for compatibility with the ft6236.c driver */

{ .name = "ft6236", .driver_data = (long)&edt_ft6236_data },

{ /* sentinel */ }

};

MODULE_DEVICE_TABLE(i2c, edt_ft5x06_ts_id);

Android13的开发者选项:默认自带的触摸屏测点工具:

APK测试触摸屏报点:

相关推荐
南棱笑笑生19 小时前
20250731解决RK3588的AIOT参考设计刷机之后可以启动但是断电进MASKROM模式
杂质
南棱笑笑生1 个月前
20250620在Ubuntu20.04.6下编译KickPi的K7的Android14系统解决缺少libril.so.toc的问题
杂质
南棱笑笑生1 个月前
20250613在Ubuntu20.04.6下编译Rockchip的RK3576原厂Android14的SDK【整理编译】
杂质
南棱笑笑生1 个月前
20250617在荣品的PRO-RK3566开发板的Android13下解决海罗光电有限公司HL070T58C-05屏在休眠唤醒下无显示的问题
杂质
南棱笑笑生2 个月前
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
杂质
南棱笑笑生2 个月前
20250607在荣品的PRO-RK3566开发板的Android13系统下实现长按开机之后出现插入适配器不会自动启动的问题的解决
杂质
南棱笑笑生2 个月前
20250603在荣品的PRO-RK3566开发板的Android13下的命令行查看RK3566的温度
杂质
南棱笑笑生2 个月前
20250602在荣品的PRO-RK3566开发板的Android13下的uboot启动阶段配置BOOTDELAY为10s
杂质
南棱笑笑生2 个月前
20250602在Ubuntu20.04.6下修改压缩包的日期和时间
杂质