cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

asb100.c (27805B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * asb100.c - Part of lm_sensors, Linux kernel modules for hardware
      4 *	      monitoring
      5 *
      6 * Copyright (C) 2004 Mark M. Hoffman <mhoffman@lightlink.com>
      7 *
      8 * (derived from w83781d.c)
      9 *
     10 * Copyright (C) 1998 - 2003  Frodo Looijaard <frodol@dds.nl>,
     11 *			      Philip Edelbrock <phil@netroedge.com>, and
     12 *			      Mark Studebaker <mdsxyz123@yahoo.com>
     13 */
     14
     15/*
     16 * This driver supports the hardware sensor chips: Asus ASB100 and
     17 * ASB100-A "BACH".
     18 *
     19 * ASB100-A supports pwm1, while plain ASB100 does not.  There is no known
     20 * way for the driver to tell which one is there.
     21 *
     22 * Chip		#vin	#fanin	#pwm	#temp	wchipid	vendid	i2c	ISA
     23 * asb100	7	3	1	4	0x31	0x0694	yes	no
     24 */
     25
     26#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
     27
     28#include <linux/module.h>
     29#include <linux/slab.h>
     30#include <linux/i2c.h>
     31#include <linux/hwmon.h>
     32#include <linux/hwmon-sysfs.h>
     33#include <linux/hwmon-vid.h>
     34#include <linux/err.h>
     35#include <linux/init.h>
     36#include <linux/jiffies.h>
     37#include <linux/mutex.h>
     38#include "lm75.h"
     39
     40/* I2C addresses to scan */
     41static const unsigned short normal_i2c[] = { 0x2d, I2C_CLIENT_END };
     42
     43static unsigned short force_subclients[4];
     44module_param_array(force_subclients, short, NULL, 0);
     45MODULE_PARM_DESC(force_subclients,
     46	"List of subclient addresses: {bus, clientaddr, subclientaddr1, subclientaddr2}");
     47
     48/* Voltage IN registers 0-6 */
     49#define ASB100_REG_IN(nr)	(0x20 + (nr))
     50#define ASB100_REG_IN_MAX(nr)	(0x2b + (nr * 2))
     51#define ASB100_REG_IN_MIN(nr)	(0x2c + (nr * 2))
     52
     53/* FAN IN registers 1-3 */
     54#define ASB100_REG_FAN(nr)	(0x28 + (nr))
     55#define ASB100_REG_FAN_MIN(nr)	(0x3b + (nr))
     56
     57/* TEMPERATURE registers 1-4 */
     58static const u16 asb100_reg_temp[]	= {0, 0x27, 0x150, 0x250, 0x17};
     59static const u16 asb100_reg_temp_max[]	= {0, 0x39, 0x155, 0x255, 0x18};
     60static const u16 asb100_reg_temp_hyst[]	= {0, 0x3a, 0x153, 0x253, 0x19};
     61
     62#define ASB100_REG_TEMP(nr) (asb100_reg_temp[nr])
     63#define ASB100_REG_TEMP_MAX(nr) (asb100_reg_temp_max[nr])
     64#define ASB100_REG_TEMP_HYST(nr) (asb100_reg_temp_hyst[nr])
     65
     66#define ASB100_REG_TEMP2_CONFIG	0x0152
     67#define ASB100_REG_TEMP3_CONFIG	0x0252
     68
     69
     70#define ASB100_REG_CONFIG	0x40
     71#define ASB100_REG_ALARM1	0x41
     72#define ASB100_REG_ALARM2	0x42
     73#define ASB100_REG_SMIM1	0x43
     74#define ASB100_REG_SMIM2	0x44
     75#define ASB100_REG_VID_FANDIV	0x47
     76#define ASB100_REG_I2C_ADDR	0x48
     77#define ASB100_REG_CHIPID	0x49
     78#define ASB100_REG_I2C_SUBADDR	0x4a
     79#define ASB100_REG_PIN		0x4b
     80#define ASB100_REG_IRQ		0x4c
     81#define ASB100_REG_BANK		0x4e
     82#define ASB100_REG_CHIPMAN	0x4f
     83
     84#define ASB100_REG_WCHIPID	0x58
     85
     86/* bit 7 -> enable, bits 0-3 -> duty cycle */
     87#define ASB100_REG_PWM1		0x59
     88
     89/*
     90 * CONVERSIONS
     91 * Rounding and limit checking is only done on the TO_REG variants.
     92 */
     93
     94/* These constants are a guess, consistent w/ w83781d */
     95#define ASB100_IN_MIN		0
     96#define ASB100_IN_MAX		4080
     97
     98/*
     99 * IN: 1/1000 V (0V to 4.08V)
    100 * REG: 16mV/bit
    101 */
    102static u8 IN_TO_REG(unsigned val)
    103{
    104	unsigned nval = clamp_val(val, ASB100_IN_MIN, ASB100_IN_MAX);
    105	return (nval + 8) / 16;
    106}
    107
    108static unsigned IN_FROM_REG(u8 reg)
    109{
    110	return reg * 16;
    111}
    112
    113static u8 FAN_TO_REG(long rpm, int div)
    114{
    115	if (rpm == -1)
    116		return 0;
    117	if (rpm == 0)
    118		return 255;
    119	rpm = clamp_val(rpm, 1, 1000000);
    120	return clamp_val((1350000 + rpm * div / 2) / (rpm * div), 1, 254);
    121}
    122
    123static int FAN_FROM_REG(u8 val, int div)
    124{
    125	return val == 0 ? -1 : val == 255 ? 0 : 1350000 / (val * div);
    126}
    127
    128/* These constants are a guess, consistent w/ w83781d */
    129#define ASB100_TEMP_MIN		-128000
    130#define ASB100_TEMP_MAX		127000
    131
    132/*
    133 * TEMP: 0.001C/bit (-128C to +127C)
    134 * REG: 1C/bit, two's complement
    135 */
    136static u8 TEMP_TO_REG(long temp)
    137{
    138	int ntemp = clamp_val(temp, ASB100_TEMP_MIN, ASB100_TEMP_MAX);
    139	ntemp += (ntemp < 0 ? -500 : 500);
    140	return (u8)(ntemp / 1000);
    141}
    142
    143static int TEMP_FROM_REG(u8 reg)
    144{
    145	return (s8)reg * 1000;
    146}
    147
    148/*
    149 * PWM: 0 - 255 per sensors documentation
    150 * REG: (6.25% duty cycle per bit)
    151 */
    152static u8 ASB100_PWM_TO_REG(int pwm)
    153{
    154	pwm = clamp_val(pwm, 0, 255);
    155	return (u8)(pwm / 16);
    156}
    157
    158static int ASB100_PWM_FROM_REG(u8 reg)
    159{
    160	return reg * 16;
    161}
    162
    163#define DIV_FROM_REG(val) (1 << (val))
    164
    165/*
    166 * FAN DIV: 1, 2, 4, or 8 (defaults to 2)
    167 * REG: 0, 1, 2, or 3 (respectively) (defaults to 1)
    168 */
    169static u8 DIV_TO_REG(long val)
    170{
    171	return val == 8 ? 3 : val == 4 ? 2 : val == 1 ? 0 : 1;
    172}
    173
    174/*
    175 * For each registered client, we need to keep some data in memory. That
    176 * data is pointed to by client->data. The structure itself is
    177 * dynamically allocated, at the same time the client itself is allocated.
    178 */
    179struct asb100_data {
    180	struct device *hwmon_dev;
    181	struct mutex lock;
    182
    183	struct mutex update_lock;
    184	unsigned long last_updated;	/* In jiffies */
    185
    186	/* array of 2 pointers to subclients */
    187	struct i2c_client *lm75[2];
    188
    189	bool valid;		/* true if following fields are valid */
    190	u8 in[7];		/* Register value */
    191	u8 in_max[7];		/* Register value */
    192	u8 in_min[7];		/* Register value */
    193	u8 fan[3];		/* Register value */
    194	u8 fan_min[3];		/* Register value */
    195	u16 temp[4];		/* Register value (0 and 3 are u8 only) */
    196	u16 temp_max[4];	/* Register value (0 and 3 are u8 only) */
    197	u16 temp_hyst[4];	/* Register value (0 and 3 are u8 only) */
    198	u8 fan_div[3];		/* Register encoding, right justified */
    199	u8 pwm;			/* Register encoding */
    200	u8 vid;			/* Register encoding, combined */
    201	u32 alarms;		/* Register encoding, combined */
    202	u8 vrm;
    203};
    204
    205static int asb100_read_value(struct i2c_client *client, u16 reg);
    206static void asb100_write_value(struct i2c_client *client, u16 reg, u16 val);
    207
    208static int asb100_probe(struct i2c_client *client);
    209static int asb100_detect(struct i2c_client *client,
    210			 struct i2c_board_info *info);
    211static int asb100_remove(struct i2c_client *client);
    212static struct asb100_data *asb100_update_device(struct device *dev);
    213static void asb100_init_client(struct i2c_client *client);
    214
    215static const struct i2c_device_id asb100_id[] = {
    216	{ "asb100", 0 },
    217	{ }
    218};
    219MODULE_DEVICE_TABLE(i2c, asb100_id);
    220
    221static struct i2c_driver asb100_driver = {
    222	.class		= I2C_CLASS_HWMON,
    223	.driver = {
    224		.name	= "asb100",
    225	},
    226	.probe_new	= asb100_probe,
    227	.remove		= asb100_remove,
    228	.id_table	= asb100_id,
    229	.detect		= asb100_detect,
    230	.address_list	= normal_i2c,
    231};
    232
    233/* 7 Voltages */
    234#define show_in_reg(reg) \
    235static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
    236		char *buf) \
    237{ \
    238	int nr = to_sensor_dev_attr(attr)->index; \
    239	struct asb100_data *data = asb100_update_device(dev); \
    240	return sprintf(buf, "%d\n", IN_FROM_REG(data->reg[nr])); \
    241}
    242
    243show_in_reg(in)
    244show_in_reg(in_min)
    245show_in_reg(in_max)
    246
    247#define set_in_reg(REG, reg) \
    248static ssize_t set_in_##reg(struct device *dev, struct device_attribute *attr, \
    249		const char *buf, size_t count) \
    250{ \
    251	int nr = to_sensor_dev_attr(attr)->index; \
    252	struct i2c_client *client = to_i2c_client(dev); \
    253	struct asb100_data *data = i2c_get_clientdata(client); \
    254	unsigned long val; \
    255	int err = kstrtoul(buf, 10, &val); \
    256	if (err) \
    257		return err; \
    258	mutex_lock(&data->update_lock); \
    259	data->in_##reg[nr] = IN_TO_REG(val); \
    260	asb100_write_value(client, ASB100_REG_IN_##REG(nr), \
    261		data->in_##reg[nr]); \
    262	mutex_unlock(&data->update_lock); \
    263	return count; \
    264}
    265
    266set_in_reg(MIN, min)
    267set_in_reg(MAX, max)
    268
    269#define sysfs_in(offset) \
    270static SENSOR_DEVICE_ATTR(in##offset##_input, S_IRUGO, \
    271		show_in, NULL, offset); \
    272static SENSOR_DEVICE_ATTR(in##offset##_min, S_IRUGO | S_IWUSR, \
    273		show_in_min, set_in_min, offset); \
    274static SENSOR_DEVICE_ATTR(in##offset##_max, S_IRUGO | S_IWUSR, \
    275		show_in_max, set_in_max, offset)
    276
    277sysfs_in(0);
    278sysfs_in(1);
    279sysfs_in(2);
    280sysfs_in(3);
    281sysfs_in(4);
    282sysfs_in(5);
    283sysfs_in(6);
    284
    285/* 3 Fans */
    286static ssize_t show_fan(struct device *dev, struct device_attribute *attr,
    287		char *buf)
    288{
    289	int nr = to_sensor_dev_attr(attr)->index;
    290	struct asb100_data *data = asb100_update_device(dev);
    291	return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr],
    292		DIV_FROM_REG(data->fan_div[nr])));
    293}
    294
    295static ssize_t show_fan_min(struct device *dev, struct device_attribute *attr,
    296		char *buf)
    297{
    298	int nr = to_sensor_dev_attr(attr)->index;
    299	struct asb100_data *data = asb100_update_device(dev);
    300	return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr],
    301		DIV_FROM_REG(data->fan_div[nr])));
    302}
    303
    304static ssize_t show_fan_div(struct device *dev, struct device_attribute *attr,
    305		char *buf)
    306{
    307	int nr = to_sensor_dev_attr(attr)->index;
    308	struct asb100_data *data = asb100_update_device(dev);
    309	return sprintf(buf, "%d\n", DIV_FROM_REG(data->fan_div[nr]));
    310}
    311
    312static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
    313		const char *buf, size_t count)
    314{
    315	int nr = to_sensor_dev_attr(attr)->index;
    316	struct i2c_client *client = to_i2c_client(dev);
    317	struct asb100_data *data = i2c_get_clientdata(client);
    318	unsigned long val;
    319	int err;
    320
    321	err = kstrtoul(buf, 10, &val);
    322	if (err)
    323		return err;
    324
    325	mutex_lock(&data->update_lock);
    326	data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
    327	asb100_write_value(client, ASB100_REG_FAN_MIN(nr), data->fan_min[nr]);
    328	mutex_unlock(&data->update_lock);
    329	return count;
    330}
    331
    332/*
    333 * Note: we save and restore the fan minimum here, because its value is
    334 * determined in part by the fan divisor.  This follows the principle of
    335 * least surprise; the user doesn't expect the fan minimum to change just
    336 * because the divisor changed.
    337 */
    338static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
    339		const char *buf, size_t count)
    340{
    341	int nr = to_sensor_dev_attr(attr)->index;
    342	struct i2c_client *client = to_i2c_client(dev);
    343	struct asb100_data *data = i2c_get_clientdata(client);
    344	unsigned long min;
    345	int reg;
    346	unsigned long val;
    347	int err;
    348
    349	err = kstrtoul(buf, 10, &val);
    350	if (err)
    351		return err;
    352
    353	mutex_lock(&data->update_lock);
    354
    355	min = FAN_FROM_REG(data->fan_min[nr],
    356			DIV_FROM_REG(data->fan_div[nr]));
    357	data->fan_div[nr] = DIV_TO_REG(val);
    358
    359	switch (nr) {
    360	case 0:	/* fan 1 */
    361		reg = asb100_read_value(client, ASB100_REG_VID_FANDIV);
    362		reg = (reg & 0xcf) | (data->fan_div[0] << 4);
    363		asb100_write_value(client, ASB100_REG_VID_FANDIV, reg);
    364		break;
    365
    366	case 1:	/* fan 2 */
    367		reg = asb100_read_value(client, ASB100_REG_VID_FANDIV);
    368		reg = (reg & 0x3f) | (data->fan_div[1] << 6);
    369		asb100_write_value(client, ASB100_REG_VID_FANDIV, reg);
    370		break;
    371
    372	case 2:	/* fan 3 */
    373		reg = asb100_read_value(client, ASB100_REG_PIN);
    374		reg = (reg & 0x3f) | (data->fan_div[2] << 6);
    375		asb100_write_value(client, ASB100_REG_PIN, reg);
    376		break;
    377	}
    378
    379	data->fan_min[nr] =
    380		FAN_TO_REG(min, DIV_FROM_REG(data->fan_div[nr]));
    381	asb100_write_value(client, ASB100_REG_FAN_MIN(nr), data->fan_min[nr]);
    382
    383	mutex_unlock(&data->update_lock);
    384
    385	return count;
    386}
    387
    388#define sysfs_fan(offset) \
    389static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
    390		show_fan, NULL, offset - 1); \
    391static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
    392		show_fan_min, set_fan_min, offset - 1); \
    393static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
    394		show_fan_div, set_fan_div, offset - 1)
    395
    396sysfs_fan(1);
    397sysfs_fan(2);
    398sysfs_fan(3);
    399
    400/* 4 Temp. Sensors */
    401static int sprintf_temp_from_reg(u16 reg, char *buf, int nr)
    402{
    403	int ret = 0;
    404
    405	switch (nr) {
    406	case 1: case 2:
    407		ret = sprintf(buf, "%d\n", LM75_TEMP_FROM_REG(reg));
    408		break;
    409	case 0: case 3: default:
    410		ret = sprintf(buf, "%d\n", TEMP_FROM_REG(reg));
    411		break;
    412	}
    413	return ret;
    414}
    415
    416#define show_temp_reg(reg) \
    417static ssize_t show_##reg(struct device *dev, struct device_attribute *attr, \
    418		char *buf) \
    419{ \
    420	int nr = to_sensor_dev_attr(attr)->index; \
    421	struct asb100_data *data = asb100_update_device(dev); \
    422	return sprintf_temp_from_reg(data->reg[nr], buf, nr); \
    423}
    424
    425show_temp_reg(temp);
    426show_temp_reg(temp_max);
    427show_temp_reg(temp_hyst);
    428
    429#define set_temp_reg(REG, reg) \
    430static ssize_t set_##reg(struct device *dev, struct device_attribute *attr, \
    431		const char *buf, size_t count) \
    432{ \
    433	int nr = to_sensor_dev_attr(attr)->index; \
    434	struct i2c_client *client = to_i2c_client(dev); \
    435	struct asb100_data *data = i2c_get_clientdata(client); \
    436	long val; \
    437	int err = kstrtol(buf, 10, &val); \
    438	if (err) \
    439		return err; \
    440	mutex_lock(&data->update_lock); \
    441	switch (nr) { \
    442	case 1: case 2: \
    443		data->reg[nr] = LM75_TEMP_TO_REG(val); \
    444		break; \
    445	case 0: case 3: default: \
    446		data->reg[nr] = TEMP_TO_REG(val); \
    447		break; \
    448	} \
    449	asb100_write_value(client, ASB100_REG_TEMP_##REG(nr+1), \
    450			data->reg[nr]); \
    451	mutex_unlock(&data->update_lock); \
    452	return count; \
    453}
    454
    455set_temp_reg(MAX, temp_max);
    456set_temp_reg(HYST, temp_hyst);
    457
    458#define sysfs_temp(num) \
    459static SENSOR_DEVICE_ATTR(temp##num##_input, S_IRUGO, \
    460		show_temp, NULL, num - 1); \
    461static SENSOR_DEVICE_ATTR(temp##num##_max, S_IRUGO | S_IWUSR, \
    462		show_temp_max, set_temp_max, num - 1); \
    463static SENSOR_DEVICE_ATTR(temp##num##_max_hyst, S_IRUGO | S_IWUSR, \
    464		show_temp_hyst, set_temp_hyst, num - 1)
    465
    466sysfs_temp(1);
    467sysfs_temp(2);
    468sysfs_temp(3);
    469sysfs_temp(4);
    470
    471/* VID */
    472static ssize_t cpu0_vid_show(struct device *dev,
    473			     struct device_attribute *attr, char *buf)
    474{
    475	struct asb100_data *data = asb100_update_device(dev);
    476	return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
    477}
    478
    479static DEVICE_ATTR_RO(cpu0_vid);
    480
    481/* VRM */
    482static ssize_t vrm_show(struct device *dev, struct device_attribute *attr,
    483		char *buf)
    484{
    485	struct asb100_data *data = dev_get_drvdata(dev);
    486	return sprintf(buf, "%d\n", data->vrm);
    487}
    488
    489static ssize_t vrm_store(struct device *dev, struct device_attribute *attr,
    490			 const char *buf, size_t count)
    491{
    492	struct asb100_data *data = dev_get_drvdata(dev);
    493	unsigned long val;
    494	int err;
    495
    496	err = kstrtoul(buf, 10, &val);
    497	if (err)
    498		return err;
    499
    500	if (val > 255)
    501		return -EINVAL;
    502
    503	data->vrm = val;
    504	return count;
    505}
    506
    507/* Alarms */
    508static DEVICE_ATTR_RW(vrm);
    509
    510static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
    511		char *buf)
    512{
    513	struct asb100_data *data = asb100_update_device(dev);
    514	return sprintf(buf, "%u\n", data->alarms);
    515}
    516
    517static DEVICE_ATTR_RO(alarms);
    518
    519static ssize_t show_alarm(struct device *dev, struct device_attribute *attr,
    520		char *buf)
    521{
    522	int bitnr = to_sensor_dev_attr(attr)->index;
    523	struct asb100_data *data = asb100_update_device(dev);
    524	return sprintf(buf, "%u\n", (data->alarms >> bitnr) & 1);
    525}
    526static SENSOR_DEVICE_ATTR(in0_alarm, S_IRUGO, show_alarm, NULL, 0);
    527static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL, 1);
    528static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL, 2);
    529static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL, 3);
    530static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL, 8);
    531static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 6);
    532static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 7);
    533static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL, 11);
    534static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL, 4);
    535static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL, 5);
    536static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL, 13);
    537
    538/* 1 PWM */
    539static ssize_t pwm1_show(struct device *dev, struct device_attribute *attr,
    540		char *buf)
    541{
    542	struct asb100_data *data = asb100_update_device(dev);
    543	return sprintf(buf, "%d\n", ASB100_PWM_FROM_REG(data->pwm & 0x0f));
    544}
    545
    546static ssize_t pwm1_store(struct device *dev, struct device_attribute *attr,
    547			  const char *buf, size_t count)
    548{
    549	struct i2c_client *client = to_i2c_client(dev);
    550	struct asb100_data *data = i2c_get_clientdata(client);
    551	unsigned long val;
    552	int err;
    553
    554	err = kstrtoul(buf, 10, &val);
    555	if (err)
    556		return err;
    557
    558	mutex_lock(&data->update_lock);
    559	data->pwm &= 0x80; /* keep the enable bit */
    560	data->pwm |= (0x0f & ASB100_PWM_TO_REG(val));
    561	asb100_write_value(client, ASB100_REG_PWM1, data->pwm);
    562	mutex_unlock(&data->update_lock);
    563	return count;
    564}
    565
    566static ssize_t pwm1_enable_show(struct device *dev,
    567		struct device_attribute *attr, char *buf)
    568{
    569	struct asb100_data *data = asb100_update_device(dev);
    570	return sprintf(buf, "%d\n", (data->pwm & 0x80) ? 1 : 0);
    571}
    572
    573static ssize_t pwm1_enable_store(struct device *dev,
    574				 struct device_attribute *attr,
    575				 const char *buf, size_t count)
    576{
    577	struct i2c_client *client = to_i2c_client(dev);
    578	struct asb100_data *data = i2c_get_clientdata(client);
    579	unsigned long val;
    580	int err;
    581
    582	err = kstrtoul(buf, 10, &val);
    583	if (err)
    584		return err;
    585
    586	mutex_lock(&data->update_lock);
    587	data->pwm &= 0x0f; /* keep the duty cycle bits */
    588	data->pwm |= (val ? 0x80 : 0x00);
    589	asb100_write_value(client, ASB100_REG_PWM1, data->pwm);
    590	mutex_unlock(&data->update_lock);
    591	return count;
    592}
    593
    594static DEVICE_ATTR_RW(pwm1);
    595static DEVICE_ATTR_RW(pwm1_enable);
    596
    597static struct attribute *asb100_attributes[] = {
    598	&sensor_dev_attr_in0_input.dev_attr.attr,
    599	&sensor_dev_attr_in0_min.dev_attr.attr,
    600	&sensor_dev_attr_in0_max.dev_attr.attr,
    601	&sensor_dev_attr_in1_input.dev_attr.attr,
    602	&sensor_dev_attr_in1_min.dev_attr.attr,
    603	&sensor_dev_attr_in1_max.dev_attr.attr,
    604	&sensor_dev_attr_in2_input.dev_attr.attr,
    605	&sensor_dev_attr_in2_min.dev_attr.attr,
    606	&sensor_dev_attr_in2_max.dev_attr.attr,
    607	&sensor_dev_attr_in3_input.dev_attr.attr,
    608	&sensor_dev_attr_in3_min.dev_attr.attr,
    609	&sensor_dev_attr_in3_max.dev_attr.attr,
    610	&sensor_dev_attr_in4_input.dev_attr.attr,
    611	&sensor_dev_attr_in4_min.dev_attr.attr,
    612	&sensor_dev_attr_in4_max.dev_attr.attr,
    613	&sensor_dev_attr_in5_input.dev_attr.attr,
    614	&sensor_dev_attr_in5_min.dev_attr.attr,
    615	&sensor_dev_attr_in5_max.dev_attr.attr,
    616	&sensor_dev_attr_in6_input.dev_attr.attr,
    617	&sensor_dev_attr_in6_min.dev_attr.attr,
    618	&sensor_dev_attr_in6_max.dev_attr.attr,
    619
    620	&sensor_dev_attr_fan1_input.dev_attr.attr,
    621	&sensor_dev_attr_fan1_min.dev_attr.attr,
    622	&sensor_dev_attr_fan1_div.dev_attr.attr,
    623	&sensor_dev_attr_fan2_input.dev_attr.attr,
    624	&sensor_dev_attr_fan2_min.dev_attr.attr,
    625	&sensor_dev_attr_fan2_div.dev_attr.attr,
    626	&sensor_dev_attr_fan3_input.dev_attr.attr,
    627	&sensor_dev_attr_fan3_min.dev_attr.attr,
    628	&sensor_dev_attr_fan3_div.dev_attr.attr,
    629
    630	&sensor_dev_attr_temp1_input.dev_attr.attr,
    631	&sensor_dev_attr_temp1_max.dev_attr.attr,
    632	&sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
    633	&sensor_dev_attr_temp2_input.dev_attr.attr,
    634	&sensor_dev_attr_temp2_max.dev_attr.attr,
    635	&sensor_dev_attr_temp2_max_hyst.dev_attr.attr,
    636	&sensor_dev_attr_temp3_input.dev_attr.attr,
    637	&sensor_dev_attr_temp3_max.dev_attr.attr,
    638	&sensor_dev_attr_temp3_max_hyst.dev_attr.attr,
    639	&sensor_dev_attr_temp4_input.dev_attr.attr,
    640	&sensor_dev_attr_temp4_max.dev_attr.attr,
    641	&sensor_dev_attr_temp4_max_hyst.dev_attr.attr,
    642
    643	&sensor_dev_attr_in0_alarm.dev_attr.attr,
    644	&sensor_dev_attr_in1_alarm.dev_attr.attr,
    645	&sensor_dev_attr_in2_alarm.dev_attr.attr,
    646	&sensor_dev_attr_in3_alarm.dev_attr.attr,
    647	&sensor_dev_attr_in4_alarm.dev_attr.attr,
    648	&sensor_dev_attr_fan1_alarm.dev_attr.attr,
    649	&sensor_dev_attr_fan2_alarm.dev_attr.attr,
    650	&sensor_dev_attr_fan3_alarm.dev_attr.attr,
    651	&sensor_dev_attr_temp1_alarm.dev_attr.attr,
    652	&sensor_dev_attr_temp2_alarm.dev_attr.attr,
    653	&sensor_dev_attr_temp3_alarm.dev_attr.attr,
    654
    655	&dev_attr_cpu0_vid.attr,
    656	&dev_attr_vrm.attr,
    657	&dev_attr_alarms.attr,
    658	&dev_attr_pwm1.attr,
    659	&dev_attr_pwm1_enable.attr,
    660
    661	NULL
    662};
    663
    664static const struct attribute_group asb100_group = {
    665	.attrs = asb100_attributes,
    666};
    667
    668static int asb100_detect_subclients(struct i2c_client *client)
    669{
    670	int i, id, err;
    671	int address = client->addr;
    672	unsigned short sc_addr[2];
    673	struct asb100_data *data = i2c_get_clientdata(client);
    674	struct i2c_adapter *adapter = client->adapter;
    675
    676	id = i2c_adapter_id(adapter);
    677
    678	if (force_subclients[0] == id && force_subclients[1] == address) {
    679		for (i = 2; i <= 3; i++) {
    680			if (force_subclients[i] < 0x48 ||
    681			    force_subclients[i] > 0x4f) {
    682				dev_err(&client->dev,
    683					"invalid subclient address %d; must be 0x48-0x4f\n",
    684					force_subclients[i]);
    685				err = -ENODEV;
    686				goto ERROR_SC_2;
    687			}
    688		}
    689		asb100_write_value(client, ASB100_REG_I2C_SUBADDR,
    690					(force_subclients[2] & 0x07) |
    691					((force_subclients[3] & 0x07) << 4));
    692		sc_addr[0] = force_subclients[2];
    693		sc_addr[1] = force_subclients[3];
    694	} else {
    695		int val = asb100_read_value(client, ASB100_REG_I2C_SUBADDR);
    696		sc_addr[0] = 0x48 + (val & 0x07);
    697		sc_addr[1] = 0x48 + ((val >> 4) & 0x07);
    698	}
    699
    700	if (sc_addr[0] == sc_addr[1]) {
    701		dev_err(&client->dev,
    702			"duplicate addresses 0x%x for subclients\n",
    703			sc_addr[0]);
    704		err = -ENODEV;
    705		goto ERROR_SC_2;
    706	}
    707
    708	data->lm75[0] = i2c_new_dummy_device(adapter, sc_addr[0]);
    709	if (IS_ERR(data->lm75[0])) {
    710		dev_err(&client->dev,
    711			"subclient %d registration at address 0x%x failed.\n",
    712			1, sc_addr[0]);
    713		err = PTR_ERR(data->lm75[0]);
    714		goto ERROR_SC_2;
    715	}
    716
    717	data->lm75[1] = i2c_new_dummy_device(adapter, sc_addr[1]);
    718	if (IS_ERR(data->lm75[1])) {
    719		dev_err(&client->dev,
    720			"subclient %d registration at address 0x%x failed.\n",
    721			2, sc_addr[1]);
    722		err = PTR_ERR(data->lm75[1]);
    723		goto ERROR_SC_3;
    724	}
    725
    726	return 0;
    727
    728/* Undo inits in case of errors */
    729ERROR_SC_3:
    730	i2c_unregister_device(data->lm75[0]);
    731ERROR_SC_2:
    732	return err;
    733}
    734
    735/* Return 0 if detection is successful, -ENODEV otherwise */
    736static int asb100_detect(struct i2c_client *client,
    737			 struct i2c_board_info *info)
    738{
    739	struct i2c_adapter *adapter = client->adapter;
    740	int val1, val2;
    741
    742	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
    743		pr_debug("detect failed, smbus byte data not supported!\n");
    744		return -ENODEV;
    745	}
    746
    747	val1 = i2c_smbus_read_byte_data(client, ASB100_REG_BANK);
    748	val2 = i2c_smbus_read_byte_data(client, ASB100_REG_CHIPMAN);
    749
    750	/* If we're in bank 0 */
    751	if ((!(val1 & 0x07)) &&
    752			/* Check for ASB100 ID (low byte) */
    753			(((!(val1 & 0x80)) && (val2 != 0x94)) ||
    754			/* Check for ASB100 ID (high byte ) */
    755			((val1 & 0x80) && (val2 != 0x06)))) {
    756		pr_debug("detect failed, bad chip id 0x%02x!\n", val2);
    757		return -ENODEV;
    758	}
    759
    760	/* Put it now into bank 0 and Vendor ID High Byte */
    761	i2c_smbus_write_byte_data(client, ASB100_REG_BANK,
    762		(i2c_smbus_read_byte_data(client, ASB100_REG_BANK) & 0x78)
    763		| 0x80);
    764
    765	/* Determine the chip type. */
    766	val1 = i2c_smbus_read_byte_data(client, ASB100_REG_WCHIPID);
    767	val2 = i2c_smbus_read_byte_data(client, ASB100_REG_CHIPMAN);
    768
    769	if (val1 != 0x31 || val2 != 0x06)
    770		return -ENODEV;
    771
    772	strlcpy(info->type, "asb100", I2C_NAME_SIZE);
    773
    774	return 0;
    775}
    776
    777static int asb100_probe(struct i2c_client *client)
    778{
    779	int err;
    780	struct asb100_data *data;
    781
    782	data = devm_kzalloc(&client->dev, sizeof(struct asb100_data),
    783			    GFP_KERNEL);
    784	if (!data)
    785		return -ENOMEM;
    786
    787	i2c_set_clientdata(client, data);
    788	mutex_init(&data->lock);
    789	mutex_init(&data->update_lock);
    790
    791	/* Attach secondary lm75 clients */
    792	err = asb100_detect_subclients(client);
    793	if (err)
    794		return err;
    795
    796	/* Initialize the chip */
    797	asb100_init_client(client);
    798
    799	/* A few vars need to be filled upon startup */
    800	data->fan_min[0] = asb100_read_value(client, ASB100_REG_FAN_MIN(0));
    801	data->fan_min[1] = asb100_read_value(client, ASB100_REG_FAN_MIN(1));
    802	data->fan_min[2] = asb100_read_value(client, ASB100_REG_FAN_MIN(2));
    803
    804	/* Register sysfs hooks */
    805	err = sysfs_create_group(&client->dev.kobj, &asb100_group);
    806	if (err)
    807		goto ERROR3;
    808
    809	data->hwmon_dev = hwmon_device_register(&client->dev);
    810	if (IS_ERR(data->hwmon_dev)) {
    811		err = PTR_ERR(data->hwmon_dev);
    812		goto ERROR4;
    813	}
    814
    815	return 0;
    816
    817ERROR4:
    818	sysfs_remove_group(&client->dev.kobj, &asb100_group);
    819ERROR3:
    820	i2c_unregister_device(data->lm75[1]);
    821	i2c_unregister_device(data->lm75[0]);
    822	return err;
    823}
    824
    825static int asb100_remove(struct i2c_client *client)
    826{
    827	struct asb100_data *data = i2c_get_clientdata(client);
    828
    829	hwmon_device_unregister(data->hwmon_dev);
    830	sysfs_remove_group(&client->dev.kobj, &asb100_group);
    831
    832	i2c_unregister_device(data->lm75[1]);
    833	i2c_unregister_device(data->lm75[0]);
    834
    835	return 0;
    836}
    837
    838/*
    839 * The SMBus locks itself, usually, but nothing may access the chip between
    840 * bank switches.
    841 */
    842static int asb100_read_value(struct i2c_client *client, u16 reg)
    843{
    844	struct asb100_data *data = i2c_get_clientdata(client);
    845	struct i2c_client *cl;
    846	int res, bank;
    847
    848	mutex_lock(&data->lock);
    849
    850	bank = (reg >> 8) & 0x0f;
    851	if (bank > 2)
    852		/* switch banks */
    853		i2c_smbus_write_byte_data(client, ASB100_REG_BANK, bank);
    854
    855	if (bank == 0 || bank > 2) {
    856		res = i2c_smbus_read_byte_data(client, reg & 0xff);
    857	} else {
    858		/* switch to subclient */
    859		cl = data->lm75[bank - 1];
    860
    861		/* convert from ISA to LM75 I2C addresses */
    862		switch (reg & 0xff) {
    863		case 0x50: /* TEMP */
    864			res = i2c_smbus_read_word_swapped(cl, 0);
    865			break;
    866		case 0x52: /* CONFIG */
    867			res = i2c_smbus_read_byte_data(cl, 1);
    868			break;
    869		case 0x53: /* HYST */
    870			res = i2c_smbus_read_word_swapped(cl, 2);
    871			break;
    872		case 0x55: /* MAX */
    873		default:
    874			res = i2c_smbus_read_word_swapped(cl, 3);
    875			break;
    876		}
    877	}
    878
    879	if (bank > 2)
    880		i2c_smbus_write_byte_data(client, ASB100_REG_BANK, 0);
    881
    882	mutex_unlock(&data->lock);
    883
    884	return res;
    885}
    886
    887static void asb100_write_value(struct i2c_client *client, u16 reg, u16 value)
    888{
    889	struct asb100_data *data = i2c_get_clientdata(client);
    890	struct i2c_client *cl;
    891	int bank;
    892
    893	mutex_lock(&data->lock);
    894
    895	bank = (reg >> 8) & 0x0f;
    896	if (bank > 2)
    897		/* switch banks */
    898		i2c_smbus_write_byte_data(client, ASB100_REG_BANK, bank);
    899
    900	if (bank == 0 || bank > 2) {
    901		i2c_smbus_write_byte_data(client, reg & 0xff, value & 0xff);
    902	} else {
    903		/* switch to subclient */
    904		cl = data->lm75[bank - 1];
    905
    906		/* convert from ISA to LM75 I2C addresses */
    907		switch (reg & 0xff) {
    908		case 0x52: /* CONFIG */
    909			i2c_smbus_write_byte_data(cl, 1, value & 0xff);
    910			break;
    911		case 0x53: /* HYST */
    912			i2c_smbus_write_word_swapped(cl, 2, value);
    913			break;
    914		case 0x55: /* MAX */
    915			i2c_smbus_write_word_swapped(cl, 3, value);
    916			break;
    917		}
    918	}
    919
    920	if (bank > 2)
    921		i2c_smbus_write_byte_data(client, ASB100_REG_BANK, 0);
    922
    923	mutex_unlock(&data->lock);
    924}
    925
    926static void asb100_init_client(struct i2c_client *client)
    927{
    928	struct asb100_data *data = i2c_get_clientdata(client);
    929
    930	data->vrm = vid_which_vrm();
    931
    932	/* Start monitoring */
    933	asb100_write_value(client, ASB100_REG_CONFIG,
    934		(asb100_read_value(client, ASB100_REG_CONFIG) & 0xf7) | 0x01);
    935}
    936
    937static struct asb100_data *asb100_update_device(struct device *dev)
    938{
    939	struct i2c_client *client = to_i2c_client(dev);
    940	struct asb100_data *data = i2c_get_clientdata(client);
    941	int i;
    942
    943	mutex_lock(&data->update_lock);
    944
    945	if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
    946		|| !data->valid) {
    947
    948		dev_dbg(&client->dev, "starting device update...\n");
    949
    950		/* 7 voltage inputs */
    951		for (i = 0; i < 7; i++) {
    952			data->in[i] = asb100_read_value(client,
    953				ASB100_REG_IN(i));
    954			data->in_min[i] = asb100_read_value(client,
    955				ASB100_REG_IN_MIN(i));
    956			data->in_max[i] = asb100_read_value(client,
    957				ASB100_REG_IN_MAX(i));
    958		}
    959
    960		/* 3 fan inputs */
    961		for (i = 0; i < 3; i++) {
    962			data->fan[i] = asb100_read_value(client,
    963					ASB100_REG_FAN(i));
    964			data->fan_min[i] = asb100_read_value(client,
    965					ASB100_REG_FAN_MIN(i));
    966		}
    967
    968		/* 4 temperature inputs */
    969		for (i = 1; i <= 4; i++) {
    970			data->temp[i-1] = asb100_read_value(client,
    971					ASB100_REG_TEMP(i));
    972			data->temp_max[i-1] = asb100_read_value(client,
    973					ASB100_REG_TEMP_MAX(i));
    974			data->temp_hyst[i-1] = asb100_read_value(client,
    975					ASB100_REG_TEMP_HYST(i));
    976		}
    977
    978		/* VID and fan divisors */
    979		i = asb100_read_value(client, ASB100_REG_VID_FANDIV);
    980		data->vid = i & 0x0f;
    981		data->vid |= (asb100_read_value(client,
    982				ASB100_REG_CHIPID) & 0x01) << 4;
    983		data->fan_div[0] = (i >> 4) & 0x03;
    984		data->fan_div[1] = (i >> 6) & 0x03;
    985		data->fan_div[2] = (asb100_read_value(client,
    986				ASB100_REG_PIN) >> 6) & 0x03;
    987
    988		/* PWM */
    989		data->pwm = asb100_read_value(client, ASB100_REG_PWM1);
    990
    991		/* alarms */
    992		data->alarms = asb100_read_value(client, ASB100_REG_ALARM1) +
    993			(asb100_read_value(client, ASB100_REG_ALARM2) << 8);
    994
    995		data->last_updated = jiffies;
    996		data->valid = true;
    997
    998		dev_dbg(&client->dev, "... device update complete\n");
    999	}
   1000
   1001	mutex_unlock(&data->update_lock);
   1002
   1003	return data;
   1004}
   1005
   1006module_i2c_driver(asb100_driver);
   1007
   1008MODULE_AUTHOR("Mark M. Hoffman <mhoffman@lightlink.com>");
   1009MODULE_DESCRIPTION("ASB100 Bach driver");
   1010MODULE_LICENSE("GPL");