From nobody Sun Feb 8 07:21:39 2026 Received: from bali.collaboradmins.com (bali.collaboradmins.com [148.251.105.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9FCCB29405; Thu, 9 Oct 2025 13:41:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=148.251.105.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760017314; cv=none; b=WGyas4E5g+X2WLyvK2XLo+m8Fx8FcsI6X3rDsjn77CXU05hD1fj2BoaENRSm4vflks3TTxt5HpfZLsMUMuKZoyWko0EK86QybUEuDFnXCfLNW+k/WVTUMaTgpj6KprelNWcisidzl3fJpuB0W6zXmQpJAnV7FI7zf/eW1qfFy3w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1760017314; c=relaxed/simple; bh=LRYISGwz2vUgw6k8AJXgIt6PtG7IrGhrW6OoAOHaZOY=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=sF3Lq7mb6Dodu8c+JqR3MMxGWvt9cPNEnxR+og/9gB0hj35pqRT/Xug4QTCNAj62pAcKtNbDJN2k8aXVfMYLU1y191w+a0FYY7oc0URULovp+SlUfYopHvfExlA1tcPJOh4URmJGit3t3RBoQiykh11rvAFUAFrxyWG5eLFPGdM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com; spf=pass smtp.mailfrom=collabora.com; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b=h/FKHxxY; arc=none smtp.client-ip=148.251.105.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=collabora.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=collabora.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=collabora.com header.i=@collabora.com header.b="h/FKHxxY" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1760017310; bh=LRYISGwz2vUgw6k8AJXgIt6PtG7IrGhrW6OoAOHaZOY=; h=From:To:Cc:Subject:Date:From; b=h/FKHxxYYapkgJ2usEyWgF3lVSecgUtFYljZkL4+ySoS4mSlLdxdnR5HEbyHvfGyc Epo7I1jKxL3sJNgeuwCsNHJY8lLWmtBT+/xWIXDHDox+HajCHcoVR4VVBuNawMXkii Osf0/9deR71s1k2pLP00k+cpjaMFz8joNHcXfO2bO9Ot95A6XtHgimS+X/SXLljF+Y duZuzq1VqXk7xbe131Ev9dk0GV0IyLqDcm0Wk889SdseUURdke3vtSI99oeA/qpoeA Pa7S0C7MgJzG98WRIPZLeHk0cFc00CVYKe53LyU7FTVqrZHtjoii9jK0GUfizVfMj1 t3ppwqE2VjN3w== Received: from pan.localdomain (unknown [IPv6:2a00:23c6:c338:be00:61ad:9488:9583:2010]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: martyn) by bali.collaboradmins.com (Postfix) with ESMTPSA id 8004B17E0CF8; Thu, 9 Oct 2025 15:41:50 +0200 (CEST) From: Martyn Welch To: Hans de Goede , Dmitry Torokhov Cc: kernel@collabora.com, Martyn Welch , linux-input@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] input: goodix: Remove setting of RST pin to input Date: Thu, 9 Oct 2025 14:41:32 +0100 Message-ID: <20251009134138.686215-1-martyn.welch@collabora.com> X-Mailer: git-send-email 2.51.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The reset line is being set to input on non-ACPI devices apparently to save power. This isn't being done on ACPI devices as it's been found that some ACPI devices don't have a pull-up resistor fitted. This can also be the case for non-ACPI devices, resulting in: [ 941.672207] Goodix-TS 1-0014: Error reading 10 bytes from 0x814e: -110 [ 942.696168] Goodix-TS 1-0014: Error reading 10 bytes from 0x814e: -110 [ 945.832208] Goodix-TS 1-0014: Error reading 10 bytes from 0x814e: -110 This behaviour appears to have been initialing introduced in ec6e1b4082d9. This doesn't seem to be based on information in either the GT911 or GT9271 datasheets cited as sources of information for this change. Thus it seems likely that it is based on functionality in the Android driver which it also lists. This behaviour may be viable in very specific instances where the hardware is well known, but seems unwise in the upstream kernel where such hardware requirements can't be guaranteed. Remove this over optimisation to improve reliability on non-ACPI devices. Signed-off-by: Martyn Welch Reviewed-by: Hans de Goede --- Changes since v1: - Dropping gpiod_rst_flags and directly passing GPIOD_ASIS when requesting the reset pin. drivers/input/touchscreen/goodix.c | 27 +-------------------------- drivers/input/touchscreen/goodix.h | 1 - 2 files changed, 1 insertion(+), 27 deletions(-) diff --git a/drivers/input/touchscreen/goodix.c b/drivers/input/touchscreen= /goodix.c index 252dcae039f8..f838f92100c2 100644 --- a/drivers/input/touchscreen/goodix.c +++ b/drivers/input/touchscreen/goodix.c @@ -796,17 +796,6 @@ int goodix_reset_no_int_sync(struct goodix_ts_data *ts) =20 usleep_range(6000, 10000); /* T4: > 5ms */ =20 - /* - * Put the reset pin back in to input / high-impedance mode to save - * power. Only do this in the non ACPI case since some ACPI boards - * don't have a pull-up, so there the reset pin must stay active-high. - */ - if (ts->irq_pin_access_method =3D=3D IRQ_PIN_ACCESS_GPIO) { - error =3D gpiod_direction_input(ts->gpiod_rst); - if (error) - goto error; - } - return 0; =20 error: @@ -957,14 +946,6 @@ static int goodix_add_acpi_gpio_mappings(struct goodix= _ts_data *ts) return -EINVAL; } =20 - /* - * Normally we put the reset pin in input / high-impedance mode to save - * power. But some x86/ACPI boards don't have a pull-up, so for the ACPI - * case, leave the pin as is. This results in the pin not being touched - * at all on x86/ACPI boards, except when needed for error-recover. - */ - ts->gpiod_rst_flags =3D GPIOD_ASIS; - return devm_acpi_dev_add_driver_gpios(dev, gpio_mapping); } #else @@ -989,12 +970,6 @@ static int goodix_get_gpio_config(struct goodix_ts_dat= a *ts) return -EINVAL; dev =3D &ts->client->dev; =20 - /* - * By default we request the reset pin as input, leaving it in - * high-impedance when not resetting the controller to save power. - */ - ts->gpiod_rst_flags =3D GPIOD_IN; - ts->avdd28 =3D devm_regulator_get(dev, "AVDD28"); if (IS_ERR(ts->avdd28)) return dev_err_probe(dev, PTR_ERR(ts->avdd28), "Failed to get AVDD28 reg= ulator\n"); @@ -1019,7 +994,7 @@ static int goodix_get_gpio_config(struct goodix_ts_dat= a *ts) ts->gpiod_int =3D gpiod; =20 /* Get the reset line GPIO pin number */ - gpiod =3D devm_gpiod_get_optional(dev, GOODIX_GPIO_RST_NAME, ts->gpiod_rs= t_flags); + gpiod =3D devm_gpiod_get_optional(dev, GOODIX_GPIO_RST_NAME, GPIOD_ASIS); if (IS_ERR(gpiod)) return dev_err_probe(dev, PTR_ERR(gpiod), "Failed to get %s GPIO\n", GOODIX_GPIO_RST_NAME); diff --git a/drivers/input/touchscreen/goodix.h b/drivers/input/touchscreen= /goodix.h index 87797cc88b32..0d1e8a8d2cba 100644 --- a/drivers/input/touchscreen/goodix.h +++ b/drivers/input/touchscreen/goodix.h @@ -88,7 +88,6 @@ struct goodix_ts_data { struct gpio_desc *gpiod_rst; int gpio_count; int gpio_int_idx; - enum gpiod_flags gpiod_rst_flags; char id[GOODIX_ID_MAX_LEN + 1]; char cfg_name[64]; u16 version; --=20 2.39.5