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