Message ID | 8a1fb0faedc25aa2fbf9852cf4e1d9d085675ad6.1656883851.git.jahau@rocketmail.com (mailing list archive) |
---|---|
State | Changes Requested |
Headers | show |
Series | Add support for magnetometer Yamaha YAS537 | expand |
On Mon, Jul 4, 2022 at 12:03 AM Jakob Hauser <jahau@rocketmail.com> wrote: > > This commit gathers several minor changes. > > In the device examples, "Xiaomi" is too generic, specific devices should be > listed here. E.g. Xiaomi Redmi 2 seems to have YAS537 but it's not fully clear > if this applies to all its variants. Samsung Galaxy S7 is often quoted in > conjunction with YAS537. > > Removed defines for device IDs of YAS537 and YAS539, they are not needed so far. Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > drivers/iio/magnetometer/yamaha-yas530.c | 21 +++++++++++---------- > 1 file changed, 11 insertions(+), 10 deletions(-) > > diff --git a/drivers/iio/magnetometer/yamaha-yas530.c b/drivers/iio/magnetometer/yamaha-yas530.c > index 8358d4b3d1e2..4e2f460a4efd 100644 > --- a/drivers/iio/magnetometer/yamaha-yas530.c > +++ b/drivers/iio/magnetometer/yamaha-yas530.c > @@ -10,7 +10,7 @@ > * (YAS534 is a magnetic switch, not handled) > * YAS535 MS-6C > * YAS536 MS-3W > - * YAS537 MS-3T (2015 Samsung Galaxy S6, Note 5, Xiaomi) > + * YAS537 MS-3T (2015 Samsung Galaxy S6, Note 5, Galaxy S7) > * YAS539 MS-3S (2018 Samsung Galaxy A7 SM-A750FN) > * > * Code functions found in the MPU3050 YAS530 and YAS532 drivers > @@ -93,10 +93,6 @@ > #define YAS532_DATA_OVERFLOW (BIT(YAS532_DATA_BITS) - 1) > #define YAS532_20DEGREES 390 /* Counts starting at -50 °C */ > > -/* These variant IDs are known from code dumps */ > -#define YAS537_DEVICE_ID 0x07 /* YAS537 (MS-3T) */ > -#define YAS539_DEVICE_ID 0x08 /* YAS539 (MS-3S) */ > - > /* Turn off device regulators etc after 5 seconds of inactivity */ > #define YAS5XX_AUTOSUSPEND_DELAY_MS 5000 > > @@ -323,7 +319,7 @@ static int yas530_get_measure(struct yas5xx *yas5xx, s32 *to, s32 *xo, s32 *yo, > { > struct yas5xx_calibration *c = &yas5xx->calibration; > u16 t_ref, t, x, y1, y2; > - /* These are "signed x, signed y1 etc */ > + /* These are signed x, signed y1 etc */ > s32 sx, sy1, sy2, sy, sz; > int ret; > > @@ -663,7 +659,10 @@ static int yas530_get_calibration_data(struct yas5xx *yas5xx) > return ret; > dev_dbg(yas5xx->dev, "calibration data: %16ph\n", data); > > + /* Contribute calibration data to the input pool for kernel entropy */ > add_device_randomness(data, sizeof(data)); > + > + /* Extract version */ > yas5xx->version = data[15] & GENMASK(1, 0); > > /* Extract the calibration from the bitfield */ > @@ -690,6 +689,7 @@ static int yas530_get_calibration_data(struct yas5xx *yas5xx) > c->r[0] = sign_extend32(FIELD_GET(GENMASK(28, 23), val), 5); > c->r[1] = sign_extend32(FIELD_GET(GENMASK(20, 15), val), 5); > c->r[2] = sign_extend32(FIELD_GET(GENMASK(12, 7), val), 5); > + > return 0; > } > > @@ -711,12 +711,12 @@ static int yas532_get_calibration_data(struct yas5xx *yas5xx) > dev_dbg(yas5xx->dev, "calibration data: %14ph\n", data); > > /* Sanity check, is this all zeroes? */ > - if (memchr_inv(data, 0x00, 13) == NULL) { > - if (!(data[13] & BIT(7))) > - dev_warn(yas5xx->dev, "calibration is blank!\n"); > - } > + if (!memchr_inv(data, 0x00, 13) && !(data[13] & BIT(7))) > + dev_warn(yas5xx->dev, "calibration is blank!\n"); > > + /* Contribute calibration data to the input pool for kernel entropy */ > add_device_randomness(data, sizeof(data)); > + > /* Only one bit of version info reserved here as far as we know */ > yas5xx->version = data[13] & BIT(0); > > @@ -725,6 +725,7 @@ static int yas532_get_calibration_data(struct yas5xx *yas5xx) > c->Cy1 = data[1] * 10 - 1280; > c->Cy2 = data[2] * 10 - 1280; > yas530_extract_calibration(&data[3], c); > + > /* > * Extract linearization: > * Linearization layout in the 32 bits at byte 10: > -- > 2.35.1 >
On Mon, Jul 4, 2022 at 12:03 AM Jakob Hauser <jahau@rocketmail.com> wrote: > This commit gathers several minor changes. > > In the device examples, "Xiaomi" is too generic, specific devices should be > listed here. E.g. Xiaomi Redmi 2 seems to have YAS537 but it's not fully clear > if this applies to all its variants. Samsung Galaxy S7 is often quoted in > conjunction with YAS537. > > Removed defines for device IDs of YAS537 and YAS539, they are not needed so far. > > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Yours, Linus Walleij
diff --git a/drivers/iio/magnetometer/yamaha-yas530.c b/drivers/iio/magnetometer/yamaha-yas530.c index 8358d4b3d1e2..4e2f460a4efd 100644 --- a/drivers/iio/magnetometer/yamaha-yas530.c +++ b/drivers/iio/magnetometer/yamaha-yas530.c @@ -10,7 +10,7 @@ * (YAS534 is a magnetic switch, not handled) * YAS535 MS-6C * YAS536 MS-3W - * YAS537 MS-3T (2015 Samsung Galaxy S6, Note 5, Xiaomi) + * YAS537 MS-3T (2015 Samsung Galaxy S6, Note 5, Galaxy S7) * YAS539 MS-3S (2018 Samsung Galaxy A7 SM-A750FN) * * Code functions found in the MPU3050 YAS530 and YAS532 drivers @@ -93,10 +93,6 @@ #define YAS532_DATA_OVERFLOW (BIT(YAS532_DATA_BITS) - 1) #define YAS532_20DEGREES 390 /* Counts starting at -50 °C */ -/* These variant IDs are known from code dumps */ -#define YAS537_DEVICE_ID 0x07 /* YAS537 (MS-3T) */ -#define YAS539_DEVICE_ID 0x08 /* YAS539 (MS-3S) */ - /* Turn off device regulators etc after 5 seconds of inactivity */ #define YAS5XX_AUTOSUSPEND_DELAY_MS 5000 @@ -323,7 +319,7 @@ static int yas530_get_measure(struct yas5xx *yas5xx, s32 *to, s32 *xo, s32 *yo, { struct yas5xx_calibration *c = &yas5xx->calibration; u16 t_ref, t, x, y1, y2; - /* These are "signed x, signed y1 etc */ + /* These are signed x, signed y1 etc */ s32 sx, sy1, sy2, sy, sz; int ret; @@ -663,7 +659,10 @@ static int yas530_get_calibration_data(struct yas5xx *yas5xx) return ret; dev_dbg(yas5xx->dev, "calibration data: %16ph\n", data); + /* Contribute calibration data to the input pool for kernel entropy */ add_device_randomness(data, sizeof(data)); + + /* Extract version */ yas5xx->version = data[15] & GENMASK(1, 0); /* Extract the calibration from the bitfield */ @@ -690,6 +689,7 @@ static int yas530_get_calibration_data(struct yas5xx *yas5xx) c->r[0] = sign_extend32(FIELD_GET(GENMASK(28, 23), val), 5); c->r[1] = sign_extend32(FIELD_GET(GENMASK(20, 15), val), 5); c->r[2] = sign_extend32(FIELD_GET(GENMASK(12, 7), val), 5); + return 0; } @@ -711,12 +711,12 @@ static int yas532_get_calibration_data(struct yas5xx *yas5xx) dev_dbg(yas5xx->dev, "calibration data: %14ph\n", data); /* Sanity check, is this all zeroes? */ - if (memchr_inv(data, 0x00, 13) == NULL) { - if (!(data[13] & BIT(7))) - dev_warn(yas5xx->dev, "calibration is blank!\n"); - } + if (!memchr_inv(data, 0x00, 13) && !(data[13] & BIT(7))) + dev_warn(yas5xx->dev, "calibration is blank!\n"); + /* Contribute calibration data to the input pool for kernel entropy */ add_device_randomness(data, sizeof(data)); + /* Only one bit of version info reserved here as far as we know */ yas5xx->version = data[13] & BIT(0); @@ -725,6 +725,7 @@ static int yas532_get_calibration_data(struct yas5xx *yas5xx) c->Cy1 = data[1] * 10 - 1280; c->Cy2 = data[2] * 10 - 1280; yas530_extract_calibration(&data[3], c); + /* * Extract linearization: * Linearization layout in the 32 bits at byte 10:
This commit gathers several minor changes. In the device examples, "Xiaomi" is too generic, specific devices should be listed here. E.g. Xiaomi Redmi 2 seems to have YAS537 but it's not fully clear if this applies to all its variants. Samsung Galaxy S7 is often quoted in conjunction with YAS537. Removed defines for device IDs of YAS537 and YAS539, they are not needed so far. Signed-off-by: Jakob Hauser <jahau@rocketmail.com> --- drivers/iio/magnetometer/yamaha-yas530.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-)