|
@@ -200,18 +200,19 @@ static u64 div_round64(u64 dividend, u32 divisor)
|
|
|
static void get_typical_interval(struct menu_device *data)
|
|
|
{
|
|
|
int i, divisor;
|
|
|
- uint64_t max, avg, stddev;
|
|
|
- int64_t thresh = LLONG_MAX; /* Discard outliers above this value. */
|
|
|
+ unsigned int max, thresh;
|
|
|
+ uint64_t avg, stddev;
|
|
|
+
|
|
|
+ thresh = UINT_MAX; /* Discard outliers above this value */
|
|
|
|
|
|
again:
|
|
|
|
|
|
- /* first calculate average and standard deviation of the past */
|
|
|
+ /* First calculate the average of past intervals */
|
|
|
max = 0;
|
|
|
avg = 0;
|
|
|
divisor = 0;
|
|
|
- stddev = 0;
|
|
|
for (i = 0; i < INTERVALS; i++) {
|
|
|
- int64_t value = data->intervals[i];
|
|
|
+ unsigned int value = data->intervals[i];
|
|
|
if (value <= thresh) {
|
|
|
avg += value;
|
|
|
divisor++;
|
|
@@ -221,8 +222,10 @@ again:
|
|
|
}
|
|
|
do_div(avg, divisor);
|
|
|
|
|
|
+ /* Then try to determine standard deviation */
|
|
|
+ stddev = 0;
|
|
|
for (i = 0; i < INTERVALS; i++) {
|
|
|
- int64_t value = data->intervals[i];
|
|
|
+ unsigned int value = data->intervals[i];
|
|
|
if (value <= thresh) {
|
|
|
int64_t diff = value - avg;
|
|
|
stddev += diff * diff;
|