From: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
To: linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Cc: niklas.soderlund-1zkq55x86MTxsAP9Fp7wbw@public.gmane.org,
robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org,
laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org,
linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
mika.westerberg-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
pavel-+ZI9xUNit7I@public.gmane.org,
sre-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org
Subject: [PATCH v10 18/24] v4l: fwnode: Add a helper function to obtain device / interger references
Date: Mon, 11 Sep 2017 11:00:02 +0300 [thread overview]
Message-ID: <20170911080008.21208-19-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20170911080008.21208-1-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
v4l2_fwnode_reference_parse_int_prop() will find an fwnode such that under
the device's own fwnode, it will follow child fwnodes with the given
property -- value pair and return the resulting fwnode.
Signed-off-by: Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
---
drivers/media/v4l2-core/v4l2-fwnode.c | 93 +++++++++++++++++++++++++++++++++++
1 file changed, 93 insertions(+)
diff --git a/drivers/media/v4l2-core/v4l2-fwnode.c b/drivers/media/v4l2-core/v4l2-fwnode.c
index 4821c4989119..56eee5bbd3b5 100644
--- a/drivers/media/v4l2-core/v4l2-fwnode.c
+++ b/drivers/media/v4l2-core/v4l2-fwnode.c
@@ -496,6 +496,99 @@ static int v4l2_fwnode_reference_parse(
return ret;
}
+static struct fwnode_handle *v4l2_fwnode_reference_get_int_prop(
+ struct fwnode_handle *fwnode, const char *prop, unsigned int index,
+ const char **props, unsigned int nprops)
+{
+ struct fwnode_reference_args fwnode_args;
+ unsigned int *args = fwnode_args.args;
+ struct fwnode_handle *child;
+ int ret;
+
+ ret = fwnode_property_get_reference_args(fwnode, prop, NULL, nprops,
+ index, &fwnode_args);
+ if (ret)
+ return ERR_PTR(ret == -EINVAL ? -ENOENT : ret);
+
+ for (fwnode = fwnode_args.fwnode;
+ nprops; nprops--, fwnode = child, props++, args++) {
+ u32 val;
+
+ fwnode_for_each_child_node(fwnode, child) {
+ if (fwnode_property_read_u32(child, *props, &val))
+ continue;
+
+ if (val == *args)
+ break;
+ }
+
+ fwnode_handle_put(fwnode);
+
+ if (!child) {
+ fwnode = ERR_PTR(-ENOENT);
+ break;
+ }
+ }
+
+ return fwnode;
+}
+
+static int v4l2_fwnode_reference_parse_int_props(
+ struct device *dev, struct v4l2_async_notifier *notifier,
+ const char *prop, const char **props, unsigned int nprops)
+{
+ struct fwnode_handle *fwnode;
+ unsigned int index = 0;
+ int ret;
+
+ while (!IS_ERR((fwnode = v4l2_fwnode_reference_get_int_prop(
+ dev_fwnode(dev), prop, index, props,
+ nprops)))) {
+ fwnode_handle_put(fwnode);
+ index++;
+ }
+
+ if (PTR_ERR(fwnode) != -ENOENT)
+ return PTR_ERR(fwnode);
+
+ ret = v4l2_async_notifier_realloc(notifier,
+ notifier->num_subdevs + index);
+ if (ret)
+ return -ENOMEM;
+
+ for (index = 0; !IS_ERR((fwnode = v4l2_fwnode_reference_get_int_prop(
+ dev_fwnode(dev), prop, index, props,
+ nprops))); ) {
+ struct v4l2_async_subdev *asd;
+
+ if (WARN_ON(notifier->num_subdevs >= notifier->max_subdevs)) {
+ ret = -EINVAL;
+ goto error;
+ }
+
+ asd = kzalloc(sizeof(struct v4l2_async_subdev), GFP_KERNEL);
+ if (!asd) {
+ ret = -ENOMEM;
+ goto error;
+ }
+
+ notifier->subdevs[notifier->num_subdevs] = asd;
+ asd->match.fwnode.fwnode = fwnode;
+ asd->match_type = V4L2_ASYNC_MATCH_FWNODE;
+ notifier->num_subdevs++;
+
+ fwnode_handle_put(fwnode);
+
+ index++;
+ }
+
+ return PTR_ERR(fwnode) == -ENOENT ? 0 : PTR_ERR(fwnode);
+
+error:
+ fwnode_handle_put(fwnode);
+ return ret;
+}
+
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Sakari Ailus <sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>");
MODULE_AUTHOR("Sylwester Nawrocki <s.nawrocki-Sze3O3UU22JBDgjK7y7TUQ@public.gmane.org>");
--
2.11.0
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2017-09-11 8:00 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-11 7:59 [PATCH v10 00/24] Unified fwnode endpoint parser, async sub-device notifier support, N9 flash DTS Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 01/24] v4l: fwnode: Move KernelDoc documentation to the header Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 02/24] v4l: async: Remove re-probing support Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 03/24] v4l: async: Use more intuitive names for internal functions Sakari Ailus
[not found] ` <20170911080008.21208-1-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-11 7:59 ` [PATCH v10 04/24] v4l: async: Add V4L2 async documentation to the documentation build Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 06/24] omap3isp: Use generic parser for parsing fwnode endpoints Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 07/24] rcar-vin: " Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 10/24] v4l: async: Move async subdev notifier operations to a separate structure Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 13/24] v4l: async: Allow async notifier register call succeed with no subdevs Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 14/24] v4l: async: Allow binding notifiers to sub-devices Sakari Ailus
2017-09-11 8:57 ` Hans Verkuil
2017-09-11 9:30 ` Sakari Ailus
2017-09-11 8:00 ` [PATCH v10 17/24] v4l: fwnode: Add a helper function for parsing generic references Sakari Ailus
2017-09-11 9:14 ` Hans Verkuil
2017-09-11 9:59 ` Sakari Ailus
2017-09-11 8:00 ` Sakari Ailus [this message]
2017-09-11 9:38 ` [PATCH v10 18/24] v4l: fwnode: Add a helper function to obtain device / interger references Hans Verkuil
2017-09-11 12:28 ` Sakari Ailus
2017-09-11 12:38 ` Hans Verkuil
2017-09-11 13:27 ` Sakari Ailus
2017-09-11 13:34 ` Hans Verkuil
2017-09-11 14:12 ` Sakari Ailus
2017-09-11 8:00 ` [PATCH v10 21/24] smiapp: Add support for flash and lens devices Sakari Ailus
2017-09-11 9:48 ` Hans Verkuil
2017-09-11 7:59 ` [PATCH v10 05/24] v4l: fwnode: Support generic parsing of graph endpoints in a device Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 08/24] omap3isp: Fix check for our own sub-devices Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 09/24] omap3isp: Print the name of the entity where no source pads could be found Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 11/24] v4l: async: Introduce helpers for calling async ops callbacks Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 12/24] v4l: async: Register sub-devices before calling bound callback Sakari Ailus
2017-09-11 7:59 ` [PATCH v10 15/24] dt: bindings: Add a binding for flash LED devices associated to a sensor Sakari Ailus
2017-09-11 8:00 ` [PATCH v10 16/24] dt: bindings: Add lens-focus binding for image sensors Sakari Ailus
2017-09-11 8:00 ` [PATCH v10 19/24] v4l: fwnode: Add convenience function for parsing common external refs Sakari Ailus
2017-09-11 9:47 ` Hans Verkuil
2017-09-11 11:06 ` Sakari Ailus
2017-09-11 11:17 ` Pavel Machek
2017-09-11 14:15 ` Sakari Ailus
2017-09-11 8:00 ` [PATCH v10 20/24] dt: bindings: smiapp: Document lens-focus and flash properties Sakari Ailus
[not found] ` <20170911080008.21208-21-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-11 9:40 ` Hans Verkuil
2017-09-11 11:11 ` Pavel Machek
2017-09-18 21:00 ` Rob Herring
2017-09-18 21:56 ` Sakari Ailus
[not found] ` <ef8edab3-5b55-c298-2a40-72b5e22586ea-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-19 20:00 ` Rob Herring
[not found] ` <CAL_Jsq+YKSDn7Hoq-2wRsGyGRbQvNPEVXrj13bSNCqQpKE2CvQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2017-09-28 21:02 ` Sakari Ailus
2017-09-11 8:00 ` [PATCH v10 22/24] ov5670: Add support for flash and lens devices Sakari Ailus
[not found] ` <20170911080008.21208-23-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-11 9:49 ` Hans Verkuil
2017-09-11 8:00 ` [PATCH v10 23/24] ov13858: " Sakari Ailus
2017-09-11 9:49 ` Hans Verkuil
2017-09-11 8:00 ` [PATCH v10 24/24] arm: dts: omap3: N9/N950: Add flash references to the camera Sakari Ailus
[not found] ` <20170911080008.21208-25-sakari.ailus-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>
2017-09-11 9:50 ` Hans Verkuil
2017-09-11 11:12 ` Pavel Machek
2017-10-03 0:04 ` [PATCH v10 00/24] Unified fwnode endpoint parser, async sub-device notifier support, N9 flash DTS Rafael J. Wysocki
2017-10-04 12:45 ` Sakari Ailus
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=20170911080008.21208-19-sakari.ailus@linux.intel.com \
--to=sakari.ailus-vuqaysv1563yd54fqh9/ca@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=hverkuil-qWit8jRvyhVmR6Xm/wNWPw@public.gmane.org \
--cc=laurent.pinchart-ryLnwIuWjnjg/C1BVhZhaw@public.gmane.org \
--cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-media-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mika.westerberg-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
--cc=niklas.soderlund-1zkq55x86MTxsAP9Fp7wbw@public.gmane.org \
--cc=pavel-+ZI9xUNit7I@public.gmane.org \
--cc=robh-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=sre-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
/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