1
2
3
4
5
6
7
8
9
10
11#include <linux/acpi.h>
12#include <linux/bitmap.h>
13#include <linux/gpio/driver.h>
14#include <linux/gpio/consumer.h>
15#include <linux/i2c.h>
16#include <linux/init.h>
17#include <linux/interrupt.h>
18#include <linux/module.h>
19#include <linux/of_platform.h>
20#include <linux/platform_data/pca953x.h>
21#include <linux/regmap.h>
22#include <linux/regulator/consumer.h>
23#include <linux/slab.h>
24
25#include <asm/unaligned.h>
26
27#define PCA953X_INPUT 0x00
28#define PCA953X_OUTPUT 0x01
29#define PCA953X_INVERT 0x02
30#define PCA953X_DIRECTION 0x03
31
32#define REG_ADDR_MASK GENMASK(5, 0)
33#define REG_ADDR_EXT BIT(6)
34#define REG_ADDR_AI BIT(7)
35
36#define PCA957X_IN 0x00
37#define PCA957X_INVRT 0x01
38#define PCA957X_BKEN 0x02
39#define PCA957X_PUPD 0x03
40#define PCA957X_CFG 0x04
41#define PCA957X_OUT 0x05
42#define PCA957X_MSK 0x06
43#define PCA957X_INTS 0x07
44
45#define PCAL953X_OUT_STRENGTH 0x20
46#define PCAL953X_IN_LATCH 0x22
47#define PCAL953X_PULL_EN 0x23
48#define PCAL953X_PULL_SEL 0x24
49#define PCAL953X_INT_MASK 0x25
50#define PCAL953X_INT_STAT 0x26
51#define PCAL953X_OUT_CONF 0x27
52
53#define PCAL6524_INT_EDGE 0x28
54#define PCAL6524_INT_CLR 0x2a
55#define PCAL6524_IN_STATUS 0x2b
56#define PCAL6524_OUT_INDCONF 0x2c
57#define PCAL6524_DEBOUNCE 0x2d
58
59#define PCA_GPIO_MASK GENMASK(7, 0)
60
61#define PCAL_GPIO_MASK GENMASK(4, 0)
62#define PCAL_PINCTRL_MASK GENMASK(6, 5)
63
64#define PCA_INT BIT(8)
65#define PCA_PCAL BIT(9)
66#define PCA_LATCH_INT (PCA_PCAL | PCA_INT)
67#define PCA953X_TYPE BIT(12)
68#define PCA957X_TYPE BIT(13)
69#define PCA_TYPE_MASK GENMASK(15, 12)
70
71#define PCA_CHIP_TYPE(x) ((x) & PCA_TYPE_MASK)
72
73static const struct i2c_device_id pca953x_id[] = {
74 { "pca6416", 16 | PCA953X_TYPE | PCA_INT, },
75 { "pca9505", 40 | PCA953X_TYPE | PCA_INT, },
76 { "pca9534", 8 | PCA953X_TYPE | PCA_INT, },
77 { "pca9535", 16 | PCA953X_TYPE | PCA_INT, },
78 { "pca9536", 4 | PCA953X_TYPE, },
79 { "pca9537", 4 | PCA953X_TYPE | PCA_INT, },
80 { "pca9538", 8 | PCA953X_TYPE | PCA_INT, },
81 { "pca9539", 16 | PCA953X_TYPE | PCA_INT, },
82 { "pca9554", 8 | PCA953X_TYPE | PCA_INT, },
83 { "pca9555", 16 | PCA953X_TYPE | PCA_INT, },
84 { "pca9556", 8 | PCA953X_TYPE, },
85 { "pca9557", 8 | PCA953X_TYPE, },
86 { "pca9574", 8 | PCA957X_TYPE | PCA_INT, },
87 { "pca9575", 16 | PCA957X_TYPE | PCA_INT, },
88 { "pca9698", 40 | PCA953X_TYPE, },
89
90 { "pcal6416", 16 | PCA953X_TYPE | PCA_LATCH_INT, },
91 { "pcal6524", 24 | PCA953X_TYPE | PCA_LATCH_INT, },
92 { "pcal9555a", 16 | PCA953X_TYPE | PCA_LATCH_INT, },
93
94 { "max7310", 8 | PCA953X_TYPE, },
95 { "max7312", 16 | PCA953X_TYPE | PCA_INT, },
96 { "max7313", 16 | PCA953X_TYPE | PCA_INT, },
97 { "max7315", 8 | PCA953X_TYPE | PCA_INT, },
98 { "max7318", 16 | PCA953X_TYPE | PCA_INT, },
99 { "pca6107", 8 | PCA953X_TYPE | PCA_INT, },
100 { "tca6408", 8 | PCA953X_TYPE | PCA_INT, },
101 { "tca6416", 16 | PCA953X_TYPE | PCA_INT, },
102 { "tca6424", 24 | PCA953X_TYPE | PCA_INT, },
103 { "tca9539", 16 | PCA953X_TYPE | PCA_INT, },
104 { "tca9554", 8 | PCA953X_TYPE | PCA_INT, },
105 { "xra1202", 8 | PCA953X_TYPE },
106 { }
107};
108MODULE_DEVICE_TABLE(i2c, pca953x_id);
109
110static const struct acpi_device_id pca953x_acpi_ids[] = {
111 { "INT3491", 16 | PCA953X_TYPE | PCA_LATCH_INT, },
112 { }
113};
114MODULE_DEVICE_TABLE(acpi, pca953x_acpi_ids);
115
116#define MAX_BANK 5
117#define BANK_SZ 8
118#define MAX_LINE (MAX_BANK * BANK_SZ)
119
120#define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ)
121
122struct pca953x_reg_config {
123 int direction;
124 int output;
125 int input;
126 int invert;
127};
128
129static const struct pca953x_reg_config pca953x_regs = {
130 .direction = PCA953X_DIRECTION,
131 .output = PCA953X_OUTPUT,
132 .input = PCA953X_INPUT,
133 .invert = PCA953X_INVERT,
134};
135
136static const struct pca953x_reg_config pca957x_regs = {
137 .direction = PCA957X_CFG,
138 .output = PCA957X_OUT,
139 .input = PCA957X_IN,
140 .invert = PCA957X_INVRT,
141};
142
143struct pca953x_chip {
144 unsigned gpio_start;
145 struct mutex i2c_lock;
146 struct regmap *regmap;
147
148#ifdef CONFIG_GPIO_PCA953X_IRQ
149 struct mutex irq_lock;
150 DECLARE_BITMAP(irq_mask, MAX_LINE);
151 DECLARE_BITMAP(irq_stat, MAX_LINE);
152 DECLARE_BITMAP(irq_trig_raise, MAX_LINE);
153 DECLARE_BITMAP(irq_trig_fall, MAX_LINE);
154 struct irq_chip irq_chip;
155#endif
156 atomic_t wakeup_path;
157
158 struct i2c_client *client;
159 struct gpio_chip gpio_chip;
160 const char *const *names;
161 unsigned long driver_data;
162 struct regulator *regulator;
163
164 const struct pca953x_reg_config *regs;
165};
166
167static int pca953x_bank_shift(struct pca953x_chip *chip)
168{
169 return fls((chip->gpio_chip.ngpio - 1) / BANK_SZ);
170}
171
172#define PCA953x_BANK_INPUT BIT(0)
173#define PCA953x_BANK_OUTPUT BIT(1)
174#define PCA953x_BANK_POLARITY BIT(2)
175#define PCA953x_BANK_CONFIG BIT(3)
176
177#define PCA957x_BANK_INPUT BIT(0)
178#define PCA957x_BANK_POLARITY BIT(1)
179#define PCA957x_BANK_BUSHOLD BIT(2)
180#define PCA957x_BANK_CONFIG BIT(4)
181#define PCA957x_BANK_OUTPUT BIT(5)
182
183#define PCAL9xxx_BANK_IN_LATCH BIT(8 + 2)
184#define PCAL9xxx_BANK_PULL_EN BIT(8 + 3)
185#define PCAL9xxx_BANK_PULL_SEL BIT(8 + 4)
186#define PCAL9xxx_BANK_IRQ_MASK BIT(8 + 5)
187#define PCAL9xxx_BANK_IRQ_STAT BIT(8 + 6)
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217static bool pca953x_check_register(struct pca953x_chip *chip, unsigned int reg,
218 u32 checkbank)
219{
220 int bank_shift = pca953x_bank_shift(chip);
221 int bank = (reg & REG_ADDR_MASK) >> bank_shift;
222 int offset = reg & (BIT(bank_shift) - 1);
223
224
225 if (reg & REG_ADDR_EXT) {
226 if (!(chip->driver_data & PCA_PCAL))
227 return false;
228 bank += 8;
229 }
230
231
232 if (!(BIT(bank) & checkbank))
233 return false;
234
235
236 if (offset >= NBANK(chip))
237 return false;
238
239 return true;
240}
241
242static bool pca953x_readable_register(struct device *dev, unsigned int reg)
243{
244 struct pca953x_chip *chip = dev_get_drvdata(dev);
245 u32 bank;
246
247 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
248 bank = PCA953x_BANK_INPUT | PCA953x_BANK_OUTPUT |
249 PCA953x_BANK_POLARITY | PCA953x_BANK_CONFIG;
250 } else {
251 bank = PCA957x_BANK_INPUT | PCA957x_BANK_OUTPUT |
252 PCA957x_BANK_POLARITY | PCA957x_BANK_CONFIG |
253 PCA957x_BANK_BUSHOLD;
254 }
255
256 if (chip->driver_data & PCA_PCAL) {
257 bank |= PCAL9xxx_BANK_IN_LATCH | PCAL9xxx_BANK_PULL_EN |
258 PCAL9xxx_BANK_PULL_SEL | PCAL9xxx_BANK_IRQ_MASK |
259 PCAL9xxx_BANK_IRQ_STAT;
260 }
261
262 return pca953x_check_register(chip, reg, bank);
263}
264
265static bool pca953x_writeable_register(struct device *dev, unsigned int reg)
266{
267 struct pca953x_chip *chip = dev_get_drvdata(dev);
268 u32 bank;
269
270 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
271 bank = PCA953x_BANK_OUTPUT | PCA953x_BANK_POLARITY |
272 PCA953x_BANK_CONFIG;
273 } else {
274 bank = PCA957x_BANK_OUTPUT | PCA957x_BANK_POLARITY |
275 PCA957x_BANK_CONFIG | PCA957x_BANK_BUSHOLD;
276 }
277
278 if (chip->driver_data & PCA_PCAL)
279 bank |= PCAL9xxx_BANK_IN_LATCH | PCAL9xxx_BANK_PULL_EN |
280 PCAL9xxx_BANK_PULL_SEL | PCAL9xxx_BANK_IRQ_MASK;
281
282 return pca953x_check_register(chip, reg, bank);
283}
284
285static bool pca953x_volatile_register(struct device *dev, unsigned int reg)
286{
287 struct pca953x_chip *chip = dev_get_drvdata(dev);
288 u32 bank;
289
290 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE)
291 bank = PCA953x_BANK_INPUT;
292 else
293 bank = PCA957x_BANK_INPUT;
294
295 if (chip->driver_data & PCA_PCAL)
296 bank |= PCAL9xxx_BANK_IRQ_STAT;
297
298 return pca953x_check_register(chip, reg, bank);
299}
300
301static const struct regmap_config pca953x_i2c_regmap = {
302 .reg_bits = 8,
303 .val_bits = 8,
304
305 .readable_reg = pca953x_readable_register,
306 .writeable_reg = pca953x_writeable_register,
307 .volatile_reg = pca953x_volatile_register,
308
309 .cache_type = REGCACHE_RBTREE,
310
311 .max_register = 0xff,
312};
313
314static u8 pca953x_recalc_addr(struct pca953x_chip *chip, int reg, int off,
315 bool write, bool addrinc)
316{
317 int bank_shift = pca953x_bank_shift(chip);
318 int addr = (reg & PCAL_GPIO_MASK) << bank_shift;
319 int pinctrl = (reg & PCAL_PINCTRL_MASK) << 1;
320 u8 regaddr = pinctrl | addr | (off / BANK_SZ);
321
322
323 if (!addrinc)
324 return regaddr;
325
326
327 if (write && NBANK(chip) > 2)
328 regaddr |= REG_ADDR_AI;
329
330
331 if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE)
332 regaddr |= REG_ADDR_AI;
333
334 return regaddr;
335}
336
337static int pca953x_write_regs(struct pca953x_chip *chip, int reg, unsigned long *val)
338{
339 u8 regaddr = pca953x_recalc_addr(chip, reg, 0, true, true);
340 u8 value[MAX_BANK];
341 int i, ret;
342
343 for (i = 0; i < NBANK(chip); i++)
344 value[i] = bitmap_get_value8(val, i * BANK_SZ);
345
346 ret = regmap_bulk_write(chip->regmap, regaddr, value, NBANK(chip));
347 if (ret < 0) {
348 dev_err(&chip->client->dev, "failed writing register\n");
349 return ret;
350 }
351
352 return 0;
353}
354
355static int pca953x_read_regs(struct pca953x_chip *chip, int reg, unsigned long *val)
356{
357 u8 regaddr = pca953x_recalc_addr(chip, reg, 0, false, true);
358 u8 value[MAX_BANK];
359 int i, ret;
360
361 ret = regmap_bulk_read(chip->regmap, regaddr, value, NBANK(chip));
362 if (ret < 0) {
363 dev_err(&chip->client->dev, "failed reading register\n");
364 return ret;
365 }
366
367 for (i = 0; i < NBANK(chip); i++)
368 bitmap_set_value8(val, value[i], i * BANK_SZ);
369
370 return 0;
371}
372
373static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off)
374{
375 struct pca953x_chip *chip = gpiochip_get_data(gc);
376 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off,
377 true, false);
378 u8 bit = BIT(off % BANK_SZ);
379 int ret;
380
381 mutex_lock(&chip->i2c_lock);
382 ret = regmap_write_bits(chip->regmap, dirreg, bit, bit);
383 mutex_unlock(&chip->i2c_lock);
384 return ret;
385}
386
387static int pca953x_gpio_direction_output(struct gpio_chip *gc,
388 unsigned off, int val)
389{
390 struct pca953x_chip *chip = gpiochip_get_data(gc);
391 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off,
392 true, false);
393 u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off,
394 true, false);
395 u8 bit = BIT(off % BANK_SZ);
396 int ret;
397
398 mutex_lock(&chip->i2c_lock);
399
400 ret = regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0);
401 if (ret)
402 goto exit;
403
404
405 ret = regmap_write_bits(chip->regmap, dirreg, bit, 0);
406exit:
407 mutex_unlock(&chip->i2c_lock);
408 return ret;
409}
410
411static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off)
412{
413 struct pca953x_chip *chip = gpiochip_get_data(gc);
414 u8 inreg = pca953x_recalc_addr(chip, chip->regs->input, off,
415 true, false);
416 u8 bit = BIT(off % BANK_SZ);
417 u32 reg_val;
418 int ret;
419
420 mutex_lock(&chip->i2c_lock);
421 ret = regmap_read(chip->regmap, inreg, ®_val);
422 mutex_unlock(&chip->i2c_lock);
423 if (ret < 0) {
424
425
426
427
428
429
430 return 0;
431 }
432
433 return !!(reg_val & bit);
434}
435
436static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val)
437{
438 struct pca953x_chip *chip = gpiochip_get_data(gc);
439 u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off,
440 true, false);
441 u8 bit = BIT(off % BANK_SZ);
442
443 mutex_lock(&chip->i2c_lock);
444 regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0);
445 mutex_unlock(&chip->i2c_lock);
446}
447
448static int pca953x_gpio_get_direction(struct gpio_chip *gc, unsigned off)
449{
450 struct pca953x_chip *chip = gpiochip_get_data(gc);
451 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off,
452 true, false);
453 u8 bit = BIT(off % BANK_SZ);
454 u32 reg_val;
455 int ret;
456
457 mutex_lock(&chip->i2c_lock);
458 ret = regmap_read(chip->regmap, dirreg, ®_val);
459 mutex_unlock(&chip->i2c_lock);
460 if (ret < 0)
461 return ret;
462
463 if (reg_val & bit)
464 return GPIO_LINE_DIRECTION_IN;
465
466 return GPIO_LINE_DIRECTION_OUT;
467}
468
469static void pca953x_gpio_set_multiple(struct gpio_chip *gc,
470 unsigned long *mask, unsigned long *bits)
471{
472 struct pca953x_chip *chip = gpiochip_get_data(gc);
473 DECLARE_BITMAP(reg_val, MAX_LINE);
474 int ret;
475
476 mutex_lock(&chip->i2c_lock);
477 ret = pca953x_read_regs(chip, chip->regs->output, reg_val);
478 if (ret)
479 goto exit;
480
481 bitmap_replace(reg_val, reg_val, bits, mask, gc->ngpio);
482
483 pca953x_write_regs(chip, chip->regs->output, reg_val);
484exit:
485 mutex_unlock(&chip->i2c_lock);
486}
487
488static int pca953x_gpio_set_pull_up_down(struct pca953x_chip *chip,
489 unsigned int offset,
490 unsigned long config)
491{
492 u8 pull_en_reg = pca953x_recalc_addr(chip, PCAL953X_PULL_EN, offset,
493 true, false);
494 u8 pull_sel_reg = pca953x_recalc_addr(chip, PCAL953X_PULL_SEL, offset,
495 true, false);
496 u8 bit = BIT(offset % BANK_SZ);
497 int ret;
498
499
500
501
502
503 if (!(chip->driver_data & PCA_PCAL))
504 return -ENOTSUPP;
505
506 mutex_lock(&chip->i2c_lock);
507
508
509 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0);
510 if (ret)
511 goto exit;
512
513
514 if (config == PIN_CONFIG_BIAS_PULL_UP)
515 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit);
516 else if (config == PIN_CONFIG_BIAS_PULL_DOWN)
517 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0);
518 if (ret)
519 goto exit;
520
521
522 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit);
523
524exit:
525 mutex_unlock(&chip->i2c_lock);
526 return ret;
527}
528
529static int pca953x_gpio_set_config(struct gpio_chip *gc, unsigned int offset,
530 unsigned long config)
531{
532 struct pca953x_chip *chip = gpiochip_get_data(gc);
533
534 switch (config) {
535 case PIN_CONFIG_BIAS_PULL_UP:
536 case PIN_CONFIG_BIAS_PULL_DOWN:
537 return pca953x_gpio_set_pull_up_down(chip, offset, config);
538 default:
539 return -ENOTSUPP;
540 }
541}
542
543static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios)
544{
545 struct gpio_chip *gc;
546
547 gc = &chip->gpio_chip;
548
549 gc->direction_input = pca953x_gpio_direction_input;
550 gc->direction_output = pca953x_gpio_direction_output;
551 gc->get = pca953x_gpio_get_value;
552 gc->set = pca953x_gpio_set_value;
553 gc->get_direction = pca953x_gpio_get_direction;
554 gc->set_multiple = pca953x_gpio_set_multiple;
555 gc->set_config = pca953x_gpio_set_config;
556 gc->can_sleep = true;
557
558 gc->base = chip->gpio_start;
559 gc->ngpio = gpios;
560 gc->label = dev_name(&chip->client->dev);
561 gc->parent = &chip->client->dev;
562 gc->owner = THIS_MODULE;
563 gc->names = chip->names;
564}
565
566#ifdef CONFIG_GPIO_PCA953X_IRQ
567static void pca953x_irq_mask(struct irq_data *d)
568{
569 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
570 struct pca953x_chip *chip = gpiochip_get_data(gc);
571 irq_hw_number_t hwirq = irqd_to_hwirq(d);
572
573 clear_bit(hwirq, chip->irq_mask);
574}
575
576static void pca953x_irq_unmask(struct irq_data *d)
577{
578 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
579 struct pca953x_chip *chip = gpiochip_get_data(gc);
580 irq_hw_number_t hwirq = irqd_to_hwirq(d);
581
582 set_bit(hwirq, chip->irq_mask);
583}
584
585static int pca953x_irq_set_wake(struct irq_data *d, unsigned int on)
586{
587 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
588 struct pca953x_chip *chip = gpiochip_get_data(gc);
589
590 if (on)
591 atomic_inc(&chip->wakeup_path);
592 else
593 atomic_dec(&chip->wakeup_path);
594
595 return irq_set_irq_wake(chip->client->irq, on);
596}
597
598static void pca953x_irq_bus_lock(struct irq_data *d)
599{
600 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
601 struct pca953x_chip *chip = gpiochip_get_data(gc);
602
603 mutex_lock(&chip->irq_lock);
604}
605
606static void pca953x_irq_bus_sync_unlock(struct irq_data *d)
607{
608 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
609 struct pca953x_chip *chip = gpiochip_get_data(gc);
610 DECLARE_BITMAP(irq_mask, MAX_LINE);
611 DECLARE_BITMAP(reg_direction, MAX_LINE);
612 int level;
613
614 pca953x_read_regs(chip, chip->regs->direction, reg_direction);
615
616 if (chip->driver_data & PCA_PCAL) {
617
618 pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask);
619
620 bitmap_complement(irq_mask, chip->irq_mask, gc->ngpio);
621
622
623 pca953x_write_regs(chip, PCAL953X_INT_MASK, irq_mask);
624 }
625
626 bitmap_or(irq_mask, chip->irq_trig_fall, chip->irq_trig_raise, gc->ngpio);
627 bitmap_and(irq_mask, irq_mask, reg_direction, gc->ngpio);
628
629
630 for_each_set_bit(level, irq_mask, gc->ngpio)
631 pca953x_gpio_direction_input(&chip->gpio_chip, level);
632
633 mutex_unlock(&chip->irq_lock);
634}
635
636static int pca953x_irq_set_type(struct irq_data *d, unsigned int type)
637{
638 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
639 struct pca953x_chip *chip = gpiochip_get_data(gc);
640 irq_hw_number_t hwirq = irqd_to_hwirq(d);
641
642 if (!(type & IRQ_TYPE_EDGE_BOTH)) {
643 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n",
644 d->irq, type);
645 return -EINVAL;
646 }
647
648 assign_bit(hwirq, chip->irq_trig_fall, type & IRQ_TYPE_EDGE_FALLING);
649 assign_bit(hwirq, chip->irq_trig_raise, type & IRQ_TYPE_EDGE_RISING);
650
651 return 0;
652}
653
654static void pca953x_irq_shutdown(struct irq_data *d)
655{
656 struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
657 struct pca953x_chip *chip = gpiochip_get_data(gc);
658 irq_hw_number_t hwirq = irqd_to_hwirq(d);
659
660 clear_bit(hwirq, chip->irq_trig_raise);
661 clear_bit(hwirq, chip->irq_trig_fall);
662}
663
664static bool pca953x_irq_pending(struct pca953x_chip *chip, unsigned long *pending)
665{
666 struct gpio_chip *gc = &chip->gpio_chip;
667 DECLARE_BITMAP(reg_direction, MAX_LINE);
668 DECLARE_BITMAP(old_stat, MAX_LINE);
669 DECLARE_BITMAP(cur_stat, MAX_LINE);
670 DECLARE_BITMAP(new_stat, MAX_LINE);
671 DECLARE_BITMAP(trigger, MAX_LINE);
672 int ret;
673
674 if (chip->driver_data & PCA_PCAL) {
675
676 ret = pca953x_read_regs(chip, PCAL953X_INT_STAT, trigger);
677 if (ret)
678 return false;
679
680
681 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat);
682 if (ret)
683 return false;
684
685
686 bitmap_replace(new_stat, chip->irq_trig_fall, chip->irq_trig_raise, cur_stat, gc->ngpio);
687
688 bitmap_and(pending, new_stat, trigger, gc->ngpio);
689
690 return !bitmap_empty(pending, gc->ngpio);
691 }
692
693 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat);
694 if (ret)
695 return false;
696
697
698 pca953x_read_regs(chip, chip->regs->direction, reg_direction);
699
700 bitmap_copy(old_stat, chip->irq_stat, gc->ngpio);
701
702 bitmap_and(new_stat, cur_stat, reg_direction, gc->ngpio);
703 bitmap_xor(cur_stat, new_stat, old_stat, gc->ngpio);
704 bitmap_and(trigger, cur_stat, chip->irq_mask, gc->ngpio);
705
706 if (bitmap_empty(trigger, gc->ngpio))
707 return false;
708
709 bitmap_copy(chip->irq_stat, new_stat, gc->ngpio);
710
711 bitmap_and(cur_stat, chip->irq_trig_fall, old_stat, gc->ngpio);
712 bitmap_and(old_stat, chip->irq_trig_raise, new_stat, gc->ngpio);
713 bitmap_or(new_stat, old_stat, cur_stat, gc->ngpio);
714 bitmap_and(pending, new_stat, trigger, gc->ngpio);
715
716 return !bitmap_empty(pending, gc->ngpio);
717}
718
719static irqreturn_t pca953x_irq_handler(int irq, void *devid)
720{
721 struct pca953x_chip *chip = devid;
722 struct gpio_chip *gc = &chip->gpio_chip;
723 DECLARE_BITMAP(pending, MAX_LINE);
724 int level;
725
726 if (!pca953x_irq_pending(chip, pending))
727 return IRQ_NONE;
728
729 for_each_set_bit(level, pending, gc->ngpio)
730 handle_nested_irq(irq_find_mapping(gc->irq.domain, level));
731
732 return IRQ_HANDLED;
733}
734
735static int pca953x_irq_setup(struct pca953x_chip *chip, int irq_base)
736{
737 struct i2c_client *client = chip->client;
738 struct irq_chip *irq_chip = &chip->irq_chip;
739 DECLARE_BITMAP(reg_direction, MAX_LINE);
740 DECLARE_BITMAP(irq_stat, MAX_LINE);
741 int ret;
742
743 if (!client->irq)
744 return 0;
745
746 if (irq_base == -1)
747 return 0;
748
749 if (!(chip->driver_data & PCA_INT))
750 return 0;
751
752 ret = pca953x_read_regs(chip, chip->regs->input, irq_stat);
753 if (ret)
754 return ret;
755
756
757
758
759
760
761 pca953x_read_regs(chip, chip->regs->direction, reg_direction);
762 bitmap_and(chip->irq_stat, irq_stat, reg_direction, chip->gpio_chip.ngpio);
763 mutex_init(&chip->irq_lock);
764
765 ret = devm_request_threaded_irq(&client->dev, client->irq,
766 NULL, pca953x_irq_handler,
767 IRQF_TRIGGER_LOW | IRQF_ONESHOT |
768 IRQF_SHARED,
769 dev_name(&client->dev), chip);
770 if (ret) {
771 dev_err(&client->dev, "failed to request irq %d\n",
772 client->irq);
773 return ret;
774 }
775
776 irq_chip->name = dev_name(&chip->client->dev);
777 irq_chip->irq_mask = pca953x_irq_mask;
778 irq_chip->irq_unmask = pca953x_irq_unmask;
779 irq_chip->irq_set_wake = pca953x_irq_set_wake;
780 irq_chip->irq_bus_lock = pca953x_irq_bus_lock;
781 irq_chip->irq_bus_sync_unlock = pca953x_irq_bus_sync_unlock;
782 irq_chip->irq_set_type = pca953x_irq_set_type;
783 irq_chip->irq_shutdown = pca953x_irq_shutdown;
784
785 ret = gpiochip_irqchip_add_nested(&chip->gpio_chip, irq_chip,
786 irq_base, handle_simple_irq,
787 IRQ_TYPE_NONE);
788 if (ret) {
789 dev_err(&client->dev,
790 "could not connect irqchip to gpiochip\n");
791 return ret;
792 }
793
794 gpiochip_set_nested_irqchip(&chip->gpio_chip, irq_chip, client->irq);
795
796 return 0;
797}
798
799#else
800static int pca953x_irq_setup(struct pca953x_chip *chip,
801 int irq_base)
802{
803 struct i2c_client *client = chip->client;
804
805 if (client->irq && irq_base != -1 && (chip->driver_data & PCA_INT))
806 dev_warn(&client->dev, "interrupt support not compiled in\n");
807
808 return 0;
809}
810#endif
811
812static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert)
813{
814 DECLARE_BITMAP(val, MAX_LINE);
815 int ret;
816
817 ret = regcache_sync_region(chip->regmap, chip->regs->output,
818 chip->regs->output + NBANK(chip));
819 if (ret)
820 goto out;
821
822 ret = regcache_sync_region(chip->regmap, chip->regs->direction,
823 chip->regs->direction + NBANK(chip));
824 if (ret)
825 goto out;
826
827
828 if (invert)
829 bitmap_fill(val, MAX_LINE);
830 else
831 bitmap_zero(val, MAX_LINE);
832
833 ret = pca953x_write_regs(chip, chip->regs->invert, val);
834out:
835 return ret;
836}
837
838static int device_pca957x_init(struct pca953x_chip *chip, u32 invert)
839{
840 DECLARE_BITMAP(val, MAX_LINE);
841 int ret;
842
843 ret = device_pca95xx_init(chip, invert);
844 if (ret)
845 goto out;
846
847
848 memset(val, 0x02, NBANK(chip));
849 ret = pca953x_write_regs(chip, PCA957X_BKEN, val);
850 if (ret)
851 goto out;
852
853 return 0;
854out:
855 return ret;
856}
857
858static const struct of_device_id pca953x_dt_ids[];
859
860static int pca953x_probe(struct i2c_client *client,
861 const struct i2c_device_id *i2c_id)
862{
863 struct pca953x_platform_data *pdata;
864 struct pca953x_chip *chip;
865 int irq_base = 0;
866 int ret;
867 u32 invert = 0;
868 struct regulator *reg;
869
870 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
871 if (chip == NULL)
872 return -ENOMEM;
873
874 pdata = dev_get_platdata(&client->dev);
875 if (pdata) {
876 irq_base = pdata->irq_base;
877 chip->gpio_start = pdata->gpio_base;
878 invert = pdata->invert;
879 chip->names = pdata->names;
880 } else {
881 struct gpio_desc *reset_gpio;
882
883 chip->gpio_start = -1;
884 irq_base = 0;
885
886
887
888
889
890
891
892
893 reset_gpio = devm_gpiod_get_optional(&client->dev, "reset",
894 GPIOD_OUT_LOW);
895 if (IS_ERR(reset_gpio))
896 return PTR_ERR(reset_gpio);
897 }
898
899 chip->client = client;
900
901 reg = devm_regulator_get(&client->dev, "vcc");
902 if (IS_ERR(reg)) {
903 ret = PTR_ERR(reg);
904 if (ret != -EPROBE_DEFER)
905 dev_err(&client->dev, "reg get err: %d\n", ret);
906 return ret;
907 }
908 ret = regulator_enable(reg);
909 if (ret) {
910 dev_err(&client->dev, "reg en err: %d\n", ret);
911 return ret;
912 }
913 chip->regulator = reg;
914
915 if (i2c_id) {
916 chip->driver_data = i2c_id->driver_data;
917 } else {
918 const void *match;
919
920 match = device_get_match_data(&client->dev);
921 if (!match) {
922 ret = -ENODEV;
923 goto err_exit;
924 }
925
926 chip->driver_data = (uintptr_t)match;
927 }
928
929 i2c_set_clientdata(client, chip);
930
931 chip->regmap = devm_regmap_init_i2c(client, &pca953x_i2c_regmap);
932 if (IS_ERR(chip->regmap)) {
933 ret = PTR_ERR(chip->regmap);
934 goto err_exit;
935 }
936
937 regcache_mark_dirty(chip->regmap);
938
939 mutex_init(&chip->i2c_lock);
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956 lockdep_set_subclass(&chip->i2c_lock,
957 i2c_adapter_depth(client->adapter));
958
959
960
961
962 pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK);
963
964 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) {
965 chip->regs = &pca953x_regs;
966 ret = device_pca95xx_init(chip, invert);
967 } else {
968 chip->regs = &pca957x_regs;
969 ret = device_pca957x_init(chip, invert);
970 }
971 if (ret)
972 goto err_exit;
973
974 ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip);
975 if (ret)
976 goto err_exit;
977
978 ret = pca953x_irq_setup(chip, irq_base);
979 if (ret)
980 goto err_exit;
981
982 if (pdata && pdata->setup) {
983 ret = pdata->setup(client, chip->gpio_chip.base,
984 chip->gpio_chip.ngpio, pdata->context);
985 if (ret < 0)
986 dev_warn(&client->dev, "setup failed, %d\n", ret);
987 }
988
989 return 0;
990
991err_exit:
992 regulator_disable(chip->regulator);
993 return ret;
994}
995
996static int pca953x_remove(struct i2c_client *client)
997{
998 struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev);
999 struct pca953x_chip *chip = i2c_get_clientdata(client);
1000 int ret;
1001
1002 if (pdata && pdata->teardown) {
1003 ret = pdata->teardown(client, chip->gpio_chip.base,
1004 chip->gpio_chip.ngpio, pdata->context);
1005 if (ret < 0)
1006 dev_err(&client->dev, "teardown failed, %d\n", ret);
1007 } else {
1008 ret = 0;
1009 }
1010
1011 regulator_disable(chip->regulator);
1012
1013 return ret;
1014}
1015
1016#ifdef CONFIG_PM_SLEEP
1017static int pca953x_regcache_sync(struct device *dev)
1018{
1019 struct pca953x_chip *chip = dev_get_drvdata(dev);
1020 int ret;
1021
1022
1023
1024
1025
1026 ret = regcache_sync_region(chip->regmap, chip->regs->direction,
1027 chip->regs->direction + NBANK(chip));
1028 if (ret) {
1029 dev_err(dev, "Failed to sync GPIO dir registers: %d\n", ret);
1030 return ret;
1031 }
1032
1033 ret = regcache_sync_region(chip->regmap, chip->regs->output,
1034 chip->regs->output + NBANK(chip));
1035 if (ret) {
1036 dev_err(dev, "Failed to sync GPIO out registers: %d\n", ret);
1037 return ret;
1038 }
1039
1040#ifdef CONFIG_GPIO_PCA953X_IRQ
1041 if (chip->driver_data & PCA_PCAL) {
1042 ret = regcache_sync_region(chip->regmap, PCAL953X_IN_LATCH,
1043 PCAL953X_IN_LATCH + NBANK(chip));
1044 if (ret) {
1045 dev_err(dev, "Failed to sync INT latch registers: %d\n",
1046 ret);
1047 return ret;
1048 }
1049
1050 ret = regcache_sync_region(chip->regmap, PCAL953X_INT_MASK,
1051 PCAL953X_INT_MASK + NBANK(chip));
1052 if (ret) {
1053 dev_err(dev, "Failed to sync INT mask registers: %d\n",
1054 ret);
1055 return ret;
1056 }
1057 }
1058#endif
1059
1060 return 0;
1061}
1062
1063static int pca953x_suspend(struct device *dev)
1064{
1065 struct pca953x_chip *chip = dev_get_drvdata(dev);
1066
1067 regcache_cache_only(chip->regmap, true);
1068
1069 if (atomic_read(&chip->wakeup_path))
1070 device_set_wakeup_path(dev);
1071 else
1072 regulator_disable(chip->regulator);
1073
1074 return 0;
1075}
1076
1077static int pca953x_resume(struct device *dev)
1078{
1079 struct pca953x_chip *chip = dev_get_drvdata(dev);
1080 int ret;
1081
1082 if (!atomic_read(&chip->wakeup_path)) {
1083 ret = regulator_enable(chip->regulator);
1084 if (ret) {
1085 dev_err(dev, "Failed to enable regulator: %d\n", ret);
1086 return 0;
1087 }
1088 }
1089
1090 regcache_cache_only(chip->regmap, false);
1091 regcache_mark_dirty(chip->regmap);
1092 ret = pca953x_regcache_sync(dev);
1093 if (ret)
1094 return ret;
1095
1096 ret = regcache_sync(chip->regmap);
1097 if (ret) {
1098 dev_err(dev, "Failed to restore register map: %d\n", ret);
1099 return ret;
1100 }
1101
1102 return 0;
1103}
1104#endif
1105
1106
1107#define OF_953X(__nrgpio, __int) (void *)(__nrgpio | PCA953X_TYPE | __int)
1108#define OF_957X(__nrgpio, __int) (void *)(__nrgpio | PCA957X_TYPE | __int)
1109
1110static const struct of_device_id pca953x_dt_ids[] = {
1111 { .compatible = "nxp,pca6416", .data = OF_953X(16, PCA_INT), },
1112 { .compatible = "nxp,pca9505", .data = OF_953X(40, PCA_INT), },
1113 { .compatible = "nxp,pca9534", .data = OF_953X( 8, PCA_INT), },
1114 { .compatible = "nxp,pca9535", .data = OF_953X(16, PCA_INT), },
1115 { .compatible = "nxp,pca9536", .data = OF_953X( 4, 0), },
1116 { .compatible = "nxp,pca9537", .data = OF_953X( 4, PCA_INT), },
1117 { .compatible = "nxp,pca9538", .data = OF_953X( 8, PCA_INT), },
1118 { .compatible = "nxp,pca9539", .data = OF_953X(16, PCA_INT), },
1119 { .compatible = "nxp,pca9554", .data = OF_953X( 8, PCA_INT), },
1120 { .compatible = "nxp,pca9555", .data = OF_953X(16, PCA_INT), },
1121 { .compatible = "nxp,pca9556", .data = OF_953X( 8, 0), },
1122 { .compatible = "nxp,pca9557", .data = OF_953X( 8, 0), },
1123 { .compatible = "nxp,pca9574", .data = OF_957X( 8, PCA_INT), },
1124 { .compatible = "nxp,pca9575", .data = OF_957X(16, PCA_INT), },
1125 { .compatible = "nxp,pca9698", .data = OF_953X(40, 0), },
1126
1127 { .compatible = "nxp,pcal6416", .data = OF_953X(16, PCA_LATCH_INT), },
1128 { .compatible = "nxp,pcal6524", .data = OF_953X(24, PCA_LATCH_INT), },
1129 { .compatible = "nxp,pcal9555a", .data = OF_953X(16, PCA_LATCH_INT), },
1130
1131 { .compatible = "maxim,max7310", .data = OF_953X( 8, 0), },
1132 { .compatible = "maxim,max7312", .data = OF_953X(16, PCA_INT), },
1133 { .compatible = "maxim,max7313", .data = OF_953X(16, PCA_INT), },
1134 { .compatible = "maxim,max7315", .data = OF_953X( 8, PCA_INT), },
1135 { .compatible = "maxim,max7318", .data = OF_953X(16, PCA_INT), },
1136
1137 { .compatible = "ti,pca6107", .data = OF_953X( 8, PCA_INT), },
1138 { .compatible = "ti,pca9536", .data = OF_953X( 4, 0), },
1139 { .compatible = "ti,tca6408", .data = OF_953X( 8, PCA_INT), },
1140 { .compatible = "ti,tca6416", .data = OF_953X(16, PCA_INT), },
1141 { .compatible = "ti,tca6424", .data = OF_953X(24, PCA_INT), },
1142 { .compatible = "ti,tca9539", .data = OF_953X(16, PCA_INT), },
1143
1144 { .compatible = "onnn,cat9554", .data = OF_953X( 8, PCA_INT), },
1145 { .compatible = "onnn,pca9654", .data = OF_953X( 8, PCA_INT), },
1146
1147 { .compatible = "exar,xra1202", .data = OF_953X( 8, 0), },
1148 { }
1149};
1150
1151MODULE_DEVICE_TABLE(of, pca953x_dt_ids);
1152
1153static SIMPLE_DEV_PM_OPS(pca953x_pm_ops, pca953x_suspend, pca953x_resume);
1154
1155static struct i2c_driver pca953x_driver = {
1156 .driver = {
1157 .name = "pca953x",
1158 .pm = &pca953x_pm_ops,
1159 .of_match_table = pca953x_dt_ids,
1160 .acpi_match_table = ACPI_PTR(pca953x_acpi_ids),
1161 },
1162 .probe = pca953x_probe,
1163 .remove = pca953x_remove,
1164 .id_table = pca953x_id,
1165};
1166
1167static int __init pca953x_init(void)
1168{
1169 return i2c_add_driver(&pca953x_driver);
1170}
1171
1172
1173
1174subsys_initcall(pca953x_init);
1175
1176static void __exit pca953x_exit(void)
1177{
1178 i2c_del_driver(&pca953x_driver);
1179}
1180module_exit(pca953x_exit);
1181
1182MODULE_AUTHOR("eric miao <eric.miao@marvell.com>");
1183MODULE_DESCRIPTION("GPIO expander driver for PCA953x");
1184MODULE_LICENSE("GPL");
1185