Re: [PATCH resend 03/10] Input: goodix - Make resetting the controller at probe independent from the GPIO setup

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

 



On Fri, 2020-02-21 at 17:47 +0100, Hans de Goede wrote:
> Before this commit we would always reset the controller at probe when
> we
> have access to the GPIOs which are necessary to do a reset.
> 
> Doing the reset requires access to the GPIOs, but just because we
> have
> access to the GPIOs does not mean that we should always reset the
> controller at probe. On X86 ACPI platforms the BIOS / UEFI firmware
> will
> already have reset the controller and it will have loaded the device
> specific config into the controller. Doing the reset sometimes causes
> the
> controller to loose its configuration, so on X86 ACPI platforms this 

lose.

> is not
> a good idea.
> 
> This commit adds a new reset_controller_at_probe boolean to control
> the
> reset at probe behavior.
> 
> This commits sets the new bool to true when we set
> irq_pin_access_method
> to irq_pin_access_gpio, so there are no functional changes.
> 
> BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1786317
> BugLink: https://github.com/nexus511/gpd-ubuntu-packages/issues/10
> BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=199207
> Cc: Dmitry Mastykin <mastichi@xxxxxxxxx>
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>

Looks good apart from the typo in the commit message

Reviewed-by: Bastien Nocera <hadess@xxxxxxxxxx>

> ---
>  drivers/input/touchscreen/goodix.c | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/input/touchscreen/goodix.c
> b/drivers/input/touchscreen/goodix.c
> index eccf07adfae1..dd5a8f9e8ada 100644
> --- a/drivers/input/touchscreen/goodix.c
> +++ b/drivers/input/touchscreen/goodix.c
> @@ -56,6 +56,7 @@ struct goodix_ts_data {
>  	u16 id;
>  	u16 version;
>  	const char *cfg_name;
> +	bool reset_controller_at_probe;
>  	bool load_cfg_from_disk;
>  	struct completion firmware_loading_complete;
>  	unsigned long irq_flags;
> @@ -656,6 +657,7 @@ static int goodix_get_gpio_config(struct
> goodix_ts_data *ts)
>  	ts->gpiod_rst = gpiod;
>  
>  	if (ts->gpiod_int && ts->gpiod_rst) {
> +		ts->reset_controller_at_probe = true;
>  		ts->load_cfg_from_disk = true;
>  		ts->irq_pin_access_method = irq_pin_access_gpio;
>  	}
> @@ -932,7 +934,7 @@ static int goodix_ts_probe(struct i2c_client
> *client,
>  	if (error)
>  		return error;
>  
> -	if (ts->irq_pin_access_method == irq_pin_access_gpio) {
> +	if (ts->reset_controller_at_probe) {
>  		/* reset the controller */
>  		error = goodix_reset(ts);
>  		if (error) {




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux