All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Laxman Dewangan <ldewangan@nvidia.com>,
	corbet@lwn.net, knaack.h@gmx.de, lars@metafoo.de,
	pmeerw@pmeerw.net
Cc: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-iio@vger.kernel.org
Subject: Re: [PATCH 2/3] iio: core: Add devm_ APIs for iio_channel_{get,release}_all
Date: Sun, 17 Apr 2016 13:06:06 +0100	[thread overview]
Message-ID: <57137C2E.30702@kernel.org> (raw)
In-Reply-To: <1459938668-9180-2-git-send-email-ldewangan@nvidia.com>

On 06/04/16 11:31, Laxman Dewangan wrote:
> Some of kernel driver uses the IIO framework to get the sensor
> value via ADC or IIO HW driver. The client driver get iio channel
> by iio_channel_get_all() and release it by calling
> iio_channel_release_all().
> 
> Add resource managed version (devm_*) of these APIs so that if client
> calls the devm_iio_channel_get_all() then it need not to release it
> explicitly, it can be done by managed device framework when driver
> get un-binded.
> 
> This reduces the code in error path and also need of .remove callback in
> some cases.
> 
> Signed-off-by: Laxman Dewangan <ldewangan@nvidia.com>
Applied to the togreg branch of iio.git.  Thanks,

Jonathan
> ---
>  drivers/iio/inkern.c         | 36 ++++++++++++++++++++++++++++++++++++
>  include/linux/iio/consumer.h | 26 ++++++++++++++++++++++++++
>  2 files changed, 62 insertions(+)
> 
> diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
> index 18e623f..8c1abfe 100644
> --- a/drivers/iio/inkern.c
> +++ b/drivers/iio/inkern.c
> @@ -489,6 +489,42 @@ void iio_channel_release_all(struct iio_channel *channels)
>  }
>  EXPORT_SYMBOL_GPL(iio_channel_release_all);
>  
> +static void devm_iio_channel_free_all(struct device *dev, void *res)
> +{
> +	struct iio_channel *channels = *(struct iio_channel **)res;
> +
> +	iio_channel_release_all(channels);
> +}
> +
> +struct iio_channel *devm_iio_channel_get_all(struct device *dev)
> +{
> +	struct iio_channel **ptr, *channels;
> +
> +	ptr = devres_alloc(devm_iio_channel_free_all, sizeof(*ptr), GFP_KERNEL);
> +	if (!ptr)
> +		return ERR_PTR(-ENOMEM);
> +
> +	channels = iio_channel_get_all(dev);
> +	if (IS_ERR(channels)) {
> +		devres_free(ptr);
> +		return channels;
> +	}
> +
> +	*ptr = channels;
> +	devres_add(dev, ptr);
> +
> +	return channels;
> +}
> +EXPORT_SYMBOL_GPL(devm_iio_channel_get_all);
> +
> +void devm_iio_channel_release_all(struct device *dev,
> +				  struct iio_channel *channels)
> +{
> +	WARN_ON(devres_release(dev, devm_iio_channel_free_all,
> +			       devm_iio_channel_match, channels));
> +}
> +EXPORT_SYMBOL_GPL(devm_iio_channel_release_all);
> +
>  static int iio_channel_read(struct iio_channel *chan, int *val, int *val2,
>  	enum iio_chan_info_enum info)
>  {
> diff --git a/include/linux/iio/consumer.h b/include/linux/iio/consumer.h
> index e1e033d..3d672f7 100644
> --- a/include/linux/iio/consumer.h
> +++ b/include/linux/iio/consumer.h
> @@ -92,6 +92,32 @@ struct iio_channel *iio_channel_get_all(struct device *dev);
>   */
>  void iio_channel_release_all(struct iio_channel *chan);
>  
> +/**
> + * devm_iio_channel_get_all() - Resource managed version of
> + *				iio_channel_get_all().
> + * @dev: Pointer to consumer device.
> + *
> + * Returns a pointer to negative errno if it is not able to get the iio channel
> + * otherwise returns an array of iio_channel structures terminated with one with
> + * null iio_dev pointer.
> + *
> + * This function is used by fairly generic consumers to get all the
> + * channels registered as having this consumer.
> + *
> + * The allocated iio channels are automatically released when the device is
> + * unbounded.
> + */
> +struct iio_channel *devm_iio_channel_get_all(struct device *dev);
> +
> +/**
> + * devm_iio_channel_release_all() - Resource managed version of
> + *				    iio_channel_release_all().
> + * @dev:		Pointer to consumer device for which resource
> + *			is allocared.
> + * @chan:		Array channel to be released.
> + */
> +void devm_iio_channel_release_all(struct device *dev, struct iio_channel *chan);
> +
>  struct iio_cb_buffer;
>  /**
>   * iio_channel_get_all_cb() - register callback for triggered capture
> 


  reply	other threads:[~2016-04-17 12:06 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-06 10:31 [PATCH 1/3] iio: core: Add devm_ APIs for iio_channel_{get,release} Laxman Dewangan
2016-04-06 10:31 ` [PATCH 2/3] iio: core: Add devm_ APIs for iio_channel_{get,release}_all Laxman Dewangan
2016-04-17 12:06   ` Jonathan Cameron [this message]
2016-04-06 10:31 ` [PATCH 3/3] iio: Add resource managed APIs devm_iio_channel_{get,release) in devres Laxman Dewangan
2016-04-06 13:49 ` [PATCH 1/3] iio: core: Add devm_ APIs for iio_channel_{get,release} Daniel Baluta
2016-04-06 14:58   ` Laxman Dewangan
2016-04-10 14:05     ` Jonathan Cameron
2016-04-10 17:35       ` Laxman Dewangan
2016-04-16 13:25         ` Jonathan Cameron
2016-04-16 15:42           ` Laxman Dewangan
2016-04-10 14:08 ` Jonathan Cameron
2016-04-17 12:00 ` Jonathan Cameron
2016-04-17 16:48   ` Laxman Dewangan

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=57137C2E.30702@kernel.org \
    --to=jic23@kernel.org \
    --cc=corbet@lwn.net \
    --cc=knaack.h@gmx.de \
    --cc=lars@metafoo.de \
    --cc=ldewangan@nvidia.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-iio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pmeerw@pmeerw.net \
    /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.