gpio-pca953x.c 24.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
#include <linux/interrupt.h>
18
#include <linux/i2c.h>
19
#include <linux/platform_data/pca953x.h>
20
#include <linux/slab.h>
21
#include <asm/unaligned.h>
22
#include <linux/of_platform.h>
23
#include <linux/acpi.h>
24
#include <linux/regulator/consumer.h>
25

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

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

33 34 35 36 37 38 39 40 41
#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

42 43 44 45
#define PCAL953X_IN_LATCH	34
#define PCAL953X_INT_MASK	37
#define PCAL953X_INT_STAT	38

46 47
#define PCA_GPIO_MASK		0x00FF
#define PCA_INT			0x0100
48
#define PCA_PCAL		0x0200
49 50
#define PCA953X_TYPE		0x1000
#define PCA957X_TYPE		0x2000
51 52 53
#define PCA_TYPE_MASK		0xF000

#define PCA_CHIP_TYPE(x)	((x) & PCA_TYPE_MASK)
54

55
static const struct i2c_device_id pca953x_id[] = {
56
	{ "pca9505", 40 | PCA953X_TYPE | PCA_INT, },
57 58 59 60 61 62 63 64 65 66 67 68
	{ "pca9534", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9535", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9536", 4  | PCA953X_TYPE, },
	{ "pca9537", 4  | PCA953X_TYPE | PCA_INT, },
	{ "pca9538", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9539", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9554", 8  | PCA953X_TYPE | PCA_INT, },
	{ "pca9555", 16 | PCA953X_TYPE | PCA_INT, },
	{ "pca9556", 8  | PCA953X_TYPE, },
	{ "pca9557", 8  | PCA953X_TYPE, },
	{ "pca9574", 8  | PCA957X_TYPE | PCA_INT, },
	{ "pca9575", 16 | PCA957X_TYPE | PCA_INT, },
A
Aaron Sierra 已提交
69
	{ "pca9698", 40 | PCA953X_TYPE, },
70

71 72
	{ "pcal9555a", 16 | PCA953X_TYPE | PCA_INT | PCA_PCAL, },

73 74 75 76 77 78 79
	{ "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 已提交
80
	{ "tca6424", 24 | PCA953X_TYPE | PCA_INT, },
81
	{ "tca9539", 16 | PCA953X_TYPE | PCA_INT, },
A
Aaron Sierra 已提交
82
	{ "xra1202", 8  | PCA953X_TYPE },
83
	{ }
84
};
85
MODULE_DEVICE_TABLE(i2c, pca953x_id);
86

87
static const struct acpi_device_id pca953x_acpi_ids[] = {
88
	{ "INT3491", 16 | PCA953X_TYPE | PCA_INT | PCA_PCAL, },
89 90 91 92
	{ }
};
MODULE_DEVICE_TABLE(acpi, pca953x_acpi_ids);

93 94 95
#define MAX_BANK 5
#define BANK_SZ 8

96
#define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ)
97

B
Bartosz Golaszewski 已提交
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
struct pca953x_reg_config {
	int direction;
	int output;
	int input;
};

static const struct pca953x_reg_config pca953x_regs = {
	.direction = PCA953X_DIRECTION,
	.output = PCA953X_OUTPUT,
	.input = PCA953X_INPUT,
};

static const struct pca953x_reg_config pca957x_regs = {
	.direction = PCA957X_CFG,
	.output = PCA957X_OUT,
	.input = PCA957X_IN,
};

116
struct pca953x_chip {
117
	unsigned gpio_start;
118 119
	u8 reg_output[MAX_BANK];
	u8 reg_direction[MAX_BANK];
120
	struct mutex i2c_lock;
121

122 123
#ifdef CONFIG_GPIO_PCA953X_IRQ
	struct mutex irq_lock;
124 125 126 127
	u8 irq_mask[MAX_BANK];
	u8 irq_stat[MAX_BANK];
	u8 irq_trig_raise[MAX_BANK];
	u8 irq_trig_fall[MAX_BANK];
128 129
#endif

130 131
	struct i2c_client *client;
	struct gpio_chip gpio_chip;
132
	const char *const *names;
133
	unsigned long driver_data;
134
	struct regulator *regulator;
B
Bartosz Golaszewski 已提交
135 136

	const struct pca953x_reg_config *regs;
137 138

	int (*write_regs)(struct pca953x_chip *, int, u8 *);
139
	int (*read_regs)(struct pca953x_chip *, int, u8 *);
140 141
};

142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
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)
{
164
	int ret;
165 166 167 168 169 170 171 172 173 174 175 176 177 178
	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;
}

179
static int pca953x_write_regs_8(struct pca953x_chip *chip, int reg, u8 *val)
180
{
181 182
	return i2c_smbus_write_byte_data(chip->client, reg, *val);
}
183

184 185 186
static int pca953x_write_regs_16(struct pca953x_chip *chip, int reg, u8 *val)
{
	__le16 word = cpu_to_le16(get_unaligned((u16 *)val));
187

188 189 190 191 192 193 194 195 196 197 198 199 200 201
	return i2c_smbus_write_word_data(chip->client,
					 reg << 1, (__force u16)word);
}

static int pca957x_write_regs_16(struct pca953x_chip *chip, int reg, u8 *val)
{
	int ret;

	ret = i2c_smbus_write_byte_data(chip->client, reg << 1, val[0]);
	if (ret < 0)
		return ret;

	return i2c_smbus_write_byte_data(chip->client, (reg << 1) + 1, val[1]);
}
202

203 204 205 206 207 208 209 210 211 212 213 214 215 216
static int pca953x_write_regs_24(struct pca953x_chip *chip, int reg, u8 *val)
{
	int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);

	return i2c_smbus_write_i2c_block_data(chip->client,
					      (reg << bank_shift) | REG_ADDR_AI,
					      NBANK(chip), val);
}

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

	ret = chip->write_regs(chip, reg, val);
217 218
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed writing register\n");
219
		return ret;
220 221 222
	}

	return 0;
223 224
}

225
static int pca953x_read_regs_8(struct pca953x_chip *chip, int reg, u8 *val)
226 227 228
{
	int ret;

229 230
	ret = i2c_smbus_read_byte_data(chip->client, reg);
	*val = ret;
231

232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259
	return ret;
}

static int pca953x_read_regs_16(struct pca953x_chip *chip, int reg, u8 *val)
{
	int ret;

	ret = i2c_smbus_read_word_data(chip->client, reg << 1);
	val[0] = (u16)ret & 0xFF;
	val[1] = (u16)ret >> 8;

	return ret;
}

static int pca953x_read_regs_24(struct pca953x_chip *chip, int reg, u8 *val)
{
	int bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);

	return i2c_smbus_read_i2c_block_data(chip->client,
					     (reg << bank_shift) | REG_ADDR_AI,
					     NBANK(chip), val);
}

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

	ret = chip->read_regs(chip, reg, val);
260 261
	if (ret < 0) {
		dev_err(&chip->client->dev, "failed reading register\n");
262
		return ret;
263 264 265 266 267
	}

	return 0;
}

268
static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
269
{
270
	struct pca953x_chip *chip = gpiochip_get_data(gc);
271
	u8 reg_val;
B
Bartosz Golaszewski 已提交
272
	int ret;
273

274
	mutex_lock(&chip->i2c_lock);
275
	reg_val = chip->reg_direction[off / BANK_SZ] | (1u << (off % BANK_SZ));
276

B
Bartosz Golaszewski 已提交
277
	ret = pca953x_write_single(chip, chip->regs->direction, reg_val, off);
278
	if (ret)
279
		goto exit;
280

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

287
static int pca953x_gpio_direction_output(struct gpio_chip *gc,
288 289
		unsigned off, int val)
{
290
	struct pca953x_chip *chip = gpiochip_get_data(gc);
291
	u8 reg_val;
B
Bartosz Golaszewski 已提交
292
	int ret;
293

294
	mutex_lock(&chip->i2c_lock);
295 296
	/* set output level */
	if (val)
297 298
		reg_val = chip->reg_output[off / BANK_SZ]
			| (1u << (off % BANK_SZ));
299
	else
300 301
		reg_val = chip->reg_output[off / BANK_SZ]
			& ~(1u << (off % BANK_SZ));
302

B
Bartosz Golaszewski 已提交
303
	ret = pca953x_write_single(chip, chip->regs->output, reg_val, off);
304
	if (ret)
305
		goto exit;
306

307
	chip->reg_output[off / BANK_SZ] = reg_val;
308 309

	/* then direction */
310
	reg_val = chip->reg_direction[off / BANK_SZ] & ~(1u << (off % BANK_SZ));
B
Bartosz Golaszewski 已提交
311
	ret = pca953x_write_single(chip, chip->regs->direction, reg_val, off);
312
	if (ret)
313
		goto exit;
314

315
	chip->reg_direction[off / BANK_SZ] = reg_val;
316 317 318
exit:
	mutex_unlock(&chip->i2c_lock);
	return ret;
319 320
}

321
static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
322
{
323
	struct pca953x_chip *chip = gpiochip_get_data(gc);
A
Andreas Schallenberg 已提交
324
	u32 reg_val;
B
Bartosz Golaszewski 已提交
325
	int ret;
326

327
	mutex_lock(&chip->i2c_lock);
B
Bartosz Golaszewski 已提交
328
	ret = pca953x_read_single(chip, chip->regs->input, &reg_val, off);
329
	mutex_unlock(&chip->i2c_lock);
330 331 332 333 334 335 336 337
	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;
	}

338
	return (reg_val & (1u << (off % BANK_SZ))) ? 1 : 0;
339 340
}

341
static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
342
{
343
	struct pca953x_chip *chip = gpiochip_get_data(gc);
344
	u8 reg_val;
B
Bartosz Golaszewski 已提交
345
	int ret;
346

347
	mutex_lock(&chip->i2c_lock);
348
	if (val)
349 350
		reg_val = chip->reg_output[off / BANK_SZ]
			| (1u << (off % BANK_SZ));
351
	else
352 353
		reg_val = chip->reg_output[off / BANK_SZ]
			& ~(1u << (off % BANK_SZ));
354

B
Bartosz Golaszewski 已提交
355
	ret = pca953x_write_single(chip, chip->regs->output, reg_val, off);
356
	if (ret)
357
		goto exit;
358

359
	chip->reg_output[off / BANK_SZ] = reg_val;
360 361
exit:
	mutex_unlock(&chip->i2c_lock);
362 363
}

364
static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
365
				      unsigned long *mask, unsigned long *bits)
366
{
367
	struct pca953x_chip *chip = gpiochip_get_data(gc);
368 369
	unsigned int bank_mask, bank_val;
	int bank_shift, bank;
370
	u8 reg_val[MAX_BANK];
B
Bartosz Golaszewski 已提交
371
	int ret;
372 373

	bank_shift = fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);
374 375 376

	memcpy(reg_val, chip->reg_output, NBANK(chip));
	mutex_lock(&chip->i2c_lock);
377 378 379 380 381 382 383
	for (bank = 0; bank < NBANK(chip); bank++) {
		bank_mask = mask[bank / sizeof(*mask)] >>
			   ((bank % sizeof(*mask)) * 8);
		if (bank_mask) {
			bank_val = bits[bank / sizeof(*bits)] >>
				  ((bank % sizeof(*bits)) * 8);
			reg_val[bank] = (reg_val[bank] & ~bank_mask) | bank_val;
384 385
		}
	}
386

B
Bartosz Golaszewski 已提交
387 388 389
	ret = i2c_smbus_write_i2c_block_data(chip->client,
					     chip->regs->output << bank_shift,
					     NBANK(chip), reg_val);
390 391 392 393 394 395 396 397
	if (ret)
		goto exit;

	memcpy(chip->reg_output, reg_val, NBANK(chip));
exit:
	mutex_unlock(&chip->i2c_lock);
}

398
static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
399 400 401 402 403
{
	struct gpio_chip *gc;

	gc = &chip->gpio_chip;

404 405 406 407
	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;
408
	gc->set_multiple = pca953x_gpio_set_multiple;
409
	gc->can_sleep = true;
410 411

	gc->base = chip->gpio_start;
412 413
	gc->ngpio = gpios;
	gc->label = chip->client->name;
414
	gc->parent = &chip->client->dev;
415
	gc->owner = THIS_MODULE;
416
	gc->names = chip->names;
417 418
}

419
#ifdef CONFIG_GPIO_PCA953X_IRQ
420
static void pca953x_irq_mask(struct irq_data *d)
421
{
422
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
423
	struct pca953x_chip *chip = gpiochip_get_data(gc);
424

425
	chip->irq_mask[d->hwirq / BANK_SZ] &= ~(1 << (d->hwirq % BANK_SZ));
426 427
}

428
static void pca953x_irq_unmask(struct irq_data *d)
429
{
430
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
431
	struct pca953x_chip *chip = gpiochip_get_data(gc);
432

433
	chip->irq_mask[d->hwirq / BANK_SZ] |= 1 << (d->hwirq % BANK_SZ);
434 435
}

436
static void pca953x_irq_bus_lock(struct irq_data *d)
437
{
438
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
439
	struct pca953x_chip *chip = gpiochip_get_data(gc);
440 441 442 443

	mutex_lock(&chip->irq_lock);
}

444
static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
445
{
446
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
447
	struct pca953x_chip *chip = gpiochip_get_data(gc);
448 449
	u8 new_irqs;
	int level, i;
450 451 452 453 454 455 456 457 458 459 460 461
	u8 invert_irq_mask[MAX_BANK];

	if (chip->driver_data & PCA_PCAL) {
		/* Enable latch on interrupt-enabled inputs */
		pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask);

		for (i = 0; i < NBANK(chip); i++)
			invert_irq_mask[i] = ~chip->irq_mask[i];

		/* Unmask enabled interrupts */
		pca953x_write_regs(chip, PCAL953X_INT_MASK, invert_irq_mask);
	}
462 463

	/* Look for any newly setup interrupt */
464 465 466 467 468 469 470 471 472 473
	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);
		}
474
	}
475 476 477 478

	mutex_unlock(&chip->irq_lock);
}

479
static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
480
{
481
	struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
482
	struct pca953x_chip *chip = gpiochip_get_data(gc);
483 484
	int bank_nb = d->hwirq / BANK_SZ;
	u8 mask = 1 << (d->hwirq % BANK_SZ);
485 486 487

	if (!(type & IRQ_TYPE_EDGE_BOTH)) {
		dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
488
			d->irq, type);
489 490 491 492
		return -EINVAL;
	}

	if (type & IRQ_TYPE_EDGE_FALLING)
493
		chip->irq_trig_fall[bank_nb] |= mask;
494
	else
495
		chip->irq_trig_fall[bank_nb] &= ~mask;
496 497

	if (type & IRQ_TYPE_EDGE_RISING)
498
		chip->irq_trig_raise[bank_nb] |= mask;
499
	else
500
		chip->irq_trig_raise[bank_nb] &= ~mask;
501

502
	return 0;
503 504 505 506
}

static struct irq_chip pca953x_irq_chip = {
	.name			= "pca953x",
507 508 509 510 511
	.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,
512 513
};

514
static bool pca953x_irq_pending(struct pca953x_chip *chip, u8 *pending)
515
{
516 517
	u8 cur_stat[MAX_BANK];
	u8 old_stat[MAX_BANK];
518 519 520
	bool pending_seen = false;
	bool trigger_seen = false;
	u8 trigger[MAX_BANK];
B
Bartosz Golaszewski 已提交
521
	int ret, i;
522

523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545
	if (chip->driver_data & PCA_PCAL) {
		/* Read the current interrupt status from the device */
		ret = pca953x_read_regs(chip, PCAL953X_INT_STAT, trigger);
		if (ret)
			return false;

		/* Check latched inputs and clear interrupt status */
		ret = pca953x_read_regs(chip, PCA953X_INPUT, cur_stat);
		if (ret)
			return false;

		for (i = 0; i < NBANK(chip); i++) {
			/* Apply filter for rising/falling edge selection */
			pending[i] = (~cur_stat[i] & chip->irq_trig_fall[i]) |
				(cur_stat[i] & chip->irq_trig_raise[i]);
			pending[i] &= trigger[i];
			if (pending[i])
				pending_seen = true;
		}

		return pending_seen;
	}

B
Bartosz Golaszewski 已提交
546
	ret = pca953x_read_regs(chip, chip->regs->input, cur_stat);
547
	if (ret)
548
		return false;
549 550

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

554
	memcpy(old_stat, chip->irq_stat, NBANK(chip));
555

556 557
	for (i = 0; i < NBANK(chip); i++) {
		trigger[i] = (cur_stat[i] ^ old_stat[i]) & chip->irq_mask[i];
558 559
		if (trigger[i])
			trigger_seen = true;
560 561
	}

562 563
	if (!trigger_seen)
		return false;
564

565
	memcpy(chip->irq_stat, cur_stat, NBANK(chip));
566

567 568 569 570
	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];
571 572
		if (pending[i])
			pending_seen = true;
573
	}
574

575
	return pending_seen;
576 577 578 579 580
}

static irqreturn_t pca953x_irq_handler(int irq, void *devid)
{
	struct pca953x_chip *chip = devid;
581 582
	u8 pending[MAX_BANK];
	u8 level;
583
	unsigned nhandled = 0;
584
	int i;
585

586
	if (!pca953x_irq_pending(chip, pending))
587
		return IRQ_NONE;
588

589 590 591
	for (i = 0; i < NBANK(chip); i++) {
		while (pending[i]) {
			level = __ffs(pending[i]);
592
			handle_nested_irq(irq_find_mapping(chip->gpio_chip.irqdomain,
593 594
							level + (BANK_SZ * i)));
			pending[i] &= ~(1 << level);
595
			nhandled++;
596 597
		}
	}
598

599
	return (nhandled > 0) ? IRQ_HANDLED : IRQ_NONE;
600 601 602
}

static int pca953x_irq_setup(struct pca953x_chip *chip,
603
			     int irq_base)
604 605
{
	struct i2c_client *client = chip->client;
B
Bartosz Golaszewski 已提交
606
	int ret, i;
607

608
	if (client->irq && irq_base != -1
609
			&& (chip->driver_data & PCA_INT)) {
610

B
Bartosz Golaszewski 已提交
611 612
		ret = pca953x_read_regs(chip,
					chip->regs->input, chip->irq_stat);
613
		if (ret)
614
			return ret;
615 616 617 618 619 620

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

625 626
		ret = devm_request_threaded_irq(&client->dev,
					client->irq,
627 628
					   NULL,
					   pca953x_irq_handler,
629 630
					   IRQF_TRIGGER_LOW | IRQF_ONESHOT |
						   IRQF_SHARED,
631 632 633 634
					   dev_name(&client->dev), chip);
		if (ret) {
			dev_err(&client->dev, "failed to request irq %d\n",
				client->irq);
635
			return ret;
636 637
		}

638 639 640 641 642 643 644 645 646 647
		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;
		}
648 649 650 651

		gpiochip_set_chained_irqchip(&chip->gpio_chip,
					     &pca953x_irq_chip,
					     client->irq, NULL);
652 653 654 655 656 657 658
	}

	return 0;
}

#else /* CONFIG_GPIO_PCA953X_IRQ */
static int pca953x_irq_setup(struct pca953x_chip *chip,
659
			     int irq_base)
660 661 662
{
	struct i2c_client *client = chip->client;

663
	if (irq_base != -1 && (chip->driver_data & PCA_INT))
664 665 666 667 668 669
		dev_warn(&client->dev, "interrupt support not compiled in\n");

	return 0;
}
#endif

B
Bill Pemberton 已提交
670
static int device_pca953x_init(struct pca953x_chip *chip, u32 invert)
671 672
{
	int ret;
673
	u8 val[MAX_BANK];
674

B
Bartosz Golaszewski 已提交
675 676 677
	chip->regs = &pca953x_regs;

	ret = pca953x_read_regs(chip, chip->regs->output, chip->reg_output);
678 679 680
	if (ret)
		goto out;

B
Bartosz Golaszewski 已提交
681 682
	ret = pca953x_read_regs(chip, chip->regs->direction,
				chip->reg_direction);
683 684 685 686
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
687 688 689 690 691 692
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));

	ret = pca953x_write_regs(chip, PCA953X_INVERT, val);
693 694 695 696
out:
	return ret;
}

B
Bill Pemberton 已提交
697
static int device_pca957x_init(struct pca953x_chip *chip, u32 invert)
698 699
{
	int ret;
700
	u8 val[MAX_BANK];
701

B
Bartosz Golaszewski 已提交
702 703 704
	chip->regs = &pca957x_regs;

	ret = pca953x_read_regs(chip, chip->regs->output, chip->reg_output);
705 706
	if (ret)
		goto out;
B
Bartosz Golaszewski 已提交
707 708
	ret = pca953x_read_regs(chip, chip->regs->direction,
				chip->reg_direction);
709 710 711 712
	if (ret)
		goto out;

	/* set platform specific polarity inversion */
713 714 715 716
	if (invert)
		memset(val, 0xFF, NBANK(chip));
	else
		memset(val, 0, NBANK(chip));
717 718 719
	ret = pca953x_write_regs(chip, PCA957X_INVRT, val);
	if (ret)
		goto out;
720

721
	/* To enable register 6, 7 to control pull up and pull down */
722
	memset(val, 0x02, NBANK(chip));
723 724 725
	ret = pca953x_write_regs(chip, PCA957X_BKEN, val);
	if (ret)
		goto out;
726 727 728 729 730 731

	return 0;
out:
	return ret;
}

732 733
static const struct of_device_id pca953x_dt_ids[];

B
Bill Pemberton 已提交
734
static int pca953x_probe(struct i2c_client *client,
735
				   const struct i2c_device_id *i2c_id)
736
{
737 738
	struct pca953x_platform_data *pdata;
	struct pca953x_chip *chip;
739
	int irq_base = 0;
740
	int ret;
741
	u32 invert = 0;
742
	struct regulator *reg;
743

744 745
	chip = devm_kzalloc(&client->dev,
			sizeof(struct pca953x_chip), GFP_KERNEL);
746 747 748
	if (chip == NULL)
		return -ENOMEM;

J
Jingoo Han 已提交
749
	pdata = dev_get_platdata(&client->dev);
750 751 752 753 754 755
	if (pdata) {
		irq_base = pdata->irq_base;
		chip->gpio_start = pdata->gpio_base;
		invert = pdata->invert;
		chip->names = pdata->names;
	} else {
756 757
		chip->gpio_start = -1;
		irq_base = 0;
758
	}
759 760 761

	chip->client = client;

762 763 764 765 766 767 768 769 770 771 772 773 774 775
	reg = devm_regulator_get(&client->dev, "vcc");
	if (IS_ERR(reg)) {
		ret = PTR_ERR(reg);
		if (ret != -EPROBE_DEFER)
			dev_err(&client->dev, "reg get err: %d\n", ret);
		return ret;
	}
	ret = regulator_enable(reg);
	if (ret) {
		dev_err(&client->dev, "reg en err: %d\n", ret);
		return ret;
	}
	chip->regulator = reg;

776 777
	if (i2c_id) {
		chip->driver_data = i2c_id->driver_data;
778
	} else {
779
		const struct acpi_device_id *acpi_id;
780
		const struct of_device_id *match;
781

782 783 784 785
		match = of_match_device(pca953x_dt_ids, &client->dev);
		if (match) {
			chip->driver_data = (int)(uintptr_t)match->data;
		} else {
786
			acpi_id = acpi_match_device(pca953x_acpi_ids, &client->dev);
787
			if (!acpi_id) {
788 789 790
				ret = -ENODEV;
				goto err_exit;
			}
791

792
			chip->driver_data = acpi_id->driver_data;
793
		}
794 795
	}

796
	mutex_init(&chip->i2c_lock);
797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812
	/*
	 * In case we have an i2c-mux controlled by a GPIO provided by an
	 * expander using the same driver higher on the device tree, read the
	 * i2c adapter nesting depth and use the retrieved value as lockdep
	 * subclass for chip->i2c_lock.
	 *
	 * REVISIT: This solution is not complete. It protects us from lockdep
	 * false positives when the expander controlling the i2c-mux is on
	 * a different level on the device tree, but not when it's on the same
	 * level on a different branch (in which case the subclass number
	 * would be the same).
	 *
	 * TODO: Once a correct solution is developed, a similar fix should be
	 * applied to all other i2c-controlled GPIO expanders (and potentially
	 * regmap-i2c).
	 */
813 814
	lockdep_set_subclass(&chip->i2c_lock,
			     i2c_adapter_depth(client->adapter));
815

816 817 818
	/* initialize cached registers from their original values.
	 * we can't share this chip with another i2c master.
	 */
819
	pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK);
820

821 822
	if (chip->gpio_chip.ngpio <= 8) {
		chip->write_regs = pca953x_write_regs_8;
823
		chip->read_regs = pca953x_read_regs_8;
824 825
	} else if (chip->gpio_chip.ngpio >= 24) {
		chip->write_regs = pca953x_write_regs_24;
826
		chip->read_regs = pca953x_read_regs_24;
827 828 829 830 831
	} else {
		if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE)
			chip->write_regs = pca953x_write_regs_16;
		else
			chip->write_regs = pca957x_write_regs_16;
832
		chip->read_regs = pca953x_read_regs_16;
833 834
	}

835
	if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE)
836
		ret = device_pca953x_init(chip, invert);
837
	else
838 839
		ret = device_pca957x_init(chip, invert);
	if (ret)
840
		goto err_exit;
841

842
	ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip);
843
	if (ret)
844
		goto err_exit;
845

846
	ret = pca953x_irq_setup(chip, irq_base);
847
	if (ret)
848
		goto err_exit;
849

850
	if (pdata && pdata->setup) {
851 852 853 854 855 856 857 858
		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;
859 860 861 862

err_exit:
	regulator_disable(chip->regulator);
	return ret;
863 864
}

865
static int pca953x_remove(struct i2c_client *client)
866
{
J
Jingoo Han 已提交
867
	struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev);
868
	struct pca953x_chip *chip = i2c_get_clientdata(client);
869
	int ret;
870

871
	if (pdata && pdata->teardown) {
872 873
		ret = pdata->teardown(client, chip->gpio_chip.base,
				chip->gpio_chip.ngpio, pdata->context);
874
		if (ret < 0)
875 876
			dev_err(&client->dev, "%s failed, %d\n",
					"teardown", ret);
877 878
	} else {
		ret = 0;
879 880
	}

881 882 883
	regulator_disable(chip->regulator);

	return ret;
884 885
}

886 887 888 889
/* convenience to stop overlong match-table lines */
#define OF_953X(__nrgpio, __int) (void *)(__nrgpio | PCA953X_TYPE | __int)
#define OF_957X(__nrgpio, __int) (void *)(__nrgpio | PCA957X_TYPE | __int)

890
static const struct of_device_id pca953x_dt_ids[] = {
891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911
	{ .compatible = "nxp,pca9505", .data = OF_953X(40, PCA_INT), },
	{ .compatible = "nxp,pca9534", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9535", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "nxp,pca9536", .data = OF_953X( 4, 0), },
	{ .compatible = "nxp,pca9537", .data = OF_953X( 4, PCA_INT), },
	{ .compatible = "nxp,pca9538", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9539", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "nxp,pca9554", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9555", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "nxp,pca9556", .data = OF_953X( 8, 0), },
	{ .compatible = "nxp,pca9557", .data = OF_953X( 8, 0), },
	{ .compatible = "nxp,pca9574", .data = OF_957X( 8, PCA_INT), },
	{ .compatible = "nxp,pca9575", .data = OF_957X(16, PCA_INT), },
	{ .compatible = "nxp,pca9698", .data = OF_953X(40, 0), },

	{ .compatible = "maxim,max7310", .data = OF_953X( 8, 0), },
	{ .compatible = "maxim,max7312", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "maxim,max7313", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "maxim,max7315", .data = OF_953X( 8, PCA_INT), },

	{ .compatible = "ti,pca6107", .data = OF_953X( 8, PCA_INT), },
912
	{ .compatible = "ti,pca9536", .data = OF_953X( 4, 0), },
913 914 915 916 917 918 919
	{ .compatible = "ti,tca6408", .data = OF_953X( 8, PCA_INT), },
	{ .compatible = "ti,tca6416", .data = OF_953X(16, PCA_INT), },
	{ .compatible = "ti,tca6424", .data = OF_953X(24, PCA_INT), },

	{ .compatible = "onsemi,pca9654", .data = OF_953X( 8, PCA_INT), },

	{ .compatible = "exar,xra1202", .data = OF_953X( 8, 0), },
920 921 922 923 924
	{ }
};

MODULE_DEVICE_TABLE(of, pca953x_dt_ids);

925
static struct i2c_driver pca953x_driver = {
926
	.driver = {
927
		.name	= "pca953x",
928
		.of_match_table = pca953x_dt_ids,
929
		.acpi_match_table = ACPI_PTR(pca953x_acpi_ids),
930
	},
931 932
	.probe		= pca953x_probe,
	.remove		= pca953x_remove,
933
	.id_table	= pca953x_id,
934 935
};

936
static int __init pca953x_init(void)
937
{
938
	return i2c_add_driver(&pca953x_driver);
939
}
940 941 942 943
/* register after i2c postcore initcall and before
 * subsys initcalls that may rely on these GPIOs
 */
subsys_initcall(pca953x_init);
944

945
static void __exit pca953x_exit(void)
946
{
947
	i2c_del_driver(&pca953x_driver);
948
}
949
module_exit(pca953x_exit);
950 951

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