gpio-pca953x.c 18.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/irqdomain.h>
20
#include <linux/i2c.h>
21
#include <linux/i2c/pca953x.h>
22
#include <linux/slab.h>
23 24 25
#ifdef CONFIG_OF_GPIO
#include <linux/of_platform.h>
#endif
26

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

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

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

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

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

80 81
#ifdef CONFIG_GPIO_PCA953X_IRQ
	struct mutex irq_lock;
82 83 84 85
	u32 irq_mask;
	u32 irq_stat;
	u32 irq_trig_raise;
	u32 irq_trig_fall;
86
	int	 irq_base;
87
	struct irq_domain *domain;
88 89
#endif

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

A
Andreas Schallenberg 已提交
96
static int pca953x_write_reg(struct pca953x_chip *chip, int reg, u32 val)
97
{
98
	int ret = 0;
99 100 101

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

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

	return 0;
133 134
}

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

139
	if (chip->gpio_chip.ngpio <= 8) {
140
		ret = i2c_smbus_read_byte_data(chip->client, reg);
141
		*val = ret;
A
Andreas Schallenberg 已提交
142
	}
143 144 145 146 147 148 149 150
	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 {
151
		ret = i2c_smbus_read_word_data(chip->client, reg << 1);
152 153
		*val = ret;
	}
154

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

	return 0;
}

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

169
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
170

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

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

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

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

200
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
201

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

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

	chip->reg_output = reg_val;

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

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

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

250
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
251

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

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

280
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
281

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

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

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

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

	gc = &chip->gpio_chip;

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

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

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

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

338
	chip->irq_mask &= ~(1 << d->hwirq);
339 340
}

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

345
	chip->irq_mask |= 1 << d->hwirq;
346 347
}

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

	mutex_lock(&chip->irq_lock);
}

355
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
356
{
357
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
358 359
	u32 new_irqs;
	u32 level;
360 361 362 363 364 365 366 367 368 369

	/* 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);
	}
370 371 372 373

	mutex_unlock(&chip->irq_lock);
}

374
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
375
{
376
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
377
	u32 mask = 1 << d->hwirq;
378 379 380

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

395
	return 0;
396 397 398 399
}

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

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

	pending = pca953x_irq_pending(chip);

	if (!pending)
		return IRQ_HANDLED;

	do {
		level = __ffs(pending);
458
		handle_nested_irq(irq_find_mapping(chip->domain, level));
459 460 461 462 463 464 465 466

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

	return IRQ_HANDLED;
}

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

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

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

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

503 504 505 506 507 508 509 510 511 512 513
		chip->domain = irq_domain_add_legacy(client->dev.of_node,
						chip->gpio_chip.ngpio,
						chip->irq_base,
						0,
						&irq_domain_simple_ops,
						NULL);
		if (!chip->domain) {
			ret = -ENODEV;
			goto out_irqdesc_free;
		}

514 515 516
		for (lvl = 0; lvl < chip->gpio_chip.ngpio; lvl++) {
			int irq = lvl + chip->irq_base;

D
David Jander 已提交
517
			irq_clear_status_flags(irq, IRQ_NOREQUEST);
T
Thomas Gleixner 已提交
518
			irq_set_chip_data(irq, chip);
519 520
			irq_set_chip(irq, &pca953x_irq_chip);
			irq_set_nested_thread(irq, true);
521 522 523
#ifdef CONFIG_ARM
			set_irq_flags(irq, IRQF_VALID);
#else
T
Thomas Gleixner 已提交
524
			irq_set_noprobe(irq);
525 526 527 528 529 530
#endif
		}

		ret = request_threaded_irq(client->irq,
					   NULL,
					   pca953x_irq_handler,
531
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
532 533 534 535
					   dev_name(&client->dev), chip);
		if (ret) {
			dev_err(&client->dev, "failed to request irq %d\n",
				client->irq);
536
			goto out_irqdesc_free;
537 538 539 540 541 542 543
		}

		chip->gpio_chip.to_irq = pca953x_gpio_to_irq;
	}

	return 0;

544 545
out_irqdesc_free:
	irq_free_descs(chip->irq_base, chip->gpio_chip.ngpio);
546
out_failed:
547
	chip->irq_base = -1;
548 549 550 551 552
	return ret;
}

static void pca953x_irq_teardown(struct pca953x_chip *chip)
{
D
David Jander 已提交
553 554
	if (chip->irq_base != -1) {
		irq_free_descs(chip->irq_base, chip->gpio_chip.ngpio);
555
		free_irq(chip->client->irq, chip);
D
David Jander 已提交
556
	}
557 558 559
}
#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
560 561
			     const struct i2c_device_id *id,
			     int irq_base)
562 563 564
{
	struct i2c_client *client = chip->client;

565
	if (irq_base != -1 && (id->driver_data & PCA_INT))
566 567 568 569 570 571 572 573 574 575
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}

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

576 577 578 579 580 581
/*
 * Handlers for alternative sources of platform_data
 */
#ifdef CONFIG_OF_GPIO
/*
 * Translate OpenFirmware node properties into platform_data
582
 * WARNING: This is DEPRECATED and will be removed eventually!
583
 */
584
static void
585
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, u32 *invert)
586 587
{
	struct device_node *node;
588 589
	const __be32 *val;
	int size;
590

591
	node = client->dev.of_node;
592
	if (node == NULL)
593
		return;
594

595
	*gpio_base = -1;
596
	val = of_get_property(node, "linux,gpio-base", &size);
597
	WARN(val, "%s: device-tree property 'linux,gpio-base' is deprecated!", __func__);
598
	if (val) {
599 600 601
		if (size != sizeof(*val))
			dev_warn(&client->dev, "%s: wrong linux,gpio-base\n",
				 node->full_name);
602
		else
603
			*gpio_base = be32_to_cpup(val);
604 605 606
	}

	val = of_get_property(node, "polarity", NULL);
607
	WARN(val, "%s: device-tree property 'polarity' is deprecated!", __func__);
608
	if (val)
609
		*invert = *val;
610 611
}
#else
612
static void
613
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, u32 *invert)
614
{
H
Hartmut Knaack 已提交
615
	*gpio_base = -1;
616 617 618
}
#endif

B
Bill Pemberton 已提交
619
static int device_pca953x_init(struct pca953x_chip *chip, u32 invert)
620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637
{
	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;
}

B
Bill Pemberton 已提交
638
static int device_pca957x_init(struct pca953x_chip *chip, u32 invert)
639 640
{
	int ret;
A
Andreas Schallenberg 已提交
641
	u32 val = 0;
642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668

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

B
Bill Pemberton 已提交
669
static int pca953x_probe(struct i2c_client *client,
670
				   const struct i2c_device_id *id)
671
{
672 673
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
674
	int irq_base = 0;
675
	int ret;
676
	u32 invert = 0;
677

678 679 680 681
	chip = kzalloc(sizeof(struct pca953x_chip), GFP_KERNEL);
	if (chip == NULL)
		return -ENOMEM;

682
	pdata = client->dev.platform_data;
683 684 685 686 687 688 689
	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);
690 691 692 693 694
#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
695
	}
696 697 698

	chip->client = client;

699
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
700

701 702
	mutex_init(&chip->i2c_lock);

703 704 705
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
706
	pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
707

708
	if (chip->chip_type == PCA953X_TYPE)
709
		ret = device_pca953x_init(chip, invert);
710
	else
711 712
		ret = device_pca957x_init(chip, invert);
	if (ret)
713 714
		goto out_failed;

715
	ret = pca953x_irq_setup(chip, id, irq_base);
716 717
	if (ret)
		goto out_failed;
718 719

	ret = gpiochip_add(&chip->gpio_chip);
720
	if (ret)
721
		goto out_failed_irq;
722

723
	if (pdata && pdata->setup) {
724 725 726 727 728 729 730 731 732
		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;

733
out_failed_irq:
734
	pca953x_irq_teardown(chip);
735
out_failed:
736 737 738 739
	kfree(chip);
	return ret;
}

740
static int pca953x_remove(struct i2c_client *client)
741
{
742 743
	struct pca953x_platform_data *pdata = client->dev.platform_data;
	struct pca953x_chip *chip = i2c_get_clientdata(client);
744 745
	int ret = 0;

746
	if (pdata && pdata->teardown) {
747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
		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;
	}

763
	pca953x_irq_teardown(chip);
764 765 766 767
	kfree(chip);
	return 0;
}

768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795
static const struct of_device_id pca953x_dt_ids[] = {
	{ .compatible = "nxp,pca9534", },
	{ .compatible = "nxp,pca9535", },
	{ .compatible = "nxp,pca9536", },
	{ .compatible = "nxp,pca9537", },
	{ .compatible = "nxp,pca9538", },
	{ .compatible = "nxp,pca9539", },
	{ .compatible = "nxp,pca9554", },
	{ .compatible = "nxp,pca9555", },
	{ .compatible = "nxp,pca9556", },
	{ .compatible = "nxp,pca9557", },
	{ .compatible = "nxp,pca9574", },
	{ .compatible = "nxp,pca9575", },

	{ .compatible = "maxim,max7310", },
	{ .compatible = "maxim,max7312", },
	{ .compatible = "maxim,max7313", },
	{ .compatible = "maxim,max7315", },

	{ .compatible = "ti,pca6107", },
	{ .compatible = "ti,tca6408", },
	{ .compatible = "ti,tca6416", },
	{ .compatible = "ti,tca6424", },
	{ }
};

MODULE_DEVICE_TABLE(of, pca953x_dt_ids);

796
static struct i2c_driver pca953x_driver = {
797
	.driver = {
798
		.name	= "pca953x",
799
		.of_match_table = pca953x_dt_ids,
800
	},
801 802
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
803
	.id_table	= pca953x_id,
804 805
};

806
static int __init pca953x_init(void)
807
{
808
	return i2c_add_driver(&pca953x_driver);
809
}
810 811 812 813
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
814

815
static void __exit pca953x_exit(void)
816
{
817
	i2c_del_driver(&pca953x_driver);
818
}
819
module_exit(pca953x_exit);
820 821

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