When we are porting kernel from 6.1 to 6.6, facing problem with Focaltech display touch driver.
With 6.1 kernel driver touch is working as expected.
when we insert the touch driver it is failing at the probe itself.
here is the log snippet:
dmesg | grep fts
[ 7.399962] fts_ts 2-0038: max touch number:10, irq gpio:0
[ 7.405883] input: fts_ts as /devices/platform/soc@0/30800000.bus/30a40000.i2c/i2c-2/2-0038/input/input1
[ 7.417695] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.419423] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.420714] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.420963] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.421196] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.421392] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.633209] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.633629] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.633866] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.634093] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.634315] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.634528] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.849625] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.849875] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.850111] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.851682] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.852990] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 7.862956] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.078563] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.078808] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.079042] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.079280] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.079533] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.079780] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.285870] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.286119] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.286360] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.286575] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.286785] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.286994] fts_ts 2-0038: i2c_transfer(read) fail,ret:-6
[ 8.493336] fts_ts 2-0038: fw is invalid, need read boot id
[ 8.493589] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.493809] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.494022] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.494028] fts_ts 2-0038: hid2std cmd write fail
[ 8.494235] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.494441] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.494648] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.494653] fts_ts 2-0038: start cmd write fail
[ 8.494657] fts_ts 2-0038: read boot id fail
[ 8.494661] fts_ts 2-0038: fw is invalid, need read boot id
[ 8.494868] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.495074] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.495280] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.495285] fts_ts 2-0038: hid2std cmd write fail
[ 8.495491] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.495707] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.495921] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.495928] fts_ts 2-0038: start cmd write fail
[ 8.495932] fts_ts 2-0038: read boot id fail
[ 8.495936] fts_ts 2-0038: fw is invalid, need read boot id
[ 8.496145] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.496355] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.497423] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.497442] fts_ts 2-0038: hid2std cmd write fail
[ 8.498387] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.498626] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.498843] fts_ts 2-0038: i2c_transfer(write) fail,ret:-6
[ 8.498850] fts_ts 2-0038: start cmd write fail
[ 8.498855] fts_ts 2-0038: read boot id fail
[ 8.498859] fts_ts 2-0038: get ic information, chip id = 0x0000(cid type=0x0)
[ 8.498865] fts_ts 2-0038: not focal IC, unregister driver
[ 8.517605] fts_ts 2-0038: FTS Touch Screen(I2C BUS) driver probe fail
here is the dts
&i2c3 {
focaltech_touch: touchscreen@38{
compatible = "focaltech,fts";
reg = <0x38>;
reset-gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
irq-gpio = <&gpio1 0 IRQ_TYPE_EDGE_FALLING>;
touchscreen-size-x = <1024>;
touchscreen-size-y = <600>;
max-touch-number = <10>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_touch_en &pinctrl_touch_rst>;
};
};
pinctrl_touch_en: touch_en {
fsl,pins = <
MX8MP_IOMUXC_GPIO1_IO00__GPIO1_IO00 0x16
>;
};
pinctrl_touch_rst: touch_rst_grp {
fsl,pins = <
MX8MP_IOMUXC_GPIO1_IO07__GPIO1_IO07 0x19
>;
};
here is the command output:
root@imx8mp-lpddr4-evk:~# i2cdetect -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@imx8mp-lpddr4-evk:~# ls /sys/class/i2c-dev/i2c-1/device/
1-003e 1-0052 1-0054 1-0056 1-0058 1-005a 1-005c 1-005e 1-0060 delete_device i2c-dev new_device power uevent
1-0051 1-0053 1-0055 1-0057 1-0059 1-005b 1-005d 1-005f 1-0061 device name of_node subsystem
root@imx8mp-lpddr4-evk:~# ls /sys/class/i2c-dev/i2c-2/device/
2-0038 delete_device device i2c-dev name new_device of_node power subsystem uevent
root@imx8mp-lpddr4-evk:~# ls /sys/class/i2c-dev/i2c-3/device/
ls: cannot access '/sys/class/i2c-dev/i2c-3/device/': No such file or directory
root@imx8mp-lpddr4-evk:~#
after making the reset pin as high,
we are able to get the i2cdetect output, but still probe is failing
root@imx8mp-lpddr4-evk:~# i2cdetect -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
root@imx8mp-lpddr4-evk:~#
root@imx8mp-lpddr4-evk:~# dmesg | grep fts
[ 1100.471362] fts_ts 2-0038: max touch number:10, irq gpio:0
[ 1100.471982] input: fts_ts as /devices/platform/soc@0/30800000.bus/30a40000.i2c/i2c-2/2-0038/input/input3
[ 1100.473133] fts_ts 2-0038: verify id:0x5422
[ 1100.679969] fts_ts 2-0038: verify id:0x5422
[ 1100.889744] fts_ts 2-0038: verify id:0x5422
[ 1101.098127] fts_ts 2-0038: verify id:0x5422
[ 1101.308162] fts_ts 2-0038: verify id:0x5422
[ 1101.514969] fts_ts 2-0038: fw is invalid, need read boot id
[ 1101.563668] fts_ts 2-0038: read boot id fail,read:0x0000
[ 1101.563686] fts_ts 2-0038: read boot id fail
[ 1101.563692] fts_ts 2-0038: fw is invalid, need read boot id
[ 1101.606452] fts_ts 2-0038: read boot id fail,read:0x0000
[ 1101.606469] fts_ts 2-0038: read boot id fail
[ 1101.606475] fts_ts 2-0038: fw is invalid, need read boot id
[ 1101.659464] fts_ts 2-0038: read boot id fail,read:0x0000
[ 1101.659482] fts_ts 2-0038: read boot id fail
[ 1101.659487] fts_ts 2-0038: get ic information, chip id = 0x0000(cid type=0x0)
[ 1101.659494] fts_ts 2-0038: not focal IC, unregister driver
[ 1101.683252] fts_ts 2-0038: FTS Touch Screen(I2C BUS) driver probe fail
[ 1101.683272] fts_ts: probe of 2-0038 failed with error -5
root@imx8mp-lpddr4-evk:~# i2cdump -y 2 0x38
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................
80: 4b 46 12 12 12 a0 01 0f 0b 1e 00 00 00 00 00 00 KF????????......
90: 00 15 00 00 00 00 00 00 00 00 00 00 00 00 00 22 .?............."
a0: 4d 00 01 54 01 01 06 01 79 01 1b 00 5a 01 01 15 M.?T????y??.Z???
b0: 00 06 00 00 00 00 00 00 00 00 00 00 00 00 00 55 .?.............U
c0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
e0: ff ff ff ff ff ff ff ff ff ff ff eb 08 ff ff ff ...........??...
f0: ff ff ff ff ff ff ff ff ff ff ff ff 01 00 05 ff ............?.?.
Looks good because the i2c tools is detecting the i2c direction.
The device tree is pointing to the correct i2c bus?
can you share the result of the next commands?
ls /sys/class/i2c-dev/i2c-1/device/
ls /sys/class/i2c-dev/i2c-2/device/
ls /sys/class/i2c-dev/i2c-3/device/
Thank you for contacting NXP Support!
Can you share the result of the command i2cdetect -y 2 ?
Can you confirm if the ic enable and reset pins are not arrested?
I suspect that the pins of the reset and the enable are not in the correct values, for that I recommend to add the next properties to your device tree.
&i2c3 {
focaltech_touch: touchscreen@38{
compatible = "focaltech,fts";
reg = <0x38>;
reset-gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
irq-gpio = <&gpio1 0 IRQ_TYPE_EDGE_FALLING>;
touchscreen-size-x = <1024>;
touchscreen-size-y = <600>;
max-touch-number = <10>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_touch_en &pinctrl_touch_rst>;
enable-gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;
reset-gpio = <&gpio1 7 GPIO_ACTIVE_HIGH>;
};
};
Best Regards!
Chavira