Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 84527
b: refs/heads/master
c: 0566336
h: refs/heads/master
i:
  84525: 0a0e482
  84523: ebab962
  84519: d63fd77
  84511: a4a8b5a
v: v3
  • Loading branch information
Jean Delvare authored and Mark M. Hoffman committed Feb 8, 2008
1 parent d3e5bce commit 1344c19
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 40 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 5b34dbcd88251508d02e48ad9b0f9b8232a13ee0
refs/heads/master: 05663368d2138c14fa1b9aa8eeca4ca9a33d7c77
18 changes: 6 additions & 12 deletions trunk/Documentation/hwmon/w83781d
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ Supported chips:
Prefix: 'w83783s'
Addresses scanned: I2C 0x2d
Datasheet: http://www.winbond-usa.com/products/winbond_products/pdfs/PCIC/w83783s.pdf
* Winbond W83627HF
Prefix: 'w83627hf'
Addresses scanned: I2C 0x28 - 0x2f, ISA 0x290 (8 I/O ports)
Datasheet: http://www.winbond.com/PDF/sheet/w83627hf.pdf
* Asus AS99127F
Prefix: 'as99127f'
Addresses scanned: I2C 0x28 - 0x2f
Expand Down Expand Up @@ -50,20 +46,18 @@ force_subclients=bus,caddr,saddr,saddr
Description
-----------

This driver implements support for the Winbond W83781D, W83782D, W83783S,
W83627HF chips, and the Asus AS99127F chips. We will refer to them
collectively as W8378* chips.
This driver implements support for the Winbond W83781D, W83782D, W83783S
chips, and the Asus AS99127F chips. We will refer to them collectively as
W8378* chips.

There is quite some difference between these chips, but they are similar
enough that it was sensible to put them together in one driver.
The W83627HF chip is assumed to be identical to the ISA W83782D.
The Asus chips are similar to an I2C-only W83782D.

Chip #vin #fanin #pwm #temp wchipid vendid i2c ISA
as99127f 7 3 0 3 0x31 0x12c3 yes no
as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no
w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes
w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC)
w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes
w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no

Expand Down Expand Up @@ -143,9 +137,9 @@ Individual alarm and beep bits:
0x000400: in6
0x000800: fan3
0x001000: chassis
0x002000: temp3 (W83782D and W83627HF only)
0x010000: in7 (W83782D and W83627HF only)
0x020000: in8 (W83782D and W83627HF only)
0x002000: temp3 (W83782D only)
0x010000: in7 (W83782D only)
0x020000: in8 (W83782D only)

If an alarm triggers, it will remain triggered until the hardware register
is read at least once. This means that the cause for the alarm may
Expand Down
6 changes: 3 additions & 3 deletions trunk/drivers/hwmon/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -631,13 +631,13 @@ config SENSORS_VT8231
will be called vt8231.

config SENSORS_W83781D
tristate "Winbond W83781D, W83782D, W83783S, W83627HF, Asus AS99127F"
tristate "Winbond W83781D, W83782D, W83783S, Asus AS99127F"
depends on I2C
select HWMON_VID
help
If you say yes here you get support for the Winbond W8378x series
of sensor chips: the W83781D, W83782D, W83783S and W83627HF,
and the similar Asus AS99127F.
of sensor chips: the W83781D, W83782D and W83783S, and the similar
Asus AS99127F.

This driver can also be built as a module. If so, the module
will be called w83781d.
Expand Down
29 changes: 5 additions & 24 deletions trunk/drivers/hwmon/w83781d.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@
as99127f 7 3 0 3 0x31 0x12c3 yes no
as99127f rev.2 (type_name = as99127f) 0x31 0x5ca3 yes no
w83781d 7 3 0 3 0x10-1 0x5ca3 yes yes
w83627hf 9 3 2 3 0x21 0x5ca3 yes yes(LPC)
w83782d 9 3 2-4 3 0x30 0x5ca3 yes yes
w83783s 5-6 3 2 1-2 0x40 0x5ca3 yes no
Expand Down Expand Up @@ -59,7 +58,7 @@ static unsigned short normal_i2c[] = { 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d,
static unsigned short isa_address = 0x290;

/* Insmod parameters */
I2C_CLIENT_INSMOD_5(w83781d, w83782d, w83783s, w83627hf, as99127f);
I2C_CLIENT_INSMOD_4(w83781d, w83782d, w83783s, as99127f);
I2C_CLIENT_MODULE_PARM(force_subclients, "List of subclient addresses: "
"{bus, clientaddr, subclientaddr1, subclientaddr2}");

Expand Down Expand Up @@ -113,7 +112,7 @@ MODULE_PARM_DESC(init, "Set to zero to bypass chip initialization");
#define W83781D_REG_ALARM1 0x41
#define W83781D_REG_ALARM2 0x42

/* Real-time status (W83782D, W83783S, W83627HF) */
/* Real-time status (W83782D, W83783S) */
#define W83782D_REG_ALARM1 0x459
#define W83782D_REG_ALARM2 0x45A
#define W83782D_REG_ALARM3 0x45B
Expand Down Expand Up @@ -962,8 +961,6 @@ w83781d_detect_subclients(struct i2c_adapter *adapter, int address, int kind,
client_name = "w83782d subclient";
else if (kind == w83783s)
client_name = "w83783s subclient";
else if (kind == w83627hf)
client_name = "w83627hf subclient";
else if (kind == as99127f)
client_name = "as99127f subclient";

Expand Down Expand Up @@ -1267,8 +1264,6 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
kind = w83782d;
else if (val1 == 0x40 && vendid == winbond && address == 0x2d)
kind = w83783s;
else if (val1 == 0x21 && vendid == winbond)
kind = w83627hf;
else if (val1 == 0x31)
kind = as99127f;
else {
Expand All @@ -1287,8 +1282,6 @@ w83781d_detect(struct i2c_adapter *adapter, int address, int kind)
client_name = "w83782d";
} else if (kind == w83783s) {
client_name = "w83783s";
} else if (kind == w83627hf) {
client_name = "w83627hf";
} else if (kind == as99127f) {
client_name = "as99127f";
}
Expand Down Expand Up @@ -1395,10 +1388,6 @@ w83781d_isa_probe(struct platform_device *pdev)

reg = w83781d_read_value(data, W83781D_REG_WCHIPID);
switch (reg) {
case 0x21:
data->type = w83627hf;
name = "w83627hf";
break;
case 0x30:
data->type = w83782d;
name = "w83782d";
Expand Down Expand Up @@ -1598,11 +1587,6 @@ w83781d_init_device(struct device *dev)
int type = data->type;
u8 tmp;

if (type == w83627hf)
dev_info(dev, "The W83627HF chip is better supported by the "
"w83627hf driver, support will be dropped from the "
"w83781d driver soon\n");

if (reset && type != as99127f) { /* this resets registers we don't have
documentation for on the as99127f */
/* Resetting the chip has been the default for a long time,
Expand Down Expand Up @@ -1716,8 +1700,7 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)
w83781d_read_value(data, W83781D_REG_IN_MIN(i));
data->in_max[i] =
w83781d_read_value(data, W83781D_REG_IN_MAX(i));
if ((data->type != w83782d)
&& (data->type != w83627hf) && (i == 6))
if ((data->type != w83782d) && (i == 6))
break;
}
for (i = 0; i < 3; i++) {
Expand Down Expand Up @@ -1775,7 +1758,7 @@ static struct w83781d_data *w83781d_update_device(struct device *dev)
data->fan_div[1] |= (i >> 4) & 0x04;
data->fan_div[2] |= (i >> 5) & 0x04;
}
if ((data->type == w83782d) || (data->type == w83627hf)) {
if (data->type == w83782d) {
data->alarms = w83781d_read_value(data,
W83782D_REG_ALARM1)
| (w83781d_read_value(data,
Expand Down Expand Up @@ -1885,13 +1868,11 @@ w83781d_isa_found(unsigned short address)
outb_p(W83781D_REG_WCHIPID, address + W83781D_ADDR_REG_OFFSET);
val = inb_p(address + W83781D_DATA_REG_OFFSET);
if ((val & 0xfe) == 0x10 /* W83781D */
|| val == 0x30 /* W83782D */
|| val == 0x21) /* W83627HF */
|| val == 0x30) /* W83782D */
found = 1;

if (found)
pr_info("w83781d: Found a %s chip at %#x\n",
val == 0x21 ? "W83627HF" :
val == 0x30 ? "W83782D" : "W83781D", (int)address);

release:
Expand Down

0 comments on commit 1344c19

Please sign in to comment.