> -----Original Message----- > From: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> > Sent: 2020年3月10日 12:22 > To: BOUGH CHEN <haibo.chen@xxxxxxx> > Cc: linux-input@xxxxxxxxxxxxxxx; dl-linux-imx <linux-imx@xxxxxxx> > Subject: Re: [PATCH 1/2] input: egalax_ts: switch to i2c interface before > wake up > > 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)? That's reasonable, I will move the change to egalax_wake_up_device(). I will have a try whether a dummy byte read can work. Really thanks for your suggestion! Regards, Haibo Chen > Thanks. > > -- > Dmitry