|
@@ -2,6 +2,7 @@
|
|
|
* pata_sis.c - SiS ATA driver
|
|
|
*
|
|
|
* (C) 2005 Red Hat <alan@redhat.com>
|
|
|
+ * (C) 2007 Bartlomiej Zolnierkiewicz
|
|
|
*
|
|
|
* Based upon linux/drivers/ide/pci/sis5513.c
|
|
|
* Copyright (C) 1999-2000 Andre Hedrick <andre@linux-ide.org>
|
|
@@ -35,7 +36,7 @@
|
|
|
#include "sis.h"
|
|
|
|
|
|
#define DRV_NAME "pata_sis"
|
|
|
-#define DRV_VERSION "0.5.1"
|
|
|
+#define DRV_VERSION "0.5.2"
|
|
|
|
|
|
struct sis_chipset {
|
|
|
u16 device; /* PCI host ID */
|
|
@@ -237,7 +238,7 @@ static void sis_old_set_piomode (struct ata_port *ap, struct ata_device *adev)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * sis_100_set_pioode - Initialize host controller PATA PIO timings
|
|
|
+ * sis_100_set_piomode - Initialize host controller PATA PIO timings
|
|
|
* @ap: Port whose timings we are configuring
|
|
|
* @adev: Device we are configuring for.
|
|
|
*
|
|
@@ -262,7 +263,7 @@ static void sis_100_set_piomode (struct ata_port *ap, struct ata_device *adev)
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * sis_133_set_pioode - Initialize host controller PATA PIO timings
|
|
|
+ * sis_133_set_piomode - Initialize host controller PATA PIO timings
|
|
|
* @ap: Port whose timings we are configuring
|
|
|
* @adev: Device we are configuring for.
|
|
|
*
|
|
@@ -334,7 +335,7 @@ static void sis_old_set_dmamode (struct ata_port *ap, struct ata_device *adev)
|
|
|
int drive_pci = sis_old_port_base(adev);
|
|
|
u16 timing;
|
|
|
|
|
|
- const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
|
|
|
+ const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
|
|
|
const u16 udma_bits[] = { 0xE000, 0xC000, 0xA000 };
|
|
|
|
|
|
pci_read_config_word(pdev, drive_pci, &timing);
|
|
@@ -342,15 +343,15 @@ static void sis_old_set_dmamode (struct ata_port *ap, struct ata_device *adev)
|
|
|
if (adev->dma_mode < XFER_UDMA_0) {
|
|
|
/* bits 3-0 hold recovery timing bits 8-10 active timing and
|
|
|
the higer bits are dependant on the device */
|
|
|
- timing &= ~ 0x870F;
|
|
|
+ timing &= ~0x870F;
|
|
|
timing |= mwdma_bits[speed];
|
|
|
- pci_write_config_word(pdev, drive_pci, timing);
|
|
|
} else {
|
|
|
/* Bit 15 is UDMA on/off, bit 13-14 are cycle time */
|
|
|
speed = adev->dma_mode - XFER_UDMA_0;
|
|
|
timing &= ~0x6000;
|
|
|
timing |= udma_bits[speed];
|
|
|
}
|
|
|
+ pci_write_config_word(pdev, drive_pci, timing);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -373,7 +374,7 @@ static void sis_66_set_dmamode (struct ata_port *ap, struct ata_device *adev)
|
|
|
int drive_pci = sis_old_port_base(adev);
|
|
|
u16 timing;
|
|
|
|
|
|
- const u16 mwdma_bits[] = { 0x707, 0x202, 0x202 };
|
|
|
+ const u16 mwdma_bits[] = { 0x008, 0x302, 0x301 };
|
|
|
const u16 udma_bits[] = { 0xF000, 0xD000, 0xB000, 0xA000, 0x9000};
|
|
|
|
|
|
pci_read_config_word(pdev, drive_pci, &timing);
|
|
@@ -432,8 +433,7 @@ static void sis_100_set_dmamode (struct ata_port *ap, struct ata_device *adev)
|
|
|
* @adev: Device to program
|
|
|
*
|
|
|
* Set UDMA/MWDMA mode for device, in host controller PCI config space.
|
|
|
- * Handles early SiS 961 bridges. Supports MWDMA as well unlike
|
|
|
- * the old ide/pci driver.
|
|
|
+ * Handles early SiS 961 bridges.
|
|
|
*
|
|
|
* LOCKING:
|
|
|
* None (inherited from caller).
|
|
@@ -467,8 +467,6 @@ static void sis_133_early_set_dmamode (struct ata_port *ap, struct ata_device *a
|
|
|
* @adev: Device to program
|
|
|
*
|
|
|
* Set UDMA/MWDMA mode for device, in host controller PCI config space.
|
|
|
- * Handles early SiS 961 bridges. Supports MWDMA as well unlike
|
|
|
- * the old ide/pci driver.
|
|
|
*
|
|
|
* LOCKING:
|
|
|
* None (inherited from caller).
|