#include <linux/acpi.h>
#include <linux/bitops.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/gpio/consumer.h>
#include <linux/i2c.h>
#include <linux/input.h>
#include <linux/input/mt.h>
#include <linux/input/touchscreen.h>
#include <linux/interrupt.h>
#include <linux/module.h>
#include <linux/of.h>
#include <linux/regulator/consumer.h>
#include <linux/sizes.h>
#include <linux/timer.h>
#include <linux/unaligned.h>
#define EXC3000_NUM_SLOTS …
#define EXC3000_SLOTS_PER_FRAME …
#define EXC3000_LEN_FRAME …
#define EXC3000_LEN_VENDOR_REQUEST …
#define EXC3000_LEN_POINT …
#define EXC3000_LEN_MODEL_NAME …
#define EXC3000_LEN_FW_VERSION …
#define EXC3000_VENDOR_EVENT …
#define EXC3000_MT1_EVENT …
#define EXC3000_MT2_EVENT …
#define EXC3000_TIMEOUT_MS …
#define EXC3000_RESET_MS …
#define EXC3000_READY_MS …
static const struct i2c_device_id exc3000_id[];
struct eeti_dev_info { … };
enum eeti_dev_id { … };
static struct eeti_dev_info exc3000_info[] = …;
struct exc3000_data { … };
static void exc3000_report_slots(struct input_dev *input,
struct touchscreen_properties *prop,
const u8 *buf, int num)
{ … }
static void exc3000_timer(struct timer_list *t)
{ … }
static inline void exc3000_schedule_timer(struct exc3000_data *data)
{ … }
static void exc3000_shutdown_timer(void *timer)
{ … }
static int exc3000_read_frame(struct exc3000_data *data, u8 *buf)
{ … }
static int exc3000_handle_mt_event(struct exc3000_data *data)
{ … }
static irqreturn_t exc3000_interrupt(int irq, void *dev_id)
{ … }
static int exc3000_vendor_data_request(struct exc3000_data *data, u8 *request,
u8 request_len, u8 *response, int timeout)
{ … }
static ssize_t fw_version_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(fw_version);
static ssize_t model_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(model);
static ssize_t type_show(struct device *dev,
struct device_attribute *attr, char *buf)
{ … }
static DEVICE_ATTR_RO(type);
static struct attribute *exc3000_attrs[] = …;
ATTRIBUTE_GROUPS(…);
static int exc3000_probe(struct i2c_client *client)
{ … }
static const struct i2c_device_id exc3000_id[] = …;
MODULE_DEVICE_TABLE(i2c, exc3000_id);
#ifdef CONFIG_OF
static const struct of_device_id exc3000_of_match[] = …;
MODULE_DEVICE_TABLE(of, exc3000_of_match);
#endif
#ifdef CONFIG_ACPI
static const struct acpi_device_id exc3000_acpi_match[] = …;
MODULE_DEVICE_TABLE(acpi, exc3000_acpi_match);
#endif
static struct i2c_driver exc3000_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;