brintos

brintos / linux-shallow public Read only

0
0
Text · 93.1 KiB · ce7fd4c Raw
3784 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 * Hardware monitoring driver for PMBus devices4 *5 * Copyright (c) 2010, 2011 Ericsson AB.6 * Copyright (c) 2012 Guenter Roeck7 */8 9#include <linux/debugfs.h>10#include <linux/delay.h>11#include <linux/kernel.h>12#include <linux/math64.h>13#include <linux/module.h>14#include <linux/init.h>15#include <linux/err.h>16#include <linux/slab.h>17#include <linux/i2c.h>18#include <linux/hwmon.h>19#include <linux/hwmon-sysfs.h>20#include <linux/pmbus.h>21#include <linux/regulator/driver.h>22#include <linux/regulator/machine.h>23#include <linux/of.h>24#include <linux/thermal.h>25#include "pmbus.h"26 27/*28 * Number of additional attribute pointers to allocate29 * with each call to krealloc30 */31#define PMBUS_ATTR_ALLOC_SIZE	3232#define PMBUS_NAME_SIZE		2433 34struct pmbus_sensor {35	struct pmbus_sensor *next;36	char name[PMBUS_NAME_SIZE];	/* sysfs sensor name */37	struct device_attribute attribute;38	u8 page;		/* page number */39	u8 phase;		/* phase number, 0xff for all phases */40	u16 reg;		/* register */41	enum pmbus_sensor_classes class;	/* sensor class */42	bool update;		/* runtime sensor update needed */43	bool convert;		/* Whether or not to apply linear/vid/direct */44	int data;		/* Sensor data.45				   Negative if there was a read error */46};47#define to_pmbus_sensor(_attr) \48	container_of(_attr, struct pmbus_sensor, attribute)49 50struct pmbus_boolean {51	char name[PMBUS_NAME_SIZE];	/* sysfs boolean name */52	struct sensor_device_attribute attribute;53	struct pmbus_sensor *s1;54	struct pmbus_sensor *s2;55};56#define to_pmbus_boolean(_attr) \57	container_of(_attr, struct pmbus_boolean, attribute)58 59struct pmbus_label {60	char name[PMBUS_NAME_SIZE];	/* sysfs label name */61	struct device_attribute attribute;62	char label[PMBUS_NAME_SIZE];	/* label */63};64#define to_pmbus_label(_attr) \65	container_of(_attr, struct pmbus_label, attribute)66 67/* Macros for converting between sensor index and register/page/status mask */68 69#define PB_STATUS_MASK	0xffff70#define PB_REG_SHIFT	1671#define PB_REG_MASK	0x3ff72#define PB_PAGE_SHIFT	2673#define PB_PAGE_MASK	0x3f74 75#define pb_reg_to_index(page, reg, mask)	(((page) << PB_PAGE_SHIFT) | \76						 ((reg) << PB_REG_SHIFT) | (mask))77 78#define pb_index_to_page(index)			(((index) >> PB_PAGE_SHIFT) & PB_PAGE_MASK)79#define pb_index_to_reg(index)			(((index) >> PB_REG_SHIFT) & PB_REG_MASK)80#define pb_index_to_mask(index)			((index) & PB_STATUS_MASK)81 82struct pmbus_data {83	struct device *dev;84	struct device *hwmon_dev;85	struct regulator_dev **rdevs;86 87	u32 flags;		/* from platform data */88 89	u8 revision;	/* The PMBus revision the device is compliant with */90 91	int exponent[PMBUS_PAGES];92				/* linear mode: exponent for output voltages */93 94	const struct pmbus_driver_info *info;95 96	int max_attributes;97	int num_attributes;98	struct attribute_group group;99	const struct attribute_group **groups;100	struct dentry *debugfs;		/* debugfs device directory */101 102	struct pmbus_sensor *sensors;103 104	struct mutex update_lock;105 106	bool has_status_word;		/* device uses STATUS_WORD register */107	int (*read_status)(struct i2c_client *client, int page);108 109	s16 currpage;	/* current page, -1 for unknown/unset */110	s16 currphase;	/* current phase, 0xff for all, -1 for unknown/unset */111 112	int vout_low[PMBUS_PAGES];	/* voltage low margin */113	int vout_high[PMBUS_PAGES];	/* voltage high margin */114	ktime_t write_time;		/* Last SMBUS write timestamp */115	ktime_t access_time;		/* Last SMBUS access timestamp */116};117 118struct pmbus_debugfs_entry {119	struct i2c_client *client;120	u8 page;121	u8 reg;122};123 124static const int pmbus_fan_rpm_mask[] = {125	PB_FAN_1_RPM,126	PB_FAN_2_RPM,127	PB_FAN_1_RPM,128	PB_FAN_2_RPM,129};130 131static const int pmbus_fan_config_registers[] = {132	PMBUS_FAN_CONFIG_12,133	PMBUS_FAN_CONFIG_12,134	PMBUS_FAN_CONFIG_34,135	PMBUS_FAN_CONFIG_34136};137 138static const int pmbus_fan_command_registers[] = {139	PMBUS_FAN_COMMAND_1,140	PMBUS_FAN_COMMAND_2,141	PMBUS_FAN_COMMAND_3,142	PMBUS_FAN_COMMAND_4,143};144 145void pmbus_clear_cache(struct i2c_client *client)146{147	struct pmbus_data *data = i2c_get_clientdata(client);148	struct pmbus_sensor *sensor;149 150	for (sensor = data->sensors; sensor; sensor = sensor->next)151		sensor->data = -ENODATA;152}153EXPORT_SYMBOL_NS_GPL(pmbus_clear_cache, PMBUS);154 155void pmbus_set_update(struct i2c_client *client, u8 reg, bool update)156{157	struct pmbus_data *data = i2c_get_clientdata(client);158	struct pmbus_sensor *sensor;159 160	for (sensor = data->sensors; sensor; sensor = sensor->next)161		if (sensor->reg == reg)162			sensor->update = update;163}164EXPORT_SYMBOL_NS_GPL(pmbus_set_update, PMBUS);165 166/* Some chips need a delay between accesses. */167static void pmbus_wait(struct i2c_client *client)168{169	struct pmbus_data *data = i2c_get_clientdata(client);170	const struct pmbus_driver_info *info = data->info;171	s64 delta;172 173	if (info->access_delay) {174		delta = ktime_us_delta(ktime_get(), data->access_time);175 176		if (delta < info->access_delay)177			fsleep(info->access_delay - delta);178	} else if (info->write_delay) {179		delta = ktime_us_delta(ktime_get(), data->write_time);180 181		if (delta < info->write_delay)182			fsleep(info->write_delay - delta);183	}184}185 186/* Sets the last accessed timestamp for pmbus_wait */187static void pmbus_update_ts(struct i2c_client *client, bool write_op)188{189	struct pmbus_data *data = i2c_get_clientdata(client);190	const struct pmbus_driver_info *info = data->info;191 192	if (info->access_delay) {193		data->access_time = ktime_get();194	} else if (info->write_delay && write_op) {195		data->write_time = ktime_get();196	}197}198 199int pmbus_set_page(struct i2c_client *client, int page, int phase)200{201	struct pmbus_data *data = i2c_get_clientdata(client);202	int rv;203 204	if (page < 0)205		return 0;206 207	if (!(data->info->func[page] & PMBUS_PAGE_VIRTUAL) &&208	    data->info->pages > 1 && page != data->currpage) {209		pmbus_wait(client);210		rv = i2c_smbus_write_byte_data(client, PMBUS_PAGE, page);211		pmbus_update_ts(client, true);212		if (rv < 0)213			return rv;214 215		pmbus_wait(client);216		rv = i2c_smbus_read_byte_data(client, PMBUS_PAGE);217		pmbus_update_ts(client, false);218		if (rv < 0)219			return rv;220 221		if (rv != page)222			return -EIO;223	}224	data->currpage = page;225 226	if (data->info->phases[page] && data->currphase != phase &&227	    !(data->info->func[page] & PMBUS_PHASE_VIRTUAL)) {228		pmbus_wait(client);229		rv = i2c_smbus_write_byte_data(client, PMBUS_PHASE,230					       phase);231		pmbus_update_ts(client, true);232		if (rv)233			return rv;234	}235	data->currphase = phase;236 237	return 0;238}239EXPORT_SYMBOL_NS_GPL(pmbus_set_page, PMBUS);240 241int pmbus_write_byte(struct i2c_client *client, int page, u8 value)242{243	int rv;244 245	rv = pmbus_set_page(client, page, 0xff);246	if (rv < 0)247		return rv;248 249	pmbus_wait(client);250	rv = i2c_smbus_write_byte(client, value);251	pmbus_update_ts(client, true);252 253	return rv;254}255EXPORT_SYMBOL_NS_GPL(pmbus_write_byte, PMBUS);256 257/*258 * _pmbus_write_byte() is similar to pmbus_write_byte(), but checks if259 * a device specific mapping function exists and calls it if necessary.260 */261static int _pmbus_write_byte(struct i2c_client *client, int page, u8 value)262{263	struct pmbus_data *data = i2c_get_clientdata(client);264	const struct pmbus_driver_info *info = data->info;265	int status;266 267	if (info->write_byte) {268		status = info->write_byte(client, page, value);269		if (status != -ENODATA)270			return status;271	}272	return pmbus_write_byte(client, page, value);273}274 275int pmbus_write_word_data(struct i2c_client *client, int page, u8 reg,276			  u16 word)277{278	int rv;279 280	rv = pmbus_set_page(client, page, 0xff);281	if (rv < 0)282		return rv;283 284	pmbus_wait(client);285	rv = i2c_smbus_write_word_data(client, reg, word);286	pmbus_update_ts(client, true);287 288	return rv;289}290EXPORT_SYMBOL_NS_GPL(pmbus_write_word_data, PMBUS);291 292 293static int pmbus_write_virt_reg(struct i2c_client *client, int page, int reg,294				u16 word)295{296	int bit;297	int id;298	int rv;299 300	switch (reg) {301	case PMBUS_VIRT_FAN_TARGET_1 ... PMBUS_VIRT_FAN_TARGET_4:302		id = reg - PMBUS_VIRT_FAN_TARGET_1;303		bit = pmbus_fan_rpm_mask[id];304		rv = pmbus_update_fan(client, page, id, bit, bit, word);305		break;306	default:307		rv = -ENXIO;308		break;309	}310 311	return rv;312}313 314/*315 * _pmbus_write_word_data() is similar to pmbus_write_word_data(), but checks if316 * a device specific mapping function exists and calls it if necessary.317 */318static int _pmbus_write_word_data(struct i2c_client *client, int page, int reg,319				  u16 word)320{321	struct pmbus_data *data = i2c_get_clientdata(client);322	const struct pmbus_driver_info *info = data->info;323	int status;324 325	if (info->write_word_data) {326		status = info->write_word_data(client, page, reg, word);327		if (status != -ENODATA)328			return status;329	}330 331	if (reg >= PMBUS_VIRT_BASE)332		return pmbus_write_virt_reg(client, page, reg, word);333 334	return pmbus_write_word_data(client, page, reg, word);335}336 337/*338 * _pmbus_write_byte_data() is similar to pmbus_write_byte_data(), but checks if339 * a device specific mapping function exists and calls it if necessary.340 */341static int _pmbus_write_byte_data(struct i2c_client *client, int page, int reg, u8 value)342{343	struct pmbus_data *data = i2c_get_clientdata(client);344	const struct pmbus_driver_info *info = data->info;345	int status;346 347	if (info->write_byte_data) {348		status = info->write_byte_data(client, page, reg, value);349		if (status != -ENODATA)350			return status;351	}352	return pmbus_write_byte_data(client, page, reg, value);353}354 355/*356 * _pmbus_read_byte_data() is similar to pmbus_read_byte_data(), but checks if357 * a device specific mapping function exists and calls it if necessary.358 */359static int _pmbus_read_byte_data(struct i2c_client *client, int page, int reg)360{361	struct pmbus_data *data = i2c_get_clientdata(client);362	const struct pmbus_driver_info *info = data->info;363	int status;364 365	if (info->read_byte_data) {366		status = info->read_byte_data(client, page, reg);367		if (status != -ENODATA)368			return status;369	}370	return pmbus_read_byte_data(client, page, reg);371}372 373int pmbus_update_fan(struct i2c_client *client, int page, int id,374		     u8 config, u8 mask, u16 command)375{376	int from;377	int rv;378	u8 to;379 380	from = _pmbus_read_byte_data(client, page,381				    pmbus_fan_config_registers[id]);382	if (from < 0)383		return from;384 385	to = (from & ~mask) | (config & mask);386	if (to != from) {387		rv = _pmbus_write_byte_data(client, page,388					   pmbus_fan_config_registers[id], to);389		if (rv < 0)390			return rv;391	}392 393	return _pmbus_write_word_data(client, page,394				      pmbus_fan_command_registers[id], command);395}396EXPORT_SYMBOL_NS_GPL(pmbus_update_fan, PMBUS);397 398int pmbus_read_word_data(struct i2c_client *client, int page, int phase, u8 reg)399{400	int rv;401 402	rv = pmbus_set_page(client, page, phase);403	if (rv < 0)404		return rv;405 406	pmbus_wait(client);407	rv = i2c_smbus_read_word_data(client, reg);408	pmbus_update_ts(client, false);409 410	return rv;411}412EXPORT_SYMBOL_NS_GPL(pmbus_read_word_data, PMBUS);413 414static int pmbus_read_virt_reg(struct i2c_client *client, int page, int reg)415{416	int rv;417	int id;418 419	switch (reg) {420	case PMBUS_VIRT_FAN_TARGET_1 ... PMBUS_VIRT_FAN_TARGET_4:421		id = reg - PMBUS_VIRT_FAN_TARGET_1;422		rv = pmbus_get_fan_rate_device(client, page, id, rpm);423		break;424	default:425		rv = -ENXIO;426		break;427	}428 429	return rv;430}431 432/*433 * _pmbus_read_word_data() is similar to pmbus_read_word_data(), but checks if434 * a device specific mapping function exists and calls it if necessary.435 */436static int _pmbus_read_word_data(struct i2c_client *client, int page,437				 int phase, int reg)438{439	struct pmbus_data *data = i2c_get_clientdata(client);440	const struct pmbus_driver_info *info = data->info;441	int status;442 443	if (info->read_word_data) {444		status = info->read_word_data(client, page, phase, reg);445		if (status != -ENODATA)446			return status;447	}448 449	if (reg >= PMBUS_VIRT_BASE)450		return pmbus_read_virt_reg(client, page, reg);451 452	return pmbus_read_word_data(client, page, phase, reg);453}454 455/* Same as above, but without phase parameter, for use in check functions */456static int __pmbus_read_word_data(struct i2c_client *client, int page, int reg)457{458	return _pmbus_read_word_data(client, page, 0xff, reg);459}460 461int pmbus_read_byte_data(struct i2c_client *client, int page, u8 reg)462{463	int rv;464 465	rv = pmbus_set_page(client, page, 0xff);466	if (rv < 0)467		return rv;468 469	pmbus_wait(client);470	rv = i2c_smbus_read_byte_data(client, reg);471	pmbus_update_ts(client, false);472 473	return rv;474}475EXPORT_SYMBOL_NS_GPL(pmbus_read_byte_data, PMBUS);476 477int pmbus_write_byte_data(struct i2c_client *client, int page, u8 reg, u8 value)478{479	int rv;480 481	rv = pmbus_set_page(client, page, 0xff);482	if (rv < 0)483		return rv;484 485	pmbus_wait(client);486	rv = i2c_smbus_write_byte_data(client, reg, value);487	pmbus_update_ts(client, true);488 489	return rv;490}491EXPORT_SYMBOL_NS_GPL(pmbus_write_byte_data, PMBUS);492 493int pmbus_update_byte_data(struct i2c_client *client, int page, u8 reg,494			   u8 mask, u8 value)495{496	unsigned int tmp;497	int rv;498 499	rv = _pmbus_read_byte_data(client, page, reg);500	if (rv < 0)501		return rv;502 503	tmp = (rv & ~mask) | (value & mask);504 505	if (tmp != rv)506		rv = _pmbus_write_byte_data(client, page, reg, tmp);507 508	return rv;509}510EXPORT_SYMBOL_NS_GPL(pmbus_update_byte_data, PMBUS);511 512static int pmbus_read_block_data(struct i2c_client *client, int page, u8 reg,513				 char *data_buf)514{515	int rv;516 517	rv = pmbus_set_page(client, page, 0xff);518	if (rv < 0)519		return rv;520 521	pmbus_wait(client);522	rv = i2c_smbus_read_block_data(client, reg, data_buf);523	pmbus_update_ts(client, false);524 525	return rv;526}527 528static struct pmbus_sensor *pmbus_find_sensor(struct pmbus_data *data, int page,529					      int reg)530{531	struct pmbus_sensor *sensor;532 533	for (sensor = data->sensors; sensor; sensor = sensor->next) {534		if (sensor->page == page && sensor->reg == reg)535			return sensor;536	}537 538	return ERR_PTR(-EINVAL);539}540 541static int pmbus_get_fan_rate(struct i2c_client *client, int page, int id,542			      enum pmbus_fan_mode mode,543			      bool from_cache)544{545	struct pmbus_data *data = i2c_get_clientdata(client);546	bool want_rpm, have_rpm;547	struct pmbus_sensor *s;548	int config;549	int reg;550 551	want_rpm = (mode == rpm);552 553	if (from_cache) {554		reg = want_rpm ? PMBUS_VIRT_FAN_TARGET_1 : PMBUS_VIRT_PWM_1;555		s = pmbus_find_sensor(data, page, reg + id);556		if (IS_ERR(s))557			return PTR_ERR(s);558 559		return s->data;560	}561 562	config = _pmbus_read_byte_data(client, page,563				      pmbus_fan_config_registers[id]);564	if (config < 0)565		return config;566 567	have_rpm = !!(config & pmbus_fan_rpm_mask[id]);568	if (want_rpm == have_rpm)569		return pmbus_read_word_data(client, page, 0xff,570					    pmbus_fan_command_registers[id]);571 572	/* Can't sensibly map between RPM and PWM, just return zero */573	return 0;574}575 576int pmbus_get_fan_rate_device(struct i2c_client *client, int page, int id,577			      enum pmbus_fan_mode mode)578{579	return pmbus_get_fan_rate(client, page, id, mode, false);580}581EXPORT_SYMBOL_NS_GPL(pmbus_get_fan_rate_device, PMBUS);582 583int pmbus_get_fan_rate_cached(struct i2c_client *client, int page, int id,584			      enum pmbus_fan_mode mode)585{586	return pmbus_get_fan_rate(client, page, id, mode, true);587}588EXPORT_SYMBOL_NS_GPL(pmbus_get_fan_rate_cached, PMBUS);589 590static void pmbus_clear_fault_page(struct i2c_client *client, int page)591{592	_pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS);593}594 595void pmbus_clear_faults(struct i2c_client *client)596{597	struct pmbus_data *data = i2c_get_clientdata(client);598	int i;599 600	for (i = 0; i < data->info->pages; i++)601		pmbus_clear_fault_page(client, i);602}603EXPORT_SYMBOL_NS_GPL(pmbus_clear_faults, PMBUS);604 605static int pmbus_check_status_cml(struct i2c_client *client)606{607	struct pmbus_data *data = i2c_get_clientdata(client);608	int status, status2;609 610	status = data->read_status(client, -1);611	if (status < 0 || (status & PB_STATUS_CML)) {612		status2 = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML);613		if (status2 < 0 || (status2 & PB_CML_FAULT_INVALID_COMMAND))614			return -EIO;615	}616	return 0;617}618 619static bool pmbus_check_register(struct i2c_client *client,620				 int (*func)(struct i2c_client *client,621					     int page, int reg),622				 int page, int reg)623{624	int rv;625	struct pmbus_data *data = i2c_get_clientdata(client);626 627	rv = func(client, page, reg);628	if (rv >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK))629		rv = pmbus_check_status_cml(client);630	if (rv < 0 && (data->flags & PMBUS_READ_STATUS_AFTER_FAILED_CHECK))631		data->read_status(client, -1);632	if (reg < PMBUS_VIRT_BASE)633		pmbus_clear_fault_page(client, -1);634	return rv >= 0;635}636 637static bool pmbus_check_status_register(struct i2c_client *client, int page)638{639	int status;640	struct pmbus_data *data = i2c_get_clientdata(client);641 642	status = data->read_status(client, page);643	if (status >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK) &&644	    (status & PB_STATUS_CML)) {645		status = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML);646		if (status < 0 || (status & PB_CML_FAULT_INVALID_COMMAND))647			status = -EIO;648	}649 650	pmbus_clear_fault_page(client, -1);651	return status >= 0;652}653 654bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg)655{656	return pmbus_check_register(client, _pmbus_read_byte_data, page, reg);657}658EXPORT_SYMBOL_NS_GPL(pmbus_check_byte_register, PMBUS);659 660bool pmbus_check_word_register(struct i2c_client *client, int page, int reg)661{662	return pmbus_check_register(client, __pmbus_read_word_data, page, reg);663}664EXPORT_SYMBOL_NS_GPL(pmbus_check_word_register, PMBUS);665 666static bool __maybe_unused pmbus_check_block_register(struct i2c_client *client,667						      int page, int reg)668{669	int rv;670	struct pmbus_data *data = i2c_get_clientdata(client);671	char data_buf[I2C_SMBUS_BLOCK_MAX + 2];672 673	rv = pmbus_read_block_data(client, page, reg, data_buf);674	if (rv >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK))675		rv = pmbus_check_status_cml(client);676	if (rv < 0 && (data->flags & PMBUS_READ_STATUS_AFTER_FAILED_CHECK))677		data->read_status(client, -1);678	pmbus_clear_fault_page(client, -1);679	return rv >= 0;680}681 682const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client *client)683{684	struct pmbus_data *data = i2c_get_clientdata(client);685 686	return data->info;687}688EXPORT_SYMBOL_NS_GPL(pmbus_get_driver_info, PMBUS);689 690static int pmbus_get_status(struct i2c_client *client, int page, int reg)691{692	struct pmbus_data *data = i2c_get_clientdata(client);693	int status;694 695	switch (reg) {696	case PMBUS_STATUS_WORD:697		status = data->read_status(client, page);698		break;699	default:700		status = _pmbus_read_byte_data(client, page, reg);701		break;702	}703	if (status < 0)704		pmbus_clear_faults(client);705	return status;706}707 708static void pmbus_update_sensor_data(struct i2c_client *client, struct pmbus_sensor *sensor)709{710	if (sensor->data < 0 || sensor->update)711		sensor->data = _pmbus_read_word_data(client, sensor->page,712						     sensor->phase, sensor->reg);713}714 715/*716 * Convert ieee754 sensor values to milli- or micro-units717 * depending on sensor type.718 *719 * ieee754 data format:720 *	bit 15:		sign721 *	bit 10..14:	exponent722 *	bit 0..9:	mantissa723 * exponent=0:724 *	v=(−1)^signbit * 2^(−14) * 0.significantbits725 * exponent=1..30:726 *	v=(−1)^signbit * 2^(exponent - 15) * 1.significantbits727 * exponent=31:728 *	v=NaN729 *730 * Add the number mantissa bits into the calculations for simplicity.731 * To do that, add '10' to the exponent. By doing that, we can just add732 * 0x400 to normal values and get the expected result.733 */734static long pmbus_reg2data_ieee754(struct pmbus_data *data,735				   struct pmbus_sensor *sensor)736{737	int exponent;738	bool sign;739	long val;740 741	/* only support half precision for now */742	sign = sensor->data & 0x8000;743	exponent = (sensor->data >> 10) & 0x1f;744	val = sensor->data & 0x3ff;745 746	if (exponent == 0) {			/* subnormal */747		exponent = -(14 + 10);748	} else if (exponent ==  0x1f) {		/* NaN, convert to min/max */749		exponent = 0;750		val = 65504;751	} else {752		exponent -= (15 + 10);		/* normal */753		val |= 0x400;754	}755 756	/* scale result to milli-units for all sensors except fans */757	if (sensor->class != PSC_FAN)758		val = val * 1000L;759 760	/* scale result to micro-units for power sensors */761	if (sensor->class == PSC_POWER)762		val = val * 1000L;763 764	if (exponent >= 0)765		val <<= exponent;766	else767		val >>= -exponent;768 769	if (sign)770		val = -val;771 772	return val;773}774 775/*776 * Convert linear sensor values to milli- or micro-units777 * depending on sensor type.778 */779static s64 pmbus_reg2data_linear(struct pmbus_data *data,780				 struct pmbus_sensor *sensor)781{782	s16 exponent;783	s32 mantissa;784	s64 val;785 786	if (sensor->class == PSC_VOLTAGE_OUT) {	/* LINEAR16 */787		exponent = data->exponent[sensor->page];788		mantissa = (u16) sensor->data;789	} else {				/* LINEAR11 */790		exponent = ((s16)sensor->data) >> 11;791		mantissa = ((s16)((sensor->data & 0x7ff) << 5)) >> 5;792	}793 794	val = mantissa;795 796	/* scale result to milli-units for all sensors except fans */797	if (sensor->class != PSC_FAN)798		val = val * 1000LL;799 800	/* scale result to micro-units for power sensors */801	if (sensor->class == PSC_POWER)802		val = val * 1000LL;803 804	if (exponent >= 0)805		val <<= exponent;806	else807		val >>= -exponent;808 809	return val;810}811 812/*813 * Convert direct sensor values to milli- or micro-units814 * depending on sensor type.815 */816static s64 pmbus_reg2data_direct(struct pmbus_data *data,817				 struct pmbus_sensor *sensor)818{819	s64 b, val = (s16)sensor->data;820	s32 m, R;821 822	m = data->info->m[sensor->class];823	b = data->info->b[sensor->class];824	R = data->info->R[sensor->class];825 826	if (m == 0)827		return 0;828 829	/* X = 1/m * (Y * 10^-R - b) */830	R = -R;831	/* scale result to milli-units for everything but fans */832	if (!(sensor->class == PSC_FAN || sensor->class == PSC_PWM)) {833		R += 3;834		b *= 1000;835	}836 837	/* scale result to micro-units for power sensors */838	if (sensor->class == PSC_POWER) {839		R += 3;840		b *= 1000;841	}842 843	while (R > 0) {844		val *= 10;845		R--;846	}847	while (R < 0) {848		val = div_s64(val + 5LL, 10L);  /* round closest */849		R++;850	}851 852	val = div_s64(val - b, m);853	return val;854}855 856/*857 * Convert VID sensor values to milli- or micro-units858 * depending on sensor type.859 */860static s64 pmbus_reg2data_vid(struct pmbus_data *data,861			      struct pmbus_sensor *sensor)862{863	long val = sensor->data;864	long rv = 0;865 866	switch (data->info->vrm_version[sensor->page]) {867	case vr11:868		if (val >= 0x02 && val <= 0xb2)869			rv = DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100);870		break;871	case vr12:872		if (val >= 0x01)873			rv = 250 + (val - 1) * 5;874		break;875	case vr13:876		if (val >= 0x01)877			rv = 500 + (val - 1) * 10;878		break;879	case imvp9:880		if (val >= 0x01)881			rv = 200 + (val - 1) * 10;882		break;883	case amd625mv:884		if (val >= 0x0 && val <= 0xd8)885			rv = DIV_ROUND_CLOSEST(155000 - val * 625, 100);886		break;887	}888	return rv;889}890 891static s64 pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor)892{893	s64 val;894 895	if (!sensor->convert)896		return sensor->data;897 898	switch (data->info->format[sensor->class]) {899	case direct:900		val = pmbus_reg2data_direct(data, sensor);901		break;902	case vid:903		val = pmbus_reg2data_vid(data, sensor);904		break;905	case ieee754:906		val = pmbus_reg2data_ieee754(data, sensor);907		break;908	case linear:909	default:910		val = pmbus_reg2data_linear(data, sensor);911		break;912	}913	return val;914}915 916#define MAX_IEEE_MANTISSA	(0x7ff * 1000)917#define MIN_IEEE_MANTISSA	(0x400 * 1000)918 919static u16 pmbus_data2reg_ieee754(struct pmbus_data *data,920				  struct pmbus_sensor *sensor, long val)921{922	u16 exponent = (15 + 10);923	long mantissa;924	u16 sign = 0;925 926	/* simple case */927	if (val == 0)928		return 0;929 930	if (val < 0) {931		sign = 0x8000;932		val = -val;933	}934 935	/* Power is in uW. Convert to mW before converting. */936	if (sensor->class == PSC_POWER)937		val = DIV_ROUND_CLOSEST(val, 1000L);938 939	/*940	 * For simplicity, convert fan data to milli-units941	 * before calculating the exponent.942	 */943	if (sensor->class == PSC_FAN)944		val = val * 1000;945 946	/* Reduce large mantissa until it fits into 10 bit */947	while (val > MAX_IEEE_MANTISSA && exponent < 30) {948		exponent++;949		val >>= 1;950	}951	/*952	 * Increase small mantissa to generate valid 'normal'953	 * number954	 */955	while (val < MIN_IEEE_MANTISSA && exponent > 1) {956		exponent--;957		val <<= 1;958	}959 960	/* Convert mantissa from milli-units to units */961	mantissa = DIV_ROUND_CLOSEST(val, 1000);962 963	/*964	 * Ensure that the resulting number is within range.965	 * Valid range is 0x400..0x7ff, where bit 10 reflects966	 * the implied high bit in normalized ieee754 numbers.967	 * Set the range to 0x400..0x7ff to reflect this.968	 * The upper bit is then removed by the mask against969	 * 0x3ff in the final assignment.970	 */971	if (mantissa > 0x7ff)972		mantissa = 0x7ff;973	else if (mantissa < 0x400)974		mantissa = 0x400;975 976	/* Convert to sign, 5 bit exponent, 10 bit mantissa */977	return sign | (mantissa & 0x3ff) | ((exponent << 10) & 0x7c00);978}979 980#define MAX_LIN_MANTISSA	(1023 * 1000)981#define MIN_LIN_MANTISSA	(511 * 1000)982 983static u16 pmbus_data2reg_linear(struct pmbus_data *data,984				 struct pmbus_sensor *sensor, s64 val)985{986	s16 exponent = 0, mantissa;987	bool negative = false;988 989	/* simple case */990	if (val == 0)991		return 0;992 993	if (sensor->class == PSC_VOLTAGE_OUT) {994		/* LINEAR16 does not support negative voltages */995		if (val < 0)996			return 0;997 998		/*999		 * For a static exponents, we don't have a choice1000		 * but to adjust the value to it.1001		 */1002		if (data->exponent[sensor->page] < 0)1003			val <<= -data->exponent[sensor->page];1004		else1005			val >>= data->exponent[sensor->page];1006		val = DIV_ROUND_CLOSEST_ULL(val, 1000);1007		return clamp_val(val, 0, 0xffff);1008	}1009 1010	if (val < 0) {1011		negative = true;1012		val = -val;1013	}1014 1015	/* Power is in uW. Convert to mW before converting. */1016	if (sensor->class == PSC_POWER)1017		val = DIV_ROUND_CLOSEST_ULL(val, 1000);1018 1019	/*1020	 * For simplicity, convert fan data to milli-units1021	 * before calculating the exponent.1022	 */1023	if (sensor->class == PSC_FAN)1024		val = val * 1000LL;1025 1026	/* Reduce large mantissa until it fits into 10 bit */1027	while (val >= MAX_LIN_MANTISSA && exponent < 15) {1028		exponent++;1029		val >>= 1;1030	}1031	/* Increase small mantissa to improve precision */1032	while (val < MIN_LIN_MANTISSA && exponent > -15) {1033		exponent--;1034		val <<= 1;1035	}1036 1037	/* Convert mantissa from milli-units to units */1038	mantissa = clamp_val(DIV_ROUND_CLOSEST_ULL(val, 1000), 0, 0x3ff);1039 1040	/* restore sign */1041	if (negative)1042		mantissa = -mantissa;1043 1044	/* Convert to 5 bit exponent, 11 bit mantissa */1045	return (mantissa & 0x7ff) | ((exponent << 11) & 0xf800);1046}1047 1048static u16 pmbus_data2reg_direct(struct pmbus_data *data,1049				 struct pmbus_sensor *sensor, s64 val)1050{1051	s64 b;1052	s32 m, R;1053 1054	m = data->info->m[sensor->class];1055	b = data->info->b[sensor->class];1056	R = data->info->R[sensor->class];1057 1058	/* Power is in uW. Adjust R and b. */1059	if (sensor->class == PSC_POWER) {1060		R -= 3;1061		b *= 1000;1062	}1063 1064	/* Calculate Y = (m * X + b) * 10^R */1065	if (!(sensor->class == PSC_FAN || sensor->class == PSC_PWM)) {1066		R -= 3;		/* Adjust R and b for data in milli-units */1067		b *= 1000;1068	}1069	val = val * m + b;1070 1071	while (R > 0) {1072		val *= 10;1073		R--;1074	}1075	while (R < 0) {1076		val = div_s64(val + 5LL, 10L);  /* round closest */1077		R++;1078	}1079 1080	return (u16)clamp_val(val, S16_MIN, S16_MAX);1081}1082 1083static u16 pmbus_data2reg_vid(struct pmbus_data *data,1084			      struct pmbus_sensor *sensor, s64 val)1085{1086	val = clamp_val(val, 500, 1600);1087 1088	return 2 + DIV_ROUND_CLOSEST_ULL((1600LL - val) * 100LL, 625);1089}1090 1091static u16 pmbus_data2reg(struct pmbus_data *data,1092			  struct pmbus_sensor *sensor, s64 val)1093{1094	u16 regval;1095 1096	if (!sensor->convert)1097		return val;1098 1099	switch (data->info->format[sensor->class]) {1100	case direct:1101		regval = pmbus_data2reg_direct(data, sensor, val);1102		break;1103	case vid:1104		regval = pmbus_data2reg_vid(data, sensor, val);1105		break;1106	case ieee754:1107		regval = pmbus_data2reg_ieee754(data, sensor, val);1108		break;1109	case linear:1110	default:1111		regval = pmbus_data2reg_linear(data, sensor, val);1112		break;1113	}1114	return regval;1115}1116 1117/*1118 * Return boolean calculated from converted data.1119 * <index> defines a status register index and mask.1120 * The mask is in the lower 8 bits, the register index is in bits 8..23.1121 *1122 * The associated pmbus_boolean structure contains optional pointers to two1123 * sensor attributes. If specified, those attributes are compared against each1124 * other to determine if a limit has been exceeded.1125 *1126 * If the sensor attribute pointers are NULL, the function returns true if1127 * (status[reg] & mask) is true.1128 *1129 * If sensor attribute pointers are provided, a comparison against a specified1130 * limit has to be performed to determine the boolean result.1131 * In this case, the function returns true if v1 >= v2 (where v1 and v2 are1132 * sensor values referenced by sensor attribute pointers s1 and s2).1133 *1134 * To determine if an object exceeds upper limits, specify <s1,s2> = <v,limit>.1135 * To determine if an object exceeds lower limits, specify <s1,s2> = <limit,v>.1136 *1137 * If a negative value is stored in any of the referenced registers, this value1138 * reflects an error code which will be returned.1139 */1140static int pmbus_get_boolean(struct i2c_client *client, struct pmbus_boolean *b,1141			     int index)1142{1143	struct pmbus_data *data = i2c_get_clientdata(client);1144	struct pmbus_sensor *s1 = b->s1;1145	struct pmbus_sensor *s2 = b->s2;1146	u16 mask = pb_index_to_mask(index);1147	u8 page = pb_index_to_page(index);1148	u16 reg = pb_index_to_reg(index);1149	int ret, status;1150	u16 regval;1151 1152	mutex_lock(&data->update_lock);1153	status = pmbus_get_status(client, page, reg);1154	if (status < 0) {1155		ret = status;1156		goto unlock;1157	}1158 1159	if (s1)1160		pmbus_update_sensor_data(client, s1);1161	if (s2)1162		pmbus_update_sensor_data(client, s2);1163 1164	regval = status & mask;1165	if (regval) {1166		if (data->revision >= PMBUS_REV_12) {1167			ret = _pmbus_write_byte_data(client, page, reg, regval);1168			if (ret)1169				goto unlock;1170		} else {1171			pmbus_clear_fault_page(client, page);1172		}1173 1174	}1175	if (s1 && s2) {1176		s64 v1, v2;1177 1178		if (s1->data < 0) {1179			ret = s1->data;1180			goto unlock;1181		}1182		if (s2->data < 0) {1183			ret = s2->data;1184			goto unlock;1185		}1186 1187		v1 = pmbus_reg2data(data, s1);1188		v2 = pmbus_reg2data(data, s2);1189		ret = !!(regval && v1 >= v2);1190	} else {1191		ret = !!regval;1192	}1193unlock:1194	mutex_unlock(&data->update_lock);1195	return ret;1196}1197 1198static ssize_t pmbus_show_boolean(struct device *dev,1199				  struct device_attribute *da, char *buf)1200{1201	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);1202	struct pmbus_boolean *boolean = to_pmbus_boolean(attr);1203	struct i2c_client *client = to_i2c_client(dev->parent);1204	int val;1205 1206	val = pmbus_get_boolean(client, boolean, attr->index);1207	if (val < 0)1208		return val;1209	return sysfs_emit(buf, "%d\n", val);1210}1211 1212static ssize_t pmbus_show_sensor(struct device *dev,1213				 struct device_attribute *devattr, char *buf)1214{1215	struct i2c_client *client = to_i2c_client(dev->parent);1216	struct pmbus_sensor *sensor = to_pmbus_sensor(devattr);1217	struct pmbus_data *data = i2c_get_clientdata(client);1218	ssize_t ret;1219 1220	mutex_lock(&data->update_lock);1221	pmbus_update_sensor_data(client, sensor);1222	if (sensor->data < 0)1223		ret = sensor->data;1224	else1225		ret = sysfs_emit(buf, "%lld\n", pmbus_reg2data(data, sensor));1226	mutex_unlock(&data->update_lock);1227	return ret;1228}1229 1230static ssize_t pmbus_set_sensor(struct device *dev,1231				struct device_attribute *devattr,1232				const char *buf, size_t count)1233{1234	struct i2c_client *client = to_i2c_client(dev->parent);1235	struct pmbus_data *data = i2c_get_clientdata(client);1236	struct pmbus_sensor *sensor = to_pmbus_sensor(devattr);1237	ssize_t rv = count;1238	s64 val;1239	int ret;1240	u16 regval;1241 1242	if (kstrtos64(buf, 10, &val) < 0)1243		return -EINVAL;1244 1245	mutex_lock(&data->update_lock);1246	regval = pmbus_data2reg(data, sensor, val);1247	ret = _pmbus_write_word_data(client, sensor->page, sensor->reg, regval);1248	if (ret < 0)1249		rv = ret;1250	else1251		sensor->data = -ENODATA;1252	mutex_unlock(&data->update_lock);1253	return rv;1254}1255 1256static ssize_t pmbus_show_label(struct device *dev,1257				struct device_attribute *da, char *buf)1258{1259	struct pmbus_label *label = to_pmbus_label(da);1260 1261	return sysfs_emit(buf, "%s\n", label->label);1262}1263 1264static int pmbus_add_attribute(struct pmbus_data *data, struct attribute *attr)1265{1266	if (data->num_attributes >= data->max_attributes - 1) {1267		int new_max_attrs = data->max_attributes + PMBUS_ATTR_ALLOC_SIZE;1268		void *new_attrs = devm_krealloc_array(data->dev, data->group.attrs,1269						      new_max_attrs, sizeof(void *),1270						      GFP_KERNEL);1271		if (!new_attrs)1272			return -ENOMEM;1273		data->group.attrs = new_attrs;1274		data->max_attributes = new_max_attrs;1275	}1276 1277	data->group.attrs[data->num_attributes++] = attr;1278	data->group.attrs[data->num_attributes] = NULL;1279	return 0;1280}1281 1282static void pmbus_dev_attr_init(struct device_attribute *dev_attr,1283				const char *name,1284				umode_t mode,1285				ssize_t (*show)(struct device *dev,1286						struct device_attribute *attr,1287						char *buf),1288				ssize_t (*store)(struct device *dev,1289						 struct device_attribute *attr,1290						 const char *buf, size_t count))1291{1292	sysfs_attr_init(&dev_attr->attr);1293	dev_attr->attr.name = name;1294	dev_attr->attr.mode = mode;1295	dev_attr->show = show;1296	dev_attr->store = store;1297}1298 1299static void pmbus_attr_init(struct sensor_device_attribute *a,1300			    const char *name,1301			    umode_t mode,1302			    ssize_t (*show)(struct device *dev,1303					    struct device_attribute *attr,1304					    char *buf),1305			    ssize_t (*store)(struct device *dev,1306					     struct device_attribute *attr,1307					     const char *buf, size_t count),1308			    int idx)1309{1310	pmbus_dev_attr_init(&a->dev_attr, name, mode, show, store);1311	a->index = idx;1312}1313 1314static int pmbus_add_boolean(struct pmbus_data *data,1315			     const char *name, const char *type, int seq,1316			     struct pmbus_sensor *s1,1317			     struct pmbus_sensor *s2,1318			     u8 page, u16 reg, u16 mask)1319{1320	struct pmbus_boolean *boolean;1321	struct sensor_device_attribute *a;1322 1323	if (WARN((s1 && !s2) || (!s1 && s2), "Bad s1/s2 parameters\n"))1324		return -EINVAL;1325 1326	boolean = devm_kzalloc(data->dev, sizeof(*boolean), GFP_KERNEL);1327	if (!boolean)1328		return -ENOMEM;1329 1330	a = &boolean->attribute;1331 1332	snprintf(boolean->name, sizeof(boolean->name), "%s%d_%s",1333		 name, seq, type);1334	boolean->s1 = s1;1335	boolean->s2 = s2;1336	pmbus_attr_init(a, boolean->name, 0444, pmbus_show_boolean, NULL,1337			pb_reg_to_index(page, reg, mask));1338 1339	return pmbus_add_attribute(data, &a->dev_attr.attr);1340}1341 1342/* of thermal for pmbus temperature sensors */1343struct pmbus_thermal_data {1344	struct pmbus_data *pmbus_data;1345	struct pmbus_sensor *sensor;1346};1347 1348static int pmbus_thermal_get_temp(struct thermal_zone_device *tz, int *temp)1349{1350	struct pmbus_thermal_data *tdata = thermal_zone_device_priv(tz);1351	struct pmbus_sensor *sensor = tdata->sensor;1352	struct pmbus_data *pmbus_data = tdata->pmbus_data;1353	struct i2c_client *client = to_i2c_client(pmbus_data->dev);1354	struct device *dev = pmbus_data->hwmon_dev;1355	int ret = 0;1356 1357	if (!dev) {1358		/* May not even get to hwmon yet */1359		*temp = 0;1360		return 0;1361	}1362 1363	mutex_lock(&pmbus_data->update_lock);1364	pmbus_update_sensor_data(client, sensor);1365	if (sensor->data < 0)1366		ret = sensor->data;1367	else1368		*temp = (int)pmbus_reg2data(pmbus_data, sensor);1369	mutex_unlock(&pmbus_data->update_lock);1370 1371	return ret;1372}1373 1374static const struct thermal_zone_device_ops pmbus_thermal_ops = {1375	.get_temp = pmbus_thermal_get_temp,1376};1377 1378static int pmbus_thermal_add_sensor(struct pmbus_data *pmbus_data,1379				    struct pmbus_sensor *sensor, int index)1380{1381	struct device *dev = pmbus_data->dev;1382	struct pmbus_thermal_data *tdata;1383	struct thermal_zone_device *tzd;1384 1385	tdata = devm_kzalloc(dev, sizeof(*tdata), GFP_KERNEL);1386	if (!tdata)1387		return -ENOMEM;1388 1389	tdata->sensor = sensor;1390	tdata->pmbus_data = pmbus_data;1391 1392	tzd = devm_thermal_of_zone_register(dev, index, tdata,1393					    &pmbus_thermal_ops);1394	/*1395	 * If CONFIG_THERMAL_OF is disabled, this returns -ENODEV,1396	 * so ignore that error but forward any other error.1397	 */1398	if (IS_ERR(tzd) && (PTR_ERR(tzd) != -ENODEV))1399		return PTR_ERR(tzd);1400 1401	return 0;1402}1403 1404static struct pmbus_sensor *pmbus_add_sensor(struct pmbus_data *data,1405					     const char *name, const char *type,1406					     int seq, int page, int phase,1407					     int reg,1408					     enum pmbus_sensor_classes class,1409					     bool update, bool readonly,1410					     bool convert)1411{1412	struct pmbus_sensor *sensor;1413	struct device_attribute *a;1414 1415	sensor = devm_kzalloc(data->dev, sizeof(*sensor), GFP_KERNEL);1416	if (!sensor)1417		return NULL;1418	a = &sensor->attribute;1419 1420	if (type)1421		snprintf(sensor->name, sizeof(sensor->name), "%s%d_%s",1422			 name, seq, type);1423	else1424		snprintf(sensor->name, sizeof(sensor->name), "%s%d",1425			 name, seq);1426 1427	if (data->flags & PMBUS_WRITE_PROTECTED)1428		readonly = true;1429 1430	sensor->page = page;1431	sensor->phase = phase;1432	sensor->reg = reg;1433	sensor->class = class;1434	sensor->update = update;1435	sensor->convert = convert;1436	sensor->data = -ENODATA;1437	pmbus_dev_attr_init(a, sensor->name,1438			    readonly ? 0444 : 0644,1439			    pmbus_show_sensor, pmbus_set_sensor);1440 1441	if (pmbus_add_attribute(data, &a->attr))1442		return NULL;1443 1444	sensor->next = data->sensors;1445	data->sensors = sensor;1446 1447	/* temperature sensors with _input values are registered with thermal */1448	if (class == PSC_TEMPERATURE && strcmp(type, "input") == 0)1449		pmbus_thermal_add_sensor(data, sensor, seq);1450 1451	return sensor;1452}1453 1454static int pmbus_add_label(struct pmbus_data *data,1455			   const char *name, int seq,1456			   const char *lstring, int index, int phase)1457{1458	struct pmbus_label *label;1459	struct device_attribute *a;1460 1461	label = devm_kzalloc(data->dev, sizeof(*label), GFP_KERNEL);1462	if (!label)1463		return -ENOMEM;1464 1465	a = &label->attribute;1466 1467	snprintf(label->name, sizeof(label->name), "%s%d_label", name, seq);1468	if (!index) {1469		if (phase == 0xff)1470			strncpy(label->label, lstring,1471				sizeof(label->label) - 1);1472		else1473			snprintf(label->label, sizeof(label->label), "%s.%d",1474				 lstring, phase);1475	} else {1476		if (phase == 0xff)1477			snprintf(label->label, sizeof(label->label), "%s%d",1478				 lstring, index);1479		else1480			snprintf(label->label, sizeof(label->label), "%s%d.%d",1481				 lstring, index, phase);1482	}1483 1484	pmbus_dev_attr_init(a, label->name, 0444, pmbus_show_label, NULL);1485	return pmbus_add_attribute(data, &a->attr);1486}1487 1488/*1489 * Search for attributes. Allocate sensors, booleans, and labels as needed.1490 */1491 1492/*1493 * The pmbus_limit_attr structure describes a single limit attribute1494 * and its associated alarm attribute.1495 */1496struct pmbus_limit_attr {1497	u16 reg;		/* Limit register */1498	u16 sbit;		/* Alarm attribute status bit */1499	bool update;		/* True if register needs updates */1500	bool low;		/* True if low limit; for limits with compare1501				   functions only */1502	const char *attr;	/* Attribute name */1503	const char *alarm;	/* Alarm attribute name */1504};1505 1506/*1507 * The pmbus_sensor_attr structure describes one sensor attribute. This1508 * description includes a reference to the associated limit attributes.1509 */1510struct pmbus_sensor_attr {1511	u16 reg;			/* sensor register */1512	u16 gbit;			/* generic status bit */1513	u8 nlimit;			/* # of limit registers */1514	enum pmbus_sensor_classes class;/* sensor class */1515	const char *label;		/* sensor label */1516	bool paged;			/* true if paged sensor */1517	bool update;			/* true if update needed */1518	bool compare;			/* true if compare function needed */1519	u32 func;			/* sensor mask */1520	u32 sfunc;			/* sensor status mask */1521	int sreg;			/* status register */1522	const struct pmbus_limit_attr *limit;/* limit registers */1523};1524 1525/*1526 * Add a set of limit attributes and, if supported, the associated1527 * alarm attributes.1528 * returns 0 if no alarm register found, 1 if an alarm register was found,1529 * < 0 on errors.1530 */1531static int pmbus_add_limit_attrs(struct i2c_client *client,1532				 struct pmbus_data *data,1533				 const struct pmbus_driver_info *info,1534				 const char *name, int index, int page,1535				 struct pmbus_sensor *base,1536				 const struct pmbus_sensor_attr *attr)1537{1538	const struct pmbus_limit_attr *l = attr->limit;1539	int nlimit = attr->nlimit;1540	int have_alarm = 0;1541	int i, ret;1542	struct pmbus_sensor *curr;1543 1544	for (i = 0; i < nlimit; i++) {1545		if (pmbus_check_word_register(client, page, l->reg)) {1546			curr = pmbus_add_sensor(data, name, l->attr, index,1547						page, 0xff, l->reg, attr->class,1548						attr->update || l->update,1549						false, true);1550			if (!curr)1551				return -ENOMEM;1552			if (l->sbit && (info->func[page] & attr->sfunc)) {1553				ret = pmbus_add_boolean(data, name,1554					l->alarm, index,1555					attr->compare ?  l->low ? curr : base1556						      : NULL,1557					attr->compare ? l->low ? base : curr1558						      : NULL,1559					page, attr->sreg, l->sbit);1560				if (ret)1561					return ret;1562				have_alarm = 1;1563			}1564		}1565		l++;1566	}1567	return have_alarm;1568}1569 1570static int pmbus_add_sensor_attrs_one(struct i2c_client *client,1571				      struct pmbus_data *data,1572				      const struct pmbus_driver_info *info,1573				      const char *name,1574				      int index, int page, int phase,1575				      const struct pmbus_sensor_attr *attr,1576				      bool paged)1577{1578	struct pmbus_sensor *base;1579	bool upper = !!(attr->gbit & 0xff00);	/* need to check STATUS_WORD */1580	int ret;1581 1582	if (attr->label) {1583		ret = pmbus_add_label(data, name, index, attr->label,1584				      paged ? page + 1 : 0, phase);1585		if (ret)1586			return ret;1587	}1588	base = pmbus_add_sensor(data, name, "input", index, page, phase,1589				attr->reg, attr->class, true, true, true);1590	if (!base)1591		return -ENOMEM;1592	/* No limit and alarm attributes for phase specific sensors */1593	if (attr->sfunc && phase == 0xff) {1594		ret = pmbus_add_limit_attrs(client, data, info, name,1595					    index, page, base, attr);1596		if (ret < 0)1597			return ret;1598		/*1599		 * Add generic alarm attribute only if there are no individual1600		 * alarm attributes, if there is a global alarm bit, and if1601		 * the generic status register (word or byte, depending on1602		 * which global bit is set) for this page is accessible.1603		 */1604		if (!ret && attr->gbit &&1605		    (!upper || data->has_status_word) &&1606		    pmbus_check_status_register(client, page)) {1607			ret = pmbus_add_boolean(data, name, "alarm", index,1608						NULL, NULL,1609						page, PMBUS_STATUS_WORD,1610						attr->gbit);1611			if (ret)1612				return ret;1613		}1614	}1615	return 0;1616}1617 1618static bool pmbus_sensor_is_paged(const struct pmbus_driver_info *info,1619				  const struct pmbus_sensor_attr *attr)1620{1621	int p;1622 1623	if (attr->paged)1624		return true;1625 1626	/*1627	 * Some attributes may be present on more than one page despite1628	 * not being marked with the paged attribute. If that is the case,1629	 * then treat the sensor as being paged and add the page suffix to the1630	 * attribute name.1631	 * We don't just add the paged attribute to all such attributes, in1632	 * order to maintain the un-suffixed labels in the case where the1633	 * attribute is only on page 0.1634	 */1635	for (p = 1; p < info->pages; p++) {1636		if (info->func[p] & attr->func)1637			return true;1638	}1639	return false;1640}1641 1642static int pmbus_add_sensor_attrs(struct i2c_client *client,1643				  struct pmbus_data *data,1644				  const char *name,1645				  const struct pmbus_sensor_attr *attrs,1646				  int nattrs)1647{1648	const struct pmbus_driver_info *info = data->info;1649	int index, i;1650	int ret;1651 1652	index = 1;1653	for (i = 0; i < nattrs; i++) {1654		int page, pages;1655		bool paged = pmbus_sensor_is_paged(info, attrs);1656 1657		pages = paged ? info->pages : 1;1658		for (page = 0; page < pages; page++) {1659			if (info->func[page] & attrs->func) {1660				ret = pmbus_add_sensor_attrs_one(client, data, info,1661								 name, index, page,1662								 0xff, attrs, paged);1663				if (ret)1664					return ret;1665				index++;1666			}1667			if (info->phases[page]) {1668				int phase;1669 1670				for (phase = 0; phase < info->phases[page];1671				     phase++) {1672					if (!(info->pfunc[phase] & attrs->func))1673						continue;1674					ret = pmbus_add_sensor_attrs_one(client,1675						data, info, name, index, page,1676						phase, attrs, paged);1677					if (ret)1678						return ret;1679					index++;1680				}1681			}1682		}1683		attrs++;1684	}1685	return 0;1686}1687 1688static const struct pmbus_limit_attr vin_limit_attrs[] = {1689	{1690		.reg = PMBUS_VIN_UV_WARN_LIMIT,1691		.attr = "min",1692		.alarm = "min_alarm",1693		.sbit = PB_VOLTAGE_UV_WARNING,1694	}, {1695		.reg = PMBUS_VIN_UV_FAULT_LIMIT,1696		.attr = "lcrit",1697		.alarm = "lcrit_alarm",1698		.sbit = PB_VOLTAGE_UV_FAULT | PB_VOLTAGE_VIN_OFF,1699	}, {1700		.reg = PMBUS_VIN_OV_WARN_LIMIT,1701		.attr = "max",1702		.alarm = "max_alarm",1703		.sbit = PB_VOLTAGE_OV_WARNING,1704	}, {1705		.reg = PMBUS_VIN_OV_FAULT_LIMIT,1706		.attr = "crit",1707		.alarm = "crit_alarm",1708		.sbit = PB_VOLTAGE_OV_FAULT,1709	}, {1710		.reg = PMBUS_VIRT_READ_VIN_AVG,1711		.update = true,1712		.attr = "average",1713	}, {1714		.reg = PMBUS_VIRT_READ_VIN_MIN,1715		.update = true,1716		.attr = "lowest",1717	}, {1718		.reg = PMBUS_VIRT_READ_VIN_MAX,1719		.update = true,1720		.attr = "highest",1721	}, {1722		.reg = PMBUS_VIRT_RESET_VIN_HISTORY,1723		.attr = "reset_history",1724	}, {1725		.reg = PMBUS_MFR_VIN_MIN,1726		.attr = "rated_min",1727	}, {1728		.reg = PMBUS_MFR_VIN_MAX,1729		.attr = "rated_max",1730	},1731};1732 1733static const struct pmbus_limit_attr vmon_limit_attrs[] = {1734	{1735		.reg = PMBUS_VIRT_VMON_UV_WARN_LIMIT,1736		.attr = "min",1737		.alarm = "min_alarm",1738		.sbit = PB_VOLTAGE_UV_WARNING,1739	}, {1740		.reg = PMBUS_VIRT_VMON_UV_FAULT_LIMIT,1741		.attr = "lcrit",1742		.alarm = "lcrit_alarm",1743		.sbit = PB_VOLTAGE_UV_FAULT,1744	}, {1745		.reg = PMBUS_VIRT_VMON_OV_WARN_LIMIT,1746		.attr = "max",1747		.alarm = "max_alarm",1748		.sbit = PB_VOLTAGE_OV_WARNING,1749	}, {1750		.reg = PMBUS_VIRT_VMON_OV_FAULT_LIMIT,1751		.attr = "crit",1752		.alarm = "crit_alarm",1753		.sbit = PB_VOLTAGE_OV_FAULT,1754	}1755};1756 1757static const struct pmbus_limit_attr vout_limit_attrs[] = {1758	{1759		.reg = PMBUS_VOUT_UV_WARN_LIMIT,1760		.attr = "min",1761		.alarm = "min_alarm",1762		.sbit = PB_VOLTAGE_UV_WARNING,1763	}, {1764		.reg = PMBUS_VOUT_UV_FAULT_LIMIT,1765		.attr = "lcrit",1766		.alarm = "lcrit_alarm",1767		.sbit = PB_VOLTAGE_UV_FAULT,1768	}, {1769		.reg = PMBUS_VOUT_OV_WARN_LIMIT,1770		.attr = "max",1771		.alarm = "max_alarm",1772		.sbit = PB_VOLTAGE_OV_WARNING,1773	}, {1774		.reg = PMBUS_VOUT_OV_FAULT_LIMIT,1775		.attr = "crit",1776		.alarm = "crit_alarm",1777		.sbit = PB_VOLTAGE_OV_FAULT,1778	}, {1779		.reg = PMBUS_VIRT_READ_VOUT_AVG,1780		.update = true,1781		.attr = "average",1782	}, {1783		.reg = PMBUS_VIRT_READ_VOUT_MIN,1784		.update = true,1785		.attr = "lowest",1786	}, {1787		.reg = PMBUS_VIRT_READ_VOUT_MAX,1788		.update = true,1789		.attr = "highest",1790	}, {1791		.reg = PMBUS_VIRT_RESET_VOUT_HISTORY,1792		.attr = "reset_history",1793	}, {1794		.reg = PMBUS_MFR_VOUT_MIN,1795		.attr = "rated_min",1796	}, {1797		.reg = PMBUS_MFR_VOUT_MAX,1798		.attr = "rated_max",1799	},1800};1801 1802static const struct pmbus_sensor_attr voltage_attributes[] = {1803	{1804		.reg = PMBUS_READ_VIN,1805		.class = PSC_VOLTAGE_IN,1806		.label = "vin",1807		.func = PMBUS_HAVE_VIN,1808		.sfunc = PMBUS_HAVE_STATUS_INPUT,1809		.sreg = PMBUS_STATUS_INPUT,1810		.gbit = PB_STATUS_VIN_UV,1811		.limit = vin_limit_attrs,1812		.nlimit = ARRAY_SIZE(vin_limit_attrs),1813	}, {1814		.reg = PMBUS_VIRT_READ_VMON,1815		.class = PSC_VOLTAGE_IN,1816		.label = "vmon",1817		.func = PMBUS_HAVE_VMON,1818		.sfunc = PMBUS_HAVE_STATUS_VMON,1819		.sreg = PMBUS_VIRT_STATUS_VMON,1820		.limit = vmon_limit_attrs,1821		.nlimit = ARRAY_SIZE(vmon_limit_attrs),1822	}, {1823		.reg = PMBUS_READ_VCAP,1824		.class = PSC_VOLTAGE_IN,1825		.label = "vcap",1826		.func = PMBUS_HAVE_VCAP,1827	}, {1828		.reg = PMBUS_READ_VOUT,1829		.class = PSC_VOLTAGE_OUT,1830		.label = "vout",1831		.paged = true,1832		.func = PMBUS_HAVE_VOUT,1833		.sfunc = PMBUS_HAVE_STATUS_VOUT,1834		.sreg = PMBUS_STATUS_VOUT,1835		.gbit = PB_STATUS_VOUT_OV,1836		.limit = vout_limit_attrs,1837		.nlimit = ARRAY_SIZE(vout_limit_attrs),1838	}1839};1840 1841/* Current attributes */1842 1843static const struct pmbus_limit_attr iin_limit_attrs[] = {1844	{1845		.reg = PMBUS_IIN_OC_WARN_LIMIT,1846		.attr = "max",1847		.alarm = "max_alarm",1848		.sbit = PB_IIN_OC_WARNING,1849	}, {1850		.reg = PMBUS_IIN_OC_FAULT_LIMIT,1851		.attr = "crit",1852		.alarm = "crit_alarm",1853		.sbit = PB_IIN_OC_FAULT,1854	}, {1855		.reg = PMBUS_VIRT_READ_IIN_AVG,1856		.update = true,1857		.attr = "average",1858	}, {1859		.reg = PMBUS_VIRT_READ_IIN_MIN,1860		.update = true,1861		.attr = "lowest",1862	}, {1863		.reg = PMBUS_VIRT_READ_IIN_MAX,1864		.update = true,1865		.attr = "highest",1866	}, {1867		.reg = PMBUS_VIRT_RESET_IIN_HISTORY,1868		.attr = "reset_history",1869	}, {1870		.reg = PMBUS_MFR_IIN_MAX,1871		.attr = "rated_max",1872	},1873};1874 1875static const struct pmbus_limit_attr iout_limit_attrs[] = {1876	{1877		.reg = PMBUS_IOUT_OC_WARN_LIMIT,1878		.attr = "max",1879		.alarm = "max_alarm",1880		.sbit = PB_IOUT_OC_WARNING,1881	}, {1882		.reg = PMBUS_IOUT_UC_FAULT_LIMIT,1883		.attr = "lcrit",1884		.alarm = "lcrit_alarm",1885		.sbit = PB_IOUT_UC_FAULT,1886	}, {1887		.reg = PMBUS_IOUT_OC_FAULT_LIMIT,1888		.attr = "crit",1889		.alarm = "crit_alarm",1890		.sbit = PB_IOUT_OC_FAULT,1891	}, {1892		.reg = PMBUS_VIRT_READ_IOUT_AVG,1893		.update = true,1894		.attr = "average",1895	}, {1896		.reg = PMBUS_VIRT_READ_IOUT_MIN,1897		.update = true,1898		.attr = "lowest",1899	}, {1900		.reg = PMBUS_VIRT_READ_IOUT_MAX,1901		.update = true,1902		.attr = "highest",1903	}, {1904		.reg = PMBUS_VIRT_RESET_IOUT_HISTORY,1905		.attr = "reset_history",1906	}, {1907		.reg = PMBUS_MFR_IOUT_MAX,1908		.attr = "rated_max",1909	},1910};1911 1912static const struct pmbus_sensor_attr current_attributes[] = {1913	{1914		.reg = PMBUS_READ_IIN,1915		.class = PSC_CURRENT_IN,1916		.label = "iin",1917		.func = PMBUS_HAVE_IIN,1918		.sfunc = PMBUS_HAVE_STATUS_INPUT,1919		.sreg = PMBUS_STATUS_INPUT,1920		.gbit = PB_STATUS_INPUT,1921		.limit = iin_limit_attrs,1922		.nlimit = ARRAY_SIZE(iin_limit_attrs),1923	}, {1924		.reg = PMBUS_READ_IOUT,1925		.class = PSC_CURRENT_OUT,1926		.label = "iout",1927		.paged = true,1928		.func = PMBUS_HAVE_IOUT,1929		.sfunc = PMBUS_HAVE_STATUS_IOUT,1930		.sreg = PMBUS_STATUS_IOUT,1931		.gbit = PB_STATUS_IOUT_OC,1932		.limit = iout_limit_attrs,1933		.nlimit = ARRAY_SIZE(iout_limit_attrs),1934	}1935};1936 1937/* Power attributes */1938 1939static const struct pmbus_limit_attr pin_limit_attrs[] = {1940	{1941		.reg = PMBUS_PIN_OP_WARN_LIMIT,1942		.attr = "max",1943		.alarm = "alarm",1944		.sbit = PB_PIN_OP_WARNING,1945	}, {1946		.reg = PMBUS_VIRT_READ_PIN_AVG,1947		.update = true,1948		.attr = "average",1949	}, {1950		.reg = PMBUS_VIRT_READ_PIN_MIN,1951		.update = true,1952		.attr = "input_lowest",1953	}, {1954		.reg = PMBUS_VIRT_READ_PIN_MAX,1955		.update = true,1956		.attr = "input_highest",1957	}, {1958		.reg = PMBUS_VIRT_RESET_PIN_HISTORY,1959		.attr = "reset_history",1960	}, {1961		.reg = PMBUS_MFR_PIN_MAX,1962		.attr = "rated_max",1963	},1964};1965 1966static const struct pmbus_limit_attr pout_limit_attrs[] = {1967	{1968		.reg = PMBUS_POUT_MAX,1969		.attr = "cap",1970		.alarm = "cap_alarm",1971		.sbit = PB_POWER_LIMITING,1972	}, {1973		.reg = PMBUS_POUT_OP_WARN_LIMIT,1974		.attr = "max",1975		.alarm = "max_alarm",1976		.sbit = PB_POUT_OP_WARNING,1977	}, {1978		.reg = PMBUS_POUT_OP_FAULT_LIMIT,1979		.attr = "crit",1980		.alarm = "crit_alarm",1981		.sbit = PB_POUT_OP_FAULT,1982	}, {1983		.reg = PMBUS_VIRT_READ_POUT_AVG,1984		.update = true,1985		.attr = "average",1986	}, {1987		.reg = PMBUS_VIRT_READ_POUT_MIN,1988		.update = true,1989		.attr = "input_lowest",1990	}, {1991		.reg = PMBUS_VIRT_READ_POUT_MAX,1992		.update = true,1993		.attr = "input_highest",1994	}, {1995		.reg = PMBUS_VIRT_RESET_POUT_HISTORY,1996		.attr = "reset_history",1997	}, {1998		.reg = PMBUS_MFR_POUT_MAX,1999		.attr = "rated_max",2000	},2001};2002 2003static const struct pmbus_sensor_attr power_attributes[] = {2004	{2005		.reg = PMBUS_READ_PIN,2006		.class = PSC_POWER,2007		.label = "pin",2008		.func = PMBUS_HAVE_PIN,2009		.sfunc = PMBUS_HAVE_STATUS_INPUT,2010		.sreg = PMBUS_STATUS_INPUT,2011		.gbit = PB_STATUS_INPUT,2012		.limit = pin_limit_attrs,2013		.nlimit = ARRAY_SIZE(pin_limit_attrs),2014	}, {2015		.reg = PMBUS_READ_POUT,2016		.class = PSC_POWER,2017		.label = "pout",2018		.paged = true,2019		.func = PMBUS_HAVE_POUT,2020		.sfunc = PMBUS_HAVE_STATUS_IOUT,2021		.sreg = PMBUS_STATUS_IOUT,2022		.limit = pout_limit_attrs,2023		.nlimit = ARRAY_SIZE(pout_limit_attrs),2024	}2025};2026 2027/* Temperature atributes */2028 2029static const struct pmbus_limit_attr temp_limit_attrs[] = {2030	{2031		.reg = PMBUS_UT_WARN_LIMIT,2032		.low = true,2033		.attr = "min",2034		.alarm = "min_alarm",2035		.sbit = PB_TEMP_UT_WARNING,2036	}, {2037		.reg = PMBUS_UT_FAULT_LIMIT,2038		.low = true,2039		.attr = "lcrit",2040		.alarm = "lcrit_alarm",2041		.sbit = PB_TEMP_UT_FAULT,2042	}, {2043		.reg = PMBUS_OT_WARN_LIMIT,2044		.attr = "max",2045		.alarm = "max_alarm",2046		.sbit = PB_TEMP_OT_WARNING,2047	}, {2048		.reg = PMBUS_OT_FAULT_LIMIT,2049		.attr = "crit",2050		.alarm = "crit_alarm",2051		.sbit = PB_TEMP_OT_FAULT,2052	}, {2053		.reg = PMBUS_VIRT_READ_TEMP_MIN,2054		.attr = "lowest",2055	}, {2056		.reg = PMBUS_VIRT_READ_TEMP_AVG,2057		.attr = "average",2058	}, {2059		.reg = PMBUS_VIRT_READ_TEMP_MAX,2060		.attr = "highest",2061	}, {2062		.reg = PMBUS_VIRT_RESET_TEMP_HISTORY,2063		.attr = "reset_history",2064	}, {2065		.reg = PMBUS_MFR_MAX_TEMP_1,2066		.attr = "rated_max",2067	},2068};2069 2070static const struct pmbus_limit_attr temp_limit_attrs2[] = {2071	{2072		.reg = PMBUS_UT_WARN_LIMIT,2073		.low = true,2074		.attr = "min",2075		.alarm = "min_alarm",2076		.sbit = PB_TEMP_UT_WARNING,2077	}, {2078		.reg = PMBUS_UT_FAULT_LIMIT,2079		.low = true,2080		.attr = "lcrit",2081		.alarm = "lcrit_alarm",2082		.sbit = PB_TEMP_UT_FAULT,2083	}, {2084		.reg = PMBUS_OT_WARN_LIMIT,2085		.attr = "max",2086		.alarm = "max_alarm",2087		.sbit = PB_TEMP_OT_WARNING,2088	}, {2089		.reg = PMBUS_OT_FAULT_LIMIT,2090		.attr = "crit",2091		.alarm = "crit_alarm",2092		.sbit = PB_TEMP_OT_FAULT,2093	}, {2094		.reg = PMBUS_VIRT_READ_TEMP2_MIN,2095		.attr = "lowest",2096	}, {2097		.reg = PMBUS_VIRT_READ_TEMP2_AVG,2098		.attr = "average",2099	}, {2100		.reg = PMBUS_VIRT_READ_TEMP2_MAX,2101		.attr = "highest",2102	}, {2103		.reg = PMBUS_VIRT_RESET_TEMP2_HISTORY,2104		.attr = "reset_history",2105	}, {2106		.reg = PMBUS_MFR_MAX_TEMP_2,2107		.attr = "rated_max",2108	},2109};2110 2111static const struct pmbus_limit_attr temp_limit_attrs3[] = {2112	{2113		.reg = PMBUS_UT_WARN_LIMIT,2114		.low = true,2115		.attr = "min",2116		.alarm = "min_alarm",2117		.sbit = PB_TEMP_UT_WARNING,2118	}, {2119		.reg = PMBUS_UT_FAULT_LIMIT,2120		.low = true,2121		.attr = "lcrit",2122		.alarm = "lcrit_alarm",2123		.sbit = PB_TEMP_UT_FAULT,2124	}, {2125		.reg = PMBUS_OT_WARN_LIMIT,2126		.attr = "max",2127		.alarm = "max_alarm",2128		.sbit = PB_TEMP_OT_WARNING,2129	}, {2130		.reg = PMBUS_OT_FAULT_LIMIT,2131		.attr = "crit",2132		.alarm = "crit_alarm",2133		.sbit = PB_TEMP_OT_FAULT,2134	}, {2135		.reg = PMBUS_MFR_MAX_TEMP_3,2136		.attr = "rated_max",2137	},2138};2139 2140static const struct pmbus_sensor_attr temp_attributes[] = {2141	{2142		.reg = PMBUS_READ_TEMPERATURE_1,2143		.class = PSC_TEMPERATURE,2144		.paged = true,2145		.update = true,2146		.compare = true,2147		.func = PMBUS_HAVE_TEMP,2148		.sfunc = PMBUS_HAVE_STATUS_TEMP,2149		.sreg = PMBUS_STATUS_TEMPERATURE,2150		.gbit = PB_STATUS_TEMPERATURE,2151		.limit = temp_limit_attrs,2152		.nlimit = ARRAY_SIZE(temp_limit_attrs),2153	}, {2154		.reg = PMBUS_READ_TEMPERATURE_2,2155		.class = PSC_TEMPERATURE,2156		.paged = true,2157		.update = true,2158		.compare = true,2159		.func = PMBUS_HAVE_TEMP2,2160		.sfunc = PMBUS_HAVE_STATUS_TEMP,2161		.sreg = PMBUS_STATUS_TEMPERATURE,2162		.gbit = PB_STATUS_TEMPERATURE,2163		.limit = temp_limit_attrs2,2164		.nlimit = ARRAY_SIZE(temp_limit_attrs2),2165	}, {2166		.reg = PMBUS_READ_TEMPERATURE_3,2167		.class = PSC_TEMPERATURE,2168		.paged = true,2169		.update = true,2170		.compare = true,2171		.func = PMBUS_HAVE_TEMP3,2172		.sfunc = PMBUS_HAVE_STATUS_TEMP,2173		.sreg = PMBUS_STATUS_TEMPERATURE,2174		.gbit = PB_STATUS_TEMPERATURE,2175		.limit = temp_limit_attrs3,2176		.nlimit = ARRAY_SIZE(temp_limit_attrs3),2177	}2178};2179 2180static const int pmbus_fan_registers[] = {2181	PMBUS_READ_FAN_SPEED_1,2182	PMBUS_READ_FAN_SPEED_2,2183	PMBUS_READ_FAN_SPEED_3,2184	PMBUS_READ_FAN_SPEED_42185};2186 2187static const int pmbus_fan_status_registers[] = {2188	PMBUS_STATUS_FAN_12,2189	PMBUS_STATUS_FAN_12,2190	PMBUS_STATUS_FAN_34,2191	PMBUS_STATUS_FAN_342192};2193 2194static const u32 pmbus_fan_flags[] = {2195	PMBUS_HAVE_FAN12,2196	PMBUS_HAVE_FAN12,2197	PMBUS_HAVE_FAN34,2198	PMBUS_HAVE_FAN342199};2200 2201static const u32 pmbus_fan_status_flags[] = {2202	PMBUS_HAVE_STATUS_FAN12,2203	PMBUS_HAVE_STATUS_FAN12,2204	PMBUS_HAVE_STATUS_FAN34,2205	PMBUS_HAVE_STATUS_FAN342206};2207 2208/* Fans */2209 2210/* Precondition: FAN_CONFIG_x_y and FAN_COMMAND_x must exist for the fan ID */2211static int pmbus_add_fan_ctrl(struct i2c_client *client,2212		struct pmbus_data *data, int index, int page, int id,2213		u8 config)2214{2215	struct pmbus_sensor *sensor;2216 2217	sensor = pmbus_add_sensor(data, "fan", "target", index, page,2218				  0xff, PMBUS_VIRT_FAN_TARGET_1 + id, PSC_FAN,2219				  false, false, true);2220 2221	if (!sensor)2222		return -ENOMEM;2223 2224	if (!((data->info->func[page] & PMBUS_HAVE_PWM12) ||2225			(data->info->func[page] & PMBUS_HAVE_PWM34)))2226		return 0;2227 2228	sensor = pmbus_add_sensor(data, "pwm", NULL, index, page,2229				  0xff, PMBUS_VIRT_PWM_1 + id, PSC_PWM,2230				  false, false, true);2231 2232	if (!sensor)2233		return -ENOMEM;2234 2235	sensor = pmbus_add_sensor(data, "pwm", "enable", index, page,2236				  0xff, PMBUS_VIRT_PWM_ENABLE_1 + id, PSC_PWM,2237				  true, false, false);2238 2239	if (!sensor)2240		return -ENOMEM;2241 2242	return 0;2243}2244 2245static int pmbus_add_fan_attributes(struct i2c_client *client,2246				    struct pmbus_data *data)2247{2248	const struct pmbus_driver_info *info = data->info;2249	int index = 1;2250	int page;2251	int ret;2252 2253	for (page = 0; page < info->pages; page++) {2254		int f;2255 2256		for (f = 0; f < ARRAY_SIZE(pmbus_fan_registers); f++) {2257			int regval;2258 2259			if (!(info->func[page] & pmbus_fan_flags[f]))2260				break;2261 2262			if (!pmbus_check_word_register(client, page,2263						       pmbus_fan_registers[f]))2264				break;2265 2266			/*2267			 * Skip fan if not installed.2268			 * Each fan configuration register covers multiple fans,2269			 * so we have to do some magic.2270			 */2271			regval = _pmbus_read_byte_data(client, page,2272				pmbus_fan_config_registers[f]);2273			if (regval < 0 ||2274			    (!(regval & (PB_FAN_1_INSTALLED >> ((f & 1) * 4)))))2275				continue;2276 2277			if (pmbus_add_sensor(data, "fan", "input", index,2278					     page, 0xff, pmbus_fan_registers[f],2279					     PSC_FAN, true, true, true) == NULL)2280				return -ENOMEM;2281 2282			/* Fan control */2283			if (pmbus_check_word_register(client, page,2284					pmbus_fan_command_registers[f])) {2285				ret = pmbus_add_fan_ctrl(client, data, index,2286							 page, f, regval);2287				if (ret < 0)2288					return ret;2289			}2290 2291			/*2292			 * Each fan status register covers multiple fans,2293			 * so we have to do some magic.2294			 */2295			if ((info->func[page] & pmbus_fan_status_flags[f]) &&2296			    pmbus_check_byte_register(client,2297					page, pmbus_fan_status_registers[f])) {2298				int reg;2299 2300				if (f > 1)	/* fan 3, 4 */2301					reg = PMBUS_STATUS_FAN_34;2302				else2303					reg = PMBUS_STATUS_FAN_12;2304				ret = pmbus_add_boolean(data, "fan",2305					"alarm", index, NULL, NULL, page, reg,2306					PB_FAN_FAN1_WARNING >> (f & 1));2307				if (ret)2308					return ret;2309				ret = pmbus_add_boolean(data, "fan",2310					"fault", index, NULL, NULL, page, reg,2311					PB_FAN_FAN1_FAULT >> (f & 1));2312				if (ret)2313					return ret;2314			}2315			index++;2316		}2317	}2318	return 0;2319}2320 2321struct pmbus_samples_attr {2322	int reg;2323	char *name;2324};2325 2326struct pmbus_samples_reg {2327	int page;2328	struct pmbus_samples_attr *attr;2329	struct device_attribute dev_attr;2330};2331 2332static struct pmbus_samples_attr pmbus_samples_registers[] = {2333	{2334		.reg = PMBUS_VIRT_SAMPLES,2335		.name = "samples",2336	}, {2337		.reg = PMBUS_VIRT_IN_SAMPLES,2338		.name = "in_samples",2339	}, {2340		.reg = PMBUS_VIRT_CURR_SAMPLES,2341		.name = "curr_samples",2342	}, {2343		.reg = PMBUS_VIRT_POWER_SAMPLES,2344		.name = "power_samples",2345	}, {2346		.reg = PMBUS_VIRT_TEMP_SAMPLES,2347		.name = "temp_samples",2348	}2349};2350 2351#define to_samples_reg(x) container_of(x, struct pmbus_samples_reg, dev_attr)2352 2353static ssize_t pmbus_show_samples(struct device *dev,2354				  struct device_attribute *devattr, char *buf)2355{2356	int val;2357	struct i2c_client *client = to_i2c_client(dev->parent);2358	struct pmbus_samples_reg *reg = to_samples_reg(devattr);2359	struct pmbus_data *data = i2c_get_clientdata(client);2360 2361	mutex_lock(&data->update_lock);2362	val = _pmbus_read_word_data(client, reg->page, 0xff, reg->attr->reg);2363	mutex_unlock(&data->update_lock);2364	if (val < 0)2365		return val;2366 2367	return sysfs_emit(buf, "%d\n", val);2368}2369 2370static ssize_t pmbus_set_samples(struct device *dev,2371				 struct device_attribute *devattr,2372				 const char *buf, size_t count)2373{2374	int ret;2375	long val;2376	struct i2c_client *client = to_i2c_client(dev->parent);2377	struct pmbus_samples_reg *reg = to_samples_reg(devattr);2378	struct pmbus_data *data = i2c_get_clientdata(client);2379 2380	if (kstrtol(buf, 0, &val) < 0)2381		return -EINVAL;2382 2383	mutex_lock(&data->update_lock);2384	ret = _pmbus_write_word_data(client, reg->page, reg->attr->reg, val);2385	mutex_unlock(&data->update_lock);2386 2387	return ret ? : count;2388}2389 2390static int pmbus_add_samples_attr(struct pmbus_data *data, int page,2391				  struct pmbus_samples_attr *attr)2392{2393	struct pmbus_samples_reg *reg;2394 2395	reg = devm_kzalloc(data->dev, sizeof(*reg), GFP_KERNEL);2396	if (!reg)2397		return -ENOMEM;2398 2399	reg->attr = attr;2400	reg->page = page;2401 2402	pmbus_dev_attr_init(&reg->dev_attr, attr->name, 0644,2403			    pmbus_show_samples, pmbus_set_samples);2404 2405	return pmbus_add_attribute(data, &reg->dev_attr.attr);2406}2407 2408static int pmbus_add_samples_attributes(struct i2c_client *client,2409					struct pmbus_data *data)2410{2411	const struct pmbus_driver_info *info = data->info;2412	int s;2413 2414	if (!(info->func[0] & PMBUS_HAVE_SAMPLES))2415		return 0;2416 2417	for (s = 0; s < ARRAY_SIZE(pmbus_samples_registers); s++) {2418		struct pmbus_samples_attr *attr;2419		int ret;2420 2421		attr = &pmbus_samples_registers[s];2422		if (!pmbus_check_word_register(client, 0, attr->reg))2423			continue;2424 2425		ret = pmbus_add_samples_attr(data, 0, attr);2426		if (ret)2427			return ret;2428	}2429 2430	return 0;2431}2432 2433static int pmbus_find_attributes(struct i2c_client *client,2434				 struct pmbus_data *data)2435{2436	int ret;2437 2438	/* Voltage sensors */2439	ret = pmbus_add_sensor_attrs(client, data, "in", voltage_attributes,2440				     ARRAY_SIZE(voltage_attributes));2441	if (ret)2442		return ret;2443 2444	/* Current sensors */2445	ret = pmbus_add_sensor_attrs(client, data, "curr", current_attributes,2446				     ARRAY_SIZE(current_attributes));2447	if (ret)2448		return ret;2449 2450	/* Power sensors */2451	ret = pmbus_add_sensor_attrs(client, data, "power", power_attributes,2452				     ARRAY_SIZE(power_attributes));2453	if (ret)2454		return ret;2455 2456	/* Temperature sensors */2457	ret = pmbus_add_sensor_attrs(client, data, "temp", temp_attributes,2458				     ARRAY_SIZE(temp_attributes));2459	if (ret)2460		return ret;2461 2462	/* Fans */2463	ret = pmbus_add_fan_attributes(client, data);2464	if (ret)2465		return ret;2466 2467	ret = pmbus_add_samples_attributes(client, data);2468	return ret;2469}2470 2471/*2472 * The pmbus_class_attr_map structure maps one sensor class to2473 * it's corresponding sensor attributes array.2474 */2475struct pmbus_class_attr_map {2476	enum pmbus_sensor_classes class;2477	int nattr;2478	const struct pmbus_sensor_attr *attr;2479};2480 2481static const struct pmbus_class_attr_map class_attr_map[] = {2482	{2483		.class = PSC_VOLTAGE_IN,2484		.attr = voltage_attributes,2485		.nattr = ARRAY_SIZE(voltage_attributes),2486	}, {2487		.class = PSC_VOLTAGE_OUT,2488		.attr = voltage_attributes,2489		.nattr = ARRAY_SIZE(voltage_attributes),2490	}, {2491		.class = PSC_CURRENT_IN,2492		.attr = current_attributes,2493		.nattr = ARRAY_SIZE(current_attributes),2494	}, {2495		.class = PSC_CURRENT_OUT,2496		.attr = current_attributes,2497		.nattr = ARRAY_SIZE(current_attributes),2498	}, {2499		.class = PSC_POWER,2500		.attr = power_attributes,2501		.nattr = ARRAY_SIZE(power_attributes),2502	}, {2503		.class = PSC_TEMPERATURE,2504		.attr = temp_attributes,2505		.nattr = ARRAY_SIZE(temp_attributes),2506	}2507};2508 2509/*2510 * Read the coefficients for direct mode.2511 */2512static int pmbus_read_coefficients(struct i2c_client *client,2513				   struct pmbus_driver_info *info,2514				   const struct pmbus_sensor_attr *attr)2515{2516	int rv;2517	union i2c_smbus_data data;2518	enum pmbus_sensor_classes class = attr->class;2519	s8 R;2520	s16 m, b;2521 2522	data.block[0] = 2;2523	data.block[1] = attr->reg;2524	data.block[2] = 0x01;2525 2526	pmbus_wait(client);2527	rv = i2c_smbus_xfer(client->adapter, client->addr, client->flags,2528			    I2C_SMBUS_WRITE, PMBUS_COEFFICIENTS,2529			    I2C_SMBUS_BLOCK_PROC_CALL, &data);2530	pmbus_update_ts(client, true);2531 2532	if (rv < 0)2533		return rv;2534 2535	if (data.block[0] != 5)2536		return -EIO;2537 2538	m = data.block[1] | (data.block[2] << 8);2539	b = data.block[3] | (data.block[4] << 8);2540	R = data.block[5];2541	info->m[class] = m;2542	info->b[class] = b;2543	info->R[class] = R;2544 2545	return rv;2546}2547 2548static int pmbus_init_coefficients(struct i2c_client *client,2549				   struct pmbus_driver_info *info)2550{2551	int i, n, ret = -EINVAL;2552	const struct pmbus_class_attr_map *map;2553	const struct pmbus_sensor_attr *attr;2554 2555	for (i = 0; i < ARRAY_SIZE(class_attr_map); i++) {2556		map = &class_attr_map[i];2557		if (info->format[map->class] != direct)2558			continue;2559		for (n = 0; n < map->nattr; n++) {2560			attr = &map->attr[n];2561			if (map->class != attr->class)2562				continue;2563			ret = pmbus_read_coefficients(client, info, attr);2564			if (ret >= 0)2565				break;2566		}2567		if (ret < 0) {2568			dev_err(&client->dev,2569				"No coefficients found for sensor class %d\n",2570				map->class);2571			return -EINVAL;2572		}2573	}2574 2575	return 0;2576}2577 2578/*2579 * Identify chip parameters.2580 * This function is called for all chips.2581 */2582static int pmbus_identify_common(struct i2c_client *client,2583				 struct pmbus_data *data, int page)2584{2585	int vout_mode = -1;2586 2587	if (pmbus_check_byte_register(client, page, PMBUS_VOUT_MODE))2588		vout_mode = _pmbus_read_byte_data(client, page,2589						  PMBUS_VOUT_MODE);2590	if (vout_mode >= 0 && vout_mode != 0xff) {2591		/*2592		 * Not all chips support the VOUT_MODE command,2593		 * so a failure to read it is not an error.2594		 */2595		switch (vout_mode >> 5) {2596		case 0:	/* linear mode      */2597			if (data->info->format[PSC_VOLTAGE_OUT] != linear)2598				return -ENODEV;2599 2600			data->exponent[page] = ((s8)(vout_mode << 3)) >> 3;2601			break;2602		case 1: /* VID mode         */2603			if (data->info->format[PSC_VOLTAGE_OUT] != vid)2604				return -ENODEV;2605			break;2606		case 2:	/* direct mode      */2607			if (data->info->format[PSC_VOLTAGE_OUT] != direct)2608				return -ENODEV;2609			break;2610		case 3:	/* ieee 754 half precision */2611			if (data->info->format[PSC_VOLTAGE_OUT] != ieee754)2612				return -ENODEV;2613			break;2614		default:2615			return -ENODEV;2616		}2617	}2618 2619	return 0;2620}2621 2622static int pmbus_read_status_byte(struct i2c_client *client, int page)2623{2624	return _pmbus_read_byte_data(client, page, PMBUS_STATUS_BYTE);2625}2626 2627static int pmbus_read_status_word(struct i2c_client *client, int page)2628{2629	return _pmbus_read_word_data(client, page, 0xff, PMBUS_STATUS_WORD);2630}2631 2632/* PEC attribute support */2633 2634static ssize_t pec_show(struct device *dev, struct device_attribute *dummy,2635			char *buf)2636{2637	struct i2c_client *client = to_i2c_client(dev);2638 2639	return sysfs_emit(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));2640}2641 2642static ssize_t pec_store(struct device *dev, struct device_attribute *dummy,2643			 const char *buf, size_t count)2644{2645	struct i2c_client *client = to_i2c_client(dev);2646	bool enable;2647	int err;2648 2649	err = kstrtobool(buf, &enable);2650	if (err < 0)2651		return err;2652 2653	if (enable)2654		client->flags |= I2C_CLIENT_PEC;2655	else2656		client->flags &= ~I2C_CLIENT_PEC;2657 2658	return count;2659}2660 2661static DEVICE_ATTR_RW(pec);2662 2663static void pmbus_remove_pec(void *dev)2664{2665	device_remove_file(dev, &dev_attr_pec);2666}2667 2668static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,2669			     struct pmbus_driver_info *info)2670{2671	struct device *dev = &client->dev;2672	int page, ret;2673 2674	/*2675	 * Figure out if PEC is enabled before accessing any other register.2676	 * Make sure PEC is disabled, will be enabled later if needed.2677	 */2678	client->flags &= ~I2C_CLIENT_PEC;2679 2680	/* Enable PEC if the controller and bus supports it */2681	if (!(data->flags & PMBUS_NO_CAPABILITY)) {2682		pmbus_wait(client);2683		ret = i2c_smbus_read_byte_data(client, PMBUS_CAPABILITY);2684		pmbus_update_ts(client, false);2685 2686		if (ret >= 0 && (ret & PB_CAPABILITY_ERROR_CHECK)) {2687			if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_PEC))2688				client->flags |= I2C_CLIENT_PEC;2689		}2690	}2691 2692	/*2693	 * Some PMBus chips don't support PMBUS_STATUS_WORD, so try2694	 * to use PMBUS_STATUS_BYTE instead if that is the case.2695	 * Bail out if both registers are not supported.2696	 */2697	data->read_status = pmbus_read_status_word;2698	pmbus_wait(client);2699	ret = i2c_smbus_read_word_data(client, PMBUS_STATUS_WORD);2700	pmbus_update_ts(client, false);2701 2702	if (ret < 0 || ret == 0xffff) {2703		data->read_status = pmbus_read_status_byte;2704		pmbus_wait(client);2705		ret = i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE);2706		pmbus_update_ts(client, false);2707 2708		if (ret < 0 || ret == 0xff) {2709			dev_err(dev, "PMBus status register not found\n");2710			return -ENODEV;2711		}2712	} else {2713		data->has_status_word = true;2714	}2715 2716	/*2717	 * Check if the chip is write protected. If it is, we can not clear2718	 * faults, and we should not try it. Also, in that case, writes into2719	 * limit registers need to be disabled.2720	 */2721	if (!(data->flags & PMBUS_NO_WRITE_PROTECT)) {2722		pmbus_wait(client);2723		ret = i2c_smbus_read_byte_data(client, PMBUS_WRITE_PROTECT);2724		pmbus_update_ts(client, false);2725 2726		if (ret > 0 && (ret & PB_WP_ANY))2727			data->flags |= PMBUS_WRITE_PROTECTED | PMBUS_SKIP_STATUS_CHECK;2728	}2729 2730	ret = i2c_smbus_read_byte_data(client, PMBUS_REVISION);2731	if (ret >= 0)2732		data->revision = ret;2733 2734	if (data->info->pages)2735		pmbus_clear_faults(client);2736	else2737		pmbus_clear_fault_page(client, -1);2738 2739	if (info->identify) {2740		ret = (*info->identify)(client, info);2741		if (ret < 0) {2742			dev_err(dev, "Chip identification failed\n");2743			return ret;2744		}2745	}2746 2747	if (info->pages <= 0 || info->pages > PMBUS_PAGES) {2748		dev_err(dev, "Bad number of PMBus pages: %d\n", info->pages);2749		return -ENODEV;2750	}2751 2752	for (page = 0; page < info->pages; page++) {2753		ret = pmbus_identify_common(client, data, page);2754		if (ret < 0) {2755			dev_err(dev, "Failed to identify chip capabilities\n");2756			return ret;2757		}2758	}2759 2760	if (data->flags & PMBUS_USE_COEFFICIENTS_CMD) {2761		if (!i2c_check_functionality(client->adapter,2762					     I2C_FUNC_SMBUS_BLOCK_PROC_CALL))2763			return -ENODEV;2764 2765		ret = pmbus_init_coefficients(client, info);2766		if (ret < 0)2767			return ret;2768	}2769 2770	if (client->flags & I2C_CLIENT_PEC) {2771		/*2772		 * If I2C_CLIENT_PEC is set here, both the I2C adapter and the2773		 * chip support PEC. Add 'pec' attribute to client device to let2774		 * the user control it.2775		 */2776		ret = device_create_file(dev, &dev_attr_pec);2777		if (ret)2778			return ret;2779		ret = devm_add_action_or_reset(dev, pmbus_remove_pec, dev);2780		if (ret)2781			return ret;2782	}2783 2784	return 0;2785}2786 2787/* A PMBus status flag and the corresponding REGULATOR_ERROR_* and REGULATOR_EVENTS_* flag */2788struct pmbus_status_assoc {2789	int pflag, rflag, eflag;2790};2791 2792/* PMBus->regulator bit mappings for a PMBus status register */2793struct pmbus_status_category {2794	int func;2795	int reg;2796	const struct pmbus_status_assoc *bits; /* zero-terminated */2797};2798 2799static const struct pmbus_status_category __maybe_unused pmbus_status_flag_map[] = {2800	{2801		.func = PMBUS_HAVE_STATUS_VOUT,2802		.reg = PMBUS_STATUS_VOUT,2803		.bits = (const struct pmbus_status_assoc[]) {2804			{ PB_VOLTAGE_UV_WARNING, REGULATOR_ERROR_UNDER_VOLTAGE_WARN,2805			REGULATOR_EVENT_UNDER_VOLTAGE_WARN },2806			{ PB_VOLTAGE_UV_FAULT,   REGULATOR_ERROR_UNDER_VOLTAGE,2807			REGULATOR_EVENT_UNDER_VOLTAGE },2808			{ PB_VOLTAGE_OV_WARNING, REGULATOR_ERROR_OVER_VOLTAGE_WARN,2809			REGULATOR_EVENT_OVER_VOLTAGE_WARN },2810			{ PB_VOLTAGE_OV_FAULT,   REGULATOR_ERROR_REGULATION_OUT,2811			REGULATOR_EVENT_OVER_VOLTAGE_WARN },2812			{ },2813		},2814	}, {2815		.func = PMBUS_HAVE_STATUS_IOUT,2816		.reg = PMBUS_STATUS_IOUT,2817		.bits = (const struct pmbus_status_assoc[]) {2818			{ PB_IOUT_OC_WARNING,   REGULATOR_ERROR_OVER_CURRENT_WARN,2819			REGULATOR_EVENT_OVER_CURRENT_WARN },2820			{ PB_IOUT_OC_FAULT,     REGULATOR_ERROR_OVER_CURRENT,2821			REGULATOR_EVENT_OVER_CURRENT },2822			{ PB_IOUT_OC_LV_FAULT,  REGULATOR_ERROR_OVER_CURRENT,2823			REGULATOR_EVENT_OVER_CURRENT },2824			{ },2825		},2826	}, {2827		.func = PMBUS_HAVE_STATUS_TEMP,2828		.reg = PMBUS_STATUS_TEMPERATURE,2829		.bits = (const struct pmbus_status_assoc[]) {2830			{ PB_TEMP_OT_WARNING,    REGULATOR_ERROR_OVER_TEMP_WARN,2831			REGULATOR_EVENT_OVER_TEMP_WARN },2832			{ PB_TEMP_OT_FAULT,      REGULATOR_ERROR_OVER_TEMP,2833			REGULATOR_EVENT_OVER_TEMP },2834			{ },2835		},2836	},2837};2838 2839static int _pmbus_is_enabled(struct i2c_client *client, u8 page)2840{2841	int ret;2842 2843	ret = _pmbus_read_byte_data(client, page, PMBUS_OPERATION);2844 2845	if (ret < 0)2846		return ret;2847 2848	return !!(ret & PB_OPERATION_CONTROL_ON);2849}2850 2851static int __maybe_unused pmbus_is_enabled(struct i2c_client *client, u8 page)2852{2853	struct pmbus_data *data = i2c_get_clientdata(client);2854	int ret;2855 2856	mutex_lock(&data->update_lock);2857	ret = _pmbus_is_enabled(client, page);2858	mutex_unlock(&data->update_lock);2859 2860	return ret;2861}2862 2863#define to_dev_attr(_dev_attr) \2864	container_of(_dev_attr, struct device_attribute, attr)2865 2866static void pmbus_notify(struct pmbus_data *data, int page, int reg, int flags)2867{2868	int i;2869 2870	for (i = 0; i < data->num_attributes; i++) {2871		struct device_attribute *da = to_dev_attr(data->group.attrs[i]);2872		struct sensor_device_attribute *attr = to_sensor_dev_attr(da);2873		int index = attr->index;2874		u16 smask = pb_index_to_mask(index);2875		u8 spage = pb_index_to_page(index);2876		u16 sreg = pb_index_to_reg(index);2877 2878		if (reg == sreg && page == spage && (smask & flags)) {2879			dev_dbg(data->dev, "sysfs notify: %s", da->attr.name);2880			sysfs_notify(&data->dev->kobj, NULL, da->attr.name);2881			kobject_uevent(&data->dev->kobj, KOBJ_CHANGE);2882			flags &= ~smask;2883		}2884 2885		if (!flags)2886			break;2887	}2888}2889 2890static int _pmbus_get_flags(struct pmbus_data *data, u8 page, unsigned int *flags,2891			   unsigned int *event, bool notify)2892{2893	int i, status;2894	const struct pmbus_status_category *cat;2895	const struct pmbus_status_assoc *bit;2896	struct device *dev = data->dev;2897	struct i2c_client *client = to_i2c_client(dev);2898	int func = data->info->func[page];2899 2900	*flags = 0;2901	*event = 0;2902 2903	for (i = 0; i < ARRAY_SIZE(pmbus_status_flag_map); i++) {2904		cat = &pmbus_status_flag_map[i];2905		if (!(func & cat->func))2906			continue;2907 2908		status = _pmbus_read_byte_data(client, page, cat->reg);2909		if (status < 0)2910			return status;2911 2912		for (bit = cat->bits; bit->pflag; bit++)2913			if (status & bit->pflag) {2914				*flags |= bit->rflag;2915				*event |= bit->eflag;2916			}2917 2918		if (notify && status)2919			pmbus_notify(data, page, cat->reg, status);2920 2921	}2922 2923	/*2924	 * Map what bits of STATUS_{WORD,BYTE} we can to REGULATOR_ERROR_*2925	 * bits.  Some of the other bits are tempting (especially for cases2926	 * where we don't have the relevant PMBUS_HAVE_STATUS_*2927	 * functionality), but there's an unfortunate ambiguity in that2928	 * they're defined as indicating a fault *or* a warning, so we can't2929	 * easily determine whether to report REGULATOR_ERROR_<foo> or2930	 * REGULATOR_ERROR_<foo>_WARN.2931	 */2932	status = pmbus_get_status(client, page, PMBUS_STATUS_WORD);2933	if (status < 0)2934		return status;2935 2936	if (_pmbus_is_enabled(client, page)) {2937		if (status & PB_STATUS_OFF) {2938			*flags |= REGULATOR_ERROR_FAIL;2939			*event |= REGULATOR_EVENT_FAIL;2940		}2941 2942		if (status & PB_STATUS_POWER_GOOD_N) {2943			*flags |= REGULATOR_ERROR_REGULATION_OUT;2944			*event |= REGULATOR_EVENT_REGULATION_OUT;2945		}2946	}2947	/*2948	 * Unlike most other status bits, PB_STATUS_{IOUT_OC,VOUT_OV} are2949	 * defined strictly as fault indicators (not warnings).2950	 */2951	if (status & PB_STATUS_IOUT_OC) {2952		*flags |= REGULATOR_ERROR_OVER_CURRENT;2953		*event |= REGULATOR_EVENT_OVER_CURRENT;2954	}2955	if (status & PB_STATUS_VOUT_OV) {2956		*flags |= REGULATOR_ERROR_REGULATION_OUT;2957		*event |= REGULATOR_EVENT_FAIL;2958	}2959 2960	/*2961	 * If we haven't discovered any thermal faults or warnings via2962	 * PMBUS_STATUS_TEMPERATURE, map PB_STATUS_TEMPERATURE to a warning as2963	 * a (conservative) best-effort interpretation.2964	 */2965	if (!(*flags & (REGULATOR_ERROR_OVER_TEMP | REGULATOR_ERROR_OVER_TEMP_WARN)) &&2966	    (status & PB_STATUS_TEMPERATURE)) {2967		*flags |= REGULATOR_ERROR_OVER_TEMP_WARN;2968		*event |= REGULATOR_EVENT_OVER_TEMP_WARN;2969	}2970 2971 2972	return 0;2973}2974 2975static int __maybe_unused pmbus_get_flags(struct pmbus_data *data, u8 page, unsigned int *flags,2976					  unsigned int *event, bool notify)2977{2978	int ret;2979 2980	mutex_lock(&data->update_lock);2981	ret = _pmbus_get_flags(data, page, flags, event, notify);2982	mutex_unlock(&data->update_lock);2983 2984	return ret;2985}2986 2987#if IS_ENABLED(CONFIG_REGULATOR)2988static int pmbus_regulator_is_enabled(struct regulator_dev *rdev)2989{2990	struct device *dev = rdev_get_dev(rdev);2991	struct i2c_client *client = to_i2c_client(dev->parent);2992 2993	return pmbus_is_enabled(client, rdev_get_id(rdev));2994}2995 2996static int _pmbus_regulator_on_off(struct regulator_dev *rdev, bool enable)2997{2998	struct device *dev = rdev_get_dev(rdev);2999	struct i2c_client *client = to_i2c_client(dev->parent);3000	struct pmbus_data *data = i2c_get_clientdata(client);3001	u8 page = rdev_get_id(rdev);3002	int ret;3003 3004	mutex_lock(&data->update_lock);3005	ret = pmbus_update_byte_data(client, page, PMBUS_OPERATION,3006				     PB_OPERATION_CONTROL_ON,3007				     enable ? PB_OPERATION_CONTROL_ON : 0);3008	mutex_unlock(&data->update_lock);3009 3010	return ret;3011}3012 3013static int pmbus_regulator_enable(struct regulator_dev *rdev)3014{3015	return _pmbus_regulator_on_off(rdev, 1);3016}3017 3018static int pmbus_regulator_disable(struct regulator_dev *rdev)3019{3020	return _pmbus_regulator_on_off(rdev, 0);3021}3022 3023static int pmbus_regulator_get_error_flags(struct regulator_dev *rdev, unsigned int *flags)3024{3025	struct device *dev = rdev_get_dev(rdev);3026	struct i2c_client *client = to_i2c_client(dev->parent);3027	struct pmbus_data *data = i2c_get_clientdata(client);3028	int event;3029 3030	return pmbus_get_flags(data, rdev_get_id(rdev), flags, &event, false);3031}3032 3033static int pmbus_regulator_get_status(struct regulator_dev *rdev)3034{3035	struct device *dev = rdev_get_dev(rdev);3036	struct i2c_client *client = to_i2c_client(dev->parent);3037	struct pmbus_data *data = i2c_get_clientdata(client);3038	u8 page = rdev_get_id(rdev);3039	int status, ret;3040	int event;3041 3042	mutex_lock(&data->update_lock);3043	status = pmbus_get_status(client, page, PMBUS_STATUS_WORD);3044	if (status < 0) {3045		ret = status;3046		goto unlock;3047	}3048 3049	if (status & PB_STATUS_OFF) {3050		ret = REGULATOR_STATUS_OFF;3051		goto unlock;3052	}3053 3054	/* If regulator is ON & reports power good then return ON */3055	if (!(status & PB_STATUS_POWER_GOOD_N)) {3056		ret = REGULATOR_STATUS_ON;3057		goto unlock;3058	}3059 3060	ret = _pmbus_get_flags(data, rdev_get_id(rdev), &status, &event, false);3061	if (ret)3062		goto unlock;3063 3064	if (status & (REGULATOR_ERROR_UNDER_VOLTAGE | REGULATOR_ERROR_OVER_CURRENT |3065	   REGULATOR_ERROR_REGULATION_OUT | REGULATOR_ERROR_FAIL | REGULATOR_ERROR_OVER_TEMP)) {3066		ret = REGULATOR_STATUS_ERROR;3067		goto unlock;3068	}3069 3070	ret = REGULATOR_STATUS_UNDEFINED;3071 3072unlock:3073	mutex_unlock(&data->update_lock);3074	return ret;3075}3076 3077static int pmbus_regulator_get_low_margin(struct i2c_client *client, int page)3078{3079	struct pmbus_data *data = i2c_get_clientdata(client);3080	struct pmbus_sensor s = {3081		.page = page,3082		.class = PSC_VOLTAGE_OUT,3083		.convert = true,3084		.data = -1,3085	};3086 3087	if (data->vout_low[page] < 0) {3088		if (pmbus_check_word_register(client, page, PMBUS_MFR_VOUT_MIN))3089			s.data = _pmbus_read_word_data(client, page, 0xff,3090						       PMBUS_MFR_VOUT_MIN);3091		if (s.data < 0) {3092			s.data = _pmbus_read_word_data(client, page, 0xff,3093						       PMBUS_VOUT_MARGIN_LOW);3094			if (s.data < 0)3095				return s.data;3096		}3097		data->vout_low[page] = pmbus_reg2data(data, &s);3098	}3099 3100	return data->vout_low[page];3101}3102 3103static int pmbus_regulator_get_high_margin(struct i2c_client *client, int page)3104{3105	struct pmbus_data *data = i2c_get_clientdata(client);3106	struct pmbus_sensor s = {3107		.page = page,3108		.class = PSC_VOLTAGE_OUT,3109		.convert = true,3110		.data = -1,3111	};3112 3113	if (data->vout_high[page] < 0) {3114		if (pmbus_check_word_register(client, page, PMBUS_MFR_VOUT_MAX))3115			s.data = _pmbus_read_word_data(client, page, 0xff,3116						       PMBUS_MFR_VOUT_MAX);3117		if (s.data < 0) {3118			s.data = _pmbus_read_word_data(client, page, 0xff,3119						       PMBUS_VOUT_MARGIN_HIGH);3120			if (s.data < 0)3121				return s.data;3122		}3123		data->vout_high[page] = pmbus_reg2data(data, &s);3124	}3125 3126	return data->vout_high[page];3127}3128 3129static int pmbus_regulator_get_voltage(struct regulator_dev *rdev)3130{3131	struct device *dev = rdev_get_dev(rdev);3132	struct i2c_client *client = to_i2c_client(dev->parent);3133	struct pmbus_data *data = i2c_get_clientdata(client);3134	struct pmbus_sensor s = {3135		.page = rdev_get_id(rdev),3136		.class = PSC_VOLTAGE_OUT,3137		.convert = true,3138	};3139 3140	s.data = _pmbus_read_word_data(client, s.page, 0xff, PMBUS_READ_VOUT);3141	if (s.data < 0)3142		return s.data;3143 3144	return (int)pmbus_reg2data(data, &s) * 1000; /* unit is uV */3145}3146 3147static int pmbus_regulator_set_voltage(struct regulator_dev *rdev, int min_uv,3148				       int max_uv, unsigned int *selector)3149{3150	struct device *dev = rdev_get_dev(rdev);3151	struct i2c_client *client = to_i2c_client(dev->parent);3152	struct pmbus_data *data = i2c_get_clientdata(client);3153	struct pmbus_sensor s = {3154		.page = rdev_get_id(rdev),3155		.class = PSC_VOLTAGE_OUT,3156		.convert = true,3157		.data = -1,3158	};3159	int val = DIV_ROUND_CLOSEST(min_uv, 1000); /* convert to mV */3160	int low, high;3161 3162	*selector = 0;3163 3164	low = pmbus_regulator_get_low_margin(client, s.page);3165	if (low < 0)3166		return low;3167 3168	high = pmbus_regulator_get_high_margin(client, s.page);3169	if (high < 0)3170		return high;3171 3172	/* Make sure we are within margins */3173	if (low > val)3174		val = low;3175	if (high < val)3176		val = high;3177 3178	val = pmbus_data2reg(data, &s, val);3179 3180	return _pmbus_write_word_data(client, s.page, PMBUS_VOUT_COMMAND, (u16)val);3181}3182 3183static int pmbus_regulator_list_voltage(struct regulator_dev *rdev,3184					 unsigned int selector)3185{3186	struct device *dev = rdev_get_dev(rdev);3187	struct i2c_client *client = to_i2c_client(dev->parent);3188	int val, low, high;3189 3190	if (selector >= rdev->desc->n_voltages ||3191	    selector < rdev->desc->linear_min_sel)3192		return -EINVAL;3193 3194	selector -= rdev->desc->linear_min_sel;3195	val = DIV_ROUND_CLOSEST(rdev->desc->min_uV +3196				(rdev->desc->uV_step * selector), 1000); /* convert to mV */3197 3198	low = pmbus_regulator_get_low_margin(client, rdev_get_id(rdev));3199	if (low < 0)3200		return low;3201 3202	high = pmbus_regulator_get_high_margin(client, rdev_get_id(rdev));3203	if (high < 0)3204		return high;3205 3206	if (val >= low && val <= high)3207		return val * 1000; /* unit is uV */3208 3209	return 0;3210}3211 3212const struct regulator_ops pmbus_regulator_ops = {3213	.enable = pmbus_regulator_enable,3214	.disable = pmbus_regulator_disable,3215	.is_enabled = pmbus_regulator_is_enabled,3216	.get_error_flags = pmbus_regulator_get_error_flags,3217	.get_status = pmbus_regulator_get_status,3218	.get_voltage = pmbus_regulator_get_voltage,3219	.set_voltage = pmbus_regulator_set_voltage,3220	.list_voltage = pmbus_regulator_list_voltage,3221};3222EXPORT_SYMBOL_NS_GPL(pmbus_regulator_ops, PMBUS);3223 3224static int pmbus_regulator_register(struct pmbus_data *data)3225{3226	struct device *dev = data->dev;3227	const struct pmbus_driver_info *info = data->info;3228	const struct pmbus_platform_data *pdata = dev_get_platdata(dev);3229	int i;3230 3231	data->rdevs = devm_kzalloc(dev, sizeof(struct regulator_dev *) * info->num_regulators,3232				   GFP_KERNEL);3233	if (!data->rdevs)3234		return -ENOMEM;3235 3236	for (i = 0; i < info->num_regulators; i++) {3237		struct regulator_config config = { };3238 3239		config.dev = dev;3240		config.driver_data = data;3241 3242		if (pdata && pdata->reg_init_data)3243			config.init_data = &pdata->reg_init_data[i];3244 3245		data->rdevs[i] = devm_regulator_register(dev, &info->reg_desc[i],3246							 &config);3247		if (IS_ERR(data->rdevs[i]))3248			return dev_err_probe(dev, PTR_ERR(data->rdevs[i]),3249					     "Failed to register %s regulator\n",3250					     info->reg_desc[i].name);3251	}3252 3253	return 0;3254}3255 3256static int pmbus_regulator_notify(struct pmbus_data *data, int page, int event)3257{3258		int j;3259 3260		for (j = 0; j < data->info->num_regulators; j++) {3261			if (page == rdev_get_id(data->rdevs[j])) {3262				regulator_notifier_call_chain(data->rdevs[j], event, NULL);3263				break;3264			}3265		}3266		return 0;3267}3268#else3269static int pmbus_regulator_register(struct pmbus_data *data)3270{3271	return 0;3272}3273 3274static int pmbus_regulator_notify(struct pmbus_data *data, int page, int event)3275{3276		return 0;3277}3278#endif3279 3280static int pmbus_write_smbalert_mask(struct i2c_client *client, u8 page, u8 reg, u8 val)3281{3282	return _pmbus_write_word_data(client, page, PMBUS_SMBALERT_MASK, reg | (val << 8));3283}3284 3285static irqreturn_t pmbus_fault_handler(int irq, void *pdata)3286{3287	struct pmbus_data *data = pdata;3288	struct i2c_client *client = to_i2c_client(data->dev);3289 3290	int i, status, event;3291	mutex_lock(&data->update_lock);3292	for (i = 0; i < data->info->pages; i++) {3293		_pmbus_get_flags(data, i, &status, &event, true);3294 3295		if (event)3296			pmbus_regulator_notify(data, i, event);3297	}3298 3299	pmbus_clear_faults(client);3300	mutex_unlock(&data->update_lock);3301 3302	return IRQ_HANDLED;3303}3304 3305static int pmbus_irq_setup(struct i2c_client *client, struct pmbus_data *data)3306{3307	struct device *dev = &client->dev;3308	const struct pmbus_status_category *cat;3309	const struct pmbus_status_assoc *bit;3310	int i, j, err, func;3311	u8 mask;3312 3313	static const u8 misc_status[] = {PMBUS_STATUS_CML, PMBUS_STATUS_OTHER,3314					 PMBUS_STATUS_MFR_SPECIFIC, PMBUS_STATUS_FAN_12,3315					 PMBUS_STATUS_FAN_34};3316 3317	if (!client->irq)3318		return 0;3319 3320	for (i = 0; i < data->info->pages; i++) {3321		func = data->info->func[i];3322 3323		for (j = 0; j < ARRAY_SIZE(pmbus_status_flag_map); j++) {3324			cat = &pmbus_status_flag_map[j];3325			if (!(func & cat->func))3326				continue;3327			mask = 0;3328			for (bit = cat->bits; bit->pflag; bit++)3329				mask |= bit->pflag;3330 3331			err = pmbus_write_smbalert_mask(client, i, cat->reg, ~mask);3332			if (err)3333				dev_dbg_once(dev, "Failed to set smbalert for reg 0x%02x\n",3334					     cat->reg);3335		}3336 3337		for (j = 0; j < ARRAY_SIZE(misc_status); j++)3338			pmbus_write_smbalert_mask(client, i, misc_status[j], 0xff);3339	}3340 3341	/* Register notifiers */3342	err = devm_request_threaded_irq(dev, client->irq, NULL, pmbus_fault_handler,3343					IRQF_ONESHOT, "pmbus-irq", data);3344	if (err) {3345		dev_err(dev, "failed to request an irq %d\n", err);3346		return err;3347	}3348 3349	return 0;3350}3351 3352static struct dentry *pmbus_debugfs_dir;	/* pmbus debugfs directory */3353 3354#if IS_ENABLED(CONFIG_DEBUG_FS)3355static int pmbus_debugfs_get(void *data, u64 *val)3356{3357	int rc;3358	struct pmbus_debugfs_entry *entry = data;3359	struct pmbus_data *pdata = i2c_get_clientdata(entry->client);3360 3361	rc = mutex_lock_interruptible(&pdata->update_lock);3362	if (rc)3363		return rc;3364	rc = _pmbus_read_byte_data(entry->client, entry->page, entry->reg);3365	mutex_unlock(&pdata->update_lock);3366	if (rc < 0)3367		return rc;3368 3369	*val = rc;3370 3371	return 0;3372}3373DEFINE_DEBUGFS_ATTRIBUTE(pmbus_debugfs_ops, pmbus_debugfs_get, NULL,3374			 "0x%02llx\n");3375 3376static int pmbus_debugfs_get_status(void *data, u64 *val)3377{3378	int rc;3379	struct pmbus_debugfs_entry *entry = data;3380	struct pmbus_data *pdata = i2c_get_clientdata(entry->client);3381 3382	rc = mutex_lock_interruptible(&pdata->update_lock);3383	if (rc)3384		return rc;3385	rc = pdata->read_status(entry->client, entry->page);3386	mutex_unlock(&pdata->update_lock);3387	if (rc < 0)3388		return rc;3389 3390	*val = rc;3391 3392	return 0;3393}3394DEFINE_DEBUGFS_ATTRIBUTE(pmbus_debugfs_ops_status, pmbus_debugfs_get_status,3395			 NULL, "0x%04llx\n");3396 3397static ssize_t pmbus_debugfs_mfr_read(struct file *file, char __user *buf,3398				       size_t count, loff_t *ppos)3399{3400	int rc;3401	struct pmbus_debugfs_entry *entry = file->private_data;3402	struct pmbus_data *pdata = i2c_get_clientdata(entry->client);3403	char data[I2C_SMBUS_BLOCK_MAX + 2] = { 0 };3404 3405	rc = mutex_lock_interruptible(&pdata->update_lock);3406	if (rc)3407		return rc;3408	rc = pmbus_read_block_data(entry->client, entry->page, entry->reg,3409				   data);3410	mutex_unlock(&pdata->update_lock);3411	if (rc < 0)3412		return rc;3413 3414	/* Add newline at the end of a read data */3415	data[rc] = '\n';3416 3417	/* Include newline into the length */3418	rc += 1;3419 3420	return simple_read_from_buffer(buf, count, ppos, data, rc);3421}3422 3423static const struct file_operations pmbus_debugfs_ops_mfr = {3424	.llseek = noop_llseek,3425	.read = pmbus_debugfs_mfr_read,3426	.write = NULL,3427	.open = simple_open,3428};3429 3430static void pmbus_remove_debugfs(void *data)3431{3432	struct dentry *entry = data;3433 3434	debugfs_remove_recursive(entry);3435}3436 3437static int pmbus_init_debugfs(struct i2c_client *client,3438			      struct pmbus_data *data)3439{3440	int i, idx = 0;3441	char name[PMBUS_NAME_SIZE];3442	struct pmbus_debugfs_entry *entries;3443 3444	if (!pmbus_debugfs_dir)3445		return -ENODEV;3446 3447	/*3448	 * Create the debugfs directory for this device. Use the hwmon device3449	 * name to avoid conflicts (hwmon numbers are globally unique).3450	 */3451	data->debugfs = debugfs_create_dir(dev_name(data->hwmon_dev),3452					   pmbus_debugfs_dir);3453	if (IS_ERR_OR_NULL(data->debugfs)) {3454		data->debugfs = NULL;3455		return -ENODEV;3456	}3457 3458	/*3459	 * Allocate the max possible entries we need.3460	 * 6 entries device-specific3461	 * 10 entries page-specific3462	 */3463	entries = devm_kcalloc(data->dev,3464			       6 + data->info->pages * 10, sizeof(*entries),3465			       GFP_KERNEL);3466	if (!entries)3467		return -ENOMEM;3468 3469	/*3470	 * Add device-specific entries.3471	 * Please note that the PMBUS standard allows all registers to be3472	 * page-specific.3473	 * To reduce the number of debugfs entries for devices with many pages3474	 * assume that values of the following registers are the same for all3475	 * pages and report values only for page 0.3476	 */3477	if (pmbus_check_block_register(client, 0, PMBUS_MFR_ID)) {3478		entries[idx].client = client;3479		entries[idx].page = 0;3480		entries[idx].reg = PMBUS_MFR_ID;3481		debugfs_create_file("mfr_id", 0444, data->debugfs,3482				    &entries[idx++],3483				    &pmbus_debugfs_ops_mfr);3484	}3485 3486	if (pmbus_check_block_register(client, 0, PMBUS_MFR_MODEL)) {3487		entries[idx].client = client;3488		entries[idx].page = 0;3489		entries[idx].reg = PMBUS_MFR_MODEL;3490		debugfs_create_file("mfr_model", 0444, data->debugfs,3491				    &entries[idx++],3492				    &pmbus_debugfs_ops_mfr);3493	}3494 3495	if (pmbus_check_block_register(client, 0, PMBUS_MFR_REVISION)) {3496		entries[idx].client = client;3497		entries[idx].page = 0;3498		entries[idx].reg = PMBUS_MFR_REVISION;3499		debugfs_create_file("mfr_revision", 0444, data->debugfs,3500				    &entries[idx++],3501				    &pmbus_debugfs_ops_mfr);3502	}3503 3504	if (pmbus_check_block_register(client, 0, PMBUS_MFR_LOCATION)) {3505		entries[idx].client = client;3506		entries[idx].page = 0;3507		entries[idx].reg = PMBUS_MFR_LOCATION;3508		debugfs_create_file("mfr_location", 0444, data->debugfs,3509				    &entries[idx++],3510				    &pmbus_debugfs_ops_mfr);3511	}3512 3513	if (pmbus_check_block_register(client, 0, PMBUS_MFR_DATE)) {3514		entries[idx].client = client;3515		entries[idx].page = 0;3516		entries[idx].reg = PMBUS_MFR_DATE;3517		debugfs_create_file("mfr_date", 0444, data->debugfs,3518				    &entries[idx++],3519				    &pmbus_debugfs_ops_mfr);3520	}3521 3522	if (pmbus_check_block_register(client, 0, PMBUS_MFR_SERIAL)) {3523		entries[idx].client = client;3524		entries[idx].page = 0;3525		entries[idx].reg = PMBUS_MFR_SERIAL;3526		debugfs_create_file("mfr_serial", 0444, data->debugfs,3527				    &entries[idx++],3528				    &pmbus_debugfs_ops_mfr);3529	}3530 3531	/* Add page specific entries */3532	for (i = 0; i < data->info->pages; ++i) {3533		/* Check accessibility of status register if it's not page 0 */3534		if (!i || pmbus_check_status_register(client, i)) {3535			/* No need to set reg as we have special read op. */3536			entries[idx].client = client;3537			entries[idx].page = i;3538			scnprintf(name, PMBUS_NAME_SIZE, "status%d", i);3539			debugfs_create_file(name, 0444, data->debugfs,3540					    &entries[idx++],3541					    &pmbus_debugfs_ops_status);3542		}3543 3544		if (data->info->func[i] & PMBUS_HAVE_STATUS_VOUT) {3545			entries[idx].client = client;3546			entries[idx].page = i;3547			entries[idx].reg = PMBUS_STATUS_VOUT;3548			scnprintf(name, PMBUS_NAME_SIZE, "status%d_vout", i);3549			debugfs_create_file(name, 0444, data->debugfs,3550					    &entries[idx++],3551					    &pmbus_debugfs_ops);3552		}3553 3554		if (data->info->func[i] & PMBUS_HAVE_STATUS_IOUT) {3555			entries[idx].client = client;3556			entries[idx].page = i;3557			entries[idx].reg = PMBUS_STATUS_IOUT;3558			scnprintf(name, PMBUS_NAME_SIZE, "status%d_iout", i);3559			debugfs_create_file(name, 0444, data->debugfs,3560					    &entries[idx++],3561					    &pmbus_debugfs_ops);3562		}3563 3564		if (data->info->func[i] & PMBUS_HAVE_STATUS_INPUT) {3565			entries[idx].client = client;3566			entries[idx].page = i;3567			entries[idx].reg = PMBUS_STATUS_INPUT;3568			scnprintf(name, PMBUS_NAME_SIZE, "status%d_input", i);3569			debugfs_create_file(name, 0444, data->debugfs,3570					    &entries[idx++],3571					    &pmbus_debugfs_ops);3572		}3573 3574		if (data->info->func[i] & PMBUS_HAVE_STATUS_TEMP) {3575			entries[idx].client = client;3576			entries[idx].page = i;3577			entries[idx].reg = PMBUS_STATUS_TEMPERATURE;3578			scnprintf(name, PMBUS_NAME_SIZE, "status%d_temp", i);3579			debugfs_create_file(name, 0444, data->debugfs,3580					    &entries[idx++],3581					    &pmbus_debugfs_ops);3582		}3583 3584		if (pmbus_check_byte_register(client, i, PMBUS_STATUS_CML)) {3585			entries[idx].client = client;3586			entries[idx].page = i;3587			entries[idx].reg = PMBUS_STATUS_CML;3588			scnprintf(name, PMBUS_NAME_SIZE, "status%d_cml", i);3589			debugfs_create_file(name, 0444, data->debugfs,3590					    &entries[idx++],3591					    &pmbus_debugfs_ops);3592		}3593 3594		if (pmbus_check_byte_register(client, i, PMBUS_STATUS_OTHER)) {3595			entries[idx].client = client;3596			entries[idx].page = i;3597			entries[idx].reg = PMBUS_STATUS_OTHER;3598			scnprintf(name, PMBUS_NAME_SIZE, "status%d_other", i);3599			debugfs_create_file(name, 0444, data->debugfs,3600					    &entries[idx++],3601					    &pmbus_debugfs_ops);3602		}3603 3604		if (pmbus_check_byte_register(client, i,3605					      PMBUS_STATUS_MFR_SPECIFIC)) {3606			entries[idx].client = client;3607			entries[idx].page = i;3608			entries[idx].reg = PMBUS_STATUS_MFR_SPECIFIC;3609			scnprintf(name, PMBUS_NAME_SIZE, "status%d_mfr", i);3610			debugfs_create_file(name, 0444, data->debugfs,3611					    &entries[idx++],3612					    &pmbus_debugfs_ops);3613		}3614 3615		if (data->info->func[i] & PMBUS_HAVE_STATUS_FAN12) {3616			entries[idx].client = client;3617			entries[idx].page = i;3618			entries[idx].reg = PMBUS_STATUS_FAN_12;3619			scnprintf(name, PMBUS_NAME_SIZE, "status%d_fan12", i);3620			debugfs_create_file(name, 0444, data->debugfs,3621					    &entries[idx++],3622					    &pmbus_debugfs_ops);3623		}3624 3625		if (data->info->func[i] & PMBUS_HAVE_STATUS_FAN34) {3626			entries[idx].client = client;3627			entries[idx].page = i;3628			entries[idx].reg = PMBUS_STATUS_FAN_34;3629			scnprintf(name, PMBUS_NAME_SIZE, "status%d_fan34", i);3630			debugfs_create_file(name, 0444, data->debugfs,3631					    &entries[idx++],3632					    &pmbus_debugfs_ops);3633		}3634	}3635 3636	return devm_add_action_or_reset(data->dev,3637					pmbus_remove_debugfs, data->debugfs);3638}3639#else3640static int pmbus_init_debugfs(struct i2c_client *client,3641			      struct pmbus_data *data)3642{3643	return 0;3644}3645#endif	/* IS_ENABLED(CONFIG_DEBUG_FS) */3646 3647int pmbus_do_probe(struct i2c_client *client, struct pmbus_driver_info *info)3648{3649	struct device *dev = &client->dev;3650	const struct pmbus_platform_data *pdata = dev_get_platdata(dev);3651	struct pmbus_data *data;3652	size_t groups_num = 0;3653	int ret;3654	int i;3655	char *name;3656 3657	if (!info)3658		return -ENODEV;3659 3660	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WRITE_BYTE3661				     | I2C_FUNC_SMBUS_BYTE_DATA3662				     | I2C_FUNC_SMBUS_WORD_DATA))3663		return -ENODEV;3664 3665	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);3666	if (!data)3667		return -ENOMEM;3668 3669	if (info->groups)3670		while (info->groups[groups_num])3671			groups_num++;3672 3673	data->groups = devm_kcalloc(dev, groups_num + 2, sizeof(void *),3674				    GFP_KERNEL);3675	if (!data->groups)3676		return -ENOMEM;3677 3678	i2c_set_clientdata(client, data);3679	mutex_init(&data->update_lock);3680	data->dev = dev;3681 3682	if (pdata)3683		data->flags = pdata->flags;3684	data->info = info;3685	data->currpage = -1;3686	data->currphase = -1;3687 3688	for (i = 0; i < ARRAY_SIZE(data->vout_low); i++) {3689		data->vout_low[i] = -1;3690		data->vout_high[i] = -1;3691	}3692 3693	ret = pmbus_init_common(client, data, info);3694	if (ret < 0)3695		return ret;3696 3697	ret = pmbus_find_attributes(client, data);3698	if (ret)3699		return ret;3700 3701	/*3702	 * If there are no attributes, something is wrong.3703	 * Bail out instead of trying to register nothing.3704	 */3705	if (!data->num_attributes) {3706		dev_err(dev, "No attributes found\n");3707		return -ENODEV;3708	}3709 3710	name = devm_kstrdup(dev, client->name, GFP_KERNEL);3711	if (!name)3712		return -ENOMEM;3713	strreplace(name, '-', '_');3714 3715	data->groups[0] = &data->group;3716	memcpy(data->groups + 1, info->groups, sizeof(void *) * groups_num);3717	data->hwmon_dev = devm_hwmon_device_register_with_groups(dev,3718					name, data, data->groups);3719	if (IS_ERR(data->hwmon_dev)) {3720		dev_err(dev, "Failed to register hwmon device\n");3721		return PTR_ERR(data->hwmon_dev);3722	}3723 3724	ret = pmbus_regulator_register(data);3725	if (ret)3726		return ret;3727 3728	ret = pmbus_irq_setup(client, data);3729	if (ret)3730		return ret;3731 3732	ret = pmbus_init_debugfs(client, data);3733	if (ret)3734		dev_warn(dev, "Failed to register debugfs\n");3735 3736	return 0;3737}3738EXPORT_SYMBOL_NS_GPL(pmbus_do_probe, PMBUS);3739 3740struct dentry *pmbus_get_debugfs_dir(struct i2c_client *client)3741{3742	struct pmbus_data *data = i2c_get_clientdata(client);3743 3744	return data->debugfs;3745}3746EXPORT_SYMBOL_NS_GPL(pmbus_get_debugfs_dir, PMBUS);3747 3748int pmbus_lock_interruptible(struct i2c_client *client)3749{3750	struct pmbus_data *data = i2c_get_clientdata(client);3751 3752	return mutex_lock_interruptible(&data->update_lock);3753}3754EXPORT_SYMBOL_NS_GPL(pmbus_lock_interruptible, PMBUS);3755 3756void pmbus_unlock(struct i2c_client *client)3757{3758	struct pmbus_data *data = i2c_get_clientdata(client);3759 3760	mutex_unlock(&data->update_lock);3761}3762EXPORT_SYMBOL_NS_GPL(pmbus_unlock, PMBUS);3763 3764static int __init pmbus_core_init(void)3765{3766	pmbus_debugfs_dir = debugfs_create_dir("pmbus", NULL);3767	if (IS_ERR(pmbus_debugfs_dir))3768		pmbus_debugfs_dir = NULL;3769 3770	return 0;3771}3772 3773static void __exit pmbus_core_exit(void)3774{3775	debugfs_remove_recursive(pmbus_debugfs_dir);3776}3777 3778module_init(pmbus_core_init);3779module_exit(pmbus_core_exit);3780 3781MODULE_AUTHOR("Guenter Roeck");3782MODULE_DESCRIPTION("PMBus core driver");3783MODULE_LICENSE("GPL");3784