Re: [PATCH v5 5/5] iio: pressure: bmp280: Add more tunable config parameters for BMP380
From: Jonathan Cameron
Date: Thu Sep 15 2022 - 09:33:29 EST
On Mon, 12 Sep 2022 02:53:06 +0200
Angel Iglesias <ang.iglesiasg@xxxxxxxxx> wrote:
> On Mon, 2022-08-08 at 11:13 +0200, Andy Shevchenko wrote:
> > On Sun, Aug 7, 2022 at 2:44 PM Angel Iglesias <ang.iglesiasg@xxxxxxxxx> wrote:
> > >
> > > Allows sampling frequency and IIR filter coefficients configuration
> > > using sysfs ABI.
> > >
> > > The IIR filter coefficient is configurable using the sysfs attribute
> > > "filter_low_pass_3db_frequency".
> >
> > ...
> >
> > > +static const int bmp380_odr_table[][2] = {
> >
> > s32_fract ?
>
> I modeled this bit and other ODR representations after the adxl355 driver. I see
> that s32_fract would be a bit cleaner than having arrays inside arrays, but I'm
> failing to see which additional advantages would provide.
> Also, technically, these are precomputed frequencies, the first index is the
> integer part and the second is the fractional part. The fractions would be
> 200/1, 200/2, 200/4 ... 200/131072
>
Agreed. Don't use s32_fract for this. It would be misleading.
Jonathan
> > > + [BMP380_ODR_200HZ] = {200, 0},
> > > + [BMP380_ODR_100HZ] = {100, 0},
> > > + [BMP380_ODR_50HZ] = {50, 0},
> > > + [BMP380_ODR_25HZ] = {25, 0},
> > > + [BMP380_ODR_12_5HZ] = {12, 500000},
> > > + [BMP380_ODR_6_25HZ] = {6, 250000},
> > > + [BMP380_ODR_3_125HZ] = {3, 125000},
> > > + [BMP380_ODR_1_5625HZ] = {1, 562500},
> > > + [BMP380_ODR_0_78HZ] = {0, 781250},
> > > + [BMP380_ODR_0_39HZ] = {0, 390625},
> > > + [BMP380_ODR_0_2HZ] = {0, 195313},
> > > + [BMP380_ODR_0_1HZ] = {0, 97656},
> > > + [BMP380_ODR_0_05HZ] = {0, 48828},
> > > + [BMP380_ODR_0_02HZ] = {0, 24414},
> > > + [BMP380_ODR_0_01HZ] = {0, 12207},
> > > + [BMP380_ODR_0_006HZ] = {0, 6104},
> > > + [BMP380_ODR_0_003HZ] = {0, 3052},
> > > + [BMP380_ODR_0_0015HZ] = {0, 1526},
> > > +};
> >
> > ...
> >
> > > + ret = regmap_write_bits(data->regmap,
> > > BMP380_REG_POWER_CONTROL,
> > > + BMP380_MODE_MASK,
> >
> > > + FIELD_PREP(BMP380_MODE_MASK,
> > > + BMP380_MODE_SLEEP));
> >
> > One line?
> >
> > ...
> >
> > > + ret = regmap_write_bits(data->regmap,
> > > BMP380_REG_POWER_CONTROL,
> > > + BMP380_MODE_MASK,
> >
> > > + FIELD_PREP(BMP380_MODE_MASK,
> > > + BMP380_MODE_NORMAL));
> >
> > Ditto.
> >
> > ...
> >
> > > +static const int bmp380_iir_filter_coeffs_avail[] = { 0, 1, 3, 7, 15, 31,
> > > 63, 127 };
> >
> > This seems like a power of two - 1, can it be replaced by a formula in the
> > code?
> >
>