lkml.org 
[lkml]   [2023]   [Jan]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v1 2/3] ACPI: utils: Add acpi_get_first_match_physical_node()
    Date
    There are drivers that are using a logic that is combined in the offered
    acpi_get_first_match_physical_node(). The rationale to have this helper
    not only redunction of the lines of code, but improving the robustness
    by properly handling the reference counters on the error paths.

    Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
    ---
    drivers/acpi/utils.c | 28 ++++++++++++++++++++++++++++
    include/acpi/acpi_bus.h | 3 +++
    include/linux/acpi.h | 6 ++++++
    3 files changed, 37 insertions(+)

    diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
    index 2ea14648a661..052e263d2246 100644
    --- a/drivers/acpi/utils.c
    +++ b/drivers/acpi/utils.c
    @@ -965,6 +965,34 @@ acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
    }
    EXPORT_SYMBOL(acpi_dev_get_first_match_dev);

    +/**
    + * acpi_get_first_match_physical_node - Return the physical node of the first match of ACPI device
    + * @hid: Hardware ID of the device.
    + * @uid: Unique ID of the device, pass NULL to not check _UID
    + * @hrv: Hardware Revision of the device, pass -1 to not check _HRV
    + *
    + * Return the physical node of the first match of ACPI device if a matching
    + * device was present at the moment of invocation, or NULL otherwise.
    + *
    + * The caller is responsible for invoking put_device() on the returned device.
    + *
    + * See additional information in acpi_dev_present() as well.
    + */
    +struct device *acpi_get_first_match_physical_node(const char *hid, const char *uid, s64 hrv)
    +{
    + struct acpi_device *adev;
    + struct device *dev;
    +
    + adev = acpi_dev_get_first_match_dev(hid, uid, hrv);
    + if (!adev)
    + return NULL;
    +
    + dev = get_device(acpi_get_first_physical_node(adev));
    + acpi_dev_put(adev);
    + return dev;
    +}
    +EXPORT_SYMBOL(acpi_get_first_match_physical_node);
    +
    /**
    * acpi_reduced_hardware - Return if this is an ACPI-reduced-hw machine
    *
    diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
    index 0584e9f6e339..e62af2f71362 100644
    --- a/include/acpi/acpi_bus.h
    +++ b/include/acpi/acpi_bus.h
    @@ -777,6 +777,9 @@ acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv);
    adev; \
    adev = acpi_dev_get_next_match_dev(adev, hid, uid, hrv))

    +struct device *
    +acpi_get_first_match_physical_node(const char *hid, const char *uid, s64 hrv);
    +
    static inline struct acpi_device *acpi_dev_get(struct acpi_device *adev)
    {
    return adev ? to_acpi_device(get_device(&adev->dev)) : NULL;
    diff --git a/include/linux/acpi.h b/include/linux/acpi.h
    index 4b12dad5a8a4..29bae77d819a 100644
    --- a/include/linux/acpi.h
    +++ b/include/linux/acpi.h
    @@ -814,6 +814,12 @@ acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
    return NULL;
    }

    +static inline struct device *
    +acpi_get_first_match_physical_node(const char *hid, const char *uid, s64 hrv)
    +{
    + return NULL;
    +}
    +
    static inline bool acpi_reduced_hardware(void)
    {
    return false;
    --
    2.39.0
    \
     
     \ /
      Last update: 2023-03-26 23:52    [W:3.904 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site