#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
#include <linux/module.h>
#include <linux/jiffies.h>
#include <linux/platform_device.h>
#include <linux/hwmon-sysfs.h>
#define DRVNAME "f71882fg"
#define SIO_F71858FG_LD_HWM 0x02
#define SIO_F71882FG_LD_HWM 0x04
#define SIO_UNLOCK_KEY 0x87
#define SIO_LOCK_KEY 0xAA
#define SIO_REG_LDSEL 0x07
#define SIO_REG_DEVID 0x20
#define SIO_REG_DEVREV 0x22
#define SIO_REG_MANID 0x23
#define SIO_REG_ENABLE 0x30
#define SIO_REG_ADDR 0x60
#define SIO_FINTEK_ID 0x1934
#define SIO_F71808E_ID 0x0901
#define SIO_F71808A_ID 0x1001
#define SIO_F71858_ID 0x0507
#define SIO_F71862_ID 0x0601
#define SIO_F71868_ID 0x1106
#define SIO_F71869_ID 0x0814
#define SIO_F71869A_ID 0x1007
#define SIO_F71882_ID 0x0541
#define SIO_F71889_ID 0x0723
#define SIO_F71889E_ID 0x0909
#define SIO_F71889A_ID 0x1005
#define SIO_F8000_ID 0x0581
#define SIO_F81768D_ID 0x1210
#define SIO_F81865_ID 0x0704
#define SIO_F81866_ID 0x1010
#define ADDR_REG_OFFSET 5
#define DATA_REG_OFFSET 6
#define F71882FG_REG_IN_STATUS 0x12
#define F71882FG_REG_IN_BEEP 0x13
#define F71882FG_REG_IN(nr) (0x20 + (nr))
#define F71882FG_REG_IN1_HIGH 0x32
#define F81866_REG_IN_STATUS 0x16
#define F81866_REG_IN_BEEP 0x17
#define F81866_REG_IN1_HIGH 0x3a
#define F71882FG_REG_FAN(nr) (0xA0 + (16 * (nr)))
#define F71882FG_REG_FAN_TARGET(nr) (0xA2 + (16 * (nr)))
#define F71882FG_REG_FAN_FULL_SPEED(nr) (0xA4 + (16 * (nr)))
#define F71882FG_REG_FAN_STATUS 0x92
#define F71882FG_REG_FAN_BEEP 0x93
#define F71882FG_REG_TEMP(nr) (0x70 + 2 * (nr))
#define F71882FG_REG_TEMP_OVT(nr) (0x80 + 2 * (nr))
#define F71882FG_REG_TEMP_HIGH(nr) (0x81 + 2 * (nr))
#define F71882FG_REG_TEMP_STATUS 0x62
#define F71882FG_REG_TEMP_BEEP 0x63
#define F71882FG_REG_TEMP_CONFIG 0x69
#define F71882FG_REG_TEMP_HYST(nr) (0x6C + (nr))
#define F71882FG_REG_TEMP_TYPE 0x6B