|
@@ -66,30 +66,13 @@ static struct pio_clocks cs5520_pio_clocks[]={
|
|
|
{1, 2, 1}
|
|
|
};
|
|
|
|
|
|
-static int cs5520_tune_chipset(ide_drive_t *drive, const u8 speed)
|
|
|
+static void cs5520_set_pio_mode(ide_drive_t *drive, const u8 pio)
|
|
|
{
|
|
|
ide_hwif_t *hwif = HWIF(drive);
|
|
|
struct pci_dev *pdev = hwif->pci_dev;
|
|
|
- int pio = speed;
|
|
|
- u8 reg;
|
|
|
int controller = drive->dn > 1 ? 1 : 0;
|
|
|
+ u8 reg;
|
|
|
|
|
|
- switch(speed)
|
|
|
- {
|
|
|
- case XFER_PIO_4:
|
|
|
- case XFER_PIO_3:
|
|
|
- case XFER_PIO_2:
|
|
|
- case XFER_PIO_1:
|
|
|
- case XFER_PIO_0:
|
|
|
- pio -= XFER_PIO_0;
|
|
|
- break;
|
|
|
- default:
|
|
|
- pio = 0;
|
|
|
- printk(KERN_ERR "cs55x0: bad ide timing.\n");
|
|
|
- }
|
|
|
-
|
|
|
- printk("PIO clocking = %d\n", pio);
|
|
|
-
|
|
|
/* FIXME: if DMA = 1 do we need to set the DMA bit here ? */
|
|
|
|
|
|
/* 8bit CAT/CRT - 8bit command timing for channel */
|
|
@@ -114,12 +97,21 @@ static int cs5520_tune_chipset(ide_drive_t *drive, const u8 speed)
|
|
|
reg |= 1<<((drive->dn&1)+5);
|
|
|
outb(reg, hwif->dma_base + 0x02 + 8*controller);
|
|
|
|
|
|
- return ide_config_drive_speed(drive, speed);
|
|
|
+ (void)ide_config_drive_speed(drive, XFER_PIO_0 + pio);
|
|
|
}
|
|
|
|
|
|
-static void cs5520_set_pio_mode(ide_drive_t *drive, const u8 pio)
|
|
|
+static int cs5520_tune_chipset(ide_drive_t *drive, const u8 speed)
|
|
|
{
|
|
|
- cs5520_tune_chipset(drive, XFER_PIO_0 + pio);
|
|
|
+ printk(KERN_ERR "cs55x0: bad ide timing.\n");
|
|
|
+
|
|
|
+ cs5520_set_pio_mode(drive, 0);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * FIXME: this is incorrect to return zero here but
|
|
|
+ * since all users of ide_set_xfer_rate() ignore
|
|
|
+ * the return value it is not a problem currently
|
|
|
+ */
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static int cs5520_config_drive_xfer_rate(ide_drive_t *drive)
|