summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/dev/ata/ata-card.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-card.c b/sys/dev/ata/ata-card.c
index 09a2c9f..599dea6 100644
--- a/sys/dev/ata/ata-card.c
+++ b/sys/dev/ata/ata-card.c
@@ -90,6 +90,7 @@ ata_pccard_attach(device_t dev)
struct ata_channel *ch = device_get_softc(dev);
struct resource *io, *ctlio;
int i, rid, err;
+ uint16_t funce;
if (ch->attached)
return (0);
@@ -132,7 +133,11 @@ ata_pccard_attach(device_t dev)
/* initialize softc for this channel */
ch->unit = 0;
- ch->flags |= (ATA_USE_16BIT | ATA_NO_SLAVE);
+ ch->flags |= ATA_USE_16BIT;
+ funce = 0; /* Default to sane setting of FUNCE */
+ pccard_get_funce_disk(dev, &funce);
+ if (!(funce & PFD_I_D))
+ ch-> flags |= ATA_NO_SLAVE;
ata_generic_hw(dev);
err = ata_probe(dev);
if (err)
OpenPOWER on IntegriCloud