cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

iqs269a.c (45835B)


      1// SPDX-License-Identifier: GPL-2.0+
      2/*
      3 * Azoteq IQS269A Capacitive Touch Controller
      4 *
      5 * Copyright (C) 2020 Jeff LaBundy <jeff@labundy.com>
      6 *
      7 * This driver registers up to 3 input devices: one representing capacitive or
      8 * inductive keys as well as Hall-effect switches, and one for each of the two
      9 * axial sliders presented by the device.
     10 */
     11
     12#include <linux/delay.h>
     13#include <linux/device.h>
     14#include <linux/err.h>
     15#include <linux/i2c.h>
     16#include <linux/input.h>
     17#include <linux/interrupt.h>
     18#include <linux/kernel.h>
     19#include <linux/module.h>
     20#include <linux/mutex.h>
     21#include <linux/of_device.h>
     22#include <linux/property.h>
     23#include <linux/regmap.h>
     24#include <linux/slab.h>
     25
     26#define IQS269_VER_INFO				0x00
     27#define IQS269_VER_INFO_PROD_NUM		0x4F
     28
     29#define IQS269_SYS_FLAGS			0x02
     30#define IQS269_SYS_FLAGS_SHOW_RESET		BIT(15)
     31#define IQS269_SYS_FLAGS_PWR_MODE_MASK		GENMASK(12, 11)
     32#define IQS269_SYS_FLAGS_PWR_MODE_SHIFT		11
     33#define IQS269_SYS_FLAGS_IN_ATI			BIT(10)
     34
     35#define IQS269_CHx_COUNTS			0x08
     36
     37#define IQS269_SLIDER_X				0x30
     38
     39#define IQS269_CAL_DATA_A			0x35
     40#define IQS269_CAL_DATA_A_HALL_BIN_L_MASK	GENMASK(15, 12)
     41#define IQS269_CAL_DATA_A_HALL_BIN_L_SHIFT	12
     42#define IQS269_CAL_DATA_A_HALL_BIN_R_MASK	GENMASK(11, 8)
     43#define IQS269_CAL_DATA_A_HALL_BIN_R_SHIFT	8
     44
     45#define IQS269_SYS_SETTINGS			0x80
     46#define IQS269_SYS_SETTINGS_CLK_DIV		BIT(15)
     47#define IQS269_SYS_SETTINGS_ULP_AUTO		BIT(14)
     48#define IQS269_SYS_SETTINGS_DIS_AUTO		BIT(13)
     49#define IQS269_SYS_SETTINGS_PWR_MODE_MASK	GENMASK(12, 11)
     50#define IQS269_SYS_SETTINGS_PWR_MODE_SHIFT	11
     51#define IQS269_SYS_SETTINGS_PWR_MODE_MAX	3
     52#define IQS269_SYS_SETTINGS_ULP_UPDATE_MASK	GENMASK(10, 8)
     53#define IQS269_SYS_SETTINGS_ULP_UPDATE_SHIFT	8
     54#define IQS269_SYS_SETTINGS_ULP_UPDATE_MAX	7
     55#define IQS269_SYS_SETTINGS_RESEED_OFFSET	BIT(6)
     56#define IQS269_SYS_SETTINGS_EVENT_MODE		BIT(5)
     57#define IQS269_SYS_SETTINGS_EVENT_MODE_LP	BIT(4)
     58#define IQS269_SYS_SETTINGS_REDO_ATI		BIT(2)
     59#define IQS269_SYS_SETTINGS_ACK_RESET		BIT(0)
     60
     61#define IQS269_FILT_STR_LP_LTA_MASK		GENMASK(7, 6)
     62#define IQS269_FILT_STR_LP_LTA_SHIFT		6
     63#define IQS269_FILT_STR_LP_CNT_MASK		GENMASK(5, 4)
     64#define IQS269_FILT_STR_LP_CNT_SHIFT		4
     65#define IQS269_FILT_STR_NP_LTA_MASK		GENMASK(3, 2)
     66#define IQS269_FILT_STR_NP_LTA_SHIFT		2
     67#define IQS269_FILT_STR_NP_CNT_MASK		GENMASK(1, 0)
     68#define IQS269_FILT_STR_MAX			3
     69
     70#define IQS269_EVENT_MASK_SYS			BIT(6)
     71#define IQS269_EVENT_MASK_DEEP			BIT(2)
     72#define IQS269_EVENT_MASK_TOUCH			BIT(1)
     73#define IQS269_EVENT_MASK_PROX			BIT(0)
     74
     75#define IQS269_RATE_NP_MS_MAX			255
     76#define IQS269_RATE_LP_MS_MAX			255
     77#define IQS269_RATE_ULP_MS_MAX			4080
     78#define IQS269_TIMEOUT_PWR_MS_MAX		130560
     79#define IQS269_TIMEOUT_LTA_MS_MAX		130560
     80
     81#define IQS269_MISC_A_ATI_BAND_DISABLE		BIT(15)
     82#define IQS269_MISC_A_ATI_LP_ONLY		BIT(14)
     83#define IQS269_MISC_A_ATI_BAND_TIGHTEN		BIT(13)
     84#define IQS269_MISC_A_FILT_DISABLE		BIT(12)
     85#define IQS269_MISC_A_GPIO3_SELECT_MASK		GENMASK(10, 8)
     86#define IQS269_MISC_A_GPIO3_SELECT_SHIFT	8
     87#define IQS269_MISC_A_DUAL_DIR			BIT(6)
     88#define IQS269_MISC_A_TX_FREQ_MASK		GENMASK(5, 4)
     89#define IQS269_MISC_A_TX_FREQ_SHIFT		4
     90#define IQS269_MISC_A_TX_FREQ_MAX		3
     91#define IQS269_MISC_A_GLOBAL_CAP_SIZE		BIT(0)
     92
     93#define IQS269_MISC_B_RESEED_UI_SEL_MASK	GENMASK(7, 6)
     94#define IQS269_MISC_B_RESEED_UI_SEL_SHIFT	6
     95#define IQS269_MISC_B_RESEED_UI_SEL_MAX		3
     96#define IQS269_MISC_B_TRACKING_UI_ENABLE	BIT(4)
     97#define IQS269_MISC_B_FILT_STR_SLIDER		GENMASK(1, 0)
     98
     99#define IQS269_CHx_SETTINGS			0x8C
    100
    101#define IQS269_CHx_ENG_A_MEAS_CAP_SIZE		BIT(15)
    102#define IQS269_CHx_ENG_A_RX_GND_INACTIVE	BIT(13)
    103#define IQS269_CHx_ENG_A_LOCAL_CAP_SIZE		BIT(12)
    104#define IQS269_CHx_ENG_A_ATI_MODE_MASK		GENMASK(9, 8)
    105#define IQS269_CHx_ENG_A_ATI_MODE_SHIFT		8
    106#define IQS269_CHx_ENG_A_ATI_MODE_MAX		3
    107#define IQS269_CHx_ENG_A_INV_LOGIC		BIT(7)
    108#define IQS269_CHx_ENG_A_PROJ_BIAS_MASK		GENMASK(6, 5)
    109#define IQS269_CHx_ENG_A_PROJ_BIAS_SHIFT	5
    110#define IQS269_CHx_ENG_A_PROJ_BIAS_MAX		3
    111#define IQS269_CHx_ENG_A_SENSE_MODE_MASK	GENMASK(3, 0)
    112#define IQS269_CHx_ENG_A_SENSE_MODE_MAX		15
    113
    114#define IQS269_CHx_ENG_B_LOCAL_CAP_ENABLE	BIT(13)
    115#define IQS269_CHx_ENG_B_SENSE_FREQ_MASK	GENMASK(10, 9)
    116#define IQS269_CHx_ENG_B_SENSE_FREQ_SHIFT	9
    117#define IQS269_CHx_ENG_B_SENSE_FREQ_MAX		3
    118#define IQS269_CHx_ENG_B_STATIC_ENABLE		BIT(8)
    119#define IQS269_CHx_ENG_B_ATI_BASE_MASK		GENMASK(7, 6)
    120#define IQS269_CHx_ENG_B_ATI_BASE_75		0x00
    121#define IQS269_CHx_ENG_B_ATI_BASE_100		0x40
    122#define IQS269_CHx_ENG_B_ATI_BASE_150		0x80
    123#define IQS269_CHx_ENG_B_ATI_BASE_200		0xC0
    124#define IQS269_CHx_ENG_B_ATI_TARGET_MASK	GENMASK(5, 0)
    125#define IQS269_CHx_ENG_B_ATI_TARGET_MAX		2016
    126
    127#define IQS269_CHx_WEIGHT_MAX			255
    128#define IQS269_CHx_THRESH_MAX			255
    129#define IQS269_CHx_HYST_DEEP_MASK		GENMASK(7, 4)
    130#define IQS269_CHx_HYST_DEEP_SHIFT		4
    131#define IQS269_CHx_HYST_TOUCH_MASK		GENMASK(3, 0)
    132#define IQS269_CHx_HYST_MAX			15
    133
    134#define IQS269_CHx_HALL_INACTIVE		6
    135#define IQS269_CHx_HALL_ACTIVE			7
    136
    137#define IQS269_HALL_PAD_R			BIT(0)
    138#define IQS269_HALL_PAD_L			BIT(1)
    139#define IQS269_HALL_PAD_INV			BIT(6)
    140
    141#define IQS269_HALL_UI				0xF5
    142#define IQS269_HALL_UI_ENABLE			BIT(15)
    143
    144#define IQS269_MAX_REG				0xFF
    145
    146#define IQS269_NUM_CH				8
    147#define IQS269_NUM_SL				2
    148
    149#define IQS269_ATI_POLL_SLEEP_US		(iqs269->delay_mult * 10000)
    150#define IQS269_ATI_POLL_TIMEOUT_US		(iqs269->delay_mult * 500000)
    151#define IQS269_ATI_STABLE_DELAY_MS		(iqs269->delay_mult * 150)
    152
    153#define IQS269_PWR_MODE_POLL_SLEEP_US		IQS269_ATI_POLL_SLEEP_US
    154#define IQS269_PWR_MODE_POLL_TIMEOUT_US		IQS269_ATI_POLL_TIMEOUT_US
    155
    156#define iqs269_irq_wait()			usleep_range(100, 150)
    157
    158enum iqs269_local_cap_size {
    159	IQS269_LOCAL_CAP_SIZE_0,
    160	IQS269_LOCAL_CAP_SIZE_GLOBAL_ONLY,
    161	IQS269_LOCAL_CAP_SIZE_GLOBAL_0pF5,
    162};
    163
    164enum iqs269_st_offs {
    165	IQS269_ST_OFFS_PROX,
    166	IQS269_ST_OFFS_DIR,
    167	IQS269_ST_OFFS_TOUCH,
    168	IQS269_ST_OFFS_DEEP,
    169};
    170
    171enum iqs269_th_offs {
    172	IQS269_TH_OFFS_PROX,
    173	IQS269_TH_OFFS_TOUCH,
    174	IQS269_TH_OFFS_DEEP,
    175};
    176
    177enum iqs269_event_id {
    178	IQS269_EVENT_PROX_DN,
    179	IQS269_EVENT_PROX_UP,
    180	IQS269_EVENT_TOUCH_DN,
    181	IQS269_EVENT_TOUCH_UP,
    182	IQS269_EVENT_DEEP_DN,
    183	IQS269_EVENT_DEEP_UP,
    184};
    185
    186struct iqs269_switch_desc {
    187	unsigned int code;
    188	bool enabled;
    189};
    190
    191struct iqs269_event_desc {
    192	const char *name;
    193	enum iqs269_st_offs st_offs;
    194	enum iqs269_th_offs th_offs;
    195	bool dir_up;
    196	u8 mask;
    197};
    198
    199static const struct iqs269_event_desc iqs269_events[] = {
    200	[IQS269_EVENT_PROX_DN] = {
    201		.name = "event-prox",
    202		.st_offs = IQS269_ST_OFFS_PROX,
    203		.th_offs = IQS269_TH_OFFS_PROX,
    204		.mask = IQS269_EVENT_MASK_PROX,
    205	},
    206	[IQS269_EVENT_PROX_UP] = {
    207		.name = "event-prox-alt",
    208		.st_offs = IQS269_ST_OFFS_PROX,
    209		.th_offs = IQS269_TH_OFFS_PROX,
    210		.dir_up = true,
    211		.mask = IQS269_EVENT_MASK_PROX,
    212	},
    213	[IQS269_EVENT_TOUCH_DN] = {
    214		.name = "event-touch",
    215		.st_offs = IQS269_ST_OFFS_TOUCH,
    216		.th_offs = IQS269_TH_OFFS_TOUCH,
    217		.mask = IQS269_EVENT_MASK_TOUCH,
    218	},
    219	[IQS269_EVENT_TOUCH_UP] = {
    220		.name = "event-touch-alt",
    221		.st_offs = IQS269_ST_OFFS_TOUCH,
    222		.th_offs = IQS269_TH_OFFS_TOUCH,
    223		.dir_up = true,
    224		.mask = IQS269_EVENT_MASK_TOUCH,
    225	},
    226	[IQS269_EVENT_DEEP_DN] = {
    227		.name = "event-deep",
    228		.st_offs = IQS269_ST_OFFS_DEEP,
    229		.th_offs = IQS269_TH_OFFS_DEEP,
    230		.mask = IQS269_EVENT_MASK_DEEP,
    231	},
    232	[IQS269_EVENT_DEEP_UP] = {
    233		.name = "event-deep-alt",
    234		.st_offs = IQS269_ST_OFFS_DEEP,
    235		.th_offs = IQS269_TH_OFFS_DEEP,
    236		.dir_up = true,
    237		.mask = IQS269_EVENT_MASK_DEEP,
    238	},
    239};
    240
    241struct iqs269_ver_info {
    242	u8 prod_num;
    243	u8 sw_num;
    244	u8 hw_num;
    245	u8 padding;
    246} __packed;
    247
    248struct iqs269_sys_reg {
    249	__be16 general;
    250	u8 active;
    251	u8 filter;
    252	u8 reseed;
    253	u8 event_mask;
    254	u8 rate_np;
    255	u8 rate_lp;
    256	u8 rate_ulp;
    257	u8 timeout_pwr;
    258	u8 timeout_rdy;
    259	u8 timeout_lta;
    260	__be16 misc_a;
    261	__be16 misc_b;
    262	u8 blocking;
    263	u8 padding;
    264	u8 slider_select[IQS269_NUM_SL];
    265	u8 timeout_tap;
    266	u8 timeout_swipe;
    267	u8 thresh_swipe;
    268	u8 redo_ati;
    269} __packed;
    270
    271struct iqs269_ch_reg {
    272	u8 rx_enable;
    273	u8 tx_enable;
    274	__be16 engine_a;
    275	__be16 engine_b;
    276	__be16 ati_comp;
    277	u8 thresh[3];
    278	u8 hyst;
    279	u8 assoc_select;
    280	u8 assoc_weight;
    281} __packed;
    282
    283struct iqs269_flags {
    284	__be16 system;
    285	u8 gesture;
    286	u8 padding;
    287	u8 states[4];
    288} __packed;
    289
    290struct iqs269_private {
    291	struct i2c_client *client;
    292	struct regmap *regmap;
    293	struct mutex lock;
    294	struct iqs269_switch_desc switches[ARRAY_SIZE(iqs269_events)];
    295	struct iqs269_ch_reg ch_reg[IQS269_NUM_CH];
    296	struct iqs269_sys_reg sys_reg;
    297	struct input_dev *keypad;
    298	struct input_dev *slider[IQS269_NUM_SL];
    299	unsigned int keycode[ARRAY_SIZE(iqs269_events) * IQS269_NUM_CH];
    300	unsigned int suspend_mode;
    301	unsigned int delay_mult;
    302	unsigned int ch_num;
    303	bool hall_enable;
    304	bool ati_current;
    305};
    306
    307static int iqs269_ati_mode_set(struct iqs269_private *iqs269,
    308			       unsigned int ch_num, unsigned int mode)
    309{
    310	u16 engine_a;
    311
    312	if (ch_num >= IQS269_NUM_CH)
    313		return -EINVAL;
    314
    315	if (mode > IQS269_CHx_ENG_A_ATI_MODE_MAX)
    316		return -EINVAL;
    317
    318	mutex_lock(&iqs269->lock);
    319
    320	engine_a = be16_to_cpu(iqs269->ch_reg[ch_num].engine_a);
    321
    322	engine_a &= ~IQS269_CHx_ENG_A_ATI_MODE_MASK;
    323	engine_a |= (mode << IQS269_CHx_ENG_A_ATI_MODE_SHIFT);
    324
    325	iqs269->ch_reg[ch_num].engine_a = cpu_to_be16(engine_a);
    326	iqs269->ati_current = false;
    327
    328	mutex_unlock(&iqs269->lock);
    329
    330	return 0;
    331}
    332
    333static int iqs269_ati_mode_get(struct iqs269_private *iqs269,
    334			       unsigned int ch_num, unsigned int *mode)
    335{
    336	u16 engine_a;
    337
    338	if (ch_num >= IQS269_NUM_CH)
    339		return -EINVAL;
    340
    341	mutex_lock(&iqs269->lock);
    342	engine_a = be16_to_cpu(iqs269->ch_reg[ch_num].engine_a);
    343	mutex_unlock(&iqs269->lock);
    344
    345	engine_a &= IQS269_CHx_ENG_A_ATI_MODE_MASK;
    346	*mode = (engine_a >> IQS269_CHx_ENG_A_ATI_MODE_SHIFT);
    347
    348	return 0;
    349}
    350
    351static int iqs269_ati_base_set(struct iqs269_private *iqs269,
    352			       unsigned int ch_num, unsigned int base)
    353{
    354	u16 engine_b;
    355
    356	if (ch_num >= IQS269_NUM_CH)
    357		return -EINVAL;
    358
    359	switch (base) {
    360	case 75:
    361		base = IQS269_CHx_ENG_B_ATI_BASE_75;
    362		break;
    363
    364	case 100:
    365		base = IQS269_CHx_ENG_B_ATI_BASE_100;
    366		break;
    367
    368	case 150:
    369		base = IQS269_CHx_ENG_B_ATI_BASE_150;
    370		break;
    371
    372	case 200:
    373		base = IQS269_CHx_ENG_B_ATI_BASE_200;
    374		break;
    375
    376	default:
    377		return -EINVAL;
    378	}
    379
    380	mutex_lock(&iqs269->lock);
    381
    382	engine_b = be16_to_cpu(iqs269->ch_reg[ch_num].engine_b);
    383
    384	engine_b &= ~IQS269_CHx_ENG_B_ATI_BASE_MASK;
    385	engine_b |= base;
    386
    387	iqs269->ch_reg[ch_num].engine_b = cpu_to_be16(engine_b);
    388	iqs269->ati_current = false;
    389
    390	mutex_unlock(&iqs269->lock);
    391
    392	return 0;
    393}
    394
    395static int iqs269_ati_base_get(struct iqs269_private *iqs269,
    396			       unsigned int ch_num, unsigned int *base)
    397{
    398	u16 engine_b;
    399
    400	if (ch_num >= IQS269_NUM_CH)
    401		return -EINVAL;
    402
    403	mutex_lock(&iqs269->lock);
    404	engine_b = be16_to_cpu(iqs269->ch_reg[ch_num].engine_b);
    405	mutex_unlock(&iqs269->lock);
    406
    407	switch (engine_b & IQS269_CHx_ENG_B_ATI_BASE_MASK) {
    408	case IQS269_CHx_ENG_B_ATI_BASE_75:
    409		*base = 75;
    410		return 0;
    411
    412	case IQS269_CHx_ENG_B_ATI_BASE_100:
    413		*base = 100;
    414		return 0;
    415
    416	case IQS269_CHx_ENG_B_ATI_BASE_150:
    417		*base = 150;
    418		return 0;
    419
    420	case IQS269_CHx_ENG_B_ATI_BASE_200:
    421		*base = 200;
    422		return 0;
    423
    424	default:
    425		return -EINVAL;
    426	}
    427}
    428
    429static int iqs269_ati_target_set(struct iqs269_private *iqs269,
    430				 unsigned int ch_num, unsigned int target)
    431{
    432	u16 engine_b;
    433
    434	if (ch_num >= IQS269_NUM_CH)
    435		return -EINVAL;
    436
    437	if (target > IQS269_CHx_ENG_B_ATI_TARGET_MAX)
    438		return -EINVAL;
    439
    440	mutex_lock(&iqs269->lock);
    441
    442	engine_b = be16_to_cpu(iqs269->ch_reg[ch_num].engine_b);
    443
    444	engine_b &= ~IQS269_CHx_ENG_B_ATI_TARGET_MASK;
    445	engine_b |= target / 32;
    446
    447	iqs269->ch_reg[ch_num].engine_b = cpu_to_be16(engine_b);
    448	iqs269->ati_current = false;
    449
    450	mutex_unlock(&iqs269->lock);
    451
    452	return 0;
    453}
    454
    455static int iqs269_ati_target_get(struct iqs269_private *iqs269,
    456				 unsigned int ch_num, unsigned int *target)
    457{
    458	u16 engine_b;
    459
    460	if (ch_num >= IQS269_NUM_CH)
    461		return -EINVAL;
    462
    463	mutex_lock(&iqs269->lock);
    464	engine_b = be16_to_cpu(iqs269->ch_reg[ch_num].engine_b);
    465	mutex_unlock(&iqs269->lock);
    466
    467	*target = (engine_b & IQS269_CHx_ENG_B_ATI_TARGET_MASK) * 32;
    468
    469	return 0;
    470}
    471
    472static int iqs269_parse_mask(const struct fwnode_handle *fwnode,
    473			     const char *propname, u8 *mask)
    474{
    475	unsigned int val[IQS269_NUM_CH];
    476	int count, error, i;
    477
    478	count = fwnode_property_count_u32(fwnode, propname);
    479	if (count < 0)
    480		return 0;
    481
    482	if (count > IQS269_NUM_CH)
    483		return -EINVAL;
    484
    485	error = fwnode_property_read_u32_array(fwnode, propname, val, count);
    486	if (error)
    487		return error;
    488
    489	*mask = 0;
    490
    491	for (i = 0; i < count; i++) {
    492		if (val[i] >= IQS269_NUM_CH)
    493			return -EINVAL;
    494
    495		*mask |= BIT(val[i]);
    496	}
    497
    498	return 0;
    499}
    500
    501static int iqs269_parse_chan(struct iqs269_private *iqs269,
    502			     const struct fwnode_handle *ch_node)
    503{
    504	struct i2c_client *client = iqs269->client;
    505	struct fwnode_handle *ev_node;
    506	struct iqs269_ch_reg *ch_reg;
    507	u16 engine_a, engine_b;
    508	unsigned int reg, val;
    509	int error, i;
    510
    511	error = fwnode_property_read_u32(ch_node, "reg", &reg);
    512	if (error) {
    513		dev_err(&client->dev, "Failed to read channel number: %d\n",
    514			error);
    515		return error;
    516	} else if (reg >= IQS269_NUM_CH) {
    517		dev_err(&client->dev, "Invalid channel number: %u\n", reg);
    518		return -EINVAL;
    519	}
    520
    521	iqs269->sys_reg.active |= BIT(reg);
    522	if (!fwnode_property_present(ch_node, "azoteq,reseed-disable"))
    523		iqs269->sys_reg.reseed |= BIT(reg);
    524
    525	if (fwnode_property_present(ch_node, "azoteq,blocking-enable"))
    526		iqs269->sys_reg.blocking |= BIT(reg);
    527
    528	if (fwnode_property_present(ch_node, "azoteq,slider0-select"))
    529		iqs269->sys_reg.slider_select[0] |= BIT(reg);
    530
    531	if (fwnode_property_present(ch_node, "azoteq,slider1-select"))
    532		iqs269->sys_reg.slider_select[1] |= BIT(reg);
    533
    534	ch_reg = &iqs269->ch_reg[reg];
    535
    536	error = regmap_raw_read(iqs269->regmap,
    537				IQS269_CHx_SETTINGS + reg * sizeof(*ch_reg) / 2,
    538				ch_reg, sizeof(*ch_reg));
    539	if (error)
    540		return error;
    541
    542	error = iqs269_parse_mask(ch_node, "azoteq,rx-enable",
    543				  &ch_reg->rx_enable);
    544	if (error) {
    545		dev_err(&client->dev, "Invalid channel %u RX enable mask: %d\n",
    546			reg, error);
    547		return error;
    548	}
    549
    550	error = iqs269_parse_mask(ch_node, "azoteq,tx-enable",
    551				  &ch_reg->tx_enable);
    552	if (error) {
    553		dev_err(&client->dev, "Invalid channel %u TX enable mask: %d\n",
    554			reg, error);
    555		return error;
    556	}
    557
    558	engine_a = be16_to_cpu(ch_reg->engine_a);
    559	engine_b = be16_to_cpu(ch_reg->engine_b);
    560
    561	engine_a |= IQS269_CHx_ENG_A_MEAS_CAP_SIZE;
    562	if (fwnode_property_present(ch_node, "azoteq,meas-cap-decrease"))
    563		engine_a &= ~IQS269_CHx_ENG_A_MEAS_CAP_SIZE;
    564
    565	engine_a |= IQS269_CHx_ENG_A_RX_GND_INACTIVE;
    566	if (fwnode_property_present(ch_node, "azoteq,rx-float-inactive"))
    567		engine_a &= ~IQS269_CHx_ENG_A_RX_GND_INACTIVE;
    568
    569	engine_a &= ~IQS269_CHx_ENG_A_LOCAL_CAP_SIZE;
    570	engine_b &= ~IQS269_CHx_ENG_B_LOCAL_CAP_ENABLE;
    571	if (!fwnode_property_read_u32(ch_node, "azoteq,local-cap-size", &val)) {
    572		switch (val) {
    573		case IQS269_LOCAL_CAP_SIZE_0:
    574			break;
    575
    576		case IQS269_LOCAL_CAP_SIZE_GLOBAL_0pF5:
    577			engine_a |= IQS269_CHx_ENG_A_LOCAL_CAP_SIZE;
    578			fallthrough;
    579
    580		case IQS269_LOCAL_CAP_SIZE_GLOBAL_ONLY:
    581			engine_b |= IQS269_CHx_ENG_B_LOCAL_CAP_ENABLE;
    582			break;
    583
    584		default:
    585			dev_err(&client->dev,
    586				"Invalid channel %u local cap. size: %u\n", reg,
    587				val);
    588			return -EINVAL;
    589		}
    590	}
    591
    592	engine_a &= ~IQS269_CHx_ENG_A_INV_LOGIC;
    593	if (fwnode_property_present(ch_node, "azoteq,invert-enable"))
    594		engine_a |= IQS269_CHx_ENG_A_INV_LOGIC;
    595
    596	if (!fwnode_property_read_u32(ch_node, "azoteq,proj-bias", &val)) {
    597		if (val > IQS269_CHx_ENG_A_PROJ_BIAS_MAX) {
    598			dev_err(&client->dev,
    599				"Invalid channel %u bias current: %u\n", reg,
    600				val);
    601			return -EINVAL;
    602		}
    603
    604		engine_a &= ~IQS269_CHx_ENG_A_PROJ_BIAS_MASK;
    605		engine_a |= (val << IQS269_CHx_ENG_A_PROJ_BIAS_SHIFT);
    606	}
    607
    608	if (!fwnode_property_read_u32(ch_node, "azoteq,sense-mode", &val)) {
    609		if (val > IQS269_CHx_ENG_A_SENSE_MODE_MAX) {
    610			dev_err(&client->dev,
    611				"Invalid channel %u sensing mode: %u\n", reg,
    612				val);
    613			return -EINVAL;
    614		}
    615
    616		engine_a &= ~IQS269_CHx_ENG_A_SENSE_MODE_MASK;
    617		engine_a |= val;
    618	}
    619
    620	if (!fwnode_property_read_u32(ch_node, "azoteq,sense-freq", &val)) {
    621		if (val > IQS269_CHx_ENG_B_SENSE_FREQ_MAX) {
    622			dev_err(&client->dev,
    623				"Invalid channel %u sensing frequency: %u\n",
    624				reg, val);
    625			return -EINVAL;
    626		}
    627
    628		engine_b &= ~IQS269_CHx_ENG_B_SENSE_FREQ_MASK;
    629		engine_b |= (val << IQS269_CHx_ENG_B_SENSE_FREQ_SHIFT);
    630	}
    631
    632	engine_b &= ~IQS269_CHx_ENG_B_STATIC_ENABLE;
    633	if (fwnode_property_present(ch_node, "azoteq,static-enable"))
    634		engine_b |= IQS269_CHx_ENG_B_STATIC_ENABLE;
    635
    636	ch_reg->engine_a = cpu_to_be16(engine_a);
    637	ch_reg->engine_b = cpu_to_be16(engine_b);
    638
    639	if (!fwnode_property_read_u32(ch_node, "azoteq,ati-mode", &val)) {
    640		error = iqs269_ati_mode_set(iqs269, reg, val);
    641		if (error) {
    642			dev_err(&client->dev,
    643				"Invalid channel %u ATI mode: %u\n", reg, val);
    644			return error;
    645		}
    646	}
    647
    648	if (!fwnode_property_read_u32(ch_node, "azoteq,ati-base", &val)) {
    649		error = iqs269_ati_base_set(iqs269, reg, val);
    650		if (error) {
    651			dev_err(&client->dev,
    652				"Invalid channel %u ATI base: %u\n", reg, val);
    653			return error;
    654		}
    655	}
    656
    657	if (!fwnode_property_read_u32(ch_node, "azoteq,ati-target", &val)) {
    658		error = iqs269_ati_target_set(iqs269, reg, val);
    659		if (error) {
    660			dev_err(&client->dev,
    661				"Invalid channel %u ATI target: %u\n", reg,
    662				val);
    663			return error;
    664		}
    665	}
    666
    667	error = iqs269_parse_mask(ch_node, "azoteq,assoc-select",
    668				  &ch_reg->assoc_select);
    669	if (error) {
    670		dev_err(&client->dev, "Invalid channel %u association: %d\n",
    671			reg, error);
    672		return error;
    673	}
    674
    675	if (!fwnode_property_read_u32(ch_node, "azoteq,assoc-weight", &val)) {
    676		if (val > IQS269_CHx_WEIGHT_MAX) {
    677			dev_err(&client->dev,
    678				"Invalid channel %u associated weight: %u\n",
    679				reg, val);
    680			return -EINVAL;
    681		}
    682
    683		ch_reg->assoc_weight = val;
    684	}
    685
    686	for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
    687		ev_node = fwnode_get_named_child_node(ch_node,
    688						      iqs269_events[i].name);
    689		if (!ev_node)
    690			continue;
    691
    692		if (!fwnode_property_read_u32(ev_node, "azoteq,thresh", &val)) {
    693			if (val > IQS269_CHx_THRESH_MAX) {
    694				dev_err(&client->dev,
    695					"Invalid channel %u threshold: %u\n",
    696					reg, val);
    697				return -EINVAL;
    698			}
    699
    700			ch_reg->thresh[iqs269_events[i].th_offs] = val;
    701		}
    702
    703		if (!fwnode_property_read_u32(ev_node, "azoteq,hyst", &val)) {
    704			u8 *hyst = &ch_reg->hyst;
    705
    706			if (val > IQS269_CHx_HYST_MAX) {
    707				dev_err(&client->dev,
    708					"Invalid channel %u hysteresis: %u\n",
    709					reg, val);
    710				return -EINVAL;
    711			}
    712
    713			if (i == IQS269_EVENT_DEEP_DN ||
    714			    i == IQS269_EVENT_DEEP_UP) {
    715				*hyst &= ~IQS269_CHx_HYST_DEEP_MASK;
    716				*hyst |= (val << IQS269_CHx_HYST_DEEP_SHIFT);
    717			} else if (i == IQS269_EVENT_TOUCH_DN ||
    718				   i == IQS269_EVENT_TOUCH_UP) {
    719				*hyst &= ~IQS269_CHx_HYST_TOUCH_MASK;
    720				*hyst |= val;
    721			}
    722		}
    723
    724		if (fwnode_property_read_u32(ev_node, "linux,code", &val))
    725			continue;
    726
    727		switch (reg) {
    728		case IQS269_CHx_HALL_ACTIVE:
    729			if (iqs269->hall_enable) {
    730				iqs269->switches[i].code = val;
    731				iqs269->switches[i].enabled = true;
    732			}
    733			fallthrough;
    734
    735		case IQS269_CHx_HALL_INACTIVE:
    736			if (iqs269->hall_enable)
    737				break;
    738			fallthrough;
    739
    740		default:
    741			iqs269->keycode[i * IQS269_NUM_CH + reg] = val;
    742		}
    743
    744		iqs269->sys_reg.event_mask &= ~iqs269_events[i].mask;
    745	}
    746
    747	return 0;
    748}
    749
    750static int iqs269_parse_prop(struct iqs269_private *iqs269)
    751{
    752	struct iqs269_sys_reg *sys_reg = &iqs269->sys_reg;
    753	struct i2c_client *client = iqs269->client;
    754	struct fwnode_handle *ch_node;
    755	u16 general, misc_a, misc_b;
    756	unsigned int val;
    757	int error;
    758
    759	iqs269->hall_enable = device_property_present(&client->dev,
    760						      "azoteq,hall-enable");
    761
    762	if (!device_property_read_u32(&client->dev, "azoteq,suspend-mode",
    763				      &val)) {
    764		if (val > IQS269_SYS_SETTINGS_PWR_MODE_MAX) {
    765			dev_err(&client->dev, "Invalid suspend mode: %u\n",
    766				val);
    767			return -EINVAL;
    768		}
    769
    770		iqs269->suspend_mode = val;
    771	}
    772
    773	error = regmap_raw_read(iqs269->regmap, IQS269_SYS_SETTINGS, sys_reg,
    774				sizeof(*sys_reg));
    775	if (error)
    776		return error;
    777
    778	if (!device_property_read_u32(&client->dev, "azoteq,filt-str-lp-lta",
    779				      &val)) {
    780		if (val > IQS269_FILT_STR_MAX) {
    781			dev_err(&client->dev, "Invalid filter strength: %u\n",
    782				val);
    783			return -EINVAL;
    784		}
    785
    786		sys_reg->filter &= ~IQS269_FILT_STR_LP_LTA_MASK;
    787		sys_reg->filter |= (val << IQS269_FILT_STR_LP_LTA_SHIFT);
    788	}
    789
    790	if (!device_property_read_u32(&client->dev, "azoteq,filt-str-lp-cnt",
    791				      &val)) {
    792		if (val > IQS269_FILT_STR_MAX) {
    793			dev_err(&client->dev, "Invalid filter strength: %u\n",
    794				val);
    795			return -EINVAL;
    796		}
    797
    798		sys_reg->filter &= ~IQS269_FILT_STR_LP_CNT_MASK;
    799		sys_reg->filter |= (val << IQS269_FILT_STR_LP_CNT_SHIFT);
    800	}
    801
    802	if (!device_property_read_u32(&client->dev, "azoteq,filt-str-np-lta",
    803				      &val)) {
    804		if (val > IQS269_FILT_STR_MAX) {
    805			dev_err(&client->dev, "Invalid filter strength: %u\n",
    806				val);
    807			return -EINVAL;
    808		}
    809
    810		sys_reg->filter &= ~IQS269_FILT_STR_NP_LTA_MASK;
    811		sys_reg->filter |= (val << IQS269_FILT_STR_NP_LTA_SHIFT);
    812	}
    813
    814	if (!device_property_read_u32(&client->dev, "azoteq,filt-str-np-cnt",
    815				      &val)) {
    816		if (val > IQS269_FILT_STR_MAX) {
    817			dev_err(&client->dev, "Invalid filter strength: %u\n",
    818				val);
    819			return -EINVAL;
    820		}
    821
    822		sys_reg->filter &= ~IQS269_FILT_STR_NP_CNT_MASK;
    823		sys_reg->filter |= val;
    824	}
    825
    826	if (!device_property_read_u32(&client->dev, "azoteq,rate-np-ms",
    827				      &val)) {
    828		if (val > IQS269_RATE_NP_MS_MAX) {
    829			dev_err(&client->dev, "Invalid report rate: %u\n", val);
    830			return -EINVAL;
    831		}
    832
    833		sys_reg->rate_np = val;
    834	}
    835
    836	if (!device_property_read_u32(&client->dev, "azoteq,rate-lp-ms",
    837				      &val)) {
    838		if (val > IQS269_RATE_LP_MS_MAX) {
    839			dev_err(&client->dev, "Invalid report rate: %u\n", val);
    840			return -EINVAL;
    841		}
    842
    843		sys_reg->rate_lp = val;
    844	}
    845
    846	if (!device_property_read_u32(&client->dev, "azoteq,rate-ulp-ms",
    847				      &val)) {
    848		if (val > IQS269_RATE_ULP_MS_MAX) {
    849			dev_err(&client->dev, "Invalid report rate: %u\n", val);
    850			return -EINVAL;
    851		}
    852
    853		sys_reg->rate_ulp = val / 16;
    854	}
    855
    856	if (!device_property_read_u32(&client->dev, "azoteq,timeout-pwr-ms",
    857				      &val)) {
    858		if (val > IQS269_TIMEOUT_PWR_MS_MAX) {
    859			dev_err(&client->dev, "Invalid timeout: %u\n", val);
    860			return -EINVAL;
    861		}
    862
    863		sys_reg->timeout_pwr = val / 512;
    864	}
    865
    866	if (!device_property_read_u32(&client->dev, "azoteq,timeout-lta-ms",
    867				      &val)) {
    868		if (val > IQS269_TIMEOUT_LTA_MS_MAX) {
    869			dev_err(&client->dev, "Invalid timeout: %u\n", val);
    870			return -EINVAL;
    871		}
    872
    873		sys_reg->timeout_lta = val / 512;
    874	}
    875
    876	misc_a = be16_to_cpu(sys_reg->misc_a);
    877	misc_b = be16_to_cpu(sys_reg->misc_b);
    878
    879	misc_a &= ~IQS269_MISC_A_ATI_BAND_DISABLE;
    880	if (device_property_present(&client->dev, "azoteq,ati-band-disable"))
    881		misc_a |= IQS269_MISC_A_ATI_BAND_DISABLE;
    882
    883	misc_a &= ~IQS269_MISC_A_ATI_LP_ONLY;
    884	if (device_property_present(&client->dev, "azoteq,ati-lp-only"))
    885		misc_a |= IQS269_MISC_A_ATI_LP_ONLY;
    886
    887	misc_a &= ~IQS269_MISC_A_ATI_BAND_TIGHTEN;
    888	if (device_property_present(&client->dev, "azoteq,ati-band-tighten"))
    889		misc_a |= IQS269_MISC_A_ATI_BAND_TIGHTEN;
    890
    891	misc_a &= ~IQS269_MISC_A_FILT_DISABLE;
    892	if (device_property_present(&client->dev, "azoteq,filt-disable"))
    893		misc_a |= IQS269_MISC_A_FILT_DISABLE;
    894
    895	if (!device_property_read_u32(&client->dev, "azoteq,gpio3-select",
    896				      &val)) {
    897		if (val >= IQS269_NUM_CH) {
    898			dev_err(&client->dev, "Invalid GPIO3 selection: %u\n",
    899				val);
    900			return -EINVAL;
    901		}
    902
    903		misc_a &= ~IQS269_MISC_A_GPIO3_SELECT_MASK;
    904		misc_a |= (val << IQS269_MISC_A_GPIO3_SELECT_SHIFT);
    905	}
    906
    907	misc_a &= ~IQS269_MISC_A_DUAL_DIR;
    908	if (device_property_present(&client->dev, "azoteq,dual-direction"))
    909		misc_a |= IQS269_MISC_A_DUAL_DIR;
    910
    911	if (!device_property_read_u32(&client->dev, "azoteq,tx-freq", &val)) {
    912		if (val > IQS269_MISC_A_TX_FREQ_MAX) {
    913			dev_err(&client->dev,
    914				"Invalid excitation frequency: %u\n", val);
    915			return -EINVAL;
    916		}
    917
    918		misc_a &= ~IQS269_MISC_A_TX_FREQ_MASK;
    919		misc_a |= (val << IQS269_MISC_A_TX_FREQ_SHIFT);
    920	}
    921
    922	misc_a &= ~IQS269_MISC_A_GLOBAL_CAP_SIZE;
    923	if (device_property_present(&client->dev, "azoteq,global-cap-increase"))
    924		misc_a |= IQS269_MISC_A_GLOBAL_CAP_SIZE;
    925
    926	if (!device_property_read_u32(&client->dev, "azoteq,reseed-select",
    927				      &val)) {
    928		if (val > IQS269_MISC_B_RESEED_UI_SEL_MAX) {
    929			dev_err(&client->dev, "Invalid reseed selection: %u\n",
    930				val);
    931			return -EINVAL;
    932		}
    933
    934		misc_b &= ~IQS269_MISC_B_RESEED_UI_SEL_MASK;
    935		misc_b |= (val << IQS269_MISC_B_RESEED_UI_SEL_SHIFT);
    936	}
    937
    938	misc_b &= ~IQS269_MISC_B_TRACKING_UI_ENABLE;
    939	if (device_property_present(&client->dev, "azoteq,tracking-enable"))
    940		misc_b |= IQS269_MISC_B_TRACKING_UI_ENABLE;
    941
    942	if (!device_property_read_u32(&client->dev, "azoteq,filt-str-slider",
    943				      &val)) {
    944		if (val > IQS269_FILT_STR_MAX) {
    945			dev_err(&client->dev, "Invalid filter strength: %u\n",
    946				val);
    947			return -EINVAL;
    948		}
    949
    950		misc_b &= ~IQS269_MISC_B_FILT_STR_SLIDER;
    951		misc_b |= val;
    952	}
    953
    954	sys_reg->misc_a = cpu_to_be16(misc_a);
    955	sys_reg->misc_b = cpu_to_be16(misc_b);
    956
    957	sys_reg->active = 0;
    958	sys_reg->reseed = 0;
    959
    960	sys_reg->blocking = 0;
    961
    962	sys_reg->slider_select[0] = 0;
    963	sys_reg->slider_select[1] = 0;
    964
    965	sys_reg->event_mask = ~((u8)IQS269_EVENT_MASK_SYS);
    966
    967	device_for_each_child_node(&client->dev, ch_node) {
    968		error = iqs269_parse_chan(iqs269, ch_node);
    969		if (error) {
    970			fwnode_handle_put(ch_node);
    971			return error;
    972		}
    973	}
    974
    975	/*
    976	 * Volunteer all active channels to participate in ATI when REDO-ATI is
    977	 * manually triggered.
    978	 */
    979	sys_reg->redo_ati = sys_reg->active;
    980
    981	general = be16_to_cpu(sys_reg->general);
    982
    983	if (device_property_present(&client->dev, "azoteq,clk-div")) {
    984		general |= IQS269_SYS_SETTINGS_CLK_DIV;
    985		iqs269->delay_mult = 4;
    986	} else {
    987		general &= ~IQS269_SYS_SETTINGS_CLK_DIV;
    988		iqs269->delay_mult = 1;
    989	}
    990
    991	/*
    992	 * Configure the device to automatically switch between normal and low-
    993	 * power modes as a function of sensing activity. Ultra-low-power mode,
    994	 * if enabled, is reserved for suspend.
    995	 */
    996	general &= ~IQS269_SYS_SETTINGS_ULP_AUTO;
    997	general &= ~IQS269_SYS_SETTINGS_DIS_AUTO;
    998	general &= ~IQS269_SYS_SETTINGS_PWR_MODE_MASK;
    999
   1000	if (!device_property_read_u32(&client->dev, "azoteq,ulp-update",
   1001				      &val)) {
   1002		if (val > IQS269_SYS_SETTINGS_ULP_UPDATE_MAX) {
   1003			dev_err(&client->dev, "Invalid update rate: %u\n", val);
   1004			return -EINVAL;
   1005		}
   1006
   1007		general &= ~IQS269_SYS_SETTINGS_ULP_UPDATE_MASK;
   1008		general |= (val << IQS269_SYS_SETTINGS_ULP_UPDATE_SHIFT);
   1009	}
   1010
   1011	general &= ~IQS269_SYS_SETTINGS_RESEED_OFFSET;
   1012	if (device_property_present(&client->dev, "azoteq,reseed-offset"))
   1013		general |= IQS269_SYS_SETTINGS_RESEED_OFFSET;
   1014
   1015	general |= IQS269_SYS_SETTINGS_EVENT_MODE;
   1016
   1017	/*
   1018	 * As per the datasheet, enable streaming during normal-power mode if
   1019	 * either slider is in use. In that case, the device returns to event
   1020	 * mode during low-power mode.
   1021	 */
   1022	if (sys_reg->slider_select[0] || sys_reg->slider_select[1])
   1023		general |= IQS269_SYS_SETTINGS_EVENT_MODE_LP;
   1024
   1025	general |= IQS269_SYS_SETTINGS_REDO_ATI;
   1026	general |= IQS269_SYS_SETTINGS_ACK_RESET;
   1027
   1028	sys_reg->general = cpu_to_be16(general);
   1029
   1030	return 0;
   1031}
   1032
   1033static int iqs269_dev_init(struct iqs269_private *iqs269)
   1034{
   1035	struct iqs269_sys_reg *sys_reg = &iqs269->sys_reg;
   1036	struct iqs269_ch_reg *ch_reg;
   1037	unsigned int val;
   1038	int error, i;
   1039
   1040	mutex_lock(&iqs269->lock);
   1041
   1042	error = regmap_update_bits(iqs269->regmap, IQS269_HALL_UI,
   1043				   IQS269_HALL_UI_ENABLE,
   1044				   iqs269->hall_enable ? ~0 : 0);
   1045	if (error)
   1046		goto err_mutex;
   1047
   1048	for (i = 0; i < IQS269_NUM_CH; i++) {
   1049		if (!(sys_reg->active & BIT(i)))
   1050			continue;
   1051
   1052		ch_reg = &iqs269->ch_reg[i];
   1053
   1054		error = regmap_raw_write(iqs269->regmap,
   1055					 IQS269_CHx_SETTINGS + i *
   1056					 sizeof(*ch_reg) / 2, ch_reg,
   1057					 sizeof(*ch_reg));
   1058		if (error)
   1059			goto err_mutex;
   1060	}
   1061
   1062	/*
   1063	 * The REDO-ATI and ATI channel selection fields must be written in the
   1064	 * same block write, so every field between registers 0x80 through 0x8B
   1065	 * (inclusive) must be written as well.
   1066	 */
   1067	error = regmap_raw_write(iqs269->regmap, IQS269_SYS_SETTINGS, sys_reg,
   1068				 sizeof(*sys_reg));
   1069	if (error)
   1070		goto err_mutex;
   1071
   1072	error = regmap_read_poll_timeout(iqs269->regmap, IQS269_SYS_FLAGS, val,
   1073					!(val & IQS269_SYS_FLAGS_IN_ATI),
   1074					 IQS269_ATI_POLL_SLEEP_US,
   1075					 IQS269_ATI_POLL_TIMEOUT_US);
   1076	if (error)
   1077		goto err_mutex;
   1078
   1079	msleep(IQS269_ATI_STABLE_DELAY_MS);
   1080	iqs269->ati_current = true;
   1081
   1082err_mutex:
   1083	mutex_unlock(&iqs269->lock);
   1084
   1085	return error;
   1086}
   1087
   1088static int iqs269_input_init(struct iqs269_private *iqs269)
   1089{
   1090	struct i2c_client *client = iqs269->client;
   1091	struct iqs269_flags flags;
   1092	unsigned int sw_code, keycode;
   1093	int error, i, j;
   1094	u8 dir_mask, state;
   1095
   1096	iqs269->keypad = devm_input_allocate_device(&client->dev);
   1097	if (!iqs269->keypad)
   1098		return -ENOMEM;
   1099
   1100	iqs269->keypad->keycodemax = ARRAY_SIZE(iqs269->keycode);
   1101	iqs269->keypad->keycode = iqs269->keycode;
   1102	iqs269->keypad->keycodesize = sizeof(*iqs269->keycode);
   1103
   1104	iqs269->keypad->name = "iqs269a_keypad";
   1105	iqs269->keypad->id.bustype = BUS_I2C;
   1106
   1107	if (iqs269->hall_enable) {
   1108		error = regmap_raw_read(iqs269->regmap, IQS269_SYS_FLAGS,
   1109					&flags, sizeof(flags));
   1110		if (error) {
   1111			dev_err(&client->dev,
   1112				"Failed to read initial status: %d\n", error);
   1113			return error;
   1114		}
   1115	}
   1116
   1117	for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
   1118		dir_mask = flags.states[IQS269_ST_OFFS_DIR];
   1119		if (!iqs269_events[i].dir_up)
   1120			dir_mask = ~dir_mask;
   1121
   1122		state = flags.states[iqs269_events[i].st_offs] & dir_mask;
   1123
   1124		sw_code = iqs269->switches[i].code;
   1125
   1126		for (j = 0; j < IQS269_NUM_CH; j++) {
   1127			keycode = iqs269->keycode[i * IQS269_NUM_CH + j];
   1128
   1129			/*
   1130			 * Hall-effect sensing repurposes a pair of dedicated
   1131			 * channels, only one of which reports events.
   1132			 */
   1133			switch (j) {
   1134			case IQS269_CHx_HALL_ACTIVE:
   1135				if (iqs269->hall_enable &&
   1136				    iqs269->switches[i].enabled) {
   1137					input_set_capability(iqs269->keypad,
   1138							     EV_SW, sw_code);
   1139					input_report_switch(iqs269->keypad,
   1140							    sw_code,
   1141							    state & BIT(j));
   1142				}
   1143				fallthrough;
   1144
   1145			case IQS269_CHx_HALL_INACTIVE:
   1146				if (iqs269->hall_enable)
   1147					continue;
   1148				fallthrough;
   1149
   1150			default:
   1151				if (keycode != KEY_RESERVED)
   1152					input_set_capability(iqs269->keypad,
   1153							     EV_KEY, keycode);
   1154			}
   1155		}
   1156	}
   1157
   1158	input_sync(iqs269->keypad);
   1159
   1160	error = input_register_device(iqs269->keypad);
   1161	if (error) {
   1162		dev_err(&client->dev, "Failed to register keypad: %d\n", error);
   1163		return error;
   1164	}
   1165
   1166	for (i = 0; i < IQS269_NUM_SL; i++) {
   1167		if (!iqs269->sys_reg.slider_select[i])
   1168			continue;
   1169
   1170		iqs269->slider[i] = devm_input_allocate_device(&client->dev);
   1171		if (!iqs269->slider[i])
   1172			return -ENOMEM;
   1173
   1174		iqs269->slider[i]->name = i ? "iqs269a_slider_1"
   1175					    : "iqs269a_slider_0";
   1176		iqs269->slider[i]->id.bustype = BUS_I2C;
   1177
   1178		input_set_capability(iqs269->slider[i], EV_KEY, BTN_TOUCH);
   1179		input_set_abs_params(iqs269->slider[i], ABS_X, 0, 255, 0, 0);
   1180
   1181		error = input_register_device(iqs269->slider[i]);
   1182		if (error) {
   1183			dev_err(&client->dev,
   1184				"Failed to register slider %d: %d\n", i, error);
   1185			return error;
   1186		}
   1187	}
   1188
   1189	return 0;
   1190}
   1191
   1192static int iqs269_report(struct iqs269_private *iqs269)
   1193{
   1194	struct i2c_client *client = iqs269->client;
   1195	struct iqs269_flags flags;
   1196	unsigned int sw_code, keycode;
   1197	int error, i, j;
   1198	u8 slider_x[IQS269_NUM_SL];
   1199	u8 dir_mask, state;
   1200
   1201	error = regmap_raw_read(iqs269->regmap, IQS269_SYS_FLAGS, &flags,
   1202				sizeof(flags));
   1203	if (error) {
   1204		dev_err(&client->dev, "Failed to read device status: %d\n",
   1205			error);
   1206		return error;
   1207	}
   1208
   1209	/*
   1210	 * The device resets itself if its own watchdog bites, which can happen
   1211	 * in the event of an I2C communication error. In this case, the device
   1212	 * asserts a SHOW_RESET interrupt and all registers must be restored.
   1213	 */
   1214	if (be16_to_cpu(flags.system) & IQS269_SYS_FLAGS_SHOW_RESET) {
   1215		dev_err(&client->dev, "Unexpected device reset\n");
   1216
   1217		error = iqs269_dev_init(iqs269);
   1218		if (error)
   1219			dev_err(&client->dev,
   1220				"Failed to re-initialize device: %d\n", error);
   1221
   1222		return error;
   1223	}
   1224
   1225	error = regmap_raw_read(iqs269->regmap, IQS269_SLIDER_X, slider_x,
   1226				sizeof(slider_x));
   1227	if (error) {
   1228		dev_err(&client->dev, "Failed to read slider position: %d\n",
   1229			error);
   1230		return error;
   1231	}
   1232
   1233	for (i = 0; i < IQS269_NUM_SL; i++) {
   1234		if (!iqs269->sys_reg.slider_select[i])
   1235			continue;
   1236
   1237		/*
   1238		 * Report BTN_TOUCH if any channel that participates in the
   1239		 * slider is in a state of touch.
   1240		 */
   1241		if (flags.states[IQS269_ST_OFFS_TOUCH] &
   1242		    iqs269->sys_reg.slider_select[i]) {
   1243			input_report_key(iqs269->slider[i], BTN_TOUCH, 1);
   1244			input_report_abs(iqs269->slider[i], ABS_X, slider_x[i]);
   1245		} else {
   1246			input_report_key(iqs269->slider[i], BTN_TOUCH, 0);
   1247		}
   1248
   1249		input_sync(iqs269->slider[i]);
   1250	}
   1251
   1252	for (i = 0; i < ARRAY_SIZE(iqs269_events); i++) {
   1253		dir_mask = flags.states[IQS269_ST_OFFS_DIR];
   1254		if (!iqs269_events[i].dir_up)
   1255			dir_mask = ~dir_mask;
   1256
   1257		state = flags.states[iqs269_events[i].st_offs] & dir_mask;
   1258
   1259		sw_code = iqs269->switches[i].code;
   1260
   1261		for (j = 0; j < IQS269_NUM_CH; j++) {
   1262			keycode = iqs269->keycode[i * IQS269_NUM_CH + j];
   1263
   1264			switch (j) {
   1265			case IQS269_CHx_HALL_ACTIVE:
   1266				if (iqs269->hall_enable &&
   1267				    iqs269->switches[i].enabled)
   1268					input_report_switch(iqs269->keypad,
   1269							    sw_code,
   1270							    state & BIT(j));
   1271				fallthrough;
   1272
   1273			case IQS269_CHx_HALL_INACTIVE:
   1274				if (iqs269->hall_enable)
   1275					continue;
   1276				fallthrough;
   1277
   1278			default:
   1279				input_report_key(iqs269->keypad, keycode,
   1280						 state & BIT(j));
   1281			}
   1282		}
   1283	}
   1284
   1285	input_sync(iqs269->keypad);
   1286
   1287	return 0;
   1288}
   1289
   1290static irqreturn_t iqs269_irq(int irq, void *context)
   1291{
   1292	struct iqs269_private *iqs269 = context;
   1293
   1294	if (iqs269_report(iqs269))
   1295		return IRQ_NONE;
   1296
   1297	/*
   1298	 * The device does not deassert its interrupt (RDY) pin until shortly
   1299	 * after receiving an I2C stop condition; the following delay ensures
   1300	 * the interrupt handler does not return before this time.
   1301	 */
   1302	iqs269_irq_wait();
   1303
   1304	return IRQ_HANDLED;
   1305}
   1306
   1307static ssize_t counts_show(struct device *dev,
   1308			   struct device_attribute *attr, char *buf)
   1309{
   1310	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1311	struct i2c_client *client = iqs269->client;
   1312	__le16 counts;
   1313	int error;
   1314
   1315	if (!iqs269->ati_current || iqs269->hall_enable)
   1316		return -EPERM;
   1317
   1318	/*
   1319	 * Unsolicited I2C communication prompts the device to assert its RDY
   1320	 * pin, so disable the interrupt line until the operation is finished
   1321	 * and RDY has been deasserted.
   1322	 */
   1323	disable_irq(client->irq);
   1324
   1325	error = regmap_raw_read(iqs269->regmap,
   1326				IQS269_CHx_COUNTS + iqs269->ch_num * 2,
   1327				&counts, sizeof(counts));
   1328
   1329	iqs269_irq_wait();
   1330	enable_irq(client->irq);
   1331
   1332	if (error)
   1333		return error;
   1334
   1335	return scnprintf(buf, PAGE_SIZE, "%u\n", le16_to_cpu(counts));
   1336}
   1337
   1338static ssize_t hall_bin_show(struct device *dev,
   1339			     struct device_attribute *attr, char *buf)
   1340{
   1341	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1342	struct i2c_client *client = iqs269->client;
   1343	unsigned int val;
   1344	int error;
   1345
   1346	disable_irq(client->irq);
   1347
   1348	error = regmap_read(iqs269->regmap, IQS269_CAL_DATA_A, &val);
   1349
   1350	iqs269_irq_wait();
   1351	enable_irq(client->irq);
   1352
   1353	if (error)
   1354		return error;
   1355
   1356	switch (iqs269->ch_reg[IQS269_CHx_HALL_ACTIVE].rx_enable &
   1357		iqs269->ch_reg[IQS269_CHx_HALL_INACTIVE].rx_enable) {
   1358	case IQS269_HALL_PAD_R:
   1359		val &= IQS269_CAL_DATA_A_HALL_BIN_R_MASK;
   1360		val >>= IQS269_CAL_DATA_A_HALL_BIN_R_SHIFT;
   1361		break;
   1362
   1363	case IQS269_HALL_PAD_L:
   1364		val &= IQS269_CAL_DATA_A_HALL_BIN_L_MASK;
   1365		val >>= IQS269_CAL_DATA_A_HALL_BIN_L_SHIFT;
   1366		break;
   1367
   1368	default:
   1369		return -EINVAL;
   1370	}
   1371
   1372	return scnprintf(buf, PAGE_SIZE, "%u\n", val);
   1373}
   1374
   1375static ssize_t hall_enable_show(struct device *dev,
   1376				struct device_attribute *attr, char *buf)
   1377{
   1378	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1379
   1380	return scnprintf(buf, PAGE_SIZE, "%u\n", iqs269->hall_enable);
   1381}
   1382
   1383static ssize_t hall_enable_store(struct device *dev,
   1384				 struct device_attribute *attr, const char *buf,
   1385				 size_t count)
   1386{
   1387	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1388	unsigned int val;
   1389	int error;
   1390
   1391	error = kstrtouint(buf, 10, &val);
   1392	if (error)
   1393		return error;
   1394
   1395	mutex_lock(&iqs269->lock);
   1396
   1397	iqs269->hall_enable = val;
   1398	iqs269->ati_current = false;
   1399
   1400	mutex_unlock(&iqs269->lock);
   1401
   1402	return count;
   1403}
   1404
   1405static ssize_t ch_number_show(struct device *dev,
   1406			      struct device_attribute *attr, char *buf)
   1407{
   1408	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1409
   1410	return scnprintf(buf, PAGE_SIZE, "%u\n", iqs269->ch_num);
   1411}
   1412
   1413static ssize_t ch_number_store(struct device *dev,
   1414			       struct device_attribute *attr, const char *buf,
   1415			       size_t count)
   1416{
   1417	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1418	unsigned int val;
   1419	int error;
   1420
   1421	error = kstrtouint(buf, 10, &val);
   1422	if (error)
   1423		return error;
   1424
   1425	if (val >= IQS269_NUM_CH)
   1426		return -EINVAL;
   1427
   1428	iqs269->ch_num = val;
   1429
   1430	return count;
   1431}
   1432
   1433static ssize_t rx_enable_show(struct device *dev,
   1434			      struct device_attribute *attr, char *buf)
   1435{
   1436	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1437
   1438	return scnprintf(buf, PAGE_SIZE, "%u\n",
   1439			 iqs269->ch_reg[iqs269->ch_num].rx_enable);
   1440}
   1441
   1442static ssize_t rx_enable_store(struct device *dev,
   1443			       struct device_attribute *attr, const char *buf,
   1444			       size_t count)
   1445{
   1446	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1447	unsigned int val;
   1448	int error;
   1449
   1450	error = kstrtouint(buf, 10, &val);
   1451	if (error)
   1452		return error;
   1453
   1454	if (val > 0xFF)
   1455		return -EINVAL;
   1456
   1457	mutex_lock(&iqs269->lock);
   1458
   1459	iqs269->ch_reg[iqs269->ch_num].rx_enable = val;
   1460	iqs269->ati_current = false;
   1461
   1462	mutex_unlock(&iqs269->lock);
   1463
   1464	return count;
   1465}
   1466
   1467static ssize_t ati_mode_show(struct device *dev,
   1468			     struct device_attribute *attr, char *buf)
   1469{
   1470	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1471	unsigned int val;
   1472	int error;
   1473
   1474	error = iqs269_ati_mode_get(iqs269, iqs269->ch_num, &val);
   1475	if (error)
   1476		return error;
   1477
   1478	return scnprintf(buf, PAGE_SIZE, "%u\n", val);
   1479}
   1480
   1481static ssize_t ati_mode_store(struct device *dev,
   1482			      struct device_attribute *attr, const char *buf,
   1483			      size_t count)
   1484{
   1485	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1486	unsigned int val;
   1487	int error;
   1488
   1489	error = kstrtouint(buf, 10, &val);
   1490	if (error)
   1491		return error;
   1492
   1493	error = iqs269_ati_mode_set(iqs269, iqs269->ch_num, val);
   1494	if (error)
   1495		return error;
   1496
   1497	return count;
   1498}
   1499
   1500static ssize_t ati_base_show(struct device *dev,
   1501			     struct device_attribute *attr, char *buf)
   1502{
   1503	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1504	unsigned int val;
   1505	int error;
   1506
   1507	error = iqs269_ati_base_get(iqs269, iqs269->ch_num, &val);
   1508	if (error)
   1509		return error;
   1510
   1511	return scnprintf(buf, PAGE_SIZE, "%u\n", val);
   1512}
   1513
   1514static ssize_t ati_base_store(struct device *dev,
   1515			      struct device_attribute *attr, const char *buf,
   1516			      size_t count)
   1517{
   1518	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1519	unsigned int val;
   1520	int error;
   1521
   1522	error = kstrtouint(buf, 10, &val);
   1523	if (error)
   1524		return error;
   1525
   1526	error = iqs269_ati_base_set(iqs269, iqs269->ch_num, val);
   1527	if (error)
   1528		return error;
   1529
   1530	return count;
   1531}
   1532
   1533static ssize_t ati_target_show(struct device *dev,
   1534			       struct device_attribute *attr, char *buf)
   1535{
   1536	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1537	unsigned int val;
   1538	int error;
   1539
   1540	error = iqs269_ati_target_get(iqs269, iqs269->ch_num, &val);
   1541	if (error)
   1542		return error;
   1543
   1544	return scnprintf(buf, PAGE_SIZE, "%u\n", val);
   1545}
   1546
   1547static ssize_t ati_target_store(struct device *dev,
   1548				struct device_attribute *attr, const char *buf,
   1549				size_t count)
   1550{
   1551	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1552	unsigned int val;
   1553	int error;
   1554
   1555	error = kstrtouint(buf, 10, &val);
   1556	if (error)
   1557		return error;
   1558
   1559	error = iqs269_ati_target_set(iqs269, iqs269->ch_num, val);
   1560	if (error)
   1561		return error;
   1562
   1563	return count;
   1564}
   1565
   1566static ssize_t ati_trigger_show(struct device *dev,
   1567				struct device_attribute *attr, char *buf)
   1568{
   1569	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1570
   1571	return scnprintf(buf, PAGE_SIZE, "%u\n", iqs269->ati_current);
   1572}
   1573
   1574static ssize_t ati_trigger_store(struct device *dev,
   1575				 struct device_attribute *attr, const char *buf,
   1576				 size_t count)
   1577{
   1578	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1579	struct i2c_client *client = iqs269->client;
   1580	unsigned int val;
   1581	int error;
   1582
   1583	error = kstrtouint(buf, 10, &val);
   1584	if (error)
   1585		return error;
   1586
   1587	if (!val)
   1588		return count;
   1589
   1590	disable_irq(client->irq);
   1591
   1592	error = iqs269_dev_init(iqs269);
   1593
   1594	iqs269_irq_wait();
   1595	enable_irq(client->irq);
   1596
   1597	if (error)
   1598		return error;
   1599
   1600	return count;
   1601}
   1602
   1603static DEVICE_ATTR_RO(counts);
   1604static DEVICE_ATTR_RO(hall_bin);
   1605static DEVICE_ATTR_RW(hall_enable);
   1606static DEVICE_ATTR_RW(ch_number);
   1607static DEVICE_ATTR_RW(rx_enable);
   1608static DEVICE_ATTR_RW(ati_mode);
   1609static DEVICE_ATTR_RW(ati_base);
   1610static DEVICE_ATTR_RW(ati_target);
   1611static DEVICE_ATTR_RW(ati_trigger);
   1612
   1613static struct attribute *iqs269_attrs[] = {
   1614	&dev_attr_counts.attr,
   1615	&dev_attr_hall_bin.attr,
   1616	&dev_attr_hall_enable.attr,
   1617	&dev_attr_ch_number.attr,
   1618	&dev_attr_rx_enable.attr,
   1619	&dev_attr_ati_mode.attr,
   1620	&dev_attr_ati_base.attr,
   1621	&dev_attr_ati_target.attr,
   1622	&dev_attr_ati_trigger.attr,
   1623	NULL,
   1624};
   1625
   1626static const struct attribute_group iqs269_attr_group = {
   1627	.attrs = iqs269_attrs,
   1628};
   1629
   1630static const struct regmap_config iqs269_regmap_config = {
   1631	.reg_bits = 8,
   1632	.val_bits = 16,
   1633	.max_register = IQS269_MAX_REG,
   1634};
   1635
   1636static int iqs269_probe(struct i2c_client *client)
   1637{
   1638	struct iqs269_ver_info ver_info;
   1639	struct iqs269_private *iqs269;
   1640	int error;
   1641
   1642	iqs269 = devm_kzalloc(&client->dev, sizeof(*iqs269), GFP_KERNEL);
   1643	if (!iqs269)
   1644		return -ENOMEM;
   1645
   1646	i2c_set_clientdata(client, iqs269);
   1647	iqs269->client = client;
   1648
   1649	iqs269->regmap = devm_regmap_init_i2c(client, &iqs269_regmap_config);
   1650	if (IS_ERR(iqs269->regmap)) {
   1651		error = PTR_ERR(iqs269->regmap);
   1652		dev_err(&client->dev, "Failed to initialize register map: %d\n",
   1653			error);
   1654		return error;
   1655	}
   1656
   1657	mutex_init(&iqs269->lock);
   1658
   1659	error = regmap_raw_read(iqs269->regmap, IQS269_VER_INFO, &ver_info,
   1660				sizeof(ver_info));
   1661	if (error)
   1662		return error;
   1663
   1664	if (ver_info.prod_num != IQS269_VER_INFO_PROD_NUM) {
   1665		dev_err(&client->dev, "Unrecognized product number: 0x%02X\n",
   1666			ver_info.prod_num);
   1667		return -EINVAL;
   1668	}
   1669
   1670	error = iqs269_parse_prop(iqs269);
   1671	if (error)
   1672		return error;
   1673
   1674	error = iqs269_dev_init(iqs269);
   1675	if (error) {
   1676		dev_err(&client->dev, "Failed to initialize device: %d\n",
   1677			error);
   1678		return error;
   1679	}
   1680
   1681	error = iqs269_input_init(iqs269);
   1682	if (error)
   1683		return error;
   1684
   1685	error = devm_request_threaded_irq(&client->dev, client->irq,
   1686					  NULL, iqs269_irq, IRQF_ONESHOT,
   1687					  client->name, iqs269);
   1688	if (error) {
   1689		dev_err(&client->dev, "Failed to request IRQ: %d\n", error);
   1690		return error;
   1691	}
   1692
   1693	error = devm_device_add_group(&client->dev, &iqs269_attr_group);
   1694	if (error)
   1695		dev_err(&client->dev, "Failed to add attributes: %d\n", error);
   1696
   1697	return error;
   1698}
   1699
   1700static int __maybe_unused iqs269_suspend(struct device *dev)
   1701{
   1702	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1703	struct i2c_client *client = iqs269->client;
   1704	unsigned int val;
   1705	int error;
   1706
   1707	if (!iqs269->suspend_mode)
   1708		return 0;
   1709
   1710	disable_irq(client->irq);
   1711
   1712	/*
   1713	 * Automatic power mode switching must be disabled before the device is
   1714	 * forced into any particular power mode. In this case, the device will
   1715	 * transition into normal-power mode.
   1716	 */
   1717	error = regmap_update_bits(iqs269->regmap, IQS269_SYS_SETTINGS,
   1718				   IQS269_SYS_SETTINGS_DIS_AUTO, ~0);
   1719	if (error)
   1720		goto err_irq;
   1721
   1722	/*
   1723	 * The following check ensures the device has completed its transition
   1724	 * into normal-power mode before a manual mode switch is performed.
   1725	 */
   1726	error = regmap_read_poll_timeout(iqs269->regmap, IQS269_SYS_FLAGS, val,
   1727					!(val & IQS269_SYS_FLAGS_PWR_MODE_MASK),
   1728					 IQS269_PWR_MODE_POLL_SLEEP_US,
   1729					 IQS269_PWR_MODE_POLL_TIMEOUT_US);
   1730	if (error)
   1731		goto err_irq;
   1732
   1733	error = regmap_update_bits(iqs269->regmap, IQS269_SYS_SETTINGS,
   1734				   IQS269_SYS_SETTINGS_PWR_MODE_MASK,
   1735				   iqs269->suspend_mode <<
   1736				   IQS269_SYS_SETTINGS_PWR_MODE_SHIFT);
   1737	if (error)
   1738		goto err_irq;
   1739
   1740	/*
   1741	 * This last check ensures the device has completed its transition into
   1742	 * the desired power mode to prevent any spurious interrupts from being
   1743	 * triggered after iqs269_suspend has already returned.
   1744	 */
   1745	error = regmap_read_poll_timeout(iqs269->regmap, IQS269_SYS_FLAGS, val,
   1746					 (val & IQS269_SYS_FLAGS_PWR_MODE_MASK)
   1747					 == (iqs269->suspend_mode <<
   1748					     IQS269_SYS_FLAGS_PWR_MODE_SHIFT),
   1749					 IQS269_PWR_MODE_POLL_SLEEP_US,
   1750					 IQS269_PWR_MODE_POLL_TIMEOUT_US);
   1751
   1752err_irq:
   1753	iqs269_irq_wait();
   1754	enable_irq(client->irq);
   1755
   1756	return error;
   1757}
   1758
   1759static int __maybe_unused iqs269_resume(struct device *dev)
   1760{
   1761	struct iqs269_private *iqs269 = dev_get_drvdata(dev);
   1762	struct i2c_client *client = iqs269->client;
   1763	unsigned int val;
   1764	int error;
   1765
   1766	if (!iqs269->suspend_mode)
   1767		return 0;
   1768
   1769	disable_irq(client->irq);
   1770
   1771	error = regmap_update_bits(iqs269->regmap, IQS269_SYS_SETTINGS,
   1772				   IQS269_SYS_SETTINGS_PWR_MODE_MASK, 0);
   1773	if (error)
   1774		goto err_irq;
   1775
   1776	/*
   1777	 * This check ensures the device has returned to normal-power mode
   1778	 * before automatic power mode switching is re-enabled.
   1779	 */
   1780	error = regmap_read_poll_timeout(iqs269->regmap, IQS269_SYS_FLAGS, val,
   1781					!(val & IQS269_SYS_FLAGS_PWR_MODE_MASK),
   1782					 IQS269_PWR_MODE_POLL_SLEEP_US,
   1783					 IQS269_PWR_MODE_POLL_TIMEOUT_US);
   1784	if (error)
   1785		goto err_irq;
   1786
   1787	error = regmap_update_bits(iqs269->regmap, IQS269_SYS_SETTINGS,
   1788				   IQS269_SYS_SETTINGS_DIS_AUTO, 0);
   1789	if (error)
   1790		goto err_irq;
   1791
   1792	/*
   1793	 * This step reports any events that may have been "swallowed" as a
   1794	 * result of polling PWR_MODE (which automatically acknowledges any
   1795	 * pending interrupts).
   1796	 */
   1797	error = iqs269_report(iqs269);
   1798
   1799err_irq:
   1800	iqs269_irq_wait();
   1801	enable_irq(client->irq);
   1802
   1803	return error;
   1804}
   1805
   1806static SIMPLE_DEV_PM_OPS(iqs269_pm, iqs269_suspend, iqs269_resume);
   1807
   1808static const struct of_device_id iqs269_of_match[] = {
   1809	{ .compatible = "azoteq,iqs269a" },
   1810	{ }
   1811};
   1812MODULE_DEVICE_TABLE(of, iqs269_of_match);
   1813
   1814static struct i2c_driver iqs269_i2c_driver = {
   1815	.driver = {
   1816		.name = "iqs269a",
   1817		.of_match_table = iqs269_of_match,
   1818		.pm = &iqs269_pm,
   1819	},
   1820	.probe_new = iqs269_probe,
   1821};
   1822module_i2c_driver(iqs269_i2c_driver);
   1823
   1824MODULE_AUTHOR("Jeff LaBundy <jeff@labundy.com>");
   1825MODULE_DESCRIPTION("Azoteq IQS269A Capacitive Touch Controller");
   1826MODULE_LICENSE("GPL");