mfd: core: Use acpi_find_child_device() for child devices lookup
Use acpi_find_child_device() for child devices lookup in mfd_acpi_add_device() instead of open coded approach. No functional change intended. While at it, amend a note comment, since usage of _ADR is found on other platforms and tables than Intel Galileo Gen 2, in particular USB wired devices are using it, according to Microsoft specifications for embedded platforms. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Lee Jones <lee.jones@linaro.org>
This commit is contained in:
Родитель
6dac44c602
Коммит
40cb71f321
|
@ -65,7 +65,7 @@ static void mfd_acpi_add_device(const struct mfd_cell *cell,
|
||||||
{
|
{
|
||||||
const struct mfd_cell_acpi_match *match = cell->acpi_match;
|
const struct mfd_cell_acpi_match *match = cell->acpi_match;
|
||||||
struct acpi_device *parent, *child;
|
struct acpi_device *parent, *child;
|
||||||
struct acpi_device *adev;
|
struct acpi_device *adev = NULL;
|
||||||
|
|
||||||
parent = ACPI_COMPANION(pdev->dev.parent);
|
parent = ACPI_COMPANION(pdev->dev.parent);
|
||||||
if (!parent)
|
if (!parent)
|
||||||
|
@ -77,10 +77,9 @@ static void mfd_acpi_add_device(const struct mfd_cell *cell,
|
||||||
* _ADR or it will use the parent handle if is no ID is given.
|
* _ADR or it will use the parent handle if is no ID is given.
|
||||||
*
|
*
|
||||||
* Note that use of _ADR is a grey area in the ACPI specification,
|
* Note that use of _ADR is a grey area in the ACPI specification,
|
||||||
* though Intel Galileo Gen2 is using it to distinguish the children
|
* though at least Intel Galileo Gen 2 is using it to distinguish
|
||||||
* devices.
|
* the children devices.
|
||||||
*/
|
*/
|
||||||
adev = parent;
|
|
||||||
if (match) {
|
if (match) {
|
||||||
if (match->pnpid) {
|
if (match->pnpid) {
|
||||||
struct acpi_device_id ids[2] = {};
|
struct acpi_device_id ids[2] = {};
|
||||||
|
@ -93,22 +92,11 @@ static void mfd_acpi_add_device(const struct mfd_cell *cell,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
unsigned long long adr;
|
adev = acpi_find_child_device(parent, match->adr, false);
|
||||||
acpi_status status;
|
|
||||||
|
|
||||||
list_for_each_entry(child, &parent->children, node) {
|
|
||||||
status = acpi_evaluate_integer(child->handle,
|
|
||||||
"_ADR", NULL,
|
|
||||||
&adr);
|
|
||||||
if (ACPI_SUCCESS(status) && match->adr == adr) {
|
|
||||||
adev = child;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ACPI_COMPANION_SET(&pdev->dev, adev);
|
ACPI_COMPANION_SET(&pdev->dev, adev ?: parent);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void mfd_acpi_add_device(const struct mfd_cell *cell,
|
static inline void mfd_acpi_add_device(const struct mfd_cell *cell,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче