[PATCH] libata: reorganize ata_bus_probe()
Now that reset and configure are converted such that they don't modify or disable libata core data structures, reorganize ata_bus_probe() to reflect this change. Signed-off-by: Tejun Heo <htejun@gmail.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
4b2f3ededc
commit
28ca5c57dc
1 changed files with 25 additions and 21 deletions
|
@ -1211,35 +1211,40 @@ static int ata_dev_configure(struct ata_port *ap, struct ata_device *dev)
|
|||
|
||||
static int ata_bus_probe(struct ata_port *ap)
|
||||
{
|
||||
unsigned int i, found = 0;
|
||||
unsigned int classes[ATA_MAX_DEVICES];
|
||||
unsigned int i, rc, found = 0;
|
||||
|
||||
ata_port_probe(ap);
|
||||
|
||||
/* reset */
|
||||
if (ap->ops->probe_reset) {
|
||||
unsigned int classes[ATA_MAX_DEVICES];
|
||||
int rc;
|
||||
|
||||
ata_port_probe(ap);
|
||||
|
||||
rc = ap->ops->probe_reset(ap, classes);
|
||||
if (rc == 0) {
|
||||
for (i = 0; i < ATA_MAX_DEVICES; i++) {
|
||||
if (classes[i] == ATA_DEV_UNKNOWN)
|
||||
classes[i] = ATA_DEV_NONE;
|
||||
ap->device[i].class = classes[i];
|
||||
}
|
||||
} else {
|
||||
printk(KERN_ERR "ata%u: probe reset failed, "
|
||||
"disabling port\n", ap->id);
|
||||
ata_port_disable(ap);
|
||||
if (rc) {
|
||||
printk("ata%u: reset failed (errno=%d)\n", ap->id, rc);
|
||||
return rc;
|
||||
}
|
||||
} else
|
||||
|
||||
for (i = 0; i < ATA_MAX_DEVICES; i++)
|
||||
if (classes[i] == ATA_DEV_UNKNOWN)
|
||||
classes[i] = ATA_DEV_NONE;
|
||||
} else {
|
||||
ap->ops->phy_reset(ap);
|
||||
|
||||
if (ap->flags & ATA_FLAG_PORT_DISABLED)
|
||||
goto err_out;
|
||||
for (i = 0; i < ATA_MAX_DEVICES; i++) {
|
||||
if (!(ap->flags & ATA_FLAG_PORT_DISABLED))
|
||||
classes[i] = ap->device[i].class;
|
||||
else
|
||||
ap->device[i].class = ATA_DEV_UNKNOWN;
|
||||
}
|
||||
ata_port_probe(ap);
|
||||
}
|
||||
|
||||
/* read IDENTIFY page and configure devices */
|
||||
for (i = 0; i < ATA_MAX_DEVICES; i++) {
|
||||
struct ata_device *dev = &ap->device[i];
|
||||
|
||||
dev->class = classes[i];
|
||||
|
||||
if (!ata_dev_present(dev))
|
||||
continue;
|
||||
|
||||
|
@ -1257,7 +1262,7 @@ static int ata_bus_probe(struct ata_port *ap)
|
|||
found = 1;
|
||||
}
|
||||
|
||||
if ((!found) || (ap->flags & ATA_FLAG_PORT_DISABLED))
|
||||
if (!found)
|
||||
goto err_out_disable;
|
||||
|
||||
ata_set_mode(ap);
|
||||
|
@ -1268,7 +1273,6 @@ static int ata_bus_probe(struct ata_port *ap)
|
|||
|
||||
err_out_disable:
|
||||
ap->ops->port_disable(ap);
|
||||
err_out:
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue