]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/ide/legacy/qd65xx.c
Merge branch 'x86/crashdump' into x86/urgent
[linux-2.6-omap-h63xx.git] / drivers / ide / legacy / qd65xx.c
index 5621963f755f26490a943db0761561126ef469ac..2338f344ea243809b7fb5954d7e09e494303ada9 100644 (file)
  *
  * QDI QD6500/QD6580 EIDE controller fast support
  *
- * Please set local bus speed using kernel parameter idebus
- *     for example, "idebus=33" stands for 33Mhz VLbus
  * To activate controller support, use "ide0=qd65xx"
- * To enable tuning, use "hda=autotune hdb=autotune"
- * To enable 2nd channel tuning (qd6580 only), use "hdc=autotune hdd=autotune"
  */
 
 /*
@@ -114,7 +110,7 @@ static void qd65xx_select(ide_drive_t *drive)
 
 static u8 qd6500_compute_timing (ide_hwif_t *hwif, int active_time, int recovery_time)
 {
-       int clk = ide_vlb_clk ? ide_vlb_clk : system_bus_clock();
+       int clk = ide_vlb_clk ? ide_vlb_clk : 50;
        u8 act_cyc, rec_cyc;
 
        if (clk <= 33) {
@@ -136,7 +132,7 @@ static u8 qd6500_compute_timing (ide_hwif_t *hwif, int active_time, int recovery
 
 static u8 qd6580_compute_timing (int active_time, int recovery_time)
 {
-       int clk = ide_vlb_clk ? ide_vlb_clk : system_bus_clock();
+       int clk = ide_vlb_clk ? ide_vlb_clk : 50;
        u8 act_cyc, rec_cyc;
 
        act_cyc = 17 - IDE_IN(active_time   * clk / 1000 + 1, 2, 17);
@@ -211,6 +207,7 @@ static void qd6500_set_pio_mode(ide_drive_t *drive, const u8 pio)
 static void qd6580_set_pio_mode(ide_drive_t *drive, const u8 pio)
 {
        ide_hwif_t *hwif = drive->hwif;
+       struct ide_timing *t = ide_timing_find_mode(XFER_PIO_0 + pio);
        unsigned int cycle_time;
        int active_time   = 175;
        int recovery_time = 415; /* worst case values from the dos driver */
@@ -240,7 +237,7 @@ static void qd6580_set_pio_mode(ide_drive_t *drive, const u8 pio)
                                        active_time = 110;
                                        recovery_time = cycle_time - 120;
                                } else {
-                                       active_time = ide_pio_timings[pio].active_time;
+                                       active_time = t->active;
                                        recovery_time = cycle_time - active_time;
                                }
                }
@@ -285,17 +282,18 @@ static int __init qd_testreg(int port)
        return (readreg != QD_TESTVAL);
 }
 
-static void __init qd6500_port_init_devs(ide_hwif_t *hwif)
+static void __init qd6500_init_dev(ide_drive_t *drive)
 {
+       ide_hwif_t *hwif = drive->hwif;
        u8 base = (hwif->config_data & 0xff00) >> 8;
        u8 config = QD_CONFIG(hwif);
 
-       hwif->drives[0].drive_data = QD6500_DEF_DATA;
-       hwif->drives[1].drive_data = QD6500_DEF_DATA;
+       drive->drive_data = QD6500_DEF_DATA;
 }
 
-static void __init qd6580_port_init_devs(ide_hwif_t *hwif)
+static void __init qd6580_init_dev(ide_drive_t *drive)
 {
+       ide_hwif_t *hwif = drive->hwif;
        u16 t1, t2;
        u8 base = (hwif->config_data & 0xff00) >> 8;
        u8 config = QD_CONFIG(hwif);
@@ -306,18 +304,17 @@ static void __init qd6580_port_init_devs(ide_hwif_t *hwif)
        } else
                t2 = t1 = hwif->channel ? QD6580_DEF_DATA2 : QD6580_DEF_DATA;
 
-       hwif->drives[0].drive_data = t1;
-       hwif->drives[1].drive_data = t2;
+       drive->drive_data = drive->select.b.unit ? t2 : t1;
 }
 
 static const struct ide_port_ops qd6500_port_ops = {
-       .port_init_devs         = qd6500_port_init_devs,
+       .init_dev               = qd6500_init_dev,
        .set_pio_mode           = qd6500_set_pio_mode,
        .selectproc             = qd65xx_select,
 };
 
 static const struct ide_port_ops qd6580_port_ops = {
-       .port_init_devs         = qd6580_port_init_devs,
+       .init_dev               = qd6580_init_dev,
        .set_pio_mode           = qd6580_set_pio_mode,
        .selectproc             = qd65xx_select,
 };
@@ -326,8 +323,7 @@ static const struct ide_port_info qd65xx_port_info __initdata = {
        .name                   = DRV_NAME,
        .chipset                = ide_qd65xx,
        .host_flags             = IDE_HFLAG_IO_32BIT |
-                                 IDE_HFLAG_NO_DMA |
-                                 IDE_HFLAG_NO_AUTOTUNE,
+                                 IDE_HFLAG_NO_DMA,
        .pio_mask               = ATA_PIO4,
 };