#include <linux/i2c.h>
#include <linux/module.h>
#include <linux/acpi.h>
#include <linux/interrupt.h>
#include <linux/gpio/consumer.h>
#include <linux/delay.h>
#include <linux/firmware.h>
#include <linux/input.h>
#include <linux/input/mt.h>
#include <linux/input/touchscreen.h>
#include <linux/pm.h>
#include <linux/pm_runtime.h>
#include <linux/irq.h>
#include <linux/regulator/consumer.h>
#include <linux/unaligned.h>
#define SILEAD_TS_NAME …
#define SILEAD_REG_RESET …
#define SILEAD_REG_DATA …
#define SILEAD_REG_TOUCH_NR …
#define SILEAD_REG_POWER …
#define SILEAD_REG_CLOCK …
#define SILEAD_REG_STATUS …
#define SILEAD_REG_ID …
#define SILEAD_REG_MEM_CHECK …
#define SILEAD_STATUS_OK …
#define SILEAD_TS_DATA_LEN …
#define SILEAD_CLOCK …
#define SILEAD_CMD_RESET …
#define SILEAD_CMD_START …
#define SILEAD_POINT_DATA_LEN …
#define SILEAD_POINT_Y_OFF …
#define SILEAD_POINT_Y_MSB_OFF …
#define SILEAD_POINT_X_OFF …
#define SILEAD_POINT_X_MSB_OFF …
#define SILEAD_EXTRA_DATA_MASK …
#define SILEAD_CMD_SLEEP_MIN …
#define SILEAD_CMD_SLEEP_MAX …
#define SILEAD_POWER_SLEEP …
#define SILEAD_STARTUP_SLEEP …
#define SILEAD_MAX_FINGERS …
enum silead_ts_power { … };
struct silead_ts_data { … };
struct silead_fw_data { … };
static void silead_apply_efi_fw_min_max(struct silead_ts_data *data)
{ … }
static int silead_ts_request_input_dev(struct silead_ts_data *data)
{ … }
static int silead_ts_request_pen_input_dev(struct silead_ts_data *data)
{ … }
static void silead_ts_set_power(struct i2c_client *client,
enum silead_ts_power state)
{ … }
static bool silead_ts_handle_pen_data(struct silead_ts_data *data, u8 *buf)
{ … }
static void silead_ts_read_data(struct i2c_client *client)
{ … }
static int silead_ts_init(struct i2c_client *client)
{ … }
static int silead_ts_reset(struct i2c_client *client)
{ … }
static int silead_ts_startup(struct i2c_client *client)
{ … }
static int silead_ts_load_fw(struct i2c_client *client)
{ … }
static u32 silead_ts_get_status(struct i2c_client *client)
{ … }
static int silead_ts_get_id(struct i2c_client *client)
{ … }
static int silead_ts_setup(struct i2c_client *client)
{ … }
static irqreturn_t silead_ts_threaded_irq_handler(int irq, void *id)
{ … }
static void silead_ts_read_props(struct i2c_client *client)
{ … }
#ifdef CONFIG_ACPI
static int silead_ts_set_default_fw_name(struct silead_ts_data *data,
const struct i2c_device_id *id)
{ … }
#else
static int silead_ts_set_default_fw_name(struct silead_ts_data *data,
const struct i2c_device_id *id)
{
snprintf(data->fw_name, sizeof(data->fw_name),
"silead/%s.fw", id->name);
return 0;
}
#endif
static void silead_disable_regulator(void *arg)
{ … }
static int silead_ts_probe(struct i2c_client *client)
{ … }
static int silead_ts_suspend(struct device *dev)
{ … }
static int silead_ts_resume(struct device *dev)
{ … }
static DEFINE_SIMPLE_DEV_PM_OPS(silead_ts_pm, silead_ts_suspend, silead_ts_resume);
static const struct i2c_device_id silead_ts_id[] = …;
MODULE_DEVICE_TABLE(i2c, silead_ts_id);
#ifdef CONFIG_ACPI
static const struct acpi_device_id silead_ts_acpi_match[] = …;
MODULE_DEVICE_TABLE(acpi, silead_ts_acpi_match);
#endif
#ifdef CONFIG_OF
static const struct of_device_id silead_ts_of_match[] = …;
MODULE_DEVICE_TABLE(of, silead_ts_of_match);
#endif
static struct i2c_driver silead_ts_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;