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