gpio-pca953x.c 16.6 KB
Newer Older
1
/*
G
Grant Likely 已提交
2
 *  PCA953x 4/8/16 bit I/O ports
3 4 5 6 7 8 9 10 11 12 13 14 15
 *
 *  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.
 */

#include <linux/module.h>
#include <linux/init.h>
16
#include <linux/gpio.h>
17 18
#include <linux/interrupt.h>
#include <linux/irq.h>
19
#include <linux/i2c.h>
20
#include <linux/i2c/pca953x.h>
21
#include <linux/slab.h>
22 23 24 25
#ifdef CONFIG_OF_GPIO
#include <linux/of_platform.h>
#include <linux/of_gpio.h>
#endif
26

27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
#define PCA953X_INPUT		0
#define PCA953X_OUTPUT		1
#define PCA953X_INVERT		2
#define PCA953X_DIRECTION	3

#define PCA957X_IN		0
#define PCA957X_INVRT		1
#define PCA957X_BKEN		2
#define PCA957X_PUPD		3
#define PCA957X_CFG		4
#define PCA957X_OUT		5
#define PCA957X_MSK		6
#define PCA957X_INTS		7

#define PCA_GPIO_MASK		0x00FF
#define PCA_INT			0x0100
#define PCA953X_TYPE		0x1000
#define PCA957X_TYPE		0x2000
45

46
static const struct i2c_device_id pca953x_id[] = {
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
	{ "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, },

	{ "max7310", 8  | PCA953X_TYPE, },
	{ "max7312", 16 | PCA953X_TYPE | PCA_INT, },
	{ "max7313", 16 | PCA953X_TYPE | PCA_INT, },
	{ "max7315", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca6107", 8  | PCA953X_TYPE | PCA_INT, },
	{ "tca6408", 8  | PCA953X_TYPE | PCA_INT, },
	{ "tca6416", 16 | PCA953X_TYPE | PCA_INT, },
67
	/* NYET:  { "tca6424", 24, }, */
68
	{ }
69
};
70
MODULE_DEVICE_TABLE(i2c, pca953x_id);
71

72
struct pca953x_chip {
73 74 75
	unsigned gpio_start;
	uint16_t reg_output;
	uint16_t reg_direction;
76
	struct mutex i2c_lock;
77

78 79 80 81 82 83 84 85 86
#ifdef CONFIG_GPIO_PCA953X_IRQ
	struct mutex irq_lock;
	uint16_t irq_mask;
	uint16_t irq_stat;
	uint16_t irq_trig_raise;
	uint16_t irq_trig_fall;
	int	 irq_base;
#endif

87 88
	struct i2c_client *client;
	struct gpio_chip gpio_chip;
89
	const char *const *names;
90
	int	chip_type;
91 92
};

93
static int pca953x_write_reg(struct pca953x_chip *chip, int reg, uint16_t val)
94
{
95
	int ret = 0;
96 97 98

	if (chip->gpio_chip.ngpio <= 8)
		ret = i2c_smbus_write_byte_data(chip->client, reg, val);
99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
	else {
		switch (chip->chip_type) {
		case PCA953X_TYPE:
			ret = i2c_smbus_write_word_data(chip->client,
							reg << 1, val);
			break;
		case PCA957X_TYPE:
			ret = i2c_smbus_write_byte_data(chip->client, reg << 1,
							val & 0xff);
			if (ret < 0)
				break;
			ret = i2c_smbus_write_byte_data(chip->client,
							(reg << 1) + 1,
							(val & 0xff00) >> 8);
			break;
		}
	}
116 117 118

	if (ret < 0) {
		dev_err(&chip->client->dev, "failed writing register\n");
119
		return ret;
120 121 122
	}

	return 0;
123 124
}

125
static int pca953x_read_reg(struct pca953x_chip *chip, int reg, uint16_t *val)
126 127 128
{
	int ret;

129 130 131 132 133
	if (chip->gpio_chip.ngpio <= 8)
		ret = i2c_smbus_read_byte_data(chip->client, reg);
	else
		ret = i2c_smbus_read_word_data(chip->client, reg << 1);

134 135
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed reading register\n");
136
		return ret;
137 138 139 140 141 142
	}

	*val = (uint16_t)ret;
	return 0;
}

143
static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
144
{
145
	struct pca953x_chip *chip;
146
	uint16_t reg_val;
147
	int ret, offset = 0;
148

149
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
150

151
	mutex_lock(&chip->i2c_lock);
152
	reg_val = chip->reg_direction | (1u << off);
153 154 155 156 157 158 159 160 161 162

	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_DIRECTION;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_CFG;
		break;
	}
	ret = pca953x_write_reg(chip, offset, reg_val);
163
	if (ret)
164
		goto exit;
165 166

	chip->reg_direction = reg_val;
167 168 169 170
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
171 172
}

173
static int pca953x_gpio_direction_output(struct gpio_chip *gc,
174 175
		unsigned off, int val)
{
176
	struct pca953x_chip *chip;
177
	uint16_t reg_val;
178
	int ret, offset = 0;
179

180
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
181

182
	mutex_lock(&chip->i2c_lock);
183 184 185 186 187 188
	/* set output level */
	if (val)
		reg_val = chip->reg_output | (1u << off);
	else
		reg_val = chip->reg_output & ~(1u << off);

189 190 191 192 193 194 195 196 197
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_OUTPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_OUT;
		break;
	}
	ret = pca953x_write_reg(chip, offset, reg_val);
198
	if (ret)
199
		goto exit;
200 201 202 203 204

	chip->reg_output = reg_val;

	/* then direction */
	reg_val = chip->reg_direction & ~(1u << off);
205 206 207 208 209 210 211 212 213
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_DIRECTION;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_CFG;
		break;
	}
	ret = pca953x_write_reg(chip, offset, reg_val);
214
	if (ret)
215
		goto exit;
216 217

	chip->reg_direction = reg_val;
218 219 220 221
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
222 223
}

224
static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
225
{
226
	struct pca953x_chip *chip;
227
	uint16_t reg_val;
228
	int ret, offset = 0;
229

230
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
231

232
	mutex_lock(&chip->i2c_lock);
233 234 235 236 237 238 239 240 241
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_INPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_IN;
		break;
	}
	ret = pca953x_read_reg(chip, offset, &reg_val);
242
	mutex_unlock(&chip->i2c_lock);
243 244 245 246 247 248 249 250 251 252 253
	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;
	}

	return (reg_val & (1u << off)) ? 1 : 0;
}

254
static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
255
{
256
	struct pca953x_chip *chip;
257
	uint16_t reg_val;
258
	int ret, offset = 0;
259

260
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
261

262
	mutex_lock(&chip->i2c_lock);
263 264 265 266 267
	if (val)
		reg_val = chip->reg_output | (1u << off);
	else
		reg_val = chip->reg_output & ~(1u << off);

268 269 270 271 272 273 274 275 276
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_OUTPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_OUT;
		break;
	}
	ret = pca953x_write_reg(chip, offset, reg_val);
277
	if (ret)
278
		goto exit;
279 280

	chip->reg_output = reg_val;
281 282
exit:
	mutex_unlock(&chip->i2c_lock);
283 284
}

285
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
286 287 288 289 290
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

291 292 293 294
	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;
295
	gc->can_sleep = 1;
296 297

	gc->base = chip->gpio_start;
298 299
	gc->ngpio = gpios;
	gc->label = chip->client->name;
D
David Brownell 已提交
300
	gc->dev = &chip->client->dev;
301
	gc->owner = THIS_MODULE;
302
	gc->names = chip->names;
303 304
}

305 306 307 308 309 310 311 312 313
#ifdef CONFIG_GPIO_PCA953X_IRQ
static int pca953x_gpio_to_irq(struct gpio_chip *gc, unsigned off)
{
	struct pca953x_chip *chip;

	chip = container_of(gc, struct pca953x_chip, gpio_chip);
	return chip->irq_base + off;
}

314
static void pca953x_irq_mask(struct irq_data *d)
315
{
316
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
317

318
	chip->irq_mask &= ~(1 << (d->irq - chip->irq_base));
319 320
}

321
static void pca953x_irq_unmask(struct irq_data *d)
322
{
323
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
324

325
	chip->irq_mask |= 1 << (d->irq - chip->irq_base);
326 327
}

328
static void pca953x_irq_bus_lock(struct irq_data *d)
329
{
330
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
331 332 333 334

	mutex_lock(&chip->irq_lock);
}

335
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
336
{
337
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
338 339 340 341 342 343 344 345 346 347 348 349
	uint16_t new_irqs;
	uint16_t level;

	/* Look for any newly setup interrupt */
	new_irqs = chip->irq_trig_fall | chip->irq_trig_raise;
	new_irqs &= ~chip->reg_direction;

	while (new_irqs) {
		level = __ffs(new_irqs);
		pca953x_gpio_direction_input(&chip->gpio_chip, level);
		new_irqs &= ~(1 << level);
	}
350 351 352 353

	mutex_unlock(&chip->irq_lock);
}

354
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
355
{
356 357
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
	uint16_t level = d->irq - chip->irq_base;
358 359 360 361
	uint16_t mask = 1 << level;

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
362
			d->irq, type);
363 364 365 366 367 368 369 370 371 372 373 374 375
		return -EINVAL;
	}

	if (type & IRQ_TYPE_EDGE_FALLING)
		chip->irq_trig_fall |= mask;
	else
		chip->irq_trig_fall &= ~mask;

	if (type & IRQ_TYPE_EDGE_RISING)
		chip->irq_trig_raise |= mask;
	else
		chip->irq_trig_raise &= ~mask;

376
	return 0;
377 378 379 380
}

static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
381 382 383 384 385
	.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,
386 387 388 389 390 391 392 393
};

static uint16_t pca953x_irq_pending(struct pca953x_chip *chip)
{
	uint16_t cur_stat;
	uint16_t old_stat;
	uint16_t pending;
	uint16_t trigger;
394 395 396 397 398 399 400 401 402 403 404
	int ret, offset = 0;

	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_INPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_IN;
		break;
	}
	ret = pca953x_read_reg(chip, offset, &cur_stat);
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
	if (ret)
		return 0;

	/* Remove output pins from the equation */
	cur_stat &= chip->reg_direction;

	old_stat = chip->irq_stat;
	trigger = (cur_stat ^ old_stat) & chip->irq_mask;

	if (!trigger)
		return 0;

	chip->irq_stat = cur_stat;

	pending = (old_stat & chip->irq_trig_fall) |
		  (cur_stat & chip->irq_trig_raise);
	pending &= trigger;

	return pending;
}

static irqreturn_t pca953x_irq_handler(int irq, void *devid)
{
	struct pca953x_chip *chip = devid;
	uint16_t pending;
	uint16_t level;

	pending = pca953x_irq_pending(chip);

	if (!pending)
		return IRQ_HANDLED;

	do {
		level = __ffs(pending);
439
		handle_nested_irq(level + chip->irq_base);
440 441 442 443 444 445 446 447

		pending &= ~(1 << level);
	} while (pending);

	return IRQ_HANDLED;
}

static int pca953x_irq_setup(struct pca953x_chip *chip,
448 449
			     const struct i2c_device_id *id,
			     int irq_base)
450 451
{
	struct i2c_client *client = chip->client;
452
	int ret, offset = 0;
453

454
	if (irq_base != -1
455
			&& (id->driver_data & PCA_INT)) {
456 457
		int lvl;

458 459 460 461 462 463 464 465 466
		switch (chip->chip_type) {
		case PCA953X_TYPE:
			offset = PCA953X_INPUT;
			break;
		case PCA957X_TYPE:
			offset = PCA957X_IN;
			break;
		}
		ret = pca953x_read_reg(chip, offset, &chip->irq_stat);
467 468 469 470 471 472 473 474 475 476 477
		if (ret)
			goto out_failed;

		/*
		 * There is no way to know which GPIO line generated the
		 * interrupt.  We have to rely on the previous read for
		 * this purpose.
		 */
		chip->irq_stat &= chip->reg_direction;
		mutex_init(&chip->irq_lock);

478
		chip->irq_base = irq_alloc_descs(-1, irq_base, chip->gpio_chip.ngpio, -1);
D
David Jander 已提交
479 480 481
		if (chip->irq_base < 0)
			goto out_failed;

482 483 484
		for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) {
			int irq = lvl + chip->irq_base;

D
David Jander 已提交
485
			irq_clear_status_flags(irq, IRQ_NOREQUEST);
T
Thomas Gleixner 已提交
486
			irq_set_chip_data(irq, chip);
487 488
			irq_set_chip(irq, &pca953x_irq_chip);
			irq_set_nested_thread(irq, true);
489 490 491
#ifdef CONFIG_ARM
			set_irq_flags(irq, IRQF_VALID);
#else
T
Thomas Gleixner 已提交
492
			irq_set_noprobe(irq);
493 494 495 496 497 498
#endif
		}

		ret = request_threaded_irq(client->irq,
					   NULL,
					   pca953x_irq_handler,
499
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
500 501 502 503 504 505 506 507 508 509 510 511 512
					   dev_name(&client->dev), chip);
		if (ret) {
			dev_err(&client->dev, "failed to request irq %d\n",
				client->irq);
			goto out_failed;
		}

		chip->gpio_chip.to_irq = pca953x_gpio_to_irq;
	}

	return 0;

out_failed:
513
	chip->irq_base = -1;
514 515 516 517 518
	return ret;
}

static void pca953x_irq_teardown(struct pca953x_chip *chip)
{
D
David Jander 已提交
519 520
	if (chip->irq_base != -1) {
		irq_free_descs(chip->irq_base, chip->gpio_chip.ngpio);
521
		free_irq(chip->client->irq, chip);
D
David Jander 已提交
522
	}
523 524 525
}
#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
526 527
			     const struct i2c_device_id *id,
			     int irq_base)
528 529 530
{
	struct i2c_client *client = chip->client;

531
	if (irq_base != -1 && (id->driver_data & PCA_INT))
532 533 534 535 536 537 538 539 540 541
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}

static void pca953x_irq_teardown(struct pca953x_chip *chip)
{
}
#endif

542 543 544 545 546 547 548
/*
 * Handlers for alternative sources of platform_data
 */
#ifdef CONFIG_OF_GPIO
/*
 * Translate OpenFirmware node properties into platform_data
 */
549 550
void
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, int *invert)
551 552
{
	struct device_node *node;
553 554
	const __be32 *val;
	int size;
555

556
	node = client->dev.of_node;
557
	if (node == NULL)
558
		return;
559

560
	*gpio_base = -1;
561
	val = of_get_property(node, "linux,gpio-base", &size);
562
	if (val) {
563 564 565
		if (size != sizeof(*val))
			dev_warn(&client->dev, "%s: wrong linux,gpio-base\n",
				 node->full_name);
566
		else
567
			*gpio_base = be32_to_cpup(val);
568 569 570 571
	}

	val = of_get_property(node, "polarity", NULL);
	if (val)
572
		*invert = *val;
573 574
}
#else
575 576
void
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, int *invert)
577 578 579 580
{
}
#endif

581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
static int __devinit device_pca953x_init(struct pca953x_chip *chip, int invert)
{
	int ret;

	ret = pca953x_read_reg(chip, PCA953X_OUTPUT, &chip->reg_output);
	if (ret)
		goto out;

	ret = pca953x_read_reg(chip, PCA953X_DIRECTION,
			       &chip->reg_direction);
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
	ret = pca953x_write_reg(chip, PCA953X_INVERT, invert);
	if (ret)
		goto out;
	return 0;
out:
	return ret;
}

static int __devinit device_pca957x_init(struct pca953x_chip *chip, int invert)
{
	int ret;
	uint16_t val = 0;

	/* Let every port in proper state, that could save power */
	pca953x_write_reg(chip, PCA957X_PUPD, 0x0);
	pca953x_write_reg(chip, PCA957X_CFG, 0xffff);
	pca953x_write_reg(chip, PCA957X_OUT, 0x0);

	ret = pca953x_read_reg(chip, PCA957X_IN, &val);
	if (ret)
		goto out;
	ret = pca953x_read_reg(chip, PCA957X_OUT, &chip->reg_output);
	if (ret)
		goto out;
	ret = pca953x_read_reg(chip, PCA957X_CFG, &chip->reg_direction);
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
	pca953x_write_reg(chip, PCA957X_INVRT, invert);

	/* To enable register 6, 7 to controll pull up and pull down */
	pca953x_write_reg(chip, PCA957X_BKEN, 0x202);

	return 0;
out:
	return ret;
}

634
static int __devinit pca953x_probe(struct i2c_client *client,
635
				   const struct i2c_device_id *id)
636
{
637 638
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
639
	int irq_base=-1, invert=0;
640
	int ret = 0;
641

642 643 644 645
	chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
	if (chip == NULL)
		return -ENOMEM;

646
	pdata = client->dev.platform_data;
647 648 649 650 651 652 653
	if (pdata) {
		irq_base = pdata->irq_base;
		chip->gpio_start = pdata->gpio_base;
		invert = pdata->invert;
		chip->names = pdata->names;
	} else {
		pca953x_get_alt_pdata(client, &chip->gpio_start, &invert);
654
	}
655 656 657

	chip->client = client;

658
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
659

660 661
	mutex_init(&chip->i2c_lock);

662 663 664
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
665
	pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
666

667
	if (chip->chip_type == PCA953X_TYPE)
668
		device_pca953x_init(chip, invert);
669
	else if (chip->chip_type == PCA957X_TYPE)
670
		device_pca957x_init(chip, invert);
671
	else
672 673
		goto out_failed;

674
	ret = pca953x_irq_setup(chip, id, irq_base);
675 676
	if (ret)
		goto out_failed;
677 678

	ret = gpiochip_add(&chip->gpio_chip);
679
	if (ret)
680
		goto out_failed_irq;
681

682
	if (pdata && pdata->setup) {
683 684 685 686 687 688 689 690 691
		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);
	}

	i2c_set_clientdata(client, chip);
	return 0;

692
out_failed_irq:
693
	pca953x_irq_teardown(chip);
694
out_failed:
695 696 697 698
	kfree(chip);
	return ret;
}

699
static int pca953x_remove(struct i2c_client *client)
700
{
701 702
	struct pca953x_platform_data *pdata = client->dev.platform_data;
	struct pca953x_chip *chip = i2c_get_clientdata(client);
703 704
	int ret = 0;

705
	if (pdata && pdata->teardown) {
706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721
		ret = pdata->teardown(client, chip->gpio_chip.base,
				chip->gpio_chip.ngpio, pdata->context);
		if (ret < 0) {
			dev_err(&client->dev, "%s failed, %d\n",
					"teardown", ret);
			return ret;
		}
	}

	ret = gpiochip_remove(&chip->gpio_chip);
	if (ret) {
		dev_err(&client->dev, "%s failed, %d\n",
				"gpiochip_remove()", ret);
		return ret;
	}

722
	pca953x_irq_teardown(chip);
723 724 725 726
	kfree(chip);
	return 0;
}

727
static struct i2c_driver pca953x_driver = {
728
	.driver = {
729
		.name	= "pca953x",
730
	},
731 732
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
733
	.id_table	= pca953x_id,
734 735
};

736
static int __init pca953x_init(void)
737
{
738
	return i2c_add_driver(&pca953x_driver);
739
}
740 741 742 743
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
744

745
static void __exit pca953x_exit(void)
746
{
747
	i2c_del_driver(&pca953x_driver);
748
}
749
module_exit(pca953x_exit);
750 751

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