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

1 // SPDX-License-Identifier: GPL-2.0-only
126 { "irq-gpios", &pca953x_irq_gpios, 1, ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER },
138 ret = acpi_dev_gpio_irq_get_by(ACPI_COMPANION(dev), "irq-gpios", 0); in pca953x_acpi_get_irq()
152 * relative. Since first controller (gpio-sch.c) and
153 * second (gpio-dwapb.c) are at the fixed bases, we may
175 #define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ) argument
219 u8 (*recalc_addr)(struct pca953x_chip *chip, int reg, int off);
220 bool (*check_reg)(struct pca953x_chip *chip, unsigned int reg,
224 static int pca953x_bank_shift(struct pca953x_chip *chip) in pca953x_bank_shift() argument
226 return fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); in pca953x_bank_shift()
248 * - Standard set, below 0x40, each port can be replicated up to 8 times
249 * - PCA953x standard
254 * - PCA957x with mixed up registers
261 * - Extended set, above 0x40, often chip specific.
262 * - PCAL6524/PCAL9555A with custom PCAL IRQ handling:
264 * Pull-up/pull-down enable reg 0x40 + 3 * bank_size RW
265 * Pull-up/pull-down select reg 0x40 + 4 * bank_size RW
269 * - Registers with bit 0x80 set, the AI bit
274 static bool pca953x_check_register(struct pca953x_chip *chip, unsigned int reg, in pca953x_check_register() argument
277 int bank_shift = pca953x_bank_shift(chip); in pca953x_check_register()
279 int offset = reg & (BIT(bank_shift) - 1); in pca953x_check_register()
283 if (!(chip->driver_data & PCA_PCAL)) in pca953x_check_register()
293 if (offset >= NBANK(chip)) in pca953x_check_register()
300 * Unfortunately, whilst the PCAL6534 chip (and compatibles) broadly follow the
306 static bool pcal6534_check_register(struct pca953x_chip *chip, unsigned int reg, in pcal6534_check_register() argument
318 reg -= 0x54; in pcal6534_check_register()
325 reg -= 0x30; in pcal6534_check_register()
331 bank = bank_shift + reg / NBANK(chip); in pcal6534_check_register()
332 offset = reg % NBANK(chip); in pcal6534_check_register()
339 if (offset >= NBANK(chip)) in pcal6534_check_register()
347 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_readable_register() local
350 if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) { in pca953x_readable_register()
359 if (chip->driver_data & PCA_PCAL) { in pca953x_readable_register()
365 return chip->check_reg(chip, reg, bank); in pca953x_readable_register()
370 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_writeable_register() local
373 if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) { in pca953x_writeable_register()
381 if (chip->driver_data & PCA_PCAL) in pca953x_writeable_register()
385 return chip->check_reg(chip, reg, bank); in pca953x_writeable_register()
390 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_volatile_register() local
393 if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) in pca953x_volatile_register()
398 if (chip->driver_data & PCA_PCAL) in pca953x_volatile_register()
401 return chip->check_reg(chip, reg, bank); in pca953x_volatile_register()
436 static u8 pca953x_recalc_addr(struct pca953x_chip *chip, int reg, int off) in pca953x_recalc_addr() argument
438 int bank_shift = pca953x_bank_shift(chip); in pca953x_recalc_addr()
441 u8 regaddr = pinctrl | addr | (off / BANK_SZ); in pca953x_recalc_addr()
450 static u8 pcal6534_recalc_addr(struct pca953x_chip *chip, int reg, int off) in pcal6534_recalc_addr() argument
455 addr = (reg & PCAL_GPIO_MASK) * NBANK(chip); in pcal6534_recalc_addr()
478 return pinctrl + addr + (off / BANK_SZ); in pcal6534_recalc_addr()
481 static int pca953x_write_regs(struct pca953x_chip *chip, int reg, unsigned long *val) in pca953x_write_regs() argument
483 u8 regaddr = chip->recalc_addr(chip, reg, 0); in pca953x_write_regs()
487 for (i = 0; i < NBANK(chip); i++) in pca953x_write_regs()
490 ret = regmap_bulk_write(chip->regmap, regaddr, value, NBANK(chip)); in pca953x_write_regs()
492 dev_err(&chip->client->dev, "failed writing register\n"); in pca953x_write_regs()
499 static int pca953x_read_regs(struct pca953x_chip *chip, int reg, unsigned long *val) in pca953x_read_regs() argument
501 u8 regaddr = chip->recalc_addr(chip, reg, 0); in pca953x_read_regs()
505 ret = regmap_bulk_read(chip->regmap, regaddr, value, NBANK(chip)); in pca953x_read_regs()
507 dev_err(&chip->client->dev, "failed reading register\n"); in pca953x_read_regs()
511 for (i = 0; i < NBANK(chip); i++) in pca953x_read_regs()
517 static int pca953x_gpio_direction_input(struct gpio_chip *gc, unsigned off) in pca953x_gpio_direction_input() argument
519 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_direction_input() local
520 u8 dirreg = chip->recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_direction_input()
521 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_direction_input()
524 mutex_lock(&chip->i2c_lock); in pca953x_gpio_direction_input()
525 ret = regmap_write_bits(chip->regmap, dirreg, bit, bit); in pca953x_gpio_direction_input()
526 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_direction_input()
531 unsigned off, int val) in pca953x_gpio_direction_output() argument
533 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_direction_output() local
534 u8 dirreg = chip->recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_direction_output()
535 u8 outreg = chip->recalc_addr(chip, chip->regs->output, off); in pca953x_gpio_direction_output()
536 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_direction_output()
539 mutex_lock(&chip->i2c_lock); in pca953x_gpio_direction_output()
541 ret = regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0); in pca953x_gpio_direction_output()
546 ret = regmap_write_bits(chip->regmap, dirreg, bit, 0); in pca953x_gpio_direction_output()
548 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_direction_output()
552 static int pca953x_gpio_get_value(struct gpio_chip *gc, unsigned off) in pca953x_gpio_get_value() argument
554 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_get_value() local
555 u8 inreg = chip->recalc_addr(chip, chip->regs->input, off); in pca953x_gpio_get_value()
556 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_get_value()
560 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_value()
561 ret = regmap_read(chip->regmap, inreg, &reg_val); in pca953x_gpio_get_value()
562 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_value()
569 static void pca953x_gpio_set_value(struct gpio_chip *gc, unsigned off, int val) in pca953x_gpio_set_value() argument
571 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_set_value() local
572 u8 outreg = chip->recalc_addr(chip, chip->regs->output, off); in pca953x_gpio_set_value()
573 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_set_value()
575 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_value()
576 regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0); in pca953x_gpio_set_value()
577 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_value()
580 static int pca953x_gpio_get_direction(struct gpio_chip *gc, unsigned off) in pca953x_gpio_get_direction() argument
582 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_get_direction() local
583 u8 dirreg = chip->recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_get_direction()
584 u8 bit = BIT(off % BANK_SZ); in pca953x_gpio_get_direction()
588 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_direction()
589 ret = regmap_read(chip->regmap, dirreg, &reg_val); in pca953x_gpio_get_direction()
590 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_direction()
603 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_get_multiple() local
607 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_multiple()
608 ret = pca953x_read_regs(chip, chip->regs->input, reg_val); in pca953x_gpio_get_multiple()
609 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_multiple()
613 bitmap_replace(bits, bits, reg_val, mask, gc->ngpio); in pca953x_gpio_get_multiple()
620 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_set_multiple() local
624 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_multiple()
625 ret = pca953x_read_regs(chip, chip->regs->output, reg_val); in pca953x_gpio_set_multiple()
629 bitmap_replace(reg_val, reg_val, bits, mask, gc->ngpio); in pca953x_gpio_set_multiple()
631 pca953x_write_regs(chip, chip->regs->output, reg_val); in pca953x_gpio_set_multiple()
633 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_multiple()
636 static int pca953x_gpio_set_pull_up_down(struct pca953x_chip *chip, in pca953x_gpio_set_pull_up_down() argument
642 u8 pull_en_reg = chip->recalc_addr(chip, PCAL953X_PULL_EN, offset); in pca953x_gpio_set_pull_up_down()
643 u8 pull_sel_reg = chip->recalc_addr(chip, PCAL953X_PULL_SEL, offset); in pca953x_gpio_set_pull_up_down()
648 * pull-up/pull-down configuration requires PCAL extended in pca953x_gpio_set_pull_up_down()
651 if (!(chip->driver_data & PCA_PCAL)) in pca953x_gpio_set_pull_up_down()
652 return -ENOTSUPP; in pca953x_gpio_set_pull_up_down()
654 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_pull_up_down()
656 /* Configure pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
658 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit); in pca953x_gpio_set_pull_up_down()
660 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0); in pca953x_gpio_set_pull_up_down()
666 /* Disable/Enable pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
668 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); in pca953x_gpio_set_pull_up_down()
670 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); in pca953x_gpio_set_pull_up_down()
673 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_pull_up_down()
680 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_gpio_set_config() local
687 return pca953x_gpio_set_pull_up_down(chip, offset, config); in pca953x_gpio_set_config()
689 return -ENOTSUPP; in pca953x_gpio_set_config()
693 static void pca953x_setup_gpio(struct pca953x_chip *chip, int gpios) in pca953x_setup_gpio() argument
697 gc = &chip->gpio_chip; in pca953x_setup_gpio()
699 gc->direction_input = pca953x_gpio_direction_input; in pca953x_setup_gpio()
700 gc->direction_output = pca953x_gpio_direction_output; in pca953x_setup_gpio()
701 gc->get = pca953x_gpio_get_value; in pca953x_setup_gpio()
702 gc->set = pca953x_gpio_set_value; in pca953x_setup_gpio()
703 gc->get_direction = pca953x_gpio_get_direction; in pca953x_setup_gpio()
704 gc->get_multiple = pca953x_gpio_get_multiple; in pca953x_setup_gpio()
705 gc->set_multiple = pca953x_gpio_set_multiple; in pca953x_setup_gpio()
706 gc->set_config = pca953x_gpio_set_config; in pca953x_setup_gpio()
707 gc->can_sleep = true; in pca953x_setup_gpio()
709 gc->base = chip->gpio_start; in pca953x_setup_gpio()
710 gc->ngpio = gpios; in pca953x_setup_gpio()
711 gc->label = dev_name(&chip->client->dev); in pca953x_setup_gpio()
712 gc->parent = &chip->client->dev; in pca953x_setup_gpio()
713 gc->owner = THIS_MODULE; in pca953x_setup_gpio()
720 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_mask() local
723 clear_bit(hwirq, chip->irq_mask); in pca953x_irq_mask()
730 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_unmask() local
734 set_bit(hwirq, chip->irq_mask); in pca953x_irq_unmask()
740 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_set_wake() local
743 atomic_inc(&chip->wakeup_path); in pca953x_irq_set_wake()
745 atomic_dec(&chip->wakeup_path); in pca953x_irq_set_wake()
747 return irq_set_irq_wake(chip->client->irq, on); in pca953x_irq_set_wake()
753 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_bus_lock() local
755 mutex_lock(&chip->irq_lock); in pca953x_irq_bus_lock()
761 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_bus_sync_unlock() local
766 if (chip->driver_data & PCA_PCAL) { in pca953x_irq_bus_sync_unlock()
767 guard(mutex)(&chip->i2c_lock); in pca953x_irq_bus_sync_unlock()
769 /* Enable latch on interrupt-enabled inputs */ in pca953x_irq_bus_sync_unlock()
770 pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask); in pca953x_irq_bus_sync_unlock()
772 bitmap_complement(irq_mask, chip->irq_mask, gc->ngpio); in pca953x_irq_bus_sync_unlock()
775 pca953x_write_regs(chip, PCAL953X_INT_MASK, irq_mask); in pca953x_irq_bus_sync_unlock()
779 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_bus_sync_unlock()
781 bitmap_or(irq_mask, chip->irq_trig_fall, chip->irq_trig_raise, gc->ngpio); in pca953x_irq_bus_sync_unlock()
782 bitmap_complement(reg_direction, reg_direction, gc->ngpio); in pca953x_irq_bus_sync_unlock()
783 bitmap_and(irq_mask, irq_mask, reg_direction, gc->ngpio); in pca953x_irq_bus_sync_unlock()
786 for_each_set_bit(level, irq_mask, gc->ngpio) in pca953x_irq_bus_sync_unlock()
787 pca953x_gpio_direction_input(&chip->gpio_chip, level); in pca953x_irq_bus_sync_unlock()
789 mutex_unlock(&chip->irq_lock); in pca953x_irq_bus_sync_unlock()
795 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_set_type() local
799 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n", in pca953x_irq_set_type()
800 d->irq, type); in pca953x_irq_set_type()
801 return -EINVAL; in pca953x_irq_set_type()
804 assign_bit(hwirq, chip->irq_trig_fall, type & IRQ_TYPE_EDGE_FALLING); in pca953x_irq_set_type()
805 assign_bit(hwirq, chip->irq_trig_raise, type & IRQ_TYPE_EDGE_RISING); in pca953x_irq_set_type()
813 struct pca953x_chip *chip = gpiochip_get_data(gc); in pca953x_irq_shutdown() local
816 clear_bit(hwirq, chip->irq_trig_raise); in pca953x_irq_shutdown()
817 clear_bit(hwirq, chip->irq_trig_fall); in pca953x_irq_shutdown()
824 seq_printf(p, dev_name(gc->parent)); in pca953x_irq_print_chip()
840 static bool pca953x_irq_pending(struct pca953x_chip *chip, unsigned long *pending) in pca953x_irq_pending() argument
842 struct gpio_chip *gc = &chip->gpio_chip; in pca953x_irq_pending()
850 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat); in pca953x_irq_pending()
855 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_pending()
857 bitmap_copy(old_stat, chip->irq_stat, gc->ngpio); in pca953x_irq_pending()
859 bitmap_and(new_stat, cur_stat, reg_direction, gc->ngpio); in pca953x_irq_pending()
860 bitmap_xor(cur_stat, new_stat, old_stat, gc->ngpio); in pca953x_irq_pending()
861 bitmap_and(trigger, cur_stat, chip->irq_mask, gc->ngpio); in pca953x_irq_pending()
863 bitmap_copy(chip->irq_stat, new_stat, gc->ngpio); in pca953x_irq_pending()
865 if (bitmap_empty(trigger, gc->ngpio)) in pca953x_irq_pending()
868 bitmap_and(cur_stat, chip->irq_trig_fall, old_stat, gc->ngpio); in pca953x_irq_pending()
869 bitmap_and(old_stat, chip->irq_trig_raise, new_stat, gc->ngpio); in pca953x_irq_pending()
870 bitmap_or(new_stat, old_stat, cur_stat, gc->ngpio); in pca953x_irq_pending()
871 bitmap_and(pending, new_stat, trigger, gc->ngpio); in pca953x_irq_pending()
873 return !bitmap_empty(pending, gc->ngpio); in pca953x_irq_pending()
878 struct pca953x_chip *chip = devid; in pca953x_irq_handler() local
879 struct gpio_chip *gc = &chip->gpio_chip; in pca953x_irq_handler()
886 mutex_lock(&chip->i2c_lock); in pca953x_irq_handler()
887 ret = pca953x_irq_pending(chip, pending); in pca953x_irq_handler()
888 mutex_unlock(&chip->i2c_lock); in pca953x_irq_handler()
893 for_each_set_bit(level, pending, gc->ngpio) { in pca953x_irq_handler()
894 int nested_irq = irq_find_mapping(gc->irq.domain, level); in pca953x_irq_handler()
897 dev_warn_ratelimited(gc->parent, "unmapped interrupt %d\n", level); in pca953x_irq_handler()
909 static int pca953x_irq_setup(struct pca953x_chip *chip, int irq_base) in pca953x_irq_setup() argument
911 struct i2c_client *client = chip->client; in pca953x_irq_setup()
918 ret = pca953x_acpi_get_irq(&client->dev); in pca953x_irq_setup()
920 client->irq = ret; in pca953x_irq_setup()
923 if (!client->irq) in pca953x_irq_setup()
926 if (irq_base == -1) in pca953x_irq_setup()
929 if (!(chip->driver_data & PCA_INT)) in pca953x_irq_setup()
932 ret = pca953x_read_regs(chip, chip->regs->input, irq_stat); in pca953x_irq_setup()
941 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_setup()
942 bitmap_and(chip->irq_stat, irq_stat, reg_direction, chip->gpio_chip.ngpio); in pca953x_irq_setup()
943 mutex_init(&chip->irq_lock); in pca953x_irq_setup()
945 girq = &chip->gpio_chip.irq; in pca953x_irq_setup()
948 girq->parent_handler = NULL; in pca953x_irq_setup()
949 girq->num_parents = 0; in pca953x_irq_setup()
950 girq->parents = NULL; in pca953x_irq_setup()
951 girq->default_type = IRQ_TYPE_NONE; in pca953x_irq_setup()
952 girq->handler = handle_simple_irq; in pca953x_irq_setup()
953 girq->threaded = true; in pca953x_irq_setup()
954 girq->first = irq_base; /* FIXME: get rid of this */ in pca953x_irq_setup()
956 ret = devm_request_threaded_irq(&client->dev, client->irq, in pca953x_irq_setup()
959 dev_name(&client->dev), chip); in pca953x_irq_setup()
961 dev_err(&client->dev, "failed to request irq %d\n", in pca953x_irq_setup()
962 client->irq); in pca953x_irq_setup()
970 static int pca953x_irq_setup(struct pca953x_chip *chip, in pca953x_irq_setup() argument
973 struct i2c_client *client = chip->client; in pca953x_irq_setup()
975 if (client->irq && irq_base != -1 && (chip->driver_data & PCA_INT)) in pca953x_irq_setup()
976 dev_warn(&client->dev, "interrupt support not compiled in\n"); in pca953x_irq_setup()
982 static int device_pca95xx_init(struct pca953x_chip *chip) in device_pca95xx_init() argument
988 regaddr = chip->recalc_addr(chip, chip->regs->output, 0); in device_pca95xx_init()
989 ret = regcache_sync_region(chip->regmap, regaddr, in device_pca95xx_init()
990 regaddr + NBANK(chip) - 1); in device_pca95xx_init()
994 regaddr = chip->recalc_addr(chip, chip->regs->direction, 0); in device_pca95xx_init()
995 ret = regcache_sync_region(chip->regmap, regaddr, in device_pca95xx_init()
996 regaddr + NBANK(chip) - 1); in device_pca95xx_init()
1003 ret = pca953x_write_regs(chip, chip->regs->invert, val); in device_pca95xx_init()
1008 static int device_pca957x_init(struct pca953x_chip *chip) in device_pca957x_init() argument
1014 ret = device_pca95xx_init(chip); in device_pca957x_init()
1019 for (i = 0; i < NBANK(chip); i++) in device_pca957x_init()
1022 ret = pca953x_write_regs(chip, PCA957X_BKEN, val); in device_pca957x_init()
1036 static int pca953x_get_and_enable_regulator(struct pca953x_chip *chip) in pca953x_get_and_enable_regulator() argument
1038 struct device *dev = &chip->client->dev; in pca953x_get_and_enable_regulator()
1039 struct regulator *reg = chip->regulator; in pca953x_get_and_enable_regulator()
1054 chip->regulator = reg; in pca953x_get_and_enable_regulator()
1060 struct device *dev = &client->dev; in pca953x_probe()
1062 struct pca953x_chip *chip; in pca953x_probe() local
1067 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in pca953x_probe()
1068 if (chip == NULL) in pca953x_probe()
1069 return -ENOMEM; in pca953x_probe()
1071 pdata = dev_get_platdata(&client->dev); in pca953x_probe()
1073 irq_base = pdata->irq_base; in pca953x_probe()
1074 chip->gpio_start = pdata->gpio_base; in pca953x_probe()
1078 chip->gpio_start = -1; in pca953x_probe()
1082 * See if we need to de-assert a reset pin. in pca953x_probe()
1084 * There is no known ACPI-enabled platforms that are in pca953x_probe()
1088 reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", in pca953x_probe()
1095 chip->client = client; in pca953x_probe()
1096 chip->driver_data = (uintptr_t)i2c_get_match_data(client); in pca953x_probe()
1097 if (!chip->driver_data) in pca953x_probe()
1098 return -ENODEV; in pca953x_probe()
1100 ret = pca953x_get_and_enable_regulator(chip); in pca953x_probe()
1104 i2c_set_clientdata(client, chip); in pca953x_probe()
1106 pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK); in pca953x_probe()
1108 if (NBANK(chip) > 2 || PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) { in pca953x_probe()
1109 dev_info(&client->dev, "using AI\n"); in pca953x_probe()
1112 dev_info(&client->dev, "using no AI\n"); in pca953x_probe()
1116 if (PCA_CHIP_TYPE(chip->driver_data) == PCAL653X_TYPE) { in pca953x_probe()
1117 chip->recalc_addr = pcal6534_recalc_addr; in pca953x_probe()
1118 chip->check_reg = pcal6534_check_register; in pca953x_probe()
1120 chip->recalc_addr = pca953x_recalc_addr; in pca953x_probe()
1121 chip->check_reg = pca953x_check_register; in pca953x_probe()
1124 chip->regmap = devm_regmap_init_i2c(client, regmap_config); in pca953x_probe()
1125 if (IS_ERR(chip->regmap)) in pca953x_probe()
1126 return PTR_ERR(chip->regmap); in pca953x_probe()
1128 regcache_mark_dirty(chip->regmap); in pca953x_probe()
1130 mutex_init(&chip->i2c_lock); in pca953x_probe()
1132 * In case we have an i2c-mux controlled by a GPIO provided by an in pca953x_probe()
1135 * subclass for chip->i2c_lock. in pca953x_probe()
1138 * false positives when the expander controlling the i2c-mux is on in pca953x_probe()
1144 * applied to all other i2c-controlled GPIO expanders (and potentially in pca953x_probe()
1145 * regmap-i2c). in pca953x_probe()
1147 lockdep_set_subclass(&chip->i2c_lock, in pca953x_probe()
1148 i2c_adapter_depth(client->adapter)); in pca953x_probe()
1151 * we can't share this chip with another i2c master. in pca953x_probe()
1153 if (PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) { in pca953x_probe()
1154 chip->regs = &pca957x_regs; in pca953x_probe()
1155 ret = device_pca957x_init(chip); in pca953x_probe()
1157 chip->regs = &pca953x_regs; in pca953x_probe()
1158 ret = device_pca95xx_init(chip); in pca953x_probe()
1163 ret = pca953x_irq_setup(chip, irq_base); in pca953x_probe()
1167 return devm_gpiochip_add_data(dev, &chip->gpio_chip, chip); in pca953x_probe()
1173 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_regcache_sync() local
1181 regaddr = chip->recalc_addr(chip, chip->regs->direction, 0); in pca953x_regcache_sync()
1182 ret = regcache_sync_region(chip->regmap, regaddr, regaddr + NBANK(chip) - 1); in pca953x_regcache_sync()
1188 regaddr = chip->recalc_addr(chip, chip->regs->output, 0); in pca953x_regcache_sync()
1189 ret = regcache_sync_region(chip->regmap, regaddr, regaddr + NBANK(chip) - 1); in pca953x_regcache_sync()
1196 if (chip->driver_data & PCA_PCAL) { in pca953x_regcache_sync()
1197 regaddr = chip->recalc_addr(chip, PCAL953X_IN_LATCH, 0); in pca953x_regcache_sync()
1198 ret = regcache_sync_region(chip->regmap, regaddr, in pca953x_regcache_sync()
1199 regaddr + NBANK(chip) - 1); in pca953x_regcache_sync()
1206 regaddr = chip->recalc_addr(chip, PCAL953X_INT_MASK, 0); in pca953x_regcache_sync()
1207 ret = regcache_sync_region(chip->regmap, regaddr, in pca953x_regcache_sync()
1208 regaddr + NBANK(chip) - 1); in pca953x_regcache_sync()
1222 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_suspend() local
1224 mutex_lock(&chip->i2c_lock); in pca953x_suspend()
1225 regcache_cache_only(chip->regmap, true); in pca953x_suspend()
1226 mutex_unlock(&chip->i2c_lock); in pca953x_suspend()
1228 if (atomic_read(&chip->wakeup_path)) in pca953x_suspend()
1231 regulator_disable(chip->regulator); in pca953x_suspend()
1238 struct pca953x_chip *chip = dev_get_drvdata(dev); in pca953x_resume() local
1241 if (!atomic_read(&chip->wakeup_path)) { in pca953x_resume()
1242 ret = regulator_enable(chip->regulator); in pca953x_resume()
1249 mutex_lock(&chip->i2c_lock); in pca953x_resume()
1250 regcache_cache_only(chip->regmap, false); in pca953x_resume()
1251 regcache_mark_dirty(chip->regmap); in pca953x_resume()
1254 mutex_unlock(&chip->i2c_lock); in pca953x_resume()
1258 ret = regcache_sync(chip->regmap); in pca953x_resume()
1259 mutex_unlock(&chip->i2c_lock); in pca953x_resume()
1269 /* convenience to stop overlong match-table lines */