• Home
  • Raw
  • Download

Lines Matching +full:nxp +full:- +full:i

1 // SPDX-License-Identifier: GPL-2.0-only
3 * PCA953x 4/8/16/24/40 bit I/O ports
119 { "irq-gpios", &pca953x_irq_gpios, 1, ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER },
131 ret = acpi_dev_gpio_irq_get_by(ACPI_COMPANION(dev), "irq-gpios", 0); in pca953x_acpi_get_irq()
145 * relative. Since first controller (gpio-sch.c) and
146 * second (gpio-dwapb.c) are at the fixed bases, we may
168 #define NBANK(chip) DIV_ROUND_UP(chip->gpio_chip.ngpio, BANK_SZ)
217 return fls((chip->gpio_chip.ngpio - 1) / BANK_SZ); in pca953x_bank_shift()
239 * - Standard set, below 0x40, each port can be replicated up to 8 times
240 * - PCA953x standard
245 * - PCA957x with mixed up registers
252 * - Extended set, above 0x40, often chip specific.
253 * - PCAL6524/PCAL9555A with custom PCAL IRQ handling:
255 * Pull-up/pull-down enable reg 0x40 + 3 * bank_size RW
256 * Pull-up/pull-down select reg 0x40 + 4 * bank_size RW
260 * - Registers with bit 0x80 set, the AI bit
270 int offset = reg & (BIT(bank_shift) - 1); in pca953x_check_register()
274 if (!(chip->driver_data & PCA_PCAL)) in pca953x_check_register()
295 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) { in pca953x_readable_register()
304 if (chip->driver_data & PCA_PCAL) { in pca953x_readable_register()
318 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) { in pca953x_writeable_register()
326 if (chip->driver_data & PCA_PCAL) in pca953x_writeable_register()
338 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) in pca953x_volatile_register()
343 if (chip->driver_data & PCA_PCAL) in pca953x_volatile_register()
392 int i, ret; in pca953x_write_regs() local
394 for (i = 0; i < NBANK(chip); i++) in pca953x_write_regs()
395 value[i] = bitmap_get_value8(val, i * BANK_SZ); in pca953x_write_regs()
397 ret = regmap_bulk_write(chip->regmap, regaddr, value, NBANK(chip)); in pca953x_write_regs()
399 dev_err(&chip->client->dev, "failed writing register\n"); in pca953x_write_regs()
410 int i, ret; in pca953x_read_regs() local
412 ret = regmap_bulk_read(chip->regmap, regaddr, value, NBANK(chip)); in pca953x_read_regs()
414 dev_err(&chip->client->dev, "failed reading register\n"); in pca953x_read_regs()
418 for (i = 0; i < NBANK(chip); i++) in pca953x_read_regs()
419 bitmap_set_value8(val, value[i], i * BANK_SZ); in pca953x_read_regs()
427 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_direction_input()
431 mutex_lock(&chip->i2c_lock); in pca953x_gpio_direction_input()
432 ret = regmap_write_bits(chip->regmap, dirreg, bit, bit); in pca953x_gpio_direction_input()
433 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_direction_input()
441 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_direction_output()
442 u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off); in pca953x_gpio_direction_output()
446 mutex_lock(&chip->i2c_lock); in pca953x_gpio_direction_output()
448 ret = regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0); in pca953x_gpio_direction_output()
453 ret = regmap_write_bits(chip->regmap, dirreg, bit, 0); in pca953x_gpio_direction_output()
455 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_direction_output()
462 u8 inreg = pca953x_recalc_addr(chip, chip->regs->input, off); in pca953x_gpio_get_value()
467 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_value()
468 ret = regmap_read(chip->regmap, inreg, &reg_val); in pca953x_gpio_get_value()
469 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_value()
479 u8 outreg = pca953x_recalc_addr(chip, chip->regs->output, off); in pca953x_gpio_set_value()
482 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_value()
483 regmap_write_bits(chip->regmap, outreg, bit, val ? bit : 0); in pca953x_gpio_set_value()
484 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_value()
490 u8 dirreg = pca953x_recalc_addr(chip, chip->regs->direction, off); in pca953x_gpio_get_direction()
495 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_direction()
496 ret = regmap_read(chip->regmap, dirreg, &reg_val); in pca953x_gpio_get_direction()
497 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_direction()
514 mutex_lock(&chip->i2c_lock); in pca953x_gpio_get_multiple()
515 ret = pca953x_read_regs(chip, chip->regs->input, reg_val); in pca953x_gpio_get_multiple()
516 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_get_multiple()
520 bitmap_replace(bits, bits, reg_val, mask, gc->ngpio); in pca953x_gpio_get_multiple()
531 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_multiple()
532 ret = pca953x_read_regs(chip, chip->regs->output, reg_val); in pca953x_gpio_set_multiple()
536 bitmap_replace(reg_val, reg_val, bits, mask, gc->ngpio); in pca953x_gpio_set_multiple()
538 pca953x_write_regs(chip, chip->regs->output, reg_val); in pca953x_gpio_set_multiple()
540 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_multiple()
553 * pull-up/pull-down configuration requires PCAL extended in pca953x_gpio_set_pull_up_down()
556 if (!(chip->driver_data & PCA_PCAL)) in pca953x_gpio_set_pull_up_down()
557 return -ENOTSUPP; in pca953x_gpio_set_pull_up_down()
559 mutex_lock(&chip->i2c_lock); in pca953x_gpio_set_pull_up_down()
561 /* Configure pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
563 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, bit); in pca953x_gpio_set_pull_up_down()
565 ret = regmap_write_bits(chip->regmap, pull_sel_reg, bit, 0); in pca953x_gpio_set_pull_up_down()
571 /* Disable/Enable pull-up/pull-down */ in pca953x_gpio_set_pull_up_down()
573 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, 0); in pca953x_gpio_set_pull_up_down()
575 ret = regmap_write_bits(chip->regmap, pull_en_reg, bit, bit); in pca953x_gpio_set_pull_up_down()
578 mutex_unlock(&chip->i2c_lock); in pca953x_gpio_set_pull_up_down()
594 return -ENOTSUPP; in pca953x_gpio_set_config()
602 gc = &chip->gpio_chip; in pca953x_setup_gpio()
604 gc->direction_input = pca953x_gpio_direction_input; in pca953x_setup_gpio()
605 gc->direction_output = pca953x_gpio_direction_output; in pca953x_setup_gpio()
606 gc->get = pca953x_gpio_get_value; in pca953x_setup_gpio()
607 gc->set = pca953x_gpio_set_value; in pca953x_setup_gpio()
608 gc->get_direction = pca953x_gpio_get_direction; in pca953x_setup_gpio()
609 gc->get_multiple = pca953x_gpio_get_multiple; in pca953x_setup_gpio()
610 gc->set_multiple = pca953x_gpio_set_multiple; in pca953x_setup_gpio()
611 gc->set_config = pca953x_gpio_set_config; in pca953x_setup_gpio()
612 gc->can_sleep = true; in pca953x_setup_gpio()
614 gc->base = chip->gpio_start; in pca953x_setup_gpio()
615 gc->ngpio = gpios; in pca953x_setup_gpio()
616 gc->label = dev_name(&chip->client->dev); in pca953x_setup_gpio()
617 gc->parent = &chip->client->dev; in pca953x_setup_gpio()
618 gc->owner = THIS_MODULE; in pca953x_setup_gpio()
619 gc->names = chip->names; in pca953x_setup_gpio()
629 clear_bit(hwirq, chip->irq_mask); in pca953x_irq_mask()
638 set_bit(hwirq, chip->irq_mask); in pca953x_irq_unmask()
647 atomic_inc(&chip->wakeup_path); in pca953x_irq_set_wake()
649 atomic_dec(&chip->wakeup_path); in pca953x_irq_set_wake()
651 return irq_set_irq_wake(chip->client->irq, on); in pca953x_irq_set_wake()
659 mutex_lock(&chip->irq_lock); in pca953x_irq_bus_lock()
670 if (chip->driver_data & PCA_PCAL) { in pca953x_irq_bus_sync_unlock()
671 /* Enable latch on interrupt-enabled inputs */ in pca953x_irq_bus_sync_unlock()
672 pca953x_write_regs(chip, PCAL953X_IN_LATCH, chip->irq_mask); in pca953x_irq_bus_sync_unlock()
674 bitmap_complement(irq_mask, chip->irq_mask, gc->ngpio); in pca953x_irq_bus_sync_unlock()
681 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_bus_sync_unlock()
683 bitmap_or(irq_mask, chip->irq_trig_fall, chip->irq_trig_raise, gc->ngpio); in pca953x_irq_bus_sync_unlock()
684 bitmap_complement(reg_direction, reg_direction, gc->ngpio); in pca953x_irq_bus_sync_unlock()
685 bitmap_and(irq_mask, irq_mask, reg_direction, gc->ngpio); in pca953x_irq_bus_sync_unlock()
688 for_each_set_bit(level, irq_mask, gc->ngpio) in pca953x_irq_bus_sync_unlock()
689 pca953x_gpio_direction_input(&chip->gpio_chip, level); in pca953x_irq_bus_sync_unlock()
691 mutex_unlock(&chip->irq_lock); in pca953x_irq_bus_sync_unlock()
701 dev_err(&chip->client->dev, "irq %d: unsupported type %d\n", in pca953x_irq_set_type()
702 d->irq, type); in pca953x_irq_set_type()
703 return -EINVAL; in pca953x_irq_set_type()
706 assign_bit(hwirq, chip->irq_trig_fall, type & IRQ_TYPE_EDGE_FALLING); in pca953x_irq_set_type()
707 assign_bit(hwirq, chip->irq_trig_raise, type & IRQ_TYPE_EDGE_RISING); in pca953x_irq_set_type()
718 clear_bit(hwirq, chip->irq_trig_raise); in pca953x_irq_shutdown()
719 clear_bit(hwirq, chip->irq_trig_fall); in pca953x_irq_shutdown()
724 struct gpio_chip *gc = &chip->gpio_chip; in pca953x_irq_pending()
732 if (chip->driver_data & PCA_PCAL) { in pca953x_irq_pending()
739 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat); in pca953x_irq_pending()
744 bitmap_replace(new_stat, chip->irq_trig_fall, chip->irq_trig_raise, cur_stat, gc->ngpio); in pca953x_irq_pending()
746 bitmap_and(pending, new_stat, trigger, gc->ngpio); in pca953x_irq_pending()
748 return !bitmap_empty(pending, gc->ngpio); in pca953x_irq_pending()
751 ret = pca953x_read_regs(chip, chip->regs->input, cur_stat); in pca953x_irq_pending()
756 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_pending()
758 bitmap_copy(old_stat, chip->irq_stat, gc->ngpio); in pca953x_irq_pending()
760 bitmap_and(new_stat, cur_stat, reg_direction, gc->ngpio); in pca953x_irq_pending()
761 bitmap_xor(cur_stat, new_stat, old_stat, gc->ngpio); in pca953x_irq_pending()
762 bitmap_and(trigger, cur_stat, chip->irq_mask, gc->ngpio); in pca953x_irq_pending()
764 if (bitmap_empty(trigger, gc->ngpio)) in pca953x_irq_pending()
767 bitmap_copy(chip->irq_stat, new_stat, gc->ngpio); in pca953x_irq_pending()
769 bitmap_and(cur_stat, chip->irq_trig_fall, old_stat, gc->ngpio); in pca953x_irq_pending()
770 bitmap_and(old_stat, chip->irq_trig_raise, new_stat, gc->ngpio); in pca953x_irq_pending()
771 bitmap_or(new_stat, old_stat, cur_stat, gc->ngpio); in pca953x_irq_pending()
772 bitmap_and(pending, new_stat, trigger, gc->ngpio); in pca953x_irq_pending()
774 return !bitmap_empty(pending, gc->ngpio); in pca953x_irq_pending()
780 struct gpio_chip *gc = &chip->gpio_chip; in pca953x_irq_handler()
787 mutex_lock(&chip->i2c_lock); in pca953x_irq_handler()
789 mutex_unlock(&chip->i2c_lock); in pca953x_irq_handler()
794 for_each_set_bit(level, pending, gc->ngpio) { in pca953x_irq_handler()
795 int nested_irq = irq_find_mapping(gc->irq.domain, level); in pca953x_irq_handler()
798 dev_warn_ratelimited(gc->parent, "unmapped interrupt %d\n", level); in pca953x_irq_handler()
812 struct i2c_client *client = chip->client; in pca953x_irq_setup()
813 struct irq_chip *irq_chip = &chip->irq_chip; in pca953x_irq_setup()
820 ret = pca953x_acpi_get_irq(&client->dev); in pca953x_irq_setup()
822 client->irq = ret; in pca953x_irq_setup()
825 if (!client->irq) in pca953x_irq_setup()
828 if (irq_base == -1) in pca953x_irq_setup()
831 if (!(chip->driver_data & PCA_INT)) in pca953x_irq_setup()
834 ret = pca953x_read_regs(chip, chip->regs->input, irq_stat); in pca953x_irq_setup()
843 pca953x_read_regs(chip, chip->regs->direction, reg_direction); in pca953x_irq_setup()
844 bitmap_and(chip->irq_stat, irq_stat, reg_direction, chip->gpio_chip.ngpio); in pca953x_irq_setup()
845 mutex_init(&chip->irq_lock); in pca953x_irq_setup()
847 irq_chip->name = dev_name(&client->dev); in pca953x_irq_setup()
848 irq_chip->irq_mask = pca953x_irq_mask; in pca953x_irq_setup()
849 irq_chip->irq_unmask = pca953x_irq_unmask; in pca953x_irq_setup()
850 irq_chip->irq_set_wake = pca953x_irq_set_wake; in pca953x_irq_setup()
851 irq_chip->irq_bus_lock = pca953x_irq_bus_lock; in pca953x_irq_setup()
852 irq_chip->irq_bus_sync_unlock = pca953x_irq_bus_sync_unlock; in pca953x_irq_setup()
853 irq_chip->irq_set_type = pca953x_irq_set_type; in pca953x_irq_setup()
854 irq_chip->irq_shutdown = pca953x_irq_shutdown; in pca953x_irq_setup()
856 girq = &chip->gpio_chip.irq; in pca953x_irq_setup()
857 girq->chip = irq_chip; in pca953x_irq_setup()
859 girq->parent_handler = NULL; in pca953x_irq_setup()
860 girq->num_parents = 0; in pca953x_irq_setup()
861 girq->parents = NULL; in pca953x_irq_setup()
862 girq->default_type = IRQ_TYPE_NONE; in pca953x_irq_setup()
863 girq->handler = handle_simple_irq; in pca953x_irq_setup()
864 girq->threaded = true; in pca953x_irq_setup()
865 girq->first = irq_base; /* FIXME: get rid of this */ in pca953x_irq_setup()
867 ret = devm_request_threaded_irq(&client->dev, client->irq, in pca953x_irq_setup()
870 dev_name(&client->dev), chip); in pca953x_irq_setup()
872 dev_err(&client->dev, "failed to request irq %d\n", in pca953x_irq_setup()
873 client->irq); in pca953x_irq_setup()
884 struct i2c_client *client = chip->client; in pca953x_irq_setup()
886 if (client->irq && irq_base != -1 && (chip->driver_data & PCA_INT)) in pca953x_irq_setup()
887 dev_warn(&client->dev, "interrupt support not compiled in\n"); in pca953x_irq_setup()
898 ret = regcache_sync_region(chip->regmap, chip->regs->output, in device_pca95xx_init()
899 chip->regs->output + NBANK(chip)); in device_pca95xx_init()
903 ret = regcache_sync_region(chip->regmap, chip->regs->direction, in device_pca95xx_init()
904 chip->regs->direction + NBANK(chip)); in device_pca95xx_init()
914 ret = pca953x_write_regs(chip, chip->regs->invert, val); in device_pca95xx_init()
922 unsigned int i; in device_pca957x_init() local
930 for (i = 0; i < NBANK(chip); i++) in device_pca957x_init()
931 bitmap_set_value8(val, 0x02, i * BANK_SZ); in device_pca957x_init()
953 chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL); in pca953x_probe()
955 return -ENOMEM; in pca953x_probe()
957 pdata = dev_get_platdata(&client->dev); in pca953x_probe()
959 irq_base = pdata->irq_base; in pca953x_probe()
960 chip->gpio_start = pdata->gpio_base; in pca953x_probe()
961 invert = pdata->invert; in pca953x_probe()
962 chip->names = pdata->names; in pca953x_probe()
966 chip->gpio_start = -1; in pca953x_probe()
970 * See if we need to de-assert a reset pin. in pca953x_probe()
972 * There is no known ACPI-enabled platforms that are in pca953x_probe()
976 reset_gpio = devm_gpiod_get_optional(&client->dev, "reset", in pca953x_probe()
982 chip->client = client; in pca953x_probe()
984 reg = devm_regulator_get(&client->dev, "vcc"); in pca953x_probe()
986 return dev_err_probe(&client->dev, PTR_ERR(reg), "reg get err\n"); in pca953x_probe()
990 dev_err(&client->dev, "reg en err: %d\n", ret); in pca953x_probe()
993 chip->regulator = reg; in pca953x_probe()
996 chip->driver_data = i2c_id->driver_data; in pca953x_probe()
1000 match = device_get_match_data(&client->dev); in pca953x_probe()
1002 ret = -ENODEV; in pca953x_probe()
1006 chip->driver_data = (uintptr_t)match; in pca953x_probe()
1011 pca953x_setup_gpio(chip, chip->driver_data & PCA_GPIO_MASK); in pca953x_probe()
1013 if (NBANK(chip) > 2 || PCA_CHIP_TYPE(chip->driver_data) == PCA957X_TYPE) { in pca953x_probe()
1014 dev_info(&client->dev, "using AI\n"); in pca953x_probe()
1017 dev_info(&client->dev, "using no AI\n"); in pca953x_probe()
1021 chip->regmap = devm_regmap_init_i2c(client, regmap_config); in pca953x_probe()
1022 if (IS_ERR(chip->regmap)) { in pca953x_probe()
1023 ret = PTR_ERR(chip->regmap); in pca953x_probe()
1027 regcache_mark_dirty(chip->regmap); in pca953x_probe()
1029 mutex_init(&chip->i2c_lock); in pca953x_probe()
1031 * In case we have an i2c-mux controlled by a GPIO provided by an in pca953x_probe()
1034 * subclass for chip->i2c_lock. in pca953x_probe()
1037 * false positives when the expander controlling the i2c-mux is on in pca953x_probe()
1043 * applied to all other i2c-controlled GPIO expanders (and potentially in pca953x_probe()
1044 * regmap-i2c). in pca953x_probe()
1046 lockdep_set_subclass(&chip->i2c_lock, in pca953x_probe()
1047 i2c_adapter_depth(client->adapter)); in pca953x_probe()
1053 if (PCA_CHIP_TYPE(chip->driver_data) == PCA953X_TYPE) { in pca953x_probe()
1054 chip->regs = &pca953x_regs; in pca953x_probe()
1057 chip->regs = &pca957x_regs; in pca953x_probe()
1067 ret = devm_gpiochip_add_data(&client->dev, &chip->gpio_chip, chip); in pca953x_probe()
1071 if (pdata && pdata->setup) { in pca953x_probe()
1072 ret = pdata->setup(client, chip->gpio_chip.base, in pca953x_probe()
1073 chip->gpio_chip.ngpio, pdata->context); in pca953x_probe()
1075 dev_warn(&client->dev, "setup failed, %d\n", ret); in pca953x_probe()
1081 regulator_disable(chip->regulator); in pca953x_probe()
1087 struct pca953x_platform_data *pdata = dev_get_platdata(&client->dev); in pca953x_remove()
1091 if (pdata && pdata->teardown) { in pca953x_remove()
1092 ret = pdata->teardown(client, chip->gpio_chip.base, in pca953x_remove()
1093 chip->gpio_chip.ngpio, pdata->context); in pca953x_remove()
1095 dev_err(&client->dev, "teardown failed, %d\n", ret); in pca953x_remove()
1100 regulator_disable(chip->regulator); in pca953x_remove()
1115 ret = regcache_sync_region(chip->regmap, chip->regs->direction, in pca953x_regcache_sync()
1116 chip->regs->direction + NBANK(chip)); in pca953x_regcache_sync()
1122 ret = regcache_sync_region(chip->regmap, chip->regs->output, in pca953x_regcache_sync()
1123 chip->regs->output + NBANK(chip)); in pca953x_regcache_sync()
1130 if (chip->driver_data & PCA_PCAL) { in pca953x_regcache_sync()
1131 ret = regcache_sync_region(chip->regmap, PCAL953X_IN_LATCH, in pca953x_regcache_sync()
1139 ret = regcache_sync_region(chip->regmap, PCAL953X_INT_MASK, in pca953x_regcache_sync()
1156 regcache_cache_only(chip->regmap, true); in pca953x_suspend()
1158 if (atomic_read(&chip->wakeup_path)) in pca953x_suspend()
1161 regulator_disable(chip->regulator); in pca953x_suspend()
1171 if (!atomic_read(&chip->wakeup_path)) { in pca953x_resume()
1172 ret = regulator_enable(chip->regulator); in pca953x_resume()
1179 regcache_cache_only(chip->regmap, false); in pca953x_resume()
1180 regcache_mark_dirty(chip->regmap); in pca953x_resume()
1185 ret = regcache_sync(chip->regmap); in pca953x_resume()
1195 /* convenience to stop overlong match-table lines */
1200 { .compatible = "nxp,pca6416", .data = OF_953X(16, PCA_INT), },
1201 { .compatible = "nxp,pca9505", .data = OF_953X(40, PCA_INT), },
1202 { .compatible = "nxp,pca9534", .data = OF_953X( 8, PCA_INT), },
1203 { .compatible = "nxp,pca9535", .data = OF_953X(16, PCA_INT), },
1204 { .compatible = "nxp,pca9536", .data = OF_953X( 4, 0), },
1205 { .compatible = "nxp,pca9537", .data = OF_953X( 4, PCA_INT), },
1206 { .compatible = "nxp,pca9538", .data = OF_953X( 8, PCA_INT), },
1207 { .compatible = "nxp,pca9539", .data = OF_953X(16, PCA_INT), },
1208 { .compatible = "nxp,pca9554", .data = OF_953X( 8, PCA_INT), },
1209 { .compatible = "nxp,pca9555", .data = OF_953X(16, PCA_INT), },
1210 { .compatible = "nxp,pca9556", .data = OF_953X( 8, 0), },
1211 { .compatible = "nxp,pca9557", .data = OF_953X( 8, 0), },
1212 { .compatible = "nxp,pca9574", .data = OF_957X( 8, PCA_INT), },
1213 { .compatible = "nxp,pca9575", .data = OF_957X(16, PCA_INT), },
1214 { .compatible = "nxp,pca9698", .data = OF_953X(40, 0), },
1216 { .compatible = "nxp,pcal6416", .data = OF_953X(16, PCA_LATCH_INT), },
1217 { .compatible = "nxp,pcal6524", .data = OF_953X(24, PCA_LATCH_INT), },
1218 { .compatible = "nxp,pcal9535", .data = OF_953X(16, PCA_LATCH_INT), },
1219 { .compatible = "nxp,pcal9554b", .data = OF_953X( 8, PCA_LATCH_INT), },
1220 { .compatible = "nxp,pcal9555a", .data = OF_953X(16, PCA_LATCH_INT), },