From: Alexandru Ardelean <aardelean@deviqon.com>
To: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-doc@vger.kernel.org
Cc: jic23@kernel.org, hdegoede@redhat.com, wens@csie.org,
andriy.shevchenko@linux.intel.com,
Alexandru Ardelean <aardelean@deviqon.com>
Subject: [PATCH 1/5] iio: inkern: introduce devm_iio_map_array_register() short-hand function
Date: Fri, 3 Sep 2021 10:29:13 +0300 [thread overview]
Message-ID: <20210903072917.45769-2-aardelean@deviqon.com> (raw)
In-Reply-To: <20210903072917.45769-1-aardelean@deviqon.com>
This change introduces a device-managed variant to the
iio_map_array_register() function. It's a simple implementation of calling
iio_map_array_register() and registering a callback to
iio_map_array_unregister() with the devm_add_action_or_reset().
The function uses an explicit 'dev' parameter to bind the unwinding to. It
could have been implemented to implicitly use the parent of the IIO device,
however it shouldn't be too expensive to callers to just specify to which
device object to bind this unwind call.
It would make the API a bit more flexible.
Signed-off-by: Alexandru Ardelean <aardelean@deviqon.com>
---
.../driver-api/driver-model/devres.rst | 1 +
drivers/iio/inkern.c | 17 +++++++++++++++++
include/linux/iio/driver.h | 14 ++++++++++++++
3 files changed, 32 insertions(+)
diff --git a/Documentation/driver-api/driver-model/devres.rst b/Documentation/driver-api/driver-model/devres.rst
index 650096523f4f..148e19381b79 100644
--- a/Documentation/driver-api/driver-model/devres.rst
+++ b/Documentation/driver-api/driver-model/devres.rst
@@ -287,6 +287,7 @@ IIO
devm_iio_device_register()
devm_iio_dmaengine_buffer_setup()
devm_iio_kfifo_buffer_setup()
+ devm_iio_map_array_register()
devm_iio_triggered_buffer_setup()
devm_iio_trigger_alloc()
devm_iio_trigger_register()
diff --git a/drivers/iio/inkern.c b/drivers/iio/inkern.c
index 391a3380a1d1..0222885b334c 100644
--- a/drivers/iio/inkern.c
+++ b/drivers/iio/inkern.c
@@ -85,6 +85,23 @@ int iio_map_array_unregister(struct iio_dev *indio_dev)
}
EXPORT_SYMBOL_GPL(iio_map_array_unregister);
+static void iio_map_array_unregister_cb(void *indio_dev)
+{
+ iio_map_array_unregister(indio_dev);
+}
+
+int devm_iio_map_array_register(struct device *dev, struct iio_dev *indio_dev, struct iio_map *maps)
+{
+ int ret;
+
+ ret = iio_map_array_register(indio_dev, maps);
+ if (ret)
+ return ret;
+
+ return devm_add_action_or_reset(dev, iio_map_array_unregister_cb, indio_dev);
+}
+EXPORT_SYMBOL_GPL(devm_iio_map_array_register);
+
static const struct iio_chan_spec
*iio_chan_spec_from_name(const struct iio_dev *indio_dev, const char *name)
{
diff --git a/include/linux/iio/driver.h b/include/linux/iio/driver.h
index 36de60a5da7a..7a157ed218f6 100644
--- a/include/linux/iio/driver.h
+++ b/include/linux/iio/driver.h
@@ -8,6 +8,7 @@
#ifndef _IIO_INKERN_H_
#define _IIO_INKERN_H_
+struct device;
struct iio_dev;
struct iio_map;
@@ -26,4 +27,17 @@ int iio_map_array_register(struct iio_dev *indio_dev,
*/
int iio_map_array_unregister(struct iio_dev *indio_dev);
+/**
+ * devm_iio_map_array_register - device-managed version of iio_map_array_register
+ * @dev: Device object to which to bind the unwinding of this registration
+ * @indio_dev: Pointer to the iio_dev structure
+ * @maps: Pointer to an IIO map object which is to be registered to this IIO device
+ *
+ * This function will call iio_map_array_register() to register an IIO map object
+ * and will also hook a callback to the iio_map_array_unregister() function to
+ * handle de-registration of the IIO map object when the device's refcount goes to
+ * zero.
+ */
+int devm_iio_map_array_register(struct device *dev, struct iio_dev *indio_dev, struct iio_map *maps);
+
#endif
--
2.31.1
next prev parent reply other threads:[~2021-09-03 7:29 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-03 7:29 [PATCH 0/5] iio: device-managed conversions with devm_iio_map_array_register() Alexandru Ardelean
2021-09-03 7:29 ` Alexandru Ardelean [this message]
2021-09-03 13:40 ` [PATCH 1/5] iio: inkern: introduce devm_iio_map_array_register() short-hand function Andy Shevchenko
2021-09-03 13:56 ` Alexandru Ardelean
2021-09-05 11:08 ` Jonathan Cameron
2021-09-03 7:29 ` [PATCH 2/5] iio: adc: intel_mrfld_adc: convert probe to full device-managed Alexandru Ardelean
2021-09-03 13:22 ` Andy Shevchenko
2021-09-03 7:29 ` [PATCH 3/5] iio: adc: axp288_adc: " Alexandru Ardelean
2021-09-03 8:00 ` Hans de Goede
2021-09-03 7:29 ` [PATCH 4/5] iio: adc: lp8788_adc: convert probe to full-device managed Alexandru Ardelean
2021-09-03 7:29 ` [PATCH 5/5] iio: adc: da9150-gpadc: " Alexandru Ardelean
2021-09-26 15:20 ` [PATCH 0/5] iio: device-managed conversions with devm_iio_map_array_register() Jonathan Cameron
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=20210903072917.45769-2-aardelean@deviqon.com \
--to=aardelean@deviqon.com \
--cc=andriy.shevchenko@linux.intel.com \
--cc=hdegoede@redhat.com \
--cc=jic23@kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-iio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=wens@csie.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