All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@iki.fi>
To: Hans Verkuil <hverkuil@xs4all.nl>
Cc: Sakari Ailus <sakari.ailus@linux.intel.com>,
	linux-media@vger.kernel.org, niklas.soderlund@ragnatech.se,
	robh@kernel.org, laurent.pinchart@ideasonboard.com,
	linux-acpi@vger.kernel.org, mika.westerberg@intel.com,
	devicetree@vger.kernel.org, pavel@ucw.cz, sre@kernel.org
Subject: Re: [PATCH v10 18/24] v4l: fwnode: Add a helper function to obtain device / interger references
Date: Mon, 11 Sep 2017 15:28:20 +0300	[thread overview]
Message-ID: <20170911122820.fkbd2rnaddiestab@valkosipuli.retiisi.org.uk> (raw)
In-Reply-To: <11c951eb-0315-0149-829e-ed73d748e783@xs4all.nl>

Hi Hans,

Thanks for the review.

On Mon, Sep 11, 2017 at 11:38:58AM +0200, Hans Verkuil wrote:
> Typo in subject: interger -> integer
> 
> On 09/11/2017 10:00 AM, Sakari Ailus wrote:
> > v4l2_fwnode_reference_parse_int_prop() will find an fwnode such that under
> > the device's own fwnode, 
> 
> Sorry, you lost me here. Which device are we talking about?

The fwnode related a struct device, in other words what dev_fwnode(dev)
gives you. This is either struct device.fwnode or struct
device.of_node.fwnode, depending on which firmware interface was used to
create the device.

I'll add a note of this.

> 
> > it will follow child fwnodes with the given
> > property -- value pair and return the resulting fwnode.
> 
> property-value pair (easier readable that way).
> 
> You only describe v4l2_fwnode_reference_parse_int_prop(), not
> v4l2_fwnode_reference_parse_int_props().

Yes, I think I changed the naming but forgot to update the commit. I'll do
that now.

> 
> > 
> > Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
> > ---
> >  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)
> 
> Need comments describing what this does.

Yes. I'll also rename it (get -> read) for consistency with the async
changes.

> 
> > +{
> > +	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);
> 
> Why map EINVAL to ENOENT? Needs a comment, either here or in the function description.

fwnode_property_get_reference_args() returns currently a little bit
different error codes in ACPI / DT. This is worth documenting there and
fixing as well.

> 
> > +
> > +	for (fwnode = fwnode_args.fwnode;
> > +	     nprops; nprops--, fwnode = child, props++, args++) {
> 
> I think you cram too much in this for-loop: fwnode, nprops, fwnode, props, args...
> It's hard to parse.

Hmm. I'm not sure if that really helps; the function is just handling each
entry in the array and related array pointers are changed accordingly. The
fwnode = child assignment is there to move to the child node. I.e. what you
need for handling the loop itself.

I can change this though if you think it really makes a difference for
better.

> 
> I would make this a 'while (nprops)' and write out all the other assignments,
> increments and decrements.
> 
> > +		u32 val;
> > +
> > +		fwnode_for_each_child_node(fwnode, child) {
> > +			if (fwnode_property_read_u32(child, *props, &val))
> > +				continue;
> > +
> > +			if (val == *args)
> > +				break;
> 
> I'm lost. This really needs comments and perhaps even an DT or ACPI example
> so you can see what exactly it is we're doing here.

I'll add comments to the code. A good example will be ACPI documentation
for LEDs, see 17th patch in v9. That will go through the linux-pm tree so
it won't be available in the same tree for a while.

> 
> > +		}
> > +
> > +		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)
> 
> Needs comments describing what this does.

Will add.

> 
> > +{
> > +	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);
> 
> Missing 'if (index == 0)'?

Yes, will add.

> 
> > +
> > +	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))); ) {
> 
> I'd add 'index++' in this for-loop. It's weird that it is missing.

Agreed, I'll move it there.

> 
> > +		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@linux.intel.com>");
> >  MODULE_AUTHOR("Sylwester Nawrocki <s.nawrocki@samsung.com>");
> > 

-- 
Regards,

Sakari Ailus
e-mail: sakari.ailus@iki.fi

  reply	other threads:[~2017-09-11 12:28 UTC|newest]

Thread overview: 68+ 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 ` 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
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
     [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     ` 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     ` Sakari Ailus
2017-09-11  7:59   ` [PATCH v10 07/24] rcar-vin: " Sakari Ailus
2017-09-11  7:59     ` 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     ` 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     ` Sakari Ailus
2017-09-11  7:59   ` [PATCH v10 14/24] v4l: async: Allow binding notifiers to sub-devices Sakari Ailus
2017-09-11  7:59     ` 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  8:00     ` Sakari Ailus
2017-09-11  9:14     ` Hans Verkuil
2017-09-11  9:59       ` Sakari Ailus
2017-09-11  8:00   ` [PATCH v10 18/24] v4l: fwnode: Add a helper function to obtain device / interger references Sakari Ailus
2017-09-11  8:00     ` Sakari Ailus
2017-09-11  9:38     ` Hans Verkuil
2017-09-11 12:28       ` Sakari Ailus [this message]
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  8:00     ` Sakari Ailus
2017-09-11  9:48     ` Hans Verkuil
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  9:40       ` Hans Verkuil
2017-09-11 11:11     ` Pavel Machek
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
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-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  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  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=20170911122820.fkbd2rnaddiestab@valkosipuli.retiisi.org.uk \
    --to=sakari.ailus@iki.fi \
    --cc=devicetree@vger.kernel.org \
    --cc=hverkuil@xs4all.nl \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=mika.westerberg@intel.com \
    --cc=niklas.soderlund@ragnatech.se \
    --cc=pavel@ucw.cz \
    --cc=robh@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=sre@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.