Message ID | 20221025122930.421377-2-hdegoede@redhat.com |
---|---|
State | Accepted |
Commit | c7e37cc6240767f794678d11704935d49cc81d59 |
Headers | show |
Series | Input: touchscreen - Goodix bugfix + settings mod-param support | expand |
Hi, On 10/31/22 15:42, Bastien Nocera wrote: > On Tue, 2022-10-25 at 14:29 +0200, Hans de Goede wrote: >> On ACPI systems (irq_pin_access_method == IRQ_PIN_ACCESS_ACPI_*) the >> driver >> does not reset the controller at probe time, because sometimes the >> system >> firmware loads a config and resetting might loose this config. > > "lose". > > You can add > Reviewed-by: Bastien Nocera <hadess@hadess.net> > to all 4 patches in this patchset that don't already have it. Thank you. Dmitry, I assume you can fix the small spelling error in the commit msg while applying this? Regards, Hans
On Tue, Oct 25, 2022 at 02:29:27PM +0200, Hans de Goede wrote: > On ACPI systems (irq_pin_access_method == IRQ_PIN_ACCESS_ACPI_*) the driver > does not reset the controller at probe time, because sometimes the system > firmware loads a config and resetting might loose this config. > > On the Nanote UMPC-01 device OTOH the config is in flash of the controller, > the controller needs a reset to load this; and the system firmware does not > reset the controller on a cold boot. > > To fix the Nanote UMPC-01 touchscreen not working on a cold boot, try > resetting the controller and then re-reading the config when encountering > a config with 0 width/height/max_touch_num value and the controller has > not already been reset by goodix_ts_probe(). > > This should be safe to do in general because normally we should never > encounter a config with 0 width/height/max_touch_num. Doing this in > general not only avoids the need for a DMI quirk, but also might help > other systems. > > Signed-off-by: Hans de Goede <hdegoede@redhat.com> Applied, thank you.
diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c index a33cc7950cf5..c281e49826c2 100644 --- a/drivers/input/touchscreen/goodix.c +++ b/drivers/input/touchscreen/goodix.c @@ -1158,6 +1158,7 @@ static int goodix_configure_dev(struct goodix_ts_data *ts) input_set_abs_params(ts->input_dev, ABS_MT_WIDTH_MAJOR, 0, 255, 0, 0); input_set_abs_params(ts->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); +retry_read_config: /* Read configuration and apply touchscreen parameters */ goodix_read_config(ts); @@ -1165,6 +1166,16 @@ static int goodix_configure_dev(struct goodix_ts_data *ts) touchscreen_parse_properties(ts->input_dev, true, &ts->prop); if (!ts->prop.max_x || !ts->prop.max_y || !ts->max_touch_num) { + if (!ts->reset_controller_at_probe && + ts->irq_pin_access_method != IRQ_PIN_ACCESS_NONE) { + dev_info(&ts->client->dev, "Config not set, resetting controller\n"); + /* Retry after a controller reset */ + ts->reset_controller_at_probe = true; + error = goodix_reset(ts); + if (error) + return error; + goto retry_read_config; + } dev_err(&ts->client->dev, "Invalid config (%d, %d, %d), using defaults\n", ts->prop.max_x, ts->prop.max_y, ts->max_touch_num);
On ACPI systems (irq_pin_access_method == IRQ_PIN_ACCESS_ACPI_*) the driver does not reset the controller at probe time, because sometimes the system firmware loads a config and resetting might loose this config. On the Nanote UMPC-01 device OTOH the config is in flash of the controller, the controller needs a reset to load this; and the system firmware does not reset the controller on a cold boot. To fix the Nanote UMPC-01 touchscreen not working on a cold boot, try resetting the controller and then re-reading the config when encountering a config with 0 width/height/max_touch_num value and the controller has not already been reset by goodix_ts_probe(). This should be safe to do in general because normally we should never encounter a config with 0 width/height/max_touch_num. Doing this in general not only avoids the need for a DMI quirk, but also might help other systems. Signed-off-by: Hans de Goede <hdegoede@redhat.com> --- drivers/input/touchscreen/goodix.c | 11 +++++++++++ 1 file changed, 11 insertions(+)