123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- /*
- * Copyright (c) 2016 Linaro Ltd.
- *
- * SPDX-License-Identifier: Apache-2.0
- */
- #ifndef ZEPHYR_INCLUDE_DRIVERS_GPIO_GPIO_MMIO32_H_
- #define ZEPHYR_INCLUDE_DRIVERS_GPIO_GPIO_MMIO32_H_
- #include <device.h>
- #include <drivers/gpio.h>
- #include <zephyr/types.h>
- extern const struct gpio_driver_api gpio_mmio32_api;
- struct gpio_mmio32_config {
- /* gpio_driver_config needs to be first */
- struct gpio_driver_config common;
- volatile uint32_t *reg;
- uint32_t mask;
- };
- struct gpio_mmio32_context {
- /* gpio_driver_data needs to be first */
- struct gpio_driver_data common;
- const struct gpio_mmio32_config *config;
- };
- int gpio_mmio32_init(const struct device *dev);
- #ifdef CONFIG_GPIO_MMIO32
- /**
- * Create a device object for accessing a simple 32-bit i/o register using the
- * same APIs as GPIO drivers.
- *
- * @param node_id The devicetree node identifier.
- * @param _address The address of the 32-bit i/o register the device will
- * provide access to.
- * @param _mask Mask of bits in the register that it is valid to access.
- * E.g. 0xffffffffu to allow access to all of them.
- *
- */
- #define GPIO_MMIO32_INIT(node_id, _address, _mask) \
- static struct gpio_mmio32_context _CONCAT(Z_DEVICE_DT_DEV_NAME(node_id), _ctx); \
- \
- static const struct gpio_mmio32_config _CONCAT(Z_DEVICE_DT_DEV_NAME(node_id), _cfg) = { \
- .common = { \
- .port_pin_mask = _mask, \
- }, \
- .reg = (volatile uint32_t *)_address, \
- .mask = _mask, \
- }; \
- \
- DEVICE_DT_DEFINE(node_id, \
- &gpio_mmio32_init, \
- NULL, \
- &_CONCAT(Z_DEVICE_DT_DEV_NAME(node_id), _ctx), \
- &_CONCAT(Z_DEVICE_DT_DEV_NAME(node_id), _cfg), \
- PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, \
- &gpio_mmio32_api)
- #else /* CONFIG_GPIO_MMIO32 */
- /* Null definition for when support not configured into kernel */
- #define GPIO_MMIO32_INIT(node_id, _address, _mask)
- #endif
- #endif /* ZEPHYR_INCLUDE_DRIVERS_GPIO_GPIO_MMIO32_H_ */
|