Re: [PATCH] iio: adc: ad799x: use devm_iio_device_register and devm buffer setup
From: Archit Anant
Date: Sat Feb 28 2026 - 12:19:57 EST
Hi David,
On Sat, Feb 28, 2026 at 10:06 PM David Lechner <dlechner@xxxxxxxxxxxx> wrote:
>
> On 2/28/26 9:45 AM, Archit Anant wrote:
> > Convert the driver to use the device-managed versions of
> > iio_device_register() and iio_triggered_buffer_setup().
> >
> > This simplifies the error handling in ad799x_probe() by removing the
> > 'error_cleanup_ring' goto label. It also removes the need to manually
> > call iio_device_unregister() and iio_triggered_buffer_cleanup() in
> > ad799x_remove().
> >
> Since we are doing this, why not also handle the regulators and
> rx_buf so that we can drop the remove() function completely?
I completely agree that dropping the remove() function is the
ideal end state but I initially stopped short of doing that because of two
hurdles:
1. regulators: since ad799x_read_raw() needs the regulator pointers
to call regulator_get_voltage(), I couldn't simply use
devm_regulator_get_enable().
2. rx_buf: st->rx_buf is dynamically re-allocated (kfree then kmalloc)
inside ad799x_update_scan_mode() based on the scan mask. If I use
devm_kmalloc there, it would leak memory on every mask change.
To drop remove() completely, would you prefer I use devm_add_action_or_reset()
to register custom disable & free callbacks for the regulators and the
final state of rx_buf?
If that approach sounds good to you, I will gladly prepare a v2 that
eliminates the remove() function entirely.
--
Sincerely,
Archit Anant