Skip to content

Commit

Permalink
ACPI / bind: Redefine acpi_preset_companion()
Browse files Browse the repository at this point in the history
Modify acpi_preset_companion() to take a struct acpi_device pointer
instead of an ACPI handle as its second argument and redefine it as
a static inline wrapper around ACPI_COMPANION_SET() passing the
return value of acpi_find_child_device() directly as the second
argument to it.  Update its users to pass struct acpi_device
pointers instead of ACPI handles to it.

This allows some unnecessary acpi_bus_get_device() calls to be
avoided.

Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: Aaron Lu <aaron.lu@intel.com>
Tested-by: Aaron Lu <aaron.lu@intel.com> # for ATA binding
  • Loading branch information
Rafael J. Wysocki committed Dec 7, 2013
1 parent 11dcc75 commit 9c5ad36
Show file tree
Hide file tree
Showing 5 changed files with 21 additions and 24 deletions.
10 changes: 1 addition & 9 deletions drivers/acpi/glue.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,6 +149,7 @@ struct acpi_device *acpi_find_child_device(struct acpi_device *parent,
}
return ret;
}
EXPORT_SYMBOL_GPL(acpi_find_child_device);

acpi_handle acpi_get_child(acpi_handle handle, u64 addr)
{
Expand Down Expand Up @@ -298,15 +299,6 @@ int acpi_unbind_one(struct device *dev)
}
EXPORT_SYMBOL_GPL(acpi_unbind_one);

void acpi_preset_companion(struct device *dev, acpi_handle parent, u64 addr)
{
struct acpi_device *adev;

if (!acpi_bus_get_device(acpi_get_child(parent, addr), &adev))
ACPI_COMPANION_SET(dev, adev);
}
EXPORT_SYMBOL_GPL(acpi_preset_companion);

static int acpi_platform_notify(struct device *dev)
{
struct acpi_bus_type *type = acpi_get_bus_type(dev);
Expand Down
26 changes: 13 additions & 13 deletions drivers/ata/libata-acpi.c
Original file line number Diff line number Diff line change
Expand Up @@ -178,12 +178,12 @@ static const struct acpi_dock_ops ata_acpi_ap_dock_ops = {
/* bind acpi handle to pata port */
void ata_acpi_bind_port(struct ata_port *ap)
{
acpi_handle host_handle = ACPI_HANDLE(ap->host->dev);
struct acpi_device *host_companion = ACPI_COMPANION(ap->host->dev);

if (libata_noacpi || ap->flags & ATA_FLAG_ACPI_SATA || !host_handle)
if (libata_noacpi || ap->flags & ATA_FLAG_ACPI_SATA || !host_companion)
return;

acpi_preset_companion(&ap->tdev, host_handle, ap->port_no);
acpi_preset_companion(&ap->tdev, host_companion, ap->port_no);

if (ata_acpi_gtm(ap, &ap->__acpi_init_gtm) == 0)
ap->pflags |= ATA_PFLAG_INIT_GTM_VALID;
Expand All @@ -196,31 +196,31 @@ void ata_acpi_bind_port(struct ata_port *ap)
void ata_acpi_bind_dev(struct ata_device *dev)
{
struct ata_port *ap = dev->link->ap;
acpi_handle port_handle = ACPI_HANDLE(&ap->tdev);
acpi_handle host_handle = ACPI_HANDLE(ap->host->dev);
acpi_handle parent_handle;
struct acpi_device *port_companion = ACPI_COMPANION(&ap->tdev);
struct acpi_device *host_companion = ACPI_COMPANION(ap->host->dev);
struct acpi_device *parent;
u64 adr;

/*
* For both sata/pata devices, host handle is required.
* For pata device, port handle is also required.
* For both sata/pata devices, host companion device is required.
* For pata device, port companion device is also required.
*/
if (libata_noacpi || !host_handle ||
(!(ap->flags & ATA_FLAG_ACPI_SATA) && !port_handle))
if (libata_noacpi || !host_companion ||
(!(ap->flags & ATA_FLAG_ACPI_SATA) && !port_companion))
return;

if (ap->flags & ATA_FLAG_ACPI_SATA) {
if (!sata_pmp_attached(ap))
adr = SATA_ADR(ap->port_no, NO_PORT_MULT);
else
adr = SATA_ADR(ap->port_no, dev->link->pmp);
parent_handle = host_handle;
parent = host_companion;
} else {
adr = dev->devno;
parent_handle = port_handle;
parent = port_companion;
}

acpi_preset_companion(&dev->tdev, parent_handle, adr);
acpi_preset_companion(&dev->tdev, parent, adr);

register_hotplug_dock_device(ata_dev_acpi_handle(dev),
&ata_acpi_dev_dock_ops, dev, NULL, NULL);
Expand Down
2 changes: 1 addition & 1 deletion drivers/mmc/core/sdio_bus.c
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ static void sdio_acpi_set_handle(struct sdio_func *func)
struct mmc_host *host = func->card->host;
u64 addr = (host->slotno << 16) | func->num;

acpi_preset_companion(&func->dev, ACPI_HANDLE(host->parent), addr);
acpi_preset_companion(&func->dev, ACPI_COMPANION(host->parent), addr);
}
#else
static inline void sdio_acpi_set_handle(struct sdio_func *func) {}
Expand Down
1 change: 0 additions & 1 deletion include/acpi/acpi_bus.h
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,6 @@ struct acpi_pci_root {
struct acpi_device *acpi_find_child_device(struct acpi_device *parent,
u64 address, bool check_children);
acpi_handle acpi_get_child(acpi_handle handle, u64 addr);
void acpi_preset_companion(struct device *dev, acpi_handle parent, u64 addr);
int acpi_is_root_bridge(acpi_handle);
struct acpi_pci_root *acpi_pci_find_root(acpi_handle handle);

Expand Down
6 changes: 6 additions & 0 deletions include/linux/acpi.h
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ static inline acpi_handle acpi_device_handle(struct acpi_device *adev)
#define ACPI_COMPANION_SET(dev, adev) ACPI_COMPANION(dev) = (adev)
#define ACPI_HANDLE(dev) acpi_device_handle(ACPI_COMPANION(dev))

static inline void acpi_preset_companion(struct device *dev,
struct acpi_device *parent, u64 addr)
{
ACPI_COMPANION_SET(dev, acpi_find_child_device(parent, addr, NULL));
}

static inline const char *acpi_dev_name(struct acpi_device *adev)
{
return dev_name(&adev->dev);
Expand Down

0 comments on commit 9c5ad36

Please sign in to comment.