diff options
Diffstat (limited to 'drivers/ide/ide-probe.c')
-rw-r--r-- | drivers/ide/ide-probe.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index d240f76b0da6..d8c1c3e735bb 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c | |||
@@ -390,13 +390,13 @@ static int do_probe (ide_drive_t *drive, u8 cmd) | |||
390 | * (e.g. crw9624 as drive0 with disk as slave) | 390 | * (e.g. crw9624 as drive0 with disk as slave) |
391 | */ | 391 | */ |
392 | msleep(50); | 392 | msleep(50); |
393 | SELECT_DRIVE(drive); | 393 | tp_ops->dev_select(drive); |
394 | msleep(50); | 394 | msleep(50); |
395 | 395 | ||
396 | if (ide_read_device(drive) != drive->select && present == 0) { | 396 | if (ide_read_device(drive) != drive->select && present == 0) { |
397 | if (drive->dn & 1) { | 397 | if (drive->dn & 1) { |
398 | /* exit with drive0 selected */ | 398 | /* exit with drive0 selected */ |
399 | SELECT_DRIVE(hwif->devices[0]); | 399 | tp_ops->dev_select(hwif->devices[0]); |
400 | /* allow ATA_BUSY to assert & clear */ | 400 | /* allow ATA_BUSY to assert & clear */ |
401 | msleep(50); | 401 | msleep(50); |
402 | } | 402 | } |
@@ -422,7 +422,7 @@ static int do_probe (ide_drive_t *drive, u8 cmd) | |||
422 | printk(KERN_ERR "%s: no response (status = 0x%02x), " | 422 | printk(KERN_ERR "%s: no response (status = 0x%02x), " |
423 | "resetting drive\n", drive->name, stat); | 423 | "resetting drive\n", drive->name, stat); |
424 | msleep(50); | 424 | msleep(50); |
425 | SELECT_DRIVE(drive); | 425 | tp_ops->dev_select(drive); |
426 | msleep(50); | 426 | msleep(50); |
427 | tp_ops->exec_command(hwif, ATA_CMD_DEV_RESET); | 427 | tp_ops->exec_command(hwif, ATA_CMD_DEV_RESET); |
428 | (void)ide_busy_sleep(hwif, WAIT_WORSTCASE, 0); | 428 | (void)ide_busy_sleep(hwif, WAIT_WORSTCASE, 0); |
@@ -441,7 +441,7 @@ static int do_probe (ide_drive_t *drive, u8 cmd) | |||
441 | } | 441 | } |
442 | if (drive->dn & 1) { | 442 | if (drive->dn & 1) { |
443 | /* exit with drive0 selected */ | 443 | /* exit with drive0 selected */ |
444 | SELECT_DRIVE(hwif->devices[0]); | 444 | tp_ops->dev_select(hwif->devices[0]); |
445 | msleep(50); | 445 | msleep(50); |
446 | /* ensure drive irq is clear */ | 446 | /* ensure drive irq is clear */ |
447 | (void)tp_ops->read_status(hwif); | 447 | (void)tp_ops->read_status(hwif); |
@@ -605,6 +605,7 @@ out: | |||
605 | 605 | ||
606 | static int ide_port_wait_ready(ide_hwif_t *hwif) | 606 | static int ide_port_wait_ready(ide_hwif_t *hwif) |
607 | { | 607 | { |
608 | const struct ide_tp_ops *tp_ops = hwif->tp_ops; | ||
608 | ide_drive_t *drive; | 609 | ide_drive_t *drive; |
609 | int i, rc; | 610 | int i, rc; |
610 | 611 | ||
@@ -627,8 +628,8 @@ static int ide_port_wait_ready(ide_hwif_t *hwif) | |||
627 | /* Ignore disks that we will not probe for later. */ | 628 | /* Ignore disks that we will not probe for later. */ |
628 | if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0 || | 629 | if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0 || |
629 | (drive->dev_flags & IDE_DFLAG_PRESENT)) { | 630 | (drive->dev_flags & IDE_DFLAG_PRESENT)) { |
630 | SELECT_DRIVE(drive); | 631 | tp_ops->dev_select(drive); |
631 | hwif->tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS); | 632 | tp_ops->write_devctl(hwif, ATA_DEVCTL_OBS); |
632 | mdelay(2); | 633 | mdelay(2); |
633 | rc = ide_wait_not_busy(hwif, 35000); | 634 | rc = ide_wait_not_busy(hwif, 35000); |
634 | if (rc) | 635 | if (rc) |
@@ -640,7 +641,7 @@ static int ide_port_wait_ready(ide_hwif_t *hwif) | |||
640 | out: | 641 | out: |
641 | /* Exit function with master reselected (let's be sane) */ | 642 | /* Exit function with master reselected (let's be sane) */ |
642 | if (i) | 643 | if (i) |
643 | SELECT_DRIVE(hwif->devices[0]); | 644 | tp_ops->dev_select(hwif->devices[0]); |
644 | 645 | ||
645 | return rc; | 646 | return rc; |
646 | } | 647 | } |