On Fri, Sep 04, 2020 at 07:21:41PM +0200, Hans de Goede wrote: > One some devices the GPIO should output the inverted value from what > device-drivers / ACPI code expects. The reason for this is unknown, > perhaps these systems use an external buffer chip on the GPIO which > inverts the signal. The BIOS makes this work by setting the > CHV_PADCTRL1_INVRXTX_TXDATA flag. > > Before this commit we would unconditionally clear all INVRXTX flags, > including the CHV_PADCTRL1_INVRXTX_TXDATA flag when a GPIO is requested > by a driver (from chv_gpio_request_enable()). > > This breaks systems using this setup. Specifically it is causing > problems for systems with a goodix touchscreen, where the BIOS sets the > INVRXTX_TXDATA flag on the GPIO used for the touchscreen's reset pin. > > The goodix touchscreen driver by defaults configures this pin as input > (relying on the pull-up to keep it high), but the clearing of the > INVRXTX_TXDATA flag done by chv_gpio_request_enable() causes it to be > driven low for a brief time before the GPIO gets set to input mode. > > This causes the touchscreen controller to get reset. On most CHT devs > with this touchscreen this leads to: > > [ 31.596534] Goodix-TS i2c-GDIX1001:00: i2c test failed attempt 1: -121 > > The driver retries this though and then everything is fine. But during > reset the touchscreen uses its interrupt pin as bootstrap to determine > which i2c address to use and on the Acer One S1003 the spurious reset > caused by the clearing of the INVRXTX_TXDATA flag causes the controller > to come back up again on the wrong i2c address, breaking things. > > This commit fixes both the -121 errors, as well as the total breakage > on the Acer One S1003, by making chv_gpio_clear_triggering() not clear > the INVRXTX_TXDATA flag if the pin is already configured as a GPIO. > > Note that chv_pinmux_set_mux() does still unconditionally clear the > flag, so this only affects GPIO usage. > > Fixes: a7d4b171660c ("Input: goodix - add support for getting IRQ + reset GPIOs on Cherry Trail devices") > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx> Acked-by: Mika Westerberg <mika.westerberg@xxxxxxxxxxxxxxx>