#include <linux/err.h>
#include <linux/hwmon.h>
#include <linux/i2c.h>
#include <linux/init.h>
#include <linux/jiffies.h>
#include <linux/math.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/watchdog.h>
#define FTS_DEVICE_ID_REG …
#define FTS_DEVICE_REVISION_REG …
#define FTS_DEVICE_STATUS_REG …
#define FTS_SATELLITE_STATUS_REG …
#define FTS_EVENT_STATUS_REG …
#define FTS_GLOBAL_CONTROL_REG …
#define FTS_DEVICE_DETECT_REG_1 …
#define FTS_DEVICE_DETECT_REG_2 …
#define FTS_DEVICE_DETECT_REG_3 …
#define FTS_SENSOR_EVENT_REG …
#define FTS_FAN_EVENT_REG …
#define FTS_FAN_PRESENT_REG …
#define FTS_POWER_ON_TIME_COUNTER_A …
#define FTS_POWER_ON_TIME_COUNTER_B …
#define FTS_POWER_ON_TIME_COUNTER_C …
#define FTS_PAGE_SELECT_REG …
#define FTS_WATCHDOG_TIME_PRESET …
#define FTS_WATCHDOG_CONTROL …
#define FTS_NO_FAN_SENSORS …
#define FTS_NO_TEMP_SENSORS …
#define FTS_NO_VOLT_SENSORS …
#define FTS_FAN_SOURCE_INVALID …
static const unsigned short normal_i2c[] = …;
static const struct i2c_device_id fts_id[] = …;
MODULE_DEVICE_TABLE(i2c, fts_id);
enum WATCHDOG_RESOLUTION { … };
struct fts_data { … };
#define FTS_REG_FAN_INPUT(idx) …
#define FTS_REG_FAN_SOURCE(idx) …
#define FTS_REG_FAN_CONTROL(idx) …
#define FTS_REG_TEMP_INPUT(idx) …
#define FTS_REG_TEMP_CONTROL(idx) …
#define FTS_REG_VOLT(idx) …
static int fts_read_byte(struct i2c_client *client, unsigned short reg)
{ … }
static int fts_write_byte(struct i2c_client *client, unsigned short reg,
unsigned char value)
{ … }
static int fts_update_device(struct fts_data *data)
{ … }
static int fts_wd_set_resolution(struct fts_data *data,
enum WATCHDOG_RESOLUTION resolution)
{ … }
static int fts_wd_set_timeout(struct watchdog_device *wdd, unsigned int timeout)
{ … }
static int fts_wd_start(struct watchdog_device *wdd)
{ … }
static int fts_wd_stop(struct watchdog_device *wdd)
{ … }
static const struct watchdog_info fts_wd_info = …;
static const struct watchdog_ops fts_wd_ops = …;
static int fts_watchdog_init(struct fts_data *data)
{ … }
static umode_t fts_is_visible(const void *devdata, enum hwmon_sensor_types type, u32 attr,
int channel)
{ … }
static int fts_read(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel,
long *val)
{ … }
static int fts_write(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel,
long val)
{ … }
static const struct hwmon_ops fts_ops = …;
static const struct hwmon_channel_info * const fts_info[] = …;
static const struct hwmon_chip_info fts_chip_info = …;
static int fts_detect(struct i2c_client *client,
struct i2c_board_info *info)
{ … }
static int fts_probe(struct i2c_client *client)
{ … }
static struct i2c_driver fts_driver = …;
module_i2c_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;