arm64: dts: qcom: msm8916-samsung-serranove: Add magnetometer
authorJakob Hauser <jahau@rocketmail.com>
Sun, 4 Sep 2022 21:49:35 +0000 (23:49 +0200)
committerBjorn Andersson <andersson@kernel.org>
Tue, 6 Sep 2022 14:55:31 +0000 (09:55 -0500)
Add magnetometer Yamaha YAS537 to the DeviceTree of samsung-serranove.

The YAS537 variant was recently added to the Yamaha YAS magnetometers
driver [1].

In the DeviceTree of samsung-serranove for the Android kernel, there is
unfortunately no information on interrupts or pinctrl [2].

In the Android kernel driver for magnetometer Yamaha YAS537, there is a
device-specific matrix to correct an ellipsoid shape of the measure values
into a sphere shape [3]. This could be converted and applied to a mount-matrix.
However, the current state of the mainline Yamaha YAS537 driver needs
post-process calibration in userspace anyway, as it lacks a formula to center
the measure values around zero. The correction of the ellipsoid into a sphere
can be done in the post-process calibration as well.

A mount-matrix is needed nonetheless. When putting samsung-serranove flat on
a table in portrait orientation heading north, the Yamaha YAS537 magnetometer
axes natively point X+ to north, Y+ to east and Z+ into the ground, which
corresponds to a common way to define the Earth's magnetic field coordinate
system [4]. According to the IIO definition, it should be Y+ to north, X+ to
east and Z+ upwards [5], which corresponds to a common device coordinate system
and eases sensor fusing.

[1] https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/drivers/iio/magnetometer/yamaha-yas530.c?id=65f79b501030678393eae0ae03d60a8151fbef55
[2] https://github.com/msm8916-mainline/android_kernel_qcom_msm8916/blob/GT-I9195I/arch/arm/boot/dts/samsung/msm8916/msm8916-sec-serranovelte-eur-r03.dtsi#L318-L321
[3] https://github.com/msm8916-mainline/android_kernel_qcom_msm8916/blob/GT-I9195I/drivers/iio/magnetometer/yas_mag_drv-yas537.c#L105-L106
[4] https://en.wikipedia.org/wiki/Earth%27s_magnetic_field#Characteristics
[5] https://github.com/torvalds/linux/blob/v5.19/Documentation/devicetree/bindings/iio/mount-matrix.txt#L93-L126

Cc: Stephan Gerhold <stephan@gerhold.net>
Signed-off-by: Jakob Hauser <jahau@rocketmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
Link: https://lore.kernel.org/r/20220904214935.31032-1-jahau@rocketmail.com
arch/arm64/boot/dts/qcom/msm8916-samsung-serranove.dts

index 439e89c..bbd6bb3 100644 (file)
                pinctrl-names = "default";
                pinctrl-0 = <&imu_irq_default>;
        };
+
+       magnetometer@2e {
+               compatible = "yamaha,yas537";
+               reg = <0x2e>;
+
+               mount-matrix =  "0",  "1",  "0",
+                               "1",  "0",  "0",
+                               "0",  "0", "-1";
+       };
 };
 
 &blsp_i2c4 {