Lines Matching +full:off +full:- +full:chip

1 // SPDX-License-Identifier: GPL-2.0-only
124 * relative. Since first controller (gpio-sch.c) and
125 * second (gpio-dwapb.c) are at the fixed bases, we may
143 *pin = agpio->pin_table[0]; in pca953x_acpi_get_pin()
150 int pin = -ENOENT, ret; in pca953x_acpi_find_pin()
161 static inline int pca953x_acpi_find_pin(struct device *dev) { return -ENXIO; } in pca953x_acpi_find_pin()
175 return -EINVAL; in pca953x_acpi_get_irq()
200 #define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ) argument
247 static int pca953x_bank_shift(struct pca953x_chip *chip) in pca953x_bank_shift() argument
249 return fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); in pca953x_bank_shift()
271 * - Standard set, below 0x40, each port can be replicated up to 8 times
272 * - PCA953x standard
277 * - PCA957x with mixed up registers
284 * - Extended set, above 0x40, often chip specific.
285 * - PCAL6524/PCAL9555A with custom PCAL IRQ handling:
287 * Pull-up/pull-down enable reg 0x40 + 3 * bank_size RW
288 * Pull-up/pull-down select reg 0x40 + 4 * bank_size RW
292 * - Registers with bit 0x80 set, the AI bit
297 static bool pca953x_check_register(struct pca953x_chip *chip, unsigned int reg, in pca953x_check_register() argument
300 int bank_shift = pca953x_bank_shift(chip); in pca953x_check_register()
302 int offset = reg & (BIT(bank_shift) - 1); in pca953x_check_register()
306 if (!(chip->driver_data & PCA_PCAL)) in pca953x_check_register()
316 if (offset >= NBANK(chip)) in pca953x_check_register()
324 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_readable_register() local
327 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) { in pca953x_readable_register()
336 if (chip->driver_data & PCA_PCAL) { in pca953x_readable_register()
342 return pca953x_check_register(chip, reg, bank); in pca953x_readable_register()
347 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_writeable_register() local
350 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) { in pca953x_writeable_register()
358 if (chip->driver_data & PCA_PCAL) in pca953x_writeable_register()
362 return pca953x_check_register(chip, reg, bank); in pca953x_writeable_register()
367 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_volatile_register() local
370 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) in pca953x_volatile_register()
375 if (chip->driver_data & PCA_PCAL) in pca953x_volatile_register()
378 return pca953x_check_register(chip, reg, bank); in pca953x_volatile_register()
410 static u8 pca953x_recalc_addr(struct pca953x_chip *chip, int reg, int off) in pca953x_recalc_addr() argument
412 int bank_shift = pca953x_bank_shift(chip); in pca953x_recalc_addr()
415 u8 regaddr = pinctrl | addr | (off / BANK_SZ); in pca953x_recalc_addr()
420 static int pca953x_write_regs(struct pca953x_chip *chip, int reg, unsigned long *val) in pca953x_write_regs() argument
422 u8 regaddr = pca953x_recalc_addr(chip, reg, 0); in pca953x_write_regs()
426 for (i = 0; i < NBANK(chip); i++) in pca953x_write_regs()
429 ret = regmap_bulk_write(chip->regmap, regaddr, value, NBANK(chip)); in pca953x_write_regs()
431 dev_err(&chip->client->dev, "failed writing register\n"); in pca953x_write_regs()
438 static int pca953x_read_regs(struct pca953x_chip *chip, int reg, unsigned long *val) in pca953x_read_regs() argument
440 u8 regaddr = pca953x_recalc_addr(chip, reg, 0); in pca953x_read_regs()
444 ret = regmap_bulk_read(chip->regmap, regaddr, value, NBANK(chip)); in pca953x_read_regs()
446 dev_err(&chip->client->dev, "failed reading register\n"); in pca953x_read_regs()
450 for (i = 0; i < NBANK(chip); i++) in pca953x_read_regs()
456 static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off) in pca953x_gpio_direction_input() argument
458 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_direction_input() local
459 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_direction_input()
460 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_direction_input()
463 mutex_lock(&chip->i2c_lock); in pca953x_gpio_direction_input()
464 ret = regmap_write_bits(chip->regmap, dirreg, bit, bit); in pca953x_gpio_direction_input()
465 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_direction_input()
470 unsigned off, int val) in pca953x_gpio_direction_output() argument
472 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_direction_output() local
473 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_direction_output()
474 u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off); in pca953x_gpio_direction_output()
475 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_direction_output()
478 mutex_lock(&chip->i2c_lock); in pca953x_gpio_direction_output()
480 ret = regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0); in pca953x_gpio_direction_output()
485 ret = regmap_write_bits(chip->regmap, dirreg, bit, 0); in pca953x_gpio_direction_output()
487 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_direction_output()
491 static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off) in pca953x_gpio_get_value() argument
493 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_get_value() local
494 u8 inreg = pca953x_recalc_addr(chip, chip->regs->input, off); in pca953x_gpio_get_value()
495 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_get_value()
499 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_value()
500 ret = regmap_read(chip->regmap, inreg, &reg_val); in pca953x_gpio_get_value()
501 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_value()
515 static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val) in pca953x_gpio_set_value() argument
517 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_set_value() local
518 u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off); in pca953x_gpio_set_value()
519 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_set_value()
521 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_value()
522 regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0); in pca953x_gpio_set_value()
523 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_value()
526 static int pca953x_gpio_get_direction(struct gpio_chip *gc, unsigned off) in pca953x_gpio_get_direction() argument
528 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_get_direction() local
529 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_get_direction()
530 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_get_direction()
534 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_direction()
535 ret = regmap_read(chip->regmap, dirreg, &reg_val); in pca953x_gpio_get_direction()
536 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_direction()
549 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_get_multiple() local
553 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_multiple()
554 ret = pca953x_read_regs(chip, chip->regs->input, reg_val); in pca953x_gpio_get_multiple()
555 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_multiple()
559 bitmap_replace(bits, bits, reg_val, mask, gc->ngpio); in pca953x_gpio_get_multiple()
566 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_set_multiple() local
570 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_multiple()
571 ret = pca953x_read_regs(chip, chip->regs->output, reg_val); in pca953x_gpio_set_multiple()
575 bitmap_replace(reg_val, reg_val, bits, mask, gc->ngpio); in pca953x_gpio_set_multiple()
577 pca953x_write_regs(chip, chip->regs->output, reg_val); in pca953x_gpio_set_multiple()
579 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_multiple()
582 static int pca953x_gpio_set_pull_up_down(struct pca953x_chip *chip, in pca953x_gpio_set_pull_up_down() argument
586 u8 pull_en_reg = pca953x_recalc_addr(chip, PCAL953X_PULL_EN, offset); in pca953x_gpio_set_pull_up_down()
587 u8 pull_sel_reg = pca953x_recalc_addr(chip, PCAL953X_PULL_SEL, offset); in pca953x_gpio_set_pull_up_down()
592 * pull-up/pull-down configuration requires PCAL extended in pca953x_gpio_set_pull_up_down()
595 if (!(chip->driver_data & PCA_PCAL)) in pca953x_gpio_set_pull_up_down()
596 return -ENOTSUPP; in pca953x_gpio_set_pull_up_down()
598 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_pull_up_down()
600 /* Disable pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
601 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); in pca953x_gpio_set_pull_up_down()
605 /* Configure pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
607 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit); in pca953x_gpio_set_pull_up_down()
609 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0); in pca953x_gpio_set_pull_up_down()
613 /* Enable pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
614 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); in pca953x_gpio_set_pull_up_down()
617 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_pull_up_down()
624 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_set_config() local
629 return pca953x_gpio_set_pull_up_down(chip, offset, config); in pca953x_gpio_set_config()
631 return -ENOTSUPP; in pca953x_gpio_set_config()
635 static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios) in pca953x_setup_gpio() argument
639 gc = &chip->gpio_chip; in pca953x_setup_gpio()
641 gc->direction_input = pca953x_gpio_direction_input; in pca953x_setup_gpio()
642 gc->direction_output = pca953x_gpio_direction_output; in pca953x_setup_gpio()
643 gc->get = pca953x_gpio_get_value; in pca953x_setup_gpio()
644 gc->set = pca953x_gpio_set_value; in pca953x_setup_gpio()
645 gc->get_direction = pca953x_gpio_get_direction; in pca953x_setup_gpio()
646 gc->get_multiple = pca953x_gpio_get_multiple; in pca953x_setup_gpio()
647 gc->set_multiple = pca953x_gpio_set_multiple; in pca953x_setup_gpio()
648 gc->set_config = pca953x_gpio_set_config; in pca953x_setup_gpio()
649 gc->can_sleep = true; in pca953x_setup_gpio()
651 gc->base = chip->gpio_start; in pca953x_setup_gpio()
652 gc->ngpio = gpios; in pca953x_setup_gpio()
653 gc->label = dev_name(&chip->client->dev); in pca953x_setup_gpio()
654 gc->parent = &chip->client->dev; in pca953x_setup_gpio()
655 gc->owner = THIS_MODULE; in pca953x_setup_gpio()
656 gc->names = chip->names; in pca953x_setup_gpio()
663 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_mask() local
666 clear_bit(hwirq, chip->irq_mask); in pca953x_irq_mask()
672 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_unmask() local
675 set_bit(hwirq, chip->irq_mask); in pca953x_irq_unmask()
681 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_set_wake() local
684 atomic_inc(&chip->wakeup_path); in pca953x_irq_set_wake()
686 atomic_dec(&chip->wakeup_path); in pca953x_irq_set_wake()
688 return irq_set_irq_wake(chip->client->irq, on); in pca953x_irq_set_wake()
694 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_bus_lock() local
696 mutex_lock(&chip->irq_lock); in pca953x_irq_bus_lock()
702 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_bus_sync_unlock() local
707 if (chip->driver_data & PCA_PCAL) { in pca953x_irq_bus_sync_unlock()
708 /* Enable latch on interrupt-enabled inputs */ in pca953x_irq_bus_sync_unlock()
709 pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask); in pca953x_irq_bus_sync_unlock()
711 bitmap_complement(irq_mask, chip->irq_mask, gc->ngpio); in pca953x_irq_bus_sync_unlock()
714 pca953x_write_regs(chip, PCAL953X_INT_MASK, irq_mask); in pca953x_irq_bus_sync_unlock()
718 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_bus_sync_unlock()
720 bitmap_or(irq_mask, chip->irq_trig_fall, chip->irq_trig_raise, gc->ngpio); in pca953x_irq_bus_sync_unlock()
721 bitmap_complement(reg_direction, reg_direction, gc->ngpio); in pca953x_irq_bus_sync_unlock()
722 bitmap_and(irq_mask, irq_mask, reg_direction, gc->ngpio); in pca953x_irq_bus_sync_unlock()
725 for_each_set_bit(level, irq_mask, gc->ngpio) in pca953x_irq_bus_sync_unlock()
726 pca953x_gpio_direction_input(&chip->gpio_chip, level); in pca953x_irq_bus_sync_unlock()
728 mutex_unlock(&chip->irq_lock); in pca953x_irq_bus_sync_unlock()
734 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_set_type() local
738 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n", in pca953x_irq_set_type()
739 d->irq, type); in pca953x_irq_set_type()
740 return -EINVAL; in pca953x_irq_set_type()
743 assign_bit(hwirq, chip->irq_trig_fall, type & IRQ_TYPE_EDGE_FALLING); in pca953x_irq_set_type()
744 assign_bit(hwirq, chip->irq_trig_raise, type & IRQ_TYPE_EDGE_RISING); in pca953x_irq_set_type()
752 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_shutdown() local
755 clear_bit(hwirq, chip->irq_trig_raise); in pca953x_irq_shutdown()
756 clear_bit(hwirq, chip->irq_trig_fall); in pca953x_irq_shutdown()
759 static bool pca953x_irq_pending(struct pca953x_chip *chip, unsigned long *pending) in pca953x_irq_pending() argument
761 struct gpio_chip *gc = &chip->gpio_chip; in pca953x_irq_pending()
769 if (chip->driver_data & PCA_PCAL) { in pca953x_irq_pending()
771 ret = pca953x_read_regs(chip, PCAL953X_INT_STAT, trigger); in pca953x_irq_pending()
776 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat); in pca953x_irq_pending()
781 bitmap_replace(new_stat, chip->irq_trig_fall, chip->irq_trig_raise, cur_stat, gc->ngpio); in pca953x_irq_pending()
783 bitmap_and(pending, new_stat, trigger, gc->ngpio); in pca953x_irq_pending()
785 return !bitmap_empty(pending, gc->ngpio); in pca953x_irq_pending()
788 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat); in pca953x_irq_pending()
793 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_pending()
795 bitmap_copy(old_stat, chip->irq_stat, gc->ngpio); in pca953x_irq_pending()
797 bitmap_and(new_stat, cur_stat, reg_direction, gc->ngpio); in pca953x_irq_pending()
798 bitmap_xor(cur_stat, new_stat, old_stat, gc->ngpio); in pca953x_irq_pending()
799 bitmap_and(trigger, cur_stat, chip->irq_mask, gc->ngpio); in pca953x_irq_pending()
801 if (bitmap_empty(trigger, gc->ngpio)) in pca953x_irq_pending()
804 bitmap_copy(chip->irq_stat, new_stat, gc->ngpio); in pca953x_irq_pending()
806 bitmap_and(cur_stat, chip->irq_trig_fall, old_stat, gc->ngpio); in pca953x_irq_pending()
807 bitmap_and(old_stat, chip->irq_trig_raise, new_stat, gc->ngpio); in pca953x_irq_pending()
808 bitmap_or(new_stat, old_stat, cur_stat, gc->ngpio); in pca953x_irq_pending()
809 bitmap_and(pending, new_stat, trigger, gc->ngpio); in pca953x_irq_pending()
811 return !bitmap_empty(pending, gc->ngpio); in pca953x_irq_pending()
816 struct pca953x_chip *chip = devid; in pca953x_irq_handler() local
817 struct gpio_chip *gc = &chip->gpio_chip; in pca953x_irq_handler()
824 mutex_lock(&chip->i2c_lock); in pca953x_irq_handler()
825 ret = pca953x_irq_pending(chip, pending); in pca953x_irq_handler()
826 mutex_unlock(&chip->i2c_lock); in pca953x_irq_handler()
831 for_each_set_bit(level, pending, gc->ngpio) { in pca953x_irq_handler()
832 int nested_irq = irq_find_mapping(gc->irq.domain, level); in pca953x_irq_handler()
835 dev_warn_ratelimited(gc->parent, "unmapped interrupt %d\n", level); in pca953x_irq_handler()
847 static int pca953x_irq_setup(struct pca953x_chip *chip, int irq_base) in pca953x_irq_setup() argument
849 struct i2c_client *client = chip->client; in pca953x_irq_setup()
850 struct irq_chip *irq_chip = &chip->irq_chip; in pca953x_irq_setup()
857 ret = pca953x_acpi_get_irq(&client->dev); in pca953x_irq_setup()
859 client->irq = ret; in pca953x_irq_setup()
862 if (!client->irq) in pca953x_irq_setup()
865 if (irq_base == -1) in pca953x_irq_setup()
868 if (!(chip->driver_data & PCA_INT)) in pca953x_irq_setup()
871 ret = pca953x_read_regs(chip, chip->regs->input, irq_stat); in pca953x_irq_setup()
880 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_setup()
881 bitmap_and(chip->irq_stat, irq_stat, reg_direction, chip->gpio_chip.ngpio); in pca953x_irq_setup()
882 mutex_init(&chip->irq_lock); in pca953x_irq_setup()
884 irq_chip->name = dev_name(&client->dev); in pca953x_irq_setup()
885 irq_chip->irq_mask = pca953x_irq_mask; in pca953x_irq_setup()
886 irq_chip->irq_unmask = pca953x_irq_unmask; in pca953x_irq_setup()
887 irq_chip->irq_set_wake = pca953x_irq_set_wake; in pca953x_irq_setup()
888 irq_chip->irq_bus_lock = pca953x_irq_bus_lock; in pca953x_irq_setup()
889 irq_chip->irq_bus_sync_unlock = pca953x_irq_bus_sync_unlock; in pca953x_irq_setup()
890 irq_chip->irq_set_type = pca953x_irq_set_type; in pca953x_irq_setup()
891 irq_chip->irq_shutdown = pca953x_irq_shutdown; in pca953x_irq_setup()
893 girq = &chip->gpio_chip.irq; in pca953x_irq_setup()
894 girq->chip = irq_chip; in pca953x_irq_setup()
896 girq->parent_handler = NULL; in pca953x_irq_setup()
897 girq->num_parents = 0; in pca953x_irq_setup()
898 girq->parents = NULL; in pca953x_irq_setup()
899 girq->default_type = IRQ_TYPE_NONE; in pca953x_irq_setup()
900 girq->handler = handle_simple_irq; in pca953x_irq_setup()
901 girq->threaded = true; in pca953x_irq_setup()
902 girq->first = irq_base; /* FIXME: get rid of this */ in pca953x_irq_setup()
904 ret = devm_request_threaded_irq(&client->dev, client->irq, in pca953x_irq_setup()
907 dev_name(&client->dev), chip); in pca953x_irq_setup()
909 dev_err(&client->dev, "failed to request irq %d\n", in pca953x_irq_setup()
910 client->irq); in pca953x_irq_setup()
918 static int pca953x_irq_setup(struct pca953x_chip *chip, in pca953x_irq_setup() argument
921 struct i2c_client *client = chip->client; in pca953x_irq_setup()
923 if (client->irq && irq_base != -1 && (chip->driver_data & PCA_INT)) in pca953x_irq_setup()
924 dev_warn(&client->dev, "interrupt support not compiled in\n"); in pca953x_irq_setup()
930 static int device_pca95xx_init(struct pca953x_chip *chip, u32 invert) in device_pca95xx_init() argument
935 ret = regcache_sync_region(chip->regmap, chip->regs->output, in device_pca95xx_init()
936 chip->regs->output + NBANK(chip)); in device_pca95xx_init()
940 ret = regcache_sync_region(chip->regmap, chip->regs->direction, in device_pca95xx_init()
941 chip->regs->direction + NBANK(chip)); in device_pca95xx_init()
951 ret = pca953x_write_regs(chip, chip->regs->invert, val); in device_pca95xx_init()
956 static int device_pca957x_init(struct pca953x_chip *chip, u32 invert) in device_pca957x_init() argument
962 ret = device_pca95xx_init(chip, invert); in device_pca957x_init()
967 for (i = 0; i < NBANK(chip); i++) in device_pca957x_init()
970 ret = pca953x_write_regs(chip, PCA957X_BKEN, val); in device_pca957x_init()
983 struct pca953x_chip *chip; in pca953x_probe() local
990 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in pca953x_probe()
991 if (chip == NULL) in pca953x_probe()
992 return -ENOMEM; in pca953x_probe()
994 pdata = dev_get_platdata(&client->dev); in pca953x_probe()
996 irq_base = pdata->irq_base; in pca953x_probe()
997 chip->gpio_start = pdata->gpio_base; in pca953x_probe()
998 invert = pdata->invert; in pca953x_probe()
999 chip->names = pdata->names; in pca953x_probe()
1003 chip->gpio_start = -1; in pca953x_probe()
1007 * See if we need to de-assert a reset pin. in pca953x_probe()
1009 * There is no known ACPI-enabled platforms that are in pca953x_probe()
1013 reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", in pca953x_probe()
1019 chip->client = client; in pca953x_probe()
1021 reg = devm_regulator_get(&client->dev, "vcc"); in pca953x_probe()
1023 return dev_err_probe(&client->dev, PTR_ERR(reg), "reg get err\n"); in pca953x_probe()
1027 dev_err(&client->dev, "reg en err: %d\n", ret); in pca953x_probe()
1030 chip->regulator = reg; in pca953x_probe()
1033 chip->driver_data = i2c_id->driver_data; in pca953x_probe()
1037 match = device_get_match_data(&client->dev); in pca953x_probe()
1039 ret = -ENODEV; in pca953x_probe()
1043 chip->driver_data = (uintptr_t)match; in pca953x_probe()
1046 i2c_set_clientdata(client, chip); in pca953x_probe()
1048 pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK); in pca953x_probe()
1050 if (NBANK(chip) > 2 || PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) { in pca953x_probe()
1051 dev_info(&client->dev, "using AI\n"); in pca953x_probe()
1054 dev_info(&client->dev, "using no AI\n"); in pca953x_probe()
1058 chip->regmap = devm_regmap_init_i2c(client, regmap_config); in pca953x_probe()
1059 if (IS_ERR(chip->regmap)) { in pca953x_probe()
1060 ret = PTR_ERR(chip->regmap); in pca953x_probe()
1064 regcache_mark_dirty(chip->regmap); in pca953x_probe()
1066 mutex_init(&chip->i2c_lock); in pca953x_probe()
1068 * In case we have an i2c-mux controlled by a GPIO provided by an in pca953x_probe()
1071 * subclass for chip->i2c_lock. in pca953x_probe()
1074 * false positives when the expander controlling the i2c-mux is on in pca953x_probe()
1080 * applied to all other i2c-controlled GPIO expanders (and potentially in pca953x_probe()
1081 * regmap-i2c). in pca953x_probe()
1083 lockdep_set_subclass(&chip->i2c_lock, in pca953x_probe()
1084 i2c_adapter_depth(client->adapter)); in pca953x_probe()
1087 * we can't share this chip with another i2c master. in pca953x_probe()
1090 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) { in pca953x_probe()
1091 chip->regs = &pca953x_regs; in pca953x_probe()
1092 ret = device_pca95xx_init(chip, invert); in pca953x_probe()
1094 chip->regs = &pca957x_regs; in pca953x_probe()
1095 ret = device_pca957x_init(chip, invert); in pca953x_probe()
1100 ret = pca953x_irq_setup(chip, irq_base); in pca953x_probe()
1104 ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip); in pca953x_probe()
1108 if (pdata && pdata->setup) { in pca953x_probe()
1109 ret = pdata->setup(client, chip->gpio_chip.base, in pca953x_probe()
1110 chip->gpio_chip.ngpio, pdata->context); in pca953x_probe()
1112 dev_warn(&client->dev, "setup failed, %d\n", ret); in pca953x_probe()
1118 regulator_disable(chip->regulator); in pca953x_probe()
1124 struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev); in pca953x_remove()
1125 struct pca953x_chip *chip = i2c_get_clientdata(client); in pca953x_remove() local
1128 if (pdata && pdata->teardown) { in pca953x_remove()
1129 ret = pdata->teardown(client, chip->gpio_chip.base, in pca953x_remove()
1130 chip->gpio_chip.ngpio, pdata->context); in pca953x_remove()
1132 dev_err(&client->dev, "teardown failed, %d\n", ret); in pca953x_remove()
1137 regulator_disable(chip->regulator); in pca953x_remove()
1145 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_regcache_sync() local
1152 ret = regcache_sync_region(chip->regmap, chip->regs->direction, in pca953x_regcache_sync()
1153 chip->regs->direction + NBANK(chip)); in pca953x_regcache_sync()
1159 ret = regcache_sync_region(chip->regmap, chip->regs->output, in pca953x_regcache_sync()
1160 chip->regs->output + NBANK(chip)); in pca953x_regcache_sync()
1167 if (chip->driver_data & PCA_PCAL) { in pca953x_regcache_sync()
1168 ret = regcache_sync_region(chip->regmap, PCAL953X_IN_LATCH, in pca953x_regcache_sync()
1169 PCAL953X_IN_LATCH + NBANK(chip)); in pca953x_regcache_sync()
1176 ret = regcache_sync_region(chip->regmap, PCAL953X_INT_MASK, in pca953x_regcache_sync()
1177 PCAL953X_INT_MASK + NBANK(chip)); in pca953x_regcache_sync()
1191 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_suspend() local
1193 regcache_cache_only(chip->regmap, true); in pca953x_suspend()
1195 if (atomic_read(&chip->wakeup_path)) in pca953x_suspend()
1198 regulator_disable(chip->regulator); in pca953x_suspend()
1205 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_resume() local
1208 if (!atomic_read(&chip->wakeup_path)) { in pca953x_resume()
1209 ret = regulator_enable(chip->regulator); in pca953x_resume()
1216 regcache_cache_only(chip->regmap, false); in pca953x_resume()
1217 regcache_mark_dirty(chip->regmap); in pca953x_resume()
1222 ret = regcache_sync(chip->regmap); in pca953x_resume()
1232 /* convenience to stop overlong match-table lines */