diff mbox series

[1/2] drivers: hid: adjust gyro calibration data

Message ID 20221006133609.3839-1-hcvcastro@gmail.com (mailing list archive)
State New, archived
Delegated to: Jiri Kosina
Headers show
Series [1/2] drivers: hid: adjust gyro calibration data | expand

Commit Message

Henry Castro Oct. 6, 2022, 1:36 p.m. UTC
For some reason my DualShock 4 get the calibration
data values equal:

	gyro_pitch_plus == gyro_pitch_minus

Probably due to some defect in the DS4 hardware, and cause
a CPU division exception to crash the linux kernel.

At least with the patch, I can continue play Retroarch
without using the Gyroscope :)

Signed-off-by: Henry Castro <hcvcastro@gmail.com>
---

>> Hm, I'm not the biggest fan. Is this an official DS4 or a clone
>> device? It sounds like it is some type of clone (some look real).

Sorry it happens in my DS4 clone:

I have the log values:

gyro_pitch_plus = 8704
giro_pitch_minus = 8704

Then the division exception:

mult_frac(x, y, 0)



 drivers/hid/hid-sony.c | 9 +++++++++
 1 file changed, 9 insertions(+)

--
2.20.1

Comments

Roderick Colenbrander Oct. 6, 2022, 2:03 p.m. UTC | #1
On Thu, Oct 6, 2022 at 6:36 AM Henry Castro <hcvcastro@gmail.com> wrote:
>
> For some reason my DualShock 4 get the calibration
> data values equal:
>
>         gyro_pitch_plus == gyro_pitch_minus
>
> Probably due to some defect in the DS4 hardware, and cause
> a CPU division exception to crash the linux kernel.
>
> At least with the patch, I can continue play Retroarch
> without using the Gyroscope :)
>
> Signed-off-by: Henry Castro <hcvcastro@gmail.com>
> ---
>
> >> Hm, I'm not the biggest fan. Is this an official DS4 or a clone
> >> device? It sounds like it is some type of clone (some look real).
>
> Sorry it happens in my DS4 clone:
>
> I have the log values:
>
> gyro_pitch_plus = 8704
> giro_pitch_minus = 8704
>
> Then the division exception:
>
> mult_frac(x, y, 0)
>

Are it only these which are equal or are there are other funky ones?
Are all constants in general the same? I'm just trying to figure out
if some of this device would even need calibration.

Thanks,
Roderick
diff mbox series

Patch

diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 87b538656f64..656caa07b25f 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -1823,6 +1823,15 @@  static int dualshock4_get_calibration_data(struct sony_sc *sc)
 	acc_z_plus       = get_unaligned_le16(&buf[31]);
 	acc_z_minus      = get_unaligned_le16(&buf[33]);

+	if (gyro_pitch_plus == gyro_pitch_minus)
+		gyro_pitch_minus *= -1;
+
+	if (gyro_yaw_plus == gyro_yaw_minus)
+		gyro_yaw_minus *= -1;
+
+	if (gyro_roll_plus == gyro_roll_minus)
+		gyro_roll_minus *= -1;
+
 	/* Set gyroscope calibration and normalization parameters.
 	 * Data values will be normalized to 1/DS4_GYRO_RES_PER_DEG_S degree/s.
 	 */