gpio-pca953x.c 19.5 KB
Newer Older
1
/*
2
 *  PCA953x 4/8/16/24/40 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
#include <linux/interrupt.h>
18
#include <linux/i2c.h>
19
#include <linux/platform_data/pca953x.h>
20
#include <linux/slab.h>
21 22 23
#ifdef CONFIG_OF_GPIO
#include <linux/of_platform.h>
#endif
24

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

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

32 33 34 35 36 37 38 39 40 41 42 43 44
#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
	{ "pca9505", 40 | PCA953X_TYPE | PCA_INT, },
48 49 50 51 52 53 54 55 56 57 58 59
	{ "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, },
A
Aaron Sierra 已提交
60
	{ "pca9698", 40 | PCA953X_TYPE, },
61 62 63 64 65 66 67 68

	{ "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, },
A
Aaron Sierra 已提交
70
	{ "xra1202", 8  | PCA953X_TYPE },
71
	{ }
72
};
73
MODULE_DEVICE_TABLE(i2c, pca953x_id);
74

75 76 77 78 79
#define MAX_BANK 5
#define BANK_SZ 8

#define NBANK(chip) (chip->gpio_chip.ngpio / BANK_SZ)

80
struct pca953x_chip {
81
	unsigned gpio_start;
82 83
	u8 reg_output[MAX_BANK];
	u8 reg_direction[MAX_BANK];
84
	struct mutex i2c_lock;
85

86 87
#ifdef CONFIG_GPIO_PCA953X_IRQ
	struct mutex irq_lock;
88 89 90 91
	u8 irq_mask[MAX_BANK];
	u8 irq_stat[MAX_BANK];
	u8 irq_trig_raise[MAX_BANK];
	u8 irq_trig_fall[MAX_BANK];
92 93
#endif

94 95
	struct i2c_client *client;
	struct gpio_chip gpio_chip;
96
	const char *const *names;
97
	int	chip_type;
98 99
};

100 101 102 103 104
static inline struct pca953x_chip *to_pca(struct gpio_chip *gc)
{
	return container_of(gc, struct pca953x_chip, gpio_chip);
}

105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
static int pca953x_read_single(struct pca953x_chip *chip, int reg, u32 *val,
				int off)
{
	int ret;
	int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);
	int offset = off / BANK_SZ;

	ret = i2c_smbus_read_byte_data(chip->client,
				(reg << bank_shift) + offset);
	*val = ret;

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

	return 0;
}

static int pca953x_write_single(struct pca953x_chip *chip, int reg, u32 val,
				int off)
{
	int ret = 0;
	int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);
	int offset = off / BANK_SZ;

	ret = i2c_smbus_write_byte_data(chip->client,
					(reg << bank_shift) + offset, val);

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

	return 0;
}

static int pca953x_write_regs(struct pca953x_chip *chip, int reg, u8 *val)
143
{
144
	int ret = 0;
145 146

	if (chip->gpio_chip.ngpio <= 8)
147 148 149
		ret = i2c_smbus_write_byte_data(chip->client, reg, *val);
	else if (chip->gpio_chip.ngpio >= 24) {
		int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);
150
		ret = i2c_smbus_write_i2c_block_data(chip->client,
151 152
					(reg << bank_shift) | REG_ADDR_AI,
					NBANK(chip), val);
153
	} else {
154 155 156
		switch (chip->chip_type) {
		case PCA953X_TYPE:
			ret = i2c_smbus_write_word_data(chip->client,
157
							reg << 1, (u16) *val);
158 159 160
			break;
		case PCA957X_TYPE:
			ret = i2c_smbus_write_byte_data(chip->client, reg << 1,
161
							val[0]);
162 163 164 165
			if (ret < 0)
				break;
			ret = i2c_smbus_write_byte_data(chip->client,
							(reg << 1) + 1,
166
							val[1]);
167 168 169
			break;
		}
	}
170 171 172

	if (ret < 0) {
		dev_err(&chip->client->dev, "failed writing register\n");
173
		return ret;
174 175 176
	}

	return 0;
177 178
}

179
static int pca953x_read_regs(struct pca953x_chip *chip, int reg, u8 *val)
180 181 182
{
	int ret;

183
	if (chip->gpio_chip.ngpio <= 8) {
184
		ret = i2c_smbus_read_byte_data(chip->client, reg);
185
		*val = ret;
186 187 188
	} else if (chip->gpio_chip.ngpio >= 24) {
		int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);

189
		ret = i2c_smbus_read_i2c_block_data(chip->client,
190 191
					(reg << bank_shift) | REG_ADDR_AI,
					NBANK(chip), val);
192
	} else {
193
		ret = i2c_smbus_read_word_data(chip->client, reg << 1);
194 195
		val[0] = (u16)ret & 0xFF;
		val[1] = (u16)ret >> 8;
196
	}
197 198
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed reading register\n");
199
		return ret;
200 201 202 203 204
	}

	return 0;
}

205
static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
206
{
207
	struct pca953x_chip *chip = to_pca(gc);
208
	u8 reg_val;
209
	int ret, offset = 0;
210

211
	mutex_lock(&chip->i2c_lock);
212
	reg_val = chip->reg_direction[off / BANK_SZ] | (1u << (off % BANK_SZ));
213 214 215 216 217 218 219 220 221

	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_DIRECTION;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_CFG;
		break;
	}
222
	ret = pca953x_write_single(chip, offset, reg_val, off);
223
	if (ret)
224
		goto exit;
225

226
	chip->reg_direction[off / BANK_SZ] = reg_val;
227 228 229 230
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
231 232
}

233
static int pca953x_gpio_direction_output(struct gpio_chip *gc,
234 235
		unsigned off, int val)
{
236
	struct pca953x_chip *chip = to_pca(gc);
237
	u8 reg_val;
238
	int ret, offset = 0;
239

240
	mutex_lock(&chip->i2c_lock);
241 242
	/* set output level */
	if (val)
243 244
		reg_val = chip->reg_output[off / BANK_SZ]
			| (1u << (off % BANK_SZ));
245
	else
246 247
		reg_val = chip->reg_output[off / BANK_SZ]
			& ~(1u << (off % BANK_SZ));
248

249 250 251 252 253 254 255 256
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_OUTPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_OUT;
		break;
	}
257
	ret = pca953x_write_single(chip, offset, reg_val, off);
258
	if (ret)
259
		goto exit;
260

261
	chip->reg_output[off / BANK_SZ] = reg_val;
262 263

	/* then direction */
264
	reg_val = chip->reg_direction[off / BANK_SZ] & ~(1u << (off % BANK_SZ));
265 266 267 268 269 270 271 272
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_DIRECTION;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_CFG;
		break;
	}
273
	ret = pca953x_write_single(chip, offset, reg_val, off);
274
	if (ret)
275
		goto exit;
276

277
	chip->reg_direction[off / BANK_SZ] = reg_val;
278 279 280 281
	ret = 0;
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
282 283
}

284
static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
285
{
286
	struct pca953x_chip *chip = to_pca(gc);
A
Andreas Schallenberg 已提交
287
	u32 reg_val;
288
	int ret, offset = 0;
289

290
	mutex_lock(&chip->i2c_lock);
291 292 293 294 295 296 297 298
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_INPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_IN;
		break;
	}
299
	ret = pca953x_read_single(chip, offset, &reg_val, off);
300
	mutex_unlock(&chip->i2c_lock);
301 302 303 304 305 306 307 308
	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;
	}

309
	return (reg_val & (1u << (off % BANK_SZ))) ? 1 : 0;
310 311
}

312
static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
313
{
314
	struct pca953x_chip *chip = to_pca(gc);
315
	u8 reg_val;
316
	int ret, offset = 0;
317

318
	mutex_lock(&chip->i2c_lock);
319
	if (val)
320 321
		reg_val = chip->reg_output[off / BANK_SZ]
			| (1u << (off % BANK_SZ));
322
	else
323 324
		reg_val = chip->reg_output[off / BANK_SZ]
			& ~(1u << (off % BANK_SZ));
325

326 327 328 329 330 331 332 333
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_OUTPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_OUT;
		break;
	}
334
	ret = pca953x_write_single(chip, offset, reg_val, off);
335
	if (ret)
336
		goto exit;
337

338
	chip->reg_output[off / BANK_SZ] = reg_val;
339 340
exit:
	mutex_unlock(&chip->i2c_lock);
341 342
}

343
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
344 345 346 347 348
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

349 350 351 352
	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;
353
	gc->can_sleep = true;
354 355

	gc->base = chip->gpio_start;
356 357
	gc->ngpio = gpios;
	gc->label = chip->client->name;
D
David Brownell 已提交
358
	gc->dev = &chip->client->dev;
359
	gc->owner = THIS_MODULE;
360
	gc->names = chip->names;
361 362
}

363
#ifdef CONFIG_GPIO_PCA953X_IRQ
364
static void pca953x_irq_mask(struct irq_data *d)
365
{
366 367
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct pca953x_chip *chip = to_pca(gc);
368

369
	chip->irq_mask[d->hwirq / BANK_SZ] &= ~(1 << (d->hwirq % BANK_SZ));
370 371
}

372
static void pca953x_irq_unmask(struct irq_data *d)
373
{
374 375
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct pca953x_chip *chip = to_pca(gc);
376

377
	chip->irq_mask[d->hwirq / BANK_SZ] |= 1 << (d->hwirq % BANK_SZ);
378 379
}

380
static void pca953x_irq_bus_lock(struct irq_data *d)
381
{
382 383
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct pca953x_chip *chip = to_pca(gc);
384 385 386 387

	mutex_lock(&chip->irq_lock);
}

388
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
389
{
390 391
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct pca953x_chip *chip = to_pca(gc);
392 393
	u8 new_irqs;
	int level, i;
394 395

	/* Look for any newly setup interrupt */
396 397 398 399 400 401 402 403 404 405
	for (i = 0; i < NBANK(chip); i++) {
		new_irqs = chip->irq_trig_fall[i] | chip->irq_trig_raise[i];
		new_irqs &= ~chip->reg_direction[i];

		while (new_irqs) {
			level = __ffs(new_irqs);
			pca953x_gpio_direction_input(&chip->gpio_chip,
							level + (BANK_SZ * i));
			new_irqs &= ~(1 << level);
		}
406
	}
407 408 409 410

	mutex_unlock(&chip->irq_lock);
}

411
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
412
{
413 414
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
	struct pca953x_chip *chip = to_pca(gc);
415 416
	int bank_nb = d->hwirq / BANK_SZ;
	u8 mask = 1 << (d->hwirq % BANK_SZ);
417 418 419

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
420
			d->irq, type);
421 422 423 424
		return -EINVAL;
	}

	if (type & IRQ_TYPE_EDGE_FALLING)
425
		chip->irq_trig_fall[bank_nb] |= mask;
426
	else
427
		chip->irq_trig_fall[bank_nb] &= ~mask;
428 429

	if (type & IRQ_TYPE_EDGE_RISING)
430
		chip->irq_trig_raise[bank_nb] |= mask;
431
	else
432
		chip->irq_trig_raise[bank_nb] &= ~mask;
433

434
	return 0;
435 436 437 438
}

static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
439 440 441 442 443
	.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,
444 445
};

446
static u8 pca953x_irq_pending(struct pca953x_chip *chip, u8 *pending)
447
{
448 449 450 451 452
	u8 cur_stat[MAX_BANK];
	u8 old_stat[MAX_BANK];
	u8 pendings = 0;
	u8 trigger[MAX_BANK], triggers = 0;
	int ret, i, offset = 0;
453 454 455 456 457 458 459 460 461

	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_INPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_IN;
		break;
	}
462
	ret = pca953x_read_regs(chip, offset, cur_stat);
463 464 465 466
	if (ret)
		return 0;

	/* Remove output pins from the equation */
467 468
	for (i = 0; i < NBANK(chip); i++)
		cur_stat[i] &= chip->reg_direction[i];
469

470
	memcpy(old_stat, chip->irq_stat, NBANK(chip));
471

472 473 474 475 476 477
	for (i = 0; i < NBANK(chip); i++) {
		trigger[i] = (cur_stat[i] ^ old_stat[i]) & chip->irq_mask[i];
		triggers += trigger[i];
	}

	if (!triggers)
478 479
		return 0;

480
	memcpy(chip->irq_stat, cur_stat, NBANK(chip));
481

482 483 484 485 486 487
	for (i = 0; i < NBANK(chip); i++) {
		pending[i] = (old_stat[i] & chip->irq_trig_fall[i]) |
			(cur_stat[i] & chip->irq_trig_raise[i]);
		pending[i] &= trigger[i];
		pendings += pending[i];
	}
488

489
	return pendings;
490 491 492 493 494
}

static irqreturn_t pca953x_irq_handler(int irq, void *devid)
{
	struct pca953x_chip *chip = devid;
495 496
	u8 pending[MAX_BANK];
	u8 level;
497
	unsigned nhandled = 0;
498
	int i;
499

500
	if (!pca953x_irq_pending(chip, pending))
501
		return IRQ_NONE;
502

503 504 505
	for (i = 0; i < NBANK(chip); i++) {
		while (pending[i]) {
			level = __ffs(pending[i]);
506
			handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain,
507 508
							level + (BANK_SZ * i)));
			pending[i] &= ~(1 << level);
509
			nhandled++;
510 511
		}
	}
512

513
	return (nhandled > 0) ? IRQ_HANDLED : IRQ_NONE;
514 515 516
}

static int pca953x_irq_setup(struct pca953x_chip *chip,
517 518
			     const struct i2c_device_id *id,
			     int irq_base)
519 520
{
	struct i2c_client *client = chip->client;
521
	int ret, i, offset = 0;
522

523
	if (irq_base != -1
524
			&& (id->driver_data & PCA_INT)) {
525

526 527 528 529 530 531 532 533
		switch (chip->chip_type) {
		case PCA953X_TYPE:
			offset = PCA953X_INPUT;
			break;
		case PCA957X_TYPE:
			offset = PCA957X_IN;
			break;
		}
534
		ret = pca953x_read_regs(chip, offset, chip->irq_stat);
535
		if (ret)
536
			return ret;
537 538 539 540 541 542

		/*
		 * There is no way to know which GPIO line generated the
		 * interrupt.  We have to rely on the previous read for
		 * this purpose.
		 */
543 544
		for (i = 0; i < NBANK(chip); i++)
			chip->irq_stat[i] &= chip->reg_direction[i];
545 546
		mutex_init(&chip->irq_lock);

547 548
		ret = devm_request_threaded_irq(&client->dev,
					client->irq,
549 550
					   NULL,
					   pca953x_irq_handler,
551 552
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT |
						   IRQF_SHARED,
553 554 555 556
					   dev_name(&client->dev), chip);
		if (ret) {
			dev_err(&client->dev, "failed to request irq %d\n",
				client->irq);
557
			return ret;
558 559
		}

560 561 562 563 564 565 566 567 568 569
		ret =  gpiochip_irqchip_add(&chip->gpio_chip,
					    &pca953x_irq_chip,
					    irq_base,
					    handle_simple_irq,
					    IRQ_TYPE_NONE);
		if (ret) {
			dev_err(&client->dev,
				"could not connect irqchip to gpiochip\n");
			return ret;
		}
570 571 572 573 574 575 576
	}

	return 0;
}

#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
577 578
			     const struct i2c_device_id *id,
			     int irq_base)
579 580 581
{
	struct i2c_client *client = chip->client;

582
	if (irq_base != -1 && (id->driver_data & PCA_INT))
583 584 585 586 587 588
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}
#endif

589 590 591 592 593 594
/*
 * Handlers for alternative sources of platform_data
 */
#ifdef CONFIG_OF_GPIO
/*
 * Translate OpenFirmware node properties into platform_data
595
 * WARNING: This is DEPRECATED and will be removed eventually!
596
 */
597
static void
598
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, u32 *invert)
599 600
{
	struct device_node *node;
601 602
	const __be32 *val;
	int size;
603

604 605
	*gpio_base = -1;

606
	node = client->dev.of_node;
607
	if (node == NULL)
608
		return;
609

610
	val = of_get_property(node, "linux,gpio-base", &size);
611
	WARN(val, "%s: device-tree property 'linux,gpio-base' is deprecated!", __func__);
612
	if (val) {
613 614 615
		if (size != sizeof(*val))
			dev_warn(&client->dev, "%s: wrong linux,gpio-base\n",
				 node->full_name);
616
		else
617
			*gpio_base = be32_to_cpup(val);
618 619 620
	}

	val = of_get_property(node, "polarity", NULL);
621
	WARN(val, "%s: device-tree property 'polarity' is deprecated!", __func__);
622
	if (val)
623
		*invert = *val;
624 625
}
#else
626
static void
627
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, u32 *invert)
628
{
H
Hartmut Knaack 已提交
629
	*gpio_base = -1;
630 631 632
}
#endif

B
Bill Pemberton 已提交
633
static int device_pca953x_init(struct pca953x_chip *chip, u32 invert)
634 635
{
	int ret;
636
	u8 val[MAX_BANK];
637

638
	ret = pca953x_read_regs(chip, PCA953X_OUTPUT, chip->reg_output);
639 640 641
	if (ret)
		goto out;

642 643
	ret = pca953x_read_regs(chip, PCA953X_DIRECTION,
			       chip->reg_direction);
644 645 646 647
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
648 649 650 651 652 653
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));

	ret = pca953x_write_regs(chip, PCA953X_INVERT, val);
654 655 656 657
out:
	return ret;
}

B
Bill Pemberton 已提交
658
static int device_pca957x_init(struct pca953x_chip *chip, u32 invert)
659 660
{
	int ret;
661
	u8 val[MAX_BANK];
662

663
	ret = pca953x_read_regs(chip, PCA957X_OUT, chip->reg_output);
664 665
	if (ret)
		goto out;
666
	ret = pca953x_read_regs(chip, PCA957X_CFG, chip->reg_direction);
667 668 669 670
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
671 672 673 674 675
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));
	pca953x_write_regs(chip, PCA957X_INVRT, val);
676 677

	/* To enable register 6, 7 to controll pull up and pull down */
678 679
	memset(val, 0x02, NBANK(chip));
	pca953x_write_regs(chip, PCA957X_BKEN, val);
680 681 682 683 684 685

	return 0;
out:
	return ret;
}

B
Bill Pemberton 已提交
686
static int pca953x_probe(struct i2c_client *client,
687
				   const struct i2c_device_id *id)
688
{
689 690
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
691
	int irq_base = 0;
692
	int ret;
693
	u32 invert = 0;
694

695 696
	chip = devm_kzalloc(&client->dev,
			sizeof(struct pca953x_chip), GFP_KERNEL);
697 698 699
	if (chip == NULL)
		return -ENOMEM;

J
Jingoo Han 已提交
700
	pdata = dev_get_platdata(&client->dev);
701 702 703 704 705 706 707
	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);
708 709 710 711 712
#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
713
	}
714 715 716

	chip->client = client;

717
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
718

719 720
	mutex_init(&chip->i2c_lock);

721 722 723
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
724
	pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
725

726
	if (chip->chip_type == PCA953X_TYPE)
727
		ret = device_pca953x_init(chip, invert);
728
	else
729 730
		ret = device_pca957x_init(chip, invert);
	if (ret)
731
		return ret;
732

733
	ret = gpiochip_add(&chip->gpio_chip);
734
	if (ret)
735
		return ret;
736

737
	ret = pca953x_irq_setup(chip, id, irq_base);
738
	if (ret)
739
		return ret;
740

741
	if (pdata && pdata->setup) {
742 743 744 745 746 747 748 749 750 751
		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;
}

752
static int pca953x_remove(struct i2c_client *client)
753
{
J
Jingoo Han 已提交
754
	struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev);
755
	struct pca953x_chip *chip = i2c_get_clientdata(client);
756 757
	int ret = 0;

758
	if (pdata && pdata->teardown) {
759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777
		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;
	}

	return 0;
}

778
static const struct of_device_id pca953x_dt_ids[] = {
779
	{ .compatible = "nxp,pca9505", },
780 781 782 783 784 785 786 787 788 789 790 791
	{ .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", },
A
Aaron Sierra 已提交
792
	{ .compatible = "nxp,pca9698", },
793 794 795 796 797 798 799 800 801 802

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

	{ .compatible = "ti,pca6107", },
	{ .compatible = "ti,tca6408", },
	{ .compatible = "ti,tca6416", },
	{ .compatible = "ti,tca6424", },
A
Aaron Sierra 已提交
803 804

	{ .compatible = "exar,xra1202", },
805 806 807 808 809
	{ }
};

MODULE_DEVICE_TABLE(of, pca953x_dt_ids);

810
static struct i2c_driver pca953x_driver = {
811
	.driver = {
812
		.name	= "pca953x",
813
		.of_match_table = pca953x_dt_ids,
814
	},
815 816
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
817
	.id_table	= pca953x_id,
818 819
};

820
static int __init pca953x_init(void)
821
{
822
	return i2c_add_driver(&pca953x_driver);
823
}
824 825 826 827
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
828

829
static void __exit pca953x_exit(void)
830
{
831
	i2c_del_driver(&pca953x_driver);
832
}
833
module_exit(pca953x_exit);
834 835

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