From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Daniel Scally <djrscally@gmail.com>
Cc: linux-kernel@vger.kernel.org, linux-acpi@vger.kernel.org,
linux-media@vger.kernel.org, devel@acpica.org,
gregkh@linuxfoundation.org, rjw@rjwysocki.net,
sergey.senozhatsky@gmail.com, mchehab@kernel.org,
lenb@kernel.org, yong.zhi@intel.com,
sakari.ailus@linux.intel.com, bingbu.cao@intel.com,
tian.shu.qiu@intel.com, robert.moore@intel.com,
erik.kaneda@intel.com, pmladek@suse.com, rostedt@goodmis.org,
linux@rasmusvillemoes.dk,
laurent.pinchart+renesas@ideasonboard.com,
jacopo+renesas@jmondi.org,
kieran.bingham+renesas@ideasonboard.com,
hverkuil-cisco@xs4all.nl, m.felsch@pengutronix.de,
niklas.soderlund+renesas@ragnatech.se, slongerbeam@gmail.com,
heikki.krogerus@linux.intel.com, linus.walleij@linaro.org
Subject: Re: [PATCH v4 13/15] acpi: Add acpi_dev_get_next_match_dev() and helper macro
Date: Mon, 4 Jan 2021 14:42:28 +0200 [thread overview]
Message-ID: <20210104124228.GU4077@smile.fi.intel.com> (raw)
In-Reply-To: <20210103231235.792999-14-djrscally@gmail.com>
On Sun, Jan 03, 2021 at 11:12:33PM +0000, Daniel Scally wrote:
> To ensure we handle situations in which multiple sensors of the same
> model (and therefore _HID) are present in a system, we need to be able
> to iterate over devices matching a known _HID but unknown _UID and _HRV
> - add acpi_dev_get_next_match_dev() to accommodate that possibility and
> change acpi_dev_get_first_match_dev() to simply call the new function
> with a NULL starting point. Add an iterator macro for convenience.
I guess we need Rafael's blessing on this.
> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Signed-off-by: Daniel Scally <djrscally@gmail.com>
> ---
> Changes in v4:
>
> - None
>
> drivers/acpi/utils.c | 30 ++++++++++++++++++++++++++----
> include/acpi/acpi_bus.h | 7 +++++++
> 2 files changed, 33 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
> index d5411a166685..ddca1550cce6 100644
> --- a/drivers/acpi/utils.c
> +++ b/drivers/acpi/utils.c
> @@ -843,12 +843,13 @@ bool acpi_dev_present(const char *hid, const char *uid, s64 hrv)
> EXPORT_SYMBOL(acpi_dev_present);
>
> /**
> - * acpi_dev_get_first_match_dev - Return the first match of ACPI device
> + * acpi_dev_get_next_match_dev - Return the next match of ACPI device
> + * @adev: Pointer to the previous acpi_device matching this @hid, @uid and @hrv
> * @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 first match of ACPI device if a matching device was present
> + * Return the next match of ACPI device if another matching device was present
> * at the moment of invocation, or NULL otherwise.
> *
> * The caller is responsible to call put_device() on the returned device.
> @@ -856,8 +857,9 @@ EXPORT_SYMBOL(acpi_dev_present);
> * See additional information in acpi_dev_present() as well.
> */
> struct acpi_device *
> -acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
> +acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv)
> {
> + struct device *start = adev ? &adev->dev : NULL;
> struct acpi_dev_match_info match = {};
> struct device *dev;
>
> @@ -865,9 +867,29 @@ acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
> match.uid = uid;
> match.hrv = hrv;
>
> - dev = bus_find_device(&acpi_bus_type, NULL, &match, acpi_dev_match_cb);
> + dev = bus_find_device(&acpi_bus_type, start, &match, acpi_dev_match_cb);
> return dev ? to_acpi_device(dev) : NULL;
> }
> +EXPORT_SYMBOL(acpi_dev_get_next_match_dev);
> +
> +/**
> + * acpi_dev_get_first_match_dev - Return 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 first match of ACPI device if a matching device was present
> + * at the moment of invocation, or NULL otherwise.
> + *
> + * The caller is responsible to call put_device() on the returned device.
> + *
> + * See additional information in acpi_dev_present() as well.
> + */
> +struct acpi_device *
> +acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv)
> +{
> + return acpi_dev_get_next_match_dev(NULL, hid, uid, hrv);
> +}
> EXPORT_SYMBOL(acpi_dev_get_first_match_dev);
>
> /*
> diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
> index a3abcc4b7d9f..0a028ba967d3 100644
> --- a/include/acpi/acpi_bus.h
> +++ b/include/acpi/acpi_bus.h
> @@ -688,9 +688,16 @@ static inline bool acpi_device_can_poweroff(struct acpi_device *adev)
>
> bool acpi_dev_hid_uid_match(struct acpi_device *adev, const char *hid2, const char *uid2);
>
> +struct acpi_device *
> +acpi_dev_get_next_match_dev(struct acpi_device *adev, const char *hid, const char *uid, s64 hrv);
> struct acpi_device *
> acpi_dev_get_first_match_dev(const char *hid, const char *uid, s64 hrv);
>
> +#define for_each_acpi_dev_match(adev, hid, uid, hrv) \
> + for (adev = acpi_dev_get_first_match_dev(hid, uid, hrv); \
> + adev; \
> + adev = acpi_dev_get_next_match_dev(adev, hid, uid, hrv))
> +
> static inline void acpi_dev_put(struct acpi_device *adev)
> {
> put_device(&adev->dev);
> --
> 2.25.1
>
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2021-01-04 12:43 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-03 23:12 [PATCH v4 00/15] Add functionality to ipu3-cio2 driver allowing software_node connections to sensors on platforms designed for Windows Daniel Scally
2021-01-03 23:12 ` [PATCH v4 01/15] software_node: Fix refcounts in software_node_get_next_child() Daniel Scally
2021-01-03 23:12 ` [PATCH v4 02/15] media: ipu3-cio2: Add headers that ipu3-cio2.h is direct user of Daniel Scally
2021-01-03 23:12 ` [PATCH v4 03/15] property: Return true in fwnode_device_is_available for NULL ops Daniel Scally
2021-01-03 23:12 ` [PATCH v4 04/15] property: Call fwnode_graph_get_endpoint_by_id() for fwnode->secondary Daniel Scally
2021-01-03 23:12 ` [PATCH v4 05/15] software_node: Enforce parent before child ordering of nodes arrays Daniel Scally
2021-01-03 23:12 ` [PATCH v4 06/15] software_node: unregister software_nodes in reverse order Daniel Scally
2021-01-03 23:12 ` [PATCH v4 07/15] include: fwnode.h: Define format macros for ports and endpoints Daniel Scally
2021-01-04 14:24 ` Andy Shevchenko
2021-01-04 14:25 ` Daniel Scally
2021-01-03 23:12 ` [PATCH v4 08/15] software_node: Add support for fwnode_graph*() family of functions Daniel Scally
2021-01-04 10:22 ` Andy Shevchenko
2021-01-04 10:35 ` Daniel Scally
2021-01-03 23:12 ` [PATCH v4 09/15] lib/test_printf.c: Use helper function to unwind array of software_nodes Daniel Scally
2021-01-03 23:12 ` [PATCH v4 10/15] ipu3-cio2: Add T: entry to MAINTAINERS Daniel Scally
2021-01-03 23:12 ` [PATCH v4 11/15] ipu3-cio2: Rename ipu3-cio2.c Daniel Scally
2021-01-03 23:12 ` [PATCH v4 12/15] media: v4l2-core: v4l2-async: Check sd->fwnode->secondary in match_fwnode() Daniel Scally
2021-01-03 23:12 ` [PATCH v4 13/15] acpi: Add acpi_dev_get_next_match_dev() and helper macro Daniel Scally
2021-01-04 12:42 ` Andy Shevchenko [this message]
2021-01-04 12:57 ` Daniel Scally
2021-01-04 14:26 ` Andy Shevchenko
2021-01-03 23:12 ` [PATCH v4 14/15] include: media: v4l2-fwnode: Include v4l2_fwnode_bus_type Daniel Scally
2021-01-04 14:22 ` Andy Shevchenko
2021-01-03 23:12 ` [PATCH v4 15/15] ipu3-cio2: Add cio2-bridge to ipu3-cio2 driver Daniel Scally
2021-01-04 12:09 ` Andy Shevchenko
2021-01-04 13:00 ` Daniel Scally
2021-01-04 13:38 ` Andy Shevchenko
2021-01-04 13:56 ` Daniel Scally
2021-01-04 13:35 ` Kieran Bingham
2021-01-04 13:55 ` Daniel Scally
2021-01-04 14:12 ` Andy Shevchenko
2021-01-04 15:13 ` Kieran Bingham
2021-01-04 15:31 ` Daniel Scally
2021-01-04 16:13 ` Kieran Bingham
2021-01-04 22:02 ` Daniel Scally
2021-01-05 6:55 ` Kieran Bingham
2021-01-05 8:22 ` Daniel Scally
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210104124228.GU4077@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=bingbu.cao@intel.com \
--cc=devel@acpica.org \
--cc=djrscally@gmail.com \
--cc=erik.kaneda@intel.com \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=hverkuil-cisco@xs4all.nl \
--cc=jacopo+renesas@jmondi.org \
--cc=kieran.bingham+renesas@ideasonboard.com \
--cc=laurent.pinchart+renesas@ideasonboard.com \
--cc=lenb@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=m.felsch@pengutronix.de \
--cc=mchehab@kernel.org \
--cc=niklas.soderlund+renesas@ragnatech.se \
--cc=pmladek@suse.com \
--cc=rjw@rjwysocki.net \
--cc=robert.moore@intel.com \
--cc=rostedt@goodmis.org \
--cc=sakari.ailus@linux.intel.com \
--cc=sergey.senozhatsky@gmail.com \
--cc=slongerbeam@gmail.com \
--cc=tian.shu.qiu@intel.com \
--cc=yong.zhi@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox