pata_amd/pata_via: de-couple programming of PIO/MWDMA and UDMA timings
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Sun, 2 Dec 2007 02:47:01 +0000 (03:47 +0100)
committerJeff Garzik <jeff@garzik.org>
Tue, 4 Dec 2007 19:11:36 +0000 (14:11 -0500)
* Don't program UDMA timings when programming PIO or MWDMA modes.

  This has also a nice side-effect of fixing regression added by commit
  681c80b5d96076f447e8101ac4325c82d8dce508 ("libata: correct handling of
  SRST reset sequences") (->set_piomode method for PIO0 is called before
  ->cable_detect method which checks UDMA timings to get the cable type).

* Bump driver version.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tested-by: "Thomas Lindroth" <thomas.lindroth@gmail.com>
Acked-by: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Tejun Heo <htejun@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/pata_amd.c
drivers/ata/pata_via.c

index c5779ad4abcabf43ec590cdcf00e806e824fd5de..3cc27b514654ad8219dae8941eb258f4147d072b 100644 (file)
@@ -25,7 +25,7 @@
 #include <linux/libata.h>
 
 #define DRV_NAME "pata_amd"
-#define DRV_VERSION "0.3.9"
+#define DRV_VERSION "0.3.10"
 
 /**
  *     timing_setup            -       shared timing computation and load
@@ -115,7 +115,8 @@ static void timing_setup(struct ata_port *ap, struct ata_device *adev, int offse
        }
 
        /* UDMA timing */
-       pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t);
+       if (at.udma)
+               pci_write_config_byte(pdev, offset + 0x10 + (3 - dn), t);
 }
 
 /**
index a4175fbdd1704dcf6c231dcf6bf55b0552d3f1b5..453d72bf259831f532fe32804edaea56438ec1c9 100644 (file)
@@ -63,7 +63,7 @@
 #include <linux/dmi.h>
 
 #define DRV_NAME "pata_via"
-#define DRV_VERSION "0.3.2"
+#define DRV_VERSION "0.3.3"
 
 /*
  *     The following comes directly from Vojtech Pavlik's ide/pci/via82cxxx
@@ -296,7 +296,7 @@ static void via_do_set_mode(struct ata_port *ap, struct ata_device *adev, int mo
        }
 
        /* Set UDMA unless device is not UDMA capable */
-       if (udma_type) {
+       if (udma_type && t.udma) {
                u8 cable80_status;
 
                /* Get 80-wire cable detection bit */