From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 78314A59; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; cv=none; b=ZyOYAhLocQ3WISXqOcLajGUP2viwY5jyBgpACH9Z5Noz/Pglze+EFlGvmjE/Ouz/7AfYKRUnK4SLmoY9waTMKHIFMUyb+sNtjFZE1uNynuRWD5bxvSQABFTx1T2lhhduFW3/WwChprcaiTkbbnvby39C/9Pdbacl1zNmf0b3Xt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; c=relaxed/simple; bh=mc55QfSw9Ry9mLwkhN9n5gi0ZpQTsuXJJMLqwg3DcLs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eoPV/nBjtOd8FAhiWQErqdiAu7UGI5Csnq6Jjp5EGQka1cD0uVtlhyb8tVkbD2qjyBOkB43xzHk+wEeYPUJvEdRsgv6tYbgRnvvq2DvKDF0aapxpl+pL9ruYwpDvBdgzZE/eXH7QI15Ot2wo4HlnjQjSkVKAZpnC5qpRZ0MjeDM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TDu5s9GZ; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="TDu5s9GZ" Received: by smtp.kernel.org (Postfix) with ESMTPS id 48F55C2BCB0; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=mc55QfSw9Ry9mLwkhN9n5gi0ZpQTsuXJJMLqwg3DcLs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=TDu5s9GZfGaxhyNdejKKZx0l8mZ3i4RtQHx5CokNdgUPMpX1KxZoFKkL0J4mtHxrY fwcxE3kXhRCbvb/8xbSfrSjr/Mfy1OocEHfGmN2jJja3EcrKHDAUxk811ndsuFhFwa bafrvUL+6w4yKnAZKwMIwEPgucPfgY0n+PS75KychtScKm9jUzuEIJ2fiZ9mefZROM 0YvSNzLfftxdAdgBDlWDiXUh6KJkKxpzO8rFXkcixc0WT1J2ZPG25gtw2g7+sAA/6O As5LQeUAsbcQrBSqNeGX6qv909WdggPvedK4vYpYURxrU1MMTlsR11y5kAlw4pufmi r472tId6NSchg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3EDCAFD006E; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:15 +0100 Subject: [PATCH 01/10] Input: stmfts - Use dev struct directly Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-1-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=3250; i=david@ixit.cz; h=from:subject:message-id; bh=rLvXwYr8pRgjc4tXLmz60BmHo2WrnBAMJ136Em/i4E4=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyUJhChuWhA7f0ZMnBICB62mYuFxWMpN6WEt yQcwnmupwyJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lAAKCRBgAj/E00kg cr38D/4sZ8a33ur+ea+HzTQrrZBNLoWzQNadsTB8b7dDzsr33qGisK7QYEM4SfIZYqd7iuwilzp qF1wQvaaHDUkO8m/JRIVMc65fNXg0RYYpdM1m8F1o2wsswVmIfVn9nuq3aTf/M3y4RfxeuZTil1 UjXMrmeN47VLuL+S9vEh9dxi7dPfBWRFu9XM7lrYLPphnrcQzegHiYhMfZia+WaQbXz3xU5Z1vr Of07bWLTYnj8paN8Ol4aIXQ1I/Kj4GT+XLbV3JZr+TMYzVgZwrDTCyfI/AMVsgnojmHG8GZkaUl jDLdieILWVF+fDuWuolw6umCQRwKIT93gzPgIuCSwsxdoTo2Rcz7/8L8DAzKv6TvSl/zqz6DeXQ gFLgJiMBpaQKd0dm4gXRyw/0LGsD7NCm67yld0Gx+4IQJ9c+0xAEzLTQLkw/stZq+zekQ8SfrdJ Z69ICjrtDGUdUUMvrCNhgz9qEmtaHlqL24B/72+JCJOKWLEisoxT7uFZNhIZLylSE8Vo9Xh/8gn 7n6Y6Whfvx5HT9O75TDOjMgqMxxfsqWuTMXkpLdZBEoCV5Ao9lH3q9EY46oOP2BviS+YORXrKih o29qKxxckWBgcRmGr/ESt2mLG3dNIcF121uLCCqRg6MtDCWQw5koZkWt4KM9baVobsjEtZ7bRRX ibvsWlvPnmTqRdA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Makes the code better readable and noticably shorter. Signed-off-by: David Heidelberg --- drivers/input/touchscreen/stmfts.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index 4b166b0a9a5a6..27adb139fa0ce 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -620,6 +620,7 @@ static int stmfts_enable_led(struct stmfts_data *sdata) =20 static int stmfts_probe(struct i2c_client *client) { + struct device *dev =3D &client->dev; int err; struct stmfts_data *sdata; =20 @@ -628,7 +629,7 @@ static int stmfts_probe(struct i2c_client *client) I2C_FUNC_SMBUS_I2C_BLOCK)) return -ENODEV; =20 - sdata =3D devm_kzalloc(&client->dev, sizeof(*sdata), GFP_KERNEL); + sdata =3D devm_kzalloc(dev, sizeof(*sdata), GFP_KERNEL); if (!sdata) return -ENOMEM; =20 @@ -640,13 +641,13 @@ static int stmfts_probe(struct i2c_client *client) =20 sdata->regulators[STMFTS_REGULATOR_VDD].supply =3D "vdd"; sdata->regulators[STMFTS_REGULATOR_AVDD].supply =3D "avdd"; - err =3D devm_regulator_bulk_get(&client->dev, + err =3D devm_regulator_bulk_get(dev, ARRAY_SIZE(sdata->regulators), sdata->regulators); if (err) return err; =20 - sdata->input =3D devm_input_allocate_device(&client->dev); + sdata->input =3D devm_input_allocate_device(dev); if (!sdata->input) return -ENOMEM; =20 @@ -665,7 +666,7 @@ static int stmfts_probe(struct i2c_client *client) input_set_abs_params(sdata->input, ABS_MT_PRESSURE, 0, 255, 0, 0); input_set_abs_params(sdata->input, ABS_DISTANCE, 0, 255, 0, 0); =20 - sdata->use_key =3D device_property_read_bool(&client->dev, + sdata->use_key =3D device_property_read_bool(dev, "touch-key-connected"); if (sdata->use_key) { input_set_capability(sdata->input, EV_KEY, KEY_MENU); @@ -686,20 +687,20 @@ static int stmfts_probe(struct i2c_client *client) * interrupts. To be on the safe side it's better to not enable * the interrupts during their request. */ - err =3D devm_request_threaded_irq(&client->dev, client->irq, + err =3D devm_request_threaded_irq(dev, client->irq, NULL, stmfts_irq_handler, IRQF_ONESHOT | IRQF_NO_AUTOEN, "stmfts_irq", sdata); if (err) return err; =20 - dev_dbg(&client->dev, "initializing ST-Microelectronics FTS...\n"); + dev_dbg(dev, "initializing ST-Microelectronics FTS...\n"); =20 err =3D stmfts_power_on(sdata); if (err) return err; =20 - err =3D devm_add_action_or_reset(&client->dev, stmfts_power_off, sdata); + err =3D devm_add_action_or_reset(dev, stmfts_power_off, sdata); if (err) return err; =20 @@ -716,13 +717,13 @@ static int stmfts_probe(struct i2c_client *client) * without LEDs. The ledvdd regulator pointer will be * used as a flag. */ - dev_warn(&client->dev, "unable to use touchkey leds\n"); + dev_warn(dev, "unable to use touchkey leds\n"); sdata->ledvdd =3D NULL; } } =20 - pm_runtime_enable(&client->dev); - device_enable_async_suspend(&client->dev); + pm_runtime_enable(dev); + device_enable_async_suspend(dev); =20 return 0; } --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 8BA4E1C7012; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; cv=none; b=PewTD44FOqK/6sxOqw4vsg8xvAjgL0EQIfP8kl6wEhQ8QVhJ91KaFPNJoYaN7blcJstaq1aYoTuacGYavzpF0eL56uj9Tnt7MCDSueS5CnE/ERBOlvNnGHU0sBGYTFIism8C8YYquk3r9NlzGxB9zs7fvcAamEJcX5lFkpw3uuM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; c=relaxed/simple; bh=n23ZcFkmyPNEvO2IkqQ957PDqVWeO4dI1IFebDR/vt0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=p8ey2xFUB0MOPmMaDM9TWN8BSsW7UXhCxaSq0sJm+qr4ieceHkXpXBxfRaelX1lMP+RR8/JLTUeiKbuEgKc3ONk8UdUtw6AczopM8F5ElA4oEWqbFUOaIjShWVvPHtp4nWN/iMLBnxVZbkJJtd1wyKuri/zmxOLP6Jrv8shGQLg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=sp4Mjfgg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="sp4Mjfgg" Received: by smtp.kernel.org (Postfix) with ESMTPS id 5B6F9C2BC87; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=n23ZcFkmyPNEvO2IkqQ957PDqVWeO4dI1IFebDR/vt0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=sp4MjfggG+nw8htHlPxq+Xi5qN3fZ+0/9AGUstqO/BykF9za20Ok3VwQU+80HvGyr tn+HJQ02bAuQrO3m1A8B9n8MC4WvQUdf/LuWuj765/Vwwf63q5hmXii6hnSP/Lb1TB xmqQOGpj2lKXLPrzysiPpidJN26qP46I7KNuLzpOZN+gLDZ/3s6Cu+qyq4ngMlEmGT vsNUYKaoptZWZ/V6v6QmazpXf/32okUsDnLd6jWAbKNRJ+uvRh42fMDKPvB1L6NVlo 5G9F1GvXnpeYjBFKXe0VXuLOru6ZmCVG2yX9CNX3GcoEcjC8Ow+T3eQDB73da7pgeJ aDatin4/FK4MA== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 516DEFD0071; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:16 +0100 Subject: [PATCH 02/10] Input: stmfts - Switch to devm_regulator_bulk_get_const Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-2-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2336; i=david@ixit.cz; h=from:subject:message-id; bh=gp0Adpeb0dgRnIzbTX0yz5VA3gvM4FK6mupYKoiFMj0=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyURAP+6GmRBdj1YMjGOxEXecCpiSaiwdK38 nv4OmVUw1SJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lAAKCRBgAj/E00kg cuMlD/96F1ggG3DCx9p28DKIQjERz38LjXqEcedMM/S+1ZJUHTM4uyM9XUaHyO6V9e1/UUxuD1A YeTodQ7ny4ouLM14vM3Vo24MD6EaOJxpVWPLm4IxLESagvS4gNalrkbrf/Y4v14mXDw1kXWpQmw M08g7WifVWBuHyOLnZ5EHQ4ueDqhDnGzoXvR1AxUCxZoUa7dZ8Pr49Uy6M7ZQKPY1SHVspziZ0p A01pQkrJoCZbXvvOY6oDBV99mnx94lydjM3NBbyQAi0fzooZEbUtvjYEEgRtdNlqZIMqhO6QnlH oEciiUverffQU3Nfx09m4BuyZNjFpkWFunIGuj7C4Q2bJufTQTtYv72FkIIGzvLju8yodpEqpBG GRkkLCRg9NQh1uRL3DxNkIrFFfqohEgb+BGzaR6OwXYeRhu8+AN8uiPoVevSlW+rvz6XRUBFlWV fGbsCL4Q0YpRe9BcnRw++lj5nB3Y0+Kdp3pNlh0VRYCFWexu9P8CtrQ1u1QHNPdLbULVDqANTaC M6yxpV0co47vYcmJroF9Pe5A9H49Ybv5B3Ne1zIGtyNGYc9d8yFX97MlY1y2x7SVaW4y3Ceu/Iz YMENmGjWFOVfy6PHDlXcknxLtc3HYQOqt4TiDXL3dSPdqM+faTPtxiJbGye7WEmtgSxz+zEFVi0 xga+b9htJMYCDaw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Switch to devm_regulator_bulk_get_const() to stop setting the supplies list in probe(), and move the regulator_bulk_data struct in static const. Signed-off-by: David Heidelberg --- drivers/input/touchscreen/stmfts.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index 27adb139fa0ce..7c0f94ba49464 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -69,9 +69,9 @@ #define STMFTS_MAX_FINGERS 10 #define STMFTS_DEV_NAME "stmfts" =20 -enum stmfts_regulators { - STMFTS_REGULATOR_VDD, - STMFTS_REGULATOR_AVDD, +static const struct regulator_bulk_data stmfts_supplies[] =3D { + { .supply =3D "vdd" }, + { .supply =3D "avdd" }, }; =20 struct stmfts_data { @@ -82,7 +82,7 @@ struct stmfts_data { =20 struct touchscreen_properties prop; =20 - struct regulator_bulk_data regulators[2]; + struct regulator_bulk_data *supplies; =20 /* * Presence of ledvdd will be used also to check @@ -524,8 +524,8 @@ static int stmfts_power_on(struct stmfts_data *sdata) int err; u8 reg[8]; =20 - err =3D regulator_bulk_enable(ARRAY_SIZE(sdata->regulators), - sdata->regulators); + err =3D regulator_bulk_enable(ARRAY_SIZE(stmfts_supplies), + sdata->supplies); if (err) return err; =20 @@ -590,8 +590,8 @@ static void stmfts_power_off(void *data) struct stmfts_data *sdata =3D data; =20 disable_irq(sdata->client->irq); - regulator_bulk_disable(ARRAY_SIZE(sdata->regulators), - sdata->regulators); + regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies), + sdata->supplies); } =20 static int stmfts_enable_led(struct stmfts_data *sdata) @@ -639,11 +639,10 @@ static int stmfts_probe(struct i2c_client *client) mutex_init(&sdata->mutex); init_completion(&sdata->cmd_done); =20 - sdata->regulators[STMFTS_REGULATOR_VDD].supply =3D "vdd"; - sdata->regulators[STMFTS_REGULATOR_AVDD].supply =3D "avdd"; - err =3D devm_regulator_bulk_get(dev, - ARRAY_SIZE(sdata->regulators), - sdata->regulators); + err =3D devm_regulator_bulk_get_const(dev, + ARRAY_SIZE(stmfts_supplies), + stmfts_supplies, + &sdata->supplies); if (err) return err; =20 --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 A0C5C337B87; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; cv=none; b=e12hNSB3P8I230vIxtYMIw4qLCjCJrbFuDpPaY4zlPDx1jy7QPRcjUQKXrbZ9OCnfz9CfnPLd2p+CQuOkqDvCr1+TQ74rd5KoEQG4P6FnCWe0pj6udcW6BbuaCCDY+rZHvI4X/8EBJ16d+3lvNNvpdjSsBTzFD4ZI1QHjqenxE4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; c=relaxed/simple; bh=nhmogOI+WjaFzj49pGOROXn2gYZ4HvN2zLn5fUjRH3g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DPqsjDHptH6TvCmLJC5mIHHPtYXIYuhcY1gWpF0G0t6kzJEDFxRcEts621MZm6qzJFupC1WNl6D9IVE9tAGjD9Jr/kpxm9RkZ0kYvjJmxM20tfFn6mS8HXpNMwAs79+awZPj7K0ocKoUs7t3TMbxuRsVmdu0jcrySiVjyHmOFkA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=p3v8e5qI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="p3v8e5qI" Received: by smtp.kernel.org (Postfix) with ESMTPS id 6EB7DC2BCB5; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=nhmogOI+WjaFzj49pGOROXn2gYZ4HvN2zLn5fUjRH3g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=p3v8e5qIM3sUce+oVO4KGoQXtVISLeKXjoFqFA6Y9jGq4C6c3VmB2OW5JWf/i0hAM bGu0fUSzHB6+kjkul0CbTuf7XQjW3ASdEfG5uwutbFAChCH1aR1KLaA06jvZpzRV+3 mdxUBA1e7bYyV+O5krX5P7/TuIxBnb1mpKb+VGm+mKehxKWmIt73loHZ0gLziTfliJ IRWmsvhyJWkI9JIyt5O6nvsI1q/A/Cb5K+FLONjsZc6BKNixlBjE23607WMAB+8Hff /aPkiDh2mOYYP3/IR2uUAHSNqU8eEAIwOwUFdynxN5q6IYu+FiNXOUVxakeFFhsulO UtkyvFlacZI/Q== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 649BEFD0073; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:17 +0100 Subject: [PATCH 03/10] Input: stmfts - abstract reading information from the firmware Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-3-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1770; i=david@ixit.cz; h=from:subject:message-id; bh=LcR268CsLFX9IfFbR3m8SNFdiJ3g92w+33Vjc2KTWvw=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyUWy/xfoO2DMWkvnS8Fo3kqaxb091fLqkJs yr4BN24YZ+JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lAAKCRBgAj/E00kg cg5jD/0b2uRo3rzxQmo5CcalkkF0xubiFdZrbRZAflq92qK4+zrRzzXq42iZ5nMk/BYbtzm100G WpYXVpvzJXkhvbkF+fm4L+ZhYeAQ7Lp/FSrDrY0kcwlCDSMMsu5ptrIUTIjE1sL/Jp6oV571J6U +Nxio3frQuqOy1QTnq0Cb56/pC8eLFw/kkfxxoCYJ7w5iXU3Azp42xT9FeryOBosVKSUuCzYFZ5 Y0r+x5SWY5t5UHPnni8piwCaJUqGZNh2kdOrhzC+7UTVp2yCuRWu1LFpr3y6n1kn/wIbnfn66d6 Fglo+sr6ah9ROWcp1taGKX6OJIyQXOfUU5+do75qwLBlVwsaCRuxwX6f3UEjSo0MhqPhL9NbrHr igvOnKr8yBkIbKIXLmJn9nlC/AVE52hWUT3OVEi4tXAOoh08vMgRQWJDTusd/rboo6xv9PmJat5 zwhTo5GTVGsANu33wnJKGIrw88FDW+/UMtvCRSA2VTbN8RWVpPECA8WkCdAmIWjGfWaf8lhB3fp rD9nKKpNJCzSbM6knCg69dXSXwVy8Am/+wNeioc3SJ9+0ZZ3I6De4GceMNKCwdqTxlurcd9DH8q enUW0gmPcWmuksR181zBO0HsFFG4vT6l5bE/U9SKeRE7QjEcyNPNRduVz6wk9OO7MIUzQtePR9b oWPsh/uRQCEpo7A== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Improves readability and makes splitting power on function in following commit easier. --- drivers/input/touchscreen/stmfts.c | 36 ++++++++++++++++++++++++----------= -- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index 7c0f94ba49464..db2dd0bb59fcc 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -519,22 +519,11 @@ static struct attribute *stmfts_sysfs_attrs[] =3D { }; ATTRIBUTE_GROUPS(stmfts_sysfs); =20 -static int stmfts_power_on(struct stmfts_data *sdata) +static int stmfts_read_system_info(struct stmfts_data *sdata) { int err; u8 reg[8]; =20 - err =3D regulator_bulk_enable(ARRAY_SIZE(stmfts_supplies), - sdata->supplies); - if (err) - return err; - - /* - * The datasheet does not specify the power on time, but considering - * that the reset time is < 10ms, I sleep 20ms to be sure - */ - msleep(20); - err =3D i2c_smbus_read_i2c_block_data(sdata->client, STMFTS_READ_INFO, sizeof(reg), reg); if (err < 0) @@ -548,6 +537,29 @@ static int stmfts_power_on(struct stmfts_data *sdata) sdata->config_id =3D reg[4]; sdata->config_ver =3D reg[5]; =20 + return 0; +} + +static int stmfts_power_on(struct stmfts_data *sdata) +{ + int err; + + err =3D regulator_bulk_enable(ARRAY_SIZE(stmfts_supplies), + sdata->supplies); + if (err) + return err; + + /* + * The datasheet does not specify the power on time, but considering + * that the reset time is < 10ms, I sleep 20ms to be sure + */ + msleep(20); + + + err =3D stmfts_read_system_info(sdata); + if (err) + return err; + enable_irq(sdata->client->irq); =20 msleep(50); --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 AB259337BAC; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; cv=none; b=PZUW0w38n2rzUurP3IOGXhZroVvMoyf0aJUTKQ4H4lJDtF/DvQGL2bsflZiSVnssSbUqM+h76pya/N61wyQUKjINO/m65f0UwkTacGasmsVajpQos9ax1QYD/6FCFHY22nI0BDb23uSjBO2O3LOdQGSTMKxD4meAG0IfySjrSnw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; c=relaxed/simple; bh=2RcZ1YrtLk3LFD+fkggSEgyijYJUi2tSNAB95o1MrT4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pno12WRhmZFEykx491cm/2f+q5ZnwR5px0ytOwmXFYRUWLgJTXYoMjf2SBw2j8DaGh85fzdU1+r5E5907yQdY01VhEzhRV5Uh7TcgIehzCNbP24jU7XGch+VmmvxKQwRhZ+nEbPDU4AzFeEdJuw7IuI0pYD9GfhOSECl0+UwL8I= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=IBja9dwv; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="IBja9dwv" Received: by smtp.kernel.org (Postfix) with ESMTPS id 83773C2BCB7; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=2RcZ1YrtLk3LFD+fkggSEgyijYJUi2tSNAB95o1MrT4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=IBja9dwv8Wb9Q+0XLAl4w+PrfuisazmmSVNGe02N03sUrDTzJAU8QYBneofUbNj+c NZN+cTeJAnfzAGDxf1SafBOtW9Gco0IBHNb5EAXsKtBQ2r0L4ZmoIjZAHKltRYyUkM d0cCnLjAh8I00rlfUiZTxnvoj9o7z8T4PBxukjvLj6Kb//jpGRR/8MW5+w0d/+ODjI Mkh9Jy0LYxXVO82EQWQYzxlVQqnQUbsgzkodHZdCeEaISJts5cqNgG6EKkHpLqIqXF UtyvIF4lnKgJ4pnVbWAtwGEx5uefshJxTX8b6rNuTISbRi+DkpiVc0cpfi3Bl/r49a oodUgrHjme58A== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 77F27FD0074; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:18 +0100 Subject: [PATCH 04/10] Input: stmfts - disable regulators when power on fails Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-4-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1598; i=david@ixit.cz; h=from:subject:message-id; bh=Z29IokqtA9ULVf4cQSlm3q9NJhfdPu/mSq+nU9M0a4M=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyU9u/DZ1GreqI2xQDH8VFabq8lVGipnGV6u YblMQC0S3WJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lAAKCRBgAj/E00kg cuLzD/45dchsfZkaDN8R4+2qYOi2IqahkhRBhZymvtMYZ+qXaWMz652M3IZpAy59eOOwkGO5B6j qfvIu57Qipc1I+UeTxkmepghYsA+E46SSYff8toz8tUAsOJBEY01FgLX4VSKV4hXPGR438LipBg 2TjRUk5+jlm9sHdaOYdBQuGqejUnD/oL14qi4yYtOoGqLbqWs8wzDXFRTMS6YvT2GjnFOlDRqcB 5DC+Idb7rWxyNtJdbOdH/ht3R5CCrpsq6YhK4KVub9rrCuRKAT/qQYMeXiSQVBr0eu4elXnm2Cy qZV/1QwsbgVwL5IiysQdp8T5Wu1ESmCMKB59jeR2QAmflZ0R3AkEsI69TK9akDlFEzsfFUm7mrz om83TzDnVnLrOZPYYMOzWNVLEPjSgpYWsBYK7U674/cEfRDFOkqdew6tw70v2GJm3Oio5VEzGVL O1SuQ+WaaVzCxEy9aqtNNxpy/FTnSsgcLc2xfFY4zgsS/Uxvgm83J7unPbfnaKxxizEy5w3NJ+A nHsF5XzVxS3APrLPRfLwnO5G4g4UVLw2lcJvsTp45CHzjthuOZiqZxvd177P52lkivJE//X4bnK 02GDVbH9OLze8pxZBwDyrQLrbleT1JV1CuEywAlZwe9uk6weDvJTYTiPatc0US27Zw5CMDd9/tc 9S68x3aBfA3/spQ== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg We must power off regulators after failing at power on phase. Signed-off-by: David Heidelberg --- drivers/input/touchscreen/stmfts.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index db2dd0bb59fcc..f4e5f1b3ce796 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -558,7 +558,7 @@ static int stmfts_power_on(struct stmfts_data *sdata) =20 err =3D stmfts_read_system_info(sdata); if (err) - return err; + goto power_off; =20 enable_irq(sdata->client->irq); =20 @@ -566,11 +566,11 @@ static int stmfts_power_on(struct stmfts_data *sdata) =20 err =3D stmfts_command(sdata, STMFTS_SYSTEM_RESET); if (err) - return err; + goto power_off; =20 err =3D stmfts_command(sdata, STMFTS_SLEEP_OUT); if (err) - return err; + goto power_off; =20 /* optional tuning */ err =3D stmfts_command(sdata, STMFTS_MS_CX_TUNING); @@ -586,7 +586,7 @@ static int stmfts_power_on(struct stmfts_data *sdata) =20 err =3D stmfts_command(sdata, STMFTS_FULL_FORCE_CALIBRATION); if (err) - return err; + goto power_off; =20 /* * At this point no one is using the touchscreen @@ -595,6 +595,11 @@ static int stmfts_power_on(struct stmfts_data *sdata) (void) i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_IN); =20 return 0; + +power_off: + regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies), + sdata->supplies); + return err; } =20 static void stmfts_power_off(void *data) --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 B875B337BBD; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; cv=none; b=GZeUFZy0fCRq1TrfRijYizpinV87ohDT21NzLocL4I7mvj6pbzW9xaKr/2Icx5OV5rZhUBkCo49kDiRCSh2EC5aj7BaJdQUszKk/f8kF/hEPx/7chqwcuse2TAIa4VFiOAi7ueLaVluLsfXLKTPYYc2VDATFP7AQ5AXJNefctzc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; c=relaxed/simple; bh=EEDR+B/u70Hi5MKRcWvqfizpDa9OzsP0bN0/LeEmdjw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MLx+vSZNBKNeQ4XMoXhTdxSUtlDL7j1lMBUTlpEf9HZg3wfhMwv+oyA4yI+0h15/3Rt3nxfwpvtvzyjfLEFAv9Py6T2hXbzPU/7GiRVB5Ba5oNaA289+hNGzR2cHGAph6NKWWc37Mjre8hfmoF/hwP/NApkMwa/X51nxzBUacl4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NpCIwspC; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NpCIwspC" Received: by smtp.kernel.org (Postfix) with ESMTPS id 960F7C2BCB9; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=EEDR+B/u70Hi5MKRcWvqfizpDa9OzsP0bN0/LeEmdjw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=NpCIwspCDQBcXxr2XaO6mLILh5eR6xrpmzKPx767QEnDzCj867iwTG7i4g75fIwbD d5UOKnvJ8Bqc22BTBl1iSUPDNHOyM/l3CX767lP4S4mKktj3RPWkOSpIyuEmp3qrdz sqROVfUvBUXgVotAvlPuUYQ6LjQRSLg0QforfZkr8zVTCKp0YocY01KDLNzESHqTcQ EDE2yHqhZwwCA0Fsrz+T5UB0tyR11WPRRnpVJTeVB8k4ucmLgYEinbJt/kmnWzKsfU StcM9QWIUKtzX2/f5ui8rBbxy/yCaV4uDS5KSTorumARIXrK1D/3WFLu2lWhepsbhC ut+tGyXzsEA1g== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8BAF0FD0075; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:19 +0100 Subject: [PATCH 05/10] Input: stmfts - use client to make future code cleaner Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-5-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=999; i=david@ixit.cz; h=from:subject:message-id; bh=J6AT4NhPh73qOCpvlr3elkk31hc657GgBpzGKxirckY=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyUhUCNk886i9UHnFeU9WfswQgQdF4RB0CFY hE1WxDMyVSJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lAAKCRBgAj/E00kg cv3hEADLtufWl141f1f1h14sRKMAUQ/PoEqhqbwRFbpVBK0+19MxXs+qgfz3O2zFaj2jijCLVtW ZuPmjvRGgQ/fZr3VS5JKnRSuWVxqrIWc7uYf0WO3UDw6VVzaTGkrJ5fdNPbHZAIH0jzaaDQAnfy z1stmZk9RWS0BVPkaz9C55qxwBVdATfJTb7+87BmRFJixu1WJeK/JWDgc+XrwOxtpFI3hQKSrH3 oPNlm7ns/UbaS1gryeiXLSaXHl93B6IGwgDOouIJ7MHTIguincDwKfwoPOfekXpt0OUhyu5o9Tp JhD9BzftvNYOsZp4wfG0yngoJO2FWuROEF+aEqllVpgOar3RnbOkNOWImVHMWPLKRxLaj8uqYrK wfpier9Akmd0orG5s1TeqBhU7t1tqmChv2kOsXXgoYAKoMJU6/mUAZLISuDOa5p92//0j7MKDXs ADXPvTgxdunq9J/WL/tijtxwDfpDSvyoTxXsHMOvYuifChd+ZfnriG+xTQP+8iTpiNLSrHccI6y 6pYEzSqcEWmGNjlEOad/2yS9DWnT/YRHAvMnlacgIjv6CJJou2PHt70CjY7xc2rPuA+ts/VBUNT lxrA/GIhYjS3Ufckok889Myqg6VupZ57VWysTrDxEKyfjgESgD/Hs/sKzQmNEUb4I3XIK2gEVRx FvYqik3DCVMk6OA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Petr Hodina Make code cleaner, compiler will optimize it away anyway. Preparation for FTM5 support, where more steps are needed. Signed-off-by: Petr Hodina Signed-off-by: David Heidelberg --- drivers/input/touchscreen/stmfts.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index f4e5f1b3ce796..9dedccbb183ed 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -764,9 +764,10 @@ static int stmfts_runtime_suspend(struct device *dev) static int stmfts_runtime_resume(struct device *dev) { struct stmfts_data *sdata =3D dev_get_drvdata(dev); + struct i2c_client *client =3D sdata->client; int ret; =20 - ret =3D i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_OUT); + ret =3D i2c_smbus_write_byte(client, STMFTS_SLEEP_OUT); if (ret) dev_err(dev, "failed to resume device: %d\n", ret); =20 --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DE32833A6F8; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; cv=none; b=uELrgMG1dIWKgzOMDVwIeToXgpeW3RmsmsNdsiKtWFfnNSAAf008X+4CwP99kVm1IOVG8vSju9nAk1CzJd05QTezyMynudiaJmBl5nqKv8A9tY5QQJpffKSArSRgwzPT7GDSjB++OxhEaadJPvjzTZ68zfpNXVv4iLdpjGwbVMw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387479; c=relaxed/simple; bh=yXe1hSSdOtlyyzWGYAthZ15x+5EOdyI3Idom8hqgEB4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=HpHfYuRVcByYnR0bwAG4EORnEKkgCpYrz9UulUHXkQ/su87kZQB90Na5dbtdeKVcn0s3XZ4i1syKJFKbJI/rAxKTfEcRleRBDd62ImcRHUbCtZCGNI7v79aDF4CYnfZlSWLzmwsezWXfqr73cFNtBz6EutfP/08drh0uZ06sJlE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NBGSLn4X; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="NBGSLn4X" Received: by smtp.kernel.org (Postfix) with ESMTPS id B48CEC2BCB1; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=yXe1hSSdOtlyyzWGYAthZ15x+5EOdyI3Idom8hqgEB4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=NBGSLn4Xu470ya2zenyjd62hwTHGHQZZxK9fhLkc7/xFzJWGY3TCd3zJ3U9mgBNSH 4thzI6vZlrCQd8QQCAMlz6Gjj5lkmMVKWfkESmEHTlHe92qHbGPc8KeejaKfvpArad yyEqvlKC7Wmwl1pfGB3LkY/qSHTc7ctGivhGTqCepALLvkVb0qAOUFbMdNBYuRwWZi Meb31ItmazvuU+cRoLHj6YBR0Dgz5z7oDuzzoLevLVUbhYUHbnGAA2csa7j6mgwCGq Zl4lPPYru6xYTdDhliViWe1aS3ldImByTNrpnmPVuoFGYF+RwR/TguiW9XdfEwasfz DqXlWWhp1gN6A== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9ECF3FD0076; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:20 +0100 Subject: [PATCH 06/10] dt-bindings: input: touchscreen: st,stmfts: Introduce reset GPIO Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-6-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=779; i=david@ixit.cz; h=from:subject:message-id; bh=uZFVfrrOjw9/Zf+PjQe4vJuLBGGgUOJaBtRtnZBDj/E=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyVjFgb3i+M6jMlXlM5TIrAbsCQX8E1F3tW4 LGiF70vpT+JAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lQAKCRBgAj/E00kg cgHiD/0X/wHMPyxoaYtkjW4WcPvXUC08KdGlHTZKNyGoRqvDGSy8aiu2vev+LCPIk+LHsTW/Nri OO3T8Az2mcmKmZxF9MoBaLKMOU90J8WpI5zSt8tcb7x2BfoIhHD3ovLKWuXU5KDoTFwujc04tHs z7ky5WmzaSZVaBvZ5JyGtD1qqYkVeL8QrnlgeY96B98DsymS5UBCPyql8vYlfI1hndGzI+83wwP VTbJaqb5gNbkvdieepGW8ic3cBCrjjaBj8MzX0MwtyAX79Oq2ZwjQ/0OPZ0zSzO6eRktELfF7ay 7AbX+lXzJ5cBsoGO6laAuOJVP5tz2vC0FyRC3vw69byINXZ8sMQ7FFhRGYefrYxoJOh1PDd6+KA Q+ijRhnrlg1G6BVpDPxthLSlQ1nzIyy6U4EzAODMMPZq77zeF5Zb2faqB/3wVilA1nQf0NdyGhn fpsx3Hftb9aHn+E4HCj4W1G9oVdAf/1tkHKF6DOvy6CXtfhiBGBFbbV5BFyNEy1mbsiElGuRf1d Q/WRSlwQ3rk97JWFdR+Nd4GgRhouRMzK+zCtFBdQ5HuX9sQGUVY7R9NM9XrdBR3ktQrddgLFM6O CNZUSAvtZAXsKPugwymImVkyTTQZdjW/d6ck7x+j6KP/E3EqNWT1tQiD+3HKkDqsYXm+TwkHSco uhZ4cQlRs8Ssvkg== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg FTS may have associated reset GPIO, document it. Signed-off-by: David Heidelberg --- Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.= yaml b/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml index 12256ae7df90d..64c4f24ea3dd0 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml +++ b/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml @@ -40,6 +40,10 @@ properties: vdd-supply: description: Power supply =20 + reset-gpios: + description: Reset GPIO (active-low) + maxItems: 1 + required: - compatible - reg --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 074F733ADB2; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; cv=none; b=qZWjm+BQzfbT0hSMDmAeh2FtZVojqeH9MIIkh4AOLXrpuUBUeGQN5JcSNiQ//ClfZwO7f6NFoLIBQ9XvKMVtx/mPo3qAt2CPrEl9KX7IlkjRvEWfPxEgOVxiI5ZT79ua7LbyEFSbsgvr0R8BGNcnEt3vedQXPAXdHdQBXBdfDxE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; c=relaxed/simple; bh=yY6HMohkzo4ZeIoq6o3ZwMoP3nLGiLYGmwXnzvxtDXk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=sLtvG9KWU5glmhLljlW5xZX68rfn9VJJL87m/GN663TVMtBrkwcxv+v5BJulgqM99JkwuMM08K55CWPNSU7P9sqWHWYyYK80Gb5dlSPz14Cy5HU24FIEzJXsB6JDSxnU6m/r0s1B2SmZFaemjOnEUTxyj6ZAm6g1fAXU1DLrwCU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KOt/J5uA; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KOt/J5uA" Received: by smtp.kernel.org (Postfix) with ESMTPS id CF9A3C2BCC4; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387479; bh=yY6HMohkzo4ZeIoq6o3ZwMoP3nLGiLYGmwXnzvxtDXk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=KOt/J5uArC6mg5B7q+15QaHzAM94g8fGP7kWisv4AGrhShgw4zOXI5/awMguFB359 TYOnanb2C5IE7vRwuLp66E+U1ZI+guwe/OvAdVggCig8LO4oc94SukKb9W3cQ9BeMz dgbHC0BB14kDiV92l8FPcGPXRZXPZugmmJIGZcidQzXZavZyrfm1LVNICJ3hDiP/Gs cezJpjvQ69EzOo+hsyf3nQnxloZLAuGrDCYOjHpGJ6ulYbkn6E92UMoLgLwaV5nIMW QOio7qy/0ESxmU73TeeQ0vCY5JiauTF9YVK60HEXumXqa1FBYdlV+RHrLLcq2k/S52 sDWEa7McjAw1Q== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id C2277FD006E; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:21 +0100 Subject: [PATCH 07/10] Input: stmfts - add optional reset GPIO support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-7-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=2354; i=david@ixit.cz; h=from:subject:message-id; bh=daBviKrwdNaBon25+W21BV0l53Jhcl6A1asMOmlUHP8=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyVl29wFOXwqGmWw88xHEwXRAdEU8Cr60aAt Q7pe6uFN+OJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lQAKCRBgAj/E00kg ct8PD/4l2VVdFOhnFJ2dH/degpVL401NqhKnFc6/SpzMWFv7jHx7K0ZjOB09th5pZYh5Zbka73w O9rLXubm0PRi4fVhOTAT68wO95N/sq5TcMuPLefP4p2qN73YXjtk4RFoyE0HXw8VXcN9SXdJAAa 7btuvK4ahgeEahRM9AsiaLK6cdPEy2b1F69/09NJJCFQi/g0d86ovQj70Q0J71XRHfHiTuSptEm 5T9F7z6XxrOo1sZ6NVco3s//1Yljjvx2xIU0yi9k+4dztQWsBzDuxDTZgvyHsgKwZf4YyTavce9 ScoChG4Mxoj9i/B58foc8AAtPGoj/eL0j8+kYXSPmTrygUr05bh7qnLO6DXviUB4Pjqf73vvid7 UWu95j8KvUxGnsxoCYJXMl4L4u6TknuVXvzI2/E+FzDgSVU5XuQin+uhWN7wmO1MxcAddjdTJoI lfDP6MyBK1FTmWB9O/yIpnXq060pzqyUv2y323DeG33ZYjGtlIFCvYs3o0mJgMKGpqUQYQm68pp 5aozfmaFiIr4qe6yEd0mu9c3GfAMAf0kfERrPkjkk2/9Nm+pCBuBc0usDin/CCOyvpz5IFb/5HE 3prMd8KBg+aGKn/vL31zMDMfVRgKVxMOws+gARdnL4ZtU8OMuEvgFa9L5KpecHY7peiV3IlhTid QVzIyiNFfLWfPQQ== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Petr Hodina Add support for an optional "reset-gpios" property. If present, the driver drives the reset line high at probe time and releases it during power-on, after the regulators have been enabled. Signed-off-by: Petr Hodina Co-developed-by: David Heidelberg Signed-off-by: David Heidelberg --- drivers/input/touchscreen/stmfts.c | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index 9dedccbb183ed..a4d8e81aba275 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -77,6 +77,7 @@ static const struct regulator_bulk_data stmfts_supplies[]= =3D { struct stmfts_data { struct i2c_client *client; struct input_dev *input; + struct gpio_desc *reset_gpio; struct led_classdev led_cdev; struct mutex mutex; =20 @@ -540,6 +541,15 @@ static int stmfts_read_system_info(struct stmfts_data = *sdata) return 0; } =20 +static void stmfts_reset(struct stmfts_data *sdata) +{ + gpiod_set_value_cansleep(sdata->reset_gpio, 1); + msleep(20); + + gpiod_set_value_cansleep(sdata->reset_gpio, 0); + msleep(50); +} + static int stmfts_power_on(struct stmfts_data *sdata) { int err; @@ -549,6 +559,9 @@ static int stmfts_power_on(struct stmfts_data *sdata) if (err) return err; =20 + if (sdata->reset_gpio) + stmfts_reset(sdata); + /* * The datasheet does not specify the power on time, but considering * that the reset time is < 10ms, I sleep 20ms to be sure @@ -607,6 +620,10 @@ static void stmfts_power_off(void *data) struct stmfts_data *sdata =3D data; =20 disable_irq(sdata->client->irq); + + if (sdata->reset_gpio) + gpiod_set_value_cansleep(sdata->reset_gpio, 1); + regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies), sdata->supplies); } @@ -663,6 +680,12 @@ static int stmfts_probe(struct i2c_client *client) if (err) return err; =20 + sdata->reset_gpio =3D devm_gpiod_get_optional(dev, "reset", + GPIOD_OUT_HIGH); + if (IS_ERR(sdata->reset_gpio)) + return dev_err_probe(dev, PTR_ERR(sdata->reset_gpio), + "Failed to get GPIO 'reset'\n"); + sdata->input =3D devm_input_allocate_device(dev); if (!sdata->input) return -ENOMEM; --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 284D833C53A; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; cv=none; b=okxon3oJGdEL0JZ8KU40aUjK37AWTLUZx0hvYCJmf8l9q544aKMk01mlizbecM5DtLym1DqrcXnQoqCy4gjDt4Uf/Fkj0KCvLSWYI2no2FqV9GaNwPevjy0TUhow8vaBgesI4Z/cSLWyxKqqY+A9INSMH97TjtY4m4uEGk0eJUY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; c=relaxed/simple; bh=53WHfGqqSMrj0Jn3TMtTuxOcR8r6avGv76zZSnG4JUY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jyo9KEmIlNVVT6kHH/GW7eMR4vtpXub9pgRHpQe2xJjxO88kJqaK3YCDwJq1BgggHF9zTXkoQ1y2WZ8M2Jz66RRsoEeRinGkuls4ilQn4bfGXm/X+e3x2rRQC8gH5cs7Ea5kH0WqgDZW4SfFJzjMs71ps6SgavQWt2POkO797rE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=JScHEKDe; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="JScHEKDe" Received: by smtp.kernel.org (Postfix) with ESMTPS id EA744C2BC86; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387480; bh=53WHfGqqSMrj0Jn3TMtTuxOcR8r6avGv76zZSnG4JUY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=JScHEKDeJnP87v0I/Jqc035udD/zNgdpn7XvcSUKDkHOnLnqofkWFC6vklzq7tO3j iYgqv8gJO5Yyi4nJfUKzdpNeSmxQAcXgowRgeFS2cs7rfH9gUj2/vzCh+LtnH3tBS3 39d9lJ4gr7LtS8oicga7xrfijSFb5VnqpPWuQ9NtCCLizhdnvpqTjFSc5UkJhY6BpA sMxuhnyFMCh+xgEzNOHTRDw5Q29nYlobfR5xn26XgjGWOVe/7Yk2lkH2ktx4r29/Qp KZwxY1mFX3RZHFocQkDssXoJiKakZC+W8Cp7zi5pmNgthkDpbn42KoF/0dTZe5yn73 ojcMtijYE5LUg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id E00C1FD0075; Sun, 1 Mar 2026 17:51:19 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:22 +0100 Subject: [PATCH 08/10] dt-bindings: input: touchscreen: st,stmfts: Introduce STM FTS5 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-8-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1158; i=david@ixit.cz; h=from:subject:message-id; bh=hq9RJ0MPDH3qjbBs4V4v4YyIoe73PSNk1u1yb638HiY=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyVCoxRU7IViUqu//ep20pNs3plY0LsjQwgQ lDE67NHdlWJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lQAKCRBgAj/E00kg co93D/9PCMgQHcgoRm260zPygFP00u9m2DCOEZSMzuD4dRL4nBeebVnK7tWlZOCUgc1Tk0pyxf0 QvYfnMkKFpTQwqj+S+Tje/BEeqI2XP77/OW8qTx4pVab7h88y1lo1z1G/T1nGqfnedrn3iQFpG3 7Unluofdg94QhqjPVx18olmR6T3OuY467B6j2fK5UjZMkv84ndIJF5AUFRiZgNPffoWAWO8v77F foYfGO4Biy1VtPIkyozYea9ZDTsO5z2j8Y3x52Eet3bUITLySIvC15ocbPaxT6qroGf9JICPAz6 NxlnqhAKnBNK9V4sGzHQ/o8aRPoIs2P8svd4WjJyA3eu+CEy1ILbJQ5RTc9Qu2HULTDdtr8wMKo 3OmhYBpX0bqHjb2HRN3wX7bFVwENH46wM+hAPmhzQUcY0nAywkME7d9GvdcH7SYt/Dd0G5vUz5c 6XtPfKED2ok1y4wvFZJ9BdnxrK48bXVqUBAp9L4CpwjKtaDu4uRRBtyVZXNUjATH1+W/qmrkjYT 8K35YL7wyplFX369igIdXYxrGAiEGJhOhE2BQgYikAw/xj1G9D2yixFq+NhH++Ypke1yixmXVVf dcvXvW8T3dq8/TUlD8FqLdqHLxOgceK/qlcIqz68odYJdJCKkTjSgpoTp+AbVMDmrHnQZfqQKFA hgcL0puDUAOlU4w== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: David Heidelberg Introduce more recent STM FTS5 touchscreen support. Signed-off-by: David Heidelberg --- .../bindings/input/touchscreen/st,stmfts.yaml | 17 +++++++++++++= +++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.= yaml b/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml index 64c4f24ea3dd0..329d89977bdbc 100644 --- a/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml +++ b/Documentation/devicetree/bindings/input/touchscreen/st,stmfts.yaml @@ -19,7 +19,9 @@ allOf: =20 properties: compatible: - const: st,stmfts + enum: + - st,stmfts + - st,stmfts5 =20 reg: maxItems: 1 @@ -53,6 +55,19 @@ required: =20 unevaluatedProperties: false =20 +allOf: + - if: + properties: + compatible: + const: st,stmfts5 + then: + properties: + switch-gpio: + description: Switch between SLPI and AP mode. + + required: + - switch-gpio + examples: - | #include --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 3F6A933D4FE; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; cv=none; b=SqG0Ozb5iFq+RlbE7vsFlooJpLFGjVvjnOyHjsLhwS919mM9tWSsUHMcs6l6YhIfNyqa5t9/5vag0wvW4nLv89Om840VzN6qV7KfjixeQToTDXOfeOgc3VauTehGaE58DCt1iTaUVXDxN0YNfRxfxI2xVfMjdm7J7eI7/7MBumU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; c=relaxed/simple; bh=Ip6tCXfZshlasjHtbTJ3eC5CNw2ktA8MAjn0or1AMDg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qjMoq4n3MjAh8HE9B1f0SjajBNMhd9YeRzkllYL7GTQfEWsMA5oAQQnRp8BX07hj6zgW8r39xQA+Rim601JfKNAQi9yoTPg6kcCNAVtcIFNHnUYilylidJWRiLUB7EKJ2izfHvLkdLWWV+ukP4EUvS19LYU7RoZ4Qczx4bMiVxE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mR/hIdGU; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="mR/hIdGU" Received: by smtp.kernel.org (Postfix) with ESMTPS id 0E4B8C2BCB7; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387480; bh=Ip6tCXfZshlasjHtbTJ3eC5CNw2ktA8MAjn0or1AMDg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=mR/hIdGU9MCWORcSuKrShT7iGWQwvfPd8PWH1ioQ4SJLXnmw55yeUvv0uK9K4oGKQ 20d5+5h4b4n9fQ0v2Q5SDlhMtuuAUJz0CTDffBq4idpi2SoLhMKPg+2pBxkHln/2El ULGOTktIgTA9AJ7PSUJnIat4+S2p2gKXnnVziVbaXyfMfy9gZDN5dy00VsRJgfilT9 f6zPWpLmTKFPbJ2oAtCIVW9LjTzfRrIumaeBN4v4HmTv/Th0rCPRDxvvbV2p0kjOc6 BKeUz/BDdSJ7TefgqWCmyaX4LV14//G9bHrXOAFylY3jwSIq6itbMcaX5j/oHk1J0J lC8vbpmbKQGRg== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 008C5FD0073; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:23 +0100 Subject: [PATCH 09/10] Input: stmfts - support FTS5 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-9-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=21681; i=david@ixit.cz; h=from:subject:message-id; bh=Fv4oOmWr6N8Cbr9UL5peCydtXtGgDW+OxWY8vbQkCtU=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyVkltfL7sR/k+1/ZdLdSO3ztLQo+HTRRTPI 8Z/gzmpWHyJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lQAKCRBgAj/E00kg crlsD/412TEAhX5cLw0CFFu0qXqSLW1pOC04ufg7O8kP1QGYjCzWBSYBHnPa4hIi2Ur+NDgV8G0 gtt0UAIM1tqjNVKowpcwCHNoR5Frz6KuQZ70gtC5yvc4n6Nto4+/mimGazT4/Le3BWlxdoEDaES 8jHjFfeWQKG8Iijuh3nKZKTdoa2wBvX2a1mG6TR4cXBUB5HfXIJyhsvGDe7RrdaJqfUhsLxGijI Ma8FMNnBgQ4U8NNOThz3UD1aawT7b8sBj/0jO4Ndg5meQybIB34lQwwNBhGSnQn3gTLtMnlLHCI 6HnJTzMhIbp6b8huhQ+m1Yy1s6yvJM5JOQXVka8s1HGpyZt/Z3VUh9YWfD4J+uBGM8H2UsCuF6I pkbL9mRxJ+14b38Id50REYx934yusw5LR5LIwxW3BU0thYT1A9mmcbXhzKtWm+ewSq6ben/DA1B QBN21tjnPOO6WUdGg62Vh8r3fYw9op/COjQEGau6Smm38swEaHbpa3LplgDbgxsdNH5V+V3eamF X+yeCZwUncYZpr1D2nwnM1nCbczV5ixCVyPOyFjGSqaYkYfVO1MOBai8kgmFECD25oH0YSsBxF8 dNBgMRy+etCPaMSUvmZpyFceBx6DFEbNmHlEcUUiwnoIca2FsjOEHmG1RItwKlnVBbXtPPNNa9i EK/GpNuPA3MD0iw== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Petr Hodina Introduce basic FTS5 support. FTS support SLPI and AP mode, introduce switch GPIO to switch between those two. Currently we can handle only full power AP mode, so we just switch to it. Useful for devices like Pixel 3 (blueline). Nitpick: changed GPL v2 to GPL in module license. Signed-off-by: Petr Hodina Co-developed-by: David Heidelberg Signed-off-by: David Heidelberg --- drivers/input/touchscreen/stmfts.c | 484 +++++++++++++++++++++++++++++++++= ++-- 1 file changed, 461 insertions(+), 23 deletions(-) diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen= /stmfts.c index a4d8e81aba275..5f0f2d59300e4 100644 --- a/drivers/input/touchscreen/stmfts.c +++ b/drivers/input/touchscreen/stmfts.c @@ -1,8 +1,13 @@ // SPDX-License-Identifier: GPL-2.0 -// STMicroelectronics FTS Touchscreen device driver -// -// Copyright (c) 2017 Samsung Electronics Co., Ltd. -// Copyright (c) 2017 Andi Shyti +/* STMicroelectronics FTS Touchscreen device driver + * + * Supports version FTS4, FTS5. + * + * Copyright 2017 Samsung Electronics Co., Ltd. + * Copyright 2017 Andi Shyti + * Copyright David Heidelberg + * Copyright Petr Hodina + */ =20 #include #include @@ -12,6 +17,7 @@ #include #include #include +#include #include #include =20 @@ -34,6 +40,7 @@ #define STMFTS_FULL_FORCE_CALIBRATION 0xa2 #define STMFTS_MS_CX_TUNING 0xa3 #define STMFTS_SS_CX_TUNING 0xa4 +#define STMFTS5_SET_SCAN_MODE 0xa0 =20 /* events */ #define STMFTS_EV_NO_EVENT 0x00 @@ -51,12 +58,32 @@ #define STMFTS_EV_STATUS 0x16 #define STMFTS_EV_DEBUG 0xdb =20 +/* events FTS5 */ +#define STMFTS5_EV_CONTROLLER_READY 0x03 +/* FTM5 event IDs (full byte, not masked) */ +#define STMFTS5_EV_MULTI_TOUCH_ENTER 0x13 +#define STMFTS5_EV_MULTI_TOUCH_MOTION 0x23 +#define STMFTS5_EV_MULTI_TOUCH_LEAVE 0x33 +#define STMFTS5_EV_STATUS_UPDATE 0x43 +#define STMFTS5_EV_USER_REPORT 0x53 +#define STMFTS5_EV_DEBUG 0xe3 +#define STMFTS5_EV_ERROR 0xf3 + /* multi touch related event masks */ #define STMFTS_MASK_EVENT_ID 0x0f #define STMFTS_MASK_TOUCH_ID 0xf0 #define STMFTS_MASK_LEFT_EVENT 0x0f #define STMFTS_MASK_X_MSB 0x0f #define STMFTS_MASK_Y_LSB 0xf0 +#define STMFTS5_MASK_TOUCH_TYPE 0x0f + +/* touch type classifications */ +#define STMFTS_TOUCH_TYPE_INVALID 0x00 +#define STMFTS_TOUCH_TYPE_FINGER 0x01 +#define STMFTS_TOUCH_TYPE_GLOVE 0x02 +#define STMFTS_TOUCH_TYPE_STYLUS 0x03 +#define STMFTS_TOUCH_TYPE_PALM 0x04 +#define STMFTS_TOUCH_TYPE_HOVER 0x05 =20 /* key related event masks */ #define STMFTS_MASK_KEY_NO_TOUCH 0x00 @@ -77,7 +104,9 @@ static const struct regulator_bulk_data stmfts_supplies[= ] =3D { struct stmfts_data { struct i2c_client *client; struct input_dev *input; + struct gpio_desc *irq_gpio; struct gpio_desc *reset_gpio; + struct gpio_desc *switch_gpio; struct led_classdev led_cdev; struct mutex mutex; =20 @@ -101,9 +130,14 @@ struct stmfts_data { =20 struct completion cmd_done; =20 + unsigned long touch_id; + unsigned long stylus_id; + + bool is_fts5; bool use_key; bool led_status; bool hover_enabled; + bool stylus_enabled; bool running; }; =20 @@ -169,6 +203,7 @@ static int stmfts_read_events(struct stmfts_data *sdata) return ret =3D=3D ARRAY_SIZE(msgs) ? 0 : -EIO; } =20 +/* FTS4 event handling functions */ static void stmfts_report_contact_event(struct stmfts_data *sdata, const u8 event[]) { @@ -204,6 +239,157 @@ static void stmfts_report_contact_release(struct stmf= ts_data *sdata, input_sync(sdata->input); } =20 +/* FTS5 event handling functions */ +static void stmfts5_report_contact_event(struct stmfts_data *sdata, + const u8 event[]) +{ + u8 area; + u8 maj; + u8 min; + /* FTM5 event format: + * event[0] =3D event ID (0x13/0x23) + * event[1] =3D touch type (low 4 bits) | touch ID (high 4 bits) + * event[2] =3D X LSB + * event[3] =3D X MSB (low 4 bits) | Y MSB (high 4 bits) + * event[4] =3D Y LSB + * event[5] =3D pressure + * event[6] =3D major (low 4 bits) | minor (high 4 bits) + * event[7] =3D minor (high 2 bits) + */ + u8 touch_id =3D (event[1] & STMFTS_MASK_TOUCH_ID) >> 4; + u8 touch_type =3D event[1] & STMFTS5_MASK_TOUCH_TYPE; + int x, y, distance; + unsigned int tool =3D MT_TOOL_FINGER; + bool touch_condition =3D true; + + /* Parse coordinates with better precision */ + x =3D (((int)event[3] & STMFTS_MASK_X_MSB) << 8) | event[2]; + y =3D ((int)event[4] << 4) | ((event[3] & STMFTS_MASK_Y_LSB) >> 4); + + /* Parse pressure - ensure non-zero for active touch */ + area =3D event[5]; + if (area <=3D 0 && touch_type !=3D STMFTS_TOUCH_TYPE_HOVER) { + /* Should not happen for contact events. Set minimum pressure + * to prevent touch from being dropped + */ + dev_warn_once(&sdata->client->dev, + "zero pressure on contact event, slot %d\n", touch_id); + area =3D 1; + } + + /* Parse touch area with improved bit extraction */ + maj =3D (((event[0] & 0x0C) << 2) | ((event[6] & 0xF0) >> 4)); + min =3D (((event[7] & 0xC0) >> 2) | (event[6] & 0x0F)); + + /* Distance is 0 for touching, max for hovering */ + distance =3D 0; + + /* Classify touch type and set appropriate tool and parameters */ + switch (touch_type) { + case STMFTS_TOUCH_TYPE_STYLUS: + if (sdata->stylus_enabled) { + tool =3D MT_TOOL_PEN; + __set_bit(touch_id, &sdata->stylus_id); + __clear_bit(touch_id, &sdata->touch_id); + break; + } + fallthrough; /* Report as finger if stylus not enabled */ + + case STMFTS_TOUCH_TYPE_FINGER: + case STMFTS_TOUCH_TYPE_GLOVE: + tool =3D MT_TOOL_FINGER; + __set_bit(touch_id, &sdata->touch_id); + __clear_bit(touch_id, &sdata->stylus_id); + break; + + case STMFTS_TOUCH_TYPE_PALM: + /* Palm touch - report but can be filtered by userspace */ + tool =3D MT_TOOL_PALM; + __set_bit(touch_id, &sdata->touch_id); + __clear_bit(touch_id, &sdata->stylus_id); + break; + + case STMFTS_TOUCH_TYPE_HOVER: + tool =3D MT_TOOL_FINGER; + touch_condition =3D false; + area =3D 0; + distance =3D 255; + __set_bit(touch_id, &sdata->touch_id); + __clear_bit(touch_id, &sdata->stylus_id); + break; + + case STMFTS_TOUCH_TYPE_INVALID: + default: + dev_warn(&sdata->client->dev, + "invalid touch type %d for slot %d\n", + touch_type, touch_id); + return; + } + + /* Boundary check - some devices report max value, adjust */ + if (x >=3D sdata->prop.max_x) + x =3D sdata->prop.max_x - 1; + if (y >=3D sdata->prop.max_y) + y =3D sdata->prop.max_y - 1; + + input_mt_slot(sdata->input, touch_id); + input_report_key(sdata->input, BTN_TOUCH, touch_condition); + input_mt_report_slot_state(sdata->input, tool, true); + + input_report_abs(sdata->input, ABS_MT_POSITION_X, x); + input_report_abs(sdata->input, ABS_MT_POSITION_Y, y); + input_report_abs(sdata->input, ABS_MT_TOUCH_MAJOR, maj); + input_report_abs(sdata->input, ABS_MT_TOUCH_MINOR, min); + input_report_abs(sdata->input, ABS_MT_PRESSURE, area); + input_report_abs(sdata->input, ABS_MT_DISTANCE, distance); + + input_sync(sdata->input); +} + +static void stmfts5_report_contact_release(struct stmfts_data *sdata, + const u8 event[]) +{ + /* FTM5 format: touch ID is in high 4 bits of event[1] */ + u8 touch_id =3D (event[1] & STMFTS_MASK_TOUCH_ID) >> 4; + u8 touch_type =3D event[1] & STMFTS5_MASK_TOUCH_TYPE; + unsigned int tool =3D MT_TOOL_FINGER; + + /* Determine tool type based on touch classification */ + switch (touch_type) { + case STMFTS_TOUCH_TYPE_STYLUS: + if (sdata->stylus_enabled) { + tool =3D MT_TOOL_PEN; + __clear_bit(touch_id, &sdata->stylus_id); + } else { + __clear_bit(touch_id, &sdata->touch_id); + } + break; + + case STMFTS_TOUCH_TYPE_PALM: + tool =3D MT_TOOL_PALM; + __clear_bit(touch_id, &sdata->touch_id); + break; + + case STMFTS_TOUCH_TYPE_FINGER: + case STMFTS_TOUCH_TYPE_GLOVE: + case STMFTS_TOUCH_TYPE_HOVER: + default: + tool =3D MT_TOOL_FINGER; + __clear_bit(touch_id, &sdata->touch_id); + break; + } + + input_mt_slot(sdata->input, touch_id); + input_report_abs(sdata->input, ABS_MT_PRESSURE, 0); + input_mt_report_slot_state(sdata->input, tool, false); + + /* Report BTN_TOUCH only if no touches remain */ + if (!sdata->touch_id && !sdata->stylus_id) + input_report_key(sdata->input, BTN_TOUCH, 0); + + input_sync(sdata->input); +} + static void stmfts_report_hover_event(struct stmfts_data *sdata, const u8 event[]) { @@ -251,7 +437,6 @@ static void stmfts_parse_events(struct stmfts_data *sda= ta) u8 *event =3D &sdata->data[i * STMFTS_EVENT_SIZE]; =20 switch (event[0]) { - case STMFTS_EV_CONTROLLER_READY: case STMFTS_EV_SLEEP_OUT_CONTROLLER_READY: case STMFTS_EV_STATUS: @@ -264,7 +449,6 @@ static void stmfts_parse_events(struct stmfts_data *sda= ta) } =20 switch (event[0] & STMFTS_MASK_EVENT_ID) { - case STMFTS_EV_MULTI_TOUCH_ENTER: case STMFTS_EV_MULTI_TOUCH_MOTION: stmfts_report_contact_event(sdata, event); @@ -298,6 +482,45 @@ static void stmfts_parse_events(struct stmfts_data *sd= ata) } } =20 +static void stmfts5_parse_events(struct stmfts_data *sdata) +{ + for (int i =3D 0; i < STMFTS_STACK_DEPTH; i++) { + u8 *event =3D &sdata->data[i * STMFTS_EVENT_SIZE]; + + switch (event[0]) { + case STMFTS5_EV_CONTROLLER_READY: + complete(&sdata->cmd_done); + fallthrough; + + case STMFTS_EV_NO_EVENT: + case STMFTS5_EV_STATUS_UPDATE: + case STMFTS5_EV_USER_REPORT: + case STMFTS5_EV_DEBUG: + return; + + case STMFTS5_EV_MULTI_TOUCH_ENTER: + case STMFTS5_EV_MULTI_TOUCH_MOTION: + stmfts5_report_contact_event(sdata, event); + break; + + case STMFTS5_EV_MULTI_TOUCH_LEAVE: + stmfts5_report_contact_release(sdata, event); + break; + + case STMFTS5_EV_ERROR: + dev_warn(&sdata->client->dev, + "error code: 0x%x%x%x%x%x%x", + event[6], event[5], event[4], + event[3], event[2], event[1]); + break; + + default: + dev_err(&sdata->client->dev, + "unknown FTS5 event %#02x\n", event[0]); + } + } +} + static irqreturn_t stmfts_irq_handler(int irq, void *dev) { struct stmfts_data *sdata =3D dev; @@ -306,11 +529,15 @@ static irqreturn_t stmfts_irq_handler(int irq, void *= dev) mutex_lock(&sdata->mutex); =20 err =3D stmfts_read_events(sdata); - if (unlikely(err)) + if (unlikely(err)) { dev_err(&sdata->client->dev, "failed to read events: %d\n", err); - else - stmfts_parse_events(sdata); + } else { + if (sdata->is_fts5) + stmfts5_parse_events(sdata); + else + stmfts_parse_events(sdata); + } =20 mutex_unlock(&sdata->mutex); return IRQ_HANDLED; @@ -333,6 +560,25 @@ static int stmfts_command(struct stmfts_data *sdata, c= onst u8 cmd) return 0; } =20 +static int stmfts5_set_scan_mode(struct stmfts_data *sdata, const u8 val) +{ + int err; + + u8 scan_mode_cmd[3] =3D { STMFTS5_SET_SCAN_MODE, 0x00, val }; + struct i2c_msg msg =3D { + .addr =3D sdata->client->addr, + .len =3D sizeof(scan_mode_cmd), + .buf =3D scan_mode_cmd, + }; + + err =3D i2c_transfer(sdata->client->adapter, &msg, 1); + if (err !=3D 1) + return err < 0 ? err : -EIO; + + return 0; + +} + static int stmfts_input_open(struct input_dev *dev) { struct stmfts_data *sdata =3D input_get_drvdata(dev); @@ -372,6 +618,28 @@ static int stmfts_input_open(struct input_dev *dev) return 0; } =20 +static int stmfts5_input_open(struct input_dev *dev) +{ + struct stmfts_data *sdata =3D input_get_drvdata(dev); + int err; + + err =3D pm_runtime_resume_and_get(&sdata->client->dev); + if (err) + return err; + + mutex_lock(&sdata->mutex); + sdata->running =3D true; + mutex_unlock(&sdata->mutex); + + err =3D stmfts5_set_scan_mode(sdata, 0xff); + if (err) { + pm_runtime_put_sync(&sdata->client->dev); + return err; + } + + return 0; +} + static void stmfts_input_close(struct input_dev *dev) { struct stmfts_data *sdata =3D input_get_drvdata(dev); @@ -406,6 +674,23 @@ static void stmfts_input_close(struct input_dev *dev) pm_runtime_put_sync(&sdata->client->dev); } =20 +static void stmfts5_input_close(struct input_dev *dev) +{ + struct stmfts_data *sdata =3D input_get_drvdata(dev); + int err; + + err =3D stmfts5_set_scan_mode(sdata, 0x00); + if (err) + dev_warn(&sdata->client->dev, + "failed to disable touchscreen: %d\n", err); + + mutex_lock(&sdata->mutex); + sdata->running =3D false; + mutex_unlock(&sdata->mutex); + + pm_runtime_put_sync(&sdata->client->dev); +} + static ssize_t stmfts_sysfs_chip_id(struct device *dev, struct device_attribute *attr, char *buf) { @@ -485,7 +770,7 @@ static ssize_t stmfts_sysfs_hover_enable_write(struct d= evice *dev, if (value && sdata->hover_enabled) goto out; =20 - if (sdata->running) + if (sdata->running && !sdata->is_fts5) err =3D i2c_smbus_write_byte(sdata->client, value ? STMFTS_SS_HOVER_SENSE_ON : STMFTS_SS_HOVER_SENSE_OFF); @@ -615,6 +900,41 @@ static int stmfts_power_on(struct stmfts_data *sdata) return err; } =20 +static int stmfts5_power_on(struct stmfts_data *sdata) +{ + int err, ret; + u8 event[STMFTS_EVENT_SIZE]; + + err =3D regulator_bulk_enable(ARRAY_SIZE(stmfts_supplies), + sdata->supplies); + if (err) + return err; + + /* Power stabilization delay */ + msleep(20); + + if (sdata->reset_gpio) + stmfts_reset(sdata); + + /* Verify I2C communication */ + ret =3D i2c_smbus_read_i2c_block_data(sdata->client, + STMFTS_READ_ALL_EVENT, + sizeof(event), event); + if (ret < 0) { + err =3D ret; + goto power_off; + } + + enable_irq(sdata->client->irq); + + return 0; + +power_off: + regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies), + sdata->supplies); + return err; +} + static void stmfts_power_off(void *data) { struct stmfts_data *sdata =3D data; @@ -624,6 +944,11 @@ static void stmfts_power_off(void *data) if (sdata->reset_gpio) gpiod_set_value_cansleep(sdata->reset_gpio, 1); =20 + if (sdata->is_fts5) { + i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_IN); + msleep(20); + } + regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies), sdata->supplies); } @@ -657,6 +982,7 @@ static int stmfts_probe(struct i2c_client *client) struct device *dev =3D &client->dev; int err; struct stmfts_data *sdata; + const struct of_device_id *match; =20 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C | I2C_FUNC_SMBUS_BYTE_DATA | @@ -673,6 +999,12 @@ static int stmfts_probe(struct i2c_client *client) mutex_init(&sdata->mutex); init_completion(&sdata->cmd_done); =20 + match =3D of_match_device(dev->driver->of_match_table, dev); + if (match && of_device_is_compatible(dev->of_node, "st,stmfts5")) + sdata->is_fts5 =3D true; + else + sdata->is_fts5 =3D false; + err =3D devm_regulator_bulk_get_const(dev, ARRAY_SIZE(stmfts_supplies), stmfts_supplies, @@ -686,34 +1018,90 @@ static int stmfts_probe(struct i2c_client *client) return dev_err_probe(dev, PTR_ERR(sdata->reset_gpio), "Failed to get GPIO 'reset'\n"); =20 + if (sdata->is_fts5) { + sdata->irq_gpio =3D devm_gpiod_get_optional(dev, "irq", + GPIOD_IN); + if (IS_ERR(sdata->irq_gpio)) + return dev_err_probe(dev, PTR_ERR(sdata->irq_gpio), + "Failed to get GPIO 'irq'\n"); + + sdata->switch_gpio =3D devm_gpiod_get_optional(&client->dev, "switch", + GPIOD_OUT_HIGH); + if (IS_ERR(sdata->switch_gpio)) + return dev_err_probe(dev, PTR_ERR(sdata->switch_gpio), + "Failed to get GPIO 'switch'\n"); + + } + sdata->input =3D devm_input_allocate_device(dev); if (!sdata->input) return -ENOMEM; =20 sdata->input->name =3D STMFTS_DEV_NAME; sdata->input->id.bustype =3D BUS_I2C; - sdata->input->open =3D stmfts_input_open; - sdata->input->close =3D stmfts_input_close; + if (sdata->is_fts5) { + sdata->input->open =3D stmfts5_input_open; + sdata->input->close =3D stmfts5_input_close; + } else { + sdata->input->open =3D stmfts_input_open; + sdata->input->close =3D stmfts_input_close; + } + + /* FTS5-specific input properties */ + if (sdata->is_fts5) { + /* Mark as direct input device for calibration support */ + __set_bit(INPUT_PROP_DIRECT, sdata->input->propbit); + + /* Set up basic touch capabilities */ + input_set_capability(sdata->input, EV_KEY, BTN_TOUCH); + } =20 input_set_capability(sdata->input, EV_ABS, ABS_MT_POSITION_X); input_set_capability(sdata->input, EV_ABS, ABS_MT_POSITION_Y); touchscreen_parse_properties(sdata->input, true, &sdata->prop); =20 + /* Set resolution for accurate calibration (FTS5) */ + if (sdata->is_fts5 && !input_abs_get_res(sdata->input, ABS_MT_POSITION_X)= ) { + input_abs_set_res(sdata->input, ABS_MT_POSITION_X, 10); + input_abs_set_res(sdata->input, ABS_MT_POSITION_Y, 10); + } + + /* Enhanced MT parameters */ input_set_abs_params(sdata->input, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); input_set_abs_params(sdata->input, ABS_MT_TOUCH_MINOR, 0, 255, 0, 0); - input_set_abs_params(sdata->input, ABS_MT_ORIENTATION, 0, 255, 0, 0); input_set_abs_params(sdata->input, ABS_MT_PRESSURE, 0, 255, 0, 0); - input_set_abs_params(sdata->input, ABS_DISTANCE, 0, 255, 0, 0); + + if (sdata->is_fts5) { + input_set_abs_params(sdata->input, ABS_MT_DISTANCE, 0, 255, 0, 0); + + /* Enable stylus support if requested */ + sdata->stylus_enabled =3D device_property_read_bool(dev, + "stylus-enabled"); + } else { + input_set_abs_params(sdata->input, ABS_MT_ORIENTATION, 0, 255, 0, 0); + input_set_abs_params(sdata->input, ABS_DISTANCE, 0, 255, 0, 0); + } =20 sdata->use_key =3D device_property_read_bool(dev, "touch-key-connected"); - if (sdata->use_key) { + if (sdata->use_key && !sdata->is_fts5) { input_set_capability(sdata->input, EV_KEY, KEY_MENU); input_set_capability(sdata->input, EV_KEY, KEY_BACK); } =20 - err =3D input_mt_init_slots(sdata->input, - STMFTS_MAX_FINGERS, INPUT_MT_DIRECT); + /* Initialize touch tracking bitmaps (FTS5) */ + if (sdata->is_fts5) { + sdata->touch_id =3D 0; + sdata->stylus_id =3D 0; + + /* Initialize MT slots with support for pen tool type */ + err =3D input_mt_init_slots(sdata->input, STMFTS_MAX_FINGERS, + INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED); + } else { + err =3D input_mt_init_slots(sdata->input, STMFTS_MAX_FINGERS, + INPUT_MT_DIRECT); + } + if (err) return err; =20 @@ -733,9 +1121,14 @@ static int stmfts_probe(struct i2c_client *client) if (err) return err; =20 - dev_dbg(dev, "initializing ST-Microelectronics FTS...\n"); + dev_dbg(dev, "initializing ST-Microelectronics FTS%s...\n", + sdata->is_fts5 ? "5" : ""); + =20 - err =3D stmfts_power_on(sdata); + if (sdata->is_fts5) + err =3D stmfts5_power_on(sdata); + else + err =3D stmfts_power_on(sdata); if (err) return err; =20 @@ -747,7 +1140,7 @@ static int stmfts_probe(struct i2c_client *client) if (err) return err; =20 - if (sdata->use_key) { + if (sdata->use_key && !sdata->is_fts5) { err =3D stmfts_enable_led(sdata); if (err) { /* @@ -791,8 +1184,47 @@ static int stmfts_runtime_resume(struct device *dev) int ret; =20 ret =3D i2c_smbus_write_byte(client, STMFTS_SLEEP_OUT); - if (ret) + if (ret) { dev_err(dev, "failed to resume device: %d\n", ret); + return ret; + } + + if (sdata->is_fts5) { + msleep(20); + + /* Perform capacitance tuning after wakeup */ + ret =3D i2c_smbus_write_byte(client, STMFTS_MS_CX_TUNING); + if (ret) + dev_warn(dev, "MS_CX_TUNING failed: %d\n", ret); + msleep(20); + + ret =3D i2c_smbus_write_byte(client, STMFTS_SS_CX_TUNING); + if (ret) + dev_warn(dev, "SS_CX_TUNING failed: %d\n", ret); + msleep(20); + + /* Force calibration */ + ret =3D i2c_smbus_write_byte(client, STMFTS_FULL_FORCE_CALIBRATION); + if (ret) + dev_warn(dev, "FORCE_CALIBRATION failed: %d\n", ret); + msleep(50); + + /* Enable controller interrupts */ + u8 int_enable_cmd[4] =3D {0xB6, 0x00, 0x2C, 0x01}; + struct i2c_msg msg =3D { + .addr =3D client->addr, + .len =3D 4, + .buf =3D int_enable_cmd, + }; + + ret =3D i2c_transfer(client->adapter, &msg, 1); + if (ret !=3D 1) + return ret < 0 ? ret : -EIO; + + msleep(20); + + return 0; + } =20 return ret; } @@ -810,7 +1242,10 @@ static int stmfts_resume(struct device *dev) { struct stmfts_data *sdata =3D dev_get_drvdata(dev); =20 - return stmfts_power_on(sdata); + if (sdata->is_fts5) + return stmfts5_power_on(sdata); + else + return stmfts_power_on(sdata); } =20 static const struct dev_pm_ops stmfts_pm_ops =3D { @@ -821,6 +1256,7 @@ static const struct dev_pm_ops stmfts_pm_ops =3D { #ifdef CONFIG_OF static const struct of_device_id stmfts_of_match[] =3D { { .compatible =3D "st,stmfts", }, + { .compatible =3D "st,stmfts5", }, { }, }; MODULE_DEVICE_TABLE(of, stmfts_of_match); @@ -848,5 +1284,7 @@ static struct i2c_driver stmfts_driver =3D { module_i2c_driver(stmfts_driver); =20 MODULE_AUTHOR("Andi Shyti "); +MODULE_AUTHOR("David Heidelberg "); +MODULE_AUTHOR("Petr Hodina "); MODULE_DESCRIPTION("STMicroelectronics FTS Touch Screen"); -MODULE_LICENSE("GPL v2"); +MODULE_LICENSE("GPL"); --=20 2.51.0 From nobody Thu Apr 16 08:18:28 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 5BE3833D6EE; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; cv=none; b=N3u2eT1Y/5EPsKMsqnba/2Dl7PaHfLSddrPJKMZHAIr82od8GkJCBUrMKtxU0ayy62lqonL6DlbvK1OAzyWoOrFvXFcB7DBgvdfk5jz2jISheSHAOq94lzeAZVAM1rmUFO71UcAYTWFulbb4GOa0NLGUKUHuw0eLAART6kbFSY0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772387480; c=relaxed/simple; bh=W6cSrGd0y+hrVmL05+ccKmQuO7d2OHllkzkMpslpFb4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ELUq74a4Igch6ndf88gmhs2IP8IuPs4hs1PaMtVkkIRSRaPl3TQs5MvXXAoJ20gD6ilgs8Ctwg1iQsDz3TvpMfiRRizz/+Y6pSyLhFkI+xa0rgszrDKS2mw29XZomdlvKj3dgFA0ppWcqKTIDcPyIwDe+xGFiUoDOMW6G9lzlQg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=stX4SPXD; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="stX4SPXD" Received: by smtp.kernel.org (Postfix) with ESMTPS id 32520C2BCB3; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1772387480; bh=W6cSrGd0y+hrVmL05+ccKmQuO7d2OHllkzkMpslpFb4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:Reply-To:From; b=stX4SPXDwpSTyym0Pc/k1PVxPfqXK73WCgkdk873AKI8DSR7H+Tg1Zga+lwuAwI76 0/N2F7myFUzWOWVzPhStrjs4LXBc0oyJfYhZ+tpCEVXbWmBh10ol0eBCtRCoK4MhMs aHDzRwuRZ5Ie4vszBeaz+pZEzh7hI+3PGCgsg1nPSa7eqq/DTDjvV+u2E++1xJ+nVo BS0Yrldt9MgdJLDz0au/PXz9HE3e49TKaAFvumLea6B6jMP1WgvFDuK0mLu3hPoi7b WO+Ol2PkpQY5wxaz3mLgeXUqayApkbf4l7+st+nCz+im1TQc/btzQM3LXgc74etpyA 6HQ1SgYC4lmMw== Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18F3DFD0075; Sun, 1 Mar 2026 17:51:20 +0000 (UTC) From: David Heidelberg via B4 Relay Date: Sun, 01 Mar 2026 18:51:24 +0100 Subject: [PATCH 10/10] arm64: dts: qcom: sdm845-google: Add STM FTS touchscreen support Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260301-stmfts5-v1-10-22c458b9ac68@ixit.cz> References: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> In-Reply-To: <20260301-stmfts5-v1-0-22c458b9ac68@ixit.cz> To: Dmitry Torokhov , Maxime Coquelin , Alexandre Torgue , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Henrik Rydberg , Bjorn Andersson , Konrad Dybcio Cc: Petr Hodina , linux-input@vger.kernel.org, linux-stm32@st-md-mailman.stormreply.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Krzysztof Kozlowski , devicetree@vger.kernel.org, linux-arm-msm@vger.kernel.org, phone-devel@vger.kernel.org, David Heidelberg X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=openpgp-sha256; l=1269; i=david@ixit.cz; h=from:subject:message-id; bh=4/lfzEYYZjUSxYP/aTkLrRQ2VN8Psoxavi/IstIzuL0=; b=owEBbQKS/ZANAwAIAWACP8TTSSByAcsmYgBppHyVaCX9KjhoeEmo7YHELzM8zuZw6Mbc4G6o0 VIq1w9OLZWJAjMEAAEIAB0WIQTXegnP7twrvVOnBHRgAj/E00kgcgUCaaR8lQAKCRBgAj/E00kg ciBFD/41NrAOanfs7cx7e+2sECckL6NCNiYD4+R7Ez7hXveR0nbWJxveRy3dbRvMv6/MSxR/3M7 9xyS9sWp24g3qnPNugFmVr5Sw7L5EXuW0dq7N56JBE9aAEab3D8E5CDyqqoNxYItk5Liv1oCvke oG2ZF6RO4fAEIdfScDi179tNE050cB3ddgWCm7kxwIh98oxNSUfVdYzXY2X3zDOeCyqs1xOrK1c JBRKed9j+vcJ22XL/nPZvN30P5EaD/yzbDJALiBdcZInagRoYRYrDLm/NIr09Kx85a5c/wQNqaA TTG6kv+SNNF/w3wuxb86eDrEegWJFhztfew5zKha8AQP/ikCnUwOT5OG8G9tyPkiG3YlMX861MG e9EYqc/JPDmpR0g3V/6FNqfO+nrfQb72T3n2ZgnRq/Q//+G+waw+uroFZuPEQRpb4lXqtJmZK6w cv74HQ8VTmTjzlGHOAeWPZuPyOKxZSmo1zIGlYRy9idGqNvkx+D8a5TGkDJXrqO+zXvXy1BuPLk LNU5vQm8hXUcmWFuIScQvTeeXX4B6Ucp27RDqM0fykYu6kWLj5mBUVk+C+Xy5jFQU/ZHLZIMhEx ZyAreXzqU3StjwAJx69dWraCNBF4HfZH8aB+r9LYuWOYOaLrra6j6FgOSYjx+Zxi3BID/E88zIL RvFppiUpphwbgLA== X-Developer-Key: i=david@ixit.cz; a=openpgp; fpr=D77A09CFEEDC2BBD53A7047460023FC4D3492072 X-Endpoint-Received: by B4 Relay for david@ixit.cz/default with auth_id=355 X-Original-From: David Heidelberg Reply-To: david@ixit.cz From: Petr Hodina Basic touchscreen connected to second i2c bus. Signed-off-by: Petr Hodina Co-developed-by: David Heidelberg Signed-off-by: David Heidelberg --- arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts | 21 +++++++++++++++++= +++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts b/arch/arm= 64/boot/dts/qcom/sdm845-google-blueline.dts index fa89be500fb85..2501104b06e1b 100644 --- a/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts +++ b/arch/arm64/boot/dts/qcom/sdm845-google-blueline.dts @@ -26,7 +26,26 @@ &i2c2 { =20 status =3D "okay"; =20 - /* ST,FTS @ 49 */ + touchscreen@49 { + compatible =3D "st,stmfts5"; + reg =3D <0x49>; + + pinctrl-0 =3D <&touchscreen_pins &touchscreen_reset>; + pinctrl-names =3D "default"; + + interrupt-parent =3D <&tlmm>; + interrupts =3D <125 IRQ_TYPE_LEVEL_LOW>; + + irq-gpios =3D <&tlmm 125 GPIO_ACTIVE_HIGH>; + switch-gpios =3D <&tlmm 136 GPIO_ACTIVE_HIGH>; + reset-gpios =3D <&tlmm 99 GPIO_ACTIVE_LOW>; + + avdd-supply =3D <&vreg_l14a_1p8>; + vdd-supply =3D <&vreg_l19a_3p3>; + + touchscreen-size-x =3D <1079>; + touchscreen-size-y =3D <2159>; + }; }; =20 &mdss_dsi0 { --=20 2.51.0