diff mbox series

[6/6] input: iqs269a: Disable channels before configuring them

Message ID 1597612467-15093-7-git-send-email-jeff@labundy.com
State New
Headers show
Series Add support for slider gestures and OTP variants | expand

Commit Message

Jeff LaBundy Aug. 16, 2020, 9:14 p.m. UTC
Unless it is being done as part of servicing a soft reset interrupt,
configuring channels on-the-fly (as is the case when writing to the
ati_trigger attribute) may cause GPIO3 (which reflects the state of
touch for a selected channel) to be inadvertently asserted.

To solve this problem, disable all channels before configuring them.
The desired channels are subsequently re-enabled as part of running
calibration (ATI).

Signed-off-by: Jeff LaBundy <jeff@labundy.com>
---
 drivers/input/misc/iqs269a.c | 10 ++++++++++
 1 file changed, 10 insertions(+)
diff mbox series

Patch

diff --git a/drivers/input/misc/iqs269a.c b/drivers/input/misc/iqs269a.c
index 4a0e4ec..cb2773a 100644
--- a/drivers/input/misc/iqs269a.c
+++ b/drivers/input/misc/iqs269a.c
@@ -61,6 +61,7 @@ 
 #define IQS269_SYS_SETTINGS_REDO_ATI		BIT(2)
 #define IQS269_SYS_SETTINGS_ACK_RESET		BIT(0)
 
+#define IQS269_FILT_STR_ACTIVE_CH		0x81
 #define IQS269_FILT_STR_LP_LTA_MASK		GENMASK(7, 6)
 #define IQS269_FILT_STR_LP_LTA_SHIFT		6
 #define IQS269_FILT_STR_LP_CNT_MASK		GENMASK(5, 4)
@@ -1222,6 +1223,15 @@  static int iqs269_dev_init(struct iqs269_private *iqs269)
 			goto err_mutex;
 	}
 
+	/*
+	 * Temporarily disable all channels to prevent the GPIO3 pin from being
+	 * asserted during subsequent register writes in case this function was
+	 * not preceded by a soft reset.
+	 */
+	error = regmap_write(iqs269->regmap, IQS269_FILT_STR_ACTIVE_CH, 0);
+	if (error)
+		goto err_mutex;
+
 	error = regmap_update_bits(iqs269->regmap, IQS269_HALL_UI,
 				   IQS269_HALL_UI_ENABLE,
 				   iqs269->hall_enable ? ~0 : 0);