aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/magnetometer
diff options
context:
space:
mode:
authorJakob Hauser <jahau@rocketmail.com>2022-08-12 23:54:08 +0200
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2022-08-15 22:30:03 +0100
commit413cf691633c985c3b49d005aa07b0e9c70c14a1 (patch)
tree95030963b4963067af111a0bbd08b8a2cab54ce3 /drivers/iio/magnetometer
parentiio: magnetometer: yas530: Change range of data in volatile register (diff)
downloadlinux-dev-413cf691633c985c3b49d005aa07b0e9c70c14a1.tar.xz
linux-dev-413cf691633c985c3b49d005aa07b0e9c70c14a1.zip
iio: magnetometer: yas530: Correct scaling of magnetic axes
Looks like YAS530 raw values return picotesla and YAS532 nanotesla. Adapt comments and scaling. Signed-off-by: Jakob Hauser <jahau@rocketmail.com> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com> Link: https://lore.kernel.org/r/053ab05cb9a0f6b0536ab5e0de57009f513c6f81.1660337264.git.jahau@rocketmail.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Diffstat (limited to 'drivers/iio/magnetometer')
-rw-r--r--drivers/iio/magnetometer/yamaha-yas530.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/drivers/iio/magnetometer/yamaha-yas530.c b/drivers/iio/magnetometer/yamaha-yas530.c
index 76bff4818461..199d83013e6f 100644
--- a/drivers/iio/magnetometer/yamaha-yas530.c
+++ b/drivers/iio/magnetometer/yamaha-yas530.c
@@ -310,8 +310,6 @@ static s32 yas5xx_linearize(struct yas5xx *yas5xx, u16 val, int axis)
* @yo: Y axis out
* @zo: Z axis out
* @return: 0 on success or error code
- *
- * Returned values are in nanotesla according to some code.
*/
static int yas5xx_get_measure(struct yas5xx *yas5xx, s32 *to, s32 *xo, s32 *yo, s32 *zo)
{
@@ -417,14 +415,27 @@ static int yas5xx_read_raw(struct iio_dev *indio_dev,
*val = 1;
return IIO_VAL_INT;
}
- /*
- * The axis values are in nanotesla according to the vendor
- * drivers, but is clearly in microtesla according to
- * experiments. Since 1 uT = 0.01 Gauss, we need to divide
- * by 100000000 (10^8) to get to Gauss from the raw value.
- */
- *val = 1;
- *val2 = 100000000;
+ switch (yas5xx->devid) {
+ case YAS530_DEVICE_ID:
+ /*
+ * Raw values of YAS530 are in picotesla. Divide by
+ * 100000000 (10^8) to get Gauss.
+ */
+ *val = 1;
+ *val2 = 100000000;
+ break;
+ case YAS532_DEVICE_ID:
+ /*
+ * Raw values of YAS532 are in nanotesla. Divide by
+ * 100000 (10^5) to get Gauss.
+ */
+ *val = 1;
+ *val2 = 100000;
+ break;
+ default:
+ dev_err(yas5xx->dev, "unknown device type\n");
+ return -EINVAL;
+ }
return IIO_VAL_FRACTIONAL;
default:
/* Unknown request */