Linux Audio

Check our new training course

Loading...
   1/*
   2 * Hardware monitoring driver for PMBus devices
   3 *
   4 * Copyright (c) 2010, 2011 Ericsson AB.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License, or
   9 * (at your option) any later version.
  10 *
  11 * This program is distributed in the hope that it will be useful,
  12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 * GNU General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  19 */
  20
  21#include <linux/kernel.h>
  22#include <linux/module.h>
  23#include <linux/init.h>
  24#include <linux/err.h>
  25#include <linux/slab.h>
  26#include <linux/i2c.h>
  27#include <linux/hwmon.h>
  28#include <linux/hwmon-sysfs.h>
  29#include <linux/delay.h>
  30#include <linux/i2c/pmbus.h>
  31#include "pmbus.h"
  32
  33/*
  34 * Constants needed to determine number of sensors, booleans, and labels.
  35 */
  36#define PMBUS_MAX_INPUT_SENSORS		22	/* 10*volt, 7*curr, 5*power */
  37#define PMBUS_VOUT_SENSORS_PER_PAGE	9	/* input, min, max, lcrit,
  38						   crit, lowest, highest, avg,
  39						   reset */
  40#define PMBUS_IOUT_SENSORS_PER_PAGE	8	/* input, min, max, crit,
  41						   lowest, highest, avg,
  42						   reset */
  43#define PMBUS_POUT_SENSORS_PER_PAGE	7	/* input, cap, max, crit,
  44						 * highest, avg, reset
  45						 */
  46#define PMBUS_MAX_SENSORS_PER_FAN	1	/* input */
  47#define PMBUS_MAX_SENSORS_PER_TEMP	9	/* input, min, max, lcrit,
  48						 * crit, lowest, highest, avg,
  49						 * reset
  50						 */
  51
  52#define PMBUS_MAX_INPUT_BOOLEANS	7	/* v: min_alarm, max_alarm,
  53						   lcrit_alarm, crit_alarm;
  54						   c: alarm, crit_alarm;
  55						   p: crit_alarm */
  56#define PMBUS_VOUT_BOOLEANS_PER_PAGE	4	/* min_alarm, max_alarm,
  57						   lcrit_alarm, crit_alarm */
  58#define PMBUS_IOUT_BOOLEANS_PER_PAGE	3	/* alarm, lcrit_alarm,
  59						   crit_alarm */
  60#define PMBUS_POUT_BOOLEANS_PER_PAGE	3	/* cap_alarm, alarm, crit_alarm
  61						 */
  62#define PMBUS_MAX_BOOLEANS_PER_FAN	2	/* alarm, fault */
  63#define PMBUS_MAX_BOOLEANS_PER_TEMP	4	/* min_alarm, max_alarm,
  64						   lcrit_alarm, crit_alarm */
  65
  66#define PMBUS_MAX_INPUT_LABELS		4	/* vin, vcap, iin, pin */
  67
  68/*
  69 * status, status_vout, status_iout, status_fans, status_fan34, and status_temp
  70 * are paged. status_input is unpaged.
  71 */
  72#define PB_NUM_STATUS_REG	(PMBUS_PAGES * 6 + 1)
  73
  74/*
  75 * Index into status register array, per status register group
  76 */
  77#define PB_STATUS_BASE		0
  78#define PB_STATUS_VOUT_BASE	(PB_STATUS_BASE + PMBUS_PAGES)
  79#define PB_STATUS_IOUT_BASE	(PB_STATUS_VOUT_BASE + PMBUS_PAGES)
  80#define PB_STATUS_FAN_BASE	(PB_STATUS_IOUT_BASE + PMBUS_PAGES)
  81#define PB_STATUS_FAN34_BASE	(PB_STATUS_FAN_BASE + PMBUS_PAGES)
  82#define PB_STATUS_INPUT_BASE	(PB_STATUS_FAN34_BASE + PMBUS_PAGES)
  83#define PB_STATUS_TEMP_BASE	(PB_STATUS_INPUT_BASE + 1)
  84
  85#define PMBUS_NAME_SIZE		24
  86
  87struct pmbus_sensor {
  88	char name[PMBUS_NAME_SIZE];	/* sysfs sensor name */
  89	struct sensor_device_attribute attribute;
  90	u8 page;		/* page number */
  91	u16 reg;		/* register */
  92	enum pmbus_sensor_classes class;	/* sensor class */
  93	bool update;		/* runtime sensor update needed */
  94	int data;		/* Sensor data.
  95				   Negative if there was a read error */
  96};
  97
  98struct pmbus_boolean {
  99	char name[PMBUS_NAME_SIZE];	/* sysfs boolean name */
 100	struct sensor_device_attribute attribute;
 101};
 102
 103struct pmbus_label {
 104	char name[PMBUS_NAME_SIZE];	/* sysfs label name */
 105	struct sensor_device_attribute attribute;
 106	char label[PMBUS_NAME_SIZE];	/* label */
 107};
 108
 109struct pmbus_data {
 110	struct device *hwmon_dev;
 111
 112	u32 flags;		/* from platform data */
 113
 114	int exponent;		/* linear mode: exponent for output voltages */
 115
 116	const struct pmbus_driver_info *info;
 117
 118	int max_attributes;
 119	int num_attributes;
 120	struct attribute **attributes;
 121	struct attribute_group group;
 122
 123	/*
 124	 * Sensors cover both sensor and limit registers.
 125	 */
 126	int max_sensors;
 127	int num_sensors;
 128	struct pmbus_sensor *sensors;
 129	/*
 130	 * Booleans are used for alarms.
 131	 * Values are determined from status registers.
 132	 */
 133	int max_booleans;
 134	int num_booleans;
 135	struct pmbus_boolean *booleans;
 136	/*
 137	 * Labels are used to map generic names (e.g., "in1")
 138	 * to PMBus specific names (e.g., "vin" or "vout1").
 139	 */
 140	int max_labels;
 141	int num_labels;
 142	struct pmbus_label *labels;
 143
 144	struct mutex update_lock;
 145	bool valid;
 146	unsigned long last_updated;	/* in jiffies */
 147
 148	/*
 149	 * A single status register covers multiple attributes,
 150	 * so we keep them all together.
 151	 */
 152	u8 status[PB_NUM_STATUS_REG];
 153
 154	u8 currpage;
 155};
 156
 157int pmbus_set_page(struct i2c_client *client, u8 page)
 158{
 159	struct pmbus_data *data = i2c_get_clientdata(client);
 160	int rv = 0;
 161	int newpage;
 162
 163	if (page != data->currpage) {
 164		rv = i2c_smbus_write_byte_data(client, PMBUS_PAGE, page);
 165		newpage = i2c_smbus_read_byte_data(client, PMBUS_PAGE);
 166		if (newpage != page)
 167			rv = -EIO;
 168		else
 169			data->currpage = page;
 170	}
 171	return rv;
 172}
 173EXPORT_SYMBOL_GPL(pmbus_set_page);
 174
 175int pmbus_write_byte(struct i2c_client *client, int page, u8 value)
 176{
 177	int rv;
 178
 179	if (page >= 0) {
 180		rv = pmbus_set_page(client, page);
 181		if (rv < 0)
 182			return rv;
 183	}
 184
 185	return i2c_smbus_write_byte(client, value);
 186}
 187EXPORT_SYMBOL_GPL(pmbus_write_byte);
 188
 189/*
 190 * _pmbus_write_byte() is similar to pmbus_write_byte(), but checks if
 191 * a device specific mapping funcion exists and calls it if necessary.
 192 */
 193static int _pmbus_write_byte(struct i2c_client *client, int page, u8 value)
 194{
 195	struct pmbus_data *data = i2c_get_clientdata(client);
 196	const struct pmbus_driver_info *info = data->info;
 197	int status;
 198
 199	if (info->write_byte) {
 200		status = info->write_byte(client, page, value);
 201		if (status != -ENODATA)
 202			return status;
 203	}
 204	return pmbus_write_byte(client, page, value);
 205}
 206
 207int pmbus_write_word_data(struct i2c_client *client, u8 page, u8 reg, u16 word)
 208{
 209	int rv;
 210
 211	rv = pmbus_set_page(client, page);
 212	if (rv < 0)
 213		return rv;
 214
 215	return i2c_smbus_write_word_data(client, reg, word);
 216}
 217EXPORT_SYMBOL_GPL(pmbus_write_word_data);
 218
 219/*
 220 * _pmbus_write_word_data() is similar to pmbus_write_word_data(), but checks if
 221 * a device specific mapping function exists and calls it if necessary.
 222 */
 223static int _pmbus_write_word_data(struct i2c_client *client, int page, int reg,
 224				  u16 word)
 225{
 226	struct pmbus_data *data = i2c_get_clientdata(client);
 227	const struct pmbus_driver_info *info = data->info;
 228	int status;
 229
 230	if (info->write_word_data) {
 231		status = info->write_word_data(client, page, reg, word);
 232		if (status != -ENODATA)
 233			return status;
 234	}
 235	if (reg >= PMBUS_VIRT_BASE)
 236		return -ENXIO;
 237	return pmbus_write_word_data(client, page, reg, word);
 238}
 239
 240int pmbus_read_word_data(struct i2c_client *client, u8 page, u8 reg)
 241{
 242	int rv;
 243
 244	rv = pmbus_set_page(client, page);
 245	if (rv < 0)
 246		return rv;
 247
 248	return i2c_smbus_read_word_data(client, reg);
 249}
 250EXPORT_SYMBOL_GPL(pmbus_read_word_data);
 251
 252/*
 253 * _pmbus_read_word_data() is similar to pmbus_read_word_data(), but checks if
 254 * a device specific mapping function exists and calls it if necessary.
 255 */
 256static int _pmbus_read_word_data(struct i2c_client *client, int page, int reg)
 257{
 258	struct pmbus_data *data = i2c_get_clientdata(client);
 259	const struct pmbus_driver_info *info = data->info;
 260	int status;
 261
 262	if (info->read_word_data) {
 263		status = info->read_word_data(client, page, reg);
 264		if (status != -ENODATA)
 265			return status;
 266	}
 267	if (reg >= PMBUS_VIRT_BASE)
 268		return -ENXIO;
 269	return pmbus_read_word_data(client, page, reg);
 270}
 271
 272int pmbus_read_byte_data(struct i2c_client *client, int page, u8 reg)
 273{
 274	int rv;
 275
 276	if (page >= 0) {
 277		rv = pmbus_set_page(client, page);
 278		if (rv < 0)
 279			return rv;
 280	}
 281
 282	return i2c_smbus_read_byte_data(client, reg);
 283}
 284EXPORT_SYMBOL_GPL(pmbus_read_byte_data);
 285
 286/*
 287 * _pmbus_read_byte_data() is similar to pmbus_read_byte_data(), but checks if
 288 * a device specific mapping function exists and calls it if necessary.
 289 */
 290static int _pmbus_read_byte_data(struct i2c_client *client, int page, int reg)
 291{
 292	struct pmbus_data *data = i2c_get_clientdata(client);
 293	const struct pmbus_driver_info *info = data->info;
 294	int status;
 295
 296	if (info->read_byte_data) {
 297		status = info->read_byte_data(client, page, reg);
 298		if (status != -ENODATA)
 299			return status;
 300	}
 301	return pmbus_read_byte_data(client, page, reg);
 302}
 303
 304static void pmbus_clear_fault_page(struct i2c_client *client, int page)
 305{
 306	_pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS);
 307}
 308
 309void pmbus_clear_faults(struct i2c_client *client)
 310{
 311	struct pmbus_data *data = i2c_get_clientdata(client);
 312	int i;
 313
 314	for (i = 0; i < data->info->pages; i++)
 315		pmbus_clear_fault_page(client, i);
 316}
 317EXPORT_SYMBOL_GPL(pmbus_clear_faults);
 318
 319static int pmbus_check_status_cml(struct i2c_client *client)
 320{
 321	int status, status2;
 322
 323	status = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_BYTE);
 324	if (status < 0 || (status & PB_STATUS_CML)) {
 325		status2 = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML);
 326		if (status2 < 0 || (status2 & PB_CML_FAULT_INVALID_COMMAND))
 327			return -EIO;
 328	}
 329	return 0;
 330}
 331
 332bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg)
 333{
 334	int rv;
 335	struct pmbus_data *data = i2c_get_clientdata(client);
 336
 337	rv = _pmbus_read_byte_data(client, page, reg);
 338	if (rv >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK))
 339		rv = pmbus_check_status_cml(client);
 340	pmbus_clear_fault_page(client, -1);
 341	return rv >= 0;
 342}
 343EXPORT_SYMBOL_GPL(pmbus_check_byte_register);
 344
 345bool pmbus_check_word_register(struct i2c_client *client, int page, int reg)
 346{
 347	int rv;
 348	struct pmbus_data *data = i2c_get_clientdata(client);
 349
 350	rv = _pmbus_read_word_data(client, page, reg);
 351	if (rv >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK))
 352		rv = pmbus_check_status_cml(client);
 353	pmbus_clear_fault_page(client, -1);
 354	return rv >= 0;
 355}
 356EXPORT_SYMBOL_GPL(pmbus_check_word_register);
 357
 358const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client *client)
 359{
 360	struct pmbus_data *data = i2c_get_clientdata(client);
 361
 362	return data->info;
 363}
 364EXPORT_SYMBOL_GPL(pmbus_get_driver_info);
 365
 366static struct pmbus_data *pmbus_update_device(struct device *dev)
 367{
 368	struct i2c_client *client = to_i2c_client(dev);
 369	struct pmbus_data *data = i2c_get_clientdata(client);
 370	const struct pmbus_driver_info *info = data->info;
 371
 372	mutex_lock(&data->update_lock);
 373	if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
 374		int i;
 375
 376		for (i = 0; i < info->pages; i++)
 377			data->status[PB_STATUS_BASE + i]
 378			    = _pmbus_read_byte_data(client, i,
 379						    PMBUS_STATUS_BYTE);
 380		for (i = 0; i < info->pages; i++) {
 381			if (!(info->func[i] & PMBUS_HAVE_STATUS_VOUT))
 382				continue;
 383			data->status[PB_STATUS_VOUT_BASE + i]
 384			  = _pmbus_read_byte_data(client, i, PMBUS_STATUS_VOUT);
 385		}
 386		for (i = 0; i < info->pages; i++) {
 387			if (!(info->func[i] & PMBUS_HAVE_STATUS_IOUT))
 388				continue;
 389			data->status[PB_STATUS_IOUT_BASE + i]
 390			  = _pmbus_read_byte_data(client, i, PMBUS_STATUS_IOUT);
 391		}
 392		for (i = 0; i < info->pages; i++) {
 393			if (!(info->func[i] & PMBUS_HAVE_STATUS_TEMP))
 394				continue;
 395			data->status[PB_STATUS_TEMP_BASE + i]
 396			  = _pmbus_read_byte_data(client, i,
 397						  PMBUS_STATUS_TEMPERATURE);
 398		}
 399		for (i = 0; i < info->pages; i++) {
 400			if (!(info->func[i] & PMBUS_HAVE_STATUS_FAN12))
 401				continue;
 402			data->status[PB_STATUS_FAN_BASE + i]
 403			  = _pmbus_read_byte_data(client, i,
 404						  PMBUS_STATUS_FAN_12);
 405		}
 406
 407		for (i = 0; i < info->pages; i++) {
 408			if (!(info->func[i] & PMBUS_HAVE_STATUS_FAN34))
 409				continue;
 410			data->status[PB_STATUS_FAN34_BASE + i]
 411			  = _pmbus_read_byte_data(client, i,
 412						  PMBUS_STATUS_FAN_34);
 413		}
 414
 415		if (info->func[0] & PMBUS_HAVE_STATUS_INPUT)
 416			data->status[PB_STATUS_INPUT_BASE]
 417			  = _pmbus_read_byte_data(client, 0,
 418						  PMBUS_STATUS_INPUT);
 419
 420		for (i = 0; i < data->num_sensors; i++) {
 421			struct pmbus_sensor *sensor = &data->sensors[i];
 422
 423			if (!data->valid || sensor->update)
 424				sensor->data
 425				    = _pmbus_read_word_data(client,
 426							    sensor->page,
 427							    sensor->reg);
 428		}
 429		pmbus_clear_faults(client);
 430		data->last_updated = jiffies;
 431		data->valid = 1;
 432	}
 433	mutex_unlock(&data->update_lock);
 434	return data;
 435}
 436
 437/*
 438 * Convert linear sensor values to milli- or micro-units
 439 * depending on sensor type.
 440 */
 441static long pmbus_reg2data_linear(struct pmbus_data *data,
 442				  struct pmbus_sensor *sensor)
 443{
 444	s16 exponent;
 445	s32 mantissa;
 446	long val;
 447
 448	if (sensor->class == PSC_VOLTAGE_OUT) {	/* LINEAR16 */
 449		exponent = data->exponent;
 450		mantissa = (u16) sensor->data;
 451	} else {				/* LINEAR11 */
 452		exponent = ((s16)sensor->data) >> 11;
 453		mantissa = ((s16)((sensor->data & 0x7ff) << 5)) >> 5;
 454	}
 455
 456	val = mantissa;
 457
 458	/* scale result to milli-units for all sensors except fans */
 459	if (sensor->class != PSC_FAN)
 460		val = val * 1000L;
 461
 462	/* scale result to micro-units for power sensors */
 463	if (sensor->class == PSC_POWER)
 464		val = val * 1000L;
 465
 466	if (exponent >= 0)
 467		val <<= exponent;
 468	else
 469		val >>= -exponent;
 470
 471	return val;
 472}
 473
 474/*
 475 * Convert direct sensor values to milli- or micro-units
 476 * depending on sensor type.
 477 */
 478static long pmbus_reg2data_direct(struct pmbus_data *data,
 479				  struct pmbus_sensor *sensor)
 480{
 481	long val = (s16) sensor->data;
 482	long m, b, R;
 483
 484	m = data->info->m[sensor->class];
 485	b = data->info->b[sensor->class];
 486	R = data->info->R[sensor->class];
 487
 488	if (m == 0)
 489		return 0;
 490
 491	/* X = 1/m * (Y * 10^-R - b) */
 492	R = -R;
 493	/* scale result to milli-units for everything but fans */
 494	if (sensor->class != PSC_FAN) {
 495		R += 3;
 496		b *= 1000;
 497	}
 498
 499	/* scale result to micro-units for power sensors */
 500	if (sensor->class == PSC_POWER) {
 501		R += 3;
 502		b *= 1000;
 503	}
 504
 505	while (R > 0) {
 506		val *= 10;
 507		R--;
 508	}
 509	while (R < 0) {
 510		val = DIV_ROUND_CLOSEST(val, 10);
 511		R++;
 512	}
 513
 514	return (val - b) / m;
 515}
 516
 517/*
 518 * Convert VID sensor values to milli- or micro-units
 519 * depending on sensor type.
 520 * We currently only support VR11.
 521 */
 522static long pmbus_reg2data_vid(struct pmbus_data *data,
 523			       struct pmbus_sensor *sensor)
 524{
 525	long val = sensor->data;
 526
 527	if (val < 0x02 || val > 0xb2)
 528		return 0;
 529	return DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100);
 530}
 531
 532static long pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor)
 533{
 534	long val;
 535
 536	switch (data->info->format[sensor->class]) {
 537	case direct:
 538		val = pmbus_reg2data_direct(data, sensor);
 539		break;
 540	case vid:
 541		val = pmbus_reg2data_vid(data, sensor);
 542		break;
 543	case linear:
 544	default:
 545		val = pmbus_reg2data_linear(data, sensor);
 546		break;
 547	}
 548	return val;
 549}
 550
 551#define MAX_MANTISSA	(1023 * 1000)
 552#define MIN_MANTISSA	(511 * 1000)
 553
 554static u16 pmbus_data2reg_linear(struct pmbus_data *data,
 555				 enum pmbus_sensor_classes class, long val)
 556{
 557	s16 exponent = 0, mantissa;
 558	bool negative = false;
 559
 560	/* simple case */
 561	if (val == 0)
 562		return 0;
 563
 564	if (class == PSC_VOLTAGE_OUT) {
 565		/* LINEAR16 does not support negative voltages */
 566		if (val < 0)
 567			return 0;
 568
 569		/*
 570		 * For a static exponents, we don't have a choice
 571		 * but to adjust the value to it.
 572		 */
 573		if (data->exponent < 0)
 574			val <<= -data->exponent;
 575		else
 576			val >>= data->exponent;
 577		val = DIV_ROUND_CLOSEST(val, 1000);
 578		return val & 0xffff;
 579	}
 580
 581	if (val < 0) {
 582		negative = true;
 583		val = -val;
 584	}
 585
 586	/* Power is in uW. Convert to mW before converting. */
 587	if (class == PSC_POWER)
 588		val = DIV_ROUND_CLOSEST(val, 1000L);
 589
 590	/*
 591	 * For simplicity, convert fan data to milli-units
 592	 * before calculating the exponent.
 593	 */
 594	if (class == PSC_FAN)
 595		val = val * 1000;
 596
 597	/* Reduce large mantissa until it fits into 10 bit */
 598	while (val >= MAX_MANTISSA && exponent < 15) {
 599		exponent++;
 600		val >>= 1;
 601	}
 602	/* Increase small mantissa to improve precision */
 603	while (val < MIN_MANTISSA && exponent > -15) {
 604		exponent--;
 605		val <<= 1;
 606	}
 607
 608	/* Convert mantissa from milli-units to units */
 609	mantissa = DIV_ROUND_CLOSEST(val, 1000);
 610
 611	/* Ensure that resulting number is within range */
 612	if (mantissa > 0x3ff)
 613		mantissa = 0x3ff;
 614
 615	/* restore sign */
 616	if (negative)
 617		mantissa = -mantissa;
 618
 619	/* Convert to 5 bit exponent, 11 bit mantissa */
 620	return (mantissa & 0x7ff) | ((exponent << 11) & 0xf800);
 621}
 622
 623static u16 pmbus_data2reg_direct(struct pmbus_data *data,
 624				 enum pmbus_sensor_classes class, long val)
 625{
 626	long m, b, R;
 627
 628	m = data->info->m[class];
 629	b = data->info->b[class];
 630	R = data->info->R[class];
 631
 632	/* Power is in uW. Adjust R and b. */
 633	if (class == PSC_POWER) {
 634		R -= 3;
 635		b *= 1000;
 636	}
 637
 638	/* Calculate Y = (m * X + b) * 10^R */
 639	if (class != PSC_FAN) {
 640		R -= 3;		/* Adjust R and b for data in milli-units */
 641		b *= 1000;
 642	}
 643	val = val * m + b;
 644
 645	while (R > 0) {
 646		val *= 10;
 647		R--;
 648	}
 649	while (R < 0) {
 650		val = DIV_ROUND_CLOSEST(val, 10);
 651		R++;
 652	}
 653
 654	return val;
 655}
 656
 657static u16 pmbus_data2reg_vid(struct pmbus_data *data,
 658			      enum pmbus_sensor_classes class, long val)
 659{
 660	val = SENSORS_LIMIT(val, 500, 1600);
 661
 662	return 2 + DIV_ROUND_CLOSEST((1600 - val) * 100, 625);
 663}
 664
 665static u16 pmbus_data2reg(struct pmbus_data *data,
 666			  enum pmbus_sensor_classes class, long val)
 667{
 668	u16 regval;
 669
 670	switch (data->info->format[class]) {
 671	case direct:
 672		regval = pmbus_data2reg_direct(data, class, val);
 673		break;
 674	case vid:
 675		regval = pmbus_data2reg_vid(data, class, val);
 676		break;
 677	case linear:
 678	default:
 679		regval = pmbus_data2reg_linear(data, class, val);
 680		break;
 681	}
 682	return regval;
 683}
 684
 685/*
 686 * Return boolean calculated from converted data.
 687 * <index> defines a status register index and mask, and optionally
 688 * two sensor indexes.
 689 * The upper half-word references the two sensors,
 690 * two sensor indices.
 691 * The upper half-word references the two optional sensors,
 692 * the lower half word references status register and mask.
 693 * The function returns true if (status[reg] & mask) is true and,
 694 * if specified, if v1 >= v2.
 695 * To determine if an object exceeds upper limits, specify <v, limit>.
 696 * To determine if an object exceeds lower limits, specify <limit, v>.
 697 *
 698 * For booleans created with pmbus_add_boolean_reg(), only the lower 16 bits of
 699 * index are set. s1 and s2 (the sensor index values) are zero in this case.
 700 * The function returns true if (status[reg] & mask) is true.
 701 *
 702 * If the boolean was created with pmbus_add_boolean_cmp(), a comparison against
 703 * a specified limit has to be performed to determine the boolean result.
 704 * In this case, the function returns true if v1 >= v2 (where v1 and v2 are
 705 * sensor values referenced by sensor indices s1 and s2).
 706 *
 707 * To determine if an object exceeds upper limits, specify <s1,s2> = <v,limit>.
 708 * To determine if an object exceeds lower limits, specify <s1,s2> = <limit,v>.
 709 *
 710 * If a negative value is stored in any of the referenced registers, this value
 711 * reflects an error code which will be returned.
 712 */
 713static int pmbus_get_boolean(struct pmbus_data *data, int index)
 714{
 715	u8 s1 = (index >> 24) & 0xff;
 716	u8 s2 = (index >> 16) & 0xff;
 717	u8 reg = (index >> 8) & 0xff;
 718	u8 mask = index & 0xff;
 719	int ret, status;
 720	u8 regval;
 721
 722	status = data->status[reg];
 723	if (status < 0)
 724		return status;
 725
 726	regval = status & mask;
 727	if (!s1 && !s2)
 728		ret = !!regval;
 729	else {
 730		long v1, v2;
 731		struct pmbus_sensor *sensor1, *sensor2;
 732
 733		sensor1 = &data->sensors[s1];
 734		if (sensor1->data < 0)
 735			return sensor1->data;
 736		sensor2 = &data->sensors[s2];
 737		if (sensor2->data < 0)
 738			return sensor2->data;
 739
 740		v1 = pmbus_reg2data(data, sensor1);
 741		v2 = pmbus_reg2data(data, sensor2);
 742		ret = !!(regval && v1 >= v2);
 743	}
 744	return ret;
 745}
 746
 747static ssize_t pmbus_show_boolean(struct device *dev,
 748				  struct device_attribute *da, char *buf)
 749{
 750	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 751	struct pmbus_data *data = pmbus_update_device(dev);
 752	int val;
 753
 754	val = pmbus_get_boolean(data, attr->index);
 755	if (val < 0)
 756		return val;
 757	return snprintf(buf, PAGE_SIZE, "%d\n", val);
 758}
 759
 760static ssize_t pmbus_show_sensor(struct device *dev,
 761				 struct device_attribute *da, char *buf)
 762{
 763	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 764	struct pmbus_data *data = pmbus_update_device(dev);
 765	struct pmbus_sensor *sensor;
 766
 767	sensor = &data->sensors[attr->index];
 768	if (sensor->data < 0)
 769		return sensor->data;
 770
 771	return snprintf(buf, PAGE_SIZE, "%ld\n", pmbus_reg2data(data, sensor));
 772}
 773
 774static ssize_t pmbus_set_sensor(struct device *dev,
 775				struct device_attribute *devattr,
 776				const char *buf, size_t count)
 777{
 778	struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
 779	struct i2c_client *client = to_i2c_client(dev);
 780	struct pmbus_data *data = i2c_get_clientdata(client);
 781	struct pmbus_sensor *sensor = &data->sensors[attr->index];
 782	ssize_t rv = count;
 783	long val = 0;
 784	int ret;
 785	u16 regval;
 786
 787	if (kstrtol(buf, 10, &val) < 0)
 788		return -EINVAL;
 789
 790	mutex_lock(&data->update_lock);
 791	regval = pmbus_data2reg(data, sensor->class, val);
 792	ret = _pmbus_write_word_data(client, sensor->page, sensor->reg, regval);
 793	if (ret < 0)
 794		rv = ret;
 795	else
 796		data->sensors[attr->index].data = regval;
 797	mutex_unlock(&data->update_lock);
 798	return rv;
 799}
 800
 801static ssize_t pmbus_show_label(struct device *dev,
 802				struct device_attribute *da, char *buf)
 803{
 804	struct i2c_client *client = to_i2c_client(dev);
 805	struct pmbus_data *data = i2c_get_clientdata(client);
 806	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
 807
 808	return snprintf(buf, PAGE_SIZE, "%s\n",
 809			data->labels[attr->index].label);
 810}
 811
 812#define PMBUS_ADD_ATTR(data, _name, _idx, _mode, _type, _show, _set)	\
 813do {									\
 814	struct sensor_device_attribute *a				\
 815	    = &data->_type##s[data->num_##_type##s].attribute;		\
 816	BUG_ON(data->num_attributes >= data->max_attributes);		\
 817	sysfs_attr_init(&a->dev_attr.attr);				\
 818	a->dev_attr.attr.name = _name;					\
 819	a->dev_attr.attr.mode = _mode;					\
 820	a->dev_attr.show = _show;					\
 821	a->dev_attr.store = _set;					\
 822	a->index = _idx;						\
 823	data->attributes[data->num_attributes] = &a->dev_attr.attr;	\
 824	data->num_attributes++;						\
 825} while (0)
 826
 827#define PMBUS_ADD_GET_ATTR(data, _name, _type, _idx)			\
 828	PMBUS_ADD_ATTR(data, _name, _idx, S_IRUGO, _type,		\
 829		       pmbus_show_##_type,  NULL)
 830
 831#define PMBUS_ADD_SET_ATTR(data, _name, _type, _idx)			\
 832	PMBUS_ADD_ATTR(data, _name, _idx, S_IWUSR | S_IRUGO, _type,	\
 833		       pmbus_show_##_type, pmbus_set_##_type)
 834
 835static void pmbus_add_boolean(struct pmbus_data *data,
 836			      const char *name, const char *type, int seq,
 837			      int idx)
 838{
 839	struct pmbus_boolean *boolean;
 840
 841	BUG_ON(data->num_booleans >= data->max_booleans);
 842
 843	boolean = &data->booleans[data->num_booleans];
 844
 845	snprintf(boolean->name, sizeof(boolean->name), "%s%d_%s",
 846		 name, seq, type);
 847	PMBUS_ADD_GET_ATTR(data, boolean->name, boolean, idx);
 848	data->num_booleans++;
 849}
 850
 851static void pmbus_add_boolean_reg(struct pmbus_data *data,
 852				  const char *name, const char *type,
 853				  int seq, int reg, int bit)
 854{
 855	pmbus_add_boolean(data, name, type, seq, (reg << 8) | bit);
 856}
 857
 858static void pmbus_add_boolean_cmp(struct pmbus_data *data,
 859				  const char *name, const char *type,
 860				  int seq, int i1, int i2, int reg, int mask)
 861{
 862	pmbus_add_boolean(data, name, type, seq,
 863			  (i1 << 24) | (i2 << 16) | (reg << 8) | mask);
 864}
 865
 866static void pmbus_add_sensor(struct pmbus_data *data,
 867			     const char *name, const char *type, int seq,
 868			     int page, int reg, enum pmbus_sensor_classes class,
 869			     bool update, bool readonly)
 870{
 871	struct pmbus_sensor *sensor;
 872
 873	BUG_ON(data->num_sensors >= data->max_sensors);
 874
 875	sensor = &data->sensors[data->num_sensors];
 876	snprintf(sensor->name, sizeof(sensor->name), "%s%d_%s",
 877		 name, seq, type);
 878	sensor->page = page;
 879	sensor->reg = reg;
 880	sensor->class = class;
 881	sensor->update = update;
 882	if (readonly)
 883		PMBUS_ADD_GET_ATTR(data, sensor->name, sensor,
 884				   data->num_sensors);
 885	else
 886		PMBUS_ADD_SET_ATTR(data, sensor->name, sensor,
 887				   data->num_sensors);
 888	data->num_sensors++;
 889}
 890
 891static void pmbus_add_label(struct pmbus_data *data,
 892			    const char *name, int seq,
 893			    const char *lstring, int index)
 894{
 895	struct pmbus_label *label;
 896
 897	BUG_ON(data->num_labels >= data->max_labels);
 898
 899	label = &data->labels[data->num_labels];
 900	snprintf(label->name, sizeof(label->name), "%s%d_label", name, seq);
 901	if (!index)
 902		strncpy(label->label, lstring, sizeof(label->label) - 1);
 903	else
 904		snprintf(label->label, sizeof(label->label), "%s%d", lstring,
 905			 index);
 906
 907	PMBUS_ADD_GET_ATTR(data, label->name, label, data->num_labels);
 908	data->num_labels++;
 909}
 910
 911/*
 912 * Determine maximum number of sensors, booleans, and labels.
 913 * To keep things simple, only make a rough high estimate.
 914 */
 915static void pmbus_find_max_attr(struct i2c_client *client,
 916				struct pmbus_data *data)
 917{
 918	const struct pmbus_driver_info *info = data->info;
 919	int page, max_sensors, max_booleans, max_labels;
 920
 921	max_sensors = PMBUS_MAX_INPUT_SENSORS;
 922	max_booleans = PMBUS_MAX_INPUT_BOOLEANS;
 923	max_labels = PMBUS_MAX_INPUT_LABELS;
 924
 925	for (page = 0; page < info->pages; page++) {
 926		if (info->func[page] & PMBUS_HAVE_VOUT) {
 927			max_sensors += PMBUS_VOUT_SENSORS_PER_PAGE;
 928			max_booleans += PMBUS_VOUT_BOOLEANS_PER_PAGE;
 929			max_labels++;
 930		}
 931		if (info->func[page] & PMBUS_HAVE_IOUT) {
 932			max_sensors += PMBUS_IOUT_SENSORS_PER_PAGE;
 933			max_booleans += PMBUS_IOUT_BOOLEANS_PER_PAGE;
 934			max_labels++;
 935		}
 936		if (info->func[page] & PMBUS_HAVE_POUT) {
 937			max_sensors += PMBUS_POUT_SENSORS_PER_PAGE;
 938			max_booleans += PMBUS_POUT_BOOLEANS_PER_PAGE;
 939			max_labels++;
 940		}
 941		if (info->func[page] & PMBUS_HAVE_FAN12) {
 942			max_sensors += 2 * PMBUS_MAX_SENSORS_PER_FAN;
 943			max_booleans += 2 * PMBUS_MAX_BOOLEANS_PER_FAN;
 944		}
 945		if (info->func[page] & PMBUS_HAVE_FAN34) {
 946			max_sensors += 2 * PMBUS_MAX_SENSORS_PER_FAN;
 947			max_booleans += 2 * PMBUS_MAX_BOOLEANS_PER_FAN;
 948		}
 949		if (info->func[page] & PMBUS_HAVE_TEMP) {
 950			max_sensors += PMBUS_MAX_SENSORS_PER_TEMP;
 951			max_booleans += PMBUS_MAX_BOOLEANS_PER_TEMP;
 952		}
 953		if (info->func[page] & PMBUS_HAVE_TEMP2) {
 954			max_sensors += PMBUS_MAX_SENSORS_PER_TEMP;
 955			max_booleans += PMBUS_MAX_BOOLEANS_PER_TEMP;
 956		}
 957		if (info->func[page] & PMBUS_HAVE_TEMP3) {
 958			max_sensors += PMBUS_MAX_SENSORS_PER_TEMP;
 959			max_booleans += PMBUS_MAX_BOOLEANS_PER_TEMP;
 960		}
 961	}
 962	data->max_sensors = max_sensors;
 963	data->max_booleans = max_booleans;
 964	data->max_labels = max_labels;
 965	data->max_attributes = max_sensors + max_booleans + max_labels;
 966}
 967
 968/*
 969 * Search for attributes. Allocate sensors, booleans, and labels as needed.
 970 */
 971
 972/*
 973 * The pmbus_limit_attr structure describes a single limit attribute
 974 * and its associated alarm attribute.
 975 */
 976struct pmbus_limit_attr {
 977	u16 reg;		/* Limit register */
 978	bool update;		/* True if register needs updates */
 979	bool low;		/* True if low limit; for limits with compare
 980				   functions only */
 981	const char *attr;	/* Attribute name */
 982	const char *alarm;	/* Alarm attribute name */
 983	u32 sbit;		/* Alarm attribute status bit */
 984};
 985
 986/*
 987 * The pmbus_sensor_attr structure describes one sensor attribute. This
 988 * description includes a reference to the associated limit attributes.
 989 */
 990struct pmbus_sensor_attr {
 991	u8 reg;				/* sensor register */
 992	enum pmbus_sensor_classes class;/* sensor class */
 993	const char *label;		/* sensor label */
 994	bool paged;			/* true if paged sensor */
 995	bool update;			/* true if update needed */
 996	bool compare;			/* true if compare function needed */
 997	u32 func;			/* sensor mask */
 998	u32 sfunc;			/* sensor status mask */
 999	int sbase;			/* status base register */
1000	u32 gbit;			/* generic status bit */
1001	const struct pmbus_limit_attr *limit;/* limit registers */
1002	int nlimit;			/* # of limit registers */
1003};
1004
1005/*
1006 * Add a set of limit attributes and, if supported, the associated
1007 * alarm attributes.
1008 */
1009static bool pmbus_add_limit_attrs(struct i2c_client *client,
1010				  struct pmbus_data *data,
1011				  const struct pmbus_driver_info *info,
1012				  const char *name, int index, int page,
1013				  int cbase,
1014				  const struct pmbus_sensor_attr *attr)
1015{
1016	const struct pmbus_limit_attr *l = attr->limit;
1017	int nlimit = attr->nlimit;
1018	bool have_alarm = false;
1019	int i, cindex;
1020
1021	for (i = 0; i < nlimit; i++) {
1022		if (pmbus_check_word_register(client, page, l->reg)) {
1023			cindex = data->num_sensors;
1024			pmbus_add_sensor(data, name, l->attr, index, page,
1025					 l->reg, attr->class,
1026					 attr->update || l->update,
1027					 false);
1028			if (l->sbit && (info->func[page] & attr->sfunc)) {
1029				if (attr->compare) {
1030					pmbus_add_boolean_cmp(data, name,
1031						l->alarm, index,
1032						l->low ? cindex : cbase,
1033						l->low ? cbase : cindex,
1034						attr->sbase + page, l->sbit);
1035				} else {
1036					pmbus_add_boolean_reg(data, name,
1037						l->alarm, index,
1038						attr->sbase + page, l->sbit);
1039				}
1040				have_alarm = true;
1041			}
1042		}
1043		l++;
1044	}
1045	return have_alarm;
1046}
1047
1048static void pmbus_add_sensor_attrs_one(struct i2c_client *client,
1049				       struct pmbus_data *data,
1050				       const struct pmbus_driver_info *info,
1051				       const char *name,
1052				       int index, int page,
1053				       const struct pmbus_sensor_attr *attr)
1054{
1055	bool have_alarm;
1056	int cbase = data->num_sensors;
1057
1058	if (attr->label)
1059		pmbus_add_label(data, name, index, attr->label,
1060				attr->paged ? page + 1 : 0);
1061	pmbus_add_sensor(data, name, "input", index, page, attr->reg,
1062			 attr->class, true, true);
1063	if (attr->sfunc) {
1064		have_alarm = pmbus_add_limit_attrs(client, data, info, name,
1065						   index, page, cbase, attr);
1066		/*
1067		 * Add generic alarm attribute only if there are no individual
1068		 * alarm attributes, if there is a global alarm bit, and if
1069		 * the generic status register for this page is accessible.
1070		 */
1071		if (!have_alarm && attr->gbit &&
1072		    pmbus_check_byte_register(client, page, PMBUS_STATUS_BYTE))
1073			pmbus_add_boolean_reg(data, name, "alarm", index,
1074					      PB_STATUS_BASE + page,
1075					      attr->gbit);
1076	}
1077}
1078
1079static void pmbus_add_sensor_attrs(struct i2c_client *client,
1080				   struct pmbus_data *data,
1081				   const char *name,
1082				   const struct pmbus_sensor_attr *attrs,
1083				   int nattrs)
1084{
1085	const struct pmbus_driver_info *info = data->info;
1086	int index, i;
1087
1088	index = 1;
1089	for (i = 0; i < nattrs; i++) {
1090		int page, pages;
1091
1092		pages = attrs->paged ? info->pages : 1;
1093		for (page = 0; page < pages; page++) {
1094			if (!(info->func[page] & attrs->func))
1095				continue;
1096			pmbus_add_sensor_attrs_one(client, data, info, name,
1097						   index, page, attrs);
1098			index++;
1099		}
1100		attrs++;
1101	}
1102}
1103
1104static const struct pmbus_limit_attr vin_limit_attrs[] = {
1105	{
1106		.reg = PMBUS_VIN_UV_WARN_LIMIT,
1107		.attr = "min",
1108		.alarm = "min_alarm",
1109		.sbit = PB_VOLTAGE_UV_WARNING,
1110	}, {
1111		.reg = PMBUS_VIN_UV_FAULT_LIMIT,
1112		.attr = "lcrit",
1113		.alarm = "lcrit_alarm",
1114		.sbit = PB_VOLTAGE_UV_FAULT,
1115	}, {
1116		.reg = PMBUS_VIN_OV_WARN_LIMIT,
1117		.attr = "max",
1118		.alarm = "max_alarm",
1119		.sbit = PB_VOLTAGE_OV_WARNING,
1120	}, {
1121		.reg = PMBUS_VIN_OV_FAULT_LIMIT,
1122		.attr = "crit",
1123		.alarm = "crit_alarm",
1124		.sbit = PB_VOLTAGE_OV_FAULT,
1125	}, {
1126		.reg = PMBUS_VIRT_READ_VIN_AVG,
1127		.update = true,
1128		.attr = "average",
1129	}, {
1130		.reg = PMBUS_VIRT_READ_VIN_MIN,
1131		.update = true,
1132		.attr = "lowest",
1133	}, {
1134		.reg = PMBUS_VIRT_READ_VIN_MAX,
1135		.update = true,
1136		.attr = "highest",
1137	}, {
1138		.reg = PMBUS_VIRT_RESET_VIN_HISTORY,
1139		.attr = "reset_history",
1140	},
1141};
1142
1143static const struct pmbus_limit_attr vout_limit_attrs[] = {
1144	{
1145		.reg = PMBUS_VOUT_UV_WARN_LIMIT,
1146		.attr = "min",
1147		.alarm = "min_alarm",
1148		.sbit = PB_VOLTAGE_UV_WARNING,
1149	}, {
1150		.reg = PMBUS_VOUT_UV_FAULT_LIMIT,
1151		.attr = "lcrit",
1152		.alarm = "lcrit_alarm",
1153		.sbit = PB_VOLTAGE_UV_FAULT,
1154	}, {
1155		.reg = PMBUS_VOUT_OV_WARN_LIMIT,
1156		.attr = "max",
1157		.alarm = "max_alarm",
1158		.sbit = PB_VOLTAGE_OV_WARNING,
1159	}, {
1160		.reg = PMBUS_VOUT_OV_FAULT_LIMIT,
1161		.attr = "crit",
1162		.alarm = "crit_alarm",
1163		.sbit = PB_VOLTAGE_OV_FAULT,
1164	}, {
1165		.reg = PMBUS_VIRT_READ_VOUT_AVG,
1166		.update = true,
1167		.attr = "average",
1168	}, {
1169		.reg = PMBUS_VIRT_READ_VOUT_MIN,
1170		.update = true,
1171		.attr = "lowest",
1172	}, {
1173		.reg = PMBUS_VIRT_READ_VOUT_MAX,
1174		.update = true,
1175		.attr = "highest",
1176	}, {
1177		.reg = PMBUS_VIRT_RESET_VOUT_HISTORY,
1178		.attr = "reset_history",
1179	}
1180};
1181
1182static const struct pmbus_sensor_attr voltage_attributes[] = {
1183	{
1184		.reg = PMBUS_READ_VIN,
1185		.class = PSC_VOLTAGE_IN,
1186		.label = "vin",
1187		.func = PMBUS_HAVE_VIN,
1188		.sfunc = PMBUS_HAVE_STATUS_INPUT,
1189		.sbase = PB_STATUS_INPUT_BASE,
1190		.gbit = PB_STATUS_VIN_UV,
1191		.limit = vin_limit_attrs,
1192		.nlimit = ARRAY_SIZE(vin_limit_attrs),
1193	}, {
1194		.reg = PMBUS_READ_VCAP,
1195		.class = PSC_VOLTAGE_IN,
1196		.label = "vcap",
1197		.func = PMBUS_HAVE_VCAP,
1198	}, {
1199		.reg = PMBUS_READ_VOUT,
1200		.class = PSC_VOLTAGE_OUT,
1201		.label = "vout",
1202		.paged = true,
1203		.func = PMBUS_HAVE_VOUT,
1204		.sfunc = PMBUS_HAVE_STATUS_VOUT,
1205		.sbase = PB_STATUS_VOUT_BASE,
1206		.gbit = PB_STATUS_VOUT_OV,
1207		.limit = vout_limit_attrs,
1208		.nlimit = ARRAY_SIZE(vout_limit_attrs),
1209	}
1210};
1211
1212/* Current attributes */
1213
1214static const struct pmbus_limit_attr iin_limit_attrs[] = {
1215	{
1216		.reg = PMBUS_IIN_OC_WARN_LIMIT,
1217		.attr = "max",
1218		.alarm = "max_alarm",
1219		.sbit = PB_IIN_OC_WARNING,
1220	}, {
1221		.reg = PMBUS_IIN_OC_FAULT_LIMIT,
1222		.attr = "crit",
1223		.alarm = "crit_alarm",
1224		.sbit = PB_IIN_OC_FAULT,
1225	}, {
1226		.reg = PMBUS_VIRT_READ_IIN_AVG,
1227		.update = true,
1228		.attr = "average",
1229	}, {
1230		.reg = PMBUS_VIRT_READ_IIN_MIN,
1231		.update = true,
1232		.attr = "lowest",
1233	}, {
1234		.reg = PMBUS_VIRT_READ_IIN_MAX,
1235		.update = true,
1236		.attr = "highest",
1237	}, {
1238		.reg = PMBUS_VIRT_RESET_IIN_HISTORY,
1239		.attr = "reset_history",
1240	}
1241};
1242
1243static const struct pmbus_limit_attr iout_limit_attrs[] = {
1244	{
1245		.reg = PMBUS_IOUT_OC_WARN_LIMIT,
1246		.attr = "max",
1247		.alarm = "max_alarm",
1248		.sbit = PB_IOUT_OC_WARNING,
1249	}, {
1250		.reg = PMBUS_IOUT_UC_FAULT_LIMIT,
1251		.attr = "lcrit",
1252		.alarm = "lcrit_alarm",
1253		.sbit = PB_IOUT_UC_FAULT,
1254	}, {
1255		.reg = PMBUS_IOUT_OC_FAULT_LIMIT,
1256		.attr = "crit",
1257		.alarm = "crit_alarm",
1258		.sbit = PB_IOUT_OC_FAULT,
1259	}, {
1260		.reg = PMBUS_VIRT_READ_IOUT_AVG,
1261		.update = true,
1262		.attr = "average",
1263	}, {
1264		.reg = PMBUS_VIRT_READ_IOUT_MIN,
1265		.update = true,
1266		.attr = "lowest",
1267	}, {
1268		.reg = PMBUS_VIRT_READ_IOUT_MAX,
1269		.update = true,
1270		.attr = "highest",
1271	}, {
1272		.reg = PMBUS_VIRT_RESET_IOUT_HISTORY,
1273		.attr = "reset_history",
1274	}
1275};
1276
1277static const struct pmbus_sensor_attr current_attributes[] = {
1278	{
1279		.reg = PMBUS_READ_IIN,
1280		.class = PSC_CURRENT_IN,
1281		.label = "iin",
1282		.func = PMBUS_HAVE_IIN,
1283		.sfunc = PMBUS_HAVE_STATUS_INPUT,
1284		.sbase = PB_STATUS_INPUT_BASE,
1285		.limit = iin_limit_attrs,
1286		.nlimit = ARRAY_SIZE(iin_limit_attrs),
1287	}, {
1288		.reg = PMBUS_READ_IOUT,
1289		.class = PSC_CURRENT_OUT,
1290		.label = "iout",
1291		.paged = true,
1292		.func = PMBUS_HAVE_IOUT,
1293		.sfunc = PMBUS_HAVE_STATUS_IOUT,
1294		.sbase = PB_STATUS_IOUT_BASE,
1295		.gbit = PB_STATUS_IOUT_OC,
1296		.limit = iout_limit_attrs,
1297		.nlimit = ARRAY_SIZE(iout_limit_attrs),
1298	}
1299};
1300
1301/* Power attributes */
1302
1303static const struct pmbus_limit_attr pin_limit_attrs[] = {
1304	{
1305		.reg = PMBUS_PIN_OP_WARN_LIMIT,
1306		.attr = "max",
1307		.alarm = "alarm",
1308		.sbit = PB_PIN_OP_WARNING,
1309	}, {
1310		.reg = PMBUS_VIRT_READ_PIN_AVG,
1311		.update = true,
1312		.attr = "average",
1313	}, {
1314		.reg = PMBUS_VIRT_READ_PIN_MAX,
1315		.update = true,
1316		.attr = "input_highest",
1317	}, {
1318		.reg = PMBUS_VIRT_RESET_PIN_HISTORY,
1319		.attr = "reset_history",
1320	}
1321};
1322
1323static const struct pmbus_limit_attr pout_limit_attrs[] = {
1324	{
1325		.reg = PMBUS_POUT_MAX,
1326		.attr = "cap",
1327		.alarm = "cap_alarm",
1328		.sbit = PB_POWER_LIMITING,
1329	}, {
1330		.reg = PMBUS_POUT_OP_WARN_LIMIT,
1331		.attr = "max",
1332		.alarm = "max_alarm",
1333		.sbit = PB_POUT_OP_WARNING,
1334	}, {
1335		.reg = PMBUS_POUT_OP_FAULT_LIMIT,
1336		.attr = "crit",
1337		.alarm = "crit_alarm",
1338		.sbit = PB_POUT_OP_FAULT,
1339	}, {
1340		.reg = PMBUS_VIRT_READ_POUT_AVG,
1341		.update = true,
1342		.attr = "average",
1343	}, {
1344		.reg = PMBUS_VIRT_READ_POUT_MAX,
1345		.update = true,
1346		.attr = "input_highest",
1347	}, {
1348		.reg = PMBUS_VIRT_RESET_POUT_HISTORY,
1349		.attr = "reset_history",
1350	}
1351};
1352
1353static const struct pmbus_sensor_attr power_attributes[] = {
1354	{
1355		.reg = PMBUS_READ_PIN,
1356		.class = PSC_POWER,
1357		.label = "pin",
1358		.func = PMBUS_HAVE_PIN,
1359		.sfunc = PMBUS_HAVE_STATUS_INPUT,
1360		.sbase = PB_STATUS_INPUT_BASE,
1361		.limit = pin_limit_attrs,
1362		.nlimit = ARRAY_SIZE(pin_limit_attrs),
1363	}, {
1364		.reg = PMBUS_READ_POUT,
1365		.class = PSC_POWER,
1366		.label = "pout",
1367		.paged = true,
1368		.func = PMBUS_HAVE_POUT,
1369		.sfunc = PMBUS_HAVE_STATUS_IOUT,
1370		.sbase = PB_STATUS_IOUT_BASE,
1371		.limit = pout_limit_attrs,
1372		.nlimit = ARRAY_SIZE(pout_limit_attrs),
1373	}
1374};
1375
1376/* Temperature atributes */
1377
1378static const struct pmbus_limit_attr temp_limit_attrs[] = {
1379	{
1380		.reg = PMBUS_UT_WARN_LIMIT,
1381		.low = true,
1382		.attr = "min",
1383		.alarm = "min_alarm",
1384		.sbit = PB_TEMP_UT_WARNING,
1385	}, {
1386		.reg = PMBUS_UT_FAULT_LIMIT,
1387		.low = true,
1388		.attr = "lcrit",
1389		.alarm = "lcrit_alarm",
1390		.sbit = PB_TEMP_UT_FAULT,
1391	}, {
1392		.reg = PMBUS_OT_WARN_LIMIT,
1393		.attr = "max",
1394		.alarm = "max_alarm",
1395		.sbit = PB_TEMP_OT_WARNING,
1396	}, {
1397		.reg = PMBUS_OT_FAULT_LIMIT,
1398		.attr = "crit",
1399		.alarm = "crit_alarm",
1400		.sbit = PB_TEMP_OT_FAULT,
1401	}, {
1402		.reg = PMBUS_VIRT_READ_TEMP_MIN,
1403		.attr = "lowest",
1404	}, {
1405		.reg = PMBUS_VIRT_READ_TEMP_AVG,
1406		.attr = "average",
1407	}, {
1408		.reg = PMBUS_VIRT_READ_TEMP_MAX,
1409		.attr = "highest",
1410	}, {
1411		.reg = PMBUS_VIRT_RESET_TEMP_HISTORY,
1412		.attr = "reset_history",
1413	}
1414};
1415
1416static const struct pmbus_limit_attr temp_limit_attrs2[] = {
1417	{
1418		.reg = PMBUS_UT_WARN_LIMIT,
1419		.low = true,
1420		.attr = "min",
1421		.alarm = "min_alarm",
1422		.sbit = PB_TEMP_UT_WARNING,
1423	}, {
1424		.reg = PMBUS_UT_FAULT_LIMIT,
1425		.low = true,
1426		.attr = "lcrit",
1427		.alarm = "lcrit_alarm",
1428		.sbit = PB_TEMP_UT_FAULT,
1429	}, {
1430		.reg = PMBUS_OT_WARN_LIMIT,
1431		.attr = "max",
1432		.alarm = "max_alarm",
1433		.sbit = PB_TEMP_OT_WARNING,
1434	}, {
1435		.reg = PMBUS_OT_FAULT_LIMIT,
1436		.attr = "crit",
1437		.alarm = "crit_alarm",
1438		.sbit = PB_TEMP_OT_FAULT,
1439	}, {
1440		.reg = PMBUS_VIRT_READ_TEMP2_MIN,
1441		.attr = "lowest",
1442	}, {
1443		.reg = PMBUS_VIRT_READ_TEMP2_AVG,
1444		.attr = "average",
1445	}, {
1446		.reg = PMBUS_VIRT_READ_TEMP2_MAX,
1447		.attr = "highest",
1448	}, {
1449		.reg = PMBUS_VIRT_RESET_TEMP2_HISTORY,
1450		.attr = "reset_history",
1451	}
1452};
1453
1454static const struct pmbus_limit_attr temp_limit_attrs3[] = {
1455	{
1456		.reg = PMBUS_UT_WARN_LIMIT,
1457		.low = true,
1458		.attr = "min",
1459		.alarm = "min_alarm",
1460		.sbit = PB_TEMP_UT_WARNING,
1461	}, {
1462		.reg = PMBUS_UT_FAULT_LIMIT,
1463		.low = true,
1464		.attr = "lcrit",
1465		.alarm = "lcrit_alarm",
1466		.sbit = PB_TEMP_UT_FAULT,
1467	}, {
1468		.reg = PMBUS_OT_WARN_LIMIT,
1469		.attr = "max",
1470		.alarm = "max_alarm",
1471		.sbit = PB_TEMP_OT_WARNING,
1472	}, {
1473		.reg = PMBUS_OT_FAULT_LIMIT,
1474		.attr = "crit",
1475		.alarm = "crit_alarm",
1476		.sbit = PB_TEMP_OT_FAULT,
1477	}
1478};
1479
1480static const struct pmbus_sensor_attr temp_attributes[] = {
1481	{
1482		.reg = PMBUS_READ_TEMPERATURE_1,
1483		.class = PSC_TEMPERATURE,
1484		.paged = true,
1485		.update = true,
1486		.compare = true,
1487		.func = PMBUS_HAVE_TEMP,
1488		.sfunc = PMBUS_HAVE_STATUS_TEMP,
1489		.sbase = PB_STATUS_TEMP_BASE,
1490		.gbit = PB_STATUS_TEMPERATURE,
1491		.limit = temp_limit_attrs,
1492		.nlimit = ARRAY_SIZE(temp_limit_attrs),
1493	}, {
1494		.reg = PMBUS_READ_TEMPERATURE_2,
1495		.class = PSC_TEMPERATURE,
1496		.paged = true,
1497		.update = true,
1498		.compare = true,
1499		.func = PMBUS_HAVE_TEMP2,
1500		.sfunc = PMBUS_HAVE_STATUS_TEMP,
1501		.sbase = PB_STATUS_TEMP_BASE,
1502		.gbit = PB_STATUS_TEMPERATURE,
1503		.limit = temp_limit_attrs2,
1504		.nlimit = ARRAY_SIZE(temp_limit_attrs2),
1505	}, {
1506		.reg = PMBUS_READ_TEMPERATURE_3,
1507		.class = PSC_TEMPERATURE,
1508		.paged = true,
1509		.update = true,
1510		.compare = true,
1511		.func = PMBUS_HAVE_TEMP3,
1512		.sfunc = PMBUS_HAVE_STATUS_TEMP,
1513		.sbase = PB_STATUS_TEMP_BASE,
1514		.gbit = PB_STATUS_TEMPERATURE,
1515		.limit = temp_limit_attrs3,
1516		.nlimit = ARRAY_SIZE(temp_limit_attrs3),
1517	}
1518};
1519
1520static const int pmbus_fan_registers[] = {
1521	PMBUS_READ_FAN_SPEED_1,
1522	PMBUS_READ_FAN_SPEED_2,
1523	PMBUS_READ_FAN_SPEED_3,
1524	PMBUS_READ_FAN_SPEED_4
1525};
1526
1527static const int pmbus_fan_config_registers[] = {
1528	PMBUS_FAN_CONFIG_12,
1529	PMBUS_FAN_CONFIG_12,
1530	PMBUS_FAN_CONFIG_34,
1531	PMBUS_FAN_CONFIG_34
1532};
1533
1534static const int pmbus_fan_status_registers[] = {
1535	PMBUS_STATUS_FAN_12,
1536	PMBUS_STATUS_FAN_12,
1537	PMBUS_STATUS_FAN_34,
1538	PMBUS_STATUS_FAN_34
1539};
1540
1541static const u32 pmbus_fan_flags[] = {
1542	PMBUS_HAVE_FAN12,
1543	PMBUS_HAVE_FAN12,
1544	PMBUS_HAVE_FAN34,
1545	PMBUS_HAVE_FAN34
1546};
1547
1548static const u32 pmbus_fan_status_flags[] = {
1549	PMBUS_HAVE_STATUS_FAN12,
1550	PMBUS_HAVE_STATUS_FAN12,
1551	PMBUS_HAVE_STATUS_FAN34,
1552	PMBUS_HAVE_STATUS_FAN34
1553};
1554
1555/* Fans */
1556static void pmbus_add_fan_attributes(struct i2c_client *client,
1557				     struct pmbus_data *data)
1558{
1559	const struct pmbus_driver_info *info = data->info;
1560	int index = 1;
1561	int page;
1562
1563	for (page = 0; page < info->pages; page++) {
1564		int f;
1565
1566		for (f = 0; f < ARRAY_SIZE(pmbus_fan_registers); f++) {
1567			int regval;
1568
1569			if (!(info->func[page] & pmbus_fan_flags[f]))
1570				break;
1571
1572			if (!pmbus_check_word_register(client, page,
1573						       pmbus_fan_registers[f]))
1574				break;
1575
1576			/*
1577			 * Skip fan if not installed.
1578			 * Each fan configuration register covers multiple fans,
1579			 * so we have to do some magic.
1580			 */
1581			regval = _pmbus_read_byte_data(client, page,
1582				pmbus_fan_config_registers[f]);
1583			if (regval < 0 ||
1584			    (!(regval & (PB_FAN_1_INSTALLED >> ((f & 1) * 4)))))
1585				continue;
1586
1587			pmbus_add_sensor(data, "fan", "input", index, page,
1588					 pmbus_fan_registers[f], PSC_FAN, true,
1589					 true);
1590
1591			/*
1592			 * Each fan status register covers multiple fans,
1593			 * so we have to do some magic.
1594			 */
1595			if ((info->func[page] & pmbus_fan_status_flags[f]) &&
1596			    pmbus_check_byte_register(client,
1597					page, pmbus_fan_status_registers[f])) {
1598				int base;
1599
1600				if (f > 1)	/* fan 3, 4 */
1601					base = PB_STATUS_FAN34_BASE + page;
1602				else
1603					base = PB_STATUS_FAN_BASE + page;
1604				pmbus_add_boolean_reg(data, "fan", "alarm",
1605					index, base,
1606					PB_FAN_FAN1_WARNING >> (f & 1));
1607				pmbus_add_boolean_reg(data, "fan", "fault",
1608					index, base,
1609					PB_FAN_FAN1_FAULT >> (f & 1));
1610			}
1611			index++;
1612		}
1613	}
1614}
1615
1616static void pmbus_find_attributes(struct i2c_client *client,
1617				  struct pmbus_data *data)
1618{
1619	/* Voltage sensors */
1620	pmbus_add_sensor_attrs(client, data, "in", voltage_attributes,
1621			       ARRAY_SIZE(voltage_attributes));
1622
1623	/* Current sensors */
1624	pmbus_add_sensor_attrs(client, data, "curr", current_attributes,
1625			       ARRAY_SIZE(current_attributes));
1626
1627	/* Power sensors */
1628	pmbus_add_sensor_attrs(client, data, "power", power_attributes,
1629			       ARRAY_SIZE(power_attributes));
1630
1631	/* Temperature sensors */
1632	pmbus_add_sensor_attrs(client, data, "temp", temp_attributes,
1633			       ARRAY_SIZE(temp_attributes));
1634
1635	/* Fans */
1636	pmbus_add_fan_attributes(client, data);
1637}
1638
1639/*
1640 * Identify chip parameters.
1641 * This function is called for all chips.
1642 */
1643static int pmbus_identify_common(struct i2c_client *client,
1644				 struct pmbus_data *data)
1645{
1646	int vout_mode = -1;
1647
1648	if (pmbus_check_byte_register(client, 0, PMBUS_VOUT_MODE))
1649		vout_mode = _pmbus_read_byte_data(client, 0, PMBUS_VOUT_MODE);
1650	if (vout_mode >= 0 && vout_mode != 0xff) {
1651		/*
1652		 * Not all chips support the VOUT_MODE command,
1653		 * so a failure to read it is not an error.
1654		 */
1655		switch (vout_mode >> 5) {
1656		case 0:	/* linear mode      */
1657			if (data->info->format[PSC_VOLTAGE_OUT] != linear)
1658				return -ENODEV;
1659
1660			data->exponent = ((s8)(vout_mode << 3)) >> 3;
1661			break;
1662		case 1: /* VID mode         */
1663			if (data->info->format[PSC_VOLTAGE_OUT] != vid)
1664				return -ENODEV;
1665			break;
1666		case 2:	/* direct mode      */
1667			if (data->info->format[PSC_VOLTAGE_OUT] != direct)
1668				return -ENODEV;
1669			break;
1670		default:
1671			return -ENODEV;
1672		}
1673	}
1674
1675	/* Determine maximum number of sensors, booleans, and labels */
1676	pmbus_find_max_attr(client, data);
1677	pmbus_clear_fault_page(client, 0);
1678	return 0;
1679}
1680
1681int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
1682		   struct pmbus_driver_info *info)
1683{
1684	const struct pmbus_platform_data *pdata = client->dev.platform_data;
1685	struct pmbus_data *data;
1686	int ret;
1687
1688	if (!info) {
1689		dev_err(&client->dev, "Missing chip information");
1690		return -ENODEV;
1691	}
1692
1693	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WRITE_BYTE
1694				     | I2C_FUNC_SMBUS_BYTE_DATA
1695				     | I2C_FUNC_SMBUS_WORD_DATA))
1696		return -ENODEV;
1697
1698	data = devm_kzalloc(&client->dev, sizeof(*data), GFP_KERNEL);
1699	if (!data) {
1700		dev_err(&client->dev, "No memory to allocate driver data\n");
1701		return -ENOMEM;
1702	}
1703
1704	i2c_set_clientdata(client, data);
1705	mutex_init(&data->update_lock);
1706
1707	/* Bail out if PMBus status register does not exist. */
1708	if (i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE) < 0) {
1709		dev_err(&client->dev, "PMBus status register not found\n");
1710		return -ENODEV;
1711	}
1712
1713	if (pdata)
1714		data->flags = pdata->flags;
1715	data->info = info;
1716
1717	pmbus_clear_faults(client);
1718
1719	if (info->identify) {
1720		ret = (*info->identify)(client, info);
1721		if (ret < 0) {
1722			dev_err(&client->dev, "Chip identification failed\n");
1723			return ret;
1724		}
1725	}
1726
1727	if (info->pages <= 0 || info->pages > PMBUS_PAGES) {
1728		dev_err(&client->dev, "Bad number of PMBus pages: %d\n",
1729			info->pages);
1730		return -ENODEV;
1731	}
1732
1733	ret = pmbus_identify_common(client, data);
1734	if (ret < 0) {
1735		dev_err(&client->dev, "Failed to identify chip capabilities\n");
1736		return ret;
1737	}
1738
1739	ret = -ENOMEM;
1740	data->sensors = devm_kzalloc(&client->dev, sizeof(struct pmbus_sensor)
1741				     * data->max_sensors, GFP_KERNEL);
1742	if (!data->sensors) {
1743		dev_err(&client->dev, "No memory to allocate sensor data\n");
1744		return -ENOMEM;
1745	}
1746
1747	data->booleans = devm_kzalloc(&client->dev, sizeof(struct pmbus_boolean)
1748				 * data->max_booleans, GFP_KERNEL);
1749	if (!data->booleans) {
1750		dev_err(&client->dev, "No memory to allocate boolean data\n");
1751		return -ENOMEM;
1752	}
1753
1754	data->labels = devm_kzalloc(&client->dev, sizeof(struct pmbus_label)
1755				    * data->max_labels, GFP_KERNEL);
1756	if (!data->labels) {
1757		dev_err(&client->dev, "No memory to allocate label data\n");
1758		return -ENOMEM;
1759	}
1760
1761	data->attributes = devm_kzalloc(&client->dev, sizeof(struct attribute *)
1762					* data->max_attributes, GFP_KERNEL);
1763	if (!data->attributes) {
1764		dev_err(&client->dev, "No memory to allocate attribute data\n");
1765		return -ENOMEM;
1766	}
1767
1768	pmbus_find_attributes(client, data);
1769
1770	/*
1771	 * If there are no attributes, something is wrong.
1772	 * Bail out instead of trying to register nothing.
1773	 */
1774	if (!data->num_attributes) {
1775		dev_err(&client->dev, "No attributes found\n");
1776		return -ENODEV;
1777	}
1778
1779	/* Register sysfs hooks */
1780	data->group.attrs = data->attributes;
1781	ret = sysfs_create_group(&client->dev.kobj, &data->group);
1782	if (ret) {
1783		dev_err(&client->dev, "Failed to create sysfs entries\n");
1784		return ret;
1785	}
1786	data->hwmon_dev = hwmon_device_register(&client->dev);
1787	if (IS_ERR(data->hwmon_dev)) {
1788		ret = PTR_ERR(data->hwmon_dev);
1789		dev_err(&client->dev, "Failed to register hwmon device\n");
1790		goto out_hwmon_device_register;
1791	}
1792	return 0;
1793
1794out_hwmon_device_register:
1795	sysfs_remove_group(&client->dev.kobj, &data->group);
1796	return ret;
1797}
1798EXPORT_SYMBOL_GPL(pmbus_do_probe);
1799
1800int pmbus_do_remove(struct i2c_client *client)
1801{
1802	struct pmbus_data *data = i2c_get_clientdata(client);
1803	hwmon_device_unregister(data->hwmon_dev);
1804	sysfs_remove_group(&client->dev.kobj, &data->group);
1805	return 0;
1806}
1807EXPORT_SYMBOL_GPL(pmbus_do_remove);
1808
1809MODULE_AUTHOR("Guenter Roeck");
1810MODULE_DESCRIPTION("PMBus core driver");
1811MODULE_LICENSE("GPL");