Commit 48c0687a authored by Fenglin Wu's avatar Fenglin Wu Committed by Dmitry Torokhov
Browse files

Input: pm8xxx-vibrator - correct VIB_MAX_LEVELS calculation



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: 11205bb6 ("Input: add support for pm8xxx based vibrator driver")
Signed-off-by: default avatarFenglin Wu <quic_fenglinw@quicinc.com>
Reviewed-by: default avatarDmitry Baryshkov <dmitry.baryshkov@linaro.org>
Link: https://lore.kernel.org/r/20240412-pm8xxx-vibrator-new-design-v10-1-0ec0ad133866@quicinc.com


Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent ba2ec9c4
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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);