Linux Audio

Check our new training course

Loading...
v3.15
 
   1/*
   2 * Description:  keypad driver for ADP5589, ADP5585
   3 *		 I2C QWERTY Keypad and IO Expander
   4 * Bugs: Enter bugs at http://blackfin.uclinux.org/
   5 *
   6 * Copyright (C) 2010-2011 Analog Devices Inc.
   7 * Licensed under the GPL-2.
   8 */
   9
  10#include <linux/module.h>
  11#include <linux/interrupt.h>
  12#include <linux/irq.h>
  13#include <linux/workqueue.h>
  14#include <linux/errno.h>
  15#include <linux/pm.h>
  16#include <linux/platform_device.h>
  17#include <linux/input.h>
  18#include <linux/i2c.h>
  19#include <linux/gpio.h>
  20#include <linux/slab.h>
  21
  22#include <linux/input/adp5589.h>
  23
  24/* ADP5589/ADP5585 Common Registers */
  25#define ADP5589_5_ID			0x00
  26#define ADP5589_5_INT_STATUS		0x01
  27#define ADP5589_5_STATUS		0x02
  28#define ADP5589_5_FIFO_1		0x03
  29#define ADP5589_5_FIFO_2		0x04
  30#define ADP5589_5_FIFO_3		0x05
  31#define ADP5589_5_FIFO_4		0x06
  32#define ADP5589_5_FIFO_5		0x07
  33#define ADP5589_5_FIFO_6		0x08
  34#define ADP5589_5_FIFO_7		0x09
  35#define ADP5589_5_FIFO_8		0x0A
  36#define ADP5589_5_FIFO_9		0x0B
  37#define ADP5589_5_FIFO_10		0x0C
  38#define ADP5589_5_FIFO_11		0x0D
  39#define ADP5589_5_FIFO_12		0x0E
  40#define ADP5589_5_FIFO_13		0x0F
  41#define ADP5589_5_FIFO_14		0x10
  42#define ADP5589_5_FIFO_15		0x11
  43#define ADP5589_5_FIFO_16		0x12
  44#define ADP5589_5_GPI_INT_STAT_A	0x13
  45#define ADP5589_5_GPI_INT_STAT_B	0x14
  46
  47/* ADP5589 Registers */
  48#define ADP5589_GPI_INT_STAT_C		0x15
  49#define ADP5589_GPI_STATUS_A		0x16
  50#define ADP5589_GPI_STATUS_B		0x17
  51#define ADP5589_GPI_STATUS_C		0x18
  52#define ADP5589_RPULL_CONFIG_A		0x19
  53#define ADP5589_RPULL_CONFIG_B		0x1A
  54#define ADP5589_RPULL_CONFIG_C		0x1B
  55#define ADP5589_RPULL_CONFIG_D		0x1C
  56#define ADP5589_RPULL_CONFIG_E		0x1D
  57#define ADP5589_GPI_INT_LEVEL_A		0x1E
  58#define ADP5589_GPI_INT_LEVEL_B		0x1F
  59#define ADP5589_GPI_INT_LEVEL_C		0x20
  60#define ADP5589_GPI_EVENT_EN_A		0x21
  61#define ADP5589_GPI_EVENT_EN_B		0x22
  62#define ADP5589_GPI_EVENT_EN_C		0x23
  63#define ADP5589_GPI_INTERRUPT_EN_A	0x24
  64#define ADP5589_GPI_INTERRUPT_EN_B	0x25
  65#define ADP5589_GPI_INTERRUPT_EN_C	0x26
  66#define ADP5589_DEBOUNCE_DIS_A		0x27
  67#define ADP5589_DEBOUNCE_DIS_B		0x28
  68#define ADP5589_DEBOUNCE_DIS_C		0x29
  69#define ADP5589_GPO_DATA_OUT_A		0x2A
  70#define ADP5589_GPO_DATA_OUT_B		0x2B
  71#define ADP5589_GPO_DATA_OUT_C		0x2C
  72#define ADP5589_GPO_OUT_MODE_A		0x2D
  73#define ADP5589_GPO_OUT_MODE_B		0x2E
  74#define ADP5589_GPO_OUT_MODE_C		0x2F
  75#define ADP5589_GPIO_DIRECTION_A	0x30
  76#define ADP5589_GPIO_DIRECTION_B	0x31
  77#define ADP5589_GPIO_DIRECTION_C	0x32
  78#define ADP5589_UNLOCK1			0x33
  79#define ADP5589_UNLOCK2			0x34
  80#define ADP5589_EXT_LOCK_EVENT		0x35
  81#define ADP5589_UNLOCK_TIMERS		0x36
  82#define ADP5589_LOCK_CFG		0x37
  83#define ADP5589_RESET1_EVENT_A		0x38
  84#define ADP5589_RESET1_EVENT_B		0x39
  85#define ADP5589_RESET1_EVENT_C		0x3A
  86#define ADP5589_RESET2_EVENT_A		0x3B
  87#define ADP5589_RESET2_EVENT_B		0x3C
  88#define ADP5589_RESET_CFG		0x3D
  89#define ADP5589_PWM_OFFT_LOW		0x3E
  90#define ADP5589_PWM_OFFT_HIGH		0x3F
  91#define ADP5589_PWM_ONT_LOW		0x40
  92#define ADP5589_PWM_ONT_HIGH		0x41
  93#define ADP5589_PWM_CFG			0x42
  94#define ADP5589_CLOCK_DIV_CFG		0x43
  95#define ADP5589_LOGIC_1_CFG		0x44
  96#define ADP5589_LOGIC_2_CFG		0x45
  97#define ADP5589_LOGIC_FF_CFG		0x46
  98#define ADP5589_LOGIC_INT_EVENT_EN	0x47
  99#define ADP5589_POLL_PTIME_CFG		0x48
 100#define ADP5589_PIN_CONFIG_A		0x49
 101#define ADP5589_PIN_CONFIG_B		0x4A
 102#define ADP5589_PIN_CONFIG_C		0x4B
 103#define ADP5589_PIN_CONFIG_D		0x4C
 104#define ADP5589_GENERAL_CFG		0x4D
 105#define ADP5589_INT_EN			0x4E
 106
 107/* ADP5585 Registers */
 108#define ADP5585_GPI_STATUS_A		0x15
 109#define ADP5585_GPI_STATUS_B		0x16
 110#define ADP5585_RPULL_CONFIG_A		0x17
 111#define ADP5585_RPULL_CONFIG_B		0x18
 112#define ADP5585_RPULL_CONFIG_C		0x19
 113#define ADP5585_RPULL_CONFIG_D		0x1A
 114#define ADP5585_GPI_INT_LEVEL_A		0x1B
 115#define ADP5585_GPI_INT_LEVEL_B		0x1C
 116#define ADP5585_GPI_EVENT_EN_A		0x1D
 117#define ADP5585_GPI_EVENT_EN_B		0x1E
 118#define ADP5585_GPI_INTERRUPT_EN_A	0x1F
 119#define ADP5585_GPI_INTERRUPT_EN_B	0x20
 120#define ADP5585_DEBOUNCE_DIS_A		0x21
 121#define ADP5585_DEBOUNCE_DIS_B		0x22
 122#define ADP5585_GPO_DATA_OUT_A		0x23
 123#define ADP5585_GPO_DATA_OUT_B		0x24
 124#define ADP5585_GPO_OUT_MODE_A		0x25
 125#define ADP5585_GPO_OUT_MODE_B		0x26
 126#define ADP5585_GPIO_DIRECTION_A	0x27
 127#define ADP5585_GPIO_DIRECTION_B	0x28
 128#define ADP5585_RESET1_EVENT_A		0x29
 129#define ADP5585_RESET1_EVENT_B		0x2A
 130#define ADP5585_RESET1_EVENT_C		0x2B
 131#define ADP5585_RESET2_EVENT_A		0x2C
 132#define ADP5585_RESET2_EVENT_B		0x2D
 133#define ADP5585_RESET_CFG		0x2E
 134#define ADP5585_PWM_OFFT_LOW		0x2F
 135#define ADP5585_PWM_OFFT_HIGH		0x30
 136#define ADP5585_PWM_ONT_LOW		0x31
 137#define ADP5585_PWM_ONT_HIGH		0x32
 138#define ADP5585_PWM_CFG			0x33
 139#define ADP5585_LOGIC_CFG		0x34
 140#define ADP5585_LOGIC_FF_CFG		0x35
 141#define ADP5585_LOGIC_INT_EVENT_EN	0x36
 142#define ADP5585_POLL_PTIME_CFG		0x37
 143#define ADP5585_PIN_CONFIG_A		0x38
 144#define ADP5585_PIN_CONFIG_B		0x39
 145#define ADP5585_PIN_CONFIG_D		0x3A
 146#define ADP5585_GENERAL_CFG		0x3B
 147#define ADP5585_INT_EN			0x3C
 148
 149/* ID Register */
 150#define ADP5589_5_DEVICE_ID_MASK	0xF
 151#define ADP5589_5_MAN_ID_MASK		0xF
 152#define ADP5589_5_MAN_ID_SHIFT		4
 153#define ADP5589_5_MAN_ID		0x02
 154
 155/* GENERAL_CFG Register */
 156#define OSC_EN		(1 << 7)
 157#define CORE_CLK(x)	(((x) & 0x3) << 5)
 158#define LCK_TRK_LOGIC	(1 << 4)	/* ADP5589 only */
 159#define LCK_TRK_GPI	(1 << 3)	/* ADP5589 only */
 160#define INT_CFG		(1 << 1)
 161#define RST_CFG		(1 << 0)
 162
 163/* INT_EN Register */
 164#define LOGIC2_IEN	(1 << 5)	/* ADP5589 only */
 165#define LOGIC1_IEN	(1 << 4)
 166#define LOCK_IEN	(1 << 3)	/* ADP5589 only */
 167#define OVRFLOW_IEN	(1 << 2)
 168#define GPI_IEN		(1 << 1)
 169#define EVENT_IEN	(1 << 0)
 170
 171/* Interrupt Status Register */
 172#define LOGIC2_INT	(1 << 5)	/* ADP5589 only */
 173#define LOGIC1_INT	(1 << 4)
 174#define LOCK_INT	(1 << 3)	/* ADP5589 only */
 175#define OVRFLOW_INT	(1 << 2)
 176#define GPI_INT		(1 << 1)
 177#define EVENT_INT	(1 << 0)
 178
 179/* STATUS Register */
 180#define LOGIC2_STAT	(1 << 7)	/* ADP5589 only */
 181#define LOGIC1_STAT	(1 << 6)
 182#define LOCK_STAT	(1 << 5)	/* ADP5589 only */
 183#define KEC		0xF
 184
 185/* PIN_CONFIG_D Register */
 186#define C4_EXTEND_CFG	(1 << 6)	/* RESET2 */
 187#define R4_EXTEND_CFG	(1 << 5)	/* RESET1 */
 188
 189/* LOCK_CFG */
 190#define LOCK_EN		(1 << 0)
 191
 192#define PTIME_MASK	0x3
 193#define LTIME_MASK	0x3		/* ADP5589 only */
 194
 195/* Key Event Register xy */
 196#define KEY_EV_PRESSED		(1 << 7)
 197#define KEY_EV_MASK		(0x7F)
 198
 199#define KEYP_MAX_EVENT		16
 200#define ADP5589_MAXGPIO		19
 201#define ADP5585_MAXGPIO		11 /* 10 on the ADP5585-01, 11 on ADP5585-02 */
 202
 203enum {
 204	ADP5589,
 205	ADP5585_01,
 206	ADP5585_02
 207};
 208
 209struct adp_constants {
 210	u8 maxgpio;
 211	u8 keymapsize;
 212	u8 gpi_pin_row_base;
 213	u8 gpi_pin_row_end;
 214	u8 gpi_pin_col_base;
 215	u8 gpi_pin_base;
 216	u8 gpi_pin_end;
 217	u8 gpimapsize_max;
 218	u8 max_row_num;
 219	u8 max_col_num;
 220	u8 row_mask;
 221	u8 col_mask;
 222	u8 col_shift;
 223	u8 c4_extend_cfg;
 224	u8 (*bank) (u8 offset);
 225	u8 (*bit) (u8 offset);
 226	u8 (*reg) (u8 reg);
 227};
 228
 229struct adp5589_kpad {
 230	struct i2c_client *client;
 231	struct input_dev *input;
 232	const struct adp_constants *var;
 233	unsigned short keycode[ADP5589_KEYMAPSIZE];
 234	const struct adp5589_gpi_map *gpimap;
 235	unsigned short gpimapsize;
 236	unsigned extend_cfg;
 237	bool is_adp5585;
 238	bool adp5585_support_row5;
 239#ifdef CONFIG_GPIOLIB
 240	unsigned char gpiomap[ADP5589_MAXGPIO];
 241	bool export_gpio;
 242	struct gpio_chip gc;
 243	struct mutex gpio_lock;	/* Protect cached dir, dat_out */
 244	u8 dat_out[3];
 245	u8 dir[3];
 246#endif
 247};
 248
 249/*
 250 *  ADP5589 / ADP5585 derivative / variant handling
 251 */
 252
 253
 254/* ADP5589 */
 255
 256static unsigned char adp5589_bank(unsigned char offset)
 257{
 258	return offset >> 3;
 259}
 260
 261static unsigned char adp5589_bit(unsigned char offset)
 262{
 263	return 1u << (offset & 0x7);
 264}
 265
 266static unsigned char adp5589_reg(unsigned char reg)
 267{
 268	return reg;
 269}
 270
 271static const struct adp_constants const_adp5589 = {
 272	.maxgpio		= ADP5589_MAXGPIO,
 273	.keymapsize		= ADP5589_KEYMAPSIZE,
 274	.gpi_pin_row_base	= ADP5589_GPI_PIN_ROW_BASE,
 275	.gpi_pin_row_end	= ADP5589_GPI_PIN_ROW_END,
 276	.gpi_pin_col_base	= ADP5589_GPI_PIN_COL_BASE,
 277	.gpi_pin_base		= ADP5589_GPI_PIN_BASE,
 278	.gpi_pin_end		= ADP5589_GPI_PIN_END,
 279	.gpimapsize_max		= ADP5589_GPIMAPSIZE_MAX,
 280	.c4_extend_cfg		= 12,
 281	.max_row_num		= ADP5589_MAX_ROW_NUM,
 282	.max_col_num		= ADP5589_MAX_COL_NUM,
 283	.row_mask		= ADP5589_ROW_MASK,
 284	.col_mask		= ADP5589_COL_MASK,
 285	.col_shift		= ADP5589_COL_SHIFT,
 286	.bank			= adp5589_bank,
 287	.bit			= adp5589_bit,
 288	.reg			= adp5589_reg,
 289};
 290
 291/* ADP5585 */
 292
 293static unsigned char adp5585_bank(unsigned char offset)
 294{
 295	return offset > ADP5585_MAX_ROW_NUM;
 296}
 297
 298static unsigned char adp5585_bit(unsigned char offset)
 299{
 300	return (offset > ADP5585_MAX_ROW_NUM) ?
 301		1u << (offset - ADP5585_COL_SHIFT) : 1u << offset;
 302}
 303
 304static const unsigned char adp5585_reg_lut[] = {
 305	[ADP5589_GPI_STATUS_A]		= ADP5585_GPI_STATUS_A,
 306	[ADP5589_GPI_STATUS_B]		= ADP5585_GPI_STATUS_B,
 307	[ADP5589_RPULL_CONFIG_A]	= ADP5585_RPULL_CONFIG_A,
 308	[ADP5589_RPULL_CONFIG_B]	= ADP5585_RPULL_CONFIG_B,
 309	[ADP5589_RPULL_CONFIG_C]	= ADP5585_RPULL_CONFIG_C,
 310	[ADP5589_RPULL_CONFIG_D]	= ADP5585_RPULL_CONFIG_D,
 311	[ADP5589_GPI_INT_LEVEL_A]	= ADP5585_GPI_INT_LEVEL_A,
 312	[ADP5589_GPI_INT_LEVEL_B]	= ADP5585_GPI_INT_LEVEL_B,
 313	[ADP5589_GPI_EVENT_EN_A]	= ADP5585_GPI_EVENT_EN_A,
 314	[ADP5589_GPI_EVENT_EN_B]	= ADP5585_GPI_EVENT_EN_B,
 315	[ADP5589_GPI_INTERRUPT_EN_A]	= ADP5585_GPI_INTERRUPT_EN_A,
 316	[ADP5589_GPI_INTERRUPT_EN_B]	= ADP5585_GPI_INTERRUPT_EN_B,
 317	[ADP5589_DEBOUNCE_DIS_A]	= ADP5585_DEBOUNCE_DIS_A,
 318	[ADP5589_DEBOUNCE_DIS_B]	= ADP5585_DEBOUNCE_DIS_B,
 319	[ADP5589_GPO_DATA_OUT_A]	= ADP5585_GPO_DATA_OUT_A,
 320	[ADP5589_GPO_DATA_OUT_B]	= ADP5585_GPO_DATA_OUT_B,
 321	[ADP5589_GPO_OUT_MODE_A]	= ADP5585_GPO_OUT_MODE_A,
 322	[ADP5589_GPO_OUT_MODE_B]	= ADP5585_GPO_OUT_MODE_B,
 323	[ADP5589_GPIO_DIRECTION_A]	= ADP5585_GPIO_DIRECTION_A,
 324	[ADP5589_GPIO_DIRECTION_B]	= ADP5585_GPIO_DIRECTION_B,
 325	[ADP5589_RESET1_EVENT_A]	= ADP5585_RESET1_EVENT_A,
 326	[ADP5589_RESET1_EVENT_B]	= ADP5585_RESET1_EVENT_B,
 327	[ADP5589_RESET1_EVENT_C]	= ADP5585_RESET1_EVENT_C,
 328	[ADP5589_RESET2_EVENT_A]	= ADP5585_RESET2_EVENT_A,
 329	[ADP5589_RESET2_EVENT_B]	= ADP5585_RESET2_EVENT_B,
 330	[ADP5589_RESET_CFG]		= ADP5585_RESET_CFG,
 331	[ADP5589_PWM_OFFT_LOW]		= ADP5585_PWM_OFFT_LOW,
 332	[ADP5589_PWM_OFFT_HIGH]		= ADP5585_PWM_OFFT_HIGH,
 333	[ADP5589_PWM_ONT_LOW]		= ADP5585_PWM_ONT_LOW,
 334	[ADP5589_PWM_ONT_HIGH]		= ADP5585_PWM_ONT_HIGH,
 335	[ADP5589_PWM_CFG]		= ADP5585_PWM_CFG,
 336	[ADP5589_LOGIC_1_CFG]		= ADP5585_LOGIC_CFG,
 337	[ADP5589_LOGIC_FF_CFG]		= ADP5585_LOGIC_FF_CFG,
 338	[ADP5589_LOGIC_INT_EVENT_EN]	= ADP5585_LOGIC_INT_EVENT_EN,
 339	[ADP5589_POLL_PTIME_CFG]	= ADP5585_POLL_PTIME_CFG,
 340	[ADP5589_PIN_CONFIG_A]		= ADP5585_PIN_CONFIG_A,
 341	[ADP5589_PIN_CONFIG_B]		= ADP5585_PIN_CONFIG_B,
 342	[ADP5589_PIN_CONFIG_D]		= ADP5585_PIN_CONFIG_D,
 343	[ADP5589_GENERAL_CFG]		= ADP5585_GENERAL_CFG,
 344	[ADP5589_INT_EN]		= ADP5585_INT_EN,
 345};
 346
 347static unsigned char adp5585_reg(unsigned char reg)
 348{
 349	return adp5585_reg_lut[reg];
 350}
 351
 352static const struct adp_constants const_adp5585 = {
 353	.maxgpio		= ADP5585_MAXGPIO,
 354	.keymapsize		= ADP5585_KEYMAPSIZE,
 355	.gpi_pin_row_base	= ADP5585_GPI_PIN_ROW_BASE,
 356	.gpi_pin_row_end	= ADP5585_GPI_PIN_ROW_END,
 357	.gpi_pin_col_base	= ADP5585_GPI_PIN_COL_BASE,
 358	.gpi_pin_base		= ADP5585_GPI_PIN_BASE,
 359	.gpi_pin_end		= ADP5585_GPI_PIN_END,
 360	.gpimapsize_max		= ADP5585_GPIMAPSIZE_MAX,
 361	.c4_extend_cfg		= 10,
 362	.max_row_num		= ADP5585_MAX_ROW_NUM,
 363	.max_col_num		= ADP5585_MAX_COL_NUM,
 364	.row_mask		= ADP5585_ROW_MASK,
 365	.col_mask		= ADP5585_COL_MASK,
 366	.col_shift		= ADP5585_COL_SHIFT,
 367	.bank			= adp5585_bank,
 368	.bit			= adp5585_bit,
 369	.reg			= adp5585_reg,
 370};
 371
 372static int adp5589_read(struct i2c_client *client, u8 reg)
 373{
 374	int ret = i2c_smbus_read_byte_data(client, reg);
 375
 376	if (ret < 0)
 377		dev_err(&client->dev, "Read Error\n");
 378
 379	return ret;
 380}
 381
 382static int adp5589_write(struct i2c_client *client, u8 reg, u8 val)
 383{
 384	return i2c_smbus_write_byte_data(client, reg, val);
 385}
 386
 387#ifdef CONFIG_GPIOLIB
 388static int adp5589_gpio_get_value(struct gpio_chip *chip, unsigned off)
 389{
 390	struct adp5589_kpad *kpad = container_of(chip, struct adp5589_kpad, gc);
 391	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 392	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 393
 394	return !!(adp5589_read(kpad->client,
 395			       kpad->var->reg(ADP5589_GPI_STATUS_A) + bank) &
 396			       bit);
 397}
 398
 399static void adp5589_gpio_set_value(struct gpio_chip *chip,
 400				   unsigned off, int val)
 401{
 402	struct adp5589_kpad *kpad = container_of(chip, struct adp5589_kpad, gc);
 403	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 404	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 405
 406	mutex_lock(&kpad->gpio_lock);
 407
 408	if (val)
 409		kpad->dat_out[bank] |= bit;
 410	else
 411		kpad->dat_out[bank] &= ~bit;
 412
 413	adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A) +
 414		      bank, kpad->dat_out[bank]);
 415
 416	mutex_unlock(&kpad->gpio_lock);
 417}
 418
 419static int adp5589_gpio_direction_input(struct gpio_chip *chip, unsigned off)
 420{
 421	struct adp5589_kpad *kpad = container_of(chip, struct adp5589_kpad, gc);
 422	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 423	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 424	int ret;
 425
 426	mutex_lock(&kpad->gpio_lock);
 427
 428	kpad->dir[bank] &= ~bit;
 429	ret = adp5589_write(kpad->client,
 430			    kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
 431			    kpad->dir[bank]);
 432
 433	mutex_unlock(&kpad->gpio_lock);
 434
 435	return ret;
 436}
 437
 438static int adp5589_gpio_direction_output(struct gpio_chip *chip,
 439					 unsigned off, int val)
 440{
 441	struct adp5589_kpad *kpad = container_of(chip, struct adp5589_kpad, gc);
 442	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 443	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 444	int ret;
 445
 446	mutex_lock(&kpad->gpio_lock);
 447
 448	kpad->dir[bank] |= bit;
 449
 450	if (val)
 451		kpad->dat_out[bank] |= bit;
 452	else
 453		kpad->dat_out[bank] &= ~bit;
 454
 455	ret = adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A)
 456			    + bank, kpad->dat_out[bank]);
 457	ret |= adp5589_write(kpad->client,
 458			     kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
 459			     kpad->dir[bank]);
 460
 461	mutex_unlock(&kpad->gpio_lock);
 462
 463	return ret;
 464}
 465
 466static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,
 467				const struct adp5589_kpad_platform_data *pdata)
 468{
 469	bool pin_used[ADP5589_MAXGPIO];
 470	int n_unused = 0;
 471	int i;
 472
 473	memset(pin_used, false, sizeof(pin_used));
 474
 475	for (i = 0; i < kpad->var->maxgpio; i++)
 476		if (pdata->keypad_en_mask & (1 << i))
 477			pin_used[i] = true;
 478
 479	for (i = 0; i < kpad->gpimapsize; i++)
 480		pin_used[kpad->gpimap[i].pin - kpad->var->gpi_pin_base] = true;
 481
 482	if (kpad->extend_cfg & R4_EXTEND_CFG)
 483		pin_used[4] = true;
 484
 485	if (kpad->extend_cfg & C4_EXTEND_CFG)
 486		pin_used[kpad->var->c4_extend_cfg] = true;
 487
 488	if (!kpad->adp5585_support_row5)
 489		pin_used[5] = true;
 490
 491	for (i = 0; i < kpad->var->maxgpio; i++)
 492		if (!pin_used[i])
 493			kpad->gpiomap[n_unused++] = i;
 494
 495	return n_unused;
 496}
 497
 498static int adp5589_gpio_add(struct adp5589_kpad *kpad)
 499{
 500	struct device *dev = &kpad->client->dev;
 501	const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
 502	const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
 503	int i, error;
 504
 505	if (!gpio_data)
 506		return 0;
 507
 
 508	kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
 509	if (kpad->gc.ngpio == 0) {
 510		dev_info(dev, "No unused gpios left to export\n");
 511		return 0;
 512	}
 513
 514	kpad->export_gpio = true;
 515
 516	kpad->gc.direction_input = adp5589_gpio_direction_input;
 517	kpad->gc.direction_output = adp5589_gpio_direction_output;
 518	kpad->gc.get = adp5589_gpio_get_value;
 519	kpad->gc.set = adp5589_gpio_set_value;
 520	kpad->gc.can_sleep = 1;
 521
 522	kpad->gc.base = gpio_data->gpio_start;
 523	kpad->gc.label = kpad->client->name;
 524	kpad->gc.owner = THIS_MODULE;
 525
 526	mutex_init(&kpad->gpio_lock);
 527
 528	error = gpiochip_add(&kpad->gc);
 529	if (error) {
 530		dev_err(dev, "gpiochip_add failed, err: %d\n", error);
 531		return error;
 532	}
 533
 534	for (i = 0; i <= kpad->var->bank(kpad->var->maxgpio); i++) {
 535		kpad->dat_out[i] = adp5589_read(kpad->client, kpad->var->reg(
 536						ADP5589_GPO_DATA_OUT_A) + i);
 537		kpad->dir[i] = adp5589_read(kpad->client, kpad->var->reg(
 538					    ADP5589_GPIO_DIRECTION_A) + i);
 539	}
 540
 541	if (gpio_data->setup) {
 542		error = gpio_data->setup(kpad->client,
 543					 kpad->gc.base, kpad->gc.ngpio,
 544					 gpio_data->context);
 545		if (error)
 546			dev_warn(dev, "setup failed, %d\n", error);
 547	}
 548
 549	return 0;
 550}
 551
 552static void adp5589_gpio_remove(struct adp5589_kpad *kpad)
 553{
 554	struct device *dev = &kpad->client->dev;
 555	const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
 556	const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
 557	int error;
 558
 559	if (!kpad->export_gpio)
 560		return;
 561
 562	if (gpio_data->teardown) {
 563		error = gpio_data->teardown(kpad->client,
 564					    kpad->gc.base, kpad->gc.ngpio,
 565					    gpio_data->context);
 566		if (error)
 567			dev_warn(dev, "teardown failed %d\n", error);
 568	}
 569
 570	error = gpiochip_remove(&kpad->gc);
 571	if (error)
 572		dev_warn(dev, "gpiochip_remove failed %d\n", error);
 573}
 574#else
 575static inline int adp5589_gpio_add(struct adp5589_kpad *kpad)
 576{
 577	return 0;
 578}
 579
 580static inline void adp5589_gpio_remove(struct adp5589_kpad *kpad)
 581{
 582}
 583#endif
 584
 585static void adp5589_report_switches(struct adp5589_kpad *kpad,
 586				    int key, int key_val)
 587{
 588	int i;
 589
 590	for (i = 0; i < kpad->gpimapsize; i++) {
 591		if (key_val == kpad->gpimap[i].pin) {
 592			input_report_switch(kpad->input,
 593					    kpad->gpimap[i].sw_evt,
 594					    key & KEY_EV_PRESSED);
 595			break;
 596		}
 597	}
 598}
 599
 600static void adp5589_report_events(struct adp5589_kpad *kpad, int ev_cnt)
 601{
 602	int i;
 603
 604	for (i = 0; i < ev_cnt; i++) {
 605		int key = adp5589_read(kpad->client, ADP5589_5_FIFO_1 + i);
 606		int key_val = key & KEY_EV_MASK;
 607
 608		if (key_val >= kpad->var->gpi_pin_base &&
 609		    key_val <= kpad->var->gpi_pin_end) {
 610			adp5589_report_switches(kpad, key, key_val);
 611		} else {
 612			input_report_key(kpad->input,
 613					 kpad->keycode[key_val - 1],
 614					 key & KEY_EV_PRESSED);
 615		}
 616	}
 617}
 618
 619static irqreturn_t adp5589_irq(int irq, void *handle)
 620{
 621	struct adp5589_kpad *kpad = handle;
 622	struct i2c_client *client = kpad->client;
 623	int status, ev_cnt;
 624
 625	status = adp5589_read(client, ADP5589_5_INT_STATUS);
 626
 627	if (status & OVRFLOW_INT)	/* Unlikely and should never happen */
 628		dev_err(&client->dev, "Event Overflow Error\n");
 629
 630	if (status & EVENT_INT) {
 631		ev_cnt = adp5589_read(client, ADP5589_5_STATUS) & KEC;
 632		if (ev_cnt) {
 633			adp5589_report_events(kpad, ev_cnt);
 634			input_sync(kpad->input);
 635		}
 636	}
 637
 638	adp5589_write(client, ADP5589_5_INT_STATUS, status); /* Status is W1C */
 639
 640	return IRQ_HANDLED;
 641}
 642
 643static int adp5589_get_evcode(struct adp5589_kpad *kpad, unsigned short key)
 644{
 645	int i;
 646
 647	for (i = 0; i < kpad->var->keymapsize; i++)
 648		if (key == kpad->keycode[i])
 649			return (i + 1) | KEY_EV_PRESSED;
 650
 651	dev_err(&kpad->client->dev, "RESET/UNLOCK key not in keycode map\n");
 652
 653	return -EINVAL;
 654}
 655
 656static int adp5589_setup(struct adp5589_kpad *kpad)
 657{
 658	struct i2c_client *client = kpad->client;
 659	const struct adp5589_kpad_platform_data *pdata =
 660		dev_get_platdata(&client->dev);
 661	u8 (*reg) (u8) = kpad->var->reg;
 662	unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
 663	unsigned char pull_mask = 0;
 664	int i, ret;
 665
 666	ret = adp5589_write(client, reg(ADP5589_PIN_CONFIG_A),
 667			    pdata->keypad_en_mask & kpad->var->row_mask);
 668	ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_B),
 669			     (pdata->keypad_en_mask >> kpad->var->col_shift) &
 670			     kpad->var->col_mask);
 671
 672	if (!kpad->is_adp5585)
 673		ret |= adp5589_write(client, ADP5589_PIN_CONFIG_C,
 674				     (pdata->keypad_en_mask >> 16) & 0xFF);
 675
 676	if (!kpad->is_adp5585 && pdata->en_keylock) {
 677		ret |= adp5589_write(client, ADP5589_UNLOCK1,
 678				     pdata->unlock_key1);
 679		ret |= adp5589_write(client, ADP5589_UNLOCK2,
 680				     pdata->unlock_key2);
 681		ret |= adp5589_write(client, ADP5589_UNLOCK_TIMERS,
 682				     pdata->unlock_timer & LTIME_MASK);
 683		ret |= adp5589_write(client, ADP5589_LOCK_CFG, LOCK_EN);
 684	}
 685
 686	for (i = 0; i < KEYP_MAX_EVENT; i++)
 687		ret |= adp5589_read(client, ADP5589_5_FIFO_1 + i);
 688
 689	for (i = 0; i < pdata->gpimapsize; i++) {
 690		unsigned short pin = pdata->gpimap[i].pin;
 691
 692		if (pin <= kpad->var->gpi_pin_row_end) {
 693			evt_mode1 |= (1 << (pin - kpad->var->gpi_pin_row_base));
 694		} else {
 695			evt_mode2 |=
 696			    ((1 << (pin - kpad->var->gpi_pin_col_base)) & 0xFF);
 697			if (!kpad->is_adp5585)
 698				evt_mode3 |= ((1 << (pin -
 699					kpad->var->gpi_pin_col_base)) >> 8);
 700		}
 701	}
 702
 703	if (pdata->gpimapsize) {
 704		ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_A),
 705				     evt_mode1);
 706		ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_B),
 707				     evt_mode2);
 708		if (!kpad->is_adp5585)
 709			ret |= adp5589_write(client,
 710					     reg(ADP5589_GPI_EVENT_EN_C),
 711					     evt_mode3);
 712	}
 713
 714	if (pdata->pull_dis_mask & pdata->pullup_en_100k &
 715		pdata->pullup_en_300k & pdata->pulldown_en_300k)
 716		dev_warn(&client->dev, "Conflicting pull resistor config\n");
 717
 718	for (i = 0; i <= kpad->var->max_row_num; i++) {
 719		unsigned val = 0, bit = (1 << i);
 720		if (pdata->pullup_en_300k & bit)
 721			val = 0;
 722		else if (pdata->pulldown_en_300k & bit)
 723			val = 1;
 724		else if (pdata->pullup_en_100k & bit)
 725			val = 2;
 726		else if (pdata->pull_dis_mask & bit)
 727			val = 3;
 728
 729		pull_mask |= val << (2 * (i & 0x3));
 730
 731		if (i == 3 || i == kpad->var->max_row_num) {
 732			ret |= adp5589_write(client, reg(ADP5585_RPULL_CONFIG_A)
 733					     + (i >> 2), pull_mask);
 734			pull_mask = 0;
 735		}
 736	}
 737
 738	for (i = 0; i <= kpad->var->max_col_num; i++) {
 739		unsigned val = 0, bit = 1 << (i + kpad->var->col_shift);
 740		if (pdata->pullup_en_300k & bit)
 741			val = 0;
 742		else if (pdata->pulldown_en_300k & bit)
 743			val = 1;
 744		else if (pdata->pullup_en_100k & bit)
 745			val = 2;
 746		else if (pdata->pull_dis_mask & bit)
 747			val = 3;
 748
 749		pull_mask |= val << (2 * (i & 0x3));
 750
 751		if (i == 3 || i == kpad->var->max_col_num) {
 752			ret |= adp5589_write(client,
 753					     reg(ADP5585_RPULL_CONFIG_C) +
 754					     (i >> 2), pull_mask);
 755			pull_mask = 0;
 756		}
 757	}
 758
 759	if (pdata->reset1_key_1 && pdata->reset1_key_2 && pdata->reset1_key_3) {
 760		ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_A),
 761				     adp5589_get_evcode(kpad,
 762							pdata->reset1_key_1));
 763		ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_B),
 764				     adp5589_get_evcode(kpad,
 765							pdata->reset1_key_2));
 766		ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_C),
 767				     adp5589_get_evcode(kpad,
 768							pdata->reset1_key_3));
 769		kpad->extend_cfg |= R4_EXTEND_CFG;
 770	}
 771
 772	if (pdata->reset2_key_1 && pdata->reset2_key_2) {
 773		ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_A),
 774				     adp5589_get_evcode(kpad,
 775							pdata->reset2_key_1));
 776		ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_B),
 777				     adp5589_get_evcode(kpad,
 778							pdata->reset2_key_2));
 779		kpad->extend_cfg |= C4_EXTEND_CFG;
 780	}
 781
 782	if (kpad->extend_cfg) {
 783		ret |= adp5589_write(client, reg(ADP5589_RESET_CFG),
 784				     pdata->reset_cfg);
 785		ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_D),
 786				     kpad->extend_cfg);
 787	}
 788
 789	ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_A),
 790			    pdata->debounce_dis_mask & kpad->var->row_mask);
 791
 792	ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_B),
 793			     (pdata->debounce_dis_mask >> kpad->var->col_shift)
 794			     & kpad->var->col_mask);
 795
 796	if (!kpad->is_adp5585)
 797		ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_C),
 798				     (pdata->debounce_dis_mask >> 16) & 0xFF);
 799
 800	ret |= adp5589_write(client, reg(ADP5589_POLL_PTIME_CFG),
 801			     pdata->scan_cycle_time & PTIME_MASK);
 802	ret |= adp5589_write(client, ADP5589_5_INT_STATUS,
 803			     (kpad->is_adp5585 ? 0 : LOGIC2_INT) |
 804			     LOGIC1_INT | OVRFLOW_INT |
 805			     (kpad->is_adp5585 ? 0 : LOCK_INT) |
 806			     GPI_INT | EVENT_INT);	/* Status is W1C */
 807
 808	ret |= adp5589_write(client, reg(ADP5589_GENERAL_CFG),
 809			     INT_CFG | OSC_EN | CORE_CLK(3));
 810	ret |= adp5589_write(client, reg(ADP5589_INT_EN),
 811			     OVRFLOW_IEN | GPI_IEN | EVENT_IEN);
 812
 813	if (ret < 0) {
 814		dev_err(&client->dev, "Write Error\n");
 815		return ret;
 816	}
 817
 818	return 0;
 819}
 820
 821static void adp5589_report_switch_state(struct adp5589_kpad *kpad)
 822{
 823	int gpi_stat_tmp, pin_loc;
 824	int i;
 825	int gpi_stat1 = adp5589_read(kpad->client,
 826				     kpad->var->reg(ADP5589_GPI_STATUS_A));
 827	int gpi_stat2 = adp5589_read(kpad->client,
 828				     kpad->var->reg(ADP5589_GPI_STATUS_B));
 829	int gpi_stat3 = !kpad->is_adp5585 ?
 830			adp5589_read(kpad->client, ADP5589_GPI_STATUS_C) : 0;
 831
 832	for (i = 0; i < kpad->gpimapsize; i++) {
 833		unsigned short pin = kpad->gpimap[i].pin;
 834
 835		if (pin <= kpad->var->gpi_pin_row_end) {
 836			gpi_stat_tmp = gpi_stat1;
 837			pin_loc = pin - kpad->var->gpi_pin_row_base;
 838		} else if ((pin - kpad->var->gpi_pin_col_base) < 8) {
 839			gpi_stat_tmp = gpi_stat2;
 840			pin_loc = pin - kpad->var->gpi_pin_col_base;
 841		} else {
 842			gpi_stat_tmp = gpi_stat3;
 843			pin_loc = pin - kpad->var->gpi_pin_col_base - 8;
 844		}
 845
 846		if (gpi_stat_tmp < 0) {
 847			dev_err(&kpad->client->dev,
 848				"Can't read GPIO_DAT_STAT switch %d, default to OFF\n",
 849				pin);
 850			gpi_stat_tmp = 0;
 851		}
 852
 853		input_report_switch(kpad->input,
 854				    kpad->gpimap[i].sw_evt,
 855				    !(gpi_stat_tmp & (1 << pin_loc)));
 856	}
 857
 858	input_sync(kpad->input);
 859}
 860
 861static int adp5589_probe(struct i2c_client *client,
 862			 const struct i2c_device_id *id)
 863{
 864	struct adp5589_kpad *kpad;
 865	const struct adp5589_kpad_platform_data *pdata =
 866		dev_get_platdata(&client->dev);
 867	struct input_dev *input;
 868	unsigned int revid;
 869	int ret, i;
 870	int error;
 871
 872	if (!i2c_check_functionality(client->adapter,
 873				     I2C_FUNC_SMBUS_BYTE_DATA)) {
 874		dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
 875		return -EIO;
 876	}
 877
 878	if (!pdata) {
 879		dev_err(&client->dev, "no platform data?\n");
 880		return -EINVAL;
 881	}
 882
 883	kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
 884	if (!kpad)
 885		return -ENOMEM;
 886
 887	switch (id->driver_data) {
 888	case ADP5585_02:
 889		kpad->adp5585_support_row5 = true;
 
 890	case ADP5585_01:
 891		kpad->is_adp5585 = true;
 892		kpad->var = &const_adp5585;
 893		break;
 894	case ADP5589:
 
 895		kpad->var = &const_adp5589;
 896		break;
 897	}
 898
 899	if (!((pdata->keypad_en_mask & kpad->var->row_mask) &&
 900			(pdata->keypad_en_mask >> kpad->var->col_shift)) ||
 901			!pdata->keymap) {
 902		dev_err(&client->dev, "no rows, cols or keymap from pdata\n");
 903		error = -EINVAL;
 904		goto err_free_mem;
 905	}
 906
 907	if (pdata->keymapsize != kpad->var->keymapsize) {
 908		dev_err(&client->dev, "invalid keymapsize\n");
 909		error = -EINVAL;
 910		goto err_free_mem;
 911	}
 912
 913	if (!pdata->gpimap && pdata->gpimapsize) {
 914		dev_err(&client->dev, "invalid gpimap from pdata\n");
 915		error = -EINVAL;
 916		goto err_free_mem;
 917	}
 918
 919	if (pdata->gpimapsize > kpad->var->gpimapsize_max) {
 920		dev_err(&client->dev, "invalid gpimapsize\n");
 921		error = -EINVAL;
 922		goto err_free_mem;
 923	}
 924
 925	for (i = 0; i < pdata->gpimapsize; i++) {
 926		unsigned short pin = pdata->gpimap[i].pin;
 927
 928		if (pin < kpad->var->gpi_pin_base ||
 929				pin > kpad->var->gpi_pin_end) {
 930			dev_err(&client->dev, "invalid gpi pin data\n");
 931			error = -EINVAL;
 932			goto err_free_mem;
 933		}
 934
 935		if ((1 << (pin - kpad->var->gpi_pin_row_base)) &
 936				pdata->keypad_en_mask) {
 937			dev_err(&client->dev, "invalid gpi row/col data\n");
 938			error = -EINVAL;
 939			goto err_free_mem;
 940		}
 941	}
 942
 943	if (!client->irq) {
 944		dev_err(&client->dev, "no IRQ?\n");
 945		error = -EINVAL;
 946		goto err_free_mem;
 947	}
 948
 949	input = input_allocate_device();
 950	if (!input) {
 951		error = -ENOMEM;
 952		goto err_free_mem;
 953	}
 954
 955	kpad->client = client;
 956	kpad->input = input;
 957
 958	ret = adp5589_read(client, ADP5589_5_ID);
 959	if (ret < 0) {
 960		error = ret;
 961		goto err_free_input;
 962	}
 963
 964	revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
 965
 966	input->name = client->name;
 967	input->phys = "adp5589-keys/input0";
 968	input->dev.parent = &client->dev;
 969
 970	input_set_drvdata(input, kpad);
 971
 972	input->id.bustype = BUS_I2C;
 973	input->id.vendor = 0x0001;
 974	input->id.product = 0x0001;
 975	input->id.version = revid;
 976
 977	input->keycodesize = sizeof(kpad->keycode[0]);
 978	input->keycodemax = pdata->keymapsize;
 979	input->keycode = kpad->keycode;
 980
 981	memcpy(kpad->keycode, pdata->keymap,
 982	       pdata->keymapsize * input->keycodesize);
 983
 984	kpad->gpimap = pdata->gpimap;
 985	kpad->gpimapsize = pdata->gpimapsize;
 986
 987	/* setup input device */
 988	__set_bit(EV_KEY, input->evbit);
 989
 990	if (pdata->repeat)
 991		__set_bit(EV_REP, input->evbit);
 992
 993	for (i = 0; i < input->keycodemax; i++)
 994		if (kpad->keycode[i] <= KEY_MAX)
 995			__set_bit(kpad->keycode[i], input->keybit);
 996	__clear_bit(KEY_RESERVED, input->keybit);
 997
 998	if (kpad->gpimapsize)
 999		__set_bit(EV_SW, input->evbit);
1000	for (i = 0; i < kpad->gpimapsize; i++)
1001		__set_bit(kpad->gpimap[i].sw_evt, input->swbit);
1002
1003	error = input_register_device(input);
1004	if (error) {
1005		dev_err(&client->dev, "unable to register input device\n");
1006		goto err_free_input;
1007	}
1008
1009	error = request_threaded_irq(client->irq, NULL, adp5589_irq,
1010				     IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
1011				     client->dev.driver->name, kpad);
1012	if (error) {
1013		dev_err(&client->dev, "irq %d busy?\n", client->irq);
1014		goto err_unreg_dev;
1015	}
1016
1017	error = adp5589_setup(kpad);
1018	if (error)
1019		goto err_free_irq;
1020
1021	if (kpad->gpimapsize)
1022		adp5589_report_switch_state(kpad);
1023
1024	error = adp5589_gpio_add(kpad);
1025	if (error)
1026		goto err_free_irq;
1027
1028	device_init_wakeup(&client->dev, 1);
1029	i2c_set_clientdata(client, kpad);
1030
1031	dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
1032	return 0;
1033
1034err_free_irq:
1035	free_irq(client->irq, kpad);
1036err_unreg_dev:
1037	input_unregister_device(input);
1038	input = NULL;
1039err_free_input:
1040	input_free_device(input);
1041err_free_mem:
1042	kfree(kpad);
1043
1044	return error;
1045}
1046
1047static int adp5589_remove(struct i2c_client *client)
1048{
1049	struct adp5589_kpad *kpad = i2c_get_clientdata(client);
1050
1051	adp5589_write(client, kpad->var->reg(ADP5589_GENERAL_CFG), 0);
1052	free_irq(client->irq, kpad);
1053	input_unregister_device(kpad->input);
1054	adp5589_gpio_remove(kpad);
1055	kfree(kpad);
1056
1057	return 0;
1058}
1059
1060#ifdef CONFIG_PM_SLEEP
1061static int adp5589_suspend(struct device *dev)
1062{
1063	struct adp5589_kpad *kpad = dev_get_drvdata(dev);
1064	struct i2c_client *client = kpad->client;
1065
1066	disable_irq(client->irq);
1067
1068	if (device_may_wakeup(&client->dev))
1069		enable_irq_wake(client->irq);
1070
1071	return 0;
1072}
1073
1074static int adp5589_resume(struct device *dev)
1075{
1076	struct adp5589_kpad *kpad = dev_get_drvdata(dev);
1077	struct i2c_client *client = kpad->client;
1078
1079	if (device_may_wakeup(&client->dev))
1080		disable_irq_wake(client->irq);
1081
1082	enable_irq(client->irq);
1083
1084	return 0;
1085}
1086#endif
1087
1088static SIMPLE_DEV_PM_OPS(adp5589_dev_pm_ops, adp5589_suspend, adp5589_resume);
1089
1090static const struct i2c_device_id adp5589_id[] = {
1091	{"adp5589-keys", ADP5589},
1092	{"adp5585-keys", ADP5585_01},
1093	{"adp5585-02-keys", ADP5585_02}, /* Adds ROW5 to ADP5585 */
1094	{}
1095};
1096
1097MODULE_DEVICE_TABLE(i2c, adp5589_id);
1098
1099static struct i2c_driver adp5589_driver = {
1100	.driver = {
1101		.name = KBUILD_MODNAME,
1102		.owner = THIS_MODULE,
1103		.pm = &adp5589_dev_pm_ops,
1104	},
1105	.probe = adp5589_probe,
1106	.remove = adp5589_remove,
1107	.id_table = adp5589_id,
1108};
1109
1110module_i2c_driver(adp5589_driver);
1111
1112MODULE_LICENSE("GPL");
1113MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
1114MODULE_DESCRIPTION("ADP5589/ADP5585 Keypad driver");
v5.4
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Description:  keypad driver for ADP5589, ADP5585
   4 *		 I2C QWERTY Keypad and IO Expander
   5 * Bugs: Enter bugs at http://blackfin.uclinux.org/
   6 *
   7 * Copyright (C) 2010-2011 Analog Devices Inc.
 
   8 */
   9
  10#include <linux/module.h>
  11#include <linux/interrupt.h>
  12#include <linux/irq.h>
  13#include <linux/workqueue.h>
  14#include <linux/errno.h>
  15#include <linux/pm.h>
  16#include <linux/platform_device.h>
  17#include <linux/input.h>
  18#include <linux/i2c.h>
  19#include <linux/gpio.h>
  20#include <linux/slab.h>
  21
  22#include <linux/input/adp5589.h>
  23
  24/* ADP5589/ADP5585 Common Registers */
  25#define ADP5589_5_ID			0x00
  26#define ADP5589_5_INT_STATUS		0x01
  27#define ADP5589_5_STATUS		0x02
  28#define ADP5589_5_FIFO_1		0x03
  29#define ADP5589_5_FIFO_2		0x04
  30#define ADP5589_5_FIFO_3		0x05
  31#define ADP5589_5_FIFO_4		0x06
  32#define ADP5589_5_FIFO_5		0x07
  33#define ADP5589_5_FIFO_6		0x08
  34#define ADP5589_5_FIFO_7		0x09
  35#define ADP5589_5_FIFO_8		0x0A
  36#define ADP5589_5_FIFO_9		0x0B
  37#define ADP5589_5_FIFO_10		0x0C
  38#define ADP5589_5_FIFO_11		0x0D
  39#define ADP5589_5_FIFO_12		0x0E
  40#define ADP5589_5_FIFO_13		0x0F
  41#define ADP5589_5_FIFO_14		0x10
  42#define ADP5589_5_FIFO_15		0x11
  43#define ADP5589_5_FIFO_16		0x12
  44#define ADP5589_5_GPI_INT_STAT_A	0x13
  45#define ADP5589_5_GPI_INT_STAT_B	0x14
  46
  47/* ADP5589 Registers */
  48#define ADP5589_GPI_INT_STAT_C		0x15
  49#define ADP5589_GPI_STATUS_A		0x16
  50#define ADP5589_GPI_STATUS_B		0x17
  51#define ADP5589_GPI_STATUS_C		0x18
  52#define ADP5589_RPULL_CONFIG_A		0x19
  53#define ADP5589_RPULL_CONFIG_B		0x1A
  54#define ADP5589_RPULL_CONFIG_C		0x1B
  55#define ADP5589_RPULL_CONFIG_D		0x1C
  56#define ADP5589_RPULL_CONFIG_E		0x1D
  57#define ADP5589_GPI_INT_LEVEL_A		0x1E
  58#define ADP5589_GPI_INT_LEVEL_B		0x1F
  59#define ADP5589_GPI_INT_LEVEL_C		0x20
  60#define ADP5589_GPI_EVENT_EN_A		0x21
  61#define ADP5589_GPI_EVENT_EN_B		0x22
  62#define ADP5589_GPI_EVENT_EN_C		0x23
  63#define ADP5589_GPI_INTERRUPT_EN_A	0x24
  64#define ADP5589_GPI_INTERRUPT_EN_B	0x25
  65#define ADP5589_GPI_INTERRUPT_EN_C	0x26
  66#define ADP5589_DEBOUNCE_DIS_A		0x27
  67#define ADP5589_DEBOUNCE_DIS_B		0x28
  68#define ADP5589_DEBOUNCE_DIS_C		0x29
  69#define ADP5589_GPO_DATA_OUT_A		0x2A
  70#define ADP5589_GPO_DATA_OUT_B		0x2B
  71#define ADP5589_GPO_DATA_OUT_C		0x2C
  72#define ADP5589_GPO_OUT_MODE_A		0x2D
  73#define ADP5589_GPO_OUT_MODE_B		0x2E
  74#define ADP5589_GPO_OUT_MODE_C		0x2F
  75#define ADP5589_GPIO_DIRECTION_A	0x30
  76#define ADP5589_GPIO_DIRECTION_B	0x31
  77#define ADP5589_GPIO_DIRECTION_C	0x32
  78#define ADP5589_UNLOCK1			0x33
  79#define ADP5589_UNLOCK2			0x34
  80#define ADP5589_EXT_LOCK_EVENT		0x35
  81#define ADP5589_UNLOCK_TIMERS		0x36
  82#define ADP5589_LOCK_CFG		0x37
  83#define ADP5589_RESET1_EVENT_A		0x38
  84#define ADP5589_RESET1_EVENT_B		0x39
  85#define ADP5589_RESET1_EVENT_C		0x3A
  86#define ADP5589_RESET2_EVENT_A		0x3B
  87#define ADP5589_RESET2_EVENT_B		0x3C
  88#define ADP5589_RESET_CFG		0x3D
  89#define ADP5589_PWM_OFFT_LOW		0x3E
  90#define ADP5589_PWM_OFFT_HIGH		0x3F
  91#define ADP5589_PWM_ONT_LOW		0x40
  92#define ADP5589_PWM_ONT_HIGH		0x41
  93#define ADP5589_PWM_CFG			0x42
  94#define ADP5589_CLOCK_DIV_CFG		0x43
  95#define ADP5589_LOGIC_1_CFG		0x44
  96#define ADP5589_LOGIC_2_CFG		0x45
  97#define ADP5589_LOGIC_FF_CFG		0x46
  98#define ADP5589_LOGIC_INT_EVENT_EN	0x47
  99#define ADP5589_POLL_PTIME_CFG		0x48
 100#define ADP5589_PIN_CONFIG_A		0x49
 101#define ADP5589_PIN_CONFIG_B		0x4A
 102#define ADP5589_PIN_CONFIG_C		0x4B
 103#define ADP5589_PIN_CONFIG_D		0x4C
 104#define ADP5589_GENERAL_CFG		0x4D
 105#define ADP5589_INT_EN			0x4E
 106
 107/* ADP5585 Registers */
 108#define ADP5585_GPI_STATUS_A		0x15
 109#define ADP5585_GPI_STATUS_B		0x16
 110#define ADP5585_RPULL_CONFIG_A		0x17
 111#define ADP5585_RPULL_CONFIG_B		0x18
 112#define ADP5585_RPULL_CONFIG_C		0x19
 113#define ADP5585_RPULL_CONFIG_D		0x1A
 114#define ADP5585_GPI_INT_LEVEL_A		0x1B
 115#define ADP5585_GPI_INT_LEVEL_B		0x1C
 116#define ADP5585_GPI_EVENT_EN_A		0x1D
 117#define ADP5585_GPI_EVENT_EN_B		0x1E
 118#define ADP5585_GPI_INTERRUPT_EN_A	0x1F
 119#define ADP5585_GPI_INTERRUPT_EN_B	0x20
 120#define ADP5585_DEBOUNCE_DIS_A		0x21
 121#define ADP5585_DEBOUNCE_DIS_B		0x22
 122#define ADP5585_GPO_DATA_OUT_A		0x23
 123#define ADP5585_GPO_DATA_OUT_B		0x24
 124#define ADP5585_GPO_OUT_MODE_A		0x25
 125#define ADP5585_GPO_OUT_MODE_B		0x26
 126#define ADP5585_GPIO_DIRECTION_A	0x27
 127#define ADP5585_GPIO_DIRECTION_B	0x28
 128#define ADP5585_RESET1_EVENT_A		0x29
 129#define ADP5585_RESET1_EVENT_B		0x2A
 130#define ADP5585_RESET1_EVENT_C		0x2B
 131#define ADP5585_RESET2_EVENT_A		0x2C
 132#define ADP5585_RESET2_EVENT_B		0x2D
 133#define ADP5585_RESET_CFG		0x2E
 134#define ADP5585_PWM_OFFT_LOW		0x2F
 135#define ADP5585_PWM_OFFT_HIGH		0x30
 136#define ADP5585_PWM_ONT_LOW		0x31
 137#define ADP5585_PWM_ONT_HIGH		0x32
 138#define ADP5585_PWM_CFG			0x33
 139#define ADP5585_LOGIC_CFG		0x34
 140#define ADP5585_LOGIC_FF_CFG		0x35
 141#define ADP5585_LOGIC_INT_EVENT_EN	0x36
 142#define ADP5585_POLL_PTIME_CFG		0x37
 143#define ADP5585_PIN_CONFIG_A		0x38
 144#define ADP5585_PIN_CONFIG_B		0x39
 145#define ADP5585_PIN_CONFIG_D		0x3A
 146#define ADP5585_GENERAL_CFG		0x3B
 147#define ADP5585_INT_EN			0x3C
 148
 149/* ID Register */
 150#define ADP5589_5_DEVICE_ID_MASK	0xF
 151#define ADP5589_5_MAN_ID_MASK		0xF
 152#define ADP5589_5_MAN_ID_SHIFT		4
 153#define ADP5589_5_MAN_ID		0x02
 154
 155/* GENERAL_CFG Register */
 156#define OSC_EN		(1 << 7)
 157#define CORE_CLK(x)	(((x) & 0x3) << 5)
 158#define LCK_TRK_LOGIC	(1 << 4)	/* ADP5589 only */
 159#define LCK_TRK_GPI	(1 << 3)	/* ADP5589 only */
 160#define INT_CFG		(1 << 1)
 161#define RST_CFG		(1 << 0)
 162
 163/* INT_EN Register */
 164#define LOGIC2_IEN	(1 << 5)	/* ADP5589 only */
 165#define LOGIC1_IEN	(1 << 4)
 166#define LOCK_IEN	(1 << 3)	/* ADP5589 only */
 167#define OVRFLOW_IEN	(1 << 2)
 168#define GPI_IEN		(1 << 1)
 169#define EVENT_IEN	(1 << 0)
 170
 171/* Interrupt Status Register */
 172#define LOGIC2_INT	(1 << 5)	/* ADP5589 only */
 173#define LOGIC1_INT	(1 << 4)
 174#define LOCK_INT	(1 << 3)	/* ADP5589 only */
 175#define OVRFLOW_INT	(1 << 2)
 176#define GPI_INT		(1 << 1)
 177#define EVENT_INT	(1 << 0)
 178
 179/* STATUS Register */
 180#define LOGIC2_STAT	(1 << 7)	/* ADP5589 only */
 181#define LOGIC1_STAT	(1 << 6)
 182#define LOCK_STAT	(1 << 5)	/* ADP5589 only */
 183#define KEC		0x1F
 184
 185/* PIN_CONFIG_D Register */
 186#define C4_EXTEND_CFG	(1 << 6)	/* RESET2 */
 187#define R4_EXTEND_CFG	(1 << 5)	/* RESET1 */
 188
 189/* LOCK_CFG */
 190#define LOCK_EN		(1 << 0)
 191
 192#define PTIME_MASK	0x3
 193#define LTIME_MASK	0x3		/* ADP5589 only */
 194
 195/* Key Event Register xy */
 196#define KEY_EV_PRESSED		(1 << 7)
 197#define KEY_EV_MASK		(0x7F)
 198
 199#define KEYP_MAX_EVENT		16
 200#define ADP5589_MAXGPIO		19
 201#define ADP5585_MAXGPIO		11 /* 10 on the ADP5585-01, 11 on ADP5585-02 */
 202
 203enum {
 204	ADP5589,
 205	ADP5585_01,
 206	ADP5585_02
 207};
 208
 209struct adp_constants {
 210	u8 maxgpio;
 211	u8 keymapsize;
 212	u8 gpi_pin_row_base;
 213	u8 gpi_pin_row_end;
 214	u8 gpi_pin_col_base;
 215	u8 gpi_pin_base;
 216	u8 gpi_pin_end;
 217	u8 gpimapsize_max;
 218	u8 max_row_num;
 219	u8 max_col_num;
 220	u8 row_mask;
 221	u8 col_mask;
 222	u8 col_shift;
 223	u8 c4_extend_cfg;
 224	u8 (*bank) (u8 offset);
 225	u8 (*bit) (u8 offset);
 226	u8 (*reg) (u8 reg);
 227};
 228
 229struct adp5589_kpad {
 230	struct i2c_client *client;
 231	struct input_dev *input;
 232	const struct adp_constants *var;
 233	unsigned short keycode[ADP5589_KEYMAPSIZE];
 234	const struct adp5589_gpi_map *gpimap;
 235	unsigned short gpimapsize;
 236	unsigned extend_cfg;
 237	bool is_adp5585;
 238	bool support_row5;
 239#ifdef CONFIG_GPIOLIB
 240	unsigned char gpiomap[ADP5589_MAXGPIO];
 241	bool export_gpio;
 242	struct gpio_chip gc;
 243	struct mutex gpio_lock;	/* Protect cached dir, dat_out */
 244	u8 dat_out[3];
 245	u8 dir[3];
 246#endif
 247};
 248
 249/*
 250 *  ADP5589 / ADP5585 derivative / variant handling
 251 */
 252
 253
 254/* ADP5589 */
 255
 256static unsigned char adp5589_bank(unsigned char offset)
 257{
 258	return offset >> 3;
 259}
 260
 261static unsigned char adp5589_bit(unsigned char offset)
 262{
 263	return 1u << (offset & 0x7);
 264}
 265
 266static unsigned char adp5589_reg(unsigned char reg)
 267{
 268	return reg;
 269}
 270
 271static const struct adp_constants const_adp5589 = {
 272	.maxgpio		= ADP5589_MAXGPIO,
 273	.keymapsize		= ADP5589_KEYMAPSIZE,
 274	.gpi_pin_row_base	= ADP5589_GPI_PIN_ROW_BASE,
 275	.gpi_pin_row_end	= ADP5589_GPI_PIN_ROW_END,
 276	.gpi_pin_col_base	= ADP5589_GPI_PIN_COL_BASE,
 277	.gpi_pin_base		= ADP5589_GPI_PIN_BASE,
 278	.gpi_pin_end		= ADP5589_GPI_PIN_END,
 279	.gpimapsize_max		= ADP5589_GPIMAPSIZE_MAX,
 280	.c4_extend_cfg		= 12,
 281	.max_row_num		= ADP5589_MAX_ROW_NUM,
 282	.max_col_num		= ADP5589_MAX_COL_NUM,
 283	.row_mask		= ADP5589_ROW_MASK,
 284	.col_mask		= ADP5589_COL_MASK,
 285	.col_shift		= ADP5589_COL_SHIFT,
 286	.bank			= adp5589_bank,
 287	.bit			= adp5589_bit,
 288	.reg			= adp5589_reg,
 289};
 290
 291/* ADP5585 */
 292
 293static unsigned char adp5585_bank(unsigned char offset)
 294{
 295	return offset > ADP5585_MAX_ROW_NUM;
 296}
 297
 298static unsigned char adp5585_bit(unsigned char offset)
 299{
 300	return (offset > ADP5585_MAX_ROW_NUM) ?
 301		1u << (offset - ADP5585_COL_SHIFT) : 1u << offset;
 302}
 303
 304static const unsigned char adp5585_reg_lut[] = {
 305	[ADP5589_GPI_STATUS_A]		= ADP5585_GPI_STATUS_A,
 306	[ADP5589_GPI_STATUS_B]		= ADP5585_GPI_STATUS_B,
 307	[ADP5589_RPULL_CONFIG_A]	= ADP5585_RPULL_CONFIG_A,
 308	[ADP5589_RPULL_CONFIG_B]	= ADP5585_RPULL_CONFIG_B,
 309	[ADP5589_RPULL_CONFIG_C]	= ADP5585_RPULL_CONFIG_C,
 310	[ADP5589_RPULL_CONFIG_D]	= ADP5585_RPULL_CONFIG_D,
 311	[ADP5589_GPI_INT_LEVEL_A]	= ADP5585_GPI_INT_LEVEL_A,
 312	[ADP5589_GPI_INT_LEVEL_B]	= ADP5585_GPI_INT_LEVEL_B,
 313	[ADP5589_GPI_EVENT_EN_A]	= ADP5585_GPI_EVENT_EN_A,
 314	[ADP5589_GPI_EVENT_EN_B]	= ADP5585_GPI_EVENT_EN_B,
 315	[ADP5589_GPI_INTERRUPT_EN_A]	= ADP5585_GPI_INTERRUPT_EN_A,
 316	[ADP5589_GPI_INTERRUPT_EN_B]	= ADP5585_GPI_INTERRUPT_EN_B,
 317	[ADP5589_DEBOUNCE_DIS_A]	= ADP5585_DEBOUNCE_DIS_A,
 318	[ADP5589_DEBOUNCE_DIS_B]	= ADP5585_DEBOUNCE_DIS_B,
 319	[ADP5589_GPO_DATA_OUT_A]	= ADP5585_GPO_DATA_OUT_A,
 320	[ADP5589_GPO_DATA_OUT_B]	= ADP5585_GPO_DATA_OUT_B,
 321	[ADP5589_GPO_OUT_MODE_A]	= ADP5585_GPO_OUT_MODE_A,
 322	[ADP5589_GPO_OUT_MODE_B]	= ADP5585_GPO_OUT_MODE_B,
 323	[ADP5589_GPIO_DIRECTION_A]	= ADP5585_GPIO_DIRECTION_A,
 324	[ADP5589_GPIO_DIRECTION_B]	= ADP5585_GPIO_DIRECTION_B,
 325	[ADP5589_RESET1_EVENT_A]	= ADP5585_RESET1_EVENT_A,
 326	[ADP5589_RESET1_EVENT_B]	= ADP5585_RESET1_EVENT_B,
 327	[ADP5589_RESET1_EVENT_C]	= ADP5585_RESET1_EVENT_C,
 328	[ADP5589_RESET2_EVENT_A]	= ADP5585_RESET2_EVENT_A,
 329	[ADP5589_RESET2_EVENT_B]	= ADP5585_RESET2_EVENT_B,
 330	[ADP5589_RESET_CFG]		= ADP5585_RESET_CFG,
 331	[ADP5589_PWM_OFFT_LOW]		= ADP5585_PWM_OFFT_LOW,
 332	[ADP5589_PWM_OFFT_HIGH]		= ADP5585_PWM_OFFT_HIGH,
 333	[ADP5589_PWM_ONT_LOW]		= ADP5585_PWM_ONT_LOW,
 334	[ADP5589_PWM_ONT_HIGH]		= ADP5585_PWM_ONT_HIGH,
 335	[ADP5589_PWM_CFG]		= ADP5585_PWM_CFG,
 336	[ADP5589_LOGIC_1_CFG]		= ADP5585_LOGIC_CFG,
 337	[ADP5589_LOGIC_FF_CFG]		= ADP5585_LOGIC_FF_CFG,
 338	[ADP5589_LOGIC_INT_EVENT_EN]	= ADP5585_LOGIC_INT_EVENT_EN,
 339	[ADP5589_POLL_PTIME_CFG]	= ADP5585_POLL_PTIME_CFG,
 340	[ADP5589_PIN_CONFIG_A]		= ADP5585_PIN_CONFIG_A,
 341	[ADP5589_PIN_CONFIG_B]		= ADP5585_PIN_CONFIG_B,
 342	[ADP5589_PIN_CONFIG_D]		= ADP5585_PIN_CONFIG_D,
 343	[ADP5589_GENERAL_CFG]		= ADP5585_GENERAL_CFG,
 344	[ADP5589_INT_EN]		= ADP5585_INT_EN,
 345};
 346
 347static unsigned char adp5585_reg(unsigned char reg)
 348{
 349	return adp5585_reg_lut[reg];
 350}
 351
 352static const struct adp_constants const_adp5585 = {
 353	.maxgpio		= ADP5585_MAXGPIO,
 354	.keymapsize		= ADP5585_KEYMAPSIZE,
 355	.gpi_pin_row_base	= ADP5585_GPI_PIN_ROW_BASE,
 356	.gpi_pin_row_end	= ADP5585_GPI_PIN_ROW_END,
 357	.gpi_pin_col_base	= ADP5585_GPI_PIN_COL_BASE,
 358	.gpi_pin_base		= ADP5585_GPI_PIN_BASE,
 359	.gpi_pin_end		= ADP5585_GPI_PIN_END,
 360	.gpimapsize_max		= ADP5585_GPIMAPSIZE_MAX,
 361	.c4_extend_cfg		= 10,
 362	.max_row_num		= ADP5585_MAX_ROW_NUM,
 363	.max_col_num		= ADP5585_MAX_COL_NUM,
 364	.row_mask		= ADP5585_ROW_MASK,
 365	.col_mask		= ADP5585_COL_MASK,
 366	.col_shift		= ADP5585_COL_SHIFT,
 367	.bank			= adp5585_bank,
 368	.bit			= adp5585_bit,
 369	.reg			= adp5585_reg,
 370};
 371
 372static int adp5589_read(struct i2c_client *client, u8 reg)
 373{
 374	int ret = i2c_smbus_read_byte_data(client, reg);
 375
 376	if (ret < 0)
 377		dev_err(&client->dev, "Read Error\n");
 378
 379	return ret;
 380}
 381
 382static int adp5589_write(struct i2c_client *client, u8 reg, u8 val)
 383{
 384	return i2c_smbus_write_byte_data(client, reg, val);
 385}
 386
 387#ifdef CONFIG_GPIOLIB
 388static int adp5589_gpio_get_value(struct gpio_chip *chip, unsigned off)
 389{
 390	struct adp5589_kpad *kpad = gpiochip_get_data(chip);
 391	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 392	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 393
 394	return !!(adp5589_read(kpad->client,
 395			       kpad->var->reg(ADP5589_GPI_STATUS_A) + bank) &
 396			       bit);
 397}
 398
 399static void adp5589_gpio_set_value(struct gpio_chip *chip,
 400				   unsigned off, int val)
 401{
 402	struct adp5589_kpad *kpad = gpiochip_get_data(chip);
 403	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 404	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 405
 406	mutex_lock(&kpad->gpio_lock);
 407
 408	if (val)
 409		kpad->dat_out[bank] |= bit;
 410	else
 411		kpad->dat_out[bank] &= ~bit;
 412
 413	adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A) +
 414		      bank, kpad->dat_out[bank]);
 415
 416	mutex_unlock(&kpad->gpio_lock);
 417}
 418
 419static int adp5589_gpio_direction_input(struct gpio_chip *chip, unsigned off)
 420{
 421	struct adp5589_kpad *kpad = gpiochip_get_data(chip);
 422	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 423	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 424	int ret;
 425
 426	mutex_lock(&kpad->gpio_lock);
 427
 428	kpad->dir[bank] &= ~bit;
 429	ret = adp5589_write(kpad->client,
 430			    kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
 431			    kpad->dir[bank]);
 432
 433	mutex_unlock(&kpad->gpio_lock);
 434
 435	return ret;
 436}
 437
 438static int adp5589_gpio_direction_output(struct gpio_chip *chip,
 439					 unsigned off, int val)
 440{
 441	struct adp5589_kpad *kpad = gpiochip_get_data(chip);
 442	unsigned int bank = kpad->var->bank(kpad->gpiomap[off]);
 443	unsigned int bit = kpad->var->bit(kpad->gpiomap[off]);
 444	int ret;
 445
 446	mutex_lock(&kpad->gpio_lock);
 447
 448	kpad->dir[bank] |= bit;
 449
 450	if (val)
 451		kpad->dat_out[bank] |= bit;
 452	else
 453		kpad->dat_out[bank] &= ~bit;
 454
 455	ret = adp5589_write(kpad->client, kpad->var->reg(ADP5589_GPO_DATA_OUT_A)
 456			    + bank, kpad->dat_out[bank]);
 457	ret |= adp5589_write(kpad->client,
 458			     kpad->var->reg(ADP5589_GPIO_DIRECTION_A) + bank,
 459			     kpad->dir[bank]);
 460
 461	mutex_unlock(&kpad->gpio_lock);
 462
 463	return ret;
 464}
 465
 466static int adp5589_build_gpiomap(struct adp5589_kpad *kpad,
 467				const struct adp5589_kpad_platform_data *pdata)
 468{
 469	bool pin_used[ADP5589_MAXGPIO];
 470	int n_unused = 0;
 471	int i;
 472
 473	memset(pin_used, false, sizeof(pin_used));
 474
 475	for (i = 0; i < kpad->var->maxgpio; i++)
 476		if (pdata->keypad_en_mask & (1 << i))
 477			pin_used[i] = true;
 478
 479	for (i = 0; i < kpad->gpimapsize; i++)
 480		pin_used[kpad->gpimap[i].pin - kpad->var->gpi_pin_base] = true;
 481
 482	if (kpad->extend_cfg & R4_EXTEND_CFG)
 483		pin_used[4] = true;
 484
 485	if (kpad->extend_cfg & C4_EXTEND_CFG)
 486		pin_used[kpad->var->c4_extend_cfg] = true;
 487
 488	if (!kpad->support_row5)
 489		pin_used[5] = true;
 490
 491	for (i = 0; i < kpad->var->maxgpio; i++)
 492		if (!pin_used[i])
 493			kpad->gpiomap[n_unused++] = i;
 494
 495	return n_unused;
 496}
 497
 498static int adp5589_gpio_add(struct adp5589_kpad *kpad)
 499{
 500	struct device *dev = &kpad->client->dev;
 501	const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
 502	const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
 503	int i, error;
 504
 505	if (!gpio_data)
 506		return 0;
 507
 508	kpad->gc.parent = dev;
 509	kpad->gc.ngpio = adp5589_build_gpiomap(kpad, pdata);
 510	if (kpad->gc.ngpio == 0) {
 511		dev_info(dev, "No unused gpios left to export\n");
 512		return 0;
 513	}
 514
 515	kpad->export_gpio = true;
 516
 517	kpad->gc.direction_input = adp5589_gpio_direction_input;
 518	kpad->gc.direction_output = adp5589_gpio_direction_output;
 519	kpad->gc.get = adp5589_gpio_get_value;
 520	kpad->gc.set = adp5589_gpio_set_value;
 521	kpad->gc.can_sleep = 1;
 522
 523	kpad->gc.base = gpio_data->gpio_start;
 524	kpad->gc.label = kpad->client->name;
 525	kpad->gc.owner = THIS_MODULE;
 526
 527	mutex_init(&kpad->gpio_lock);
 528
 529	error = gpiochip_add_data(&kpad->gc, kpad);
 530	if (error) {
 531		dev_err(dev, "gpiochip_add_data() failed, err: %d\n", error);
 532		return error;
 533	}
 534
 535	for (i = 0; i <= kpad->var->bank(kpad->var->maxgpio); i++) {
 536		kpad->dat_out[i] = adp5589_read(kpad->client, kpad->var->reg(
 537						ADP5589_GPO_DATA_OUT_A) + i);
 538		kpad->dir[i] = adp5589_read(kpad->client, kpad->var->reg(
 539					    ADP5589_GPIO_DIRECTION_A) + i);
 540	}
 541
 542	if (gpio_data->setup) {
 543		error = gpio_data->setup(kpad->client,
 544					 kpad->gc.base, kpad->gc.ngpio,
 545					 gpio_data->context);
 546		if (error)
 547			dev_warn(dev, "setup failed, %d\n", error);
 548	}
 549
 550	return 0;
 551}
 552
 553static void adp5589_gpio_remove(struct adp5589_kpad *kpad)
 554{
 555	struct device *dev = &kpad->client->dev;
 556	const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
 557	const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
 558	int error;
 559
 560	if (!kpad->export_gpio)
 561		return;
 562
 563	if (gpio_data->teardown) {
 564		error = gpio_data->teardown(kpad->client,
 565					    kpad->gc.base, kpad->gc.ngpio,
 566					    gpio_data->context);
 567		if (error)
 568			dev_warn(dev, "teardown failed %d\n", error);
 569	}
 570
 571	gpiochip_remove(&kpad->gc);
 
 
 572}
 573#else
 574static inline int adp5589_gpio_add(struct adp5589_kpad *kpad)
 575{
 576	return 0;
 577}
 578
 579static inline void adp5589_gpio_remove(struct adp5589_kpad *kpad)
 580{
 581}
 582#endif
 583
 584static void adp5589_report_switches(struct adp5589_kpad *kpad,
 585				    int key, int key_val)
 586{
 587	int i;
 588
 589	for (i = 0; i < kpad->gpimapsize; i++) {
 590		if (key_val == kpad->gpimap[i].pin) {
 591			input_report_switch(kpad->input,
 592					    kpad->gpimap[i].sw_evt,
 593					    key & KEY_EV_PRESSED);
 594			break;
 595		}
 596	}
 597}
 598
 599static void adp5589_report_events(struct adp5589_kpad *kpad, int ev_cnt)
 600{
 601	int i;
 602
 603	for (i = 0; i < ev_cnt; i++) {
 604		int key = adp5589_read(kpad->client, ADP5589_5_FIFO_1 + i);
 605		int key_val = key & KEY_EV_MASK;
 606
 607		if (key_val >= kpad->var->gpi_pin_base &&
 608		    key_val <= kpad->var->gpi_pin_end) {
 609			adp5589_report_switches(kpad, key, key_val);
 610		} else {
 611			input_report_key(kpad->input,
 612					 kpad->keycode[key_val - 1],
 613					 key & KEY_EV_PRESSED);
 614		}
 615	}
 616}
 617
 618static irqreturn_t adp5589_irq(int irq, void *handle)
 619{
 620	struct adp5589_kpad *kpad = handle;
 621	struct i2c_client *client = kpad->client;
 622	int status, ev_cnt;
 623
 624	status = adp5589_read(client, ADP5589_5_INT_STATUS);
 625
 626	if (status & OVRFLOW_INT)	/* Unlikely and should never happen */
 627		dev_err(&client->dev, "Event Overflow Error\n");
 628
 629	if (status & EVENT_INT) {
 630		ev_cnt = adp5589_read(client, ADP5589_5_STATUS) & KEC;
 631		if (ev_cnt) {
 632			adp5589_report_events(kpad, ev_cnt);
 633			input_sync(kpad->input);
 634		}
 635	}
 636
 637	adp5589_write(client, ADP5589_5_INT_STATUS, status); /* Status is W1C */
 638
 639	return IRQ_HANDLED;
 640}
 641
 642static int adp5589_get_evcode(struct adp5589_kpad *kpad, unsigned short key)
 643{
 644	int i;
 645
 646	for (i = 0; i < kpad->var->keymapsize; i++)
 647		if (key == kpad->keycode[i])
 648			return (i + 1) | KEY_EV_PRESSED;
 649
 650	dev_err(&kpad->client->dev, "RESET/UNLOCK key not in keycode map\n");
 651
 652	return -EINVAL;
 653}
 654
 655static int adp5589_setup(struct adp5589_kpad *kpad)
 656{
 657	struct i2c_client *client = kpad->client;
 658	const struct adp5589_kpad_platform_data *pdata =
 659		dev_get_platdata(&client->dev);
 660	u8 (*reg) (u8) = kpad->var->reg;
 661	unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
 662	unsigned char pull_mask = 0;
 663	int i, ret;
 664
 665	ret = adp5589_write(client, reg(ADP5589_PIN_CONFIG_A),
 666			    pdata->keypad_en_mask & kpad->var->row_mask);
 667	ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_B),
 668			     (pdata->keypad_en_mask >> kpad->var->col_shift) &
 669			     kpad->var->col_mask);
 670
 671	if (!kpad->is_adp5585)
 672		ret |= adp5589_write(client, ADP5589_PIN_CONFIG_C,
 673				     (pdata->keypad_en_mask >> 16) & 0xFF);
 674
 675	if (!kpad->is_adp5585 && pdata->en_keylock) {
 676		ret |= adp5589_write(client, ADP5589_UNLOCK1,
 677				     pdata->unlock_key1);
 678		ret |= adp5589_write(client, ADP5589_UNLOCK2,
 679				     pdata->unlock_key2);
 680		ret |= adp5589_write(client, ADP5589_UNLOCK_TIMERS,
 681				     pdata->unlock_timer & LTIME_MASK);
 682		ret |= adp5589_write(client, ADP5589_LOCK_CFG, LOCK_EN);
 683	}
 684
 685	for (i = 0; i < KEYP_MAX_EVENT; i++)
 686		ret |= adp5589_read(client, ADP5589_5_FIFO_1 + i);
 687
 688	for (i = 0; i < pdata->gpimapsize; i++) {
 689		unsigned short pin = pdata->gpimap[i].pin;
 690
 691		if (pin <= kpad->var->gpi_pin_row_end) {
 692			evt_mode1 |= (1 << (pin - kpad->var->gpi_pin_row_base));
 693		} else {
 694			evt_mode2 |=
 695			    ((1 << (pin - kpad->var->gpi_pin_col_base)) & 0xFF);
 696			if (!kpad->is_adp5585)
 697				evt_mode3 |= ((1 << (pin -
 698					kpad->var->gpi_pin_col_base)) >> 8);
 699		}
 700	}
 701
 702	if (pdata->gpimapsize) {
 703		ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_A),
 704				     evt_mode1);
 705		ret |= adp5589_write(client, reg(ADP5589_GPI_EVENT_EN_B),
 706				     evt_mode2);
 707		if (!kpad->is_adp5585)
 708			ret |= adp5589_write(client,
 709					     reg(ADP5589_GPI_EVENT_EN_C),
 710					     evt_mode3);
 711	}
 712
 713	if (pdata->pull_dis_mask & pdata->pullup_en_100k &
 714		pdata->pullup_en_300k & pdata->pulldown_en_300k)
 715		dev_warn(&client->dev, "Conflicting pull resistor config\n");
 716
 717	for (i = 0; i <= kpad->var->max_row_num; i++) {
 718		unsigned val = 0, bit = (1 << i);
 719		if (pdata->pullup_en_300k & bit)
 720			val = 0;
 721		else if (pdata->pulldown_en_300k & bit)
 722			val = 1;
 723		else if (pdata->pullup_en_100k & bit)
 724			val = 2;
 725		else if (pdata->pull_dis_mask & bit)
 726			val = 3;
 727
 728		pull_mask |= val << (2 * (i & 0x3));
 729
 730		if (i % 4 == 3 || i == kpad->var->max_row_num) {
 731			ret |= adp5589_write(client, reg(ADP5585_RPULL_CONFIG_A)
 732					     + (i >> 2), pull_mask);
 733			pull_mask = 0;
 734		}
 735	}
 736
 737	for (i = 0; i <= kpad->var->max_col_num; i++) {
 738		unsigned val = 0, bit = 1 << (i + kpad->var->col_shift);
 739		if (pdata->pullup_en_300k & bit)
 740			val = 0;
 741		else if (pdata->pulldown_en_300k & bit)
 742			val = 1;
 743		else if (pdata->pullup_en_100k & bit)
 744			val = 2;
 745		else if (pdata->pull_dis_mask & bit)
 746			val = 3;
 747
 748		pull_mask |= val << (2 * (i & 0x3));
 749
 750		if (i % 4 == 3 || i == kpad->var->max_col_num) {
 751			ret |= adp5589_write(client,
 752					     reg(ADP5585_RPULL_CONFIG_C) +
 753					     (i >> 2), pull_mask);
 754			pull_mask = 0;
 755		}
 756	}
 757
 758	if (pdata->reset1_key_1 && pdata->reset1_key_2 && pdata->reset1_key_3) {
 759		ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_A),
 760				     adp5589_get_evcode(kpad,
 761							pdata->reset1_key_1));
 762		ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_B),
 763				     adp5589_get_evcode(kpad,
 764							pdata->reset1_key_2));
 765		ret |= adp5589_write(client, reg(ADP5589_RESET1_EVENT_C),
 766				     adp5589_get_evcode(kpad,
 767							pdata->reset1_key_3));
 768		kpad->extend_cfg |= R4_EXTEND_CFG;
 769	}
 770
 771	if (pdata->reset2_key_1 && pdata->reset2_key_2) {
 772		ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_A),
 773				     adp5589_get_evcode(kpad,
 774							pdata->reset2_key_1));
 775		ret |= adp5589_write(client, reg(ADP5589_RESET2_EVENT_B),
 776				     adp5589_get_evcode(kpad,
 777							pdata->reset2_key_2));
 778		kpad->extend_cfg |= C4_EXTEND_CFG;
 779	}
 780
 781	if (kpad->extend_cfg) {
 782		ret |= adp5589_write(client, reg(ADP5589_RESET_CFG),
 783				     pdata->reset_cfg);
 784		ret |= adp5589_write(client, reg(ADP5589_PIN_CONFIG_D),
 785				     kpad->extend_cfg);
 786	}
 787
 788	ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_A),
 789			    pdata->debounce_dis_mask & kpad->var->row_mask);
 790
 791	ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_B),
 792			     (pdata->debounce_dis_mask >> kpad->var->col_shift)
 793			     & kpad->var->col_mask);
 794
 795	if (!kpad->is_adp5585)
 796		ret |= adp5589_write(client, reg(ADP5589_DEBOUNCE_DIS_C),
 797				     (pdata->debounce_dis_mask >> 16) & 0xFF);
 798
 799	ret |= adp5589_write(client, reg(ADP5589_POLL_PTIME_CFG),
 800			     pdata->scan_cycle_time & PTIME_MASK);
 801	ret |= adp5589_write(client, ADP5589_5_INT_STATUS,
 802			     (kpad->is_adp5585 ? 0 : LOGIC2_INT) |
 803			     LOGIC1_INT | OVRFLOW_INT |
 804			     (kpad->is_adp5585 ? 0 : LOCK_INT) |
 805			     GPI_INT | EVENT_INT);	/* Status is W1C */
 806
 807	ret |= adp5589_write(client, reg(ADP5589_GENERAL_CFG),
 808			     INT_CFG | OSC_EN | CORE_CLK(3));
 809	ret |= adp5589_write(client, reg(ADP5589_INT_EN),
 810			     OVRFLOW_IEN | GPI_IEN | EVENT_IEN);
 811
 812	if (ret < 0) {
 813		dev_err(&client->dev, "Write Error\n");
 814		return ret;
 815	}
 816
 817	return 0;
 818}
 819
 820static void adp5589_report_switch_state(struct adp5589_kpad *kpad)
 821{
 822	int gpi_stat_tmp, pin_loc;
 823	int i;
 824	int gpi_stat1 = adp5589_read(kpad->client,
 825				     kpad->var->reg(ADP5589_GPI_STATUS_A));
 826	int gpi_stat2 = adp5589_read(kpad->client,
 827				     kpad->var->reg(ADP5589_GPI_STATUS_B));
 828	int gpi_stat3 = !kpad->is_adp5585 ?
 829			adp5589_read(kpad->client, ADP5589_GPI_STATUS_C) : 0;
 830
 831	for (i = 0; i < kpad->gpimapsize; i++) {
 832		unsigned short pin = kpad->gpimap[i].pin;
 833
 834		if (pin <= kpad->var->gpi_pin_row_end) {
 835			gpi_stat_tmp = gpi_stat1;
 836			pin_loc = pin - kpad->var->gpi_pin_row_base;
 837		} else if ((pin - kpad->var->gpi_pin_col_base) < 8) {
 838			gpi_stat_tmp = gpi_stat2;
 839			pin_loc = pin - kpad->var->gpi_pin_col_base;
 840		} else {
 841			gpi_stat_tmp = gpi_stat3;
 842			pin_loc = pin - kpad->var->gpi_pin_col_base - 8;
 843		}
 844
 845		if (gpi_stat_tmp < 0) {
 846			dev_err(&kpad->client->dev,
 847				"Can't read GPIO_DAT_STAT switch %d, default to OFF\n",
 848				pin);
 849			gpi_stat_tmp = 0;
 850		}
 851
 852		input_report_switch(kpad->input,
 853				    kpad->gpimap[i].sw_evt,
 854				    !(gpi_stat_tmp & (1 << pin_loc)));
 855	}
 856
 857	input_sync(kpad->input);
 858}
 859
 860static int adp5589_probe(struct i2c_client *client,
 861			 const struct i2c_device_id *id)
 862{
 863	struct adp5589_kpad *kpad;
 864	const struct adp5589_kpad_platform_data *pdata =
 865		dev_get_platdata(&client->dev);
 866	struct input_dev *input;
 867	unsigned int revid;
 868	int ret, i;
 869	int error;
 870
 871	if (!i2c_check_functionality(client->adapter,
 872				     I2C_FUNC_SMBUS_BYTE_DATA)) {
 873		dev_err(&client->dev, "SMBUS Byte Data not Supported\n");
 874		return -EIO;
 875	}
 876
 877	if (!pdata) {
 878		dev_err(&client->dev, "no platform data?\n");
 879		return -EINVAL;
 880	}
 881
 882	kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
 883	if (!kpad)
 884		return -ENOMEM;
 885
 886	switch (id->driver_data) {
 887	case ADP5585_02:
 888		kpad->support_row5 = true;
 889		/* fall through */
 890	case ADP5585_01:
 891		kpad->is_adp5585 = true;
 892		kpad->var = &const_adp5585;
 893		break;
 894	case ADP5589:
 895		kpad->support_row5 = true;
 896		kpad->var = &const_adp5589;
 897		break;
 898	}
 899
 900	if (!((pdata->keypad_en_mask & kpad->var->row_mask) &&
 901			(pdata->keypad_en_mask >> kpad->var->col_shift)) ||
 902			!pdata->keymap) {
 903		dev_err(&client->dev, "no rows, cols or keymap from pdata\n");
 904		error = -EINVAL;
 905		goto err_free_mem;
 906	}
 907
 908	if (pdata->keymapsize != kpad->var->keymapsize) {
 909		dev_err(&client->dev, "invalid keymapsize\n");
 910		error = -EINVAL;
 911		goto err_free_mem;
 912	}
 913
 914	if (!pdata->gpimap && pdata->gpimapsize) {
 915		dev_err(&client->dev, "invalid gpimap from pdata\n");
 916		error = -EINVAL;
 917		goto err_free_mem;
 918	}
 919
 920	if (pdata->gpimapsize > kpad->var->gpimapsize_max) {
 921		dev_err(&client->dev, "invalid gpimapsize\n");
 922		error = -EINVAL;
 923		goto err_free_mem;
 924	}
 925
 926	for (i = 0; i < pdata->gpimapsize; i++) {
 927		unsigned short pin = pdata->gpimap[i].pin;
 928
 929		if (pin < kpad->var->gpi_pin_base ||
 930				pin > kpad->var->gpi_pin_end) {
 931			dev_err(&client->dev, "invalid gpi pin data\n");
 932			error = -EINVAL;
 933			goto err_free_mem;
 934		}
 935
 936		if ((1 << (pin - kpad->var->gpi_pin_row_base)) &
 937				pdata->keypad_en_mask) {
 938			dev_err(&client->dev, "invalid gpi row/col data\n");
 939			error = -EINVAL;
 940			goto err_free_mem;
 941		}
 942	}
 943
 944	if (!client->irq) {
 945		dev_err(&client->dev, "no IRQ?\n");
 946		error = -EINVAL;
 947		goto err_free_mem;
 948	}
 949
 950	input = input_allocate_device();
 951	if (!input) {
 952		error = -ENOMEM;
 953		goto err_free_mem;
 954	}
 955
 956	kpad->client = client;
 957	kpad->input = input;
 958
 959	ret = adp5589_read(client, ADP5589_5_ID);
 960	if (ret < 0) {
 961		error = ret;
 962		goto err_free_input;
 963	}
 964
 965	revid = (u8) ret & ADP5589_5_DEVICE_ID_MASK;
 966
 967	input->name = client->name;
 968	input->phys = "adp5589-keys/input0";
 969	input->dev.parent = &client->dev;
 970
 971	input_set_drvdata(input, kpad);
 972
 973	input->id.bustype = BUS_I2C;
 974	input->id.vendor = 0x0001;
 975	input->id.product = 0x0001;
 976	input->id.version = revid;
 977
 978	input->keycodesize = sizeof(kpad->keycode[0]);
 979	input->keycodemax = pdata->keymapsize;
 980	input->keycode = kpad->keycode;
 981
 982	memcpy(kpad->keycode, pdata->keymap,
 983	       pdata->keymapsize * input->keycodesize);
 984
 985	kpad->gpimap = pdata->gpimap;
 986	kpad->gpimapsize = pdata->gpimapsize;
 987
 988	/* setup input device */
 989	__set_bit(EV_KEY, input->evbit);
 990
 991	if (pdata->repeat)
 992		__set_bit(EV_REP, input->evbit);
 993
 994	for (i = 0; i < input->keycodemax; i++)
 995		if (kpad->keycode[i] <= KEY_MAX)
 996			__set_bit(kpad->keycode[i], input->keybit);
 997	__clear_bit(KEY_RESERVED, input->keybit);
 998
 999	if (kpad->gpimapsize)
1000		__set_bit(EV_SW, input->evbit);
1001	for (i = 0; i < kpad->gpimapsize; i++)
1002		__set_bit(kpad->gpimap[i].sw_evt, input->swbit);
1003
1004	error = input_register_device(input);
1005	if (error) {
1006		dev_err(&client->dev, "unable to register input device\n");
1007		goto err_free_input;
1008	}
1009
1010	error = request_threaded_irq(client->irq, NULL, adp5589_irq,
1011				     IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
1012				     client->dev.driver->name, kpad);
1013	if (error) {
1014		dev_err(&client->dev, "irq %d busy?\n", client->irq);
1015		goto err_unreg_dev;
1016	}
1017
1018	error = adp5589_setup(kpad);
1019	if (error)
1020		goto err_free_irq;
1021
1022	if (kpad->gpimapsize)
1023		adp5589_report_switch_state(kpad);
1024
1025	error = adp5589_gpio_add(kpad);
1026	if (error)
1027		goto err_free_irq;
1028
1029	device_init_wakeup(&client->dev, 1);
1030	i2c_set_clientdata(client, kpad);
1031
1032	dev_info(&client->dev, "Rev.%d keypad, irq %d\n", revid, client->irq);
1033	return 0;
1034
1035err_free_irq:
1036	free_irq(client->irq, kpad);
1037err_unreg_dev:
1038	input_unregister_device(input);
1039	input = NULL;
1040err_free_input:
1041	input_free_device(input);
1042err_free_mem:
1043	kfree(kpad);
1044
1045	return error;
1046}
1047
1048static int adp5589_remove(struct i2c_client *client)
1049{
1050	struct adp5589_kpad *kpad = i2c_get_clientdata(client);
1051
1052	adp5589_write(client, kpad->var->reg(ADP5589_GENERAL_CFG), 0);
1053	free_irq(client->irq, kpad);
1054	input_unregister_device(kpad->input);
1055	adp5589_gpio_remove(kpad);
1056	kfree(kpad);
1057
1058	return 0;
1059}
1060
1061#ifdef CONFIG_PM_SLEEP
1062static int adp5589_suspend(struct device *dev)
1063{
1064	struct adp5589_kpad *kpad = dev_get_drvdata(dev);
1065	struct i2c_client *client = kpad->client;
1066
1067	disable_irq(client->irq);
1068
1069	if (device_may_wakeup(&client->dev))
1070		enable_irq_wake(client->irq);
1071
1072	return 0;
1073}
1074
1075static int adp5589_resume(struct device *dev)
1076{
1077	struct adp5589_kpad *kpad = dev_get_drvdata(dev);
1078	struct i2c_client *client = kpad->client;
1079
1080	if (device_may_wakeup(&client->dev))
1081		disable_irq_wake(client->irq);
1082
1083	enable_irq(client->irq);
1084
1085	return 0;
1086}
1087#endif
1088
1089static SIMPLE_DEV_PM_OPS(adp5589_dev_pm_ops, adp5589_suspend, adp5589_resume);
1090
1091static const struct i2c_device_id adp5589_id[] = {
1092	{"adp5589-keys", ADP5589},
1093	{"adp5585-keys", ADP5585_01},
1094	{"adp5585-02-keys", ADP5585_02}, /* Adds ROW5 to ADP5585 */
1095	{}
1096};
1097
1098MODULE_DEVICE_TABLE(i2c, adp5589_id);
1099
1100static struct i2c_driver adp5589_driver = {
1101	.driver = {
1102		.name = KBUILD_MODNAME,
 
1103		.pm = &adp5589_dev_pm_ops,
1104	},
1105	.probe = adp5589_probe,
1106	.remove = adp5589_remove,
1107	.id_table = adp5589_id,
1108};
1109
1110module_i2c_driver(adp5589_driver);
1111
1112MODULE_LICENSE("GPL");
1113MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
1114MODULE_DESCRIPTION("ADP5589/ADP5585 Keypad driver");