pata_via: clear UDMA transfer mode bit for PIO and MWDMA
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Thu, 3 Dec 2009 19:32:13 +0000 (20:32 +0100)
committerJeff Garzik <jgarzik@redhat.com>
Thu, 3 Dec 2009 21:13:39 +0000 (16:13 -0500)
Fix register naming while at it.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/pata_via.c

index 78eac27..0d97890 100644 (file)
@@ -303,14 +303,21 @@ 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 && t.udma) {
-               u8 cable80_status;
+       if (udma_type) {
+               u8 udma_etc;
 
-               /* Get 80-wire cable detection bit */
-               pci_read_config_byte(pdev, 0x50 + offset, &cable80_status);
-               cable80_status &= 0x10;
+               pci_read_config_byte(pdev, 0x50 + offset, &udma_etc);
 
-               pci_write_config_byte(pdev, 0x50 + offset, ut | cable80_status);
+               /* clear transfer mode bit */
+               udma_etc &= ~0x20;
+
+               if (t.udma) {
+                       /* preserve 80-wire cable detection bit */
+                       udma_etc &= 0x10;
+                       udma_etc |= ut;
+               }
+
+               pci_write_config_byte(pdev, 0x50 + offset, udma_etc);
        }
 }