Re: [PATCH v8 2/6] iio: Replace 'sign' field with union in struct iio_scan_type

From: Francesco Lavra

Date: Mon Mar 23 2026 - 12:30:21 EST


On Sat, 2026-03-21 at 12:22 -0500, David Lechner wrote:
> On 3/17/26 10:04 AM, Francesco Lavra wrote:
> > This field is used to differentiate between signed and unsigned
> > integers.
> > A following commit will extend its use in order to add support for non-
> > integer scan elements; therefore, replace it with a union that contains
> > a
> > more generic 'format' field. This union will be dropped when all
> > drivers
> > are changed to use the format field.
> > Opportunistically replace character literals with symbolic constants
> > that
> > represent the set of allowed values for the format field.
> >
> > Signed-off-by: Francesco Lavra <flavra@xxxxxxxxxxxx>
> > ---
> >  Documentation/driver-api/iio/buffers.rst |  4 ++--
> >  include/linux/iio/iio.h                  | 17 +++++++++++++++--
> >  2 files changed, 17 insertions(+), 4 deletions(-)
> >
> > diff --git a/Documentation/driver-api/iio/buffers.rst
> > b/Documentation/driver-api/iio/buffers.rst
> > index 63f364e862d1..e16abaf826fe 100644
> > --- a/Documentation/driver-api/iio/buffers.rst
> > +++ b/Documentation/driver-api/iio/buffers.rst
> > @@ -78,7 +78,7 @@ fields in iio_chan_spec definition::
> >     /* other members */
> >             int scan_index
> >             struct {
> > -                   char sign;
> > +                   char format;
> >                     u8 realbits;
> >                     u8 storagebits;
> >                     u8 shift;
> > @@ -98,7 +98,7 @@ following channel definition::
> >                    /* other stuff here */
> >                    .scan_index = 0,
> >                    .scan_type = {
> > -                          .sign = 's',
> > +                          .format = IIO_SCAN_FORMAT_SIGNED_INT,
> >                            .realbits = 12,
> >                            .storagebits = 16,
> >                            .shift = 4,
> > diff --git a/include/linux/iio/iio.h b/include/linux/iio/iio.h
> > index a9ecff191bd9..d48a0ab01b8d 100644
> > --- a/include/linux/iio/iio.h
> > +++ b/include/linux/iio/iio.h
> > @@ -176,9 +176,19 @@ struct iio_event_spec {
> >         unsigned long mask_shared_by_all;
> >  };
> >  
> > +/*
> > + * Format values in scan type
> > + * @IIO_SCAN_FORMAT_SIGNED_INT: Signed integer (two's complement).
> > + * @IIO_SCAN_FORMAT_UNSIGNED_INT: Unsigned integer.
> > + */
>
> We could make this proper kernel doc format with one comment per macro.

Actually, a set of related #defines can be documented with a single
comment. I see a few examples doing that in include/linux/gfp_types.h and
include/linux/fpga/fpga-mgr.h


> > +#define IIO_SCAN_FORMAT_SIGNED_INT     's'
> > +#define IIO_SCAN_FORMAT_UNSIGNED_INT   'u'
> > +