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