iio: ak8975: Fix calculation formula and add device name
cover iio: ak8975: Fix calculation formula and add device name
Three months ago Lars-Peter revised description of device driver[1].
Correctly, device's sensitivity is 0.3 uT/LSB typ and One micro tesla equal 0.01 gauss[2]. So I have fixed calculation formula,And then add RAW_TO_GAUSS macro.
Scale are returned as VAL_INT_PLUS_MICRO.
Additionally, I have add device name.
Tested on exynos4412 board, with following result:
-sh-4.1# cat name
ak8975
-sh-4.1# cat in_magn_x_raw
80
-sh-4.1# cat in_magn_x_scale
0.003609
Calculate the result 80 x 0.003609 = 0.28872 Gauss. 0.28872 G equal 288.72 mG
I think this magnitude value is proper level[3].
[1] http://marc.info/?l=linux-iio&m=138220306822747&w=2
[2] http://en.wikipedia.org/wiki/Gauss_(unit)
[3] http://en.wikipedia.org/wiki/Orders_of_magnitude_(magnetic_field)
Beomho Seo (2):
iio: ak8975: Fix calculation formula for microtesla to gauss unit
iio: ak8975: Add device name
drivers/iio/magnetometer/ak8975.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-)
Signature · 1 line
Best Regards,
Hello,
Quoted 1 line
Three months ago Lars-Peter revised description of device driver[1].
me, not Lars-Peter
Quoted 4 lines
Correctly, device's sensitivity is 0.3 uT/LSB typ and One micro tesla equal 0.01 gauss[2]. So I have fixed calculation formula,And then add
RAW_TO_GAUSSmacro.
Scale are returned asVAL_INT_PLUS_MICRO.
Additionally, I have add device name.
+#define RAW_TO_GAUSS(asa) ((((asa) + 128) * 3000) / 256)
*
* Since 1uT = 0.01 gauss, our final scale factor becomes:
*
- * Hadj = H * ((ASA + 128) / 256) * 3/10 * 100
- * Hadj = H * ((ASA + 128) * 30 / 256
+ * Hadj = H * ((ASA + 128) / 256) * 3/10 * 1/100
+ * Hadj = H * ((ASA + 128) * 0.003) / 256
*
* Since ASA doesn't change, we cache the resultant scale factor into the
* device context in ak8975_setup().
*/
- data->raw_to_gauss[0] = ((data->asa[0] + 128) * 30) >> 8;
+ data->raw_to_gauss[0] = RAW_TO_GAUSS(data->asa[0]);
thank you for following up on this; I don't have the hardware, so I didn't dare to change the driver...
the RAW_TO_GAUSS() macro doesn't match the comment Hadj = H * ... anymore
maybe put this explanation in the patch comment, not the cover letter?
regards, p.
Signature · 2 lines
Peter Meerwald +43-664-2444418 (mobile)
Quoted 6 lines · Peter Meerwald
Hello,
Quoted 1 line
Three months ago Lars-Peter revised description of device driver[1].
me, not Lars-Peter
I'm really sorry, my mistake.
Quoted 21 lines
Quoted 4 lines
Correctly, device's sensitivity is 0.3 uT/LSB typ and One micro tesla equal 0.01 gauss[2]. So I have fixed calculation formula,And then add
RAW_TO_GAUSSmacro.
Scale are returned asVAL_INT_PLUS_MICRO.
Additionally, I have add device name.(quoted diff) +4
-3+#define RAW_TO_GAUSS(asa) ((((asa) + 128) * 3000) / 256) * * Since 1uT = 0.01 gauss, our final scale factor becomes: * - * Hadj = H * ((ASA + 128) / 256) * 3/10 * 100 - * Hadj = H * ((ASA + 128) * 30 / 256 + * Hadj = H * ((ASA + 128) / 256) * 3/10 * 1/100 + * Hadj = H * ((ASA + 128) * 0.003) / 256 * * Since ASA doesn't change, we cache the resultant scale factor into the * device context in ak8975_setup(). */ - data->raw_to_gauss[0] = ((data->asa[0] + 128) * 30) >> 8; + data->raw_to_gauss[0] = RAW_TO_GAUSS(data->asa[0]);
Quoted 7 lines
thank you for following up on this; I don't have the hardware, so I didn't dare to change the driver...
the
RAW_TO_GAUSS()macro doesn't match the comment Hadj = H * ... anymoremaybe put this explanation in the patch comment, not the cover letter?
OK. I will resend explanation in the patch comment.
Quoted 2 lines
regards, p.
Signature · 4 lines
Best Regards, Beomho Seo, Assistant Engineer System S/W Lab., Software Center, Samsung Electronics