#include <linux/types.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/interrupt.h>
#include <linux/workqueue.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/tca6416_keypad.h>
#define TCA6416_INPUT …
#define TCA6416_OUTPUT …
#define TCA6416_INVERT …
#define TCA6416_DIRECTION …
#define TCA6416_POLL_INTERVAL …
static const struct i2c_device_id tca6416_id[] = …;
MODULE_DEVICE_TABLE(i2c, tca6416_id);
struct tca6416_keypad_chip { … };
static int tca6416_write_reg(struct tca6416_keypad_chip *chip, int reg, u16 val)
{ … }
static int tca6416_read_reg(struct tca6416_keypad_chip *chip, int reg, u16 *val)
{ … }
static void tca6416_keys_scan(struct input_dev *input)
{ … }
static irqreturn_t tca6416_keys_isr(int irq, void *dev_id)
{ … }
static int tca6416_keys_open(struct input_dev *dev)
{ … }
static void tca6416_keys_close(struct input_dev *dev)
{ … }
static int tca6416_setup_registers(struct tca6416_keypad_chip *chip)
{ … }
static int tca6416_keypad_probe(struct i2c_client *client)
{ … }
static struct i2c_driver tca6416_keypad_driver = …;
static int __init tca6416_keypad_init(void)
{ … }
subsys_initcall(tca6416_keypad_init);
static void __exit tca6416_keypad_exit(void)
{ … }
module_exit(tca6416_keypad_exit);
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;