summaryrefslogtreecommitdiffstats
path: root/sys/pccard
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2002-01-14 14:10:13 +0000
committerimp <imp@FreeBSD.org>2002-01-14 14:10:13 +0000
commit2f096f0e0a79ddff4903a120ec80f1106c904ea3 (patch)
tree2004d14b2e09fe18d231a229eacde6a509abf4fa /sys/pccard
parent79b9d0618356191890fadb6b6c642da933685e41 (diff)
downloadFreeBSD-src-2f096f0e0a79ddff4903a120ec80f1106c904ea3.zip
FreeBSD-src-2f096f0e0a79ddff4903a120ec80f1106c904ea3.tar.gz
The datasheet for the 6710/6722 says that you must use one method to
detect 3.3V cards for the 6710 and another method for the 6722. This latter method is also how the 6729/6730 is supposed to detect 3.3V cards. This method works great on my Fujitsu Stylistic 500. Sadly, it appears that not all laptop makers are as detail oriented as the folks that made the Stylistic. IBM Thinkpad 701C and AST Asentia 810N both hang hard when the 6729 method is used, but at least the thinkpad works when the 6710 method is used. The failure mode appears to be any access to the memory that we've mapped the CIS in causes the machine to hang until you eject the card. The Thinkpad, at least, works with this change, and it doesn't break my Stylistic. MFC after: 4 days
Diffstat (limited to 'sys/pccard')
-rw-r--r--sys/pccard/pcic.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/pccard/pcic.c b/sys/pccard/pcic.c
index 2694025..89fe7c3 100644
--- a/sys/pccard/pcic.c
+++ b/sys/pccard/pcic.c
@@ -599,17 +599,23 @@ pcic_power(struct slot *slt)
/*
* The 6710 does it one way, and the '22 and '29 do it
* another. And it appears that the '32 and '33 yet
- * another way (which I don't know).
+ * another way (which I don't know). The '22 can also
+ * do it the same way as a '10 does it, despite what
+ * the datasheets say. Some laptops with '22 don't
+ * seem to have the signals wired right for the '29
+ * method to work, so we always use the '10 method for
+ * the '22. The laptops that don't work hang solid
+ * when the pccard memory is accessed.
*/
switch (sp->controller) {
case PCIC_PD6710:
+ case PCIC_PD6722:
c = sp->getb(sp, PCIC_MISC1);
if ((c & PCIC_MISC1_5V_DETECT) == 0)
slt->pwr.vcc = 33;
else
slt->pwr.vcc = 50;
break;
- case PCIC_PD6722:
case PCIC_PD6729:
/*
* VS[12] signals are in slot1's
OpenPOWER on IntegriCloud