mirror of
https://github.com/MiSTer-devel/Linux-Kernel_MiSTer.git
synced 2026-04-19 03:04:24 +00:00
drivers: hid-nintendo: fix possible division by 0.
This commit is contained in:
@@ -895,14 +895,25 @@ static int joycon_request_calibration(struct joycon_ctlr *ctlr)
|
||||
*/
|
||||
static void joycon_calc_imu_cal_divisors(struct joycon_ctlr *ctlr)
|
||||
{
|
||||
int i;
|
||||
int i, divz = 0;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
ctlr->imu_cal_accel_divisor[i] = ctlr->accel_cal.scale[i] -
|
||||
ctlr->accel_cal.offset[i];
|
||||
ctlr->imu_cal_gyro_divisor[i] = ctlr->gyro_cal.scale[i] -
|
||||
ctlr->gyro_cal.offset[i];
|
||||
|
||||
if (ctlr->imu_cal_accel_divisor[i] == 0) {
|
||||
ctlr->imu_cal_accel_divisor[i] = 1;
|
||||
divz++;
|
||||
}
|
||||
if (ctlr->imu_cal_gyro_divisor[i] == 0) {
|
||||
ctlr->imu_cal_gyro_divisor[i] = 1;
|
||||
divz++;
|
||||
}
|
||||
}
|
||||
if (divz)
|
||||
hid_warn(ctlr->hdev, "inaccurate IMU divisors (%d)\n", divz);
|
||||
}
|
||||
|
||||
static const s16 DFLT_ACCEL_OFFSET /*= 0*/;
|
||||
@@ -1131,16 +1142,16 @@ static void joycon_parse_imu_report(struct joycon_ctlr *ctlr,
|
||||
JC_IMU_SAMPLES_PER_DELTA_AVG) {
|
||||
ctlr->imu_avg_delta_ms = ctlr->imu_delta_samples_sum /
|
||||
ctlr->imu_delta_samples_count;
|
||||
/* don't ever want divide by zero shenanigans */
|
||||
if (ctlr->imu_avg_delta_ms == 0) {
|
||||
ctlr->imu_avg_delta_ms = 1;
|
||||
hid_warn(ctlr->hdev,
|
||||
"calculated avg imu delta of 0\n");
|
||||
}
|
||||
ctlr->imu_delta_samples_count = 0;
|
||||
ctlr->imu_delta_samples_sum = 0;
|
||||
}
|
||||
|
||||
/* don't ever want divide by zero shenanigans */
|
||||
if (ctlr->imu_avg_delta_ms == 0) {
|
||||
ctlr->imu_avg_delta_ms = 1;
|
||||
hid_warn(ctlr->hdev, "calculated avg imu delta of 0\n");
|
||||
}
|
||||
|
||||
/* useful for debugging IMU sample rate */
|
||||
hid_dbg(ctlr->hdev,
|
||||
"imu_report: ms=%u last_ms=%u delta=%u avg_delta=%u\n",
|
||||
|
||||
Reference in New Issue
Block a user