Lines Matching +full:in +full:- +full:trig +full:- +full:gpios

4  * SPDX-License-Identifier: Apache-2.0
8 * @file Driver for PCA(L)xxxx SERIES I2C-based GPIO expander.
57 * @note must be consistent in order with @ref enum gpio_pca_series_part_no
70 * - Type 0: PCA953X, PCA955X
71 * - Type 1: PCAL953X, PCAL955X, PCAL64XXA
72 * - Type 2: PCA957X
73 * - Type 3: PCAL65XX
101 * #1: "pull_enable" register is named "bus_hold" in PCA957x datasheet.
103 * port-level "pin output configuration" register.
144 uint8_t port_no; /* number of 8-pin ports on device */
171 * - if CONFIG_GPIO_PCA_SERIES_CACHE_ALL is set,
173 * - if CONFIG_GPIO_PCA_SERIES_CACHE_ALL is not set,
178 const struct device *self; /** Self-reference to the driver instance */
201 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reg_get_addr()
210 return cfg->part_cfg->regs[reg_type]; in gpio_pca_series_reg_get_addr()
214 * @brief get per-port size for register
218 * @return uint32_t size in bytes
268 * @return uint32_t size in bytes
274 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reg_size()
276 return gpio_pca_series_reg_size_per_port(dev, reg_type) * cfg->part_cfg->port_no; in gpio_pca_series_reg_size()
297 * @param buf pointer to data in little-endian byteorder
299 * -EFAULT if register is not supported
300 * -EIO if i2c failure
305 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reg_read()
314 return -EFAULT; in gpio_pca_series_reg_read()
319 return -EFAULT; in gpio_pca_series_reg_read()
323 ret = i2c_write_read_dt(&cfg->i2c, (uint8_t *)&addr, 1, (uint8_t *)buf, size); in gpio_pca_series_reg_read()
338 * @param buf pointer to data in little-endian byteorder
340 * -EFAULT if register is not supported
341 * -EIO if i2c failure
346 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reg_write()
354 return -EFAULT; in gpio_pca_series_reg_write()
359 return -EFAULT; in gpio_pca_series_reg_write()
371 ret = i2c_transfer_dt(&cfg->i2c, msg, 2); in gpio_pca_series_reg_write()
394 * @note full cache is stored in le byteorder, consistent with reg layout.
395 * mini cache is stored in cpu byteorder
406 * other offset in bytes related to cache pointer
411 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reg_cache_offset()
413 if (cfg->part_cfg->cache_map[reg_type] == PCA_REG_INVALID) { in gpio_pca_series_reg_cache_offset()
416 return cfg->part_cfg->cache_map[reg_type] * cfg->part_cfg->port_no; in gpio_pca_series_reg_cache_offset()
422 * in cache
427 * other offset in bytes related to cache pointer
431 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_reg_cache_reset()
458 ((uint8_t *)data->cache) + cache_offset); in gpio_pca_series_reg_cache_reset()
483 ((uint8_t *)data->cache) + cache_offset); in gpio_pca_series_reg_cache_reset()
497 * @param buf pointer to read data in little-endian byteorder
499 * -EINVAL if invalid arguments
500 * -EACCES if register is uncacheable
506 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_reg_cache_read()
514 return -EINVAL; in gpio_pca_series_reg_cache_read()
519 return -EFAULT; in gpio_pca_series_reg_cache_read()
523 src = ((uint8_t *)data->cache) + offset; in gpio_pca_series_reg_cache_read()
534 * @param buf pointer to new data to update from, in little-endian byteorder
536 * -EINVAL if invalid arguments
537 * -EACCES if register is uncacheable
543 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_reg_cache_update()
550 return -EINVAL; in gpio_pca_series_reg_cache_update()
554 LOG_ERR("can not update non-cacheable reg type %d", reg_type); in gpio_pca_series_reg_cache_update()
555 return -EACCES; in gpio_pca_series_reg_cache_update()
562 dst = ((uint8_t *)data->cache) + offset; in gpio_pca_series_reg_cache_update()
579 uint32_t int_rise; /** only used if interrupt edge is software-compared */
580 uint32_t int_fall; /** only used if interrupt edge is software-compared */
587 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_reg_cache_mini_get()
589 (struct gpio_pca_series_reg_cache_mini *)(&data->cache); in gpio_pca_series_reg_cache_mini_get()
596 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reg_cache_mini_reset()
602 (uint8_t *)&cache->output); in gpio_pca_series_reg_cache_mini_reset()
608 cache->output = sys_le32_to_cpu(cache->output); in gpio_pca_series_reg_cache_mini_reset()
611 cache->int_rise = 0; in gpio_pca_series_reg_cache_mini_reset()
612 cache->int_fall = 0; in gpio_pca_series_reg_cache_mini_reset()
616 cfg->part_cfg->flags & PCA_HAS_OUT_CONFIG ? in gpio_pca_series_reg_cache_mini_reset()
619 ret = gpio_pca_series_reg_read(dev, input_reg, (uint8_t *)&cache->input_old); in gpio_pca_series_reg_cache_mini_reset()
624 cache->input_old = sys_le32_to_cpu(cache->input_old); in gpio_pca_series_reg_cache_mini_reset()
654 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_reset()
660 if (cfg->gpio_rst.port != NULL) { in gpio_pca_series_reset()
661 if (!device_is_ready(cfg->gpio_rst.port)) { in gpio_pca_series_reset()
664 /* Reset gpio should be set to active LOW in dts */ in gpio_pca_series_reset()
665 ret = gpio_pin_configure_dt(&cfg->gpio_rst, in gpio_pca_series_reset()
671 ret = gpio_pin_set_dt(&cfg->gpio_rst, 0U); in gpio_pca_series_reset()
681 if (cfg->gpio_rst.port != NULL) { in gpio_pca_series_reset()
690 if (cfg->part_cfg->flags & PCA_HAS_LATCH) { in gpio_pca_series_reset()
695 if (cfg->part_cfg->flags & PCA_HAS_PULL) { in gpio_pca_series_reset()
699 if (cfg->part_cfg->flags & PCA_HAS_OUT_CONFIG) { in gpio_pca_series_reset()
703 if (cfg->part_cfg->flags & PCA_HAS_INT_MASK) { in gpio_pca_series_reset()
706 if (cfg->part_cfg->flags & PCA_HAS_INT_EXTEND) { in gpio_pca_series_reset()
721 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_debug_dump()
722 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_debug_dump()
726 LOG_WRN("device: %s", dev->name); in gpio_pca_series_debug_dump()
729 data->cache, cfg->part_cfg->cache_size); in gpio_pca_series_debug_dump()
731 LOG_WRN("cache base addr: 0x%p", data->cache); in gpio_pca_series_debug_dump()
745 uint8_t reg = cfg->part_cfg->regs[reg_type]; in gpio_pca_series_debug_dump()
787 LOG_WRN("%.2d\t%-24s\t0x%2.2x\t0x%16.16x\t0x%2.2x\t0x%16.16x\t" in gpio_pca_series_debug_dump()
801 LOG_WRN("%.2d\t%-24s\tNone\tNone\t\t\t0x%2.2x\t0x%16.16x\t" in gpio_pca_series_debug_dump()
807 LOG_WRN("%.2d\t%-24s\t0x%2.2x\t0x%16.16x\t" in gpio_pca_series_debug_dump()
828 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_cache_test()
836 LOG_WRN("device: %s", dev->name); in gpio_pca_series_cache_test()
843 LOG_WRN("skip reg %d: not present or non-cacheable", reg_type); in gpio_pca_series_cache_test()
894 * -ENOTSUP if unsupported config flags are provided
899 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_pin_configure()
900 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_pin_configure()
905 return -ENOTSUP; in gpio_pca_series_pin_configure()
909 (cfg->part_cfg->flags & PCA_HAS_OUT_CONFIG) == 0U) { in gpio_pca_series_pin_configure()
910 return -ENOTSUP; in gpio_pca_series_pin_configure()
914 if ((cfg->part_cfg->flags & PCA_HAS_PULL) == 0U) { in gpio_pca_series_pin_configure()
915 return -ENOTSUP; in gpio_pca_series_pin_configure()
919 return -EWOULDBLOCK; in gpio_pca_series_pin_configure()
922 LOG_DBG("dev %s configure pin %d flag 0x%x", dev->name, pin, flags); in gpio_pca_series_pin_configure()
924 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_pin_configure()
934 if (cfg->part_cfg->flags & PCA_HAS_OUT_CONFIG) { in gpio_pca_series_pin_configure()
940 reg_value |= (BIT(pin)); /* set bit to set open-drain */ in gpio_pca_series_pin_configure()
942 reg_value &= (~BIT(pin)); /* clear bit to set push-pull */ in gpio_pca_series_pin_configure()
949 if ((cfg->part_cfg->flags & PCA_HAS_PULL)) { in gpio_pca_series_pin_configure()
986 ret = -EINVAL; /* should never fail */ in gpio_pca_series_pin_configure()
991 out_old = gpio_pca_series_reg_cache_mini_get(dev)->output; in gpio_pca_series_pin_configure()
1008 gpio_pca_series_reg_cache_mini_get(dev)->output = in gpio_pca_series_pin_configure()
1027 k_sem_give(&data->lock); in gpio_pca_series_pin_configure()
1028 LOG_DBG("dev %s configure return %d", dev->name, ret); in gpio_pca_series_pin_configure()
1042 * -EWOULDBLOCK if called from ISR context
1047 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_port_read_standard()
1053 return -EWOULDBLOCK; in gpio_pca_series_port_read_standard()
1056 LOG_DBG("dev %s standard_read", dev->name); in gpio_pca_series_port_read_standard()
1063 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_port_read_standard()
1073 k_sem_give(&data->lock); in gpio_pca_series_port_read_standard()
1077 dev->name, ret, (uint32_t) *value); in gpio_pca_series_port_read_standard()
1088 * -EWOULDBLOCK if called from ISR context
1093 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_port_read_extended()
1094 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_port_read_extended()
1107 if ((cfg->part_cfg->flags & check_flags) != check_flags) { in gpio_pca_series_port_read_extended()
1109 return -ENOTSUP; in gpio_pca_series_port_read_extended()
1117 return -EWOULDBLOCK; in gpio_pca_series_port_read_extended()
1120 LOG_DBG("dev %s extended_read", dev->name); in gpio_pca_series_port_read_extended()
1121 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_port_read_extended()
1132 k_sem_give(&data->lock); in gpio_pca_series_port_read_extended()
1134 dev->name, ret, (uint32_t) *value); in gpio_pca_series_port_read_extended()
1141 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_port_write()
1148 return -EWOULDBLOCK; in gpio_pca_series_port_write()
1152 dev->name, (uint32_t)mask, (uint32_t)value, (uint32_t)toggle); in gpio_pca_series_port_write()
1153 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_port_write()
1160 return -EINVAL; /** should never fail */ in gpio_pca_series_port_write()
1164 LOG_DBG("access address 0x%8.8x", (uint32_t)data->cache); in gpio_pca_series_port_write()
1165 out_old = gpio_pca_series_reg_cache_mini_get(dev)->output; in gpio_pca_series_port_write()
1175 gpio_pca_series_reg_cache_mini_get(dev)->output = sys_le32_to_cpu(out); in gpio_pca_series_port_write()
1179 k_sem_give(&data->lock); in gpio_pca_series_port_write()
1181 LOG_DBG("dev %s write return %d result 0x%8.8x", dev->name, ret, out); in gpio_pca_series_port_write()
1208 * @brief Configure interrupt for device with software-compared interrupt edge
1218 * @param trig
1223 enum gpio_int_trig trig) in gpio_pca_series_pin_interrupt_configure_standard() argument
1225 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_pin_interrupt_configure_standard()
1226 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_pin_interrupt_configure_standard()
1231 if (cfg->gpio_int.port == NULL) { in gpio_pca_series_pin_interrupt_configure_standard()
1232 return -ENOTSUP; in gpio_pca_series_pin_interrupt_configure_standard()
1234 /* Device does not support level-triggered interrupts. */ in gpio_pca_series_pin_interrupt_configure_standard()
1236 return -ENOTSUP; in gpio_pca_series_pin_interrupt_configure_standard()
1239 return -EWOULDBLOCK; in gpio_pca_series_pin_interrupt_configure_standard()
1242 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_pin_interrupt_configure_standard()
1270 int_rise = gpio_pca_series_reg_cache_mini_get(dev)->int_rise; in gpio_pca_series_pin_interrupt_configure_standard()
1271 int_fall = gpio_pca_series_reg_cache_mini_get(dev)->int_fall; in gpio_pca_series_pin_interrupt_configure_standard()
1278 if (trig == GPIO_INT_TRIG_BOTH) { in gpio_pca_series_pin_interrupt_configure_standard()
1281 } else if (trig == GPIO_INT_TRIG_LOW) { in gpio_pca_series_pin_interrupt_configure_standard()
1284 } else if (trig == GPIO_INT_TRIG_HIGH) { in gpio_pca_series_pin_interrupt_configure_standard()
1309 gpio_pca_series_reg_cache_mini_get(dev)->int_rise = int_rise; in gpio_pca_series_pin_interrupt_configure_standard()
1310 gpio_pca_series_reg_cache_mini_get(dev)->int_fall = int_fall; in gpio_pca_series_pin_interrupt_configure_standard()
1314 if (cfg->part_cfg->flags & PCA_HAS_LATCH) { in gpio_pca_series_pin_interrupt_configure_standard()
1323 if (cfg->part_cfg->flags & PCA_HAS_INT_MASK) { in gpio_pca_series_pin_interrupt_configure_standard()
1333 k_sem_give(&data->lock); in gpio_pca_series_pin_interrupt_configure_standard()
1342 * @brief Configure interrupt for device with hardware-selected interrupt edge
1354 enum gpio_int_trig trig) in gpio_pca_series_pin_interrupt_configure_extended() argument
1356 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_pin_interrupt_configure_extended()
1357 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_pin_interrupt_configure_extended()
1364 if (cfg->gpio_int.port == NULL) { in gpio_pca_series_pin_interrupt_configure_extended()
1365 return -ENOTSUP; in gpio_pca_series_pin_interrupt_configure_extended()
1367 /* Device does not support level-triggered interrupts. */ in gpio_pca_series_pin_interrupt_configure_extended()
1369 return -ENOTSUP; in gpio_pca_series_pin_interrupt_configure_extended()
1381 if ((cfg->part_cfg->flags & check_flags) != check_flags) { in gpio_pca_series_pin_interrupt_configure_extended()
1383 return -ENOTSUP; in gpio_pca_series_pin_interrupt_configure_extended()
1388 return -EWOULDBLOCK; in gpio_pca_series_pin_interrupt_configure_extended()
1391 LOG_DBG("int cfg(e) pin %d mode %d trig %d", pin, mode, trig); in gpio_pca_series_pin_interrupt_configure_extended()
1393 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_pin_interrupt_configure_extended()
1423 if (trig == GPIO_INT_TRIG_BOTH) { in gpio_pca_series_pin_interrupt_configure_extended()
1426 } else if (trig == GPIO_INT_TRIG_LOW) { in gpio_pca_series_pin_interrupt_configure_extended()
1429 } else if (trig == GPIO_INT_TRIG_HIGH) { in gpio_pca_series_pin_interrupt_configure_extended()
1460 k_sem_give(&data->lock); in gpio_pca_series_pin_interrupt_configure_extended()
1467 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_manage_callback()
1469 return gpio_manage_callback(&data->callbacks, callback, set); in gpio_pca_series_manage_callback()
1475 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_interrupt_handler_standard()
1482 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_interrupt_handler_standard()
1507 input_old = gpio_pca_series_reg_cache_mini_get(dev)->input_old; in gpio_pca_series_interrupt_handler_standard()
1508 int_rise = gpio_pca_series_reg_cache_mini_get(dev)->int_rise; in gpio_pca_series_interrupt_handler_standard()
1509 int_fall = gpio_pca_series_reg_cache_mini_get(dev)->int_fall; in gpio_pca_series_interrupt_handler_standard()
1537 gpio_pca_series_reg_cache_mini_get(dev)->input_old = input; in gpio_pca_series_interrupt_handler_standard()
1541 k_sem_give(&data->lock); in gpio_pca_series_interrupt_handler_standard()
1547 gpio_fire_callbacks(&data->callbacks, dev, int_status); in gpio_pca_series_interrupt_handler_standard()
1553 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_interrupt_handler_extended()
1554 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_interrupt_handler_extended()
1568 if ((cfg->part_cfg->flags & check_flags) != check_flags) { in gpio_pca_series_interrupt_handler_extended()
1578 k_sem_take(&data->lock, K_FOREVER); in gpio_pca_series_interrupt_handler_extended()
1595 k_sem_give(&data->lock); in gpio_pca_series_interrupt_handler_extended()
1599 gpio_fire_callbacks(&data->callbacks, dev, int_status); in gpio_pca_series_interrupt_handler_extended()
1607 const struct device *dev = data->self; in gpio_pca_series_interrupt_worker_standard()
1616 const struct device *dev = data->self; in gpio_pca_series_interrupt_worker_extended()
1632 k_work_submit(&data->int_work); in gpio_pca_series_gpio_int_handler()
1679 const struct gpio_pca_series_config *cfg = dev->config; in gpio_pca_series_init()
1680 struct gpio_pca_series_data *data = dev->data; in gpio_pca_series_init()
1683 if (!device_is_ready(cfg->i2c.bus)) { in gpio_pca_series_init()
1712 data->self = dev; in gpio_pca_series_init()
1717 if ((cfg->part_cfg->flags & check_flags) == check_flags) { in gpio_pca_series_init()
1718 k_work_init(&data->int_work, gpio_pca_series_interrupt_worker_extended); in gpio_pca_series_init()
1720 k_work_init(&data->int_work, gpio_pca_series_interrupt_worker_standard); in gpio_pca_series_init()
1724 if (cfg->gpio_int.port != NULL) { in gpio_pca_series_init()
1725 if (!device_is_ready(cfg->gpio_int.port)) { in gpio_pca_series_init()
1727 ret = -EINVAL; in gpio_pca_series_init()
1731 ret = gpio_pin_configure_dt(&cfg->gpio_int, GPIO_INPUT); in gpio_pca_series_init()
1736 ret = gpio_pin_interrupt_configure_dt(&cfg->gpio_int, GPIO_INT_EDGE_TO_ACTIVE); in gpio_pca_series_init()
1741 gpio_init_callback(&data->gpio_cb, gpio_pca_series_gpio_int_handler, in gpio_pca_series_init()
1742 BIT(cfg->gpio_int.pin)); in gpio_pca_series_init()
1744 ret = gpio_add_callback(cfg->gpio_int.port, &data->gpio_cb); in gpio_pca_series_init()
1746 LOG_WRN("pca interrupt enabled w/o int-gpios configured in dts"); in gpio_pca_series_init()
1759 LOG_ERR("%s init failed: %d", dev->name, ret); in gpio_pca_series_init()
1761 LOG_INF("%s init ok", dev->name); in gpio_pca_series_init()
1807 * - present on all devices
1808 * - not used if PCA_HAS_OUT_CONFIG
1809 * - non-cacheable
1811 * - present on all devices
1812 * - cacheable
1814 * - present on all devices
1815 * - cacheable
1817 * - present if PCA_HAS_LATCH
1818 * - cacheable if present
1820 * - present if PCA_HAS_LATCH
1821 * - non-cacheable
1823 * - present if PCA_HAS_PULL
1824 * - cacheable if present
1826 * - present if PCA_HAS_PULL
1827 * - cacheable if present
1829 * - present if PCA_HAS_OUT_CONFIG
1830 * - replaces 1b_input_port if present
1831 * - non-cacheable
1833 * - present if PCA_HAS_OUT_CONFIG
1834 * - cacheable if present
1836 * - present if PCA_HAS_INT_MASK
1837 * - not present by default
1838 * - cacheable if PCA_HAS_INT_EXTEND
1840 * - present if PCA_HAS_INT_MASK
1841 * - not used if not PCA_HAS_INT_EXTEND
1842 * - read only
1843 * - non-cacheable
1845 * - present if PCA_HAS_INT_EXTEND
1846 * - cacheable if present
1848 * - present if PCA_HAS_INT_EXTEND
1849 * - write only
1850 * - non-cacheable
1852 * - not present on all devices (fake cache)
1853 * - store last input value
1854 * - cacheable (present) if not PCA_HAS_INT_EXTEND
1856 * - not present on all devices (fake cache)
1857 * - store pins interrupt on rising edge
1858 * - cacheable (present) if not PCA_HAS_INT_EXTEND
1860 * - not present on all devices (fake cache)
1861 * - store pins interrupt on falling edge
1862 * - cacheable (present) if not PCA_HAS_INT_EXTEND
1894 PCA_REG_INVALID, /** input_port if not PCA_HAS_OUT_CONFIG, non-cacheable */
1902 PCA_REG_INVALID, /** input_status if PCA_HAS_OUT_CONFIG, non-cacheable */
1906 * non-cacheable if not PCA_HAS_INT_EXTEND
1908 PCA_REG_INVALID, /** int_status if PCA_HAS_INT_MASK, non-cacheable */
1910 PCA_REG_INVALID, /** interrupt_clear if PCA_HAS_INT_EXTEND, non-cacheable */
1921 0x00, /** input_port if not PCA_HAS_OUT_CONFIG, non-cacheable */
1929 PCA_REG_INVALID, /** input_status if PCA_HAS_OUT_CONFIG, non-cacheable */
1933 * non-cacheable if not PCA_HAS_INT_EXTEND
1937 PCA_REG_INVALID, /** interrupt_clear if PCA_HAS_INT_EXTEND, non-cacheable */
1985 0x00, /** input_port if not PCA_HAS_OUT_CONFIG, non-cacheable */
1993 PCA_REG_INVALID, /** input_status if PCA_HAS_OUT_CONFIG, non-cacheable */
1997 * non-cacheable if not PCA_HAS_INT_EXTEND
2001 PCA_REG_INVALID, /** interrupt_clear if PCA_HAS_INT_EXTEND, non-cacheable */
2073 PCA_REG_INVALID, /** input_port if not PCA_HAS_OUT_CONFIG, non-cacheable */
2081 PCA_REG_INVALID, /** input_status if PCA_HAS_OUT_CONFIG, non-cacheable */
2085 * non-cacheable if not PCA_HAS_INT_EXTEND
2087 PCA_REG_INVALID, /** int_status if PCA_HAS_INT_MASK, non-cacheable */
2089 PCA_REG_INVALID, /** interrupt_clear if PCA_HAS_INT_EXTEND, non-cacheable */
2100 PCA_REG_INVALID, /** input_port if not PCA_HAS_OUT_CONFIG, non-cacheable */
2108 0x6c, /** input_status if PCA_HAS_OUT_CONFIG, non-cacheable */
2112 * non-cacheable if not PCA_HAS_INT_EXTEND
2116 0x68, /** interrupt_clear if PCA_HAS_INT_EXTEND, non-cacheable */
2142 PCA_REG_INVALID, /** input_port if not PCA_HAS_OUT_CONFIG, non-cacheable */
2150 0x6c, /** input_status if PCA_HAS_OUT_CONFIG, non-cacheable */
2154 * non-cacheable if not PCA_HAS_INT_EXTEND
2158 0x68, /** interrupt_clear if PCA_HAS_INT_EXTEND, non-cacheable */