Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: imx6ul_tsc - use BIT, FIELD_{GET,PREP} and GENMASK macros

Replace opencoded masking and shifting, with BIT(), GENMASK(),
FIELD_GET() and FIELD_PREP() macros.

Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20250917080534.1772202-3-dario.binacchi@amarulasolutions.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Dario Binacchi and committed by
Dmitry Torokhov
05fcd78b 6c521885

+54 -42
+54 -42
drivers/input/touchscreen/imx6ul_tsc.c
··· 7 7 #include <linux/errno.h> 8 8 #include <linux/kernel.h> 9 9 #include <linux/module.h> 10 + #include <linux/bitfield.h> 10 11 #include <linux/gpio/consumer.h> 11 12 #include <linux/input.h> 12 13 #include <linux/slab.h> ··· 21 20 #include <linux/log2.h> 22 21 23 22 /* ADC configuration registers field define */ 24 - #define ADC_AIEN (0x1 << 7) 23 + #define ADC_AIEN BIT(7) 24 + #define ADC_ADCH_MASK GENMASK(4, 0) 25 25 #define ADC_CONV_DISABLE 0x1F 26 - #define ADC_AVGE (0x1 << 5) 27 - #define ADC_CAL (0x1 << 7) 28 - #define ADC_CALF 0x2 29 - #define ADC_12BIT_MODE (0x2 << 2) 30 - #define ADC_CONV_MODE_MASK (0x3 << 2) 26 + #define ADC_AVGE BIT(5) 27 + #define ADC_CAL BIT(7) 28 + #define ADC_CALF BIT(1) 29 + #define ADC_CONV_MODE_MASK GENMASK(3, 2) 30 + #define ADC_12BIT_MODE 0x2 31 31 #define ADC_IPG_CLK 0x00 32 - #define ADC_INPUT_CLK_MASK 0x3 33 - #define ADC_CLK_DIV_8 (0x03 << 5) 34 - #define ADC_CLK_DIV_MASK (0x3 << 5) 35 - #define ADC_SHORT_SAMPLE_MODE (0x0 << 4) 36 - #define ADC_SAMPLE_MODE_MASK (0x1 << 4) 37 - #define ADC_HARDWARE_TRIGGER (0x1 << 13) 38 - #define ADC_AVGS_SHIFT 14 39 - #define ADC_AVGS_MASK (0x3 << 14) 32 + #define ADC_INPUT_CLK_MASK GENMASK(1, 0) 33 + #define ADC_CLK_DIV_8 0x03 34 + #define ADC_CLK_DIV_MASK GENMASK(6, 5) 35 + #define ADC_SAMPLE_MODE BIT(4) 36 + #define ADC_HARDWARE_TRIGGER BIT(13) 37 + #define ADC_AVGS_MASK GENMASK(15, 14) 40 38 #define SELECT_CHANNEL_4 0x04 41 39 #define SELECT_CHANNEL_1 0x01 42 - #define DISABLE_CONVERSION_INT (0x0 << 7) 43 40 44 41 /* ADC registers */ 45 42 #define REG_ADC_HC0 0x00 ··· 64 65 #define REG_TSC_DEBUG_MODE 0x70 65 66 #define REG_TSC_DEBUG_MODE2 0x80 66 67 68 + /* TSC_MEASURE_VALUE register field define */ 69 + #define X_VALUE_MASK GENMASK(27, 16) 70 + #define Y_VALUE_MASK GENMASK(11, 0) 71 + 67 72 /* TSC configuration registers field define */ 68 - #define DETECT_4_WIRE_MODE (0x0 << 4) 69 - #define AUTO_MEASURE 0x1 70 - #define MEASURE_SIGNAL 0x1 71 - #define DETECT_SIGNAL (0x1 << 4) 72 - #define VALID_SIGNAL (0x1 << 8) 73 - #define MEASURE_INT_EN 0x1 74 - #define MEASURE_SIG_EN 0x1 75 - #define VALID_SIG_EN (0x1 << 8) 76 - #define DE_GLITCH_2 (0x2 << 29) 77 - #define START_SENSE (0x1 << 12) 78 - #define TSC_DISABLE (0x1 << 16) 73 + #define MEASURE_DELAY_TIME_MASK GENMASK(31, 8) 74 + #define DETECT_5_WIRE_MODE BIT(4) 75 + #define AUTO_MEASURE BIT(0) 76 + #define MEASURE_SIGNAL BIT(0) 77 + #define DETECT_SIGNAL BIT(4) 78 + #define VALID_SIGNAL BIT(8) 79 + #define MEASURE_INT_EN BIT(0) 80 + #define MEASURE_SIG_EN BIT(0) 81 + #define VALID_SIG_EN BIT(8) 82 + #define DE_GLITCH_MASK GENMASK(30, 29) 83 + #define DE_GLITCH_2 0x02 84 + #define START_SENSE BIT(12) 85 + #define TSC_DISABLE BIT(16) 79 86 #define DETECT_MODE 0x2 87 + #define STATE_MACHINE_MASK GENMASK(22, 20) 80 88 81 89 struct imx6ul_tsc { 82 90 struct device *dev; ··· 118 112 119 113 adc_cfg = readl(tsc->adc_regs + REG_ADC_CFG); 120 114 adc_cfg &= ~(ADC_CONV_MODE_MASK | ADC_INPUT_CLK_MASK); 121 - adc_cfg |= ADC_12BIT_MODE | ADC_IPG_CLK; 122 - adc_cfg &= ~(ADC_CLK_DIV_MASK | ADC_SAMPLE_MODE_MASK); 123 - adc_cfg |= ADC_CLK_DIV_8 | ADC_SHORT_SAMPLE_MODE; 115 + adc_cfg |= FIELD_PREP(ADC_CONV_MODE_MASK, ADC_12BIT_MODE) | 116 + FIELD_PREP(ADC_INPUT_CLK_MASK, ADC_IPG_CLK); 117 + adc_cfg &= ~(ADC_CLK_DIV_MASK | ADC_SAMPLE_MODE); 118 + adc_cfg |= FIELD_PREP(ADC_CLK_DIV_MASK, ADC_CLK_DIV_8); 124 119 if (tsc->average_enable) { 125 120 adc_cfg &= ~ADC_AVGS_MASK; 126 - adc_cfg |= (tsc->average_select) << ADC_AVGS_SHIFT; 121 + adc_cfg |= FIELD_PREP(ADC_AVGS_MASK, tsc->average_select); 127 122 } 128 123 adc_cfg &= ~ADC_HARDWARE_TRIGGER; 129 124 writel(adc_cfg, tsc->adc_regs + REG_ADC_CFG); 130 125 131 126 /* enable calibration interrupt */ 132 127 adc_hc |= ADC_AIEN; 133 - adc_hc |= ADC_CONV_DISABLE; 128 + adc_hc |= FIELD_PREP(ADC_ADCH_MASK, ADC_CONV_DISABLE); 134 129 writel(adc_hc, tsc->adc_regs + REG_ADC_HC0); 135 130 136 131 /* start ADC calibration */ ··· 171 164 { 172 165 u32 adc_hc0, adc_hc1, adc_hc2, adc_hc3, adc_hc4; 173 166 174 - adc_hc0 = DISABLE_CONVERSION_INT; 167 + adc_hc0 = FIELD_PREP(ADC_AIEN, 0); 175 168 writel(adc_hc0, tsc->adc_regs + REG_ADC_HC0); 176 169 177 - adc_hc1 = DISABLE_CONVERSION_INT | SELECT_CHANNEL_4; 170 + adc_hc1 = FIELD_PREP(ADC_AIEN, 0) | 171 + FIELD_PREP(ADC_ADCH_MASK, SELECT_CHANNEL_4); 178 172 writel(adc_hc1, tsc->adc_regs + REG_ADC_HC1); 179 173 180 - adc_hc2 = DISABLE_CONVERSION_INT; 174 + adc_hc2 = FIELD_PREP(ADC_AIEN, 0); 181 175 writel(adc_hc2, tsc->adc_regs + REG_ADC_HC2); 182 176 183 - adc_hc3 = DISABLE_CONVERSION_INT | SELECT_CHANNEL_1; 177 + adc_hc3 = FIELD_PREP(ADC_AIEN, 0) | 178 + FIELD_PREP(ADC_ADCH_MASK, SELECT_CHANNEL_1); 184 179 writel(adc_hc3, tsc->adc_regs + REG_ADC_HC3); 185 180 186 - adc_hc4 = DISABLE_CONVERSION_INT; 181 + adc_hc4 = FIELD_PREP(ADC_AIEN, 0); 187 182 writel(adc_hc4, tsc->adc_regs + REG_ADC_HC4); 188 183 } 189 184 ··· 197 188 static void imx6ul_tsc_set(struct imx6ul_tsc *tsc) 198 189 { 199 190 u32 basic_setting = 0; 191 + u32 debug_mode2; 200 192 u32 start; 201 193 202 - basic_setting |= tsc->measure_delay_time << 8; 203 - basic_setting |= DETECT_4_WIRE_MODE | AUTO_MEASURE; 194 + basic_setting |= FIELD_PREP(MEASURE_DELAY_TIME_MASK, 195 + tsc->measure_delay_time); 196 + basic_setting |= AUTO_MEASURE; 204 197 writel(basic_setting, tsc->tsc_regs + REG_TSC_BASIC_SETTING); 205 198 206 - writel(DE_GLITCH_2, tsc->tsc_regs + REG_TSC_DEBUG_MODE2); 199 + debug_mode2 = FIELD_PREP(DE_GLITCH_MASK, DE_GLITCH_2); 200 + writel(debug_mode2, tsc->tsc_regs + REG_TSC_DEBUG_MODE2); 207 201 208 202 writel(tsc->pre_charge_time, tsc->tsc_regs + REG_TSC_PRE_CHARGE_TIME); 209 203 writel(MEASURE_INT_EN, tsc->tsc_regs + REG_TSC_INT_EN); ··· 262 250 263 251 usleep_range(200, 400); 264 252 debug_mode2 = readl(tsc->tsc_regs + REG_TSC_DEBUG_MODE2); 265 - state_machine = (debug_mode2 >> 20) & 0x7; 253 + state_machine = FIELD_GET(STATE_MACHINE_MASK, debug_mode2); 266 254 } while (state_machine != DETECT_MODE); 267 255 268 256 usleep_range(200, 400); ··· 290 278 291 279 if (status & MEASURE_SIGNAL) { 292 280 value = readl(tsc->tsc_regs + REG_TSC_MEASURE_VALUE); 293 - x = (value >> 16) & 0x0fff; 294 - y = value & 0x0fff; 281 + x = FIELD_GET(X_VALUE_MASK, value); 282 + y = FIELD_GET(Y_VALUE_MASK, value); 295 283 296 284 /* 297 285 * In detect mode, we can get the xnur gpio value,