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 101 102 103 104 105 106 107
	else if (chip->gpio_chip.ngpio == 24) {
		ret = i2c_smbus_write_word_data(chip->client,
						(reg << 2) | REG_ADDR_AI,
						val & 0xffff);
		ret = i2c_smbus_write_byte_data(chip->client,
						(reg << 2) + 2,
						(val & 0xff0000) >> 16);
	}
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
	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;
		}
	}
125 126 127

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

	return 0;
132 133
}

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

138 139
	if (chip->gpio_chip.ngpio <= 8)
		ret = i2c_smbus_read_byte_data(chip->client, reg);
A
Andreas Schallenberg 已提交
140 141 142 143 144
	else if (chip->gpio_chip.ngpio == 24) {
		ret =  i2c_smbus_read_word_data(chip->client, reg << 2);
		ret |= (i2c_smbus_read_byte_data(chip->client,
						 (reg << 2) + 2)<<16);
	}
145 146 147
	else
		ret = i2c_smbus_read_word_data(chip->client, reg << 1);

148 149
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed reading register\n");
150
		return ret;
151 152
	}

A
Andreas Schallenberg 已提交
153
	*val = (u32)ret;
154 155 156
	return 0;
}

157
static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
158
{
159
	struct pca953x_chip *chip;
A
Andreas Schallenberg 已提交
160
	uint reg_val;
161
	int ret, offset = 0;
162

163
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
164

165
	mutex_lock(&chip->i2c_lock);
166
	reg_val = chip->reg_direction | (1u << off);
167 168 169 170 171 172 173 174 175 176

	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);
177
	if (ret)
178
		goto exit;
179 180

	chip->reg_direction = reg_val;
181 182 183 184
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
185 186
}

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

194
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
195

196
	mutex_lock(&chip->i2c_lock);
197 198 199 200 201 202
	/* set output level */
	if (val)
		reg_val = chip->reg_output | (1u << off);
	else
		reg_val = chip->reg_output & ~(1u << off);

203 204 205 206 207 208 209 210 211
	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);
212
	if (ret)
213
		goto exit;
214 215 216 217 218

	chip->reg_output = reg_val;

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

	chip->reg_direction = reg_val;
232 233 234 235
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
236 237
}

238
static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
239
{
240
	struct pca953x_chip *chip;
A
Andreas Schallenberg 已提交
241
	u32 reg_val;
242
	int ret, offset = 0;
243

244
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
245

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

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

274
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
275

276
	mutex_lock(&chip->i2c_lock);
277 278 279 280 281
	if (val)
		reg_val = chip->reg_output | (1u << off);
	else
		reg_val = chip->reg_output & ~(1u << off);

282 283 284 285 286 287 288 289 290
	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);
291
	if (ret)
292
		goto exit;
293 294

	chip->reg_output = reg_val;
295 296
exit:
	mutex_unlock(&chip->i2c_lock);
297 298
}

299
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
300 301 302 303 304
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

305 306 307 308
	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;
309
	gc->can_sleep = 1;
310 311

	gc->base = chip->gpio_start;
312 313
	gc->ngpio = gpios;
	gc->label = chip->client->name;
D
David Brownell 已提交
314
	gc->dev = &chip->client->dev;
315
	gc->owner = THIS_MODULE;
316
	gc->names = chip->names;
317 318
}

319 320 321 322 323 324 325 326 327
#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;
}

328
static void pca953x_irq_mask(struct irq_data *d)
329
{
330
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
331

332
	chip->irq_mask &= ~(1 << (d->irq - chip->irq_base));
333 334
}

335
static void pca953x_irq_unmask(struct irq_data *d)
336
{
337
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
338

339
	chip->irq_mask |= 1 << (d->irq - chip->irq_base);
340 341
}

342
static void pca953x_irq_bus_lock(struct irq_data *d)
343
{
344
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
345 346 347 348

	mutex_lock(&chip->irq_lock);
}

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

	mutex_unlock(&chip->irq_lock);
}

368
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
369
{
370 371
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
	uint16_t level = d->irq - chip->irq_base;
372 373 374 375
	uint16_t mask = 1 << level;

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

390
	return 0;
391 392 393 394
}

static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
395 396 397 398 399
	.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,
400 401 402 403
};

static uint16_t pca953x_irq_pending(struct pca953x_chip *chip)
{
A
Andreas Schallenberg 已提交
404
	u32 cur_stat;
405 406 407
	uint16_t old_stat;
	uint16_t pending;
	uint16_t trigger;
408 409 410 411 412 413 414 415 416 417 418
	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);
419 420 421 422 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
	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);
453
		handle_nested_irq(level + chip->irq_base);
454 455 456 457 458 459 460 461

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

	return IRQ_HANDLED;
}

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

469
	if (irq_base != -1
470
			&& (id->driver_data & PCA_INT)) {
471 472
		int lvl;

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

494
		chip->irq_base = irq_alloc_descs(-1, irq_base, chip->gpio_chip.ngpio, -1);
D
David Jander 已提交
495 496 497
		if (chip->irq_base < 0)
			goto out_failed;

498 499 500
		for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) {
			int irq = lvl + chip->irq_base;

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

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

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

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

	return 0;
}

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

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

573
	node = client->dev.of_node;
574
	if (node == NULL)
575
		return;
576

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

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

601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622
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 已提交
623
	u32 val = 0;
624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650

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

651
static int __devinit pca953x_probe(struct i2c_client *client,
652
				   const struct i2c_device_id *id)
653
{
654 655
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
656
	int irq_base=0, invert=0;
657
	int ret;
658

659 660 661 662
	chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
	if (chip == NULL)
		return -ENOMEM;

663
	pdata = client->dev.platform_data;
664 665 666 667 668 669 670
	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);
671 672 673 674 675
#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
676
	}
677 678 679

	chip->client = client;

680
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
681

682 683
	mutex_init(&chip->i2c_lock);

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

689
	if (chip->chip_type == PCA953X_TYPE)
690
		ret = device_pca953x_init(chip, invert);
691
	else
692 693
		ret = device_pca957x_init(chip, invert);
	if (ret)
694 695
		goto out_failed;

696
	ret = pca953x_irq_setup(chip, id, irq_base);
697 698
	if (ret)
		goto out_failed;
699 700

	ret = gpiochip_add(&chip->gpio_chip);
701
	if (ret)
702
		goto out_failed_irq;
703

704
	if (pdata && pdata->setup) {
705 706 707 708 709 710 711 712 713
		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;

714
out_failed_irq:
715
	pca953x_irq_teardown(chip);
716
out_failed:
717 718 719 720
	kfree(chip);
	return ret;
}

721
static int pca953x_remove(struct i2c_client *client)
722
{
723 724
	struct pca953x_platform_data *pdata = client->dev.platform_data;
	struct pca953x_chip *chip = i2c_get_clientdata(client);
725 726
	int ret = 0;

727
	if (pdata && pdata->teardown) {
728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743
		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;
	}

744
	pca953x_irq_teardown(chip);
745 746 747 748
	kfree(chip);
	return 0;
}

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

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

767
static void __exit pca953x_exit(void)
768
{
769
	i2c_del_driver(&pca953x_driver);
770
}
771
module_exit(pca953x_exit);
772 773

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