Linux Audio

Check our new training course

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