Re: [PATCH V4 3/5] iio: accel: sca3300: modified to support multi chips

From: Andy Shevchenko
Date: Mon May 09 2022 - 05:34:04 EST


On Mon, May 9, 2022 at 8:49 AM LI Qingwu
<Qing-wu.Li@xxxxxxxxxxxxxxxxxxxxxxx> wrote:
>
> The driver supports sca3300 only.
> There are some other similar chips, for instance, SCL3300.
> Prepare the way for multiple chips and additional channels.
> Modify the driver to read the device id.
> Add the tables for the corresponding id to support multiple chips.
> Add prepares for the addition of extra channels.
> Add prepares for handling the operation modes for multiple chips.

Fancy style. Utilize the entire width of the line, i.e. ~72 characters.

...

> +struct sca3300_chip_info {
> + const struct iio_chan_spec *channels;
> + u8 num_channels;
> + const unsigned long *scan_masks;
> + const int (*accel_scale)[2];
> + const int *accel_scale_map;
> + u8 num_accel_scales;
> + const int *freq_table;
> + const int *freq_map;
> + u8 num_freqs;
> + const int *avail_modes_table;
> + u8 num_avail_modes;
> + const char *name;
> + u8 chip_id;

I recommend to shuffle it in a way that u8 members go closer to each
other if possible.

Like:

const unsigned long *scan_masks;
const struct iio_chan_spec *channels;
u8 num_channels;
u8 num_accel_scales;
const int (*accel_scale)[2];
const int *accel_scale_map;

It will save a few bytes per object instance due to padding reduction.

The idea about grouping all of them also can be done despite the
comment given previously by someone.

> +};

...

> + for (i = 0; i < sca_data->chip->num_avail_modes; i++) {
> + if (sca_data->chip->avail_modes_table[i] == reg_val) {
> + *index = i;
> + return 0;
> + }
> + }
> +
> + return -EINVAL;

Can be modified to use standard pattern (return errors first), but
it's up to maintainers, because the latter requires an additional
check after the loop.

...

> + for (i = 0; i < chip->num_avail_modes; i++) {
> + if (val == chip->freq_table[chip->freq_map[i]]) {
> + if (chip->accel_scale[chip->accel_scale_map[index]] ==
> + chip->accel_scale[chip->accel_scale_map[i]])
> + return sca3300_set_op_mode(data, i);

The
if (a) {
if (b) {
...
}
}

can be replaced by

if (a && b) {
...
}

> + }
> + }
> +
> + return -EINVAL;

As per above.

--
With Best Regards,
Andy Shevchenko