Hi Haibo, On Tue, Feb 11, 2020 at 04:41:11PM +0800, haibo.chen@xxxxxxx wrote: > From: Haibo Chen <haibo.chen@xxxxxxx> > > For HannStar (HSD100PXN1 Rev: 1-A00C11 F/W:0634) LVDS touch screen, > it has a special request for the EETI touch controller. The host > needs to trigger I2C event to device FW at booting first, and then > the FW can switch to I2C interface. Otherwise, the FW can’t work > with I2C interface, and can't generate any interrupt when touch > the screen. > > This patch send an I2C command before the device wake up, make sure > the device switch to I2C interface first. > > Signed-off-by: Haibo Chen <haibo.chen@xxxxxxx> > --- > drivers/input/touchscreen/egalax_ts.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/input/touchscreen/egalax_ts.c b/drivers/input/touchscreen/egalax_ts.c > index 83ac8c128192..5e35ca5edc7b 100644 > --- a/drivers/input/touchscreen/egalax_ts.c > +++ b/drivers/input/touchscreen/egalax_ts.c > @@ -183,6 +183,20 @@ static int egalax_ts_probe(struct i2c_client *client, > ts->client = client; > ts->input_dev = input_dev; > > + /* HannStar (HSD100PXN1 Rev: 1-A00C11 F/W:0634) LVDS touch > + * screen needs to trigger I2C event to device FW at booting > + * first, and then the FW can switch to I2C interface. > + * Otherwise, the FW can’t work with I2C interface. So here > + * just use the exist function egalax_firmware_version() to > + * send a I2C command to the device, make sure the device FW > + * switch to I2C interface. > + */ > + error = egalax_firmware_version(client); > + if (error) { > + dev_err(&client->dev, "Failed to switch to I2C interface\n"); > + return error; > + } > + > /* controller may be in sleep, wake it up. */ > error = egalax_wake_up_device(client); > if (error) { I think this should be part of egalax_wake_up_device(), in case where we do not have dedicated reset gpio. Also, instead of abusing firmware read, would a dummy byte read be enough (i2c_probe_func_quick_read)? Thanks. -- Dmitry