Messages in this thread | | | Date | Sat, 27 May 2023 16:39:46 +0300 | From | Andy Shevchenko <> | Subject | Re: [PATCH v4 5/7] iio: accel: kionix-kx022a: Refactor driver and add chip_info structure |
| |
On Fri, May 26, 2023 at 04:30:46PM +0200, Mehdi Djait wrote: > Add the chip_info structure to the driver's private data to hold all > the device specific infos. > Refactor the kx022a driver implementation to make it more generic and > extensible.
...
> - regmap = devm_regmap_init_i2c(i2c, &kx022a_regmap); > + chip_info = device_get_match_data(&i2c->dev); > + if (!chip_info) { > + const struct i2c_device_id *id = i2c_client_get_device_id(i2c); > + chip_info = (const struct kx022a_chip_info *)id->driver_data; > + }
And if still no chip_info available?..
> + regmap = devm_regmap_init_i2c(i2c, chip_info->regmap_config); > if (IS_ERR(regmap)) > return dev_err_probe(dev, PTR_ERR(regmap), > "Failed to initialize Regmap\n");
...
> - if (val > KX022A_FIFO_LENGTH) > - val = KX022A_FIFO_LENGTH; > + if (val > data->chip_info->fifo_length) > + val = data->chip_info->fifo_length;
min()/min_t() ?
...
> + ret = regmap_noinc_read(data->regmap, data->chip_info->buf_read, > + &data->fifo_buffer[0], fifo_bytes);
data->fifo_buffer will suffice.
> if (ret) > goto renable_out;
...
> + data->fifo_buffer = kmalloc(data->chip_info->fifo_length * > + KX022A_FIFO_SAMPLES_SIZE_BYTES, GFP_KERNEL);
> +
Redundant blank line.
> + if (!data->fifo_buffer) > + return -ENOMEM;
...
> +struct kx022a_chip_info { > + const char *name; > + const struct regmap_config *regmap_config; > + const struct iio_chan_spec *channels; > + unsigned int num_channels; > + unsigned int fifo_length; > + u8 who; > + u8 id; > + u8 cntl; > + u8 cntl2; > + u8 odcntl; > + u8 buf_cntl1; > + u8 buf_cntl2; > + u8 buf_clear; > + u8 buf_status1;
Here is the gap since it's not a packed structure. Can we avoid it?
> + u16 buf_smp_lvl_mask; > + u8 buf_read; > + u8 inc1; > + u8 inc4; > + u8 inc5; > + u8 inc6; > + u8 xout_l; > +};
-- With Best Regards, Andy Shevchenko
| |