pata_atiixp: propogate cable detection hack from drivers/ide to the new driver
authorAlan <alan@lxorguk.ukuu.org.uk>
Wed, 31 Jan 2007 17:10:46 +0000 (17:10 +0000)
committerJeff Garzik <jeff@garzik.org>
Fri, 2 Feb 2007 16:52:05 +0000 (11:52 -0500)
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/pata_atiixp.c

index 6f6672c551319a09ef998ca88889e5ba4998fe45..504e1dbfffd7d9d6581fe4432c8e266bcd70730e 100644 (file)
@@ -36,15 +36,22 @@ enum {
 static int atiixp_pre_reset(struct ata_port *ap)
 {
        struct pci_dev *pdev = to_pci_dev(ap->host->dev);
-       static struct pci_bits atiixp_enable_bits[] = {
+       static const struct pci_bits atiixp_enable_bits[] = {
                { 0x48, 1, 0x01, 0x00 },
                { 0x48, 1, 0x08, 0x00 }
        };
+       u8 udma;
 
        if (!pci_test_config_bits(pdev, &atiixp_enable_bits[ap->port_no]))
                return -ENOENT;
 
-       ap->cbl = ATA_CBL_PATA80;
+       /* Hack from drivers/ide/pci. Really we want to know how to do the
+          raw detection not play follow the bios mode guess */
+       pci_read_config_byte(pdev, ATIIXP_IDE_UDMA_MODE + ap->port_no, &udma);
+       if ((udma & 0x07) >= 0x04 || (udma & 0x70) >= 0x40)
+               ap->cbl = ATA_CBL_PATA80;
+       else
+               ap->cbl = ATA_CBL_PATA40;
        return ata_std_prereset(ap);
 }