Skip to content

Commit 52bb059

Browse files
committed
Merge branch 'for-6.3/sony' into for-linus
- enforce DS4 controllers to use hid-playstation (Roderick Colenbrander) - various hid-playstation gyro fixes (Roderick Colenbrander)
2 parents c21c9fe + 6f7dbbd commit 52bb059

File tree

2 files changed

+62
-1000
lines changed

2 files changed

+62
-1000
lines changed

drivers/hid/hid-playstation.c

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -993,19 +993,22 @@ static int dualsense_get_calibration_data(struct dualsense *ds)
993993
*/
994994
speed_2x = (gyro_speed_plus + gyro_speed_minus);
995995
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;
997997
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);
9991000

10001001
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;
10021003
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);
10041006

10051007
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;
10071009
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);
10091012

10101013
/*
10111014
* 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
13881391
for (i = 0; i < ARRAY_SIZE(ds_report->gyro); i++) {
13891392
int raw_data = (short)le16_to_cpu(ds_report->gyro[i]);
13901393
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);
13931395

13941396
input_report_abs(ds->sensors, ds->gyro_calib_data[i].abs_code, calib_data);
13951397
}
@@ -1792,11 +1794,10 @@ static int dualshock4_get_calibration_data(struct dualshock4 *ds4)
17921794
if (retries < 2) {
17931795
hid_warn(hdev, "Retrying DualShock 4 get calibration report (0x02) request\n");
17941796
continue;
1795-
} else {
1796-
ret = -EILSEQ;
1797-
goto err_free;
17981797
}
1798+
17991799
hid_err(hdev, "Failed to retrieve DualShock4 calibration info: %d\n", ret);
1800+
ret = -EILSEQ;
18001801
goto err_free;
18011802
} else {
18021803
break;
@@ -1849,19 +1850,22 @@ static int dualshock4_get_calibration_data(struct dualshock4 *ds4)
18491850
*/
18501851
speed_2x = (gyro_speed_plus + gyro_speed_minus);
18511852
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;
18531854
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);
18551857

18561858
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;
18581860
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);
18601863

18611864
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;
18631866
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);
18651869

18661870
/*
18671871
* 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 *
22422246
for (i = 0; i < ARRAY_SIZE(ds4_report->gyro); i++) {
22432247
int raw_data = (short)le16_to_cpu(ds4_report->gyro[i]);
22442248
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);
22472250

22482251
input_report_abs(ds4->sensors, ds4->gyro_calib_data[i].abs_code, calib_data);
22492252
}

0 commit comments

Comments
 (0)