Patch "Input: goodix - try resetting the controller when no config is set" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    Input: goodix - try resetting the controller when no config is set

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     input-goodix-try-resetting-the-controller-when-no-co.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit f6946f084a0879e6a5efb748c707aa7908e125ce
Author: Hans de Goede <hdegoede@xxxxxxxxxx>
Date:   Thu Nov 3 11:31:43 2022 -0700

    Input: goodix - try resetting the controller when no config is set
    
    [ Upstream commit c7e37cc6240767f794678d11704935d49cc81d59 ]
    
    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@xxxxxxxxxx>
    Reviewed-by: Bastien Nocera <hadess@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221025122930.421377-2-hdegoede@xxxxxxxxxx
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen/goodix.c
index b23abde5d7db..b7f87ad4b9a9 100644
--- a/drivers/input/touchscreen/goodix.c
+++ b/drivers/input/touchscreen/goodix.c
@@ -1059,6 +1059,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);
 
@@ -1066,6 +1067,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);



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux