aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/hwmon/w83781d18
-rw-r--r--drivers/hwmon/Kconfig6
-rw-r--r--drivers/hwmon/w83781d.c29
3 files changed, 14 insertions, 39 deletions
diff --git a/Documentation/hwmon/w83781d b/Documentation/hwmon/w83781d
index dbeadb269a69..6f800a0283e9 100644
--- a/Documentation/hwmon/w83781d
+++ b/Documentation/hwmon/w83781d
@@ -14,10 +14,6 @@ Supported chips:
14 Prefix: 'w83783s' 14 Prefix: 'w83783s'
15 Addresses scanned: I2C 0x2d 15 Addresses scanned: I2C 0x2d
16 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf 16 Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf
17 * Winbond W83627HF
18 Prefix: 'w83627hf'
19 Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports)
20 Datasheet: http://www.winbond.com/PDF/sheet/w83627hf.pdf
21 * Asus AS99127F 17 * Asus AS99127F
22 Prefix: 'as99127f' 18 Prefix: 'as99127f'
23 Addresses scanned: I2C 0x28 - 0x2f 19 Addresses scanned: I2C 0x28 - 0x2f
@@ -50,20 +46,18 @@ force_subclients=bus,caddr,saddr,saddr
50Description 46Description
51----------- 47-----------
52 48
53This driver implements support for the Winbond W83781D, W83782D, W83783S, 49This driver implements support for the Winbond W83781D, W83782D, W83783S
54W83627HF chips, and the Asus AS99127F chips. We will refer to them 50chips, and the Asus AS99127F chips. We will refer to them collectively as
55collectively as W8378* chips. 51W8378* chips.
56 52
57There is quite some difference between these chips, but they are similar 53There is quite some difference between these chips, but they are similar
58enough that it was sensible to put them together in one driver. 54enough that it was sensible to put them together in one driver.
59The W83627HF chip is assumed to be identical to the ISA W83782D.
60The Asus chips are similar to an I2C-only W83782D. 55The Asus chips are similar to an I2C-only W83782D.
61 56
62Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA 57Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
63as99127f 7 3 0 3 0x31 0x12c3 yes no 58as99127f 7 3 0 3 0x31 0x12c3 yes no
64as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 59as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no
65w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 60w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes
66w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC)
67w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 61w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes
68w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 62w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no
69 63
@@ -143,9 +137,9 @@ Individual alarm and beep bits:
1430x000400: in6 1370x000400: in6
1440x000800: fan3 1380x000800: fan3
1450x001000: chassis 1390x001000: chassis
1460x002000: temp3 (W83782D and W83627HF only) 1400x002000: temp3 (W83782D only)
1470x010000: in7 (W83782D and W83627HF only) 1410x010000: in7 (W83782D only)
1480x020000: in8 (W83782D and W83627HF only) 1420x020000: in8 (W83782D only)
149 143
150If an alarm triggers, it will remain triggered until the hardware register 144If an alarm triggers, it will remain triggered until the hardware register
151is read at least once. This means that the cause for the alarm may 145is read at least once. This means that the cause for the alarm may
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index af43d566d770..27e0b34ead5f 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -631,13 +631,13 @@ config SENSORS_VT8231
631 will be called vt8231. 631 will be called vt8231.
632 632
633config SENSORS_W83781D 633config SENSORS_W83781D
634 tristate "Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F" 634 tristate "Winbond W83781D, W83782D, W83783S, Asus AS99127F"
635 depends on I2C 635 depends on I2C
636 select HWMON_VID 636 select HWMON_VID
637 help 637 help
638 If you say yes here you get support for the Winbond W8378x series 638 If you say yes here you get support for the Winbond W8378x series
639 of sensor chips: the W83781D, W83782D, W83783S and W83627HF, 639 of sensor chips: the W83781D, W83782D and W83783S, and the similar
640 and the similar Asus AS99127F. 640 Asus AS99127F.
641 641
642 This driver can also be built as a module. If so, the module 642 This driver can also be built as a module. If so, the module
643 will be called w83781d. 643 will be called w83781d.
diff --git a/drivers/hwmon/w83781d.c b/drivers/hwmon/w83781d.c
index d38b9ede3abd..8d4d1acbf650 100644
--- a/drivers/hwmon/w83781d.c
+++ b/drivers/hwmon/w83781d.c
@@ -28,7 +28,6 @@
28 as99127f 7 3 0 3 0x31 0x12c3 yes no 28 as99127f 7 3 0 3 0x31 0x12c3 yes no
29 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no 29 as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no
30 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes 30 w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes
31 w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC)
32 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes 31 w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes
33 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no 32 w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no
34 33
@@ -59,7 +58,7 @@ static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
59static unsigned short isa_address = 0x290; 58static unsigned short isa_address = 0x290;
60 59
61/* Insmod parameters */ 60/* Insmod parameters */
62I2C_CLIENT_INSMOD_5(w83781d, w83782d, w83783s, w83627hf, as99127f); 61I2C_CLIENT_INSMOD_4(w83781d, w83782d, w83783s, as99127f);
63I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: " 62I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
64 "{bus, clientaddr, subclientaddr1, subclientaddr2}"); 63 "{bus, clientaddr, subclientaddr1, subclientaddr2}");
65 64
@@ -113,7 +112,7 @@ MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
113#define W83781D_REG_ALARM1 0x41 112#define W83781D_REG_ALARM1 0x41
114#define W83781D_REG_ALARM2 0x42 113#define W83781D_REG_ALARM2 0x42
115 114
116/* Real-time status (W83782D, W83783S, W83627HF) */ 115/* Real-time status (W83782D, W83783S) */
117#define W83782D_REG_ALARM1 0x459 116#define W83782D_REG_ALARM1 0x459
118#define W83782D_REG_ALARM2 0x45A 117#define W83782D_REG_ALARM2 0x45A
119#define W83782D_REG_ALARM3 0x45B 118#define W83782D_REG_ALARM3 0x45B
@@ -962,8 +961,6 @@ w83781d_detect_subclients(struct i2c_adapter *adapter, int address, int kind,
962 client_name = "w83782d subclient"; 961 client_name = "w83782d subclient";
963 else if (kind == w83783s) 962 else if (kind == w83783s)
964 client_name = "w83783s subclient"; 963 client_name = "w83783s subclient";
965 else if (kind == w83627hf)
966 client_name = "w83627hf subclient";
967 else if (kind == as99127f) 964 else if (kind == as99127f)
968 client_name = "as99127f subclient"; 965 client_name = "as99127f subclient";
969 966
@@ -1267,8 +1264,6 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
1267 kind = w83782d; 1264 kind = w83782d;
1268 else if (val1 == 0x40 && vendid == winbond && address == 0x2d) 1265 else if (val1 == 0x40 && vendid == winbond && address == 0x2d)
1269 kind = w83783s; 1266 kind = w83783s;
1270 else if (val1 == 0x21 && vendid == winbond)
1271 kind = w83627hf;
1272 else if (val1 == 0x31) 1267 else if (val1 == 0x31)
1273 kind = as99127f; 1268 kind = as99127f;
1274 else { 1269 else {
@@ -1287,8 +1282,6 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
1287 client_name = "w83782d"; 1282 client_name = "w83782d";
1288 } else if (kind == w83783s) { 1283 } else if (kind == w83783s) {
1289 client_name = "w83783s"; 1284 client_name = "w83783s";
1290 } else if (kind == w83627hf) {
1291 client_name = "w83627hf";
1292 } else if (kind == as99127f) { 1285 } else if (kind == as99127f) {
1293 client_name = "as99127f"; 1286 client_name = "as99127f";
1294 } 1287 }
@@ -1395,10 +1388,6 @@ w83781d_isa_probe(struct platform_device *pdev)
1395 1388
1396 reg = w83781d_read_value(data, W83781D_REG_WCHIPID); 1389 reg = w83781d_read_value(data, W83781D_REG_WCHIPID);
1397 switch (reg) { 1390 switch (reg) {
1398 case 0x21:
1399 data->type = w83627hf;
1400 name = "w83627hf";
1401 break;
1402 case 0x30: 1391 case 0x30:
1403 data->type = w83782d; 1392 data->type = w83782d;
1404 name = "w83782d"; 1393 name = "w83782d";
@@ -1598,11 +1587,6 @@ w83781d_init_device(struct device *dev)
1598 int type = data->type; 1587 int type = data->type;
1599 u8 tmp; 1588 u8 tmp;
1600 1589
1601 if (type == w83627hf)
1602 dev_info(dev, "The W83627HF chip is better supported by the "
1603 "w83627hf driver, support will be dropped from the "
1604 "w83781d driver soon\n");
1605
1606 if (reset && type != as99127f) { /* this resets registers we don't have 1590 if (reset && type != as99127f) { /* this resets registers we don't have
1607 documentation for on the as99127f */ 1591 documentation for on the as99127f */
1608 /* Resetting the chip has been the default for a long time, 1592 /* Resetting the chip has been the default for a long time,
@@ -1716,8 +1700,7 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)
1716 w83781d_read_value(data, W83781D_REG_IN_MIN(i)); 1700 w83781d_read_value(data, W83781D_REG_IN_MIN(i));
1717 data->in_max[i] = 1701 data->in_max[i] =
1718 w83781d_read_value(data, W83781D_REG_IN_MAX(i)); 1702 w83781d_read_value(data, W83781D_REG_IN_MAX(i));
1719 if ((data->type != w83782d) 1703 if ((data->type != w83782d) && (i == 6))
1720 && (data->type != w83627hf) && (i == 6))
1721 break; 1704 break;
1722 } 1705 }
1723 for (i = 0; i < 3; i++) { 1706 for (i = 0; i < 3; i++) {
@@ -1775,7 +1758,7 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)
1775 data->fan_div[1] |= (i >> 4) & 0x04; 1758 data->fan_div[1] |= (i >> 4) & 0x04;
1776 data->fan_div[2] |= (i >> 5) & 0x04; 1759 data->fan_div[2] |= (i >> 5) & 0x04;
1777 } 1760 }
1778 if ((data->type == w83782d) || (data->type == w83627hf)) { 1761 if (data->type == w83782d) {
1779 data->alarms = w83781d_read_value(data, 1762 data->alarms = w83781d_read_value(data,
1780 W83782D_REG_ALARM1) 1763 W83782D_REG_ALARM1)
1781 | (w83781d_read_value(data, 1764 | (w83781d_read_value(data,
@@ -1885,13 +1868,11 @@ w83781d_isa_found(unsigned short address)
1885 outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET); 1868 outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET);
1886 val = inb_p(address + W83781D_DATA_REG_OFFSET); 1869 val = inb_p(address + W83781D_DATA_REG_OFFSET);
1887 if ((val & 0xfe) == 0x10 /* W83781D */ 1870 if ((val & 0xfe) == 0x10 /* W83781D */
1888 || val == 0x30 /* W83782D */ 1871 || val == 0x30) /* W83782D */
1889 || val == 0x21) /* W83627HF */
1890 found = 1; 1872 found = 1;
1891 1873
1892 if (found) 1874 if (found)
1893 pr_info("w83781d: Found a %s chip at %#x\n", 1875 pr_info("w83781d: Found a %s chip at %#x\n",
1894 val == 0x21 ? "W83627HF" :
1895 val == 0x30 ? "W83782D" : "W83781D", (int)address); 1876 val == 0x30 ? "W83782D" : "W83781D", (int)address);
1896 1877
1897 release: 1878 release: