gpio-pca953x.c 31.5 KB
Newer Older
1
/*
2
 *  PCA953x 4/8/16/24/40 bit I/O ports
3 4 5 6 7 8 9 10 11 12 13
 *
 *  Copyright (C) 2005 Ben Gardner <bgardner@wabtec.com>
 *  Copyright (C) 2007 Marvell International Ltd.
 *
 *  Derived from drivers/i2c/chips/pca9539.c
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; version 2 of the License.
 */

14
#include <linux/acpi.h>
15
#include <linux/gpio/driver.h>
16
#include <linux/gpio/consumer.h>
17
#include <linux/i2c.h>
18 19 20 21
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of_platform.h>
22
#include <linux/platform_data/pca953x.h>
23
#include <linux/regmap.h>
24
#include <linux/regulator/consumer.h>
25
#include <linux/slab.h>
26

27
#include <asm/unaligned.h>
28

29 30 31 32
#define PCA953X_INPUT		0x00
#define PCA953X_OUTPUT		0x01
#define PCA953X_INVERT		0x02
#define PCA953X_DIRECTION	0x03
33

34 35
#define REG_ADDR_MASK		0x3f
#define REG_ADDR_EXT		0x40
A
Andreas Schallenberg 已提交
36 37
#define REG_ADDR_AI		0x80

38 39 40 41 42 43 44 45
#define PCA957X_IN		0x00
#define PCA957X_INVRT		0x01
#define PCA957X_BKEN		0x02
#define PCA957X_PUPD		0x03
#define PCA957X_CFG		0x04
#define PCA957X_OUT		0x05
#define PCA957X_MSK		0x06
#define PCA957X_INTS		0x07
46

47
#define PCAL953X_OUT_STRENGTH	0x20
48
#define PCAL953X_IN_LATCH	0x22
49 50
#define PCAL953X_PULL_EN	0x23
#define PCAL953X_PULL_SEL	0x24
51 52
#define PCAL953X_INT_MASK	0x25
#define PCAL953X_INT_STAT	0x26
53
#define PCAL953X_OUT_CONF	0x27
54

55 56 57 58 59 60
#define PCAL6524_INT_EDGE	0x28
#define PCAL6524_INT_CLR	0x2a
#define PCAL6524_IN_STATUS	0x2b
#define PCAL6524_OUT_INDCONF	0x2c
#define PCAL6524_DEBOUNCE	0x2d

61
#define PCA_GPIO_MASK		0x00FF
62 63

#define PCAL_GPIO_MASK		0x1f
64
#define PCAL_PINCTRL_MASK	0x60
65

66
#define PCA_INT			0x0100
67
#define PCA_PCAL		0x0200
68
#define PCA_LATCH_INT (PCA_PCAL | PCA_INT)
69 70
#define PCA953X_TYPE		0x1000
#define PCA957X_TYPE		0x2000
71 72 73
#define PCA_TYPE_MASK		0xF000

#define PCA_CHIP_TYPE(x)	((x) & PCA_TYPE_MASK)
74

75
static const struct i2c_device_id pca953x_id[] = {
76
	{ "pca9505", 40 | PCA953X_TYPE | PCA_INT, },
77 78 79 80 81 82 83 84 85 86 87 88
	{ "pca9534", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9535", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9536", 4  | PCA953X_TYPE, },
	{ "pca9537", 4  | PCA953X_TYPE | PCA_INT, },
	{ "pca9538", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9539", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9554", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9555", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9556", 8  | PCA953X_TYPE, },
	{ "pca9557", 8  | PCA953X_TYPE, },
	{ "pca9574", 8  | PCA957X_TYPE | PCA_INT, },
	{ "pca9575", 16 | PCA957X_TYPE | PCA_INT, },
A
Aaron Sierra 已提交
89
	{ "pca9698", 40 | PCA953X_TYPE, },
90

91
	{ "pcal6524", 24 | PCA953X_TYPE | PCA_INT | PCA_PCAL, },
92 93
	{ "pcal9555a", 16 | PCA953X_TYPE | PCA_INT | PCA_PCAL, },

94 95 96 97
	{ "max7310", 8  | PCA953X_TYPE, },
	{ "max7312", 16 | PCA953X_TYPE | PCA_INT, },
	{ "max7313", 16 | PCA953X_TYPE | PCA_INT, },
	{ "max7315", 8  | PCA953X_TYPE | PCA_INT, },
98
	{ "max7318", 16 | PCA953X_TYPE | PCA_INT, },
99 100 101
	{ "pca6107", 8  | PCA953X_TYPE | PCA_INT, },
	{ "tca6408", 8  | PCA953X_TYPE | PCA_INT, },
	{ "tca6416", 16 | PCA953X_TYPE | PCA_INT, },
A
Andreas Schallenberg 已提交
102
	{ "tca6424", 24 | PCA953X_TYPE | PCA_INT, },
103
	{ "tca9539", 16 | PCA953X_TYPE | PCA_INT, },
104
	{ "tca9554", 8  | PCA953X_TYPE | PCA_INT, },
A
Aaron Sierra 已提交
105
	{ "xra1202", 8  | PCA953X_TYPE },
106
	{ }
107
};
108
MODULE_DEVICE_TABLE(i2c, pca953x_id);
109

110
static const struct acpi_device_id pca953x_acpi_ids[] = {
111
	{ "INT3491", 16 | PCA953X_TYPE | PCA_INT | PCA_PCAL, },
112 113 114 115
	{ }
};
MODULE_DEVICE_TABLE(acpi, pca953x_acpi_ids);

116 117 118
#define MAX_BANK 5
#define BANK_SZ 8

119
#define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ)
120

B
Bartosz Golaszewski 已提交
121 122 123 124
struct pca953x_reg_config {
	int direction;
	int output;
	int input;
125
	int invert;
B
Bartosz Golaszewski 已提交
126 127 128 129 130 131
};

static const struct pca953x_reg_config pca953x_regs = {
	.direction = PCA953X_DIRECTION,
	.output = PCA953X_OUTPUT,
	.input = PCA953X_INPUT,
132
	.invert = PCA953X_INVERT,
B
Bartosz Golaszewski 已提交
133 134 135 136 137 138
};

static const struct pca953x_reg_config pca957x_regs = {
	.direction = PCA957X_CFG,
	.output = PCA957X_OUT,
	.input = PCA957X_IN,
139
	.invert = PCA957X_INVRT,
B
Bartosz Golaszewski 已提交
140 141
};

142
struct pca953x_chip {
143
	unsigned gpio_start;
144
	struct mutex i2c_lock;
145
	struct regmap *regmap;
146

147 148
#ifdef CONFIG_GPIO_PCA953X_IRQ
	struct mutex irq_lock;
149 150 151 152
	u8 irq_mask[MAX_BANK];
	u8 irq_stat[MAX_BANK];
	u8 irq_trig_raise[MAX_BANK];
	u8 irq_trig_fall[MAX_BANK];
153 154
#endif

155 156
	struct i2c_client *client;
	struct gpio_chip gpio_chip;
157
	const char *const *names;
158
	unsigned long driver_data;
159
	struct regulator *regulator;
B
Bartosz Golaszewski 已提交
160 161

	const struct pca953x_reg_config *regs;
162 163
};

164
static int pca953x_bank_shift(struct pca953x_chip *chip)
165
{
166 167
	return fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);
}
168

169 170 171 172
#define PCA953x_BANK_INPUT	BIT(0)
#define PCA953x_BANK_OUTPUT	BIT(1)
#define PCA953x_BANK_POLARITY	BIT(2)
#define PCA953x_BANK_CONFIG	BIT(3)
173

174 175 176 177 178 179 180
#define PCA957x_BANK_INPUT	BIT(0)
#define PCA957x_BANK_POLARITY	BIT(1)
#define PCA957x_BANK_BUSHOLD	BIT(2)
#define PCA957x_BANK_CONFIG	BIT(4)
#define PCA957x_BANK_OUTPUT	BIT(5)

#define PCAL9xxx_BANK_IN_LATCH	BIT(8 + 2)
181 182
#define PCAL9xxx_BANK_PULL_EN	BIT(8 + 3)
#define PCAL9xxx_BANK_PULL_SEL	BIT(8 + 4)
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203
#define PCAL9xxx_BANK_IRQ_MASK	BIT(8 + 5)
#define PCAL9xxx_BANK_IRQ_STAT	BIT(8 + 6)

/*
 * We care about the following registers:
 * - Standard set, below 0x40, each port can be replicated up to 8 times
 *   - PCA953x standard
 *     Input port			0x00 + 0 * bank_size	R
 *     Output port			0x00 + 1 * bank_size	RW
 *     Polarity Inversion port		0x00 + 2 * bank_size	RW
 *     Configuration port		0x00 + 3 * bank_size	RW
 *   - PCA957x with mixed up registers
 *     Input port			0x00 + 0 * bank_size	R
 *     Polarity Inversion port		0x00 + 1 * bank_size	RW
 *     Bus hold port			0x00 + 2 * bank_size	RW
 *     Configuration port		0x00 + 4 * bank_size	RW
 *     Output port			0x00 + 5 * bank_size	RW
 *
 * - Extended set, above 0x40, often chip specific.
 *   - PCAL6524/PCAL9555A with custom PCAL IRQ handling:
 *     Input latch register		0x40 + 2 * bank_size	RW
204 205
 *     Pull-up/pull-down enable reg	0x40 + 3 * bank_size    RW
 *     Pull-up/pull-down select reg	0x40 + 4 * bank_size    RW
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225
 *     Interrupt mask register		0x40 + 5 * bank_size	RW
 *     Interrupt status register	0x40 + 6 * bank_size	R
 *
 * - Registers with bit 0x80 set, the AI bit
 *   The bit is cleared and the registers fall into one of the
 *   categories above.
 */

static bool pca953x_check_register(struct pca953x_chip *chip, unsigned int reg,
				   u32 checkbank)
{
	int bank_shift = pca953x_bank_shift(chip);
	int bank = (reg & REG_ADDR_MASK) >> bank_shift;
	int offset = reg & (BIT(bank_shift) - 1);

	/* Special PCAL extended register check. */
	if (reg & REG_ADDR_EXT) {
		if (!(chip->driver_data & PCA_PCAL))
			return false;
		bank += 8;
226 227
	}

228 229 230 231 232 233 234 235 236
	/* Register is not in the matching bank. */
	if (!(BIT(bank) & checkbank))
		return false;

	/* Register is not within allowed range of bank. */
	if (offset >= NBANK(chip))
		return false;

	return true;
237 238
}

239
static bool pca953x_readable_register(struct device *dev, unsigned int reg)
240
{
241 242
	struct pca953x_chip *chip = dev_get_drvdata(dev);
	u32 bank;
243

244 245 246 247 248 249 250 251
	if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
		bank = PCA953x_BANK_INPUT | PCA953x_BANK_OUTPUT |
		       PCA953x_BANK_POLARITY | PCA953x_BANK_CONFIG;
	} else {
		bank = PCA957x_BANK_INPUT | PCA957x_BANK_OUTPUT |
		       PCA957x_BANK_POLARITY | PCA957x_BANK_CONFIG |
		       PCA957x_BANK_BUSHOLD;
	}
252

253
	if (chip->driver_data & PCA_PCAL) {
254 255
		bank |= PCAL9xxx_BANK_IN_LATCH | PCAL9xxx_BANK_PULL_EN |
			PCAL9xxx_BANK_PULL_SEL | PCAL9xxx_BANK_IRQ_MASK |
256
			PCAL9xxx_BANK_IRQ_STAT;
257 258
	}

259
	return pca953x_check_register(chip, reg, bank);
260 261
}

262
static bool pca953x_writeable_register(struct device *dev, unsigned int reg)
263
{
264 265
	struct pca953x_chip *chip = dev_get_drvdata(dev);
	u32 bank;
266

267 268 269 270 271 272 273
	if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
		bank = PCA953x_BANK_OUTPUT | PCA953x_BANK_POLARITY |
			PCA953x_BANK_CONFIG;
	} else {
		bank = PCA957x_BANK_OUTPUT | PCA957x_BANK_POLARITY |
			PCA957x_BANK_CONFIG | PCA957x_BANK_BUSHOLD;
	}
274

275
	if (chip->driver_data & PCA_PCAL)
276 277
		bank |= PCAL9xxx_BANK_IN_LATCH | PCAL9xxx_BANK_PULL_EN |
			PCAL9xxx_BANK_PULL_SEL | PCAL9xxx_BANK_IRQ_MASK;
278 279

	return pca953x_check_register(chip, reg, bank);
280 281
}

282
static bool pca953x_volatile_register(struct device *dev, unsigned int reg)
283
{
284 285
	struct pca953x_chip *chip = dev_get_drvdata(dev);
	u32 bank;
286

287 288 289 290 291 292 293
	if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE)
		bank = PCA953x_BANK_INPUT;
	else
		bank = PCA957x_BANK_INPUT;

	if (chip->driver_data & PCA_PCAL)
		bank |= PCAL9xxx_BANK_IRQ_STAT;
294

295
	return pca953x_check_register(chip, reg, bank);
296
}
297

298 299 300 301 302 303 304 305 306 307 308 309
const struct regmap_config pca953x_i2c_regmap = {
	.reg_bits = 8,
	.val_bits = 8,

	.readable_reg = pca953x_readable_register,
	.writeable_reg = pca953x_writeable_register,
	.volatile_reg = pca953x_volatile_register,

	.cache_type = REGCACHE_RBTREE,
	.max_register = 0x7f,
};

310 311
static u8 pca953x_recalc_addr(struct pca953x_chip *chip, int reg, int off,
			      bool write, bool addrinc)
312
{
313
	int bank_shift = pca953x_bank_shift(chip);
314 315
	int addr = (reg & PCAL_GPIO_MASK) << bank_shift;
	int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1;
316 317 318 319 320 321 322 323 324
	u8 regaddr = pinctrl | addr | (off / BANK_SZ);

	/* Single byte read doesn't need AI bit set. */
	if (!addrinc)
		return regaddr;

	/* Chips with 24 and more GPIOs always support Auto Increment */
	if (write && NBANK(chip) > 2)
		regaddr |= REG_ADDR_AI;
325

326 327 328 329 330
	/* PCA9575 needs address-increment on multi-byte writes */
	if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE)
		regaddr |= REG_ADDR_AI;

	return regaddr;
331 332 333 334
}

static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val)
{
335
	u8 regaddr = pca953x_recalc_addr(chip, reg, 0, true, true);
336
	int ret;
337

338
	ret = regmap_bulk_write(chip->regmap, regaddr, val, NBANK(chip));
339 340
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed writing register\n");
341
		return ret;
342 343 344
	}

	return 0;
345 346
}

347 348
static int pca953x_read_regs(struct pca953x_chip *chip, int reg, u8 *val)
{
349
	u8 regaddr = pca953x_recalc_addr(chip, reg, 0, false, true);
350 351
	int ret;

352
	ret = regmap_bulk_read(chip->regmap, regaddr, val, NBANK(chip));
353 354
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed reading register\n");
355
		return ret;
356 357 358 359 360
	}

	return 0;
}

361
static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
362
{
363
	struct pca953x_chip *chip = gpiochip_get_data(gc);
364 365 366
	u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off,
					true, false);
	u8 bit = BIT(off % BANK_SZ);
B
Bartosz Golaszewski 已提交
367
	int ret;
368

369
	mutex_lock(&chip->i2c_lock);
370
	ret = regmap_write_bits(chip->regmap, dirreg, bit, bit);
371 372
	mutex_unlock(&chip->i2c_lock);
	return ret;
373 374
}

375
static int pca953x_gpio_direction_output(struct gpio_chip *gc,
376 377
		unsigned off, int val)
{
378
	struct pca953x_chip *chip = gpiochip_get_data(gc);
379 380
	u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off,
					true, false);
381 382
	u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off,
					true, false);
383
	u8 bit = BIT(off % BANK_SZ);
B
Bartosz Golaszewski 已提交
384
	int ret;
385

386
	mutex_lock(&chip->i2c_lock);
387
	/* set output level */
388
	ret = regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0);
389
	if (ret)
390
		goto exit;
391 392

	/* then direction */
393
	ret = regmap_write_bits(chip->regmap, dirreg, bit, 0);
394 395 396
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
397 398
}

399
static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
400
{
401
	struct pca953x_chip *chip = gpiochip_get_data(gc);
402 403 404
	u8 inreg = pca953x_recalc_addr(chip, chip->regs->input, off,
				       true, false);
	u8 bit = BIT(off % BANK_SZ);
A
Andreas Schallenberg 已提交
405
	u32 reg_val;
B
Bartosz Golaszewski 已提交
406
	int ret;
407

408
	mutex_lock(&chip->i2c_lock);
409
	ret = regmap_read(chip->regmap, inreg, &reg_val);
410
	mutex_unlock(&chip->i2c_lock);
411 412 413 414 415 416 417 418
	if (ret < 0) {
		/* NOTE:  diagnostic already emitted; that's all we should
		 * do unless gpio_*_value_cansleep() calls become different
		 * from their nonsleeping siblings (and report faults).
		 */
		return 0;
	}

419
	return !!(reg_val & bit);
420 421
}

422
static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
423
{
424
	struct pca953x_chip *chip = gpiochip_get_data(gc);
425 426 427
	u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off,
					true, false);
	u8 bit = BIT(off % BANK_SZ);
428

429
	mutex_lock(&chip->i2c_lock);
430
	regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0);
431
	mutex_unlock(&chip->i2c_lock);
432 433
}

434 435 436
static int pca953x_gpio_get_direction(struct gpio_chip *gc, unsigned off)
{
	struct pca953x_chip *chip = gpiochip_get_data(gc);
437 438 439
	u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off,
					true, false);
	u8 bit = BIT(off % BANK_SZ);
440 441 442 443
	u32 reg_val;
	int ret;

	mutex_lock(&chip->i2c_lock);
444
	ret = regmap_read(chip->regmap, dirreg, &reg_val);
445 446 447 448
	mutex_unlock(&chip->i2c_lock);
	if (ret < 0)
		return ret;

449
	return !!(reg_val & bit);
450 451
}

452
static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
453
				      unsigned long *mask, unsigned long *bits)
454
{
455
	struct pca953x_chip *chip = gpiochip_get_data(gc);
456
	unsigned int bank_mask, bank_val;
457
	int bank;
458
	u8 reg_val[MAX_BANK];
B
Bartosz Golaszewski 已提交
459
	int ret;
460

461
	mutex_lock(&chip->i2c_lock);
462 463 464 465
	ret = pca953x_read_regs(chip, chip->regs->output, reg_val);
	if (ret)
		goto exit;

466 467 468 469 470 471
	for (bank = 0; bank < NBANK(chip); bank++) {
		bank_mask = mask[bank / sizeof(*mask)] >>
			   ((bank % sizeof(*mask)) * 8);
		if (bank_mask) {
			bank_val = bits[bank / sizeof(*bits)] >>
				  ((bank % sizeof(*bits)) * 8);
472
			bank_val &= bank_mask;
473
			reg_val[bank] = (reg_val[bank] & ~bank_mask) | bank_val;
474 475
		}
	}
476

477
	pca953x_write_regs(chip, chip->regs->output, reg_val);
478 479 480 481
exit:
	mutex_unlock(&chip->i2c_lock);
}

482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536
static int pca953x_gpio_set_pull_up_down(struct pca953x_chip *chip,
					 unsigned int offset,
					 unsigned long config)
{
	u8 pull_en_reg = pca953x_recalc_addr(chip, PCAL953X_PULL_EN, offset,
					     true, false);
	u8 pull_sel_reg = pca953x_recalc_addr(chip, PCAL953X_PULL_SEL, offset,
					      true, false);
	u8 bit = BIT(offset % BANK_SZ);
	int ret;

	/*
	 * pull-up/pull-down configuration requires PCAL extended
	 * registers
	 */
	if (!(chip->driver_data & PCA_PCAL))
		return -ENOTSUPP;

	mutex_lock(&chip->i2c_lock);

	/* Disable pull-up/pull-down */
	ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0);
	if (ret)
		goto exit;

	/* Configure pull-up/pull-down */
	if (config == PIN_CONFIG_BIAS_PULL_UP)
		ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit);
	else if (config == PIN_CONFIG_BIAS_PULL_DOWN)
		ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0);
	if (ret)
		goto exit;

	/* Enable pull-up/pull-down */
	ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit);

exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
}

static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
				   unsigned long config)
{
	struct pca953x_chip *chip = gpiochip_get_data(gc);

	switch (config) {
	case PIN_CONFIG_BIAS_PULL_UP:
	case PIN_CONFIG_BIAS_PULL_DOWN:
		return pca953x_gpio_set_pull_up_down(chip, offset, config);
	default:
		return -ENOTSUPP;
	}
}

537
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
538 539 540 541 542
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

543 544 545 546
	gc->direction_input  = pca953x_gpio_direction_input;
	gc->direction_output = pca953x_gpio_direction_output;
	gc->get = pca953x_gpio_get_value;
	gc->set = pca953x_gpio_set_value;
547
	gc->get_direction = pca953x_gpio_get_direction;
548
	gc->set_multiple = pca953x_gpio_set_multiple;
549
	gc->set_config = pca953x_gpio_set_config;
550
	gc->can_sleep = true;
551 552

	gc->base = chip->gpio_start;
553
	gc->ngpio = gpios;
554
	gc->label = dev_name(&chip->client->dev);
555
	gc->parent = &chip->client->dev;
556
	gc->owner = THIS_MODULE;
557
	gc->names = chip->names;
558 559
}

560
#ifdef CONFIG_GPIO_PCA953X_IRQ
561
static void pca953x_irq_mask(struct irq_data *d)
562
{
563
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
564
	struct pca953x_chip *chip = gpiochip_get_data(gc);
565

566
	chip->irq_mask[d->hwirq / BANK_SZ] &= ~(1 << (d->hwirq % BANK_SZ));
567 568
}

569
static void pca953x_irq_unmask(struct irq_data *d)
570
{
571
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
572
	struct pca953x_chip *chip = gpiochip_get_data(gc);
573

574
	chip->irq_mask[d->hwirq / BANK_SZ] |= 1 << (d->hwirq % BANK_SZ);
575 576
}

577
static void pca953x_irq_bus_lock(struct irq_data *d)
578
{
579
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
580
	struct pca953x_chip *chip = gpiochip_get_data(gc);
581 582 583 584

	mutex_lock(&chip->irq_lock);
}

585
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
586
{
587
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
588
	struct pca953x_chip *chip = gpiochip_get_data(gc);
589 590
	u8 new_irqs;
	int level, i;
591
	u8 invert_irq_mask[MAX_BANK];
592 593 594 595
	int reg_direction[MAX_BANK];

	regmap_bulk_read(chip->regmap, chip->regs->direction, reg_direction,
			 NBANK(chip));
596 597 598 599 600 601 602 603 604 605 606

	if (chip->driver_data & PCA_PCAL) {
		/* Enable latch on interrupt-enabled inputs */
		pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask);

		for (i = 0; i < NBANK(chip); i++)
			invert_irq_mask[i] = ~chip->irq_mask[i];

		/* Unmask enabled interrupts */
		pca953x_write_regs(chip, PCAL953X_INT_MASK, invert_irq_mask);
	}
607 608

	/* Look for any newly setup interrupt */
609 610
	for (i = 0; i < NBANK(chip); i++) {
		new_irqs = chip->irq_trig_fall[i] | chip->irq_trig_raise[i];
611
		new_irqs &= reg_direction[i];
612 613 614 615 616 617 618

		while (new_irqs) {
			level = __ffs(new_irqs);
			pca953x_gpio_direction_input(&chip->gpio_chip,
							level + (BANK_SZ * i));
			new_irqs &= ~(1 << level);
		}
619
	}
620 621 622 623

	mutex_unlock(&chip->irq_lock);
}

624
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
625
{
626
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
627
	struct pca953x_chip *chip = gpiochip_get_data(gc);
628 629
	int bank_nb = d->hwirq / BANK_SZ;
	u8 mask = 1 << (d->hwirq % BANK_SZ);
630 631 632

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
633
			d->irq, type);
634 635 636 637
		return -EINVAL;
	}

	if (type & IRQ_TYPE_EDGE_FALLING)
638
		chip->irq_trig_fall[bank_nb] |= mask;
639
	else
640
		chip->irq_trig_fall[bank_nb] &= ~mask;
641 642

	if (type & IRQ_TYPE_EDGE_RISING)
643
		chip->irq_trig_raise[bank_nb] |= mask;
644
	else
645
		chip->irq_trig_raise[bank_nb] &= ~mask;
646

647
	return 0;
648 649
}

650 651 652 653 654 655 656 657 658
static void pca953x_irq_shutdown(struct irq_data *d)
{
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
	u8 mask = 1 << (d->hwirq % BANK_SZ);

	chip->irq_trig_raise[d->hwirq / BANK_SZ] &= ~mask;
	chip->irq_trig_fall[d->hwirq / BANK_SZ] &= ~mask;
}

659 660
static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
661 662 663 664 665
	.irq_mask		= pca953x_irq_mask,
	.irq_unmask		= pca953x_irq_unmask,
	.irq_bus_lock		= pca953x_irq_bus_lock,
	.irq_bus_sync_unlock	= pca953x_irq_bus_sync_unlock,
	.irq_set_type		= pca953x_irq_set_type,
666
	.irq_shutdown		= pca953x_irq_shutdown,
667 668
};

669
static bool pca953x_irq_pending(struct pca953x_chip *chip, u8 *pending)
670
{
671 672
	u8 cur_stat[MAX_BANK];
	u8 old_stat[MAX_BANK];
673 674 675
	bool pending_seen = false;
	bool trigger_seen = false;
	u8 trigger[MAX_BANK];
676
	int reg_direction[MAX_BANK];
B
Bartosz Golaszewski 已提交
677
	int ret, i;
678

679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701
	if (chip->driver_data & PCA_PCAL) {
		/* Read the current interrupt status from the device */
		ret = pca953x_read_regs(chip, PCAL953X_INT_STAT, trigger);
		if (ret)
			return false;

		/* Check latched inputs and clear interrupt status */
		ret = pca953x_read_regs(chip, PCA953X_INPUT, cur_stat);
		if (ret)
			return false;

		for (i = 0; i < NBANK(chip); i++) {
			/* Apply filter for rising/falling edge selection */
			pending[i] = (~cur_stat[i] & chip->irq_trig_fall[i]) |
				(cur_stat[i] & chip->irq_trig_raise[i]);
			pending[i] &= trigger[i];
			if (pending[i])
				pending_seen = true;
		}

		return pending_seen;
	}

B
Bartosz Golaszewski 已提交
702
	ret = pca953x_read_regs(chip, chip->regs->input, cur_stat);
703
	if (ret)
704
		return false;
705 706

	/* Remove output pins from the equation */
707 708
	regmap_bulk_read(chip->regmap, chip->regs->direction, reg_direction,
			 NBANK(chip));
709
	for (i = 0; i < NBANK(chip); i++)
710
		cur_stat[i] &= reg_direction[i];
711

712
	memcpy(old_stat, chip->irq_stat, NBANK(chip));
713

714 715
	for (i = 0; i < NBANK(chip); i++) {
		trigger[i] = (cur_stat[i] ^ old_stat[i]) & chip->irq_mask[i];
716 717
		if (trigger[i])
			trigger_seen = true;
718 719
	}

720 721
	if (!trigger_seen)
		return false;
722

723
	memcpy(chip->irq_stat, cur_stat, NBANK(chip));
724

725 726 727 728
	for (i = 0; i < NBANK(chip); i++) {
		pending[i] = (old_stat[i] & chip->irq_trig_fall[i]) |
			(cur_stat[i] & chip->irq_trig_raise[i]);
		pending[i] &= trigger[i];
729 730
		if (pending[i])
			pending_seen = true;
731
	}
732

733
	return pending_seen;
734 735 736 737 738
}

static irqreturn_t pca953x_irq_handler(int irq, void *devid)
{
	struct pca953x_chip *chip = devid;
739 740
	u8 pending[MAX_BANK];
	u8 level;
741
	unsigned nhandled = 0;
742
	int i;
743

744
	if (!pca953x_irq_pending(chip, pending))
745
		return IRQ_NONE;
746

747 748 749
	for (i = 0; i < NBANK(chip); i++) {
		while (pending[i]) {
			level = __ffs(pending[i]);
750
			handle_nested_irq(irq_find_mapping(chip->gpio_chip.irq.domain,
751 752
							level + (BANK_SZ * i)));
			pending[i] &= ~(1 << level);
753
			nhandled++;
754 755
		}
	}
756

757
	return (nhandled > 0) ? IRQ_HANDLED : IRQ_NONE;
758 759 760
}

static int pca953x_irq_setup(struct pca953x_chip *chip,
761
			     int irq_base)
762 763
{
	struct i2c_client *client = chip->client;
764
	int reg_direction[MAX_BANK];
B
Bartosz Golaszewski 已提交
765
	int ret, i;
766

767
	if (client->irq && irq_base != -1
768
			&& (chip->driver_data & PCA_INT)) {
B
Bartosz Golaszewski 已提交
769 770
		ret = pca953x_read_regs(chip,
					chip->regs->input, chip->irq_stat);
771
		if (ret)
772
			return ret;
773 774 775 776 777 778

		/*
		 * There is no way to know which GPIO line generated the
		 * interrupt.  We have to rely on the previous read for
		 * this purpose.
		 */
779 780
		regmap_bulk_read(chip->regmap, chip->regs->direction,
				 reg_direction, NBANK(chip));
781
		for (i = 0; i < NBANK(chip); i++)
782
			chip->irq_stat[i] &= reg_direction[i];
783 784
		mutex_init(&chip->irq_lock);

785 786
		ret = devm_request_threaded_irq(&client->dev,
					client->irq,
787 788
					   NULL,
					   pca953x_irq_handler,
789 790
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT |
						   IRQF_SHARED,
791 792 793 794
					   dev_name(&client->dev), chip);
		if (ret) {
			dev_err(&client->dev, "failed to request irq %d\n",
				client->irq);
795
			return ret;
796 797
		}

798 799 800 801 802
		ret =  gpiochip_irqchip_add_nested(&chip->gpio_chip,
						   &pca953x_irq_chip,
						   irq_base,
						   handle_simple_irq,
						   IRQ_TYPE_NONE);
803 804 805 806 807
		if (ret) {
			dev_err(&client->dev,
				"could not connect irqchip to gpiochip\n");
			return ret;
		}
808

809 810 811
		gpiochip_set_nested_irqchip(&chip->gpio_chip,
					    &pca953x_irq_chip,
					    client->irq);
812 813 814 815 816 817 818
	}

	return 0;
}

#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
819
			     int irq_base)
820 821 822
{
	struct i2c_client *client = chip->client;

823
	if (client->irq && irq_base != -1 && (chip->driver_data & PCA_INT))
824 825 826 827 828 829
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}
#endif

830
static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert)
831 832
{
	int ret;
833
	u8 val[MAX_BANK];
834

835 836 837
	ret = regcache_sync_region(chip->regmap, chip->regs->output,
				   chip->regs->output + NBANK(chip));
	if (ret != 0)
838 839
		goto out;

840 841 842
	ret = regcache_sync_region(chip->regmap, chip->regs->direction,
				   chip->regs->direction + NBANK(chip));
	if (ret != 0)
843 844 845
		goto out;

	/* set platform specific polarity inversion */
846 847 848 849 850
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));

851
	ret = pca953x_write_regs(chip, chip->regs->invert, val);
852 853 854 855
out:
	return ret;
}

B
Bill Pemberton 已提交
856
static int device_pca957x_init(struct pca953x_chip *chip, u32 invert)
857 858
{
	int ret;
859
	u8 val[MAX_BANK];
860

861
	ret = device_pca95xx_init(chip, invert);
862 863
	if (ret)
		goto out;
864

865
	/* To enable register 6, 7 to control pull up and pull down */
866
	memset(val, 0x02, NBANK(chip));
867 868 869
	ret = pca953x_write_regs(chip, PCA957X_BKEN, val);
	if (ret)
		goto out;
870 871 872 873 874 875

	return 0;
out:
	return ret;
}

876 877
static const struct of_device_id pca953x_dt_ids[];

B
Bill Pemberton 已提交
878
static int pca953x_probe(struct i2c_client *client,
879
				   const struct i2c_device_id *i2c_id)
880
{
881 882
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
883
	int irq_base = 0;
884
	int ret;
885
	u32 invert = 0;
886
	struct regulator *reg;
887

888 889
	chip = devm_kzalloc(&client->dev,
			sizeof(struct pca953x_chip), GFP_KERNEL);
890 891 892
	if (chip == NULL)
		return -ENOMEM;

J
Jingoo Han 已提交
893
	pdata = dev_get_platdata(&client->dev);
894 895 896 897 898 899
	if (pdata) {
		irq_base = pdata->irq_base;
		chip->gpio_start = pdata->gpio_base;
		invert = pdata->invert;
		chip->names = pdata->names;
	} else {
900 901
		struct gpio_desc *reset_gpio;

902 903
		chip->gpio_start = -1;
		irq_base = 0;
904

905 906 907 908 909 910 911
		/*
		 * See if we need to de-assert a reset pin.
		 *
		 * There is no known ACPI-enabled platforms that are
		 * using "reset" GPIO. Otherwise any of those platform
		 * must use _DSD method with corresponding property.
		 */
912 913 914 915
		reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
						     GPIOD_OUT_LOW);
		if (IS_ERR(reset_gpio))
			return PTR_ERR(reset_gpio);
916
	}
917 918 919

	chip->client = client;

920 921 922 923 924 925 926 927 928 929 930 931 932 933
	reg = devm_regulator_get(&client->dev, "vcc");
	if (IS_ERR(reg)) {
		ret = PTR_ERR(reg);
		if (ret != -EPROBE_DEFER)
			dev_err(&client->dev, "reg get err: %d\n", ret);
		return ret;
	}
	ret = regulator_enable(reg);
	if (ret) {
		dev_err(&client->dev, "reg en err: %d\n", ret);
		return ret;
	}
	chip->regulator = reg;

934 935
	if (i2c_id) {
		chip->driver_data = i2c_id->driver_data;
936
	} else {
937
		const struct acpi_device_id *acpi_id;
938
		struct device *dev = &client->dev;
939

940 941 942
		chip->driver_data = (uintptr_t)of_device_get_match_data(dev);
		if (!chip->driver_data) {
			acpi_id = acpi_match_device(pca953x_acpi_ids, dev);
943
			if (!acpi_id) {
944 945 946
				ret = -ENODEV;
				goto err_exit;
			}
947

948
			chip->driver_data = acpi_id->driver_data;
949
		}
950 951
	}

952 953 954 955 956 957 958 959
	i2c_set_clientdata(client, chip);

	chip->regmap = devm_regmap_init_i2c(client, &pca953x_i2c_regmap);
	if (IS_ERR(chip->regmap)) {
		ret = PTR_ERR(chip->regmap);
		goto err_exit;
	}

960 961
	regcache_mark_dirty(chip->regmap);

962
	mutex_init(&chip->i2c_lock);
963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978
	/*
	 * In case we have an i2c-mux controlled by a GPIO provided by an
	 * expander using the same driver higher on the device tree, read the
	 * i2c adapter nesting depth and use the retrieved value as lockdep
	 * subclass for chip->i2c_lock.
	 *
	 * REVISIT: This solution is not complete. It protects us from lockdep
	 * false positives when the expander controlling the i2c-mux is on
	 * a different level on the device tree, but not when it's on the same
	 * level on a different branch (in which case the subclass number
	 * would be the same).
	 *
	 * TODO: Once a correct solution is developed, a similar fix should be
	 * applied to all other i2c-controlled GPIO expanders (and potentially
	 * regmap-i2c).
	 */
979 980
	lockdep_set_subclass(&chip->i2c_lock,
			     i2c_adapter_depth(client->adapter));
981

982 983 984
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
985
	pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK);
986

987 988 989
	if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
		chip->regs = &pca953x_regs;
		ret = device_pca95xx_init(chip, invert);
990
	} else {
991
		chip->regs = &pca957x_regs;
992
		ret = device_pca957x_init(chip, invert);
993
	}
994
	if (ret)
995
		goto err_exit;
996

997
	ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip);
998
	if (ret)
999
		goto err_exit;
1000

1001
	ret = pca953x_irq_setup(chip, irq_base);
1002
	if (ret)
1003
		goto err_exit;
1004

1005
	if (pdata && pdata->setup) {
1006 1007 1008 1009 1010 1011 1012
		ret = pdata->setup(client, chip->gpio_chip.base,
				chip->gpio_chip.ngpio, pdata->context);
		if (ret < 0)
			dev_warn(&client->dev, "setup failed, %d\n", ret);
	}

	return 0;
1013 1014 1015 1016

err_exit:
	regulator_disable(chip->regulator);
	return ret;
1017 1018
}

1019
static int pca953x_remove(struct i2c_client *client)
1020
{
J
Jingoo Han 已提交
1021
	struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev);
1022
	struct pca953x_chip *chip = i2c_get_clientdata(client);
1023
	int ret;
1024

1025
	if (pdata && pdata->teardown) {
1026 1027
		ret = pdata->teardown(client, chip->gpio_chip.base,
				chip->gpio_chip.ngpio, pdata->context);
1028
		if (ret < 0)
1029 1030
			dev_err(&client->dev, "%s failed, %d\n",
					"teardown", ret);
1031 1032
	} else {
		ret = 0;
1033 1034
	}

1035 1036 1037
	regulator_disable(chip->regulator);

	return ret;
1038 1039
}

1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124
#ifdef CONFIG_PM_SLEEP
static int pca953x_regcache_sync(struct device *dev)
{
	struct pca953x_chip *chip = dev_get_drvdata(dev);
	int ret;

	/*
	 * The ordering between direction and output is important,
	 * sync these registers first and only then sync the rest.
	 */
	ret = regcache_sync_region(chip->regmap, chip->regs->direction,
				   chip->regs->direction + NBANK(chip));
	if (ret != 0) {
		dev_err(dev, "Failed to sync GPIO dir registers: %d\n", ret);
		return ret;
	}

	ret = regcache_sync_region(chip->regmap, chip->regs->output,
				   chip->regs->output + NBANK(chip));
	if (ret != 0) {
		dev_err(dev, "Failed to sync GPIO out registers: %d\n", ret);
		return ret;
	}

#ifdef CONFIG_GPIO_PCA953X_IRQ
	if (chip->driver_data & PCA_PCAL) {
		ret = regcache_sync_region(chip->regmap, PCAL953X_IN_LATCH,
					   PCAL953X_IN_LATCH + NBANK(chip));
		if (ret != 0) {
			dev_err(dev, "Failed to sync INT latch registers: %d\n",
				ret);
			return ret;
		}

		ret = regcache_sync_region(chip->regmap, PCAL953X_INT_MASK,
					   PCAL953X_INT_MASK + NBANK(chip));
		if (ret != 0) {
			dev_err(dev, "Failed to sync INT mask registers: %d\n",
				ret);
			return ret;
		}
	}
#endif

	return 0;
}

static int pca953x_suspend(struct device *dev)
{
	struct pca953x_chip *chip = dev_get_drvdata(dev);

	regcache_cache_only(chip->regmap, true);

	regulator_disable(chip->regulator);

	return 0;
}

static int pca953x_resume(struct device *dev)
{
	struct pca953x_chip *chip = dev_get_drvdata(dev);
	int ret;

	ret = regulator_enable(chip->regulator);
	if (ret != 0) {
		dev_err(dev, "Failed to enable regulator: %d\n", ret);
		return 0;
	}

	regcache_cache_only(chip->regmap, false);
	regcache_mark_dirty(chip->regmap);
	ret = pca953x_regcache_sync(dev);
	if (ret)
		return ret;

	ret = regcache_sync(chip->regmap);
	if (ret != 0) {
		dev_err(dev, "Failed to restore register map: %d\n", ret);
		return ret;
	}

	return 0;
}
#endif

1125 1126 1127 1128
/* convenience to stop overlong match-table lines */
#define OF_953X(__nrgpio, __int) (void *)(__nrgpio | PCA953X_TYPE | __int)
#define OF_957X(__nrgpio, __int) (void *)(__nrgpio | PCA957X_TYPE | __int)

1129
static const struct of_device_id pca953x_dt_ids[] = {
1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144
	{ .compatible = "nxp,pca9505", .data = OF_953X(40, PCA_INT), },
	{ .compatible = "nxp,pca9534", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9535", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "nxp,pca9536", .data = OF_953X( 4, 0), },
	{ .compatible = "nxp,pca9537", .data = OF_953X( 4, PCA_INT), },
	{ .compatible = "nxp,pca9538", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9539", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "nxp,pca9554", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9555", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "nxp,pca9556", .data = OF_953X( 8, 0), },
	{ .compatible = "nxp,pca9557", .data = OF_953X( 8, 0), },
	{ .compatible = "nxp,pca9574", .data = OF_957X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9575", .data = OF_957X(16, PCA_INT), },
	{ .compatible = "nxp,pca9698", .data = OF_953X(40, 0), },

1145 1146
	{ .compatible = "nxp,pcal6524", .data = OF_953X(24, PCA_LATCH_INT), },
	{ .compatible = "nxp,pcal9555a", .data = OF_953X(16, PCA_LATCH_INT), },
1147

1148 1149 1150 1151
	{ .compatible = "maxim,max7310", .data = OF_953X( 8, 0), },
	{ .compatible = "maxim,max7312", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "maxim,max7313", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "maxim,max7315", .data = OF_953X( 8, PCA_INT), },
1152
	{ .compatible = "maxim,max7318", .data = OF_953X(16, PCA_INT), },
1153 1154

	{ .compatible = "ti,pca6107", .data = OF_953X( 8, PCA_INT), },
1155
	{ .compatible = "ti,pca9536", .data = OF_953X( 4, 0), },
1156 1157 1158 1159
	{ .compatible = "ti,tca6408", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "ti,tca6416", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "ti,tca6424", .data = OF_953X(24, PCA_INT), },

1160
	{ .compatible = "onnn,pca9654", .data = OF_953X( 8, PCA_INT), },
1161 1162

	{ .compatible = "exar,xra1202", .data = OF_953X( 8, 0), },
1163 1164 1165 1166 1167
	{ }
};

MODULE_DEVICE_TABLE(of, pca953x_dt_ids);

1168 1169
static SIMPLE_DEV_PM_OPS(pca953x_pm_ops, pca953x_suspend, pca953x_resume);

1170
static struct i2c_driver pca953x_driver = {
1171
	.driver = {
1172
		.name	= "pca953x",
1173
		.pm	= &pca953x_pm_ops,
1174
		.of_match_table = pca953x_dt_ids,
1175
		.acpi_match_table = ACPI_PTR(pca953x_acpi_ids),
1176
	},
1177 1178
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
1179
	.id_table	= pca953x_id,
1180 1181
};

1182
static int __init pca953x_init(void)
1183
{
1184
	return i2c_add_driver(&pca953x_driver);
1185
}
1186 1187 1188 1189
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
1190

1191
static void __exit pca953x_exit(void)
1192
{
1193
	i2c_del_driver(&pca953x_driver);
1194
}
1195
module_exit(pca953x_exit);
1196 1197

MODULE_AUTHOR("eric miao <eric.miao@marvell.com>");
1198
MODULE_DESCRIPTION("GPIO expander driver for PCA953x");
1199
MODULE_LICENSE("GPL");