aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/touchscreen/imx6ul_tsc.c
diff options
context:
space:
mode:
authorHaibo Chen <haibo.chen@nxp.com>2016-11-30 09:02:06 -0800
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2016-11-30 17:44:28 -0800
commit70f5a294ad2eec3f896dafb83075cb8f04d65e92 (patch)
treea010d1a1cef30903ebe2e06a5962ae995aa5fcf9 /drivers/input/touchscreen/imx6ul_tsc.c
parentInput: drv2667 - fix misuse of regmap_update_bits (diff)
downloadlinux-dev-70f5a294ad2eec3f896dafb83075cb8f04d65e92.tar.xz
linux-dev-70f5a294ad2eec3f896dafb83075cb8f04d65e92.zip
Input: imx6ul_tsc - add mask when set REG_ADC_CFG
Add mask of each function bits of REG_ADC_CFG, and clear these function bits first, otherwise use '|=' operation may get the wrong setting which depends on the original value of REG_ADC_CFG. Signed-off-by: Haibo Chen <haibo.chen@nxp.com> Reviewed-by: Guy Shapiro <guy.shapiro@mobi-wize.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Diffstat (limited to 'drivers/input/touchscreen/imx6ul_tsc.c')
-rw-r--r--drivers/input/touchscreen/imx6ul_tsc.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/input/touchscreen/imx6ul_tsc.c b/drivers/input/touchscreen/imx6ul_tsc.c
index 00b336f37fb3..5babefef99a1 100644
--- a/drivers/input/touchscreen/imx6ul_tsc.c
+++ b/drivers/input/touchscreen/imx6ul_tsc.c
@@ -29,11 +29,16 @@
#define ADC_CAL (0x1 << 7)
#define ADC_CALF 0x2
#define ADC_12BIT_MODE (0x2 << 2)
+#define ADC_CONV_MODE_MASK (0x3 << 2)
#define ADC_IPG_CLK 0x00
+#define ADC_INPUT_CLK_MASK 0x3
#define ADC_CLK_DIV_8 (0x03 << 5)
+#define ADC_CLK_DIV_MASK (0x3 << 5)
#define ADC_SHORT_SAMPLE_MODE (0x0 << 4)
+#define ADC_SAMPLE_MODE_MASK (0x1 << 4)
#define ADC_HARDWARE_TRIGGER (0x1 << 13)
#define ADC_AVGS_SHIFT 14
+#define ADC_AVGS_MASK (0x3 << 14)
#define SELECT_CHANNEL_4 0x04
#define SELECT_CHANNEL_1 0x01
#define DISABLE_CONVERSION_INT (0x0 << 7)
@@ -108,10 +113,14 @@ static int imx6ul_adc_init(struct imx6ul_tsc *tsc)
reinit_completion(&tsc->completion);
adc_cfg = readl(tsc->adc_regs + REG_ADC_CFG);
+ adc_cfg &= ~(ADC_CONV_MODE_MASK | ADC_INPUT_CLK_MASK);
adc_cfg |= ADC_12BIT_MODE | ADC_IPG_CLK;
+ adc_cfg &= ~(ADC_CLK_DIV_MASK | ADC_SAMPLE_MODE_MASK);
adc_cfg |= ADC_CLK_DIV_8 | ADC_SHORT_SAMPLE_MODE;
- if (tsc->average_samples)
+ if (tsc->average_samples) {
+ adc_cfg &= ~ADC_AVGS_MASK;
adc_cfg |= (tsc->average_samples - 1) << ADC_AVGS_SHIFT;
+ }
adc_cfg &= ~ADC_HARDWARE_TRIGGER;
writel(adc_cfg, tsc->adc_regs + REG_ADC_CFG);