• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Hardware monitoring driver for PMBus devices
3  *
4  * Copyright (c) 2010, 2011 Ericsson AB.
5  * Copyright (c) 2012 Guenter Roeck
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 
22 #include <linux/debugfs.h>
23 #include <linux/kernel.h>
24 #include <linux/math64.h>
25 #include <linux/module.h>
26 #include <linux/init.h>
27 #include <linux/err.h>
28 #include <linux/slab.h>
29 #include <linux/i2c.h>
30 #include <linux/hwmon.h>
31 #include <linux/hwmon-sysfs.h>
32 #include <linux/jiffies.h>
33 #include <linux/pmbus.h>
34 #include <linux/regulator/driver.h>
35 #include <linux/regulator/machine.h>
36 #include "pmbus.h"
37 
38 /*
39  * Number of additional attribute pointers to allocate
40  * with each call to krealloc
41  */
42 #define PMBUS_ATTR_ALLOC_SIZE	32
43 
44 /*
45  * Index into status register array, per status register group
46  */
47 #define PB_STATUS_BASE		0
48 #define PB_STATUS_VOUT_BASE	(PB_STATUS_BASE + PMBUS_PAGES)
49 #define PB_STATUS_IOUT_BASE	(PB_STATUS_VOUT_BASE + PMBUS_PAGES)
50 #define PB_STATUS_FAN_BASE	(PB_STATUS_IOUT_BASE + PMBUS_PAGES)
51 #define PB_STATUS_FAN34_BASE	(PB_STATUS_FAN_BASE + PMBUS_PAGES)
52 #define PB_STATUS_TEMP_BASE	(PB_STATUS_FAN34_BASE + PMBUS_PAGES)
53 #define PB_STATUS_INPUT_BASE	(PB_STATUS_TEMP_BASE + PMBUS_PAGES)
54 #define PB_STATUS_VMON_BASE	(PB_STATUS_INPUT_BASE + 1)
55 
56 #define PB_NUM_STATUS_REG	(PB_STATUS_VMON_BASE + 1)
57 
58 #define PMBUS_NAME_SIZE		24
59 
60 struct pmbus_sensor {
61 	struct pmbus_sensor *next;
62 	char name[PMBUS_NAME_SIZE];	/* sysfs sensor name */
63 	struct device_attribute attribute;
64 	u8 page;		/* page number */
65 	u16 reg;		/* register */
66 	enum pmbus_sensor_classes class;	/* sensor class */
67 	bool update;		/* runtime sensor update needed */
68 	int data;		/* Sensor data.
69 				   Negative if there was a read error */
70 };
71 #define to_pmbus_sensor(_attr) \
72 	container_of(_attr, struct pmbus_sensor, attribute)
73 
74 struct pmbus_boolean {
75 	char name[PMBUS_NAME_SIZE];	/* sysfs boolean name */
76 	struct sensor_device_attribute attribute;
77 	struct pmbus_sensor *s1;
78 	struct pmbus_sensor *s2;
79 };
80 #define to_pmbus_boolean(_attr) \
81 	container_of(_attr, struct pmbus_boolean, attribute)
82 
83 struct pmbus_label {
84 	char name[PMBUS_NAME_SIZE];	/* sysfs label name */
85 	struct device_attribute attribute;
86 	char label[PMBUS_NAME_SIZE];	/* label */
87 };
88 #define to_pmbus_label(_attr) \
89 	container_of(_attr, struct pmbus_label, attribute)
90 
91 struct pmbus_data {
92 	struct device *dev;
93 	struct device *hwmon_dev;
94 
95 	u32 flags;		/* from platform data */
96 
97 	int exponent[PMBUS_PAGES];
98 				/* linear mode: exponent for output voltages */
99 
100 	const struct pmbus_driver_info *info;
101 
102 	int max_attributes;
103 	int num_attributes;
104 	struct attribute_group group;
105 	const struct attribute_group *groups[2];
106 	struct dentry *debugfs;		/* debugfs device directory */
107 
108 	struct pmbus_sensor *sensors;
109 
110 	struct mutex update_lock;
111 	bool valid;
112 	unsigned long last_updated;	/* in jiffies */
113 
114 	/*
115 	 * A single status register covers multiple attributes,
116 	 * so we keep them all together.
117 	 */
118 	u16 status[PB_NUM_STATUS_REG];
119 
120 	bool has_status_word;		/* device uses STATUS_WORD register */
121 	int (*read_status)(struct i2c_client *client, int page);
122 
123 	u8 currpage;
124 };
125 
126 struct pmbus_debugfs_entry {
127 	struct i2c_client *client;
128 	u8 page;
129 	u8 reg;
130 };
131 
pmbus_clear_cache(struct i2c_client * client)132 void pmbus_clear_cache(struct i2c_client *client)
133 {
134 	struct pmbus_data *data = i2c_get_clientdata(client);
135 
136 	data->valid = false;
137 }
138 EXPORT_SYMBOL_GPL(pmbus_clear_cache);
139 
pmbus_set_page(struct i2c_client * client,int page)140 int pmbus_set_page(struct i2c_client *client, int page)
141 {
142 	struct pmbus_data *data = i2c_get_clientdata(client);
143 	int rv = 0;
144 	int newpage;
145 
146 	if (page >= 0 && page != data->currpage) {
147 		rv = i2c_smbus_write_byte_data(client, PMBUS_PAGE, page);
148 		newpage = i2c_smbus_read_byte_data(client, PMBUS_PAGE);
149 		if (newpage != page)
150 			rv = -EIO;
151 		else
152 			data->currpage = page;
153 	}
154 	return rv;
155 }
156 EXPORT_SYMBOL_GPL(pmbus_set_page);
157 
pmbus_write_byte(struct i2c_client * client,int page,u8 value)158 int pmbus_write_byte(struct i2c_client *client, int page, u8 value)
159 {
160 	int rv;
161 
162 	rv = pmbus_set_page(client, page);
163 	if (rv < 0)
164 		return rv;
165 
166 	return i2c_smbus_write_byte(client, value);
167 }
168 EXPORT_SYMBOL_GPL(pmbus_write_byte);
169 
170 /*
171  * _pmbus_write_byte() is similar to pmbus_write_byte(), but checks if
172  * a device specific mapping function exists and calls it if necessary.
173  */
_pmbus_write_byte(struct i2c_client * client,int page,u8 value)174 static int _pmbus_write_byte(struct i2c_client *client, int page, u8 value)
175 {
176 	struct pmbus_data *data = i2c_get_clientdata(client);
177 	const struct pmbus_driver_info *info = data->info;
178 	int status;
179 
180 	if (info->write_byte) {
181 		status = info->write_byte(client, page, value);
182 		if (status != -ENODATA)
183 			return status;
184 	}
185 	return pmbus_write_byte(client, page, value);
186 }
187 
pmbus_write_word_data(struct i2c_client * client,int page,u8 reg,u16 word)188 int pmbus_write_word_data(struct i2c_client *client, int page, u8 reg,
189 			  u16 word)
190 {
191 	int rv;
192 
193 	rv = pmbus_set_page(client, page);
194 	if (rv < 0)
195 		return rv;
196 
197 	return i2c_smbus_write_word_data(client, reg, word);
198 }
199 EXPORT_SYMBOL_GPL(pmbus_write_word_data);
200 
201 /*
202  * _pmbus_write_word_data() is similar to pmbus_write_word_data(), but checks if
203  * a device specific mapping function exists and calls it if necessary.
204  */
_pmbus_write_word_data(struct i2c_client * client,int page,int reg,u16 word)205 static int _pmbus_write_word_data(struct i2c_client *client, int page, int reg,
206 				  u16 word)
207 {
208 	struct pmbus_data *data = i2c_get_clientdata(client);
209 	const struct pmbus_driver_info *info = data->info;
210 	int status;
211 
212 	if (info->write_word_data) {
213 		status = info->write_word_data(client, page, reg, word);
214 		if (status != -ENODATA)
215 			return status;
216 	}
217 	if (reg >= PMBUS_VIRT_BASE)
218 		return -ENXIO;
219 	return pmbus_write_word_data(client, page, reg, word);
220 }
221 
pmbus_read_word_data(struct i2c_client * client,int page,u8 reg)222 int pmbus_read_word_data(struct i2c_client *client, int page, u8 reg)
223 {
224 	int rv;
225 
226 	rv = pmbus_set_page(client, page);
227 	if (rv < 0)
228 		return rv;
229 
230 	return i2c_smbus_read_word_data(client, reg);
231 }
232 EXPORT_SYMBOL_GPL(pmbus_read_word_data);
233 
234 /*
235  * _pmbus_read_word_data() is similar to pmbus_read_word_data(), but checks if
236  * a device specific mapping function exists and calls it if necessary.
237  */
_pmbus_read_word_data(struct i2c_client * client,int page,int reg)238 static int _pmbus_read_word_data(struct i2c_client *client, int page, int reg)
239 {
240 	struct pmbus_data *data = i2c_get_clientdata(client);
241 	const struct pmbus_driver_info *info = data->info;
242 	int status;
243 
244 	if (info->read_word_data) {
245 		status = info->read_word_data(client, page, reg);
246 		if (status != -ENODATA)
247 			return status;
248 	}
249 	if (reg >= PMBUS_VIRT_BASE)
250 		return -ENXIO;
251 	return pmbus_read_word_data(client, page, reg);
252 }
253 
pmbus_read_byte_data(struct i2c_client * client,int page,u8 reg)254 int pmbus_read_byte_data(struct i2c_client *client, int page, u8 reg)
255 {
256 	int rv;
257 
258 	rv = pmbus_set_page(client, page);
259 	if (rv < 0)
260 		return rv;
261 
262 	return i2c_smbus_read_byte_data(client, reg);
263 }
264 EXPORT_SYMBOL_GPL(pmbus_read_byte_data);
265 
pmbus_write_byte_data(struct i2c_client * client,int page,u8 reg,u8 value)266 int pmbus_write_byte_data(struct i2c_client *client, int page, u8 reg, u8 value)
267 {
268 	int rv;
269 
270 	rv = pmbus_set_page(client, page);
271 	if (rv < 0)
272 		return rv;
273 
274 	return i2c_smbus_write_byte_data(client, reg, value);
275 }
276 EXPORT_SYMBOL_GPL(pmbus_write_byte_data);
277 
pmbus_update_byte_data(struct i2c_client * client,int page,u8 reg,u8 mask,u8 value)278 int pmbus_update_byte_data(struct i2c_client *client, int page, u8 reg,
279 			   u8 mask, u8 value)
280 {
281 	unsigned int tmp;
282 	int rv;
283 
284 	rv = pmbus_read_byte_data(client, page, reg);
285 	if (rv < 0)
286 		return rv;
287 
288 	tmp = (rv & ~mask) | (value & mask);
289 
290 	if (tmp != rv)
291 		rv = pmbus_write_byte_data(client, page, reg, tmp);
292 
293 	return rv;
294 }
295 EXPORT_SYMBOL_GPL(pmbus_update_byte_data);
296 
297 /*
298  * _pmbus_read_byte_data() is similar to pmbus_read_byte_data(), but checks if
299  * a device specific mapping function exists and calls it if necessary.
300  */
_pmbus_read_byte_data(struct i2c_client * client,int page,int reg)301 static int _pmbus_read_byte_data(struct i2c_client *client, int page, int reg)
302 {
303 	struct pmbus_data *data = i2c_get_clientdata(client);
304 	const struct pmbus_driver_info *info = data->info;
305 	int status;
306 
307 	if (info->read_byte_data) {
308 		status = info->read_byte_data(client, page, reg);
309 		if (status != -ENODATA)
310 			return status;
311 	}
312 	return pmbus_read_byte_data(client, page, reg);
313 }
314 
pmbus_clear_fault_page(struct i2c_client * client,int page)315 static void pmbus_clear_fault_page(struct i2c_client *client, int page)
316 {
317 	_pmbus_write_byte(client, page, PMBUS_CLEAR_FAULTS);
318 }
319 
pmbus_clear_faults(struct i2c_client * client)320 void pmbus_clear_faults(struct i2c_client *client)
321 {
322 	struct pmbus_data *data = i2c_get_clientdata(client);
323 	int i;
324 
325 	for (i = 0; i < data->info->pages; i++)
326 		pmbus_clear_fault_page(client, i);
327 }
328 EXPORT_SYMBOL_GPL(pmbus_clear_faults);
329 
pmbus_check_status_cml(struct i2c_client * client)330 static int pmbus_check_status_cml(struct i2c_client *client)
331 {
332 	struct pmbus_data *data = i2c_get_clientdata(client);
333 	int status, status2;
334 
335 	status = data->read_status(client, -1);
336 	if (status < 0 || (status & PB_STATUS_CML)) {
337 		status2 = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML);
338 		if (status2 < 0 || (status2 & PB_CML_FAULT_INVALID_COMMAND))
339 			return -EIO;
340 	}
341 	return 0;
342 }
343 
pmbus_check_register(struct i2c_client * client,int (* func)(struct i2c_client * client,int page,int reg),int page,int reg)344 static bool pmbus_check_register(struct i2c_client *client,
345 				 int (*func)(struct i2c_client *client,
346 					     int page, int reg),
347 				 int page, int reg)
348 {
349 	int rv;
350 	struct pmbus_data *data = i2c_get_clientdata(client);
351 
352 	rv = func(client, page, reg);
353 	if (rv >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK))
354 		rv = pmbus_check_status_cml(client);
355 	pmbus_clear_fault_page(client, -1);
356 	return rv >= 0;
357 }
358 
pmbus_check_status_register(struct i2c_client * client,int page)359 static bool pmbus_check_status_register(struct i2c_client *client, int page)
360 {
361 	int status;
362 	struct pmbus_data *data = i2c_get_clientdata(client);
363 
364 	status = data->read_status(client, page);
365 	if (status >= 0 && !(data->flags & PMBUS_SKIP_STATUS_CHECK) &&
366 	    (status & PB_STATUS_CML)) {
367 		status = _pmbus_read_byte_data(client, -1, PMBUS_STATUS_CML);
368 		if (status < 0 || (status & PB_CML_FAULT_INVALID_COMMAND))
369 			status = -EIO;
370 	}
371 
372 	pmbus_clear_fault_page(client, -1);
373 	return status >= 0;
374 }
375 
pmbus_check_byte_register(struct i2c_client * client,int page,int reg)376 bool pmbus_check_byte_register(struct i2c_client *client, int page, int reg)
377 {
378 	return pmbus_check_register(client, _pmbus_read_byte_data, page, reg);
379 }
380 EXPORT_SYMBOL_GPL(pmbus_check_byte_register);
381 
pmbus_check_word_register(struct i2c_client * client,int page,int reg)382 bool pmbus_check_word_register(struct i2c_client *client, int page, int reg)
383 {
384 	return pmbus_check_register(client, _pmbus_read_word_data, page, reg);
385 }
386 EXPORT_SYMBOL_GPL(pmbus_check_word_register);
387 
pmbus_get_driver_info(struct i2c_client * client)388 const struct pmbus_driver_info *pmbus_get_driver_info(struct i2c_client *client)
389 {
390 	struct pmbus_data *data = i2c_get_clientdata(client);
391 
392 	return data->info;
393 }
394 EXPORT_SYMBOL_GPL(pmbus_get_driver_info);
395 
396 static struct _pmbus_status {
397 	u32 func;
398 	u16 base;
399 	u16 reg;
400 } pmbus_status[] = {
401 	{ PMBUS_HAVE_STATUS_VOUT, PB_STATUS_VOUT_BASE, PMBUS_STATUS_VOUT },
402 	{ PMBUS_HAVE_STATUS_IOUT, PB_STATUS_IOUT_BASE, PMBUS_STATUS_IOUT },
403 	{ PMBUS_HAVE_STATUS_TEMP, PB_STATUS_TEMP_BASE,
404 	  PMBUS_STATUS_TEMPERATURE },
405 	{ PMBUS_HAVE_STATUS_FAN12, PB_STATUS_FAN_BASE, PMBUS_STATUS_FAN_12 },
406 	{ PMBUS_HAVE_STATUS_FAN34, PB_STATUS_FAN34_BASE, PMBUS_STATUS_FAN_34 },
407 };
408 
pmbus_update_device(struct device * dev)409 static struct pmbus_data *pmbus_update_device(struct device *dev)
410 {
411 	struct i2c_client *client = to_i2c_client(dev->parent);
412 	struct pmbus_data *data = i2c_get_clientdata(client);
413 	const struct pmbus_driver_info *info = data->info;
414 	struct pmbus_sensor *sensor;
415 
416 	mutex_lock(&data->update_lock);
417 	if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
418 		int i, j;
419 
420 		for (i = 0; i < info->pages; i++) {
421 			data->status[PB_STATUS_BASE + i]
422 			    = data->read_status(client, i);
423 			for (j = 0; j < ARRAY_SIZE(pmbus_status); j++) {
424 				struct _pmbus_status *s = &pmbus_status[j];
425 
426 				if (!(info->func[i] & s->func))
427 					continue;
428 				data->status[s->base + i]
429 					= _pmbus_read_byte_data(client, i,
430 								s->reg);
431 			}
432 		}
433 
434 		if (info->func[0] & PMBUS_HAVE_STATUS_INPUT)
435 			data->status[PB_STATUS_INPUT_BASE]
436 			  = _pmbus_read_byte_data(client, 0,
437 						  PMBUS_STATUS_INPUT);
438 
439 		if (info->func[0] & PMBUS_HAVE_STATUS_VMON)
440 			data->status[PB_STATUS_VMON_BASE]
441 			  = _pmbus_read_byte_data(client, 0,
442 						  PMBUS_VIRT_STATUS_VMON);
443 
444 		for (sensor = data->sensors; sensor; sensor = sensor->next) {
445 			if (!data->valid || sensor->update)
446 				sensor->data
447 				    = _pmbus_read_word_data(client,
448 							    sensor->page,
449 							    sensor->reg);
450 		}
451 		pmbus_clear_faults(client);
452 		data->last_updated = jiffies;
453 		data->valid = 1;
454 	}
455 	mutex_unlock(&data->update_lock);
456 	return data;
457 }
458 
459 /*
460  * Convert linear sensor values to milli- or micro-units
461  * depending on sensor type.
462  */
pmbus_reg2data_linear(struct pmbus_data * data,struct pmbus_sensor * sensor)463 static long pmbus_reg2data_linear(struct pmbus_data *data,
464 				  struct pmbus_sensor *sensor)
465 {
466 	s16 exponent;
467 	s32 mantissa;
468 	long val;
469 
470 	if (sensor->class == PSC_VOLTAGE_OUT) {	/* LINEAR16 */
471 		exponent = data->exponent[sensor->page];
472 		mantissa = (u16) sensor->data;
473 	} else {				/* LINEAR11 */
474 		exponent = ((s16)sensor->data) >> 11;
475 		mantissa = ((s16)((sensor->data & 0x7ff) << 5)) >> 5;
476 	}
477 
478 	val = mantissa;
479 
480 	/* scale result to milli-units for all sensors except fans */
481 	if (sensor->class != PSC_FAN)
482 		val = val * 1000L;
483 
484 	/* scale result to micro-units for power sensors */
485 	if (sensor->class == PSC_POWER)
486 		val = val * 1000L;
487 
488 	if (exponent >= 0)
489 		val <<= exponent;
490 	else
491 		val >>= -exponent;
492 
493 	return val;
494 }
495 
496 /*
497  * Convert direct sensor values to milli- or micro-units
498  * depending on sensor type.
499  */
pmbus_reg2data_direct(struct pmbus_data * data,struct pmbus_sensor * sensor)500 static long pmbus_reg2data_direct(struct pmbus_data *data,
501 				  struct pmbus_sensor *sensor)
502 {
503 	s64 b, val = (s16)sensor->data;
504 	s32 m, R;
505 
506 	m = data->info->m[sensor->class];
507 	b = data->info->b[sensor->class];
508 	R = data->info->R[sensor->class];
509 
510 	if (m == 0)
511 		return 0;
512 
513 	/* X = 1/m * (Y * 10^-R - b) */
514 	R = -R;
515 	/* scale result to milli-units for everything but fans */
516 	if (sensor->class != PSC_FAN) {
517 		R += 3;
518 		b *= 1000;
519 	}
520 
521 	/* scale result to micro-units for power sensors */
522 	if (sensor->class == PSC_POWER) {
523 		R += 3;
524 		b *= 1000;
525 	}
526 
527 	while (R > 0) {
528 		val *= 10;
529 		R--;
530 	}
531 	while (R < 0) {
532 		val = div_s64(val + 5LL, 10L);  /* round closest */
533 		R++;
534 	}
535 
536 	val = div_s64(val - b, m);
537 	return clamp_val(val, LONG_MIN, LONG_MAX);
538 }
539 
540 /*
541  * Convert VID sensor values to milli- or micro-units
542  * depending on sensor type.
543  */
pmbus_reg2data_vid(struct pmbus_data * data,struct pmbus_sensor * sensor)544 static long pmbus_reg2data_vid(struct pmbus_data *data,
545 			       struct pmbus_sensor *sensor)
546 {
547 	long val = sensor->data;
548 	long rv = 0;
549 
550 	switch (data->info->vrm_version) {
551 	case vr11:
552 		if (val >= 0x02 && val <= 0xb2)
553 			rv = DIV_ROUND_CLOSEST(160000 - (val - 2) * 625, 100);
554 		break;
555 	case vr12:
556 		if (val >= 0x01)
557 			rv = 250 + (val - 1) * 5;
558 		break;
559 	case vr13:
560 		if (val >= 0x01)
561 			rv = 500 + (val - 1) * 10;
562 		break;
563 	}
564 	return rv;
565 }
566 
pmbus_reg2data(struct pmbus_data * data,struct pmbus_sensor * sensor)567 static long pmbus_reg2data(struct pmbus_data *data, struct pmbus_sensor *sensor)
568 {
569 	long val;
570 
571 	switch (data->info->format[sensor->class]) {
572 	case direct:
573 		val = pmbus_reg2data_direct(data, sensor);
574 		break;
575 	case vid:
576 		val = pmbus_reg2data_vid(data, sensor);
577 		break;
578 	case linear:
579 	default:
580 		val = pmbus_reg2data_linear(data, sensor);
581 		break;
582 	}
583 	return val;
584 }
585 
586 #define MAX_MANTISSA	(1023 * 1000)
587 #define MIN_MANTISSA	(511 * 1000)
588 
pmbus_data2reg_linear(struct pmbus_data * data,struct pmbus_sensor * sensor,long val)589 static u16 pmbus_data2reg_linear(struct pmbus_data *data,
590 				 struct pmbus_sensor *sensor, long val)
591 {
592 	s16 exponent = 0, mantissa;
593 	bool negative = false;
594 
595 	/* simple case */
596 	if (val == 0)
597 		return 0;
598 
599 	if (sensor->class == PSC_VOLTAGE_OUT) {
600 		/* LINEAR16 does not support negative voltages */
601 		if (val < 0)
602 			return 0;
603 
604 		/*
605 		 * For a static exponents, we don't have a choice
606 		 * but to adjust the value to it.
607 		 */
608 		if (data->exponent[sensor->page] < 0)
609 			val <<= -data->exponent[sensor->page];
610 		else
611 			val >>= data->exponent[sensor->page];
612 		val = DIV_ROUND_CLOSEST(val, 1000);
613 		return val & 0xffff;
614 	}
615 
616 	if (val < 0) {
617 		negative = true;
618 		val = -val;
619 	}
620 
621 	/* Power is in uW. Convert to mW before converting. */
622 	if (sensor->class == PSC_POWER)
623 		val = DIV_ROUND_CLOSEST(val, 1000L);
624 
625 	/*
626 	 * For simplicity, convert fan data to milli-units
627 	 * before calculating the exponent.
628 	 */
629 	if (sensor->class == PSC_FAN)
630 		val = val * 1000;
631 
632 	/* Reduce large mantissa until it fits into 10 bit */
633 	while (val >= MAX_MANTISSA && exponent < 15) {
634 		exponent++;
635 		val >>= 1;
636 	}
637 	/* Increase small mantissa to improve precision */
638 	while (val < MIN_MANTISSA && exponent > -15) {
639 		exponent--;
640 		val <<= 1;
641 	}
642 
643 	/* Convert mantissa from milli-units to units */
644 	mantissa = DIV_ROUND_CLOSEST(val, 1000);
645 
646 	/* Ensure that resulting number is within range */
647 	if (mantissa > 0x3ff)
648 		mantissa = 0x3ff;
649 
650 	/* restore sign */
651 	if (negative)
652 		mantissa = -mantissa;
653 
654 	/* Convert to 5 bit exponent, 11 bit mantissa */
655 	return (mantissa & 0x7ff) | ((exponent << 11) & 0xf800);
656 }
657 
pmbus_data2reg_direct(struct pmbus_data * data,struct pmbus_sensor * sensor,long val)658 static u16 pmbus_data2reg_direct(struct pmbus_data *data,
659 				 struct pmbus_sensor *sensor, long val)
660 {
661 	s64 b, val64 = val;
662 	s32 m, R;
663 
664 	m = data->info->m[sensor->class];
665 	b = data->info->b[sensor->class];
666 	R = data->info->R[sensor->class];
667 
668 	/* Power is in uW. Adjust R and b. */
669 	if (sensor->class == PSC_POWER) {
670 		R -= 3;
671 		b *= 1000;
672 	}
673 
674 	/* Calculate Y = (m * X + b) * 10^R */
675 	if (sensor->class != PSC_FAN) {
676 		R -= 3;		/* Adjust R and b for data in milli-units */
677 		b *= 1000;
678 	}
679 	val64 = val64 * m + b;
680 
681 	while (R > 0) {
682 		val64 *= 10;
683 		R--;
684 	}
685 	while (R < 0) {
686 		val64 = div_s64(val64 + 5LL, 10L);  /* round closest */
687 		R++;
688 	}
689 
690 	return (u16)clamp_val(val64, S16_MIN, S16_MAX);
691 }
692 
pmbus_data2reg_vid(struct pmbus_data * data,struct pmbus_sensor * sensor,long val)693 static u16 pmbus_data2reg_vid(struct pmbus_data *data,
694 			      struct pmbus_sensor *sensor, long val)
695 {
696 	val = clamp_val(val, 500, 1600);
697 
698 	return 2 + DIV_ROUND_CLOSEST((1600 - val) * 100, 625);
699 }
700 
pmbus_data2reg(struct pmbus_data * data,struct pmbus_sensor * sensor,long val)701 static u16 pmbus_data2reg(struct pmbus_data *data,
702 			  struct pmbus_sensor *sensor, long val)
703 {
704 	u16 regval;
705 
706 	switch (data->info->format[sensor->class]) {
707 	case direct:
708 		regval = pmbus_data2reg_direct(data, sensor, val);
709 		break;
710 	case vid:
711 		regval = pmbus_data2reg_vid(data, sensor, val);
712 		break;
713 	case linear:
714 	default:
715 		regval = pmbus_data2reg_linear(data, sensor, val);
716 		break;
717 	}
718 	return regval;
719 }
720 
721 /*
722  * Return boolean calculated from converted data.
723  * <index> defines a status register index and mask.
724  * The mask is in the lower 8 bits, the register index is in bits 8..23.
725  *
726  * The associated pmbus_boolean structure contains optional pointers to two
727  * sensor attributes. If specified, those attributes are compared against each
728  * other to determine if a limit has been exceeded.
729  *
730  * If the sensor attribute pointers are NULL, the function returns true if
731  * (status[reg] & mask) is true.
732  *
733  * If sensor attribute pointers are provided, a comparison against a specified
734  * limit has to be performed to determine the boolean result.
735  * In this case, the function returns true if v1 >= v2 (where v1 and v2 are
736  * sensor values referenced by sensor attribute pointers s1 and s2).
737  *
738  * To determine if an object exceeds upper limits, specify <s1,s2> = <v,limit>.
739  * To determine if an object exceeds lower limits, specify <s1,s2> = <limit,v>.
740  *
741  * If a negative value is stored in any of the referenced registers, this value
742  * reflects an error code which will be returned.
743  */
pmbus_get_boolean(struct pmbus_data * data,struct pmbus_boolean * b,int index)744 static int pmbus_get_boolean(struct pmbus_data *data, struct pmbus_boolean *b,
745 			     int index)
746 {
747 	struct pmbus_sensor *s1 = b->s1;
748 	struct pmbus_sensor *s2 = b->s2;
749 	u16 reg = (index >> 16) & 0xffff;
750 	u16 mask = index & 0xffff;
751 	int ret, status;
752 	u16 regval;
753 
754 	status = data->status[reg];
755 	if (status < 0)
756 		return status;
757 
758 	regval = status & mask;
759 	if (!s1 && !s2) {
760 		ret = !!regval;
761 	} else if (!s1 || !s2) {
762 		WARN(1, "Bad boolean descriptor %p: s1=%p, s2=%p\n", b, s1, s2);
763 		return 0;
764 	} else {
765 		long v1, v2;
766 
767 		if (s1->data < 0)
768 			return s1->data;
769 		if (s2->data < 0)
770 			return s2->data;
771 
772 		v1 = pmbus_reg2data(data, s1);
773 		v2 = pmbus_reg2data(data, s2);
774 		ret = !!(regval && v1 >= v2);
775 	}
776 	return ret;
777 }
778 
pmbus_show_boolean(struct device * dev,struct device_attribute * da,char * buf)779 static ssize_t pmbus_show_boolean(struct device *dev,
780 				  struct device_attribute *da, char *buf)
781 {
782 	struct sensor_device_attribute *attr = to_sensor_dev_attr(da);
783 	struct pmbus_boolean *boolean = to_pmbus_boolean(attr);
784 	struct pmbus_data *data = pmbus_update_device(dev);
785 	int val;
786 
787 	val = pmbus_get_boolean(data, boolean, attr->index);
788 	if (val < 0)
789 		return val;
790 	return snprintf(buf, PAGE_SIZE, "%d\n", val);
791 }
792 
pmbus_show_sensor(struct device * dev,struct device_attribute * devattr,char * buf)793 static ssize_t pmbus_show_sensor(struct device *dev,
794 				 struct device_attribute *devattr, char *buf)
795 {
796 	struct pmbus_data *data = pmbus_update_device(dev);
797 	struct pmbus_sensor *sensor = to_pmbus_sensor(devattr);
798 
799 	if (sensor->data < 0)
800 		return sensor->data;
801 
802 	return snprintf(buf, PAGE_SIZE, "%ld\n", pmbus_reg2data(data, sensor));
803 }
804 
pmbus_set_sensor(struct device * dev,struct device_attribute * devattr,const char * buf,size_t count)805 static ssize_t pmbus_set_sensor(struct device *dev,
806 				struct device_attribute *devattr,
807 				const char *buf, size_t count)
808 {
809 	struct i2c_client *client = to_i2c_client(dev->parent);
810 	struct pmbus_data *data = i2c_get_clientdata(client);
811 	struct pmbus_sensor *sensor = to_pmbus_sensor(devattr);
812 	ssize_t rv = count;
813 	long val = 0;
814 	int ret;
815 	u16 regval;
816 
817 	if (kstrtol(buf, 10, &val) < 0)
818 		return -EINVAL;
819 
820 	mutex_lock(&data->update_lock);
821 	regval = pmbus_data2reg(data, sensor, val);
822 	ret = _pmbus_write_word_data(client, sensor->page, sensor->reg, regval);
823 	if (ret < 0)
824 		rv = ret;
825 	else
826 		sensor->data = regval;
827 	mutex_unlock(&data->update_lock);
828 	return rv;
829 }
830 
pmbus_show_label(struct device * dev,struct device_attribute * da,char * buf)831 static ssize_t pmbus_show_label(struct device *dev,
832 				struct device_attribute *da, char *buf)
833 {
834 	struct pmbus_label *label = to_pmbus_label(da);
835 
836 	return snprintf(buf, PAGE_SIZE, "%s\n", label->label);
837 }
838 
pmbus_add_attribute(struct pmbus_data * data,struct attribute * attr)839 static int pmbus_add_attribute(struct pmbus_data *data, struct attribute *attr)
840 {
841 	if (data->num_attributes >= data->max_attributes - 1) {
842 		int new_max_attrs = data->max_attributes + PMBUS_ATTR_ALLOC_SIZE;
843 		void *new_attrs = krealloc(data->group.attrs,
844 					   new_max_attrs * sizeof(void *),
845 					   GFP_KERNEL);
846 		if (!new_attrs)
847 			return -ENOMEM;
848 		data->group.attrs = new_attrs;
849 		data->max_attributes = new_max_attrs;
850 	}
851 
852 	data->group.attrs[data->num_attributes++] = attr;
853 	data->group.attrs[data->num_attributes] = NULL;
854 	return 0;
855 }
856 
pmbus_dev_attr_init(struct device_attribute * dev_attr,const char * name,umode_t mode,ssize_t (* show)(struct device * dev,struct device_attribute * attr,char * buf),ssize_t (* store)(struct device * dev,struct device_attribute * attr,const char * buf,size_t count))857 static void pmbus_dev_attr_init(struct device_attribute *dev_attr,
858 				const char *name,
859 				umode_t mode,
860 				ssize_t (*show)(struct device *dev,
861 						struct device_attribute *attr,
862 						char *buf),
863 				ssize_t (*store)(struct device *dev,
864 						 struct device_attribute *attr,
865 						 const char *buf, size_t count))
866 {
867 	sysfs_attr_init(&dev_attr->attr);
868 	dev_attr->attr.name = name;
869 	dev_attr->attr.mode = mode;
870 	dev_attr->show = show;
871 	dev_attr->store = store;
872 }
873 
pmbus_attr_init(struct sensor_device_attribute * a,const char * name,umode_t mode,ssize_t (* show)(struct device * dev,struct device_attribute * attr,char * buf),ssize_t (* store)(struct device * dev,struct device_attribute * attr,const char * buf,size_t count),int idx)874 static void pmbus_attr_init(struct sensor_device_attribute *a,
875 			    const char *name,
876 			    umode_t mode,
877 			    ssize_t (*show)(struct device *dev,
878 					    struct device_attribute *attr,
879 					    char *buf),
880 			    ssize_t (*store)(struct device *dev,
881 					     struct device_attribute *attr,
882 					     const char *buf, size_t count),
883 			    int idx)
884 {
885 	pmbus_dev_attr_init(&a->dev_attr, name, mode, show, store);
886 	a->index = idx;
887 }
888 
pmbus_add_boolean(struct pmbus_data * data,const char * name,const char * type,int seq,struct pmbus_sensor * s1,struct pmbus_sensor * s2,u16 reg,u16 mask)889 static int pmbus_add_boolean(struct pmbus_data *data,
890 			     const char *name, const char *type, int seq,
891 			     struct pmbus_sensor *s1,
892 			     struct pmbus_sensor *s2,
893 			     u16 reg, u16 mask)
894 {
895 	struct pmbus_boolean *boolean;
896 	struct sensor_device_attribute *a;
897 
898 	boolean = devm_kzalloc(data->dev, sizeof(*boolean), GFP_KERNEL);
899 	if (!boolean)
900 		return -ENOMEM;
901 
902 	a = &boolean->attribute;
903 
904 	snprintf(boolean->name, sizeof(boolean->name), "%s%d_%s",
905 		 name, seq, type);
906 	boolean->s1 = s1;
907 	boolean->s2 = s2;
908 	pmbus_attr_init(a, boolean->name, S_IRUGO, pmbus_show_boolean, NULL,
909 			(reg << 16) | mask);
910 
911 	return pmbus_add_attribute(data, &a->dev_attr.attr);
912 }
913 
pmbus_add_sensor(struct pmbus_data * data,const char * name,const char * type,int seq,int page,int reg,enum pmbus_sensor_classes class,bool update,bool readonly)914 static struct pmbus_sensor *pmbus_add_sensor(struct pmbus_data *data,
915 					     const char *name, const char *type,
916 					     int seq, int page, int reg,
917 					     enum pmbus_sensor_classes class,
918 					     bool update, bool readonly)
919 {
920 	struct pmbus_sensor *sensor;
921 	struct device_attribute *a;
922 
923 	sensor = devm_kzalloc(data->dev, sizeof(*sensor), GFP_KERNEL);
924 	if (!sensor)
925 		return NULL;
926 	a = &sensor->attribute;
927 
928 	snprintf(sensor->name, sizeof(sensor->name), "%s%d_%s",
929 		 name, seq, type);
930 	sensor->page = page;
931 	sensor->reg = reg;
932 	sensor->class = class;
933 	sensor->update = update;
934 	pmbus_dev_attr_init(a, sensor->name,
935 			    readonly ? S_IRUGO : S_IRUGO | S_IWUSR,
936 			    pmbus_show_sensor, pmbus_set_sensor);
937 
938 	if (pmbus_add_attribute(data, &a->attr))
939 		return NULL;
940 
941 	sensor->next = data->sensors;
942 	data->sensors = sensor;
943 
944 	return sensor;
945 }
946 
pmbus_add_label(struct pmbus_data * data,const char * name,int seq,const char * lstring,int index)947 static int pmbus_add_label(struct pmbus_data *data,
948 			   const char *name, int seq,
949 			   const char *lstring, int index)
950 {
951 	struct pmbus_label *label;
952 	struct device_attribute *a;
953 
954 	label = devm_kzalloc(data->dev, sizeof(*label), GFP_KERNEL);
955 	if (!label)
956 		return -ENOMEM;
957 
958 	a = &label->attribute;
959 
960 	snprintf(label->name, sizeof(label->name), "%s%d_label", name, seq);
961 	if (!index)
962 		strncpy(label->label, lstring, sizeof(label->label) - 1);
963 	else
964 		snprintf(label->label, sizeof(label->label), "%s%d", lstring,
965 			 index);
966 
967 	pmbus_dev_attr_init(a, label->name, S_IRUGO, pmbus_show_label, NULL);
968 	return pmbus_add_attribute(data, &a->attr);
969 }
970 
971 /*
972  * Search for attributes. Allocate sensors, booleans, and labels as needed.
973  */
974 
975 /*
976  * The pmbus_limit_attr structure describes a single limit attribute
977  * and its associated alarm attribute.
978  */
979 struct pmbus_limit_attr {
980 	u16 reg;		/* Limit register */
981 	u16 sbit;		/* Alarm attribute status bit */
982 	bool update;		/* True if register needs updates */
983 	bool low;		/* True if low limit; for limits with compare
984 				   functions only */
985 	const char *attr;	/* Attribute name */
986 	const char *alarm;	/* Alarm attribute name */
987 };
988 
989 /*
990  * The pmbus_sensor_attr structure describes one sensor attribute. This
991  * description includes a reference to the associated limit attributes.
992  */
993 struct pmbus_sensor_attr {
994 	u16 reg;			/* sensor register */
995 	u16 gbit;			/* generic status bit */
996 	u8 nlimit;			/* # of limit registers */
997 	enum pmbus_sensor_classes class;/* sensor class */
998 	const char *label;		/* sensor label */
999 	bool paged;			/* true if paged sensor */
1000 	bool update;			/* true if update needed */
1001 	bool compare;			/* true if compare function needed */
1002 	u32 func;			/* sensor mask */
1003 	u32 sfunc;			/* sensor status mask */
1004 	int sbase;			/* status base register */
1005 	const struct pmbus_limit_attr *limit;/* limit registers */
1006 };
1007 
1008 /*
1009  * Add a set of limit attributes and, if supported, the associated
1010  * alarm attributes.
1011  * returns 0 if no alarm register found, 1 if an alarm register was found,
1012  * < 0 on errors.
1013  */
pmbus_add_limit_attrs(struct i2c_client * client,struct pmbus_data * data,const struct pmbus_driver_info * info,const char * name,int index,int page,struct pmbus_sensor * base,const struct pmbus_sensor_attr * attr)1014 static int pmbus_add_limit_attrs(struct i2c_client *client,
1015 				 struct pmbus_data *data,
1016 				 const struct pmbus_driver_info *info,
1017 				 const char *name, int index, int page,
1018 				 struct pmbus_sensor *base,
1019 				 const struct pmbus_sensor_attr *attr)
1020 {
1021 	const struct pmbus_limit_attr *l = attr->limit;
1022 	int nlimit = attr->nlimit;
1023 	int have_alarm = 0;
1024 	int i, ret;
1025 	struct pmbus_sensor *curr;
1026 
1027 	for (i = 0; i < nlimit; i++) {
1028 		if (pmbus_check_word_register(client, page, l->reg)) {
1029 			curr = pmbus_add_sensor(data, name, l->attr, index,
1030 						page, l->reg, attr->class,
1031 						attr->update || l->update,
1032 						false);
1033 			if (!curr)
1034 				return -ENOMEM;
1035 			if (l->sbit && (info->func[page] & attr->sfunc)) {
1036 				ret = pmbus_add_boolean(data, name,
1037 					l->alarm, index,
1038 					attr->compare ?  l->low ? curr : base
1039 						      : NULL,
1040 					attr->compare ? l->low ? base : curr
1041 						      : NULL,
1042 					attr->sbase + page, l->sbit);
1043 				if (ret)
1044 					return ret;
1045 				have_alarm = 1;
1046 			}
1047 		}
1048 		l++;
1049 	}
1050 	return have_alarm;
1051 }
1052 
pmbus_add_sensor_attrs_one(struct i2c_client * client,struct pmbus_data * data,const struct pmbus_driver_info * info,const char * name,int index,int page,const struct pmbus_sensor_attr * attr,bool paged)1053 static int pmbus_add_sensor_attrs_one(struct i2c_client *client,
1054 				      struct pmbus_data *data,
1055 				      const struct pmbus_driver_info *info,
1056 				      const char *name,
1057 				      int index, int page,
1058 				      const struct pmbus_sensor_attr *attr,
1059 				      bool paged)
1060 {
1061 	struct pmbus_sensor *base;
1062 	bool upper = !!(attr->gbit & 0xff00);	/* need to check STATUS_WORD */
1063 	int ret;
1064 
1065 	if (attr->label) {
1066 		ret = pmbus_add_label(data, name, index, attr->label,
1067 				      paged ? page + 1 : 0);
1068 		if (ret)
1069 			return ret;
1070 	}
1071 	base = pmbus_add_sensor(data, name, "input", index, page, attr->reg,
1072 				attr->class, true, true);
1073 	if (!base)
1074 		return -ENOMEM;
1075 	if (attr->sfunc) {
1076 		ret = pmbus_add_limit_attrs(client, data, info, name,
1077 					    index, page, base, attr);
1078 		if (ret < 0)
1079 			return ret;
1080 		/*
1081 		 * Add generic alarm attribute only if there are no individual
1082 		 * alarm attributes, if there is a global alarm bit, and if
1083 		 * the generic status register (word or byte, depending on
1084 		 * which global bit is set) for this page is accessible.
1085 		 */
1086 		if (!ret && attr->gbit &&
1087 		    (!upper || (upper && data->has_status_word)) &&
1088 		    pmbus_check_status_register(client, page)) {
1089 			ret = pmbus_add_boolean(data, name, "alarm", index,
1090 						NULL, NULL,
1091 						PB_STATUS_BASE + page,
1092 						attr->gbit);
1093 			if (ret)
1094 				return ret;
1095 		}
1096 	}
1097 	return 0;
1098 }
1099 
pmbus_sensor_is_paged(const struct pmbus_driver_info * info,const struct pmbus_sensor_attr * attr)1100 static bool pmbus_sensor_is_paged(const struct pmbus_driver_info *info,
1101 				  const struct pmbus_sensor_attr *attr)
1102 {
1103 	int p;
1104 
1105 	if (attr->paged)
1106 		return true;
1107 
1108 	/*
1109 	 * Some attributes may be present on more than one page despite
1110 	 * not being marked with the paged attribute. If that is the case,
1111 	 * then treat the sensor as being paged and add the page suffix to the
1112 	 * attribute name.
1113 	 * We don't just add the paged attribute to all such attributes, in
1114 	 * order to maintain the un-suffixed labels in the case where the
1115 	 * attribute is only on page 0.
1116 	 */
1117 	for (p = 1; p < info->pages; p++) {
1118 		if (info->func[p] & attr->func)
1119 			return true;
1120 	}
1121 	return false;
1122 }
1123 
pmbus_add_sensor_attrs(struct i2c_client * client,struct pmbus_data * data,const char * name,const struct pmbus_sensor_attr * attrs,int nattrs)1124 static int pmbus_add_sensor_attrs(struct i2c_client *client,
1125 				  struct pmbus_data *data,
1126 				  const char *name,
1127 				  const struct pmbus_sensor_attr *attrs,
1128 				  int nattrs)
1129 {
1130 	const struct pmbus_driver_info *info = data->info;
1131 	int index, i;
1132 	int ret;
1133 
1134 	index = 1;
1135 	for (i = 0; i < nattrs; i++) {
1136 		int page, pages;
1137 		bool paged = pmbus_sensor_is_paged(info, attrs);
1138 
1139 		pages = paged ? info->pages : 1;
1140 		for (page = 0; page < pages; page++) {
1141 			if (!(info->func[page] & attrs->func))
1142 				continue;
1143 			ret = pmbus_add_sensor_attrs_one(client, data, info,
1144 							 name, index, page,
1145 							 attrs, paged);
1146 			if (ret)
1147 				return ret;
1148 			index++;
1149 		}
1150 		attrs++;
1151 	}
1152 	return 0;
1153 }
1154 
1155 static const struct pmbus_limit_attr vin_limit_attrs[] = {
1156 	{
1157 		.reg = PMBUS_VIN_UV_WARN_LIMIT,
1158 		.attr = "min",
1159 		.alarm = "min_alarm",
1160 		.sbit = PB_VOLTAGE_UV_WARNING,
1161 	}, {
1162 		.reg = PMBUS_VIN_UV_FAULT_LIMIT,
1163 		.attr = "lcrit",
1164 		.alarm = "lcrit_alarm",
1165 		.sbit = PB_VOLTAGE_UV_FAULT,
1166 	}, {
1167 		.reg = PMBUS_VIN_OV_WARN_LIMIT,
1168 		.attr = "max",
1169 		.alarm = "max_alarm",
1170 		.sbit = PB_VOLTAGE_OV_WARNING,
1171 	}, {
1172 		.reg = PMBUS_VIN_OV_FAULT_LIMIT,
1173 		.attr = "crit",
1174 		.alarm = "crit_alarm",
1175 		.sbit = PB_VOLTAGE_OV_FAULT,
1176 	}, {
1177 		.reg = PMBUS_VIRT_READ_VIN_AVG,
1178 		.update = true,
1179 		.attr = "average",
1180 	}, {
1181 		.reg = PMBUS_VIRT_READ_VIN_MIN,
1182 		.update = true,
1183 		.attr = "lowest",
1184 	}, {
1185 		.reg = PMBUS_VIRT_READ_VIN_MAX,
1186 		.update = true,
1187 		.attr = "highest",
1188 	}, {
1189 		.reg = PMBUS_VIRT_RESET_VIN_HISTORY,
1190 		.attr = "reset_history",
1191 	},
1192 };
1193 
1194 static const struct pmbus_limit_attr vmon_limit_attrs[] = {
1195 	{
1196 		.reg = PMBUS_VIRT_VMON_UV_WARN_LIMIT,
1197 		.attr = "min",
1198 		.alarm = "min_alarm",
1199 		.sbit = PB_VOLTAGE_UV_WARNING,
1200 	}, {
1201 		.reg = PMBUS_VIRT_VMON_UV_FAULT_LIMIT,
1202 		.attr = "lcrit",
1203 		.alarm = "lcrit_alarm",
1204 		.sbit = PB_VOLTAGE_UV_FAULT,
1205 	}, {
1206 		.reg = PMBUS_VIRT_VMON_OV_WARN_LIMIT,
1207 		.attr = "max",
1208 		.alarm = "max_alarm",
1209 		.sbit = PB_VOLTAGE_OV_WARNING,
1210 	}, {
1211 		.reg = PMBUS_VIRT_VMON_OV_FAULT_LIMIT,
1212 		.attr = "crit",
1213 		.alarm = "crit_alarm",
1214 		.sbit = PB_VOLTAGE_OV_FAULT,
1215 	}
1216 };
1217 
1218 static const struct pmbus_limit_attr vout_limit_attrs[] = {
1219 	{
1220 		.reg = PMBUS_VOUT_UV_WARN_LIMIT,
1221 		.attr = "min",
1222 		.alarm = "min_alarm",
1223 		.sbit = PB_VOLTAGE_UV_WARNING,
1224 	}, {
1225 		.reg = PMBUS_VOUT_UV_FAULT_LIMIT,
1226 		.attr = "lcrit",
1227 		.alarm = "lcrit_alarm",
1228 		.sbit = PB_VOLTAGE_UV_FAULT,
1229 	}, {
1230 		.reg = PMBUS_VOUT_OV_WARN_LIMIT,
1231 		.attr = "max",
1232 		.alarm = "max_alarm",
1233 		.sbit = PB_VOLTAGE_OV_WARNING,
1234 	}, {
1235 		.reg = PMBUS_VOUT_OV_FAULT_LIMIT,
1236 		.attr = "crit",
1237 		.alarm = "crit_alarm",
1238 		.sbit = PB_VOLTAGE_OV_FAULT,
1239 	}, {
1240 		.reg = PMBUS_VIRT_READ_VOUT_AVG,
1241 		.update = true,
1242 		.attr = "average",
1243 	}, {
1244 		.reg = PMBUS_VIRT_READ_VOUT_MIN,
1245 		.update = true,
1246 		.attr = "lowest",
1247 	}, {
1248 		.reg = PMBUS_VIRT_READ_VOUT_MAX,
1249 		.update = true,
1250 		.attr = "highest",
1251 	}, {
1252 		.reg = PMBUS_VIRT_RESET_VOUT_HISTORY,
1253 		.attr = "reset_history",
1254 	}
1255 };
1256 
1257 static const struct pmbus_sensor_attr voltage_attributes[] = {
1258 	{
1259 		.reg = PMBUS_READ_VIN,
1260 		.class = PSC_VOLTAGE_IN,
1261 		.label = "vin",
1262 		.func = PMBUS_HAVE_VIN,
1263 		.sfunc = PMBUS_HAVE_STATUS_INPUT,
1264 		.sbase = PB_STATUS_INPUT_BASE,
1265 		.gbit = PB_STATUS_VIN_UV,
1266 		.limit = vin_limit_attrs,
1267 		.nlimit = ARRAY_SIZE(vin_limit_attrs),
1268 	}, {
1269 		.reg = PMBUS_VIRT_READ_VMON,
1270 		.class = PSC_VOLTAGE_IN,
1271 		.label = "vmon",
1272 		.func = PMBUS_HAVE_VMON,
1273 		.sfunc = PMBUS_HAVE_STATUS_VMON,
1274 		.sbase = PB_STATUS_VMON_BASE,
1275 		.limit = vmon_limit_attrs,
1276 		.nlimit = ARRAY_SIZE(vmon_limit_attrs),
1277 	}, {
1278 		.reg = PMBUS_READ_VCAP,
1279 		.class = PSC_VOLTAGE_IN,
1280 		.label = "vcap",
1281 		.func = PMBUS_HAVE_VCAP,
1282 	}, {
1283 		.reg = PMBUS_READ_VOUT,
1284 		.class = PSC_VOLTAGE_OUT,
1285 		.label = "vout",
1286 		.paged = true,
1287 		.func = PMBUS_HAVE_VOUT,
1288 		.sfunc = PMBUS_HAVE_STATUS_VOUT,
1289 		.sbase = PB_STATUS_VOUT_BASE,
1290 		.gbit = PB_STATUS_VOUT_OV,
1291 		.limit = vout_limit_attrs,
1292 		.nlimit = ARRAY_SIZE(vout_limit_attrs),
1293 	}
1294 };
1295 
1296 /* Current attributes */
1297 
1298 static const struct pmbus_limit_attr iin_limit_attrs[] = {
1299 	{
1300 		.reg = PMBUS_IIN_OC_WARN_LIMIT,
1301 		.attr = "max",
1302 		.alarm = "max_alarm",
1303 		.sbit = PB_IIN_OC_WARNING,
1304 	}, {
1305 		.reg = PMBUS_IIN_OC_FAULT_LIMIT,
1306 		.attr = "crit",
1307 		.alarm = "crit_alarm",
1308 		.sbit = PB_IIN_OC_FAULT,
1309 	}, {
1310 		.reg = PMBUS_VIRT_READ_IIN_AVG,
1311 		.update = true,
1312 		.attr = "average",
1313 	}, {
1314 		.reg = PMBUS_VIRT_READ_IIN_MIN,
1315 		.update = true,
1316 		.attr = "lowest",
1317 	}, {
1318 		.reg = PMBUS_VIRT_READ_IIN_MAX,
1319 		.update = true,
1320 		.attr = "highest",
1321 	}, {
1322 		.reg = PMBUS_VIRT_RESET_IIN_HISTORY,
1323 		.attr = "reset_history",
1324 	}
1325 };
1326 
1327 static const struct pmbus_limit_attr iout_limit_attrs[] = {
1328 	{
1329 		.reg = PMBUS_IOUT_OC_WARN_LIMIT,
1330 		.attr = "max",
1331 		.alarm = "max_alarm",
1332 		.sbit = PB_IOUT_OC_WARNING,
1333 	}, {
1334 		.reg = PMBUS_IOUT_UC_FAULT_LIMIT,
1335 		.attr = "lcrit",
1336 		.alarm = "lcrit_alarm",
1337 		.sbit = PB_IOUT_UC_FAULT,
1338 	}, {
1339 		.reg = PMBUS_IOUT_OC_FAULT_LIMIT,
1340 		.attr = "crit",
1341 		.alarm = "crit_alarm",
1342 		.sbit = PB_IOUT_OC_FAULT,
1343 	}, {
1344 		.reg = PMBUS_VIRT_READ_IOUT_AVG,
1345 		.update = true,
1346 		.attr = "average",
1347 	}, {
1348 		.reg = PMBUS_VIRT_READ_IOUT_MIN,
1349 		.update = true,
1350 		.attr = "lowest",
1351 	}, {
1352 		.reg = PMBUS_VIRT_READ_IOUT_MAX,
1353 		.update = true,
1354 		.attr = "highest",
1355 	}, {
1356 		.reg = PMBUS_VIRT_RESET_IOUT_HISTORY,
1357 		.attr = "reset_history",
1358 	}
1359 };
1360 
1361 static const struct pmbus_sensor_attr current_attributes[] = {
1362 	{
1363 		.reg = PMBUS_READ_IIN,
1364 		.class = PSC_CURRENT_IN,
1365 		.label = "iin",
1366 		.func = PMBUS_HAVE_IIN,
1367 		.sfunc = PMBUS_HAVE_STATUS_INPUT,
1368 		.sbase = PB_STATUS_INPUT_BASE,
1369 		.gbit = PB_STATUS_INPUT,
1370 		.limit = iin_limit_attrs,
1371 		.nlimit = ARRAY_SIZE(iin_limit_attrs),
1372 	}, {
1373 		.reg = PMBUS_READ_IOUT,
1374 		.class = PSC_CURRENT_OUT,
1375 		.label = "iout",
1376 		.paged = true,
1377 		.func = PMBUS_HAVE_IOUT,
1378 		.sfunc = PMBUS_HAVE_STATUS_IOUT,
1379 		.sbase = PB_STATUS_IOUT_BASE,
1380 		.gbit = PB_STATUS_IOUT_OC,
1381 		.limit = iout_limit_attrs,
1382 		.nlimit = ARRAY_SIZE(iout_limit_attrs),
1383 	}
1384 };
1385 
1386 /* Power attributes */
1387 
1388 static const struct pmbus_limit_attr pin_limit_attrs[] = {
1389 	{
1390 		.reg = PMBUS_PIN_OP_WARN_LIMIT,
1391 		.attr = "max",
1392 		.alarm = "alarm",
1393 		.sbit = PB_PIN_OP_WARNING,
1394 	}, {
1395 		.reg = PMBUS_VIRT_READ_PIN_AVG,
1396 		.update = true,
1397 		.attr = "average",
1398 	}, {
1399 		.reg = PMBUS_VIRT_READ_PIN_MIN,
1400 		.update = true,
1401 		.attr = "input_lowest",
1402 	}, {
1403 		.reg = PMBUS_VIRT_READ_PIN_MAX,
1404 		.update = true,
1405 		.attr = "input_highest",
1406 	}, {
1407 		.reg = PMBUS_VIRT_RESET_PIN_HISTORY,
1408 		.attr = "reset_history",
1409 	}
1410 };
1411 
1412 static const struct pmbus_limit_attr pout_limit_attrs[] = {
1413 	{
1414 		.reg = PMBUS_POUT_MAX,
1415 		.attr = "cap",
1416 		.alarm = "cap_alarm",
1417 		.sbit = PB_POWER_LIMITING,
1418 	}, {
1419 		.reg = PMBUS_POUT_OP_WARN_LIMIT,
1420 		.attr = "max",
1421 		.alarm = "max_alarm",
1422 		.sbit = PB_POUT_OP_WARNING,
1423 	}, {
1424 		.reg = PMBUS_POUT_OP_FAULT_LIMIT,
1425 		.attr = "crit",
1426 		.alarm = "crit_alarm",
1427 		.sbit = PB_POUT_OP_FAULT,
1428 	}, {
1429 		.reg = PMBUS_VIRT_READ_POUT_AVG,
1430 		.update = true,
1431 		.attr = "average",
1432 	}, {
1433 		.reg = PMBUS_VIRT_READ_POUT_MIN,
1434 		.update = true,
1435 		.attr = "input_lowest",
1436 	}, {
1437 		.reg = PMBUS_VIRT_READ_POUT_MAX,
1438 		.update = true,
1439 		.attr = "input_highest",
1440 	}, {
1441 		.reg = PMBUS_VIRT_RESET_POUT_HISTORY,
1442 		.attr = "reset_history",
1443 	}
1444 };
1445 
1446 static const struct pmbus_sensor_attr power_attributes[] = {
1447 	{
1448 		.reg = PMBUS_READ_PIN,
1449 		.class = PSC_POWER,
1450 		.label = "pin",
1451 		.func = PMBUS_HAVE_PIN,
1452 		.sfunc = PMBUS_HAVE_STATUS_INPUT,
1453 		.sbase = PB_STATUS_INPUT_BASE,
1454 		.gbit = PB_STATUS_INPUT,
1455 		.limit = pin_limit_attrs,
1456 		.nlimit = ARRAY_SIZE(pin_limit_attrs),
1457 	}, {
1458 		.reg = PMBUS_READ_POUT,
1459 		.class = PSC_POWER,
1460 		.label = "pout",
1461 		.paged = true,
1462 		.func = PMBUS_HAVE_POUT,
1463 		.sfunc = PMBUS_HAVE_STATUS_IOUT,
1464 		.sbase = PB_STATUS_IOUT_BASE,
1465 		.limit = pout_limit_attrs,
1466 		.nlimit = ARRAY_SIZE(pout_limit_attrs),
1467 	}
1468 };
1469 
1470 /* Temperature atributes */
1471 
1472 static const struct pmbus_limit_attr temp_limit_attrs[] = {
1473 	{
1474 		.reg = PMBUS_UT_WARN_LIMIT,
1475 		.low = true,
1476 		.attr = "min",
1477 		.alarm = "min_alarm",
1478 		.sbit = PB_TEMP_UT_WARNING,
1479 	}, {
1480 		.reg = PMBUS_UT_FAULT_LIMIT,
1481 		.low = true,
1482 		.attr = "lcrit",
1483 		.alarm = "lcrit_alarm",
1484 		.sbit = PB_TEMP_UT_FAULT,
1485 	}, {
1486 		.reg = PMBUS_OT_WARN_LIMIT,
1487 		.attr = "max",
1488 		.alarm = "max_alarm",
1489 		.sbit = PB_TEMP_OT_WARNING,
1490 	}, {
1491 		.reg = PMBUS_OT_FAULT_LIMIT,
1492 		.attr = "crit",
1493 		.alarm = "crit_alarm",
1494 		.sbit = PB_TEMP_OT_FAULT,
1495 	}, {
1496 		.reg = PMBUS_VIRT_READ_TEMP_MIN,
1497 		.attr = "lowest",
1498 	}, {
1499 		.reg = PMBUS_VIRT_READ_TEMP_AVG,
1500 		.attr = "average",
1501 	}, {
1502 		.reg = PMBUS_VIRT_READ_TEMP_MAX,
1503 		.attr = "highest",
1504 	}, {
1505 		.reg = PMBUS_VIRT_RESET_TEMP_HISTORY,
1506 		.attr = "reset_history",
1507 	}
1508 };
1509 
1510 static const struct pmbus_limit_attr temp_limit_attrs2[] = {
1511 	{
1512 		.reg = PMBUS_UT_WARN_LIMIT,
1513 		.low = true,
1514 		.attr = "min",
1515 		.alarm = "min_alarm",
1516 		.sbit = PB_TEMP_UT_WARNING,
1517 	}, {
1518 		.reg = PMBUS_UT_FAULT_LIMIT,
1519 		.low = true,
1520 		.attr = "lcrit",
1521 		.alarm = "lcrit_alarm",
1522 		.sbit = PB_TEMP_UT_FAULT,
1523 	}, {
1524 		.reg = PMBUS_OT_WARN_LIMIT,
1525 		.attr = "max",
1526 		.alarm = "max_alarm",
1527 		.sbit = PB_TEMP_OT_WARNING,
1528 	}, {
1529 		.reg = PMBUS_OT_FAULT_LIMIT,
1530 		.attr = "crit",
1531 		.alarm = "crit_alarm",
1532 		.sbit = PB_TEMP_OT_FAULT,
1533 	}, {
1534 		.reg = PMBUS_VIRT_READ_TEMP2_MIN,
1535 		.attr = "lowest",
1536 	}, {
1537 		.reg = PMBUS_VIRT_READ_TEMP2_AVG,
1538 		.attr = "average",
1539 	}, {
1540 		.reg = PMBUS_VIRT_READ_TEMP2_MAX,
1541 		.attr = "highest",
1542 	}, {
1543 		.reg = PMBUS_VIRT_RESET_TEMP2_HISTORY,
1544 		.attr = "reset_history",
1545 	}
1546 };
1547 
1548 static const struct pmbus_limit_attr temp_limit_attrs3[] = {
1549 	{
1550 		.reg = PMBUS_UT_WARN_LIMIT,
1551 		.low = true,
1552 		.attr = "min",
1553 		.alarm = "min_alarm",
1554 		.sbit = PB_TEMP_UT_WARNING,
1555 	}, {
1556 		.reg = PMBUS_UT_FAULT_LIMIT,
1557 		.low = true,
1558 		.attr = "lcrit",
1559 		.alarm = "lcrit_alarm",
1560 		.sbit = PB_TEMP_UT_FAULT,
1561 	}, {
1562 		.reg = PMBUS_OT_WARN_LIMIT,
1563 		.attr = "max",
1564 		.alarm = "max_alarm",
1565 		.sbit = PB_TEMP_OT_WARNING,
1566 	}, {
1567 		.reg = PMBUS_OT_FAULT_LIMIT,
1568 		.attr = "crit",
1569 		.alarm = "crit_alarm",
1570 		.sbit = PB_TEMP_OT_FAULT,
1571 	}
1572 };
1573 
1574 static const struct pmbus_sensor_attr temp_attributes[] = {
1575 	{
1576 		.reg = PMBUS_READ_TEMPERATURE_1,
1577 		.class = PSC_TEMPERATURE,
1578 		.paged = true,
1579 		.update = true,
1580 		.compare = true,
1581 		.func = PMBUS_HAVE_TEMP,
1582 		.sfunc = PMBUS_HAVE_STATUS_TEMP,
1583 		.sbase = PB_STATUS_TEMP_BASE,
1584 		.gbit = PB_STATUS_TEMPERATURE,
1585 		.limit = temp_limit_attrs,
1586 		.nlimit = ARRAY_SIZE(temp_limit_attrs),
1587 	}, {
1588 		.reg = PMBUS_READ_TEMPERATURE_2,
1589 		.class = PSC_TEMPERATURE,
1590 		.paged = true,
1591 		.update = true,
1592 		.compare = true,
1593 		.func = PMBUS_HAVE_TEMP2,
1594 		.sfunc = PMBUS_HAVE_STATUS_TEMP,
1595 		.sbase = PB_STATUS_TEMP_BASE,
1596 		.gbit = PB_STATUS_TEMPERATURE,
1597 		.limit = temp_limit_attrs2,
1598 		.nlimit = ARRAY_SIZE(temp_limit_attrs2),
1599 	}, {
1600 		.reg = PMBUS_READ_TEMPERATURE_3,
1601 		.class = PSC_TEMPERATURE,
1602 		.paged = true,
1603 		.update = true,
1604 		.compare = true,
1605 		.func = PMBUS_HAVE_TEMP3,
1606 		.sfunc = PMBUS_HAVE_STATUS_TEMP,
1607 		.sbase = PB_STATUS_TEMP_BASE,
1608 		.gbit = PB_STATUS_TEMPERATURE,
1609 		.limit = temp_limit_attrs3,
1610 		.nlimit = ARRAY_SIZE(temp_limit_attrs3),
1611 	}
1612 };
1613 
1614 static const int pmbus_fan_registers[] = {
1615 	PMBUS_READ_FAN_SPEED_1,
1616 	PMBUS_READ_FAN_SPEED_2,
1617 	PMBUS_READ_FAN_SPEED_3,
1618 	PMBUS_READ_FAN_SPEED_4
1619 };
1620 
1621 static const int pmbus_fan_config_registers[] = {
1622 	PMBUS_FAN_CONFIG_12,
1623 	PMBUS_FAN_CONFIG_12,
1624 	PMBUS_FAN_CONFIG_34,
1625 	PMBUS_FAN_CONFIG_34
1626 };
1627 
1628 static const int pmbus_fan_status_registers[] = {
1629 	PMBUS_STATUS_FAN_12,
1630 	PMBUS_STATUS_FAN_12,
1631 	PMBUS_STATUS_FAN_34,
1632 	PMBUS_STATUS_FAN_34
1633 };
1634 
1635 static const u32 pmbus_fan_flags[] = {
1636 	PMBUS_HAVE_FAN12,
1637 	PMBUS_HAVE_FAN12,
1638 	PMBUS_HAVE_FAN34,
1639 	PMBUS_HAVE_FAN34
1640 };
1641 
1642 static const u32 pmbus_fan_status_flags[] = {
1643 	PMBUS_HAVE_STATUS_FAN12,
1644 	PMBUS_HAVE_STATUS_FAN12,
1645 	PMBUS_HAVE_STATUS_FAN34,
1646 	PMBUS_HAVE_STATUS_FAN34
1647 };
1648 
1649 /* Fans */
pmbus_add_fan_attributes(struct i2c_client * client,struct pmbus_data * data)1650 static int pmbus_add_fan_attributes(struct i2c_client *client,
1651 				    struct pmbus_data *data)
1652 {
1653 	const struct pmbus_driver_info *info = data->info;
1654 	int index = 1;
1655 	int page;
1656 	int ret;
1657 
1658 	for (page = 0; page < info->pages; page++) {
1659 		int f;
1660 
1661 		for (f = 0; f < ARRAY_SIZE(pmbus_fan_registers); f++) {
1662 			int regval;
1663 
1664 			if (!(info->func[page] & pmbus_fan_flags[f]))
1665 				break;
1666 
1667 			if (!pmbus_check_word_register(client, page,
1668 						       pmbus_fan_registers[f]))
1669 				break;
1670 
1671 			/*
1672 			 * Skip fan if not installed.
1673 			 * Each fan configuration register covers multiple fans,
1674 			 * so we have to do some magic.
1675 			 */
1676 			regval = _pmbus_read_byte_data(client, page,
1677 				pmbus_fan_config_registers[f]);
1678 			if (regval < 0 ||
1679 			    (!(regval & (PB_FAN_1_INSTALLED >> ((f & 1) * 4)))))
1680 				continue;
1681 
1682 			if (pmbus_add_sensor(data, "fan", "input", index,
1683 					     page, pmbus_fan_registers[f],
1684 					     PSC_FAN, true, true) == NULL)
1685 				return -ENOMEM;
1686 
1687 			/*
1688 			 * Each fan status register covers multiple fans,
1689 			 * so we have to do some magic.
1690 			 */
1691 			if ((info->func[page] & pmbus_fan_status_flags[f]) &&
1692 			    pmbus_check_byte_register(client,
1693 					page, pmbus_fan_status_registers[f])) {
1694 				int base;
1695 
1696 				if (f > 1)	/* fan 3, 4 */
1697 					base = PB_STATUS_FAN34_BASE + page;
1698 				else
1699 					base = PB_STATUS_FAN_BASE + page;
1700 				ret = pmbus_add_boolean(data, "fan",
1701 					"alarm", index, NULL, NULL, base,
1702 					PB_FAN_FAN1_WARNING >> (f & 1));
1703 				if (ret)
1704 					return ret;
1705 				ret = pmbus_add_boolean(data, "fan",
1706 					"fault", index, NULL, NULL, base,
1707 					PB_FAN_FAN1_FAULT >> (f & 1));
1708 				if (ret)
1709 					return ret;
1710 			}
1711 			index++;
1712 		}
1713 	}
1714 	return 0;
1715 }
1716 
pmbus_find_attributes(struct i2c_client * client,struct pmbus_data * data)1717 static int pmbus_find_attributes(struct i2c_client *client,
1718 				 struct pmbus_data *data)
1719 {
1720 	int ret;
1721 
1722 	/* Voltage sensors */
1723 	ret = pmbus_add_sensor_attrs(client, data, "in", voltage_attributes,
1724 				     ARRAY_SIZE(voltage_attributes));
1725 	if (ret)
1726 		return ret;
1727 
1728 	/* Current sensors */
1729 	ret = pmbus_add_sensor_attrs(client, data, "curr", current_attributes,
1730 				     ARRAY_SIZE(current_attributes));
1731 	if (ret)
1732 		return ret;
1733 
1734 	/* Power sensors */
1735 	ret = pmbus_add_sensor_attrs(client, data, "power", power_attributes,
1736 				     ARRAY_SIZE(power_attributes));
1737 	if (ret)
1738 		return ret;
1739 
1740 	/* Temperature sensors */
1741 	ret = pmbus_add_sensor_attrs(client, data, "temp", temp_attributes,
1742 				     ARRAY_SIZE(temp_attributes));
1743 	if (ret)
1744 		return ret;
1745 
1746 	/* Fans */
1747 	ret = pmbus_add_fan_attributes(client, data);
1748 	return ret;
1749 }
1750 
1751 /*
1752  * Identify chip parameters.
1753  * This function is called for all chips.
1754  */
pmbus_identify_common(struct i2c_client * client,struct pmbus_data * data,int page)1755 static int pmbus_identify_common(struct i2c_client *client,
1756 				 struct pmbus_data *data, int page)
1757 {
1758 	int vout_mode = -1;
1759 
1760 	if (pmbus_check_byte_register(client, page, PMBUS_VOUT_MODE))
1761 		vout_mode = _pmbus_read_byte_data(client, page,
1762 						  PMBUS_VOUT_MODE);
1763 	if (vout_mode >= 0 && vout_mode != 0xff) {
1764 		/*
1765 		 * Not all chips support the VOUT_MODE command,
1766 		 * so a failure to read it is not an error.
1767 		 */
1768 		switch (vout_mode >> 5) {
1769 		case 0:	/* linear mode      */
1770 			if (data->info->format[PSC_VOLTAGE_OUT] != linear)
1771 				return -ENODEV;
1772 
1773 			data->exponent[page] = ((s8)(vout_mode << 3)) >> 3;
1774 			break;
1775 		case 1: /* VID mode         */
1776 			if (data->info->format[PSC_VOLTAGE_OUT] != vid)
1777 				return -ENODEV;
1778 			break;
1779 		case 2:	/* direct mode      */
1780 			if (data->info->format[PSC_VOLTAGE_OUT] != direct)
1781 				return -ENODEV;
1782 			break;
1783 		default:
1784 			return -ENODEV;
1785 		}
1786 	}
1787 
1788 	pmbus_clear_fault_page(client, page);
1789 	return 0;
1790 }
1791 
pmbus_read_status_byte(struct i2c_client * client,int page)1792 static int pmbus_read_status_byte(struct i2c_client *client, int page)
1793 {
1794 	return _pmbus_read_byte_data(client, page, PMBUS_STATUS_BYTE);
1795 }
1796 
pmbus_read_status_word(struct i2c_client * client,int page)1797 static int pmbus_read_status_word(struct i2c_client *client, int page)
1798 {
1799 	return _pmbus_read_word_data(client, page, PMBUS_STATUS_WORD);
1800 }
1801 
pmbus_init_common(struct i2c_client * client,struct pmbus_data * data,struct pmbus_driver_info * info)1802 static int pmbus_init_common(struct i2c_client *client, struct pmbus_data *data,
1803 			     struct pmbus_driver_info *info)
1804 {
1805 	struct device *dev = &client->dev;
1806 	int page, ret;
1807 
1808 	/*
1809 	 * Some PMBus chips don't support PMBUS_STATUS_WORD, so try
1810 	 * to use PMBUS_STATUS_BYTE instead if that is the case.
1811 	 * Bail out if both registers are not supported.
1812 	 */
1813 	data->read_status = pmbus_read_status_word;
1814 	ret = i2c_smbus_read_word_data(client, PMBUS_STATUS_WORD);
1815 	if (ret < 0 || ret == 0xffff) {
1816 		data->read_status = pmbus_read_status_byte;
1817 		ret = i2c_smbus_read_byte_data(client, PMBUS_STATUS_BYTE);
1818 		if (ret < 0 || ret == 0xff) {
1819 			dev_err(dev, "PMBus status register not found\n");
1820 			return -ENODEV;
1821 		}
1822 	} else {
1823 		data->has_status_word = true;
1824 	}
1825 
1826 	/* Enable PEC if the controller supports it */
1827 	ret = i2c_smbus_read_byte_data(client, PMBUS_CAPABILITY);
1828 	if (ret >= 0 && (ret & PB_CAPABILITY_ERROR_CHECK))
1829 		client->flags |= I2C_CLIENT_PEC;
1830 
1831 	if (data->info->pages)
1832 		pmbus_clear_faults(client);
1833 	else
1834 		pmbus_clear_fault_page(client, -1);
1835 
1836 	if (info->identify) {
1837 		ret = (*info->identify)(client, info);
1838 		if (ret < 0) {
1839 			dev_err(dev, "Chip identification failed\n");
1840 			return ret;
1841 		}
1842 	}
1843 
1844 	if (info->pages <= 0 || info->pages > PMBUS_PAGES) {
1845 		dev_err(dev, "Bad number of PMBus pages: %d\n", info->pages);
1846 		return -ENODEV;
1847 	}
1848 
1849 	for (page = 0; page < info->pages; page++) {
1850 		ret = pmbus_identify_common(client, data, page);
1851 		if (ret < 0) {
1852 			dev_err(dev, "Failed to identify chip capabilities\n");
1853 			return ret;
1854 		}
1855 	}
1856 	return 0;
1857 }
1858 
1859 #if IS_ENABLED(CONFIG_REGULATOR)
pmbus_regulator_is_enabled(struct regulator_dev * rdev)1860 static int pmbus_regulator_is_enabled(struct regulator_dev *rdev)
1861 {
1862 	struct device *dev = rdev_get_dev(rdev);
1863 	struct i2c_client *client = to_i2c_client(dev->parent);
1864 	u8 page = rdev_get_id(rdev);
1865 	int ret;
1866 
1867 	ret = pmbus_read_byte_data(client, page, PMBUS_OPERATION);
1868 	if (ret < 0)
1869 		return ret;
1870 
1871 	return !!(ret & PB_OPERATION_CONTROL_ON);
1872 }
1873 
_pmbus_regulator_on_off(struct regulator_dev * rdev,bool enable)1874 static int _pmbus_regulator_on_off(struct regulator_dev *rdev, bool enable)
1875 {
1876 	struct device *dev = rdev_get_dev(rdev);
1877 	struct i2c_client *client = to_i2c_client(dev->parent);
1878 	u8 page = rdev_get_id(rdev);
1879 
1880 	return pmbus_update_byte_data(client, page, PMBUS_OPERATION,
1881 				      PB_OPERATION_CONTROL_ON,
1882 				      enable ? PB_OPERATION_CONTROL_ON : 0);
1883 }
1884 
pmbus_regulator_enable(struct regulator_dev * rdev)1885 static int pmbus_regulator_enable(struct regulator_dev *rdev)
1886 {
1887 	return _pmbus_regulator_on_off(rdev, 1);
1888 }
1889 
pmbus_regulator_disable(struct regulator_dev * rdev)1890 static int pmbus_regulator_disable(struct regulator_dev *rdev)
1891 {
1892 	return _pmbus_regulator_on_off(rdev, 0);
1893 }
1894 
1895 const struct regulator_ops pmbus_regulator_ops = {
1896 	.enable = pmbus_regulator_enable,
1897 	.disable = pmbus_regulator_disable,
1898 	.is_enabled = pmbus_regulator_is_enabled,
1899 };
1900 EXPORT_SYMBOL_GPL(pmbus_regulator_ops);
1901 
pmbus_regulator_register(struct pmbus_data * data)1902 static int pmbus_regulator_register(struct pmbus_data *data)
1903 {
1904 	struct device *dev = data->dev;
1905 	const struct pmbus_driver_info *info = data->info;
1906 	const struct pmbus_platform_data *pdata = dev_get_platdata(dev);
1907 	struct regulator_dev *rdev;
1908 	int i;
1909 
1910 	for (i = 0; i < info->num_regulators; i++) {
1911 		struct regulator_config config = { };
1912 
1913 		config.dev = dev;
1914 		config.driver_data = data;
1915 
1916 		if (pdata && pdata->reg_init_data)
1917 			config.init_data = &pdata->reg_init_data[i];
1918 
1919 		rdev = devm_regulator_register(dev, &info->reg_desc[i],
1920 					       &config);
1921 		if (IS_ERR(rdev)) {
1922 			dev_err(dev, "Failed to register %s regulator\n",
1923 				info->reg_desc[i].name);
1924 			return PTR_ERR(rdev);
1925 		}
1926 	}
1927 
1928 	return 0;
1929 }
1930 #else
pmbus_regulator_register(struct pmbus_data * data)1931 static int pmbus_regulator_register(struct pmbus_data *data)
1932 {
1933 	return 0;
1934 }
1935 #endif
1936 
1937 static struct dentry *pmbus_debugfs_dir;	/* pmbus debugfs directory */
1938 
1939 #if IS_ENABLED(CONFIG_DEBUG_FS)
pmbus_debugfs_get(void * data,u64 * val)1940 static int pmbus_debugfs_get(void *data, u64 *val)
1941 {
1942 	int rc;
1943 	struct pmbus_debugfs_entry *entry = data;
1944 
1945 	rc = _pmbus_read_byte_data(entry->client, entry->page, entry->reg);
1946 	if (rc < 0)
1947 		return rc;
1948 
1949 	*val = rc;
1950 
1951 	return 0;
1952 }
1953 DEFINE_DEBUGFS_ATTRIBUTE(pmbus_debugfs_ops, pmbus_debugfs_get, NULL,
1954 			 "0x%02llx\n");
1955 
pmbus_debugfs_get_status(void * data,u64 * val)1956 static int pmbus_debugfs_get_status(void *data, u64 *val)
1957 {
1958 	int rc;
1959 	struct pmbus_debugfs_entry *entry = data;
1960 	struct pmbus_data *pdata = i2c_get_clientdata(entry->client);
1961 
1962 	rc = pdata->read_status(entry->client, entry->page);
1963 	if (rc < 0)
1964 		return rc;
1965 
1966 	*val = rc;
1967 
1968 	return 0;
1969 }
1970 DEFINE_DEBUGFS_ATTRIBUTE(pmbus_debugfs_ops_status, pmbus_debugfs_get_status,
1971 			 NULL, "0x%04llx\n");
1972 
pmbus_init_debugfs(struct i2c_client * client,struct pmbus_data * data)1973 static int pmbus_init_debugfs(struct i2c_client *client,
1974 			      struct pmbus_data *data)
1975 {
1976 	int i, idx = 0;
1977 	char name[PMBUS_NAME_SIZE];
1978 	struct pmbus_debugfs_entry *entries;
1979 
1980 	if (!pmbus_debugfs_dir)
1981 		return -ENODEV;
1982 
1983 	/*
1984 	 * Create the debugfs directory for this device. Use the hwmon device
1985 	 * name to avoid conflicts (hwmon numbers are globally unique).
1986 	 */
1987 	data->debugfs = debugfs_create_dir(dev_name(data->hwmon_dev),
1988 					   pmbus_debugfs_dir);
1989 	if (IS_ERR_OR_NULL(data->debugfs)) {
1990 		data->debugfs = NULL;
1991 		return -ENODEV;
1992 	}
1993 
1994 	/* Allocate the max possible entries we need. */
1995 	entries = devm_kzalloc(data->dev,
1996 			       sizeof(*entries) * (data->info->pages * 10),
1997 			       GFP_KERNEL);
1998 	if (!entries)
1999 		return -ENOMEM;
2000 
2001 	for (i = 0; i < data->info->pages; ++i) {
2002 		/* Check accessibility of status register if it's not page 0 */
2003 		if (!i || pmbus_check_status_register(client, i)) {
2004 			/* No need to set reg as we have special read op. */
2005 			entries[idx].client = client;
2006 			entries[idx].page = i;
2007 			scnprintf(name, PMBUS_NAME_SIZE, "status%d", i);
2008 			debugfs_create_file(name, 0444, data->debugfs,
2009 					    &entries[idx++],
2010 					    &pmbus_debugfs_ops_status);
2011 		}
2012 
2013 		if (data->info->func[i] & PMBUS_HAVE_STATUS_VOUT) {
2014 			entries[idx].client = client;
2015 			entries[idx].page = i;
2016 			entries[idx].reg = PMBUS_STATUS_VOUT;
2017 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_vout", i);
2018 			debugfs_create_file(name, 0444, data->debugfs,
2019 					    &entries[idx++],
2020 					    &pmbus_debugfs_ops);
2021 		}
2022 
2023 		if (data->info->func[i] & PMBUS_HAVE_STATUS_IOUT) {
2024 			entries[idx].client = client;
2025 			entries[idx].page = i;
2026 			entries[idx].reg = PMBUS_STATUS_IOUT;
2027 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_iout", i);
2028 			debugfs_create_file(name, 0444, data->debugfs,
2029 					    &entries[idx++],
2030 					    &pmbus_debugfs_ops);
2031 		}
2032 
2033 		if (data->info->func[i] & PMBUS_HAVE_STATUS_INPUT) {
2034 			entries[idx].client = client;
2035 			entries[idx].page = i;
2036 			entries[idx].reg = PMBUS_STATUS_INPUT;
2037 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_input", i);
2038 			debugfs_create_file(name, 0444, data->debugfs,
2039 					    &entries[idx++],
2040 					    &pmbus_debugfs_ops);
2041 		}
2042 
2043 		if (data->info->func[i] & PMBUS_HAVE_STATUS_TEMP) {
2044 			entries[idx].client = client;
2045 			entries[idx].page = i;
2046 			entries[idx].reg = PMBUS_STATUS_TEMPERATURE;
2047 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_temp", i);
2048 			debugfs_create_file(name, 0444, data->debugfs,
2049 					    &entries[idx++],
2050 					    &pmbus_debugfs_ops);
2051 		}
2052 
2053 		if (pmbus_check_byte_register(client, i, PMBUS_STATUS_CML)) {
2054 			entries[idx].client = client;
2055 			entries[idx].page = i;
2056 			entries[idx].reg = PMBUS_STATUS_CML;
2057 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_cml", i);
2058 			debugfs_create_file(name, 0444, data->debugfs,
2059 					    &entries[idx++],
2060 					    &pmbus_debugfs_ops);
2061 		}
2062 
2063 		if (pmbus_check_byte_register(client, i, PMBUS_STATUS_OTHER)) {
2064 			entries[idx].client = client;
2065 			entries[idx].page = i;
2066 			entries[idx].reg = PMBUS_STATUS_OTHER;
2067 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_other", i);
2068 			debugfs_create_file(name, 0444, data->debugfs,
2069 					    &entries[idx++],
2070 					    &pmbus_debugfs_ops);
2071 		}
2072 
2073 		if (pmbus_check_byte_register(client, i,
2074 					      PMBUS_STATUS_MFR_SPECIFIC)) {
2075 			entries[idx].client = client;
2076 			entries[idx].page = i;
2077 			entries[idx].reg = PMBUS_STATUS_MFR_SPECIFIC;
2078 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_mfr", i);
2079 			debugfs_create_file(name, 0444, data->debugfs,
2080 					    &entries[idx++],
2081 					    &pmbus_debugfs_ops);
2082 		}
2083 
2084 		if (data->info->func[i] & PMBUS_HAVE_STATUS_FAN12) {
2085 			entries[idx].client = client;
2086 			entries[idx].page = i;
2087 			entries[idx].reg = PMBUS_STATUS_FAN_12;
2088 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_fan12", i);
2089 			debugfs_create_file(name, 0444, data->debugfs,
2090 					    &entries[idx++],
2091 					    &pmbus_debugfs_ops);
2092 		}
2093 
2094 		if (data->info->func[i] & PMBUS_HAVE_STATUS_FAN34) {
2095 			entries[idx].client = client;
2096 			entries[idx].page = i;
2097 			entries[idx].reg = PMBUS_STATUS_FAN_34;
2098 			scnprintf(name, PMBUS_NAME_SIZE, "status%d_fan34", i);
2099 			debugfs_create_file(name, 0444, data->debugfs,
2100 					    &entries[idx++],
2101 					    &pmbus_debugfs_ops);
2102 		}
2103 	}
2104 
2105 	return 0;
2106 }
2107 #else
pmbus_init_debugfs(struct i2c_client * client,struct pmbus_data * data)2108 static int pmbus_init_debugfs(struct i2c_client *client,
2109 			      struct pmbus_data *data)
2110 {
2111 	return 0;
2112 }
2113 #endif	/* IS_ENABLED(CONFIG_DEBUG_FS) */
2114 
pmbus_do_probe(struct i2c_client * client,const struct i2c_device_id * id,struct pmbus_driver_info * info)2115 int pmbus_do_probe(struct i2c_client *client, const struct i2c_device_id *id,
2116 		   struct pmbus_driver_info *info)
2117 {
2118 	struct device *dev = &client->dev;
2119 	const struct pmbus_platform_data *pdata = dev_get_platdata(dev);
2120 	struct pmbus_data *data;
2121 	int ret;
2122 
2123 	if (!info)
2124 		return -ENODEV;
2125 
2126 	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WRITE_BYTE
2127 				     | I2C_FUNC_SMBUS_BYTE_DATA
2128 				     | I2C_FUNC_SMBUS_WORD_DATA))
2129 		return -ENODEV;
2130 
2131 	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
2132 	if (!data)
2133 		return -ENOMEM;
2134 
2135 	i2c_set_clientdata(client, data);
2136 	mutex_init(&data->update_lock);
2137 	data->dev = dev;
2138 
2139 	if (pdata)
2140 		data->flags = pdata->flags;
2141 	data->info = info;
2142 
2143 	ret = pmbus_init_common(client, data, info);
2144 	if (ret < 0)
2145 		return ret;
2146 
2147 	ret = pmbus_find_attributes(client, data);
2148 	if (ret)
2149 		goto out_kfree;
2150 
2151 	/*
2152 	 * If there are no attributes, something is wrong.
2153 	 * Bail out instead of trying to register nothing.
2154 	 */
2155 	if (!data->num_attributes) {
2156 		dev_err(dev, "No attributes found\n");
2157 		ret = -ENODEV;
2158 		goto out_kfree;
2159 	}
2160 
2161 	data->groups[0] = &data->group;
2162 	data->hwmon_dev = hwmon_device_register_with_groups(dev, client->name,
2163 							    data, data->groups);
2164 	if (IS_ERR(data->hwmon_dev)) {
2165 		ret = PTR_ERR(data->hwmon_dev);
2166 		dev_err(dev, "Failed to register hwmon device\n");
2167 		goto out_kfree;
2168 	}
2169 
2170 	ret = pmbus_regulator_register(data);
2171 	if (ret)
2172 		goto out_unregister;
2173 
2174 	ret = pmbus_init_debugfs(client, data);
2175 	if (ret)
2176 		dev_warn(dev, "Failed to register debugfs\n");
2177 
2178 	return 0;
2179 
2180 out_unregister:
2181 	hwmon_device_unregister(data->hwmon_dev);
2182 out_kfree:
2183 	kfree(data->group.attrs);
2184 	return ret;
2185 }
2186 EXPORT_SYMBOL_GPL(pmbus_do_probe);
2187 
pmbus_do_remove(struct i2c_client * client)2188 int pmbus_do_remove(struct i2c_client *client)
2189 {
2190 	struct pmbus_data *data = i2c_get_clientdata(client);
2191 
2192 	debugfs_remove_recursive(data->debugfs);
2193 
2194 	hwmon_device_unregister(data->hwmon_dev);
2195 	kfree(data->group.attrs);
2196 	return 0;
2197 }
2198 EXPORT_SYMBOL_GPL(pmbus_do_remove);
2199 
pmbus_core_init(void)2200 static int __init pmbus_core_init(void)
2201 {
2202 	pmbus_debugfs_dir = debugfs_create_dir("pmbus", NULL);
2203 	if (IS_ERR(pmbus_debugfs_dir))
2204 		pmbus_debugfs_dir = NULL;
2205 
2206 	return 0;
2207 }
2208 
pmbus_core_exit(void)2209 static void __exit pmbus_core_exit(void)
2210 {
2211 	debugfs_remove_recursive(pmbus_debugfs_dir);
2212 }
2213 
2214 module_init(pmbus_core_init);
2215 module_exit(pmbus_core_exit);
2216 
2217 MODULE_AUTHOR("Guenter Roeck");
2218 MODULE_DESCRIPTION("PMBus core driver");
2219 MODULE_LICENSE("GPL");
2220