@@ -993,19 +993,22 @@ static int dualsense_get_calibration_data(struct dualsense *ds)
993
993
*/
994
994
speed_2x = (gyro_speed_plus + gyro_speed_minus );
995
995
ds -> gyro_calib_data [0 ].abs_code = ABS_RX ;
996
- ds -> gyro_calib_data [0 ].bias = gyro_pitch_bias ;
996
+ ds -> gyro_calib_data [0 ].bias = 0 ;
997
997
ds -> gyro_calib_data [0 ].sens_numer = speed_2x * DS_GYRO_RES_PER_DEG_S ;
998
- ds -> gyro_calib_data [0 ].sens_denom = gyro_pitch_plus - gyro_pitch_minus ;
998
+ ds -> gyro_calib_data [0 ].sens_denom = abs (gyro_pitch_plus - gyro_pitch_bias ) +
999
+ abs (gyro_pitch_minus - gyro_pitch_bias );
999
1000
1000
1001
ds -> gyro_calib_data [1 ].abs_code = ABS_RY ;
1001
- ds -> gyro_calib_data [1 ].bias = gyro_yaw_bias ;
1002
+ ds -> gyro_calib_data [1 ].bias = 0 ;
1002
1003
ds -> gyro_calib_data [1 ].sens_numer = speed_2x * DS_GYRO_RES_PER_DEG_S ;
1003
- ds -> gyro_calib_data [1 ].sens_denom = gyro_yaw_plus - gyro_yaw_minus ;
1004
+ ds -> gyro_calib_data [1 ].sens_denom = abs (gyro_yaw_plus - gyro_yaw_bias ) +
1005
+ abs (gyro_yaw_minus - gyro_yaw_bias );
1004
1006
1005
1007
ds -> gyro_calib_data [2 ].abs_code = ABS_RZ ;
1006
- ds -> gyro_calib_data [2 ].bias = gyro_roll_bias ;
1008
+ ds -> gyro_calib_data [2 ].bias = 0 ;
1007
1009
ds -> gyro_calib_data [2 ].sens_numer = speed_2x * DS_GYRO_RES_PER_DEG_S ;
1008
- ds -> gyro_calib_data [2 ].sens_denom = gyro_roll_plus - gyro_roll_minus ;
1010
+ ds -> gyro_calib_data [2 ].sens_denom = abs (gyro_roll_plus - gyro_roll_bias ) +
1011
+ abs (gyro_roll_minus - gyro_roll_bias );
1009
1012
1010
1013
/*
1011
1014
* Sanity check gyro calibration data. This is needed to prevent crashes
@@ -1388,8 +1391,7 @@ static int dualsense_parse_report(struct ps_device *ps_dev, struct hid_report *r
1388
1391
for (i = 0 ; i < ARRAY_SIZE (ds_report -> gyro ); i ++ ) {
1389
1392
int raw_data = (short )le16_to_cpu (ds_report -> gyro [i ]);
1390
1393
int calib_data = mult_frac (ds -> gyro_calib_data [i ].sens_numer ,
1391
- raw_data - ds -> gyro_calib_data [i ].bias ,
1392
- ds -> gyro_calib_data [i ].sens_denom );
1394
+ raw_data , ds -> gyro_calib_data [i ].sens_denom );
1393
1395
1394
1396
input_report_abs (ds -> sensors , ds -> gyro_calib_data [i ].abs_code , calib_data );
1395
1397
}
@@ -1792,11 +1794,10 @@ static int dualshock4_get_calibration_data(struct dualshock4 *ds4)
1792
1794
if (retries < 2 ) {
1793
1795
hid_warn (hdev , "Retrying DualShock 4 get calibration report (0x02) request\n" );
1794
1796
continue ;
1795
- } else {
1796
- ret = - EILSEQ ;
1797
- goto err_free ;
1798
1797
}
1798
+
1799
1799
hid_err (hdev , "Failed to retrieve DualShock4 calibration info: %d\n" , ret );
1800
+ ret = - EILSEQ ;
1800
1801
goto err_free ;
1801
1802
} else {
1802
1803
break ;
@@ -1849,19 +1850,22 @@ static int dualshock4_get_calibration_data(struct dualshock4 *ds4)
1849
1850
*/
1850
1851
speed_2x = (gyro_speed_plus + gyro_speed_minus );
1851
1852
ds4 -> gyro_calib_data [0 ].abs_code = ABS_RX ;
1852
- ds4 -> gyro_calib_data [0 ].bias = gyro_pitch_bias ;
1853
+ ds4 -> gyro_calib_data [0 ].bias = 0 ;
1853
1854
ds4 -> gyro_calib_data [0 ].sens_numer = speed_2x * DS4_GYRO_RES_PER_DEG_S ;
1854
- ds4 -> gyro_calib_data [0 ].sens_denom = gyro_pitch_plus - gyro_pitch_minus ;
1855
+ ds4 -> gyro_calib_data [0 ].sens_denom = abs (gyro_pitch_plus - gyro_pitch_bias ) +
1856
+ abs (gyro_pitch_minus - gyro_pitch_bias );
1855
1857
1856
1858
ds4 -> gyro_calib_data [1 ].abs_code = ABS_RY ;
1857
- ds4 -> gyro_calib_data [1 ].bias = gyro_yaw_bias ;
1859
+ ds4 -> gyro_calib_data [1 ].bias = 0 ;
1858
1860
ds4 -> gyro_calib_data [1 ].sens_numer = speed_2x * DS4_GYRO_RES_PER_DEG_S ;
1859
- ds4 -> gyro_calib_data [1 ].sens_denom = gyro_yaw_plus - gyro_yaw_minus ;
1861
+ ds4 -> gyro_calib_data [1 ].sens_denom = abs (gyro_yaw_plus - gyro_yaw_bias ) +
1862
+ abs (gyro_yaw_minus - gyro_yaw_bias );
1860
1863
1861
1864
ds4 -> gyro_calib_data [2 ].abs_code = ABS_RZ ;
1862
- ds4 -> gyro_calib_data [2 ].bias = gyro_roll_bias ;
1865
+ ds4 -> gyro_calib_data [2 ].bias = 0 ;
1863
1866
ds4 -> gyro_calib_data [2 ].sens_numer = speed_2x * DS4_GYRO_RES_PER_DEG_S ;
1864
- ds4 -> gyro_calib_data [2 ].sens_denom = gyro_roll_plus - gyro_roll_minus ;
1867
+ ds4 -> gyro_calib_data [2 ].sens_denom = abs (gyro_roll_plus - gyro_roll_bias ) +
1868
+ abs (gyro_roll_minus - gyro_roll_bias );
1865
1869
1866
1870
/*
1867
1871
* Sanity check gyro calibration data. This is needed to prevent crashes
@@ -2242,8 +2246,7 @@ static int dualshock4_parse_report(struct ps_device *ps_dev, struct hid_report *
2242
2246
for (i = 0 ; i < ARRAY_SIZE (ds4_report -> gyro ); i ++ ) {
2243
2247
int raw_data = (short )le16_to_cpu (ds4_report -> gyro [i ]);
2244
2248
int calib_data = mult_frac (ds4 -> gyro_calib_data [i ].sens_numer ,
2245
- raw_data - ds4 -> gyro_calib_data [i ].bias ,
2246
- ds4 -> gyro_calib_data [i ].sens_denom );
2249
+ raw_data , ds4 -> gyro_calib_data [i ].sens_denom );
2247
2250
2248
2251
input_report_abs (ds4 -> sensors , ds4 -> gyro_calib_data [i ].abs_code , calib_data );
2249
2252
}
0 commit comments