blob: 228f14938e0fd1f14a82bbc9a6382e88c0a93ccf [file] [log] [blame]
/*
* Copyright (c) 2016 Linaro Ltd.
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _GPIO_MMIO32_H_
#define _GPIO_MMIO32_H_
#include <device.h>
#include <gpio.h>
#include <zephyr/types.h>
struct gpio_mmio32_config {
volatile u32_t *reg;
u32_t mask;
};
struct gpio_mmio32_context {
const struct gpio_mmio32_config *config;
u32_t invert; /* Mask of 'reg' bits that should be inverted */
};
int gpio_mmio32_init(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 _dev_name Device name.
* @param _drv_name The name this instance of the driver exposes to the system.
* @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.
*
* @see DEVICE_INIT
*/
#define GPIO_MMIO32_INIT(_dev_name, _drv_name, _address, _mask) \
\
static struct gpio_mmio32_context _dev_name##_dev_data; \
\
static const struct gpio_mmio32_config _dev_name##_dev_cfg = { \
.reg = (volatile u32_t *)_address, \
.mask = _mask, \
}; \
\
DEVICE_INIT(_dev_name, _drv_name, \
&gpio_mmio32_init, \
&_dev_name##_dev_data, \
&_dev_name##_dev_cfg, \
PRE_KERNEL_1, CONFIG_KERNEL_INIT_PRIORITY_DEVICE)
#else /* CONFIG_GPIO_MMIO32 */
/* Null definition for when support not configured into kernel */
#define GPIO_MMIO32_INIT(_dev_name, _drv_name, _address, _mask)
#endif
#endif /* _GPIO_MMIO32_H_ */