gpio-pca953x.c 17.1 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
	struct i2c_client *client;
88
	struct pca953x_platform_data *dyn_pdata;
89
	struct gpio_chip gpio_chip;
90
	const char *const *names;
91
	int	chip_type;
92 93
};

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

	if (chip->gpio_chip.ngpio <= 8)
		ret = i2c_smbus_write_byte_data(chip->client, reg, val);
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
	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;
		}
	}
117 118 119

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

	return 0;
124 125
}

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

130 131 132 133 134
	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);

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

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

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

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

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

	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);
164
	if (ret)
165
		goto exit;
166 167

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

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

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

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

190 191 192 193 194 195 196 197 198
	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);
199
	if (ret)
200
		goto exit;
201 202 203 204 205

	chip->reg_output = reg_val;

	/* then direction */
	reg_val = chip->reg_direction & ~(1u << off);
206 207 208 209 210 211 212 213 214
	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);
215
	if (ret)
216
		goto exit;
217 218

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

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

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

233
	mutex_lock(&chip->i2c_lock);
234 235 236 237 238 239 240 241 242
	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);
243
	mutex_unlock(&chip->i2c_lock);
244 245 246 247 248 249 250 251 252 253 254
	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;
}

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

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

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

269 270 271 272 273 274 275 276 277
	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);
278
	if (ret)
279
		goto exit;
280 281

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

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

	gc = &chip->gpio_chip;

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

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

306 307 308 309 310 311 312 313 314
#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;
}

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

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

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

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

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

	mutex_lock(&chip->irq_lock);
}

336
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
337
{
338
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
339 340 341 342 343 344 345 346 347 348 349 350
	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);
	}
351 352 353 354

	mutex_unlock(&chip->irq_lock);
}

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

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
363
			d->irq, type);
364 365 366 367 368 369 370 371 372 373 374 375 376
		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;

377
	return 0;
378 379 380 381
}

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

static uint16_t pca953x_irq_pending(struct pca953x_chip *chip)
{
	uint16_t cur_stat;
	uint16_t old_stat;
	uint16_t pending;
	uint16_t trigger;
395 396 397 398 399 400 401 402 403 404 405
	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);
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 439
	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);
440
		generic_handle_irq(level + chip->irq_base);
441 442 443 444 445 446 447 448 449 450 451 452

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

	return IRQ_HANDLED;
}

static int pca953x_irq_setup(struct pca953x_chip *chip,
			     const struct i2c_device_id *id)
{
	struct i2c_client *client = chip->client;
	struct pca953x_platform_data *pdata = client->dev.platform_data;
453
	int ret, offset = 0;
454

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

459 460 461 462 463 464 465 466 467
		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);
468 469 470 471 472 473 474 475 476 477 478
		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);

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

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

D
David Jander 已提交
486
			irq_clear_status_flags(irq, IRQ_NOREQUEST);
T
Thomas Gleixner 已提交
487 488
			irq_set_chip_data(irq, chip);
			irq_set_chip_and_handler(irq, &pca953x_irq_chip,
489
						 handle_simple_irq);
490 491 492
#ifdef CONFIG_ARM
			set_irq_flags(irq, IRQF_VALID);
#else
T
Thomas Gleixner 已提交
493
			irq_set_noprobe(irq);
494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513
#endif
		}

		ret = request_threaded_irq(client->irq,
					   NULL,
					   pca953x_irq_handler,
					   IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
					   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:
514
	chip->irq_base = -1;
515 516 517 518 519
	return ret;
}

static void pca953x_irq_teardown(struct pca953x_chip *chip)
{
520
	if (chip->irq_base != -1)
521 522 523 524 525 526 527 528 529
		free_irq(chip->client->irq, chip);
}
#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
			     const struct i2c_device_id *id)
{
	struct i2c_client *client = chip->client;
	struct pca953x_platform_data *pdata = client->dev.platform_data;

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

	return 0;
}

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

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

556
	node = client->dev.of_node;
557 558 559 560 561 562 563 564 565 566
	if (node == NULL)
		return NULL;

	pdata = kzalloc(sizeof(struct pca953x_platform_data), GFP_KERNEL);
	if (pdata == NULL) {
		dev_err(&client->dev, "Unable to allocate platform_data\n");
		return NULL;
	}

	pdata->gpio_base = -1;
567
	val = of_get_property(node, "linux,gpio-base", &size);
568
	if (val) {
569 570 571
		if (size != sizeof(*val))
			dev_warn(&client->dev, "%s: wrong linux,gpio-base\n",
				 node->full_name);
572
		else
573
			pdata->gpio_base = be32_to_cpup(val);
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
	}

	val = of_get_property(node, "polarity", NULL);
	if (val)
		pdata->invert = *val;

	return pdata;
}
#else
static struct pca953x_platform_data *
pca953x_get_alt_pdata(struct i2c_client *client)
{
	return NULL;
}
#endif

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 634 635 636 637 638 639 640 641 642
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;
}

643
static int __devinit pca953x_probe(struct i2c_client *client,
644
				   const struct i2c_device_id *id)
645
{
646 647
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
648
	int ret = 0;
649

650 651 652 653
	chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
	if (chip == NULL)
		return -ENOMEM;

654
	pdata = client->dev.platform_data;
655
	if (pdata == NULL) {
656 657 658 659 660 661
		pdata = pca953x_get_alt_pdata(client);
		/*
		 * Unlike normal platform_data, this is allocated
		 * dynamically and must be freed in the driver
		 */
		chip->dyn_pdata = pdata;
662
	}
663

664 665 666 667 668
	if (pdata == NULL) {
		dev_dbg(&client->dev, "no platform data\n");
		ret = -EINVAL;
		goto out_failed;
	}
669 670 671 672 673

	chip->client = client;

	chip->gpio_start = pdata->gpio_base;

674
	chip->names = pdata->names;
675
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
676

677 678
	mutex_init(&chip->i2c_lock);

679 680 681
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
682
	pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
683

684 685 686 687 688
	if (chip->chip_type == PCA953X_TYPE)
		device_pca953x_init(chip, pdata->invert);
	else if (chip->chip_type == PCA957X_TYPE)
		device_pca957x_init(chip, pdata->invert);
	else
689 690
		goto out_failed;

691 692 693
	ret = pca953x_irq_setup(chip, id);
	if (ret)
		goto out_failed;
694 695

	ret = gpiochip_add(&chip->gpio_chip);
696
	if (ret)
697
		goto out_failed_irq;
698 699 700 701 702 703 704 705 706 707 708

	if (pdata->setup) {
		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;

709
out_failed_irq:
710
	pca953x_irq_teardown(chip);
711
out_failed:
712
	kfree(chip->dyn_pdata);
713 714 715 716
	kfree(chip);
	return ret;
}

717
static int pca953x_remove(struct i2c_client *client)
718
{
719 720
	struct pca953x_platform_data *pdata = client->dev.platform_data;
	struct pca953x_chip *chip = i2c_get_clientdata(client);
721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739
	int ret = 0;

	if (pdata->teardown) {
		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;
	}

740
	pca953x_irq_teardown(chip);
741
	kfree(chip->dyn_pdata);
742 743 744 745
	kfree(chip);
	return 0;
}

746
static struct i2c_driver pca953x_driver = {
747
	.driver = {
748
		.name	= "pca953x",
749
	},
750 751
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
752
	.id_table	= pca953x_id,
753 754
};

755
static int __init pca953x_init(void)
756
{
757
	return i2c_add_driver(&pca953x_driver);
758
}
759 760 761 762
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
763

764
static void __exit pca953x_exit(void)
765
{
766
	i2c_del_driver(&pca953x_driver);
767
}
768
module_exit(pca953x_exit);
769 770

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