+ if (differences[n] > 16)
+ new_pwm -= 2;
+ else if (differences[n] > 4)
+ new_pwm--;
+ else if (differences[n] < -16)
+ new_pwm += 2;
+ else if (differences[n] < -4)
+ new_pwm++;
+ // new_pwm -= differences[n] >> 3;
+
+ if (new_pwm == old_pwm)
+ return;
+
+ differences[n] = 0;
+
+ if (new_pwm > (int16_t)pwm_max[n]) {
+ // FIXME: disconnected?
+ log_byte(0xE1);
+ log_byte(n);
+ log_word(new_pwm);
+ log_word(adcval);
+ log_word(jiffies);
+ pwmled_state[n] = ST_DISABLED;
+ pwm_off(n);
+ return;