diff options
Diffstat (limited to 'drivers/ata/libata-acpi.c')
-rw-r--r-- | drivers/ata/libata-acpi.c | 36 |
1 files changed, 32 insertions, 4 deletions
diff --git a/drivers/ata/libata-acpi.c b/drivers/ata/libata-acpi.c index dc9842ec6f0..a276c06dda9 100644 --- a/drivers/ata/libata-acpi.c +++ b/drivers/ata/libata-acpi.c | |||
@@ -40,12 +40,40 @@ static int is_pci_dev(struct device *dev) | |||
40 | return (dev->bus == &pci_bus_type); | 40 | return (dev->bus == &pci_bus_type); |
41 | } | 41 | } |
42 | 42 | ||
43 | static void ata_acpi_associate_sata_port(struct ata_port *ap) | 43 | /** |
44 | * ata_acpi_associate_sata_port - associate SATA port with ACPI objects | ||
45 | * @ap: target SATA port | ||
46 | * | ||
47 | * Look up ACPI objects associated with @ap and initialize acpi_handle | ||
48 | * fields of @ap, the port and devices accordingly. | ||
49 | * | ||
50 | * LOCKING: | ||
51 | * EH context. | ||
52 | * | ||
53 | * RETURNS: | ||
54 | * 0 on success, -errno on failure. | ||
55 | */ | ||
56 | void ata_acpi_associate_sata_port(struct ata_port *ap) | ||
44 | { | 57 | { |
45 | acpi_integer adr = SATA_ADR(ap->port_no, NO_PORT_MULT); | 58 | WARN_ON(!(ap->flags & ATA_FLAG_ACPI_SATA)); |
59 | |||
60 | if (!ap->nr_pmp_links) { | ||
61 | acpi_integer adr = SATA_ADR(ap->port_no, NO_PORT_MULT); | ||
62 | |||
63 | ap->link.device->acpi_handle = | ||
64 | acpi_get_child(ap->host->acpi_handle, adr); | ||
65 | } else { | ||
66 | struct ata_link *link; | ||
67 | |||
68 | ap->link.device->acpi_handle = NULL; | ||
46 | 69 | ||
47 | ap->link.device->acpi_handle = | 70 | ata_port_for_each_link(link, ap) { |
48 | acpi_get_child(ap->host->acpi_handle, adr); | 71 | acpi_integer adr = SATA_ADR(ap->port_no, link->pmp); |
72 | |||
73 | link->device->acpi_handle = | ||
74 | acpi_get_child(ap->host->acpi_handle, adr); | ||
75 | } | ||
76 | } | ||
49 | } | 77 | } |
50 | 78 | ||
51 | static void ata_acpi_associate_ide_port(struct ata_port *ap) | 79 | static void ata_acpi_associate_ide_port(struct ata_port *ap) |