#include <linux/bitops.h>
#include <linux/device.h>
#include <linux/errno.h>
#include <linux/gpio/driver.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/property.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/regmap.h>
#define SIFIVE_GPIO_INPUT_VAL …
#define SIFIVE_GPIO_INPUT_EN …
#define SIFIVE_GPIO_OUTPUT_EN …
#define SIFIVE_GPIO_OUTPUT_VAL …
#define SIFIVE_GPIO_RISE_IE …
#define SIFIVE_GPIO_RISE_IP …
#define SIFIVE_GPIO_FALL_IE …
#define SIFIVE_GPIO_FALL_IP …
#define SIFIVE_GPIO_HIGH_IE …
#define SIFIVE_GPIO_HIGH_IP …
#define SIFIVE_GPIO_LOW_IE …
#define SIFIVE_GPIO_LOW_IP …
#define SIFIVE_GPIO_OUTPUT_XOR …
#define SIFIVE_GPIO_MAX …
struct sifive_gpio { … };
static void sifive_gpio_set_ie(struct sifive_gpio *chip, unsigned int offset)
{ … }
static int sifive_gpio_irq_set_type(struct irq_data *d, unsigned int trigger)
{ … }
static void sifive_gpio_irq_enable(struct irq_data *d)
{ … }
static void sifive_gpio_irq_disable(struct irq_data *d)
{ … }
static void sifive_gpio_irq_eoi(struct irq_data *d)
{ … }
static int sifive_gpio_irq_set_affinity(struct irq_data *data,
const struct cpumask *dest,
bool force)
{ … }
static const struct irq_chip sifive_gpio_irqchip = …;
static int sifive_gpio_child_to_parent_hwirq(struct gpio_chip *gc,
unsigned int child,
unsigned int child_type,
unsigned int *parent,
unsigned int *parent_type)
{ … }
static const struct regmap_config sifive_gpio_regmap_config = …;
static int sifive_gpio_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id sifive_gpio_match[] = …;
static struct platform_driver sifive_gpio_driver = …;
module_platform_driver(…) …
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;