diff options
Diffstat (limited to 'drivers/ide/pci/piix.c')
-rw-r--r-- | drivers/ide/pci/piix.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/drivers/ide/pci/piix.c b/drivers/ide/pci/piix.c index b66f9d1411b3..07492d71c602 100644 --- a/drivers/ide/pci/piix.c +++ b/drivers/ide/pci/piix.c | |||
@@ -17,11 +17,11 @@ | |||
17 | * 41 | 17 | * 41 |
18 | * 43 | 18 | * 43 |
19 | * | 19 | * |
20 | * | PIO 0 | c0 | 80 | 0 | piix_tune_drive(drive, 0); | 20 | * | PIO 0 | c0 | 80 | 0 | |
21 | * | PIO 2 | SW2 | d0 | 90 | 4 | piix_tune_drive(drive, 2); | 21 | * | PIO 2 | SW2 | d0 | 90 | 4 | |
22 | * | PIO 3 | MW1 | e1 | a1 | 9 | piix_tune_drive(drive, 3); | 22 | * | PIO 3 | MW1 | e1 | a1 | 9 | |
23 | * | PIO 4 | MW2 | e3 | a3 | b | piix_tune_drive(drive, 4); | 23 | * | PIO 4 | MW2 | e3 | a3 | b | |
24 | * | 24 | * |
25 | * sitre = word40 & 0x4000; primary | 25 | * sitre = word40 & 0x4000; primary |
26 | * sitre = word42 & 0x4000; secondary | 26 | * sitre = word42 & 0x4000; secondary |
27 | * | 27 | * |
@@ -204,16 +204,16 @@ static void piix_tune_pio (ide_drive_t *drive, u8 pio) | |||
204 | } | 204 | } |
205 | 205 | ||
206 | /** | 206 | /** |
207 | * piix_tune_drive - tune a drive attached to PIIX | 207 | * piix_set_pio_mode - set PIO mode |
208 | * @drive: drive to tune | 208 | * @drive: drive to tune |
209 | * @pio: desired PIO mode | 209 | * @pio: desired PIO mode |
210 | * | 210 | * |
211 | * Set the drive's PIO mode (might be useful if drive is not registered | 211 | * Set the drive's PIO mode (might be useful if drive is not registered |
212 | * in CMOS for any reason). | 212 | * in CMOS for any reason). |
213 | */ | 213 | */ |
214 | static void piix_tune_drive (ide_drive_t *drive, u8 pio) | 214 | |
215 | static void piix_set_pio_mode(ide_drive_t *drive, const u8 pio) | ||
215 | { | 216 | { |
216 | pio = ide_get_best_pio_mode(drive, pio, 4); | ||
217 | piix_tune_pio(drive, pio); | 217 | piix_tune_pio(drive, pio); |
218 | (void) ide_config_drive_speed(drive, XFER_PIO_0 + pio); | 218 | (void) ide_config_drive_speed(drive, XFER_PIO_0 + pio); |
219 | } | 219 | } |
@@ -317,7 +317,7 @@ static int piix_config_drive_xfer_rate (ide_drive_t *drive) | |||
317 | return 0; | 317 | return 0; |
318 | 318 | ||
319 | if (ide_use_fast_pio(drive)) | 319 | if (ide_use_fast_pio(drive)) |
320 | piix_tune_drive(drive, 255); | 320 | ide_set_max_pio(drive); |
321 | 321 | ||
322 | return -1; | 322 | return -1; |
323 | } | 323 | } |
@@ -454,7 +454,8 @@ static void __devinit init_hwif_piix(ide_hwif_t *hwif) | |||
454 | } | 454 | } |
455 | 455 | ||
456 | hwif->autodma = 0; | 456 | hwif->autodma = 0; |
457 | hwif->tuneproc = &piix_tune_drive; | 457 | |
458 | hwif->set_pio_mode = &piix_set_pio_mode; | ||
458 | hwif->speedproc = &piix_tune_chipset; | 459 | hwif->speedproc = &piix_tune_chipset; |
459 | hwif->drives[0].autotune = 1; | 460 | hwif->drives[0].autotune = 1; |
460 | hwif->drives[1].autotune = 1; | 461 | hwif->drives[1].autotune = 1; |