Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation
authorFenglin Wu <quic_fenglinw@quicinc.com>
Mon, 15 Apr 2024 23:03:40 +0000 (16:03 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Mon, 15 Apr 2024 23:21:45 +0000 (16:21 -0700)
The output voltage is inclusive hence the max level calculation is
off-by-one-step. Correct it.

iWhile we are at it also add a define for the step size instead of
using the magic value.

Fixes: 11205bb63e5c ("Input: add support for pm8xxx based vibrator driver")
Signed-off-by: Fenglin Wu <quic_fenglinw@quicinc.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240412-pm8xxx-vibrator-new-design-v10-1-0ec0ad133866@quicinc.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/misc/pm8xxx-vibrator.c

index 5c288fe7accf1fbc231923d6444721eff0fcccf5..79f478d3a9b3701884a7ac49720fcd96edd442d7 100644 (file)
@@ -13,7 +13,8 @@
 
 #define VIB_MAX_LEVEL_mV       (3100)
 #define VIB_MIN_LEVEL_mV       (1200)
-#define VIB_MAX_LEVELS         (VIB_MAX_LEVEL_mV - VIB_MIN_LEVEL_mV)
+#define VIB_PER_STEP_mV                (100)
+#define VIB_MAX_LEVELS         (VIB_MAX_LEVEL_mV - VIB_MIN_LEVEL_mV + VIB_PER_STEP_mV)
 
 #define MAX_FF_SPEED           0xff
 
@@ -117,10 +118,10 @@ static void pm8xxx_work_handler(struct work_struct *work)
                vib->active = true;
                vib->level = ((VIB_MAX_LEVELS * vib->speed) / MAX_FF_SPEED) +
                                                VIB_MIN_LEVEL_mV;
-               vib->level /= 100;
+               vib->level /= VIB_PER_STEP_mV;
        } else {
                vib->active = false;
-               vib->level = VIB_MIN_LEVEL_mV / 100;
+               vib->level = VIB_MIN_LEVEL_mV / VIB_PER_STEP_mV;
        }
 
        pm8xxx_vib_set(vib, vib->active);