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 |
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 --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. */