Patch "Input: pmic8xxx-pwrkey - fix algorithm for converting trigger delay" has been added to the 4.4-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
Input: pmic8xxx-pwrkey - fix algorithm for converting trigger delay
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
input-pmic8xxx-pwrkey-fix-algorithm-for-converting-trigger-delay.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
eda5ecc0a6b865561997e177c393f0b0136fe3b7Mon Sep 17 00:00:00 2001
From: Stephen Boyd <[email protected]>
Date: Sun, 17 Apr 2016 05:21:42 -0700
Subject: Input: pmic8xxx-pwrkey - fix algorithm for converting trigger delay
From: Stephen Boyd <[email protected]>
commit eda5ecc0a6b865561997e177c393f0b0136fe3b7 upstream.
The trigger delay algorithm that converts from microseconds to the register value looks incorrect. According to most of the PMIC documentation, the equation is
delay (Seconds) = (1 / 1024) * 2 ^ (x + 4)
except for one case where the documentation looks to have a formatting issue and the equation looks like
delay (Seconds) = (1 / 1024) * 2 x + 4
Most likely this driver was written with the improper documentation to begin with. According to the downstream sources the valid delays are from 2 seconds to 1/64 second, and the latter equation just doesn't make sense for that. Let's fix the algorithm and the range check to match the documentation and the downstream sources.
--- drivers/input/misc/pmic8xxx-pwrkey.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
drivers/input/misc/pmic8xxx-pwrkey.c +4 -3
@@ -353,7 +353,8 @@ static int pmic8xxx_pwrkey_probe(structif (of_property_read_u32 (pdev->dev.of_node,"debounce" , &kpd_delay)) kpd_delay =15625 ; -if (kpd_delay >62500 || kpd_delay ==0 ) { +/* Valid range of pwr key trigger delay is 1/64 sec to 2 seconds. */ +if (kpd_delay >USEC_PER_SEC *2 || kpd_delay <USEC_PER_SEC /64 ) {dev_err (&pdev->dev,"invalid power key trigger delay\n" );return -EINVAL ; }
@@ -385,8 +386,8 @@ static int pmic8xxx_pwrkey_probe(struct pwr->name ="pmic8xxx_pwrkey" ; pwr->phys ="pmic8xxx_pwrkey/input0" ; - delay = (kpd_delay <<10 ) /USEC_PER_SEC ; - delay =1 +ilog2 (delay); + delay = (kpd_delay <<6 ) /USEC_PER_SEC ; + delay =ilog2 (delay); err =regmap_read (regmap,PON_CNTL_1 , &pon_cntl);if (err <0 ) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/input-pmic8xxx-pwrkey-fix-algorithm-for-converting-trigger-delay.patch