#include <linux/bitops.h>
#include <linux/device.h>
#include <linux/gpio/driver.h>
#include <linux/idr.h>
#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#define EXAR_OFFSET_MPIOLVL_LO …
#define EXAR_OFFSET_MPIOSEL_LO …
#define EXAR_OFFSET_MPIOLVL_HI …
#define EXAR_OFFSET_MPIOSEL_HI …
#define EXAR_UART_CHANNEL_SIZE …
#define DRIVER_NAME …
static DEFINE_IDA(ida_index);
struct exar_gpio_chip { … };
static unsigned int
exar_offset_to_sel_addr(struct exar_gpio_chip *exar_gpio, unsigned int offset)
{ … }
static unsigned int
exar_offset_to_lvl_addr(struct exar_gpio_chip *exar_gpio, unsigned int offset)
{ … }
static unsigned int
exar_offset_to_bit(struct exar_gpio_chip *exar_gpio, unsigned int offset)
{ … }
static int exar_get_direction(struct gpio_chip *chip, unsigned int offset)
{ … }
static int exar_get_value(struct gpio_chip *chip, unsigned int offset)
{ … }
static void exar_set_value(struct gpio_chip *chip, unsigned int offset,
int value)
{ … }
static int exar_direction_output(struct gpio_chip *chip, unsigned int offset,
int value)
{ … }
static int exar_direction_input(struct gpio_chip *chip, unsigned int offset)
{ … }
static void exar_devm_ida_free(void *data)
{ … }
static const struct regmap_config exar_regmap_config = …;
static int gpio_exar_probe(struct platform_device *pdev)
{ … }
static struct platform_driver gpio_exar_driver = …;
module_platform_driver(…) …;
MODULE_ALIAS(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_AUTHOR(…) …;
MODULE_LICENSE(…) …;