Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9c5ad36d authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

ACPI / bind: Redefine acpi_preset_companion()



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: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarAaron Lu <aaron.lu@intel.com>
Tested-by: Aaron Lu <aaron.lu@intel.com> # for ATA binding
parent 11dcc75d
Loading
Loading
Loading
Loading
+1 −9
Original line number Diff line number Diff line
@@ -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)
{
@@ -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);
+13 −13
Original line number Diff line number Diff line
@@ -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;
@@ -196,17 +196,17 @@ 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) {
@@ -214,13 +214,13 @@ void ata_acpi_bind_dev(struct ata_device *dev)
			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);
+1 −1
Original line number Diff line number Diff line
@@ -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) {}
+0 −1
Original line number Diff line number Diff line
@@ -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);

+6 −0
Original line number Diff line number Diff line
@@ -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);