gpio-pca953x.c 17.4 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
#ifdef CONFIG_OF_GPIO
#include <linux/of_platform.h>
#endif
25

26 27 28 29 30
#define PCA953X_INPUT		0
#define PCA953X_OUTPUT		1
#define PCA953X_INVERT		2
#define PCA953X_DIRECTION	3

A
Andreas Schallenberg 已提交
31 32
#define REG_ADDR_AI		0x80

33 34 35 36 37 38 39 40 41 42 43 44 45
#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
46

47
static const struct i2c_device_id pca953x_id[] = {
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
	{ "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, },
A
Andreas Schallenberg 已提交
68
	{ "tca6424", 24 | PCA953X_TYPE | PCA_INT, },
69
	{ }
70
};
71
MODULE_DEVICE_TABLE(i2c, pca953x_id);
72

73
struct pca953x_chip {
74
	unsigned gpio_start;
A
Andreas Schallenberg 已提交
75 76
	u32 reg_output;
	u32 reg_direction;
77
	struct mutex i2c_lock;
78

79 80 81 82 83 84 85 86 87
#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

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

A
Andreas Schallenberg 已提交
94
static int pca953x_write_reg(struct pca953x_chip *chip, int reg, u32 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);
A
Andreas Schallenberg 已提交
100
	else if (chip->gpio_chip.ngpio == 24) {
101 102
		cpu_to_le32s(&val);
		ret = i2c_smbus_write_i2c_block_data(chip->client,
A
Andreas Schallenberg 已提交
103
						(reg << 2) | REG_ADDR_AI,
104 105
						3,
						(u8 *) &val);
A
Andreas Schallenberg 已提交
106
	}
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123
	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;
		}
	}
124 125 126

	if (ret < 0) {
		dev_err(&chip->client->dev, "failed writing register\n");
127
		return ret;
128 129 130
	}

	return 0;
131 132
}

A
Andreas Schallenberg 已提交
133
static int pca953x_read_reg(struct pca953x_chip *chip, int reg, u32 *val)
134 135 136
{
	int ret;

137
	if (chip->gpio_chip.ngpio <= 8) {
138
		ret = i2c_smbus_read_byte_data(chip->client, reg);
139
		*val = ret;
A
Andreas Schallenberg 已提交
140
	}
141 142 143 144 145 146 147 148
	else if (chip->gpio_chip.ngpio == 24) {
		*val = 0;
		ret = i2c_smbus_read_i2c_block_data(chip->client,
						(reg << 2) | REG_ADDR_AI,
						3,
						(u8 *) val);
		le32_to_cpus(val);
	} else {
149
		ret = i2c_smbus_read_word_data(chip->client, reg << 1);
150 151
		*val = ret;
	}
152

153 154
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed reading register\n");
155
		return ret;
156 157 158 159 160
	}

	return 0;
}

161
static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
162
{
163
	struct pca953x_chip *chip;
A
Andreas Schallenberg 已提交
164
	uint reg_val;
165
	int ret, offset = 0;
166

167
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
168

169
	mutex_lock(&chip->i2c_lock);
170
	reg_val = chip->reg_direction | (1u << off);
171 172 173 174 175 176 177 178 179 180

	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);
181
	if (ret)
182
		goto exit;
183 184

	chip->reg_direction = reg_val;
185 186 187 188
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
189 190
}

191
static int pca953x_gpio_direction_output(struct gpio_chip *gc,
192 193
		unsigned off, int val)
{
194
	struct pca953x_chip *chip;
A
Andreas Schallenberg 已提交
195
	uint reg_val;
196
	int ret, offset = 0;
197

198
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
199

200
	mutex_lock(&chip->i2c_lock);
201 202 203 204 205 206
	/* set output level */
	if (val)
		reg_val = chip->reg_output | (1u << off);
	else
		reg_val = chip->reg_output & ~(1u << off);

207 208 209 210 211 212 213 214 215
	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);
216
	if (ret)
217
		goto exit;
218 219 220 221 222

	chip->reg_output = reg_val;

	/* then direction */
	reg_val = chip->reg_direction & ~(1u << off);
223 224 225 226 227 228 229 230 231
	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);
232
	if (ret)
233
		goto exit;
234 235

	chip->reg_direction = reg_val;
236 237 238 239
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
240 241
}

242
static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
243
{
244
	struct pca953x_chip *chip;
A
Andreas Schallenberg 已提交
245
	u32 reg_val;
246
	int ret, offset = 0;
247

248
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
249

250
	mutex_lock(&chip->i2c_lock);
251 252 253 254 255 256 257 258 259
	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);
260
	mutex_unlock(&chip->i2c_lock);
261 262 263 264 265 266 267 268 269 270 271
	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;
}

272
static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
273
{
274
	struct pca953x_chip *chip;
A
Andreas Schallenberg 已提交
275
	u32 reg_val;
276
	int ret, offset = 0;
277

278
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
279

280
	mutex_lock(&chip->i2c_lock);
281 282 283 284 285
	if (val)
		reg_val = chip->reg_output | (1u << off);
	else
		reg_val = chip->reg_output & ~(1u << off);

286 287 288 289 290 291 292 293 294
	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);
295
	if (ret)
296
		goto exit;
297 298

	chip->reg_output = reg_val;
299 300
exit:
	mutex_unlock(&chip->i2c_lock);
301 302
}

303
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
304 305 306 307 308
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

309 310 311 312
	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;
313
	gc->can_sleep = 1;
314 315

	gc->base = chip->gpio_start;
316 317
	gc->ngpio = gpios;
	gc->label = chip->client->name;
D
David Brownell 已提交
318
	gc->dev = &chip->client->dev;
319
	gc->owner = THIS_MODULE;
320
	gc->names = chip->names;
321 322
}

323 324 325 326 327 328 329 330 331
#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;
}

332
static void pca953x_irq_mask(struct irq_data *d)
333
{
334
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
335

336
	chip->irq_mask &= ~(1 << (d->irq - chip->irq_base));
337 338
}

339
static void pca953x_irq_unmask(struct irq_data *d)
340
{
341
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
342

343
	chip->irq_mask |= 1 << (d->irq - chip->irq_base);
344 345
}

346
static void pca953x_irq_bus_lock(struct irq_data *d)
347
{
348
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
349 350 351 352

	mutex_lock(&chip->irq_lock);
}

353
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
354
{
355
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
356 357 358 359 360 361 362 363 364 365 366 367
	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);
	}
368 369 370 371

	mutex_unlock(&chip->irq_lock);
}

372
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
373
{
374 375
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
	uint16_t level = d->irq - chip->irq_base;
376 377 378 379
	uint16_t mask = 1 << level;

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
380
			d->irq, type);
381 382 383 384 385 386 387 388 389 390 391 392 393
		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;

394
	return 0;
395 396 397 398
}

static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
399 400 401 402 403
	.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,
404 405 406 407
};

static uint16_t pca953x_irq_pending(struct pca953x_chip *chip)
{
A
Andreas Schallenberg 已提交
408
	u32 cur_stat;
409 410 411
	uint16_t old_stat;
	uint16_t pending;
	uint16_t trigger;
412 413 414 415 416 417 418 419 420 421 422
	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);
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456
	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);
457
		handle_nested_irq(level + chip->irq_base);
458 459 460 461 462 463 464 465

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

	return IRQ_HANDLED;
}

static int pca953x_irq_setup(struct pca953x_chip *chip,
466 467
			     const struct i2c_device_id *id,
			     int irq_base)
468 469
{
	struct i2c_client *client = chip->client;
470
	int ret, offset = 0;
A
Andreas Schallenberg 已提交
471
	u32 temporary;
472

473
	if (irq_base != -1
474
			&& (id->driver_data & PCA_INT)) {
475 476
		int lvl;

477 478 479 480 481 482 483 484
		switch (chip->chip_type) {
		case PCA953X_TYPE:
			offset = PCA953X_INPUT;
			break;
		case PCA957X_TYPE:
			offset = PCA957X_IN;
			break;
		}
A
Andreas Schallenberg 已提交
485 486
		ret = pca953x_read_reg(chip, offset, &temporary);
		chip->irq_stat = temporary;
487 488 489 490 491 492 493 494 495 496 497
		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);

498
		chip->irq_base = irq_alloc_descs(-1, irq_base, chip->gpio_chip.ngpio, -1);
D
David Jander 已提交
499 500 501
		if (chip->irq_base < 0)
			goto out_failed;

502 503 504
		for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) {
			int irq = lvl + chip->irq_base;

D
David Jander 已提交
505
			irq_clear_status_flags(irq, IRQ_NOREQUEST);
T
Thomas Gleixner 已提交
506
			irq_set_chip_data(irq, chip);
507 508
			irq_set_chip(irq, &pca953x_irq_chip);
			irq_set_nested_thread(irq, true);
509 510 511
#ifdef CONFIG_ARM
			set_irq_flags(irq, IRQF_VALID);
#else
T
Thomas Gleixner 已提交
512
			irq_set_noprobe(irq);
513 514 515 516 517 518
#endif
		}

		ret = request_threaded_irq(client->irq,
					   NULL,
					   pca953x_irq_handler,
519
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
520 521 522 523 524 525 526 527 528 529 530 531 532
					   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:
533
	chip->irq_base = -1;
534 535 536 537 538
	return ret;
}

static void pca953x_irq_teardown(struct pca953x_chip *chip)
{
D
David Jander 已提交
539 540
	if (chip->irq_base != -1) {
		irq_free_descs(chip->irq_base, chip->gpio_chip.ngpio);
541
		free_irq(chip->client->irq, chip);
D
David Jander 已提交
542
	}
543 544 545
}
#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
546 547
			     const struct i2c_device_id *id,
			     int irq_base)
548 549 550
{
	struct i2c_client *client = chip->client;

551
	if (irq_base != -1 && (id->driver_data & PCA_INT))
552 553 554 555 556 557 558 559 560 561
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}

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

562 563 564 565 566 567
/*
 * Handlers for alternative sources of platform_data
 */
#ifdef CONFIG_OF_GPIO
/*
 * Translate OpenFirmware node properties into platform_data
568
 * WARNING: This is DEPRECATED and will be removed eventually!
569
 */
570
static void
571
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, int *invert)
572 573
{
	struct device_node *node;
574 575
	const __be32 *val;
	int size;
576

577
	node = client->dev.of_node;
578
	if (node == NULL)
579
		return;
580

581
	*gpio_base = -1;
582
	val = of_get_property(node, "linux,gpio-base", &size);
583
	WARN(val, "%s: device-tree property 'linux,gpio-base' is deprecated!", __func__);
584
	if (val) {
585 586 587
		if (size != sizeof(*val))
			dev_warn(&client->dev, "%s: wrong linux,gpio-base\n",
				 node->full_name);
588
		else
589
			*gpio_base = be32_to_cpup(val);
590 591 592
	}

	val = of_get_property(node, "polarity", NULL);
593
	WARN(val, "%s: device-tree property 'polarity' is deprecated!", __func__);
594
	if (val)
595
		*invert = *val;
596 597
}
#else
598
static void
599
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, int *invert)
600
{
H
Hartmut Knaack 已提交
601
	*gpio_base = -1;
602 603 604
}
#endif

605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626
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);
out:
	return ret;
}

static int __devinit device_pca957x_init(struct pca953x_chip *chip, int invert)
{
	int ret;
A
Andreas Schallenberg 已提交
627
	u32 val = 0;
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654

	/* 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;
}

655
static int __devinit pca953x_probe(struct i2c_client *client,
656
				   const struct i2c_device_id *id)
657
{
658 659
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
660
	int irq_base=0, invert=0;
661
	int ret;
662

663 664 665 666
	chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
	if (chip == NULL)
		return -ENOMEM;

667
	pdata = client->dev.platform_data;
668 669 670 671 672 673 674
	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);
675 676 677 678 679
#ifdef CONFIG_OF_GPIO
		/* If I2C node has no interrupts property, disable GPIO interrupts */
		if (of_find_property(client->dev.of_node, "interrupts", NULL) == NULL)
			irq_base = -1;
#endif
680
	}
681 682 683

	chip->client = client;

684
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
685

686 687
	mutex_init(&chip->i2c_lock);

688 689 690
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
691
	pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
692

693
	if (chip->chip_type == PCA953X_TYPE)
694
		ret = device_pca953x_init(chip, invert);
695
	else
696 697
		ret = device_pca957x_init(chip, invert);
	if (ret)
698 699
		goto out_failed;

700
	ret = pca953x_irq_setup(chip, id, irq_base);
701 702
	if (ret)
		goto out_failed;
703 704

	ret = gpiochip_add(&chip->gpio_chip);
705
	if (ret)
706
		goto out_failed_irq;
707

708
	if (pdata && pdata->setup) {
709 710 711 712 713 714 715 716 717
		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;

718
out_failed_irq:
719
	pca953x_irq_teardown(chip);
720
out_failed:
721 722 723 724
	kfree(chip);
	return ret;
}

725
static int pca953x_remove(struct i2c_client *client)
726
{
727 728
	struct pca953x_platform_data *pdata = client->dev.platform_data;
	struct pca953x_chip *chip = i2c_get_clientdata(client);
729 730
	int ret = 0;

731
	if (pdata && pdata->teardown) {
732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747
		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;
	}

748
	pca953x_irq_teardown(chip);
749 750 751 752
	kfree(chip);
	return 0;
}

753
static struct i2c_driver pca953x_driver = {
754
	.driver = {
755
		.name	= "pca953x",
756
	},
757 758
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
759
	.id_table	= pca953x_id,
760 761
};

762
static int __init pca953x_init(void)
763
{
764
	return i2c_add_driver(&pca953x_driver);
765
}
766 767 768 769
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
770

771
static void __exit pca953x_exit(void)
772
{
773
	i2c_del_driver(&pca953x_driver);
774
}
775
module_exit(pca953x_exit);
776 777

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