|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
|