gpio-pca953x.c 19.9 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/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 62 63 64 65 66 67 68 69
	{ "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 已提交
70
	{ "tca6424", 24 | PCA953X_TYPE | PCA_INT, },
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
	struct irq_domain *domain;
93 94
#endif

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

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
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)
139
{
140
	int ret = 0;
141 142

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

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

	return 0;
173 174
}

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

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

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

	return 0;
}

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

207
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
208

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

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

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

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

238
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
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;
A
Andreas Schallenberg 已提交
287
	u32 reg_val;
288
	int ret, offset = 0;
289

290
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
291

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

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

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

320
	chip = container_of(gc, struct pca953x_chip, gpio_chip);
321

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

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

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

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

	gc = &chip->gpio_chip;

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

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

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

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

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

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

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

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

	mutex_lock(&chip->irq_lock);
}

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

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

	mutex_unlock(&chip->irq_lock);
}

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

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

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

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

441
	return 0;
442 443 444 445
}

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

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

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

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

477
	memcpy(old_stat, chip->irq_stat, NBANK(chip));
478

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

	if (!triggers)
485 486
		return 0;

487
	memcpy(chip->irq_stat, cur_stat, NBANK(chip));
488

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

496
	return pendings;
497 498 499 500 501
}

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

506
	if (!pca953x_irq_pending(chip, pending))
507 508
		return IRQ_HANDLED;

509 510 511 512 513 514 515 516
	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);
		}
	}
517 518 519 520

	return IRQ_HANDLED;
}

521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541
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,
};

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

549
	if (irq_base != -1
550
			&& (id->driver_data & PCA_INT)) {
551

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

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

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

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

		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,
601 602
			     const struct i2c_device_id *id,
			     int irq_base)
603 604 605
{
	struct i2c_client *client = chip->client;

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

	return 0;
}
#endif

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

628
	node = client->dev.of_node;
629
	if (node == NULL)
630
		return;
631

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

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

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

661
	ret = pca953x_read_regs(chip, PCA953X_OUTPUT, chip->reg_output);
662 663 664
	if (ret)
		goto out;

665 666
	ret = pca953x_read_regs(chip, PCA953X_DIRECTION,
			       chip->reg_direction);
667 668 669 670
	if (ret)
		goto out;

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

	ret = pca953x_write_regs(chip, PCA953X_INVERT, val);
677 678 679 680
out:
	return ret;
}

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

686
	ret = pca953x_read_regs(chip, PCA957X_OUT, chip->reg_output);
687 688
	if (ret)
		goto out;
689
	ret = pca953x_read_regs(chip, PCA957X_CFG, chip->reg_direction);
690 691 692 693
	if (ret)
		goto out;

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

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

	return 0;
out:
	return ret;
}

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

718 719
	chip = devm_kzalloc(&client->dev,
			sizeof(struct pca953x_chip), GFP_KERNEL);
720 721 722
	if (chip == NULL)
		return -ENOMEM;

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

	chip->client = client;

740
	chip->chip_type = id->driver_data & (PCA953X_TYPE | PCA957X_TYPE);
741

742 743
	mutex_init(&chip->i2c_lock);

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

749
	if (chip->chip_type == PCA953X_TYPE)
750
		ret = device_pca953x_init(chip, invert);
751
	else
752 753
		ret = device_pca957x_init(chip, invert);
	if (ret)
754
		return ret;
755

756
	ret = pca953x_irq_setup(chip, id, irq_base);
757
	if (ret)
758
		return ret;
759 760

	ret = gpiochip_add(&chip->gpio_chip);
761
	if (ret)
762
		return ret;
763

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

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

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

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

830
static struct i2c_driver pca953x_driver = {
831
	.driver = {
832
		.name	= "pca953x",
833
		.of_match_table = pca953x_dt_ids,
834
	},
835 836
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
837
	.id_table	= pca953x_id,
838 839
};

840
static int __init pca953x_init(void)
841
{
842
	return i2c_add_driver(&pca953x_driver);
843
}
844 845 846 847
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
848

849
static void __exit pca953x_exit(void)
850
{
851
	i2c_del_driver(&pca953x_driver);
852
}
853
module_exit(pca953x_exit);
854 855

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