diff options
author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-13 11:47:50 -0400 |
---|---|---|
committer | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2007-10-13 11:47:50 -0400 |
commit | 75d7d963e3dcf8a1410000ab246921709e276cd9 (patch) | |
tree | dec16e18a5848d351f8572d2418eea09312756c0 /drivers/ide/arm/icside.c | |
parent | 0b46ff2ea2d817dc7883b80cd4e05ce41cce9158 (diff) |
icside: use ide_tune_dma()
* Add "good DMA drives" hack for icside to ide-dma.c::ide_find_dma_mode()
(in the long-term it should be either removed or generalized for all hosts).
* Use ide_tune_dma() in icside.c::icside_dma_check().
This results in the following changes in behavior:
- pre-EIDE SWDMA modes are now also respected
- drive->autodma is checked instead of hwif->autodma
(doesn't really matter as icside sets both to "1")
* Make ide-dma.c::__ide_dma_good_drive() static and drop "__" prefix.
Cc: Russell King <rmk@arm.linux.org.uk>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers/ide/arm/icside.c')
-rw-r--r-- | drivers/ide/arm/icside.c | 37 |
1 files changed, 3 insertions, 34 deletions
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c index 7912a471f10d..110e52377c71 100644 --- a/drivers/ide/arm/icside.c +++ b/drivers/ide/arm/icside.c | |||
@@ -313,41 +313,10 @@ static int icside_dma_on(ide_drive_t *drive) | |||
313 | 313 | ||
314 | static int icside_dma_check(ide_drive_t *drive) | 314 | static int icside_dma_check(ide_drive_t *drive) |
315 | { | 315 | { |
316 | struct hd_driveid *id = drive->id; | 316 | if (ide_tune_dma(drive)) |
317 | ide_hwif_t *hwif = HWIF(drive); | 317 | return 0; |
318 | int xfer_mode = 0; | ||
319 | |||
320 | if (!(id->capability & 1) || !hwif->autodma) | ||
321 | goto out; | ||
322 | |||
323 | /* | ||
324 | * Consult the list of known "bad" drives | ||
325 | */ | ||
326 | if (__ide_dma_bad_drive(drive)) | ||
327 | goto out; | ||
328 | |||
329 | /* | ||
330 | * Enable DMA on any drive that has multiword DMA | ||
331 | */ | ||
332 | if (id->field_valid & 2) { | ||
333 | xfer_mode = ide_max_dma_mode(drive); | ||
334 | goto out; | ||
335 | } | ||
336 | |||
337 | /* | ||
338 | * Consult the list of known "good" drives | ||
339 | */ | ||
340 | if (__ide_dma_good_drive(drive)) { | ||
341 | if (id->eide_dma_time > 150) | ||
342 | goto out; | ||
343 | xfer_mode = XFER_MW_DMA_1; | ||
344 | } | ||
345 | |||
346 | out: | ||
347 | if (xfer_mode == 0) | ||
348 | return -1; | ||
349 | 318 | ||
350 | return icside_set_speed(drive, xfer_mode) ? -1 : 0; | 319 | return -1; |
351 | } | 320 | } |
352 | 321 | ||
353 | static int icside_dma_end(ide_drive_t *drive) | 322 | static int icside_dma_end(ide_drive_t *drive) |