diff options
Diffstat (limited to 'drivers/ide/arm/icside.c')
-rw-r--r-- | drivers/ide/arm/icside.c | 29 |
1 files changed, 9 insertions, 20 deletions
diff --git a/drivers/ide/arm/icside.c b/drivers/ide/arm/icside.c index 8a9b98fcb66d..7912a471f10d 100644 --- a/drivers/ide/arm/icside.c +++ b/drivers/ide/arm/icside.c | |||
@@ -248,15 +248,9 @@ static void icside_build_sglist(ide_drive_t *drive, struct request *rq) | |||
248 | * MW1 80 50 50 150 C | 248 | * MW1 80 50 50 150 C |
249 | * MW2 70 25 25 120 C | 249 | * MW2 70 25 25 120 C |
250 | */ | 250 | */ |
251 | static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode) | 251 | static int icside_set_speed(ide_drive_t *drive, const u8 xfer_mode) |
252 | { | 252 | { |
253 | int on = 0, cycle_time = 0, use_dma_info = 0; | 253 | int cycle_time, use_dma_info = 0; |
254 | |||
255 | /* | ||
256 | * Limit the transfer speed to MW_DMA_2. | ||
257 | */ | ||
258 | if (xfer_mode > XFER_MW_DMA_2) | ||
259 | xfer_mode = XFER_MW_DMA_2; | ||
260 | 254 | ||
261 | switch (xfer_mode) { | 255 | switch (xfer_mode) { |
262 | case XFER_MW_DMA_2: | 256 | case XFER_MW_DMA_2: |
@@ -278,6 +272,8 @@ static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode) | |||
278 | case XFER_SW_DMA_0: | 272 | case XFER_SW_DMA_0: |
279 | cycle_time = 480; | 273 | cycle_time = 480; |
280 | break; | 274 | break; |
275 | default: | ||
276 | return 1; | ||
281 | } | 277 | } |
282 | 278 | ||
283 | /* | 279 | /* |
@@ -289,17 +285,10 @@ static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode) | |||
289 | 285 | ||
290 | drive->drive_data = cycle_time; | 286 | drive->drive_data = cycle_time; |
291 | 287 | ||
292 | if (cycle_time && ide_config_drive_speed(drive, xfer_mode) == 0) | ||
293 | on = 1; | ||
294 | else | ||
295 | drive->drive_data = 480; | ||
296 | |||
297 | printk("%s: %s selected (peak %dMB/s)\n", drive->name, | 288 | printk("%s: %s selected (peak %dMB/s)\n", drive->name, |
298 | ide_xfer_verbose(xfer_mode), 2000 / drive->drive_data); | 289 | ide_xfer_verbose(xfer_mode), 2000 / drive->drive_data); |
299 | 290 | ||
300 | drive->current_speed = xfer_mode; | 291 | return ide_config_drive_speed(drive, xfer_mode); |
301 | |||
302 | return on; | ||
303 | } | 292 | } |
304 | 293 | ||
305 | static void icside_dma_host_off(ide_drive_t *drive) | 294 | static void icside_dma_host_off(ide_drive_t *drive) |
@@ -326,8 +315,7 @@ static int icside_dma_check(ide_drive_t *drive) | |||
326 | { | 315 | { |
327 | struct hd_driveid *id = drive->id; | 316 | struct hd_driveid *id = drive->id; |
328 | ide_hwif_t *hwif = HWIF(drive); | 317 | ide_hwif_t *hwif = HWIF(drive); |
329 | int xfer_mode = XFER_PIO_2; | 318 | int xfer_mode = 0; |
330 | int on; | ||
331 | 319 | ||
332 | if (!(id->capability & 1) || !hwif->autodma) | 320 | if (!(id->capability & 1) || !hwif->autodma) |
333 | goto out; | 321 | goto out; |
@@ -356,9 +344,10 @@ static int icside_dma_check(ide_drive_t *drive) | |||
356 | } | 344 | } |
357 | 345 | ||
358 | out: | 346 | out: |
359 | on = icside_set_speed(drive, xfer_mode); | 347 | if (xfer_mode == 0) |
348 | return -1; | ||
360 | 349 | ||
361 | return on ? 0 : -1; | 350 | return icside_set_speed(drive, xfer_mode) ? -1 : 0; |
362 | } | 351 | } |
363 | 352 | ||
364 | static int icside_dma_end(ide_drive_t *drive) | 353 | static int icside_dma_end(ide_drive_t *drive) |