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

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

 



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@xxxxxxxxxxx>
---
 drivers/input/misc/iqs269a.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

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);
-- 
2.7.4




[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