summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Cox <alan@lxorguk.ukuu.org.uk>2006-03-27 18:46:37 +0100
committerJeff Garzik <jeff@garzik.org>2006-03-29 19:30:27 -0500
commite35a9e01f2a504871e70576a9e11dbe4d8dee456 (patch)
tree4761c2d8b9d827d95cc531376e5c02666734ecf6
parent4e5ec5dba22ea509b1a004f9815751f0ffc815e5 (diff)
downloadop-kernel-dev-e35a9e01f2a504871e70576a9e11dbe4d8dee456.zip
op-kernel-dev-e35a9e01f2a504871e70576a9e11dbe4d8dee456.tar.gz
[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.c6
-rw-r--r--include/linux/libata.h1
2 files changed, 6 insertions, 1 deletions
diff --git a/drivers/scsi/libata-core.c b/drivers/scsi/libata-core.c
index 8631056..10933cb 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)
if (!found)
goto err_out_disable;
- ata_set_mode(ap);
+ if (ap->ops->set_mode)
+ ap->ops->set_mode(ap);
+ else
+ ata_set_mode(ap);
+
if (ap->flags & ATA_FLAG_PORT_DISABLED)
goto err_out_disable;
diff --git a/include/linux/libata.h b/include/linux/libata.h
index a5c213c..6a9316c 100644
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
@@ -433,6 +433,7 @@ struct ata_port_operations {
void (*dev_select)(struct ata_port *ap, unsigned int device);
void (*phy_reset) (struct ata_port *ap); /* obsolete */
+ void (*set_mode) (struct ata_port *ap);
int (*probe_reset) (struct ata_port *ap, unsigned int *classes);
void (*post_set_mode) (struct ata_port *ap);
OpenPOWER on IntegriCloud