Re: [PATCH v5 04/13] iio: gyro: hid-sensor-gyro-3d: convert probe and teardown to devm-managed resources

From: Jonathan Cameron

Date: Sat Aug 15 2026 - 21:36:49 EST


On Thu, 06 Aug 2026 17:55:50 +0530
Sanjay Chitroda via B4 Relay <devnull+sanjayembeddedse.gmail.com@xxxxxxxxxx> wrote:

> From: Sanjay Chitroda <sanjayembeddedse@xxxxxxxxx>
>
> Convert HID IIO driver resource management to use devm-managed helpers,
> tying the lifetime of all resources to the device.
>
> HID trigger setup, IIO registration, and sensor hub callback resource
> are now managed using devm APIs. Cleanup logic previously handled
> explicitly in probe error and teardown paths.
>
> This simplifies the probe path by removing goto-based error handling,
> eliminates the remove callback entirely.
>
> Signed-off-by: Sanjay Chitroda <sanjayembeddedse@xxxxxxxxx>
> ---
> drivers/iio/gyro/hid-sensor-gyro-3d.c | 41 ++++++++---------------------------

Nice stats - could be even better with some error printing cleanups though.
See below. I appreciate you may not want to do that in this series, but
it's simple enough I wouldn't mind, even though lots of patches result.

> 1 file changed, 9 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/iio/gyro/hid-sensor-gyro-3d.c b/drivers/iio/gyro/hid-sensor-gyro-3d.c
> index cf049700d415..66778315e86d 100644
> --- a/drivers/iio/gyro/hid-sensor-gyro-3d.c
> +++ b/drivers/iio/gyro/hid-sensor-gyro-3d.c
> @@ -264,7 +264,8 @@ static int gyro_3d_parse_report(struct platform_device *pdev,
> /* Function to initialize the processing for usage id */
> static int hid_gyro_3d_probe(struct platform_device *pdev)
> {
> - struct hid_sensor_hub_device *hsdev = dev_get_platdata(&pdev->dev);
> + struct device *dev = &pdev->dev;
> + struct hid_sensor_hub_device *hsdev = dev_get_platdata(dev);
> int ret = 0;
> static const char *name = "gyro_3d";
> struct iio_dev *indio_dev;
> @@ -311,8 +312,8 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
>
> atomic_set(&gyro_state->common_attributes.data_ready, 0);
>
> - ret = hid_sensor_setup_trigger(indio_dev, name,
> - &gyro_state->common_attributes);
> + ret = devm_hid_sensor_setup_trigger(dev, indio_dev, name,
> + &gyro_state->common_attributes);
> if (ret < 0) {
> dev_err(&pdev->dev, "trigger setup failed\n");

> return ret;
> @@ -321,38 +322,15 @@ static int hid_gyro_3d_probe(struct platform_device *pdev)
> gyro_state->callbacks.send_event = gyro_3d_proc_event;
> gyro_state->callbacks.capture_sample = gyro_3d_capture_sample;
> gyro_state->callbacks.pdev = pdev;
> - ret = sensor_hub_register_callback(hsdev, HID_USAGE_SENSOR_GYRO_3D,
> - &gyro_state->callbacks);
> + ret = devm_sensor_hub_register_callback(dev, hsdev,
> + HID_USAGE_SENSOR_GYRO_3D,
> + &gyro_state->callbacks);
> if (ret < 0) {
> dev_err(&pdev->dev, "callback reg failed\n");
Obviously makes for a larger patch set but error print cleaning up would
be nice. This patch makes that easier to do as enables
return dev_err_probe() in a few places where we didn't have direct returns before.

There are also some prints in here that should be dropped (memory
allocation failures etc).

Jonathan

> - goto error_remove_trigger;
> - }
> - iio_device_unregister(indio_dev);
> - sensor_hub_remove_callback(hsdev, HID_USAGE_SENSOR_GYRO_3D);
> - hid_sensor_remove_trigger(&gyro_state->common_attributes);
> + return devm_iio_device_register(dev, indio_dev);
> }
>
> static const struct platform_device_id hid_gyro_3d_ids[] = {
> @@ -371,7 +349,6 @@ static struct platform_driver hid_gyro_3d_platform_driver = {
> .pm = &hid_sensor_pm_ops,
> },
> .probe = hid_gyro_3d_probe,
> - .remove = hid_gyro_3d_remove,
> };
> module_platform_driver(hid_gyro_3d_platform_driver);
>
>