#include <linux/module.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/kthread.h>
#include <linux/irq.h>
#include <linux/gpio/machine.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/consumer.h>
#include <linux/platform_device.h>
#include <linux/of.h>
#include <linux/irqdomain.h>
#include <linux/mfd/twl.h>
#ifdef MODULE
#define is_module …
#else
#define is_module() …
#endif
#define MASK_GPIO_CTRL_GPIO0CD1 …
#define MASK_GPIO_CTRL_GPIO1CD2 …
#define MASK_GPIO_CTRL_GPIO_ON …
#define GPIO_32_MASK …
struct gpio_twl4030_priv { … };
static inline int gpio_twl4030_write(u8 address, u8 data)
{ … }
#define TWL4030_LED_LEDEN_REG …
#define TWL4030_PWMAON_REG …
#define TWL4030_PWMAOFF_REG …
#define TWL4030_PWMBON_REG …
#define TWL4030_PWMBOFF_REG …
#define LEDEN_LEDAON …
#define LEDEN_LEDBON …
#define LEDEN_LEDAEXT …
#define LEDEN_LEDBEXT …
#define LEDEN_LEDAPWM …
#define LEDEN_LEDBPWM …
#define LEDEN_PWM_LENGTHA …
#define LEDEN_PWM_LENGTHB …
#define PWMxON_LENGTH …
static inline int gpio_twl4030_read(u8 address)
{ … }
static u8 cached_leden;
static void twl4030_led_set_value(int led, int value)
{ … }
static int twl4030_set_gpio_direction(int gpio, int is_input)
{ … }
static int twl4030_get_gpio_direction(int gpio)
{ … }
static int twl4030_set_gpio_dataout(int gpio, int enable)
{ … }
static int twl4030_get_gpio_datain(int gpio)
{ … }
static int twl_request(struct gpio_chip *chip, unsigned offset)
{ … }
static void twl_free(struct gpio_chip *chip, unsigned offset)
{ … }
static int twl_direction_in(struct gpio_chip *chip, unsigned offset)
{ … }
static int twl_get(struct gpio_chip *chip, unsigned offset)
{ … }
static void twl_set(struct gpio_chip *chip, unsigned offset, int value)
{ … }
static int twl_direction_out(struct gpio_chip *chip, unsigned offset, int value)
{ … }
static int twl_get_direction(struct gpio_chip *chip, unsigned offset)
{ … }
static int twl_to_irq(struct gpio_chip *chip, unsigned offset)
{ … }
static const struct gpio_chip template_chip = …;
static int gpio_twl4030_pulls(u32 ups, u32 downs)
{ … }
static int gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)
{ … }
static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev)
{ … }
static void gpio_twl4030_power_off_action(void *data)
{ … }
static int gpio_twl4030_probe(struct platform_device *pdev)
{ … }
static const struct of_device_id twl_gpio_match[] = …;
MODULE_DEVICE_TABLE(of, twl_gpio_match);
MODULE_ALIAS(…) …;
static struct platform_driver gpio_twl4030_driver = …;
static int __init gpio_twl4030_init(void)
{ … }
subsys_initcall(gpio_twl4030_init);
static void __exit gpio_twl4030_exit(void)
{ … }
module_exit(gpio_twl4030_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;