Yio Remote Community

Touchscreen not working - advice please!

Sorry to be spamming the forum recently. I’ve hit my first major problem. My touchscreen just stopped working. I took the remote apart and confirmed that the ribbon is in there nice and tight - I reapplied to be sure but the same issue. It was odd at it just stopped working as I was messing with remote.

My i2cdetect output is:

# i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- 14 -- -- -- -- -- -- -- -- -- -- --
20: 20 21 -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- 55 -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

So I’m seeing 6 devices at the addresses above. No idea what I should be expecting or how to test if they are responding correctly. Bummer!

The touch IC would show up as UU, when the kernel driver is loaded. 6 devices are correct and I can see that the 0x14 is the touch IC. Did you change anything?

what does lsmod show?
You can try reloading the driver with modprobe goodix

Make a backup your config file and try reflashing the SD card.

lsmod shows:

Module                  Size  Used by
bnep                   11707  2
brcmfmac              203886  0
brcmutil                8662  1 brcmfmac
cfg80211              537491  1 brcmfmac
i2c_gpio                3842  5
i2c_algo_bit            6616  1 i2c_gpio
uio_pdrv_genirq         3686  0
uio                    10121  1 uio_pdrv_genirq
fixed                   3001  0
sch_fq_codel            9843  2
hci_uart               20429  1
btbcm                   8344  1 hci_uart
bluetooth             366523  26 hci_uart,bnep,btbcm
ecdh_generic           17608  1 bluetooth
serdev                  9370  1 hci_uart
evdev                  11778  0
i2c_dev                 6930  10
goodix                  7813  0
ipv6                  396563  30

I ran modprobe goodix but no change. I’ll reflash the SD tomorrow and report back.

I didn’t do anything odd. Remote worked normally, put it down and when it came on again touch stopped working. Tried the classic turn it off and on again and updating the remote binary. I will do a full flash as you suggest as I guess it’s OS related then?

I think so because the device is there on i2c.

Reflashed with OS v0.3.1 and same output:

# i2cdetect -y 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- 14 -- -- -- -- -- -- -- -- -- -- --
20: 20 21 -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- 55 -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Completely clean install including blank config.json. No warnings in the logs. Any ideas?

You could try disconnecting the battery to completely remove power from the system. Wait a bit and connect it back on.

Just tried it and still no difference. :slightly_frowning_face: Could it be hardware related then?

I looked at vcdbg log msg and it seems the overlay is being loaded okay…

001533.104: brfs: File read: 23315 bytes
001533.533: brfs: File read: /mfs/sd/config.txt
001533.612: brfs: File read: 394 bytes
001535.649: brfs: File read: /mfs/sd/overlays/sharp.dtbo
001553.639: Loaded overlay 'sharp'
001618.773: brfs: File read: 1638 bytes
001620.486: brfs: File read: /mfs/sd/overlays/goodix.dtbo
001627.653: Loaded overlay 'goodix'

As an aside I also get the following HDMI errors:

001175.307: brfs: File read: 394 bytes
001175.772: hdmi: HDMI:EDID error reading EDID block 0 attempt 0
...
001187.508: hdmi: HDMI:EDID error reading EDID block 0 attempt 9
001188.574: hdmi: HDMI:EDID giving up on reading EDID block 0
001188.951: hdmi: HDMI:EDID error reading EDID block 0 attempt 0
...
001200.644: hdmi: HDMI:EDID error reading EDID block 0 attempt 9
001201.706: hdmi: HDMI:EDID giving up on reading EDID block 0
001201.792: hdmi: HDMI:hdmi_get_state is deprecated, use hdmi_get_display_state instead
001201.865: hdmi: HDMI:hdmi_get_state is deprecated, use hdmi_get_display_state instead

But progress, with dmesg | grep Goodix I get:

[    6.843334] Goodix-TS 3-005d: i2c test failed attempt 1: -6
[    6.883303] Goodix-TS 3-005d: i2c test failed attempt 2: -6
[    6.922651] Goodix-TS 3-005d: I2C communication failure: -6

Contents of /proc/interrupts is:

 17:       1131  ARMCTRL-level   1 Edge      2000b880.mailbox
 18:       3101  ARMCTRL-level   2 Edge      VCHIQ doorbell
 27:     283829  ARMCTRL-level  35 Edge      timer
 40:          0  ARMCTRL-level  48 Edge      bcm2708_fb dma
 42:          0  ARMCTRL-level  50 Edge      DMA IRQ
 44:          0  ARMCTRL-level  52 Edge      DMA IRQ
 45:       2141  ARMCTRL-level  53 Edge      DMA IRQ
 48:       3539  ARMCTRL-level  56 Edge      DMA IRQ
 53:       5896  ARMCTRL-level  61 Edge      bcm2835-auxirq
 80:       1983  ARMCTRL-level  88 Edge      mmc0
 86:     203649  ARMCTRL-level  94 Edge      mmc1
160:       5896  bcm2835-auxirq   0 Edge      ttyS0
164:     154178  pinctrl-bcm2835  18 Edge      gpiolib
Err:          0

Can you check if the proximity sensor is sitting right? Not sure if that could block the touch IC from initialisation.

The system can see the chip but on a different address. That is weird. I don’t see any HDMI errors on my pi. Can you check if you accidentally damaged something around the HDMI port?

I checked the proximity sensor and reapplied the connector again. Still no luck. What address should the touch screen be turning up on? 5d?

Not sure if I damaged the HDMI connector. I did take a chunk out around the front leg but I’m not sure it damaged anything.
image

It should show up as UU, when the kernel loaded the driver.

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: 20 21 -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- 55 -- -- -- -- 5a -- -- UU -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --    

There could be many reasons. I circled a couple of areas on the picture that could be problematic. I don’t know if these scratches are cutting traces or not. Also I see a weird thing around the HDMI port. A little extra leg?

37bdc2377ca3611d15a6d9e50563d7f25b74b515

The ribbons are fragile, please be careful inserting them a lot of times. Could you take a picture of the other side where the small FPC connector is and also the ribbon of the display?

Not sure what that was near the HDMI port. I just flicked it off, it wasn’t attached. I thinks it’s crap from my workbench I’m sat at now!

Could be damage around the ground I suppose? Seems weird as everything was working fine for a number of days.

Have you seen this post about an issue with the Pi 4 where it would allocate 0x14 in place of 0x5d potentially due to temp issues. I2C select feature for the touchscreen is based on interrupt pin being pulled one way or the other on init? Is this a possibility? Http://github.com/pimoroni/hyperpixel4/issues/41

Haven’t seen this issue about the hyperpixel, but it looks quite similar. The touch IC shows up on a different i2c address. A short between pins could cause this. Could you check the small FPC connector? No debris or anything that could cause a short there?

I have been using the remote for 1,5 years and had no overheating issues.

This is the original overlay that is used:

// Device tree overlay for I2C connected Goodix gt911 touch controller
/dts-v1/;
/plugin/;

/ {
        compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";

        fragment@0 {
                target = <&gpio>;
                __overlay__ {
                        goodix_pins: goodix_pins {
                                brcm,pins = <26 19>; // interrupt and reset
                                brcm,function = <0 0>; // in
                                brcm,pull = <2 2>; // pull-up
                        };
                };
        };

        fragment@1 {
                target = <&i2c_gpio>;
                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "okay";

                        gt911: gt911@5d {
                                compatible = "goodix,gt911";
                                reg = <0x5d>;
                                pinctrl-names = "default";
                                pinctrl-0 = <&goodix_pins>;
                                interrupt-parent = <&gpio>;
                                interrupts = <26 2>; // high-to-low edge triggered
                                irq-gpios = <&gpio 26 0>; 
                                reset-gpios = <&gpio 19 0>;
                        };
                };
        };
};

You can see that it is looking for 0x5d. If you have a raspbian image around, load that to the sd card, create a file called goodix-fix.dts:

// Device tree overlay for I2C connected Goodix gt911 touch controller
/dts-v1/;
/plugin/;

/ {
        compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709";

        fragment@0 {
                target = <&gpio>;
                __overlay__ {
                        goodix_pins: goodix_pins {
                                brcm,pins = <26 19>; // interrupt and reset
                                brcm,function = <0 0>; // in
                                brcm,pull = <2 2>; // pull-up
                        };
                };
        };

        fragment@1 {
                target = <&i2c_gpio>;
                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "okay";

                        gt911: gt911@5d {
                                compatible = "goodix,gt911";
                                reg = <0x14>;
                                pinctrl-names = "default";
                                pinctrl-0 = <&goodix_pins>;
                                interrupt-parent = <&gpio>;
                                interrupts = <26 2>; // high-to-low edge triggered
                                irq-gpios = <&gpio 26 0>; 
                                reset-gpios = <&gpio 19 0>;
                        };
                };
        };
};

Then run the command:
* dtc -@ -I dts -O dtb -o goodix-fix.dtbo goodix-fix.dts

Copy the dtbo file to the YIO sd card into /boot/overlays/, edit the config.txt to load goodix-fix instead of goodix.

Looks like the YIO display is quite similar to the hyperpixel, so I hope this will fix the issue :slight_smile:

I did as you state above. Not sure if this is progress or not.

001670.720: brfs: File read: 1638 bytes
001672.451: brfs: File read: /mfs/sd/overlays/goodix-fix.dtbo
001679.420: Loaded overlay 'goodix-fix'

i2cdetect now reads:

 0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- UU -- -- -- -- -- -- -- -- -- -- --
20: 20 21 -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- 39 -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- 55 -- -- -- -- 5a -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

and dmesg now reads:

[    7.174245] Goodix-TS 3-0014: ID 911, version: 1060
[    7.174527] Goodix-TS 3-0014: Direct firmware load for goodix_911_cfg.bin failed with error -2
[    7.188167] i2c-gpio i2c@0: using pins 10 (SDA) and 11 (SCL)
[    7.223656] input: Goodix Capacitive TouchScreen as /devices/platform/i2c@0/i2c-3/3-0014/input/input0

but touchscreen is still not responding. Is the issue with the firmware not loading?

I did see a missing part of the pi:
Right beside the hdmi port and the big capacitor is an empty space where normaly another part sits. Dunno what this is for:

I’m currently only on my mobile phone so can’t check better.

I think it is progress. Could you check if you ssh into the pi and do this: cat /dev/input/event0 then touch on the screen. Do you see something appearing?

dmesg gives me the same about the driver actually, except for the address:

[    6.544346] Goodix-TS 3-005d: ID 911, version: 1060
[    6.544629] Goodix-TS 3-005d: Direct firmware load for goodix_911_cfg.bin failed with error -2
[    6.558643] i2c-gpio i2c@0: using pins 10 (SDA) and 11 (SCL)
[    6.592914] input: Goodix Capacitive TouchScreen as /devices/platform/i2c@0/i2c-3/3-005d/input/input0```

I tried cat /dev/input/event0 and nothing.

Good spot in the picture above!! It looks like I did f it up!! So I guess the next step is to swap out the Pi. I have another Pi Zero W and a desoldering gun in the post so I can try swapping the Pi out later in the week…although that be could the source of the HDMI errors?

I have no idea why it was all working perfectly and then just stopped though.

I don’t know for what the piece is, but it may be a current limiter or such a thing. And therefor it may be an issue. I can try to find more I fo about it, but this will take me a moment.

Looks like something is mixing up the interrupt pin. You can also try the suggested hardware mod in the hyperpixel issue thread: solder a 1Mohm/330k/150k resistor between the touch interrupt pin (PIN37) and 3.3V.

In this case, use the original goodix.dtbo file

Also check for shorts with the neighbouring pins around the interrupt pin(37).