gpio-pca953x.c 20.0 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 18
#include <linux/interrupt.h>
#include <linux/irq.h>
19
#include <linux/irqdomain.h>
20
#include <linux/i2c.h>
21
#include <linux/platform_data/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
	{ "pca9505", 40 | PCA953X_TYPE | PCA_INT, },
50 51 52 53 54 55 56 57 58 59 60 61
	{ "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 已提交
62
	{ "pca9698", 40 | PCA953X_TYPE, },
63 64 65 66 67 68 69 70

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

77 78 79 80 81
#define MAX_BANK 5
#define BANK_SZ 8

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

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

88 89
#ifdef CONFIG_GPIO_PCA953X_IRQ
	struct mutex irq_lock;
90 91 92 93
	u8 irq_mask[MAX_BANK];
	u8 irq_stat[MAX_BANK];
	u8 irq_trig_raise[MAX_BANK];
	u8 irq_trig_fall[MAX_BANK];
94
	struct irq_domain *domain;
95 96
#endif

97 98
	struct i2c_client *client;
	struct gpio_chip gpio_chip;
99
	const char *const *names;
100
	int	chip_type;
101 102
};

103 104 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
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)
141
{
142
	int ret = 0;
143 144

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

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

	return 0;
175 176
}

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

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

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

	return 0;
}

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

209
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
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;
237
	u8 reg_val;
238
	int ret, offset = 0;
239

240
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
241

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

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

263
	chip->reg_output[off / BANK_SZ] = reg_val;
264 265

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

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

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

292
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
293

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

313
	return (reg_val & (1u << (off % BANK_SZ))) ? 1 : 0;
314 315
}

316
static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
317
{
318
	struct pca953x_chip *chip;
319
	u8 reg_val;
320
	int ret, offset = 0;
321

322
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
323

324
	mutex_lock(&chip->i2c_lock);
325
	if (val)
326 327
		reg_val = chip->reg_output[off / BANK_SZ]
			| (1u << (off % BANK_SZ));
328
	else
329 330
		reg_val = chip->reg_output[off / BANK_SZ]
			& ~(1u << (off % BANK_SZ));
331

332 333 334 335 336 337 338 339
	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_OUTPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_OUT;
		break;
	}
340
	ret = pca953x_write_single(chip, offset, reg_val, off);
341
	if (ret)
342
		goto exit;
343

344
	chip->reg_output[off / BANK_SZ] = reg_val;
345 346
exit:
	mutex_unlock(&chip->i2c_lock);
347 348
}

349
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
350 351 352 353 354
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

355 356 357 358
	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;
359
	gc->can_sleep = true;
360 361

	gc->base = chip->gpio_start;
362 363
	gc->ngpio = gpios;
	gc->label = chip->client->name;
D
David Brownell 已提交
364
	gc->dev = &chip->client->dev;
365
	gc->owner = THIS_MODULE;
366
	gc->names = chip->names;
367 368
}

369 370 371 372 373 374
#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);
375
	return irq_create_mapping(chip->domain, off);
376 377
}

378
static void pca953x_irq_mask(struct irq_data *d)
379
{
380
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
381

382
	chip->irq_mask[d->hwirq / BANK_SZ] &= ~(1 << (d->hwirq % BANK_SZ));
383 384
}

385
static void pca953x_irq_unmask(struct irq_data *d)
386
{
387
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
388

389
	chip->irq_mask[d->hwirq / BANK_SZ] |= 1 << (d->hwirq % BANK_SZ);
390 391
}

392
static void pca953x_irq_bus_lock(struct irq_data *d)
393
{
394
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
395 396 397 398

	mutex_lock(&chip->irq_lock);
}

399
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
400
{
401
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
402 403
	u8 new_irqs;
	int level, i;
404 405

	/* Look for any newly setup interrupt */
406 407 408 409 410 411 412 413 414 415
	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);
		}
416
	}
417 418 419 420

	mutex_unlock(&chip->irq_lock);
}

421
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
422
{
423
	struct pca953x_chip *chip = irq_data_get_irq_chip_data(d);
424 425
	int bank_nb = d->hwirq / BANK_SZ;
	u8 mask = 1 << (d->hwirq % BANK_SZ);
426 427 428

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
429
			d->irq, type);
430 431 432 433
		return -EINVAL;
	}

	if (type & IRQ_TYPE_EDGE_FALLING)
434
		chip->irq_trig_fall[bank_nb] |= mask;
435
	else
436
		chip->irq_trig_fall[bank_nb] &= ~mask;
437 438

	if (type & IRQ_TYPE_EDGE_RISING)
439
		chip->irq_trig_raise[bank_nb] |= mask;
440
	else
441
		chip->irq_trig_raise[bank_nb] &= ~mask;
442

443
	return 0;
444 445 446 447
}

static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
448 449 450 451 452
	.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,
453 454
};

455
static u8 pca953x_irq_pending(struct pca953x_chip *chip, u8 *pending)
456
{
457 458 459 460 461
	u8 cur_stat[MAX_BANK];
	u8 old_stat[MAX_BANK];
	u8 pendings = 0;
	u8 trigger[MAX_BANK], triggers = 0;
	int ret, i, offset = 0;
462 463 464 465 466 467 468 469 470

	switch (chip->chip_type) {
	case PCA953X_TYPE:
		offset = PCA953X_INPUT;
		break;
	case PCA957X_TYPE:
		offset = PCA957X_IN;
		break;
	}
471
	ret = pca953x_read_regs(chip, offset, cur_stat);
472 473 474 475
	if (ret)
		return 0;

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

479
	memcpy(old_stat, chip->irq_stat, NBANK(chip));
480

481 482 483 484 485 486
	for (i = 0; i < NBANK(chip); i++) {
		trigger[i] = (cur_stat[i] ^ old_stat[i]) & chip->irq_mask[i];
		triggers += trigger[i];
	}

	if (!triggers)
487 488
		return 0;

489
	memcpy(chip->irq_stat, cur_stat, NBANK(chip));
490

491 492 493 494 495 496
	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];
	}
497

498
	return pendings;
499 500 501 502 503
}

static irqreturn_t pca953x_irq_handler(int irq, void *devid)
{
	struct pca953x_chip *chip = devid;
504 505 506
	u8 pending[MAX_BANK];
	u8 level;
	int i;
507

508
	if (!pca953x_irq_pending(chip, pending))
509 510
		return IRQ_HANDLED;

511 512 513 514 515 516 517 518
	for (i = 0; i < NBANK(chip); i++) {
		while (pending[i]) {
			level = __ffs(pending[i]);
			handle_nested_irq(irq_find_mapping(chip->domain,
							level + (BANK_SZ * i)));
			pending[i] &= ~(1 << level);
		}
	}
519 520 521 522

	return IRQ_HANDLED;
}

523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543
static int pca953x_gpio_irq_map(struct irq_domain *d, unsigned int irq,
		       irq_hw_number_t hwirq)
{
	irq_clear_status_flags(irq, IRQ_NOREQUEST);
	irq_set_chip_data(irq, d->host_data);
	irq_set_chip(irq, &pca953x_irq_chip);
	irq_set_nested_thread(irq, true);
#ifdef CONFIG_ARM
	set_irq_flags(irq, IRQF_VALID);
#else
	irq_set_noprobe(irq);
#endif

	return 0;
}

static const struct irq_domain_ops pca953x_irq_simple_ops = {
	.map = pca953x_gpio_irq_map,
	.xlate = irq_domain_xlate_twocell,
};

544
static int pca953x_irq_setup(struct pca953x_chip *chip,
545 546
			     const struct i2c_device_id *id,
			     int irq_base)
547 548
{
	struct i2c_client *client = chip->client;
549
	int ret, i, offset = 0;
550

551
	if (irq_base != -1
552
			&& (id->driver_data & PCA_INT)) {
553

554 555 556 557 558 559 560 561
		switch (chip->chip_type) {
		case PCA953X_TYPE:
			offset = PCA953X_INPUT;
			break;
		case PCA957X_TYPE:
			offset = PCA957X_IN;
			break;
		}
562
		ret = pca953x_read_regs(chip, offset, chip->irq_stat);
563
		if (ret)
564
			return ret;
565 566 567 568 569 570

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

575
		chip->domain = irq_domain_add_simple(client->dev.of_node,
576
						chip->gpio_chip.ngpio,
577 578
						irq_base,
						&pca953x_irq_simple_ops,
579
						chip);
580 581
		if (!chip->domain)
			return -ENODEV;
582

583 584
		ret = devm_request_threaded_irq(&client->dev,
					client->irq,
585 586
					   NULL,
					   pca953x_irq_handler,
587
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT,
588 589 590 591
					   dev_name(&client->dev), chip);
		if (ret) {
			dev_err(&client->dev, "failed to request irq %d\n",
				client->irq);
592
			return ret;
593 594 595 596 597 598 599 600 601 602
		}

		chip->gpio_chip.to_irq = pca953x_gpio_to_irq;
	}

	return 0;
}

#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
603 604
			     const struct i2c_device_id *id,
			     int irq_base)
605 606 607
{
	struct i2c_client *client = chip->client;

608
	if (irq_base != -1 && (id->driver_data & PCA_INT))
609 610 611 612 613 614
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}
#endif

615 616 617 618 619 620
/*
 * Handlers for alternative sources of platform_data
 */
#ifdef CONFIG_OF_GPIO
/*
 * Translate OpenFirmware node properties into platform_data
621
 * WARNING: This is DEPRECATED and will be removed eventually!
622
 */
623
static void
624
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, u32 *invert)
625 626
{
	struct device_node *node;
627 628
	const __be32 *val;
	int size;
629

630 631
	*gpio_base = -1;

632
	node = client->dev.of_node;
633
	if (node == NULL)
634
		return;
635

636
	val = of_get_property(node, "linux,gpio-base", &size);
637
	WARN(val, "%s: device-tree property 'linux,gpio-base' is deprecated!", __func__);
638
	if (val) {
639 640 641
		if (size != sizeof(*val))
			dev_warn(&client->dev, "%s: wrong linux,gpio-base\n",
				 node->full_name);
642
		else
643
			*gpio_base = be32_to_cpup(val);
644 645 646
	}

	val = of_get_property(node, "polarity", NULL);
647
	WARN(val, "%s: device-tree property 'polarity' is deprecated!", __func__);
648
	if (val)
649
		*invert = *val;
650 651
}
#else
652
static void
653
pca953x_get_alt_pdata(struct i2c_client *client, int *gpio_base, u32 *invert)
654
{
H
Hartmut Knaack 已提交
655
	*gpio_base = -1;
656 657 658
}
#endif

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

664
	ret = pca953x_read_regs(chip, PCA953X_OUTPUT, chip->reg_output);
665 666 667
	if (ret)
		goto out;

668 669
	ret = pca953x_read_regs(chip, PCA953X_DIRECTION,
			       chip->reg_direction);
670 671 672 673
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
674 675 676 677 678 679
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));

	ret = pca953x_write_regs(chip, PCA953X_INVERT, val);
680 681 682 683
out:
	return ret;
}

B
Bill Pemberton 已提交
684
static int device_pca957x_init(struct pca953x_chip *chip, u32 invert)
685 686
{
	int ret;
687
	u8 val[MAX_BANK];
688

689
	ret = pca953x_read_regs(chip, PCA957X_OUT, chip->reg_output);
690 691
	if (ret)
		goto out;
692
	ret = pca953x_read_regs(chip, PCA957X_CFG, chip->reg_direction);
693 694 695 696
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
697 698 699 700 701
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));
	pca953x_write_regs(chip, PCA957X_INVRT, val);
702 703

	/* To enable register 6, 7 to controll pull up and pull down */
704 705
	memset(val, 0x02, NBANK(chip));
	pca953x_write_regs(chip, PCA957X_BKEN, val);
706 707 708 709 710 711

	return 0;
out:
	return ret;
}

B
Bill Pemberton 已提交
712
static int pca953x_probe(struct i2c_client *client,
713
				   const struct i2c_device_id *id)
714
{
715 716
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
717
	int irq_base = 0;
718
	int ret;
719
	u32 invert = 0;
720

721 722
	chip = devm_kzalloc(&client->dev,
			sizeof(struct pca953x_chip), GFP_KERNEL);
723 724 725
	if (chip == NULL)
		return -ENOMEM;

J
Jingoo Han 已提交
726
	pdata = dev_get_platdata(&client->dev);
727 728 729 730 731 732 733
	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);
734 735 736 737 738
#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
739
	}
740 741 742

	chip->client = client;

743
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
744

745 746
	mutex_init(&chip->i2c_lock);

747 748 749
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
750
	pca953x_setup_gpio(chip, id->driver_data & PCA_GPIO_MASK);
751

752
	if (chip->chip_type == PCA953X_TYPE)
753
		ret = device_pca953x_init(chip, invert);
754
	else
755 756
		ret = device_pca957x_init(chip, invert);
	if (ret)
757
		return ret;
758

759
	ret = pca953x_irq_setup(chip, id, irq_base);
760
	if (ret)
761
		return ret;
762 763

	ret = gpiochip_add(&chip->gpio_chip);
764
	if (ret)
765
		return ret;
766

767
	if (pdata && pdata->setup) {
768 769 770 771 772 773 774 775 776 777
		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;
}

778
static int pca953x_remove(struct i2c_client *client)
779
{
J
Jingoo Han 已提交
780
	struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev);
781
	struct pca953x_chip *chip = i2c_get_clientdata(client);
782 783
	int ret = 0;

784
	if (pdata && pdata->teardown) {
785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803
		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;
}

804
static const struct of_device_id pca953x_dt_ids[] = {
805
	{ .compatible = "nxp,pca9505", },
806 807 808 809 810 811 812 813 814 815 816 817
	{ .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 已提交
818
	{ .compatible = "nxp,pca9698", },
819 820 821 822 823 824 825 826 827 828

	{ .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 已提交
829 830

	{ .compatible = "exar,xra1202", },
831 832 833 834 835
	{ }
};

MODULE_DEVICE_TABLE(of, pca953x_dt_ids);

836
static struct i2c_driver pca953x_driver = {
837
	.driver = {
838
		.name	= "pca953x",
839
		.of_match_table = pca953x_dt_ids,
840
	},
841 842
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
843
	.id_table	= pca953x_id,
844 845
};

846
static int __init pca953x_init(void)
847
{
848
	return i2c_add_driver(&pca953x_driver);
849
}
850 851 852 853
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
854

855
static void __exit pca953x_exit(void)
856
{
857
	i2c_del_driver(&pca953x_driver);
858
}
859
module_exit(pca953x_exit);
860 861

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