diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2006-03-27 12:46:37 -0500 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2006-03-29 19:30:27 -0500 |
commit | e35a9e01f2a504871e70576a9e11dbe4d8dee456 (patch) | |
tree | 4761c2d8b9d827d95cc531376e5c02666734ecf6 | |
parent | 4e5ec5dba22ea509b1a004f9815751f0ffc815e5 (diff) |
[PATCH] libata: Add ->set_mode hook for odd drivers
Some hardware doesn't want the usual mode setup logic running. This
allows the hardware driver to replace it for special cases in the least
invasive way possible.
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
-rw-r--r-- | drivers/scsi/libata-core.c | 6 | ||||
-rw-r--r-- | include/linux/libata.h | 1 |
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c index 86310562da8b..10933cb722e6 100644 --- a/drivers/scsi/libata-core.c +++ b/drivers/scsi/libata-core.c | |||
@@ -1409,7 +1409,11 @@ static int ata_bus_probe(struct ata_port *ap) | |||
1409 | if (!found) | 1409 | if (!found) |
1410 | goto err_out_disable; | 1410 | goto err_out_disable; |
1411 | 1411 | ||
1412 | ata_set_mode(ap); | 1412 | if (ap->ops->set_mode) |
1413 | ap->ops->set_mode(ap); | ||
1414 | else | ||
1415 | ata_set_mode(ap); | ||
1416 | |||
1413 | if (ap->flags & ATA_FLAG_PORT_DISABLED) | 1417 | if (ap->flags & ATA_FLAG_PORT_DISABLED) |
1414 | goto err_out_disable; | 1418 | goto err_out_disable; |
1415 | 1419 | ||
diff --git a/include/linux/libata.h b/include/linux/libata.h index a5c213ce97c9..6a9316cbb70b 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -433,6 +433,7 @@ struct ata_port_operations { | |||
433 | void (*dev_select)(struct ata_port *ap, unsigned int device); | 433 | void (*dev_select)(struct ata_port *ap, unsigned int device); |
434 | 434 | ||
435 | void (*phy_reset) (struct ata_port *ap); /* obsolete */ | 435 | void (*phy_reset) (struct ata_port *ap); /* obsolete */ |
436 | void (*set_mode) (struct ata_port *ap); | ||
436 | int (*probe_reset) (struct ata_port *ap, unsigned int *classes); | 437 | int (*probe_reset) (struct ata_port *ap, unsigned int *classes); |
437 | 438 | ||
438 | void (*post_set_mode) (struct ata_port *ap); | 439 | void (*post_set_mode) (struct ata_port *ap); |