gpio-pca953x.c 20.1 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
	u8 pending[MAX_BANK];
	u8 level;
506
	unsigned nhandled = 0;
507
	int i;
508

509
	if (!pca953x_irq_pending(chip, pending))
510
		return IRQ_NONE;
511

512 513 514 515 516 517
	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);
518
			nhandled++;
519 520
		}
	}
521

522
	return (nhandled > 0) ? IRQ_HANDLED : IRQ_NONE;
523 524
}

525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
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,
};

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

553
	if (irq_base != -1
554
			&& (id->driver_data & PCA_INT)) {
555

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

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

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

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

		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,
605 606
			     const struct i2c_device_id *id,
			     int irq_base)
607 608 609
{
	struct i2c_client *client = chip->client;

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

	return 0;
}
#endif

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

632 633
	*gpio_base = -1;

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

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

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

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

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

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

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

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

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

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

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

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

	return 0;
out:
	return ret;
}

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

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

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

	chip->client = client;

745
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
746

747 748
	mutex_init(&chip->i2c_lock);

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

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

761
	ret = pca953x_irq_setup(chip, id, irq_base);
762
	if (ret)
763
		return ret;
764 765

	ret = gpiochip_add(&chip->gpio_chip);
766
	if (ret)
767
		return ret;
768

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

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

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

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

	{ .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 已提交
831 832

	{ .compatible = "exar,xra1202", },
833 834 835 836 837
	{ }
};

MODULE_DEVICE_TABLE(of, pca953x_dt_ids);

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

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

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

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