Commit 16cd9d1c0f149ee0c8073de037e7c57886234aa0

Authored by Linus Torvalds

Merge branch 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging

Pull hwmon fixes and updates from Jean Delvare:
 "All lm90 driver fixes and improvements"

* 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jdelvare/staging:
  Documentation: dt: hwmon: Add OF document for LM90
  hwmon: (lm90) Add power control
  hwmon: (lm90) Add support for TI TMP451
  hwmon: (lm90) Use enums for the indexes of temp8 and temp11
  hwmon: (lm90) Add support to handle IRQ
  hwmon: (lm90) Define status bits
  hwmon: (lm90) Fix max6696 alarm handling

Showing 4 changed files Side-by-side Diff

Documentation/devicetree/bindings/hwmon/lm90.txt
  1 +* LM90 series thermometer.
  2 +
  3 +Required node properties:
  4 +- compatible: manufacturer and chip name, one of
  5 + "adi,adm1032"
  6 + "adi,adt7461"
  7 + "adi,adt7461a"
  8 + "gmt,g781"
  9 + "national,lm90"
  10 + "national,lm86"
  11 + "national,lm89"
  12 + "national,lm99"
  13 + "dallas,max6646"
  14 + "dallas,max6647"
  15 + "dallas,max6649"
  16 + "dallas,max6657"
  17 + "dallas,max6658"
  18 + "dallas,max6659"
  19 + "dallas,max6680"
  20 + "dallas,max6681"
  21 + "dallas,max6695"
  22 + "dallas,max6696"
  23 + "onnn,nct1008"
  24 + "winbond,w83l771"
  25 + "nxp,sa56004"
  26 +
  27 +- reg: I2C bus address of the device
  28 +
  29 +- vcc-supply: vcc regulator for the supply voltage.
  30 +
  31 +Optional properties:
  32 +- interrupts: Contains a single interrupt specifier which describes the
  33 + LM90 "-ALERT" pin output.
  34 + See interrupt-controller/interrupts.txt for the format.
  35 +
  36 +Example LM90 node:
  37 +
  38 +temp-sensor {
  39 + compatible = "onnn,nct1008";
  40 + reg = <0x4c>;
  41 + vcc-supply = <&palmas_ldo6_reg>;
  42 + interrupt-parent = <&gpio>;
  43 + interrupts = <TEGRA_GPIO(O, 4) IRQ_TYPE_LEVEL_LOW>;
  44 +}
Documentation/hwmon/lm90
... ... @@ -122,6 +122,12 @@
122 122 Prefix: 'g781'
123 123 Addresses scanned: I2C 0x4c, 0x4d
124 124 Datasheet: Not publicly available from GMT
  125 + * Texas Instruments TMP451
  126 + Prefix: 'tmp451'
  127 + Addresses scanned: I2C 0x4c
  128 + Datasheet: Publicly available at TI website
  129 + http://www.ti.com/litv/pdf/sbos686
  130 +
125 131  
126 132 Author: Jean Delvare <khali@linux-fr.org>
127 133  
... ... @@ -5215,6 +5215,7 @@
5215 5215 L: lm-sensors@lm-sensors.org
5216 5216 S: Maintained
5217 5217 F: Documentation/hwmon/lm90
  5218 +F: Documentation/devicetree/bindings/hwmon/lm90.txt
5218 5219 F: drivers/hwmon/lm90.c
5219 5220  
5220 5221 LM95234 HARDWARE MONITOR DRIVER
drivers/hwmon/lm90.c
... ... @@ -60,6 +60,11 @@
60 60 * This driver also supports the G781 from GMT. This device is compatible
61 61 * with the ADM1032.
62 62 *
  63 + * This driver also supports TMP451 from Texas Instruments. This device is
  64 + * supported in both compatibility and extended mode. It's mostly compatible
  65 + * with ADT7461 except for local temperature low byte register and max
  66 + * conversion rate.
  67 + *
63 68 * Since the LM90 was the first chipset supported by this driver, most
64 69 * comments will refer to this chipset, but are actually general and
65 70 * concern all supported chipsets, unless mentioned otherwise.
... ... @@ -89,6 +94,8 @@
89 94 #include <linux/err.h>
90 95 #include <linux/mutex.h>
91 96 #include <linux/sysfs.h>
  97 +#include <linux/interrupt.h>
  98 +#include <linux/regulator/consumer.h>
92 99  
93 100 /*
94 101 * Addresses to scan
... ... @@ -110,7 +117,7 @@
110 117 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
111 118  
112 119 enum chips { lm90, adm1032, lm99, lm86, max6657, max6659, adt7461, max6680,
113   - max6646, w83l771, max6696, sa56004, g781 };
  120 + max6646, w83l771, max6696, sa56004, g781, tmp451 };
114 121  
115 122 /*
116 123 * The LM90 registers
... ... @@ -167,6 +174,9 @@
167 174 #define LM90_DEF_CONVRATE_RVAL 6 /* Def conversion rate register value */
168 175 #define LM90_MAX_CONVRATE_MS 16000 /* Maximum conversion rate in ms */
169 176  
  177 +/* TMP451 registers */
  178 +#define TMP451_REG_R_LOCAL_TEMPL 0x15
  179 +
170 180 /*
171 181 * Device flags
172 182 */
... ... @@ -179,6 +189,23 @@
179 189 #define LM90_HAVE_TEMP3 (1 << 6) /* 3rd temperature sensor */
180 190 #define LM90_HAVE_BROKEN_ALERT (1 << 7) /* Broken alert */
181 191  
  192 +/* LM90 status */
  193 +#define LM90_STATUS_LTHRM (1 << 0) /* local THERM limit tripped */
  194 +#define LM90_STATUS_RTHRM (1 << 1) /* remote THERM limit tripped */
  195 +#define LM90_STATUS_ROPEN (1 << 2) /* remote is an open circuit */
  196 +#define LM90_STATUS_RLOW (1 << 3) /* remote low temp limit tripped */
  197 +#define LM90_STATUS_RHIGH (1 << 4) /* remote high temp limit tripped */
  198 +#define LM90_STATUS_LLOW (1 << 5) /* local low temp limit tripped */
  199 +#define LM90_STATUS_LHIGH (1 << 6) /* local high temp limit tripped */
  200 +
  201 +#define MAX6696_STATUS2_R2THRM (1 << 1) /* remote2 THERM limit tripped */
  202 +#define MAX6696_STATUS2_R2OPEN (1 << 2) /* remote2 is an open circuit */
  203 +#define MAX6696_STATUS2_R2LOW (1 << 3) /* remote2 low temp limit tripped */
  204 +#define MAX6696_STATUS2_R2HIGH (1 << 4) /* remote2 high temp limit tripped */
  205 +#define MAX6696_STATUS2_ROT2 (1 << 5) /* remote emergency limit tripped */
  206 +#define MAX6696_STATUS2_R2OT2 (1 << 6) /* remote2 emergency limit tripped */
  207 +#define MAX6696_STATUS2_LOT2 (1 << 7) /* local emergency limit tripped */
  208 +
182 209 /*
183 210 * Driver data (common to all clients)
184 211 */
... ... @@ -205,6 +232,7 @@
205 232 { "nct1008", adt7461 },
206 233 { "w83l771", w83l771 },
207 234 { "sa56004", sa56004 },
  235 + { "tmp451", tmp451 },
208 236 { }
209 237 };
210 238 MODULE_DEVICE_TABLE(i2c, lm90_id);
... ... @@ -278,7 +306,7 @@
278 306 [max6696] = {
279 307 .flags = LM90_HAVE_EMERGENCY
280 308 | LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3,
281   - .alert_alarms = 0x187c,
  309 + .alert_alarms = 0x1c7c,
282 310 .max_convrate = 6,
283 311 .reg_local_ext = MAX6657_REG_R_LOCAL_TEMPL,
284 312 },
285 313  
286 314  
... ... @@ -293,15 +321,53 @@
293 321 .max_convrate = 9,
294 322 .reg_local_ext = SA56004_REG_R_LOCAL_TEMPL,
295 323 },
  324 + [tmp451] = {
  325 + .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  326 + | LM90_HAVE_BROKEN_ALERT,
  327 + .alert_alarms = 0x7c,
  328 + .max_convrate = 9,
  329 + .reg_local_ext = TMP451_REG_R_LOCAL_TEMPL,
  330 + }
296 331 };
297 332  
298 333 /*
  334 + * TEMP8 register index
  335 + */
  336 +enum lm90_temp8_reg_index {
  337 + LOCAL_LOW = 0,
  338 + LOCAL_HIGH,
  339 + LOCAL_CRIT,
  340 + REMOTE_CRIT,
  341 + LOCAL_EMERG, /* max6659 and max6695/96 */
  342 + REMOTE_EMERG, /* max6659 and max6695/96 */
  343 + REMOTE2_CRIT, /* max6695/96 only */
  344 + REMOTE2_EMERG, /* max6695/96 only */
  345 + TEMP8_REG_NUM
  346 +};
  347 +
  348 +/*
  349 + * TEMP11 register index
  350 + */
  351 +enum lm90_temp11_reg_index {
  352 + REMOTE_TEMP = 0,
  353 + REMOTE_LOW,
  354 + REMOTE_HIGH,
  355 + REMOTE_OFFSET, /* except max6646, max6657/58/59, and max6695/96 */
  356 + LOCAL_TEMP,
  357 + REMOTE2_TEMP, /* max6695/96 only */
  358 + REMOTE2_LOW, /* max6695/96 only */
  359 + REMOTE2_HIGH, /* max6695/96 only */
  360 + TEMP11_REG_NUM
  361 +};
  362 +
  363 +/*
299 364 * Client data (each client gets its own)
300 365 */
301 366  
302 367 struct lm90_data {
303 368 struct device *hwmon_dev;
304 369 struct mutex update_lock;
  370 + struct regulator *regulator;
305 371 char valid; /* zero until following fields are valid */
306 372 unsigned long last_updated; /* in jiffies */
307 373 int kind;
... ... @@ -317,25 +383,8 @@
317 383 u8 reg_local_ext; /* local extension register offset */
318 384  
319 385 /* registers values */
320   - s8 temp8[8]; /* 0: local low limit
321   - * 1: local high limit
322   - * 2: local critical limit
323   - * 3: remote critical limit
324   - * 4: local emergency limit (max6659 and max6695/96)
325   - * 5: remote emergency limit (max6659 and max6695/96)
326   - * 6: remote 2 critical limit (max6695/96 only)
327   - * 7: remote 2 emergency limit (max6695/96 only)
328   - */
329   - s16 temp11[8]; /* 0: remote input
330   - * 1: remote low limit
331   - * 2: remote high limit
332   - * 3: remote offset (except max6646, max6657/58/59,
333   - * and max6695/96)
334   - * 4: local input
335   - * 5: remote 2 input (max6695/96 only)
336   - * 6: remote 2 low limit (max6695/96 only)
337   - * 7: remote 2 high limit (max6695/96 only)
338   - */
  386 + s8 temp8[TEMP8_REG_NUM];
  387 + s16 temp11[TEMP11_REG_NUM];
339 388 u8 temp_hyst;
340 389 u16 alarms; /* bitvector (upper 8 bits for max6695/96) */
341 390 };
342 391  
343 392  
344 393  
345 394  
346 395  
347 396  
348 397  
... ... @@ -477,37 +526,42 @@
477 526 u8 alarms;
478 527  
479 528 dev_dbg(&client->dev, "Updating lm90 data.\n");
480   - lm90_read_reg(client, LM90_REG_R_LOCAL_LOW, &data->temp8[0]);
481   - lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH, &data->temp8[1]);
482   - lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT, &data->temp8[2]);
483   - lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT, &data->temp8[3]);
  529 + lm90_read_reg(client, LM90_REG_R_LOCAL_LOW,
  530 + &data->temp8[LOCAL_LOW]);
  531 + lm90_read_reg(client, LM90_REG_R_LOCAL_HIGH,
  532 + &data->temp8[LOCAL_HIGH]);
  533 + lm90_read_reg(client, LM90_REG_R_LOCAL_CRIT,
  534 + &data->temp8[LOCAL_CRIT]);
  535 + lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT,
  536 + &data->temp8[REMOTE_CRIT]);
484 537 lm90_read_reg(client, LM90_REG_R_TCRIT_HYST, &data->temp_hyst);
485 538  
486 539 if (data->reg_local_ext) {
487 540 lm90_read16(client, LM90_REG_R_LOCAL_TEMP,
488 541 data->reg_local_ext,
489   - &data->temp11[4]);
  542 + &data->temp11[LOCAL_TEMP]);
490 543 } else {
491 544 if (lm90_read_reg(client, LM90_REG_R_LOCAL_TEMP,
492 545 &h) == 0)
493   - data->temp11[4] = h << 8;
  546 + data->temp11[LOCAL_TEMP] = h << 8;
494 547 }
495 548 lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
496   - LM90_REG_R_REMOTE_TEMPL, &data->temp11[0]);
  549 + LM90_REG_R_REMOTE_TEMPL,
  550 + &data->temp11[REMOTE_TEMP]);
497 551  
498 552 if (lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h) == 0) {
499   - data->temp11[1] = h << 8;
  553 + data->temp11[REMOTE_LOW] = h << 8;
500 554 if ((data->flags & LM90_HAVE_REM_LIMIT_EXT)
501 555 && lm90_read_reg(client, LM90_REG_R_REMOTE_LOWL,
502 556 &l) == 0)
503   - data->temp11[1] |= l;
  557 + data->temp11[REMOTE_LOW] |= l;
504 558 }
505 559 if (lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h) == 0) {
506   - data->temp11[2] = h << 8;
  560 + data->temp11[REMOTE_HIGH] = h << 8;
507 561 if ((data->flags & LM90_HAVE_REM_LIMIT_EXT)
508 562 && lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHL,
509 563 &l) == 0)
510   - data->temp11[2] |= l;
  564 + data->temp11[REMOTE_HIGH] |= l;
511 565 }
512 566  
513 567 if (data->flags & LM90_HAVE_OFFSET) {
514 568  
515 569  
... ... @@ -515,13 +569,13 @@
515 569 &h) == 0
516 570 && lm90_read_reg(client, LM90_REG_R_REMOTE_OFFSL,
517 571 &l) == 0)
518   - data->temp11[3] = (h << 8) | l;
  572 + data->temp11[REMOTE_OFFSET] = (h << 8) | l;
519 573 }
520 574 if (data->flags & LM90_HAVE_EMERGENCY) {
521 575 lm90_read_reg(client, MAX6659_REG_R_LOCAL_EMERG,
522   - &data->temp8[4]);
  576 + &data->temp8[LOCAL_EMERG]);
523 577 lm90_read_reg(client, MAX6659_REG_R_REMOTE_EMERG,
524   - &data->temp8[5]);
  578 + &data->temp8[REMOTE_EMERG]);
525 579 }
526 580 lm90_read_reg(client, LM90_REG_R_STATUS, &alarms);
527 581 data->alarms = alarms; /* save as 16 bit value */
528 582  
529 583  
530 584  
531 585  
... ... @@ -529,15 +583,16 @@
529 583 if (data->kind == max6696) {
530 584 lm90_select_remote_channel(client, data, 1);
531 585 lm90_read_reg(client, LM90_REG_R_REMOTE_CRIT,
532   - &data->temp8[6]);
  586 + &data->temp8[REMOTE2_CRIT]);
533 587 lm90_read_reg(client, MAX6659_REG_R_REMOTE_EMERG,
534   - &data->temp8[7]);
  588 + &data->temp8[REMOTE2_EMERG]);
535 589 lm90_read16(client, LM90_REG_R_REMOTE_TEMPH,
536   - LM90_REG_R_REMOTE_TEMPL, &data->temp11[5]);
  590 + LM90_REG_R_REMOTE_TEMPL,
  591 + &data->temp11[REMOTE2_TEMP]);
537 592 if (!lm90_read_reg(client, LM90_REG_R_REMOTE_LOWH, &h))
538   - data->temp11[6] = h << 8;
  593 + data->temp11[REMOTE2_LOW] = h << 8;
539 594 if (!lm90_read_reg(client, LM90_REG_R_REMOTE_HIGHH, &h))
540   - data->temp11[7] = h << 8;
  595 + data->temp11[REMOTE2_HIGH] = h << 8;
541 596 lm90_select_remote_channel(client, data, 0);
542 597  
543 598 if (!lm90_read_reg(client, MAX6696_REG_R_STATUS2,
... ... @@ -709,7 +764,7 @@
709 764 struct lm90_data *data = lm90_update_device(dev);
710 765 int temp;
711 766  
712   - if (data->kind == adt7461)
  767 + if (data->kind == adt7461 || data->kind == tmp451)
713 768 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
714 769 else if (data->kind == max6646)
715 770 temp = temp_from_u8(data->temp8[attr->index]);
... ... @@ -726,7 +781,7 @@
726 781 static ssize_t set_temp8(struct device *dev, struct device_attribute *devattr,
727 782 const char *buf, size_t count)
728 783 {
729   - static const u8 reg[8] = {
  784 + static const u8 reg[TEMP8_REG_NUM] = {
730 785 LM90_REG_W_LOCAL_LOW,
731 786 LM90_REG_W_LOCAL_HIGH,
732 787 LM90_REG_W_LOCAL_CRIT,
... ... @@ -753,7 +808,7 @@
753 808 val -= 16000;
754 809  
755 810 mutex_lock(&data->update_lock);
756   - if (data->kind == adt7461)
  811 + if (data->kind == adt7461 || data->kind == tmp451)
757 812 data->temp8[nr] = temp_to_u8_adt7461(data, val);
758 813 else if (data->kind == max6646)
759 814 data->temp8[nr] = temp_to_u8(val);
... ... @@ -775,7 +830,7 @@
775 830 struct lm90_data *data = lm90_update_device(dev);
776 831 int temp;
777 832  
778   - if (data->kind == adt7461)
  833 + if (data->kind == adt7461 || data->kind == tmp451)
779 834 temp = temp_from_u16_adt7461(data, data->temp11[attr->index]);
780 835 else if (data->kind == max6646)
781 836 temp = temp_from_u16(data->temp11[attr->index]);
... ... @@ -821,7 +876,7 @@
821 876 val -= 16000;
822 877  
823 878 mutex_lock(&data->update_lock);
824   - if (data->kind == adt7461)
  879 + if (data->kind == adt7461 || data->kind == tmp451)
825 880 data->temp11[index] = temp_to_u16_adt7461(data, val);
826 881 else if (data->kind == max6646)
827 882 data->temp11[index] = temp_to_u8(val) << 8;
... ... @@ -850,7 +905,7 @@
850 905 struct lm90_data *data = lm90_update_device(dev);
851 906 int temp;
852 907  
853   - if (data->kind == adt7461)
  908 + if (data->kind == adt7461 || data->kind == tmp451)
854 909 temp = temp_from_u8_adt7461(data, data->temp8[attr->index]);
855 910 else if (data->kind == max6646)
856 911 temp = temp_from_u8(data->temp8[attr->index]);
857 912  
858 913  
... ... @@ -878,12 +933,12 @@
878 933 return err;
879 934  
880 935 mutex_lock(&data->update_lock);
881   - if (data->kind == adt7461)
882   - temp = temp_from_u8_adt7461(data, data->temp8[2]);
  936 + if (data->kind == adt7461 || data->kind == tmp451)
  937 + temp = temp_from_u8_adt7461(data, data->temp8[LOCAL_CRIT]);
883 938 else if (data->kind == max6646)
884   - temp = temp_from_u8(data->temp8[2]);
  939 + temp = temp_from_u8(data->temp8[LOCAL_CRIT]);
885 940 else
886   - temp = temp_from_s8(data->temp8[2]);
  941 + temp = temp_from_s8(data->temp8[LOCAL_CRIT]);
887 942  
888 943 data->temp_hyst = hyst_to_reg(temp - val);
889 944 i2c_smbus_write_byte_data(client, LM90_REG_W_TCRIT_HYST,
890 945  
891 946  
892 947  
893 948  
894 949  
895 950  
896 951  
897 952  
... ... @@ -937,25 +992,28 @@
937 992 return count;
938 993 }
939 994  
940   -static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp11, NULL, 0, 4);
941   -static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp11, NULL, 0, 0);
  995 +static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp11, NULL,
  996 + 0, LOCAL_TEMP);
  997 +static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp11, NULL,
  998 + 0, REMOTE_TEMP);
942 999 static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp8,
943   - set_temp8, 0);
  1000 + set_temp8, LOCAL_LOW);
944 1001 static SENSOR_DEVICE_ATTR_2(temp2_min, S_IWUSR | S_IRUGO, show_temp11,
945   - set_temp11, 0, 1);
  1002 + set_temp11, 0, REMOTE_LOW);
946 1003 static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp8,
947   - set_temp8, 1);
  1004 + set_temp8, LOCAL_HIGH);
948 1005 static SENSOR_DEVICE_ATTR_2(temp2_max, S_IWUSR | S_IRUGO, show_temp11,
949   - set_temp11, 1, 2);
  1006 + set_temp11, 1, REMOTE_HIGH);
950 1007 static SENSOR_DEVICE_ATTR(temp1_crit, S_IWUSR | S_IRUGO, show_temp8,
951   - set_temp8, 2);
  1008 + set_temp8, LOCAL_CRIT);
952 1009 static SENSOR_DEVICE_ATTR(temp2_crit, S_IWUSR | S_IRUGO, show_temp8,
953   - set_temp8, 3);
  1010 + set_temp8, REMOTE_CRIT);
954 1011 static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IWUSR | S_IRUGO, show_temphyst,
955   - set_temphyst, 2);
956   -static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL, 3);
  1012 + set_temphyst, LOCAL_CRIT);
  1013 +static SENSOR_DEVICE_ATTR(temp2_crit_hyst, S_IRUGO, show_temphyst, NULL,
  1014 + REMOTE_CRIT);
957 1015 static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IWUSR | S_IRUGO, show_temp11,
958   - set_temp11, 2, 3);
  1016 + set_temp11, 2, REMOTE_OFFSET);
959 1017  
960 1018 /* Individual alarm files */
961 1019 static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 0);
962 1020  
963 1021  
964 1022  
... ... @@ -1003,13 +1061,13 @@
1003 1061 * Additional attributes for devices with emergency sensors
1004 1062 */
1005 1063 static SENSOR_DEVICE_ATTR(temp1_emergency, S_IWUSR | S_IRUGO, show_temp8,
1006   - set_temp8, 4);
  1064 + set_temp8, LOCAL_EMERG);
1007 1065 static SENSOR_DEVICE_ATTR(temp2_emergency, S_IWUSR | S_IRUGO, show_temp8,
1008   - set_temp8, 5);
  1066 + set_temp8, REMOTE_EMERG);
1009 1067 static SENSOR_DEVICE_ATTR(temp1_emergency_hyst, S_IRUGO, show_temphyst,
1010   - NULL, 4);
  1068 + NULL, LOCAL_EMERG);
1011 1069 static SENSOR_DEVICE_ATTR(temp2_emergency_hyst, S_IRUGO, show_temphyst,
1012   - NULL, 5);
  1070 + NULL, REMOTE_EMERG);
1013 1071  
1014 1072 static struct attribute *lm90_emergency_attributes[] = {
1015 1073 &sensor_dev_attr_temp1_emergency.dev_attr.attr,
1016 1074  
1017 1075  
1018 1076  
1019 1077  
1020 1078  
... ... @@ -1039,18 +1097,20 @@
1039 1097 /*
1040 1098 * Additional attributes for devices with 3 temperature sensors
1041 1099 */
1042   -static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp11, NULL, 0, 5);
  1100 +static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp11, NULL,
  1101 + 0, REMOTE2_TEMP);
1043 1102 static SENSOR_DEVICE_ATTR_2(temp3_min, S_IWUSR | S_IRUGO, show_temp11,
1044   - set_temp11, 3, 6);
  1103 + set_temp11, 3, REMOTE2_LOW);
1045 1104 static SENSOR_DEVICE_ATTR_2(temp3_max, S_IWUSR | S_IRUGO, show_temp11,
1046   - set_temp11, 4, 7);
  1105 + set_temp11, 4, REMOTE2_HIGH);
1047 1106 static SENSOR_DEVICE_ATTR(temp3_crit, S_IWUSR | S_IRUGO, show_temp8,
1048   - set_temp8, 6);
1049   -static SENSOR_DEVICE_ATTR(temp3_crit_hyst, S_IRUGO, show_temphyst, NULL, 6);
  1107 + set_temp8, REMOTE2_CRIT);
  1108 +static SENSOR_DEVICE_ATTR(temp3_crit_hyst, S_IRUGO, show_temphyst, NULL,
  1109 + REMOTE2_CRIT);
1050 1110 static SENSOR_DEVICE_ATTR(temp3_emergency, S_IWUSR | S_IRUGO, show_temp8,
1051   - set_temp8, 7);
  1111 + set_temp8, REMOTE2_EMERG);
1052 1112 static SENSOR_DEVICE_ATTR(temp3_emergency_hyst, S_IRUGO, show_temphyst,
1053   - NULL, 7);
  1113 + NULL, REMOTE2_EMERG);
1054 1114  
1055 1115 static SENSOR_DEVICE_ATTR(temp3_crit_alarm, S_IRUGO, show_alarm, NULL, 9);
1056 1116 static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 10);
... ... @@ -1306,6 +1366,19 @@
1306 1366 && (config1 & 0x3F) == 0x00
1307 1367 && convrate <= 0x08)
1308 1368 name = "g781";
  1369 + } else
  1370 + if (address == 0x4C
  1371 + && man_id == 0x55) { /* Texas Instruments */
  1372 + int local_ext;
  1373 +
  1374 + local_ext = i2c_smbus_read_byte_data(client,
  1375 + TMP451_REG_R_LOCAL_TEMPL);
  1376 +
  1377 + if (chip_id == 0x00 /* TMP451 */
  1378 + && (config1 & 0x1B) == 0x00
  1379 + && convrate <= 0x09
  1380 + && (local_ext & 0x0F) == 0x00)
  1381 + name = "tmp451";
1309 1382 }
1310 1383  
1311 1384 if (!name) { /* identification failed */
... ... @@ -1367,7 +1440,7 @@
1367 1440 data->config_orig = config;
1368 1441  
1369 1442 /* Check Temperature Range Select */
1370   - if (data->kind == adt7461) {
  1443 + if (data->kind == adt7461 || data->kind == tmp451) {
1371 1444 if (config & 0x04)
1372 1445 data->flags |= LM90_FLAG_ADT7461_EXT;
1373 1446 }
1374 1447  
1375 1448  
... ... @@ -1391,14 +1464,74 @@
1391 1464 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1, config);
1392 1465 }
1393 1466  
  1467 +static bool lm90_is_tripped(struct i2c_client *client, u16 *status)
  1468 +{
  1469 + struct lm90_data *data = i2c_get_clientdata(client);
  1470 + u8 st, st2 = 0;
  1471 +
  1472 + lm90_read_reg(client, LM90_REG_R_STATUS, &st);
  1473 +
  1474 + if (data->kind == max6696)
  1475 + lm90_read_reg(client, MAX6696_REG_R_STATUS2, &st2);
  1476 +
  1477 + *status = st | (st2 << 8);
  1478 +
  1479 + if ((st & 0x7f) == 0 && (st2 & 0xfe) == 0)
  1480 + return false;
  1481 +
  1482 + if ((st & (LM90_STATUS_LLOW | LM90_STATUS_LHIGH | LM90_STATUS_LTHRM)) ||
  1483 + (st2 & MAX6696_STATUS2_LOT2))
  1484 + dev_warn(&client->dev,
  1485 + "temp%d out of range, please check!\n", 1);
  1486 + if ((st & (LM90_STATUS_RLOW | LM90_STATUS_RHIGH | LM90_STATUS_RTHRM)) ||
  1487 + (st2 & MAX6696_STATUS2_ROT2))
  1488 + dev_warn(&client->dev,
  1489 + "temp%d out of range, please check!\n", 2);
  1490 + if (st & LM90_STATUS_ROPEN)
  1491 + dev_warn(&client->dev,
  1492 + "temp%d diode open, please check!\n", 2);
  1493 + if (st2 & (MAX6696_STATUS2_R2LOW | MAX6696_STATUS2_R2HIGH |
  1494 + MAX6696_STATUS2_R2THRM | MAX6696_STATUS2_R2OT2))
  1495 + dev_warn(&client->dev,
  1496 + "temp%d out of range, please check!\n", 3);
  1497 + if (st2 & MAX6696_STATUS2_R2OPEN)
  1498 + dev_warn(&client->dev,
  1499 + "temp%d diode open, please check!\n", 3);
  1500 +
  1501 + return true;
  1502 +}
  1503 +
  1504 +static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
  1505 +{
  1506 + struct i2c_client *client = dev_id;
  1507 + u16 status;
  1508 +
  1509 + if (lm90_is_tripped(client, &status))
  1510 + return IRQ_HANDLED;
  1511 + else
  1512 + return IRQ_NONE;
  1513 +}
  1514 +
1394 1515 static int lm90_probe(struct i2c_client *client,
1395 1516 const struct i2c_device_id *id)
1396 1517 {
1397 1518 struct device *dev = &client->dev;
1398 1519 struct i2c_adapter *adapter = to_i2c_adapter(dev->parent);
1399 1520 struct lm90_data *data;
  1521 + struct regulator *regulator;
1400 1522 int err;
1401 1523  
  1524 + regulator = devm_regulator_get(dev, "vcc");
  1525 + if (IS_ERR(regulator))
  1526 + return PTR_ERR(regulator);
  1527 +
  1528 + err = regulator_enable(regulator);
  1529 + if (err < 0) {
  1530 + dev_err(&client->dev,
  1531 + "Failed to enable regulator: %d\n", err);
  1532 + return err;
  1533 + }
  1534 +
1402 1535 data = devm_kzalloc(&client->dev, sizeof(struct lm90_data), GFP_KERNEL);
1403 1536 if (!data)
1404 1537 return -ENOMEM;
... ... @@ -1406,6 +1539,8 @@
1406 1539 i2c_set_clientdata(client, data);
1407 1540 mutex_init(&data->update_lock);
1408 1541  
  1542 + data->regulator = regulator;
  1543 +
1409 1544 /* Set the device type */
1410 1545 data->kind = id->driver_data;
1411 1546 if (data->kind == adm1032) {
1412 1547  
... ... @@ -1467,12 +1602,26 @@
1467 1602 goto exit_remove_files;
1468 1603 }
1469 1604  
  1605 + if (client->irq) {
  1606 + dev_dbg(dev, "IRQ: %d\n", client->irq);
  1607 + err = devm_request_threaded_irq(dev, client->irq,
  1608 + NULL, lm90_irq_thread,
  1609 + IRQF_TRIGGER_LOW | IRQF_ONESHOT,
  1610 + "lm90", client);
  1611 + if (err < 0) {
  1612 + dev_err(dev, "cannot request IRQ %d\n", client->irq);
  1613 + goto exit_remove_files;
  1614 + }
  1615 + }
  1616 +
1470 1617 return 0;
1471 1618  
1472 1619 exit_remove_files:
1473 1620 lm90_remove_files(client, data);
1474 1621 exit_restore:
1475 1622 lm90_restore_conf(client, data);
  1623 + regulator_disable(data->regulator);
  1624 +
1476 1625 return err;
1477 1626 }
1478 1627  
1479 1628  
1480 1629  
1481 1630  
1482 1631  
1483 1632  
... ... @@ -1483,49 +1632,33 @@
1483 1632 hwmon_device_unregister(data->hwmon_dev);
1484 1633 lm90_remove_files(client, data);
1485 1634 lm90_restore_conf(client, data);
  1635 + regulator_disable(data->regulator);
1486 1636  
1487 1637 return 0;
1488 1638 }
1489 1639  
1490 1640 static void lm90_alert(struct i2c_client *client, unsigned int flag)
1491 1641 {
1492   - struct lm90_data *data = i2c_get_clientdata(client);
1493   - u8 config, alarms, alarms2 = 0;
  1642 + u16 alarms;
1494 1643  
1495   - lm90_read_reg(client, LM90_REG_R_STATUS, &alarms);
1496   -
1497   - if (data->kind == max6696)
1498   - lm90_read_reg(client, MAX6696_REG_R_STATUS2, &alarms2);
1499   -
1500   - if ((alarms & 0x7f) == 0 && (alarms2 & 0xfe) == 0) {
1501   - dev_info(&client->dev, "Everything OK\n");
1502   - } else {
1503   - if (alarms & 0x61)
1504   - dev_warn(&client->dev,
1505   - "temp%d out of range, please check!\n", 1);
1506   - if (alarms & 0x1a)
1507   - dev_warn(&client->dev,
1508   - "temp%d out of range, please check!\n", 2);
1509   - if (alarms & 0x04)
1510   - dev_warn(&client->dev,
1511   - "temp%d diode open, please check!\n", 2);
1512   -
1513   - if (alarms2 & 0x18)
1514   - dev_warn(&client->dev,
1515   - "temp%d out of range, please check!\n", 3);
1516   -
  1644 + if (lm90_is_tripped(client, &alarms)) {
1517 1645 /*
1518 1646 * Disable ALERT# output, because these chips don't implement
1519 1647 * SMBus alert correctly; they should only hold the alert line
1520 1648 * low briefly.
1521 1649 */
  1650 + struct lm90_data *data = i2c_get_clientdata(client);
  1651 +
1522 1652 if ((data->flags & LM90_HAVE_BROKEN_ALERT)
1523 1653 && (alarms & data->alert_alarms)) {
  1654 + u8 config;
1524 1655 dev_dbg(&client->dev, "Disabling ALERT#\n");
1525 1656 lm90_read_reg(client, LM90_REG_R_CONFIG1, &config);
1526 1657 i2c_smbus_write_byte_data(client, LM90_REG_W_CONFIG1,
1527 1658 config | 0x80);
1528 1659 }
  1660 + } else {
  1661 + dev_info(&client->dev, "Everything OK\n");
1529 1662 }
1530 1663 }
1531 1664