aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/libata-core.c
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2007-08-22 18:22:45 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-12 14:55:37 -0400
commit614fe29bd91f99cc1c1fbf3274fa918691044f47 (patch)
tree49e8a37c3f6aeb24ee106969088ca351b4e3782c /drivers/ata/libata-core.c
parent4743d0854faa5624148ac6cf3fe9692e977eefa1 (diff)
libata: Spot bridge chips
If we have a PATA cable with a SATA drive on it then we've found a bridge and we can flip the cable type. This fixes some cable detect problems with SATA bridges on chipsets and misdetected cable types. In theory cable detection and mode limiting is needed if you put a SATA/PATA bridge on a 40 wire cable, but I see no way to deal with that other than to point out its not a good idea anyway. Signed-off-by: Alan Cox <alan@redhat.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers/ata/libata-core.c')
-rw-r--r--drivers/ata/libata-core.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 43c329544c00..b81265d1e469 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2183,6 +2183,17 @@ int ata_bus_probe(struct ata_port *ap)
2183 if (ap->ops->cable_detect) 2183 if (ap->ops->cable_detect)
2184 ap->cbl = ap->ops->cable_detect(ap); 2184 ap->cbl = ap->ops->cable_detect(ap);
2185 2185
2186 /* We may have SATA bridge glue hiding here irrespective of the
2187 reported cable types and sensed types */
2188 ata_link_for_each_dev(dev, &ap->link) {
2189 if (!ata_dev_enabled(dev))
2190 continue;
2191 /* SATA drives indicate we have a bridge. We don't know which
2192 end of the link the bridge is which is a problem */
2193 if (ata_id_is_sata(dev->id))
2194 ap->cbl = ATA_CBL_SATA;
2195 }
2196
2186 /* After the identify sequence we can now set up the devices. We do 2197 /* After the identify sequence we can now set up the devices. We do
2187 this in the normal order so that the user doesn't get confused */ 2198 this in the normal order so that the user doesn't get confused */
2188 2199