diff options
Diffstat (limited to 'drivers/ide/pci/alim15x3.c')
-rw-r--r-- | drivers/ide/pci/alim15x3.c | 35 |
1 files changed, 27 insertions, 8 deletions
diff --git a/drivers/ide/pci/alim15x3.c b/drivers/ide/pci/alim15x3.c index 4debd18d52f8..83e0aa65a431 100644 --- a/drivers/ide/pci/alim15x3.c +++ b/drivers/ide/pci/alim15x3.c | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * linux/drivers/ide/pci/alim15x3.c Version 0.17 2003/01/02 | 2 | * linux/drivers/ide/pci/alim15x3.c Version 0.21 2007/02/03 |
3 | * | 3 | * |
4 | * Copyright (C) 1998-2000 Michel Aubry, Maintainer | 4 | * Copyright (C) 1998-2000 Michel Aubry, Maintainer |
5 | * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer | 5 | * Copyright (C) 1998-2000 Andrzej Krzysztofowicz, Maintainer |
@@ -9,6 +9,7 @@ | |||
9 | * May be copied or modified under the terms of the GNU General Public License | 9 | * May be copied or modified under the terms of the GNU General Public License |
10 | * Copyright (C) 2002 Alan Cox <alan@redhat.com> | 10 | * Copyright (C) 2002 Alan Cox <alan@redhat.com> |
11 | * ALi (now ULi M5228) support by Clear Zhang <Clear.Zhang@ali.com.tw> | 11 | * ALi (now ULi M5228) support by Clear Zhang <Clear.Zhang@ali.com.tw> |
12 | * Copyright (C) 2007 MontaVista Software, Inc. <source@mvista.com> | ||
12 | * | 13 | * |
13 | * (U)DMA capable version of ali 1533/1543(C), 1535(D) | 14 | * (U)DMA capable version of ali 1533/1543(C), 1535(D) |
14 | * | 15 | * |
@@ -280,15 +281,17 @@ static int ali_get_info (char *buffer, char **addr, off_t offset, int count) | |||
280 | #endif /* defined(DISPLAY_ALI_TIMINGS) && defined(CONFIG_PROC_FS) */ | 281 | #endif /* defined(DISPLAY_ALI_TIMINGS) && defined(CONFIG_PROC_FS) */ |
281 | 282 | ||
282 | /** | 283 | /** |
283 | * ali15x3_tune_drive - set up a drive | 284 | * ali15x3_tune_pio - set up chipset for PIO mode |
284 | * @drive: drive to tune | 285 | * @drive: drive to tune |
285 | * @pio: unused | 286 | * @pio: desired mode |
286 | * | 287 | * |
287 | * Select the best PIO timing for the drive in question. Then | 288 | * Select the best PIO mode for the drive in question. |
288 | * program the controller for this drive set up | 289 | * Then program the controller for this mode. |
290 | * | ||
291 | * Returns the PIO mode programmed. | ||
289 | */ | 292 | */ |
290 | 293 | ||
291 | static void ali15x3_tune_drive (ide_drive_t *drive, u8 pio) | 294 | static u8 ali15x3_tune_pio (ide_drive_t *drive, u8 pio) |
292 | { | 295 | { |
293 | ide_pio_data_t d; | 296 | ide_pio_data_t d; |
294 | ide_hwif_t *hwif = HWIF(drive); | 297 | ide_hwif_t *hwif = HWIF(drive); |
@@ -356,6 +359,22 @@ static void ali15x3_tune_drive (ide_drive_t *drive, u8 pio) | |||
356 | * { 20, 50, 30 } PIO Mode 5 with IORDY (nonstandard) | 359 | * { 20, 50, 30 } PIO Mode 5 with IORDY (nonstandard) |
357 | */ | 360 | */ |
358 | 361 | ||
362 | return pio; | ||
363 | } | ||
364 | |||
365 | /** | ||
366 | * ali15x3_tune_drive - set up drive for PIO mode | ||
367 | * @drive: drive to tune | ||
368 | * @pio: desired mode | ||
369 | * | ||
370 | * Program the controller with the best PIO timing for the given drive. | ||
371 | * Then set up the drive itself. | ||
372 | */ | ||
373 | |||
374 | static void ali15x3_tune_drive (ide_drive_t *drive, u8 pio) | ||
375 | { | ||
376 | pio = ali15x3_tune_pio(drive, pio); | ||
377 | (void) ide_config_drive_speed(drive, XFER_PIO_0 + pio); | ||
359 | } | 378 | } |
360 | 379 | ||
361 | /** | 380 | /** |
@@ -430,7 +449,7 @@ static u8 ali15x3_ratemask (ide_drive_t *drive) | |||
430 | } | 449 | } |
431 | 450 | ||
432 | /** | 451 | /** |
433 | * ali15x3_tune_chipset - set up chiset for new speed | 452 | * ali15x3_tune_chipset - set up chipset/drive for new speed |
434 | * @drive: drive to configure for | 453 | * @drive: drive to configure for |
435 | * @xferspeed: desired speed | 454 | * @xferspeed: desired speed |
436 | * | 455 | * |
@@ -461,7 +480,7 @@ static int ali15x3_tune_chipset (ide_drive_t *drive, u8 xferspeed) | |||
461 | pci_write_config_byte(dev, m5229_udma, tmpbyte); | 480 | pci_write_config_byte(dev, m5229_udma, tmpbyte); |
462 | 481 | ||
463 | if (speed < XFER_SW_DMA_0) | 482 | if (speed < XFER_SW_DMA_0) |
464 | ali15x3_tune_drive(drive, speed); | 483 | (void) ali15x3_tune_pio(drive, speed - XFER_PIO_0); |
465 | } else { | 484 | } else { |
466 | pci_read_config_byte(dev, m5229_udma, &tmpbyte); | 485 | pci_read_config_byte(dev, m5229_udma, &tmpbyte); |
467 | tmpbyte &= (0x0f << ((1-unit) << 2)); | 486 | tmpbyte &= (0x0f << ((1-unit) << 2)); |