aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/arm/icside.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/arm/icside.c')
-rw-r--r--drivers/ide/arm/icside.c29
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 */
251static int icside_set_speed(ide_drive_t *drive, u8 xfer_mode) 251static 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
305static void icside_dma_host_off(ide_drive_t *drive) 294static 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
358out: 346out:
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
364static int icside_dma_end(ide_drive_t *drive) 353static int icside_dma_end(ide_drive_t *drive)