diff mbox

[1/2,v2] device-tree: nexus7-flo: Remove power gpio key entry and use pmic8xxx-pwrkey

Message ID 1460668031-12384-1-git-send-email-john.stultz@linaro.org
State New
Headers show

Commit Message

John Stultz April 14, 2016, 9:07 p.m. UTC
Since the pmic8xxx-pwrkey driver is already supported in the
qcom-apq8064.dtsi, and the pmic8xxx-pwrkey supports logic to
configure proper device shutdown when ps_hold goes low, it is
better to use that driver then a generic gpio button.

Thus this patch remove the gpio power key entry here, so we
don't get double input events from having two drivers enabled.

The one gotcha with the pmic8xxx-pwrkey is it has a fairly
long debounce delay, which we shorten here to make the button
behave as expected.

Cc: Rob Herring <robh+dt@kernel.org>
Cc: Arnd Bergmann <arnd.bergmann@linaro.org>
Cc: Pawel Moll <pawel.moll@arm.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Ian Campbell <ijc+devicetree@hellion.org.uk>
Cc: Kumar Gala <galak@codeaurora.org>
Cc: Andy Gross <agross@codeaurora.org>
Cc: Vinay Simha BN <simhavcs@gmail.com>
Cc: Bjorn Andersson <bjorn.andersson@linaro.org>
Cc: Stephen Boyd <stephen.boyd@linaro.org>
Cc: linux-arm-msm@vger.kernel.org
Cc: devicetree@vger.kernel.org
Signed-off-by: John Stultz <john.stultz@linaro.org>

---
v2:
 - Add wakeup-source entry as suggested by
   Sudeep Holla <sudeep.holla@arm.com>

 arch/arm/boot/dts/qcom-apq8064-asus-nexus7-flo.dts | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

-- 
1.9.1

Comments

Bjorn Andersson April 15, 2016, 10:01 p.m. UTC | #1
On Fri 15 Apr 11:59 PDT 2016, Stephen Boyd wrote:

[..]

> ----8<-----

> From: Stephen Boyd <sboyd@codeaurora.org>

> Subject: [PATCH] Input: pmic8xxx-pwrkey: Fix algorithm for converting trigger

>  delay

> 

> 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.

> 

> Reported-by: Bjorn Andersson <bjorn.andersson@linaro.org>


Acked-by: Bjorn Andersson <bjorn.andersson@linaro.org>


> Cc: John Stultz <john.stultz@linaro.org>

> Fixes: 92d57a73e410 ("input: Add support for Qualcomm PMIC8XXX power key")

> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>

> ---

>  drivers/input/misc/pmic8xxx-pwrkey.c | 7 ++++---

>  1 file changed, 4 insertions(+), 3 deletions(-)

> 

> diff --git a/drivers/input/misc/pmic8xxx-pwrkey.c b/drivers/input/misc/pmic8xxx-pwrkey.c

> index 3f02e0e03d12..67aab86048ad 100644

> --- a/drivers/input/misc/pmic8xxx-pwrkey.c

> +++ b/drivers/input/misc/pmic8xxx-pwrkey.c

> @@ -353,7 +353,8 @@ static int pmic8xxx_pwrkey_probe(struct platform_device *pdev)

>  	if (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 platform_device *pdev)

>  	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);


Regards,
Bjorn
diff mbox

Patch

diff --git a/arch/arm/boot/dts/qcom-apq8064-asus-nexus7-flo.dts b/arch/arm/boot/dts/qcom-apq8064-asus-nexus7-flo.dts
index c535b3f..15da084 100644
--- a/arch/arm/boot/dts/qcom-apq8064-asus-nexus7-flo.dts
+++ b/arch/arm/boot/dts/qcom-apq8064-asus-nexus7-flo.dts
@@ -29,12 +29,6 @@ 
 
 	gpio-keys {
 		compatible = "gpio-keys";
-		power {
-			label = "Power";
-			gpios = <&tlmm_pinmux 26 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_POWER>;
-			gpio-key,wakeup;
-		};
 		volume_up {
 			label = "Volume Up";
 			gpios = <&pm8921_gpio 4 GPIO_ACTIVE_HIGH>;
@@ -190,6 +184,16 @@ 
 			};
 		};
 
+		/* override default debounce for power-key */
+		qcom,ssbi@500000 {
+			pmic@0 {
+				pwrkey@1c {
+					debounce = <1>;
+					wakeup-source;
+				};
+			};
+		};
+
 		gsbi@16200000 {
 			status = "okay";
 			qcom,mode = <GSBI_PROT_I2C>;