#define pr_fmt(fmt) …
#include <linux/delay.h>
#include <linux/dmi.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/kernel.h>
#include <linux/leds.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/gpio_keys.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/machine.h>
#include <linux/input.h>
#define DRIVER_NAME …
#define P50_GPIO_LINE_LED …
#define P50_GPIO_LINE_BTN …
#define P50_GPIO_IO_PORT_BASE …
#define P50_PORT_DATA …
#define P50_PORT_CMD …
#define P50_STATUS_OBF …
#define P50_STATUS_IBF …
#define P50_CMD_READ …
#define P50_CMD_WRITE …
#define P50_MBOX_REG_CMD …
#define P50_MBOX_REG_STATUS …
#define P50_MBOX_REG_PARAM …
#define P50_MBOX_REG_DATA …
#define P50_MBOX_CMD_READ_GPIO …
#define P50_MBOX_CMD_WRITE_GPIO …
#define P50_MBOX_CMD_CLEAR …
#define P50_MBOX_STATUS_SUCCESS …
#define P50_MBOX_PARAM_LED …
#define P50_MBOX_PARAM_BTN …
struct p50_gpio { … };
static struct platform_device *gpio_pdev;
static int gpio_params[] = …;
static const char * const gpio_names[] = …;
static struct gpiod_lookup_table p50_gpio_led_table = …;
static struct gpio_led leds[] = …;
static struct gpio_led_platform_data leds_pdata = …;
static struct gpio_keys_button buttons[] = …;
static struct gpio_keys_platform_data keys_pdata = …;
static int p50_wait_ec(struct p50_gpio *p50, int mask, int expected)
{ … }
static int p50_read_mbox_reg(struct p50_gpio *p50, int reg)
{ … }
static int p50_write_mbox_reg(struct p50_gpio *p50, int reg, int val)
{ … }
static int p50_wait_mbox_idle(struct p50_gpio *p50)
{ … }
static int p50_send_mbox_cmd(struct p50_gpio *p50, int cmd, int param, int data)
{ … }
static int p50_gpio_get_direction(struct gpio_chip *gc, unsigned int offset)
{ … }
static int p50_gpio_get(struct gpio_chip *gc, unsigned int offset)
{ … }
static void p50_gpio_set(struct gpio_chip *gc, unsigned int offset, int value)
{ … }
static int p50_gpio_probe(struct platform_device *pdev)
{ … }
static void p50_gpio_remove(struct platform_device *pdev)
{ … }
static struct platform_driver p50_gpio_driver = …;
static const struct dmi_system_id dmi_ids[] __initconst = …;
MODULE_DEVICE_TABLE(dmi, dmi_ids);
static int __init p50_module_init(void)
{ … }
static void __exit p50_module_exit(void)
{ … }
module_init(…) …;
module_exit(p50_module_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;