On Sat, 18 Jun 2022 02:13:13 +0200 Jakob Hauser <jahau@xxxxxxxxxxxxxx> wrote: > This is a preparation for adding YAS537 variant. > > YAS537 uses other data types on the calibration coefficients [1] than YAS530 [2] > and YAS532 [3]. > > On YAS537, at least for a4 and a7 this could matter because 8-bit unsigned data > from the register gets stored into a signed data type, therefore this should be > 8-bit as well. > > For YAS530/532, on the other hand, it doesn't seem to matter. The size of a2-a9 > and k is smaller than 8-bit at extraction, also the applied math is low. And > Cx/Cy1/Cy2, now being defined as signed 16-bit, are extracted as unsigned 8-bit > and undergo only minor math. Ok. If this is harmless to existing drivers fair enough, though my personal inclination would have been to take the easier approach of making the new variant sign extend on variable load (sign_extend_32() and similar) just so we didn't need to check the older parts weren't affected. Thanks, Jonathan > > [1] https://github.com/msm8916-mainline/android_kernel_qcom_msm8916/blob/GT-I9195I/drivers/iio/magnetometer/yas_mag_drv-yas537.c#L76-L78 > [2] https://github.com/NovaFusion/android_kernel_samsung_golden/blob/cm-12.1/drivers/sensor/compass/yas_mag_driver-yas530.c#L526-L527 > [3] https://github.com/msm8916-mainline/android_kernel_qcom_msm8916/blob/GT-I9195I/drivers/iio/magnetometer/yas_mag_drv-yas532.c#L76-L77 > > Cc: Linus Walleij <linus.walleij@xxxxxxxxxx> > Signed-off-by: Jakob Hauser <jahau@xxxxxxxxxxxxxx> > Reviewed-by: Linus Walleij <linus.walleij@xxxxxxxxxx> > Reviewed-by: Andy Shevchenko <andy.shevchenko@xxxxxxxxx> > --- > drivers/iio/magnetometer/yamaha-yas530.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/iio/magnetometer/yamaha-yas530.c b/drivers/iio/magnetometer/yamaha-yas530.c > index 9b45a550f31e..c6f5f25793c4 100644 > --- a/drivers/iio/magnetometer/yamaha-yas530.c > +++ b/drivers/iio/magnetometer/yamaha-yas530.c > @@ -103,9 +103,11 @@ struct yas5xx_calibration { > s32 r[3]; > u32 f[3]; > /* Temperature compensation calibration */ > - s32 Cx, Cy1, Cy2; > + s16 Cx, Cy1, Cy2; > /* Misc calibration coefficients */ > - s32 a2, a3, a4, a5, a6, a7, a8, a9, k; > + s8 a2, a3, a4, a6, a7, a8; > + s16 a5, a9; > + u8 k; > /* clock divider */ > u8 dck; > };