[PATCH v4 26/36] iio: hid-sensors: introduce device managed API
From: Sanjay Chitroda <hidden>
Date: 2026-05-24 19:28:44
Also in:
linux-iio, lkml
Subsystem:
hid sensor hub drivers, iio subsystem and drivers, the rest · Maintainers:
Jiri Kosina, Jonathan Cameron, Srinivas Pandruvada, Linus Torvalds
From: Sanjay Chitroda <redacted> hid_sensor_setup_trigger() is common API used for the HID IIO drivers, prepare devm API devm_hid_sensor_setup_trigger() to acquire resource during setup and release using device managed framework during drivers fail, unbind or remove path. Register action with devm_add_action_or_reset() to release resource with devres framework. Signed-off-by: Sanjay Chitroda <redacted> Tested-by: Zhang Lixu <lixu.zhang@intel.com> --- Changes in v4: - No updated in change, added Tested-by tag. Changes in v3: - Remove cast and update function based on review comment from Andy - v2 link -> https://lore.kernel.org/all/20260429175918.2541914-3-sanjayembedded@gmail.com/ (local) --- .../common/hid-sensors/hid-sensor-trigger.c | 18 ++++++++++++++++++ .../common/hid-sensors/hid-sensor-trigger.h | 2 ++ 2 files changed, 20 insertions(+)
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
index 98fadc61a68a..fb6a4587ae03 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.c
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.c@@ -301,6 +301,24 @@ int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name, } EXPORT_SYMBOL_NS(hid_sensor_setup_trigger, "IIO_HID"); +static void hid_sensor_remove_trigger_action(void *attrb) +{ + hid_sensor_remove_trigger(attrb); +} + +int devm_hid_sensor_setup_trigger(struct device *dev, struct iio_dev *indio_dev, + const char *name, struct hid_sensor_common *attrb) +{ + int ret; + + ret = hid_sensor_setup_trigger(indio_dev, name, attrb); + if (ret) + return ret; + + return devm_add_action_or_reset(dev, hid_sensor_remove_trigger_action, attrb); +} +EXPORT_SYMBOL_NS(devm_hid_sensor_setup_trigger, "IIO_HID"); + static int __maybe_unused hid_sensor_suspend(struct device *dev) { struct iio_dev *indio_dev = dev_get_drvdata(dev);
diff --git a/drivers/iio/common/hid-sensors/hid-sensor-trigger.h b/drivers/iio/common/hid-sensors/hid-sensor-trigger.h
index afec46ecbe71..6fd7c39a240d 100644
--- a/drivers/iio/common/hid-sensors/hid-sensor-trigger.h
+++ b/drivers/iio/common/hid-sensors/hid-sensor-trigger.h@@ -17,6 +17,8 @@ extern const struct dev_pm_ops hid_sensor_pm_ops; int hid_sensor_setup_trigger(struct iio_dev *indio_dev, const char *name, struct hid_sensor_common *attrb); void hid_sensor_remove_trigger(struct hid_sensor_common *attrb); +int devm_hid_sensor_setup_trigger(struct device *dev, struct iio_dev *indio_dev, + const char *name, struct hid_sensor_common *attrb); int hid_sensor_power_state(struct hid_sensor_common *st, bool state); #endif
--
2.34.1