diff mbox

[4/6] mfd: stmpe: mask off unused blocks properly

Message ID 1397659455-13638-5-git-send-email-linus.walleij@linaro.org
State Superseded
Headers show

Commit Message

Linus Walleij April 16, 2014, 2:44 p.m. UTC
The STMPE driver would just read/modify/write the system control
register on the STMPE1601, meaning it would not properly mask off
the PWM block, which remained active if it was on at boot time.
This makes sure the blocks are always masked off if they were
active on boot, saving some power. Also rename the inconsistenty
named STMPE1601 define for the PWM block activation.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/mfd/stmpe.c | 9 +++++++++
 drivers/mfd/stmpe.h | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

Comments

Lee Jones April 17, 2014, 10:52 a.m. UTC | #1
> The STMPE driver would just read/modify/write the system control
> register on the STMPE1601, meaning it would not properly mask off
> the PWM block, which remained active if it was on at boot time.
> This makes sure the blocks are always masked off if they were
> active on boot, saving some power. Also rename the inconsistenty
> named STMPE1601 define for the PWM block activation.
> 
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
> ---
>  drivers/mfd/stmpe.c | 9 +++++++++
>  drivers/mfd/stmpe.h | 2 +-
>  2 files changed, 10 insertions(+), 1 deletion(-)

Patch looks good to me.

Acked-by: Lee Jones <lee.jones@linaro.org>

> diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c
> index 692452442ead..065c923cb2a9 100644
> --- a/drivers/mfd/stmpe.c
> +++ b/drivers/mfd/stmpe.c
> @@ -606,9 +606,18 @@ static int stmpe1601_enable(struct stmpe *stmpe, unsigned int blocks,
>  
>  	if (blocks & STMPE_BLOCK_GPIO)
>  		mask |= STMPE1601_SYS_CTRL_ENABLE_GPIO;
> +	else
> +		mask &= ~STMPE1601_SYS_CTRL_ENABLE_GPIO;
>  
>  	if (blocks & STMPE_BLOCK_KEYPAD)
>  		mask |= STMPE1601_SYS_CTRL_ENABLE_KPC;
> +	else
> +		mask &= ~STMPE1601_SYS_CTRL_ENABLE_KPC;
> +
> +	if (blocks & STMPE_BLOCK_PWM)
> +		mask |= STMPE1601_SYS_CTRL_ENABLE_SPWM;
> +	else
> +		mask &= ~STMPE1601_SYS_CTRL_ENABLE_SPWM;
>  
>  	return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL, mask,
>  				enable ? mask : 0);
> diff --git a/drivers/mfd/stmpe.h b/drivers/mfd/stmpe.h
> index 6639f1b0fef5..9e4d21d37a11 100644
> --- a/drivers/mfd/stmpe.h
> +++ b/drivers/mfd/stmpe.h
> @@ -192,7 +192,7 @@ int stmpe_remove(struct stmpe *stmpe);
>  
>  #define STMPE1601_SYS_CTRL_ENABLE_GPIO		(1 << 3)
>  #define STMPE1601_SYS_CTRL_ENABLE_KPC		(1 << 1)
> -#define STMPE1601_SYSCON_ENABLE_SPWM		(1 << 0)
> +#define STMPE1601_SYS_CTRL_ENABLE_SPWM		(1 << 0)
>  
>  /* The 1601/2403 share the same masks */
>  #define STMPE1601_AUTOSLEEP_TIMEOUT_MASK	(0x7)
diff mbox

Patch

diff --git a/drivers/mfd/stmpe.c b/drivers/mfd/stmpe.c
index 692452442ead..065c923cb2a9 100644
--- a/drivers/mfd/stmpe.c
+++ b/drivers/mfd/stmpe.c
@@ -606,9 +606,18 @@  static int stmpe1601_enable(struct stmpe *stmpe, unsigned int blocks,
 
 	if (blocks & STMPE_BLOCK_GPIO)
 		mask |= STMPE1601_SYS_CTRL_ENABLE_GPIO;
+	else
+		mask &= ~STMPE1601_SYS_CTRL_ENABLE_GPIO;
 
 	if (blocks & STMPE_BLOCK_KEYPAD)
 		mask |= STMPE1601_SYS_CTRL_ENABLE_KPC;
+	else
+		mask &= ~STMPE1601_SYS_CTRL_ENABLE_KPC;
+
+	if (blocks & STMPE_BLOCK_PWM)
+		mask |= STMPE1601_SYS_CTRL_ENABLE_SPWM;
+	else
+		mask &= ~STMPE1601_SYS_CTRL_ENABLE_SPWM;
 
 	return __stmpe_set_bits(stmpe, STMPE1601_REG_SYS_CTRL, mask,
 				enable ? mask : 0);
diff --git a/drivers/mfd/stmpe.h b/drivers/mfd/stmpe.h
index 6639f1b0fef5..9e4d21d37a11 100644
--- a/drivers/mfd/stmpe.h
+++ b/drivers/mfd/stmpe.h
@@ -192,7 +192,7 @@  int stmpe_remove(struct stmpe *stmpe);
 
 #define STMPE1601_SYS_CTRL_ENABLE_GPIO		(1 << 3)
 #define STMPE1601_SYS_CTRL_ENABLE_KPC		(1 << 1)
-#define STMPE1601_SYSCON_ENABLE_SPWM		(1 << 0)
+#define STMPE1601_SYS_CTRL_ENABLE_SPWM		(1 << 0)
 
 /* The 1601/2403 share the same masks */
 #define STMPE1601_AUTOSLEEP_TIMEOUT_MASK	(0x7)