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

adc128d818.c (14998B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Driver for TI ADC128D818 System Monitor with Temperature Sensor
      4 *
      5 * Copyright (c) 2014 Guenter Roeck
      6 *
      7 * Derived from lm80.c
      8 * Copyright (C) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
      9 *			     and Philip Edelbrock <phil@netroedge.com>
     10 */
     11
     12#include <linux/module.h>
     13#include <linux/slab.h>
     14#include <linux/jiffies.h>
     15#include <linux/i2c.h>
     16#include <linux/hwmon.h>
     17#include <linux/hwmon-sysfs.h>
     18#include <linux/err.h>
     19#include <linux/regulator/consumer.h>
     20#include <linux/mutex.h>
     21#include <linux/bitops.h>
     22#include <linux/of.h>
     23
     24/* Addresses to scan
     25 * The chip also supports addresses 0x35..0x37. Don't scan those addresses
     26 * since they are also used by some EEPROMs, which may result in false
     27 * positives.
     28 */
     29static const unsigned short normal_i2c[] = {
     30	0x1d, 0x1e, 0x1f, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
     31
     32/* registers */
     33#define ADC128_REG_IN_MAX(nr)		(0x2a + (nr) * 2)
     34#define ADC128_REG_IN_MIN(nr)		(0x2b + (nr) * 2)
     35#define ADC128_REG_IN(nr)		(0x20 + (nr))
     36
     37#define ADC128_REG_TEMP			0x27
     38#define ADC128_REG_TEMP_MAX		0x38
     39#define ADC128_REG_TEMP_HYST		0x39
     40
     41#define ADC128_REG_CONFIG		0x00
     42#define ADC128_REG_ALARM		0x01
     43#define ADC128_REG_MASK			0x03
     44#define ADC128_REG_CONV_RATE		0x07
     45#define ADC128_REG_ONESHOT		0x09
     46#define ADC128_REG_SHUTDOWN		0x0a
     47#define ADC128_REG_CONFIG_ADV		0x0b
     48#define ADC128_REG_BUSY_STATUS		0x0c
     49
     50#define ADC128_REG_MAN_ID		0x3e
     51#define ADC128_REG_DEV_ID		0x3f
     52
     53/* No. of voltage entries in adc128_attrs */
     54#define ADC128_ATTR_NUM_VOLT		(8 * 4)
     55
     56/* Voltage inputs visible per operation mode */
     57static const u8 num_inputs[] = { 7, 8, 4, 6 };
     58
     59struct adc128_data {
     60	struct i2c_client *client;
     61	struct regulator *regulator;
     62	int vref;		/* Reference voltage in mV */
     63	struct mutex update_lock;
     64	u8 mode;		/* Operation mode */
     65	bool valid;		/* true if following fields are valid */
     66	unsigned long last_updated;	/* In jiffies */
     67
     68	u16 in[3][8];		/* Register value, normalized to 12 bit
     69				 * 0: input voltage
     70				 * 1: min limit
     71				 * 2: max limit
     72				 */
     73	s16 temp[3];		/* Register value, normalized to 9 bit
     74				 * 0: sensor 1: limit 2: hyst
     75				 */
     76	u8 alarms;		/* alarm register value */
     77};
     78
     79static struct adc128_data *adc128_update_device(struct device *dev)
     80{
     81	struct adc128_data *data = dev_get_drvdata(dev);
     82	struct i2c_client *client = data->client;
     83	struct adc128_data *ret = data;
     84	int i, rv;
     85
     86	mutex_lock(&data->update_lock);
     87
     88	if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
     89		for (i = 0; i < num_inputs[data->mode]; i++) {
     90			rv = i2c_smbus_read_word_swapped(client,
     91							 ADC128_REG_IN(i));
     92			if (rv < 0)
     93				goto abort;
     94			data->in[0][i] = rv >> 4;
     95
     96			rv = i2c_smbus_read_byte_data(client,
     97						      ADC128_REG_IN_MIN(i));
     98			if (rv < 0)
     99				goto abort;
    100			data->in[1][i] = rv << 4;
    101
    102			rv = i2c_smbus_read_byte_data(client,
    103						      ADC128_REG_IN_MAX(i));
    104			if (rv < 0)
    105				goto abort;
    106			data->in[2][i] = rv << 4;
    107		}
    108
    109		if (data->mode != 1) {
    110			rv = i2c_smbus_read_word_swapped(client,
    111							 ADC128_REG_TEMP);
    112			if (rv < 0)
    113				goto abort;
    114			data->temp[0] = rv >> 7;
    115
    116			rv = i2c_smbus_read_byte_data(client,
    117						      ADC128_REG_TEMP_MAX);
    118			if (rv < 0)
    119				goto abort;
    120			data->temp[1] = rv << 1;
    121
    122			rv = i2c_smbus_read_byte_data(client,
    123						      ADC128_REG_TEMP_HYST);
    124			if (rv < 0)
    125				goto abort;
    126			data->temp[2] = rv << 1;
    127		}
    128
    129		rv = i2c_smbus_read_byte_data(client, ADC128_REG_ALARM);
    130		if (rv < 0)
    131			goto abort;
    132		data->alarms |= rv;
    133
    134		data->last_updated = jiffies;
    135		data->valid = true;
    136	}
    137	goto done;
    138
    139abort:
    140	ret = ERR_PTR(rv);
    141	data->valid = false;
    142done:
    143	mutex_unlock(&data->update_lock);
    144	return ret;
    145}
    146
    147static ssize_t adc128_in_show(struct device *dev,
    148			      struct device_attribute *attr, char *buf)
    149{
    150	struct adc128_data *data = adc128_update_device(dev);
    151	int index = to_sensor_dev_attr_2(attr)->index;
    152	int nr = to_sensor_dev_attr_2(attr)->nr;
    153	int val;
    154
    155	if (IS_ERR(data))
    156		return PTR_ERR(data);
    157
    158	val = DIV_ROUND_CLOSEST(data->in[index][nr] * data->vref, 4095);
    159	return sprintf(buf, "%d\n", val);
    160}
    161
    162static ssize_t adc128_in_store(struct device *dev,
    163			       struct device_attribute *attr, const char *buf,
    164			       size_t count)
    165{
    166	struct adc128_data *data = dev_get_drvdata(dev);
    167	int index = to_sensor_dev_attr_2(attr)->index;
    168	int nr = to_sensor_dev_attr_2(attr)->nr;
    169	u8 reg, regval;
    170	long val;
    171	int err;
    172
    173	err = kstrtol(buf, 10, &val);
    174	if (err < 0)
    175		return err;
    176
    177	mutex_lock(&data->update_lock);
    178	/* 10 mV LSB on limit registers */
    179	regval = clamp_val(DIV_ROUND_CLOSEST(val, 10), 0, 255);
    180	data->in[index][nr] = regval << 4;
    181	reg = index == 1 ? ADC128_REG_IN_MIN(nr) : ADC128_REG_IN_MAX(nr);
    182	i2c_smbus_write_byte_data(data->client, reg, regval);
    183	mutex_unlock(&data->update_lock);
    184
    185	return count;
    186}
    187
    188static ssize_t adc128_temp_show(struct device *dev,
    189				struct device_attribute *attr, char *buf)
    190{
    191	struct adc128_data *data = adc128_update_device(dev);
    192	int index = to_sensor_dev_attr(attr)->index;
    193	int temp;
    194
    195	if (IS_ERR(data))
    196		return PTR_ERR(data);
    197
    198	temp = sign_extend32(data->temp[index], 8);
    199	return sprintf(buf, "%d\n", temp * 500);/* 0.5 degrees C resolution */
    200}
    201
    202static ssize_t adc128_temp_store(struct device *dev,
    203				 struct device_attribute *attr,
    204				 const char *buf, size_t count)
    205{
    206	struct adc128_data *data = dev_get_drvdata(dev);
    207	int index = to_sensor_dev_attr(attr)->index;
    208	long val;
    209	int err;
    210	s8 regval;
    211
    212	err = kstrtol(buf, 10, &val);
    213	if (err < 0)
    214		return err;
    215
    216	mutex_lock(&data->update_lock);
    217	regval = clamp_val(DIV_ROUND_CLOSEST(val, 1000), -128, 127);
    218	data->temp[index] = regval << 1;
    219	i2c_smbus_write_byte_data(data->client,
    220				  index == 1 ? ADC128_REG_TEMP_MAX
    221					     : ADC128_REG_TEMP_HYST,
    222				  regval);
    223	mutex_unlock(&data->update_lock);
    224
    225	return count;
    226}
    227
    228static ssize_t adc128_alarm_show(struct device *dev,
    229				 struct device_attribute *attr, char *buf)
    230{
    231	struct adc128_data *data = adc128_update_device(dev);
    232	int mask = 1 << to_sensor_dev_attr(attr)->index;
    233	u8 alarms;
    234
    235	if (IS_ERR(data))
    236		return PTR_ERR(data);
    237
    238	/*
    239	 * Clear an alarm after reporting it to user space. If it is still
    240	 * active, the next update sequence will set the alarm bit again.
    241	 */
    242	alarms = data->alarms;
    243	data->alarms &= ~mask;
    244
    245	return sprintf(buf, "%u\n", !!(alarms & mask));
    246}
    247
    248static umode_t adc128_is_visible(struct kobject *kobj,
    249				 struct attribute *attr, int index)
    250{
    251	struct device *dev = kobj_to_dev(kobj);
    252	struct adc128_data *data = dev_get_drvdata(dev);
    253
    254	if (index < ADC128_ATTR_NUM_VOLT) {
    255		/* Voltage, visible according to num_inputs[] */
    256		if (index >= num_inputs[data->mode] * 4)
    257			return 0;
    258	} else {
    259		/* Temperature, visible if not in mode 1 */
    260		if (data->mode == 1)
    261			return 0;
    262	}
    263
    264	return attr->mode;
    265}
    266
    267static SENSOR_DEVICE_ATTR_2_RO(in0_input, adc128_in, 0, 0);
    268static SENSOR_DEVICE_ATTR_2_RW(in0_min, adc128_in, 0, 1);
    269static SENSOR_DEVICE_ATTR_2_RW(in0_max, adc128_in, 0, 2);
    270
    271static SENSOR_DEVICE_ATTR_2_RO(in1_input, adc128_in, 1, 0);
    272static SENSOR_DEVICE_ATTR_2_RW(in1_min, adc128_in, 1, 1);
    273static SENSOR_DEVICE_ATTR_2_RW(in1_max, adc128_in, 1, 2);
    274
    275static SENSOR_DEVICE_ATTR_2_RO(in2_input, adc128_in, 2, 0);
    276static SENSOR_DEVICE_ATTR_2_RW(in2_min, adc128_in, 2, 1);
    277static SENSOR_DEVICE_ATTR_2_RW(in2_max, adc128_in, 2, 2);
    278
    279static SENSOR_DEVICE_ATTR_2_RO(in3_input, adc128_in, 3, 0);
    280static SENSOR_DEVICE_ATTR_2_RW(in3_min, adc128_in, 3, 1);
    281static SENSOR_DEVICE_ATTR_2_RW(in3_max, adc128_in, 3, 2);
    282
    283static SENSOR_DEVICE_ATTR_2_RO(in4_input, adc128_in, 4, 0);
    284static SENSOR_DEVICE_ATTR_2_RW(in4_min, adc128_in, 4, 1);
    285static SENSOR_DEVICE_ATTR_2_RW(in4_max, adc128_in, 4, 2);
    286
    287static SENSOR_DEVICE_ATTR_2_RO(in5_input, adc128_in, 5, 0);
    288static SENSOR_DEVICE_ATTR_2_RW(in5_min, adc128_in, 5, 1);
    289static SENSOR_DEVICE_ATTR_2_RW(in5_max, adc128_in, 5, 2);
    290
    291static SENSOR_DEVICE_ATTR_2_RO(in6_input, adc128_in, 6, 0);
    292static SENSOR_DEVICE_ATTR_2_RW(in6_min, adc128_in, 6, 1);
    293static SENSOR_DEVICE_ATTR_2_RW(in6_max, adc128_in, 6, 2);
    294
    295static SENSOR_DEVICE_ATTR_2_RO(in7_input, adc128_in, 7, 0);
    296static SENSOR_DEVICE_ATTR_2_RW(in7_min, adc128_in, 7, 1);
    297static SENSOR_DEVICE_ATTR_2_RW(in7_max, adc128_in, 7, 2);
    298
    299static SENSOR_DEVICE_ATTR_RO(temp1_input, adc128_temp, 0);
    300static SENSOR_DEVICE_ATTR_RW(temp1_max, adc128_temp, 1);
    301static SENSOR_DEVICE_ATTR_RW(temp1_max_hyst, adc128_temp, 2);
    302
    303static SENSOR_DEVICE_ATTR_RO(in0_alarm, adc128_alarm, 0);
    304static SENSOR_DEVICE_ATTR_RO(in1_alarm, adc128_alarm, 1);
    305static SENSOR_DEVICE_ATTR_RO(in2_alarm, adc128_alarm, 2);
    306static SENSOR_DEVICE_ATTR_RO(in3_alarm, adc128_alarm, 3);
    307static SENSOR_DEVICE_ATTR_RO(in4_alarm, adc128_alarm, 4);
    308static SENSOR_DEVICE_ATTR_RO(in5_alarm, adc128_alarm, 5);
    309static SENSOR_DEVICE_ATTR_RO(in6_alarm, adc128_alarm, 6);
    310static SENSOR_DEVICE_ATTR_RO(in7_alarm, adc128_alarm, 7);
    311static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, adc128_alarm, 7);
    312
    313static struct attribute *adc128_attrs[] = {
    314	&sensor_dev_attr_in0_alarm.dev_attr.attr,
    315	&sensor_dev_attr_in0_input.dev_attr.attr,
    316	&sensor_dev_attr_in0_max.dev_attr.attr,
    317	&sensor_dev_attr_in0_min.dev_attr.attr,
    318	&sensor_dev_attr_in1_alarm.dev_attr.attr,
    319	&sensor_dev_attr_in1_input.dev_attr.attr,
    320	&sensor_dev_attr_in1_max.dev_attr.attr,
    321	&sensor_dev_attr_in1_min.dev_attr.attr,
    322	&sensor_dev_attr_in2_alarm.dev_attr.attr,
    323	&sensor_dev_attr_in2_input.dev_attr.attr,
    324	&sensor_dev_attr_in2_max.dev_attr.attr,
    325	&sensor_dev_attr_in2_min.dev_attr.attr,
    326	&sensor_dev_attr_in3_alarm.dev_attr.attr,
    327	&sensor_dev_attr_in3_input.dev_attr.attr,
    328	&sensor_dev_attr_in3_max.dev_attr.attr,
    329	&sensor_dev_attr_in3_min.dev_attr.attr,
    330	&sensor_dev_attr_in4_alarm.dev_attr.attr,
    331	&sensor_dev_attr_in4_input.dev_attr.attr,
    332	&sensor_dev_attr_in4_max.dev_attr.attr,
    333	&sensor_dev_attr_in4_min.dev_attr.attr,
    334	&sensor_dev_attr_in5_alarm.dev_attr.attr,
    335	&sensor_dev_attr_in5_input.dev_attr.attr,
    336	&sensor_dev_attr_in5_max.dev_attr.attr,
    337	&sensor_dev_attr_in5_min.dev_attr.attr,
    338	&sensor_dev_attr_in6_alarm.dev_attr.attr,
    339	&sensor_dev_attr_in6_input.dev_attr.attr,
    340	&sensor_dev_attr_in6_max.dev_attr.attr,
    341	&sensor_dev_attr_in6_min.dev_attr.attr,
    342	&sensor_dev_attr_in7_alarm.dev_attr.attr,
    343	&sensor_dev_attr_in7_input.dev_attr.attr,
    344	&sensor_dev_attr_in7_max.dev_attr.attr,
    345	&sensor_dev_attr_in7_min.dev_attr.attr,
    346	&sensor_dev_attr_temp1_input.dev_attr.attr,
    347	&sensor_dev_attr_temp1_max.dev_attr.attr,
    348	&sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
    349	&sensor_dev_attr_temp1_max_hyst.dev_attr.attr,
    350	NULL
    351};
    352
    353static const struct attribute_group adc128_group = {
    354	.attrs = adc128_attrs,
    355	.is_visible = adc128_is_visible,
    356};
    357__ATTRIBUTE_GROUPS(adc128);
    358
    359static int adc128_detect(struct i2c_client *client, struct i2c_board_info *info)
    360{
    361	int man_id, dev_id;
    362
    363	if (!i2c_check_functionality(client->adapter,
    364				     I2C_FUNC_SMBUS_BYTE_DATA |
    365				     I2C_FUNC_SMBUS_WORD_DATA))
    366		return -ENODEV;
    367
    368	man_id = i2c_smbus_read_byte_data(client, ADC128_REG_MAN_ID);
    369	dev_id = i2c_smbus_read_byte_data(client, ADC128_REG_DEV_ID);
    370	if (man_id != 0x01 || dev_id != 0x09)
    371		return -ENODEV;
    372
    373	/* Check unused bits for confirmation */
    374	if (i2c_smbus_read_byte_data(client, ADC128_REG_CONFIG) & 0xf4)
    375		return -ENODEV;
    376	if (i2c_smbus_read_byte_data(client, ADC128_REG_CONV_RATE) & 0xfe)
    377		return -ENODEV;
    378	if (i2c_smbus_read_byte_data(client, ADC128_REG_ONESHOT) & 0xfe)
    379		return -ENODEV;
    380	if (i2c_smbus_read_byte_data(client, ADC128_REG_SHUTDOWN) & 0xfe)
    381		return -ENODEV;
    382	if (i2c_smbus_read_byte_data(client, ADC128_REG_CONFIG_ADV) & 0xf8)
    383		return -ENODEV;
    384	if (i2c_smbus_read_byte_data(client, ADC128_REG_BUSY_STATUS) & 0xfc)
    385		return -ENODEV;
    386
    387	strlcpy(info->type, "adc128d818", I2C_NAME_SIZE);
    388
    389	return 0;
    390}
    391
    392static int adc128_init_client(struct adc128_data *data)
    393{
    394	struct i2c_client *client = data->client;
    395	int err;
    396	u8 regval = 0x0;
    397
    398	/*
    399	 * Reset chip to defaults.
    400	 * This makes most other initializations unnecessary.
    401	 */
    402	err = i2c_smbus_write_byte_data(client, ADC128_REG_CONFIG, 0x80);
    403	if (err)
    404		return err;
    405
    406	/* Set operation mode, if non-default */
    407	if (data->mode != 0)
    408		regval |= data->mode << 1;
    409
    410	/* If external vref is selected, configure the chip to use it */
    411	if (data->regulator)
    412		regval |= 0x01;
    413
    414	/* Write advanced configuration register */
    415	if (regval != 0x0) {
    416		err = i2c_smbus_write_byte_data(client, ADC128_REG_CONFIG_ADV,
    417						regval);
    418		if (err)
    419			return err;
    420	}
    421
    422	/* Start monitoring */
    423	err = i2c_smbus_write_byte_data(client, ADC128_REG_CONFIG, 0x01);
    424	if (err)
    425		return err;
    426
    427	return 0;
    428}
    429
    430static int adc128_probe(struct i2c_client *client)
    431{
    432	struct device *dev = &client->dev;
    433	struct regulator *regulator;
    434	struct device *hwmon_dev;
    435	struct adc128_data *data;
    436	int err, vref;
    437
    438	data = devm_kzalloc(dev, sizeof(struct adc128_data), GFP_KERNEL);
    439	if (!data)
    440		return -ENOMEM;
    441
    442	/* vref is optional. If specified, is used as chip reference voltage */
    443	regulator = devm_regulator_get_optional(dev, "vref");
    444	if (!IS_ERR(regulator)) {
    445		data->regulator = regulator;
    446		err = regulator_enable(regulator);
    447		if (err < 0)
    448			return err;
    449		vref = regulator_get_voltage(regulator);
    450		if (vref < 0) {
    451			err = vref;
    452			goto error;
    453		}
    454		data->vref = DIV_ROUND_CLOSEST(vref, 1000);
    455	} else {
    456		data->vref = 2560;	/* 2.56V, in mV */
    457	}
    458
    459	/* Operation mode is optional. If unspecified, keep current mode */
    460	if (of_property_read_u8(dev->of_node, "ti,mode", &data->mode) == 0) {
    461		if (data->mode > 3) {
    462			dev_err(dev, "invalid operation mode %d\n",
    463				data->mode);
    464			err = -EINVAL;
    465			goto error;
    466		}
    467	} else {
    468		err = i2c_smbus_read_byte_data(client, ADC128_REG_CONFIG_ADV);
    469		if (err < 0)
    470			goto error;
    471		data->mode = (err >> 1) & ADC128_REG_MASK;
    472	}
    473
    474	data->client = client;
    475	i2c_set_clientdata(client, data);
    476	mutex_init(&data->update_lock);
    477
    478	/* Initialize the chip */
    479	err = adc128_init_client(data);
    480	if (err < 0)
    481		goto error;
    482
    483	hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
    484							   data, adc128_groups);
    485	if (IS_ERR(hwmon_dev)) {
    486		err = PTR_ERR(hwmon_dev);
    487		goto error;
    488	}
    489
    490	return 0;
    491
    492error:
    493	if (data->regulator)
    494		regulator_disable(data->regulator);
    495	return err;
    496}
    497
    498static int adc128_remove(struct i2c_client *client)
    499{
    500	struct adc128_data *data = i2c_get_clientdata(client);
    501
    502	if (data->regulator)
    503		regulator_disable(data->regulator);
    504
    505	return 0;
    506}
    507
    508static const struct i2c_device_id adc128_id[] = {
    509	{ "adc128d818", 0 },
    510	{ }
    511};
    512MODULE_DEVICE_TABLE(i2c, adc128_id);
    513
    514static const struct of_device_id __maybe_unused adc128_of_match[] = {
    515	{ .compatible = "ti,adc128d818" },
    516	{ },
    517};
    518MODULE_DEVICE_TABLE(of, adc128_of_match);
    519
    520static struct i2c_driver adc128_driver = {
    521	.class		= I2C_CLASS_HWMON,
    522	.driver = {
    523		.name	= "adc128d818",
    524		.of_match_table = of_match_ptr(adc128_of_match),
    525	},
    526	.probe_new	= adc128_probe,
    527	.remove		= adc128_remove,
    528	.id_table	= adc128_id,
    529	.detect		= adc128_detect,
    530	.address_list	= normal_i2c,
    531};
    532
    533module_i2c_driver(adc128_driver);
    534
    535MODULE_AUTHOR("Guenter Roeck");
    536MODULE_DESCRIPTION("Driver for ADC128D818");
    537MODULE_LICENSE("GPL");