diff options
Diffstat (limited to 'sys/dev/i2c')
-rw-r--r-- | sys/dev/i2c/i2c_scan.c | 40 | ||||
-rw-r--r-- | sys/dev/i2c/lm_i2c.c | 18 |
2 files changed, 53 insertions, 5 deletions
diff --git a/sys/dev/i2c/i2c_scan.c b/sys/dev/i2c/i2c_scan.c index 64bb2a9400d..f5f2e281630 100644 --- a/sys/dev/i2c/i2c_scan.c +++ b/sys/dev/i2c/i2c_scan.c @@ -1,4 +1,4 @@ -/* $OpenBSD: i2c_scan.c,v 1.36 2005/12/29 14:51:08 deraadt Exp $ */ +/* $OpenBSD: i2c_scan.c,v 1.37 2005/12/29 16:08:03 kettenis Exp $ */ /* * Copyright (c) 2005 Theo de Raadt <deraadt@openbsd.org> @@ -411,10 +411,44 @@ iic_probe(struct device *self, struct i2cbus_attach_args *iba, u_int8_t addr) } else if (iicprobe(0x4f) == 0x5c && (iicprobe(0x4e) & 0x80)) { /* * We should toggle 0x4e bit 0x80, then re-read - * 0x4f to see if it is 0xa3 (for Winbond) + * 0x4f to see if it is 0xa3 (for Winbond). + */ + switch (iicprobe(0x58)) { + case 0x10: + name = "w83781d"; + break; + case 0x11: + name = "w83781d"; /* rev 2? */ + break; + case 0x21: + name = "w83627hf"; + break; + case 0x30: + name = "w83782d"; + break; + case 0x31: + name = "as99127f"; /* rev 2 */ + break; + case 0x40: + name = "w83783s"; + break; + case 0x71: + name = "w83791d"; + break; + case 0x72: + name = "w12345x"; /* unknown chip id */ + break; + case 0x7a: + name = "w83792d"; + break; + } + } else if (iicprobe(0x4f) == 0x12 && (iicprobe(0x4e) & 0x80)) { + /* + * We should toggle 0x4e bit 0x80, then re-read + * 0x4f to see if it is 0xc3 (for ASUS). */ if (iicprobe(0x58) == 0x31) - name = "as99127f"; + name = "as99127f"; /* rev 1 */ } else if (iicprobe(0x16) == 0x41 && ((iicprobe(0x17) & 0xf0) == 0x40) && (addr == 0x2c || addr == 0x2d || addr == 0x2e)) { name = "adm1026"; diff --git a/sys/dev/i2c/lm_i2c.c b/sys/dev/i2c/lm_i2c.c index 5ddfa4d39d1..289e853ae21 100644 --- a/sys/dev/i2c/lm_i2c.c +++ b/sys/dev/i2c/lm_i2c.c @@ -1,4 +1,4 @@ -/* $OpenBSD: lm_i2c.c,v 1.3 2005/12/29 14:51:08 deraadt Exp $ */ +/* $OpenBSD: lm_i2c.c,v 1.4 2005/12/29 16:08:03 kettenis Exp $ */ /* * Copyright (c) 2005 Mark Kettenis @@ -46,7 +46,21 @@ lm_i2c_match(struct device *parent, void *match, void *aux) { struct i2c_attach_args *ia = aux; - if (strcmp(ia->ia_name, "as99127f") == 0) { + if (strcmp(ia->ia_name, "as99127f") == 0 || + strcmp(ia->ia_name, "w83783s") == 0 || + strcmp(ia->ia_name, "w83791d") == 0 || + strcmp(ia->ia_name, "w83792d") == 0 || + strcmp(ia->ia_name, "w12345x") == 0) { + return (1); + } + /* + * XXX These chips also have an ISA bus interface and are + * likely to attach twice. That's ok for now, but we should + * probably disable these. + */ + if (strcmp(ia->ia_name, "w83781d") == 0 || + strcmp(ia->ia_name, "w83782d") == 0 || + strcmp(ia->ia_name, "w83627hf") == 0) { return (1); } return (0); |