* [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source
2012-03-30 1:58 [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Chao Xie
@ 2012-03-30 1:53 ` Haojian Zhuang
2012-03-30 1:58 ` [PATCH V2 2/4] Input: pxa27x_keypad bug fix for direct_key_mask Chao Xie
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Haojian Zhuang @ 2012-03-30 1:53 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Mar 30, 2012 at 9:58 AM, Chao Xie <chao.xie@marvell.com> wrote:
> When the keypad is used as wake up source, the clock can not
> be disabled. Or it can not detect key pressing.
> If the keypad is used as wake up source, when resume back,
> do not enable the clock and configure it again because the
> register content is retained.
>
> Signed-off-by: Chao Xie <chao.xie@marvell.com>
> ---
> ?drivers/input/keyboard/pxa27x_keypad.c | ? 27 ++++++++++++++++++---------
> ?1 files changed, 18 insertions(+), 9 deletions(-)
>
> diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
> index 29fe1b2..1c5752f 100644
> --- a/drivers/input/keyboard/pxa27x_keypad.c
> +++ b/drivers/input/keyboard/pxa27x_keypad.c
> @@ -419,10 +419,14 @@ static int pxa27x_keypad_suspend(struct device *dev)
> ? ? ? ?struct platform_device *pdev = to_platform_device(dev);
> ? ? ? ?struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
>
> - ? ? ? clk_disable(keypad->clk);
> -
> + ? ? ? /*
> + ? ? ? ?* If the keypad is used a wake up source, clock can not be disabled.
> + ? ? ? ?* Or it can not detect the key pressing.
> + ? ? ? ?*/
> ? ? ? ?if (device_may_wakeup(&pdev->dev))
> ? ? ? ? ? ? ? ?enable_irq_wake(keypad->irq);
> + ? ? ? else
> + ? ? ? ? ? ? ? clk_disable(keypad->clk);
I prefer to add one patch to use clk_prepare_enable() &
clk_disable_unprepare() in keypad driver.
>
> ? ? ? ?return 0;
> ?}
> @@ -433,19 +437,24 @@ static int pxa27x_keypad_resume(struct device *dev)
> ? ? ? ?struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
> ? ? ? ?struct input_dev *input_dev = keypad->input_dev;
>
> + ? ? ? /*
> + ? ? ? ?* If the keypad is used as wake up source, the clock is not turned
> + ? ? ? ?* off. So do not need configure it again.
> + ? ? ? ?*/
> ? ? ? ?if (device_may_wakeup(&pdev->dev))
> ? ? ? ? ? ? ? ?disable_irq_wake(keypad->irq);
> + ? ? ? else {
> + ? ? ? ? ? ? ? mutex_lock(&input_dev->mutex);
>
> - ? ? ? mutex_lock(&input_dev->mutex);
> + ? ? ? ? ? ? ? if (input_dev->users) {
> + ? ? ? ? ? ? ? ? ? ? ? /* Enable unit clock */
> + ? ? ? ? ? ? ? ? ? ? ? clk_enable(keypad->clk);
> + ? ? ? ? ? ? ? ? ? ? ? pxa27x_keypad_config(keypad);
> + ? ? ? ? ? ? ? }
>
> - ? ? ? if (input_dev->users) {
> - ? ? ? ? ? ? ? /* Enable unit clock */
> - ? ? ? ? ? ? ? clk_enable(keypad->clk);
> - ? ? ? ? ? ? ? pxa27x_keypad_config(keypad);
> + ? ? ? ? ? ? ? mutex_unlock(&input_dev->mutex);
> ? ? ? ?}
>
> - ? ? ? mutex_unlock(&input_dev->mutex);
> -
> ? ? ? ?return 0;
> ?}
>
> --
> 1.7.0.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH V2 2/4] Input: pxa27x_keypad bug fix for direct_key_mask
2012-03-30 1:58 [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Chao Xie
2012-03-30 1:53 ` Haojian Zhuang
@ 2012-03-30 1:58 ` Chao Xie
2012-03-30 1:58 ` [PATCH V2 3/4] Input: pxa27x_keypad direct key may be low active Chao Xie
` (2 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Chao Xie @ 2012-03-30 1:58 UTC (permalink / raw)
To: linux-arm-kernel
When direcct_key_num is 0, the mask should be 0.
When direcct_key_num is 1, the mask should be 0b1.
Signed-off-by: Chao Xie <chao.xie@marvell.com>
---
drivers/input/keyboard/pxa27x_keypad.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index 1c5752f..f9a76d4 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -383,7 +383,7 @@ static void pxa27x_keypad_config(struct pxa27x_keypad *keypad)
if (pdata->direct_key_num > direct_key_num)
direct_key_num = pdata->direct_key_num;
- keypad->direct_key_mask = ((2 << direct_key_num) - 1) & ~mask;
+ keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
/* enable direct key */
if (direct_key_num)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH V2 3/4] Input: pxa27x_keypad direct key may be low active
2012-03-30 1:58 [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Chao Xie
2012-03-30 1:53 ` Haojian Zhuang
2012-03-30 1:58 ` [PATCH V2 2/4] Input: pxa27x_keypad bug fix for direct_key_mask Chao Xie
@ 2012-03-30 1:58 ` Chao Xie
2012-03-30 1:58 ` [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask Chao Xie
2012-03-31 21:47 ` [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Sergei Shtylyov
4 siblings, 0 replies; 8+ messages in thread
From: Chao Xie @ 2012-03-30 1:58 UTC (permalink / raw)
To: linux-arm-kernel
KPDK_DK only indicates the pin level of direct key.
So it is related to board, and low level may be active which
indicates that a key is pressed.
Signed-off-by: Chao Xie <chao.xie@marvell.com>
---
arch/arm/plat-pxa/include/plat/pxa27x_keypad.h | 2 ++
drivers/input/keyboard/pxa27x_keypad.c | 10 +++++++++-
2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
index abcc36e..7ffb16b 100644
--- a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
+++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
@@ -44,6 +44,8 @@ struct pxa27x_keypad_platform_data {
/* direct keys */
int direct_key_num;
unsigned int direct_key_map[MAX_DIRECT_KEY_NUM];
+ /* the key output may be low active */
+ int direct_key_low_active;
/* rotary encoders 0 */
int enable_rotary0;
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index f9a76d4..b41ebda 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -311,7 +311,15 @@ static void pxa27x_keypad_scan_direct(struct pxa27x_keypad *keypad)
if (pdata->enable_rotary0 || pdata->enable_rotary1)
pxa27x_keypad_scan_rotary(keypad);
- new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
+ /*
+ * The KPDR_DK only output the key pin level, so it relates to board,
+ * and low level may be active.
+ */
+ if (pdata->direct_key_low_active)
+ new_state = ~KPDK_DK(kpdk) & keypad->direct_key_mask;
+ else
+ new_state = KPDK_DK(kpdk) & keypad->direct_key_mask;
+
bits_changed = keypad->direct_key_state ^ new_state;
if (bits_changed == 0)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask
2012-03-30 1:58 [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Chao Xie
` (2 preceding siblings ...)
2012-03-30 1:58 ` [PATCH V2 3/4] Input: pxa27x_keypad direct key may be low active Chao Xie
@ 2012-03-30 1:58 ` Chao Xie
2012-03-30 2:01 ` Haojian Zhuang
2012-03-31 21:44 ` Sergei Shtylyov
2012-03-31 21:47 ` [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Sergei Shtylyov
4 siblings, 2 replies; 8+ messages in thread
From: Chao Xie @ 2012-03-30 1:58 UTC (permalink / raw)
To: linux-arm-kernel
Direct keys usage may not start from KP_DKIN0, add a msk option
to configure the specifics for platforms that can skip some keys.
Change-Id: Ia8fd28254fec9595dcf39f12a78392c1e8b675eb
Signed-off-by: Chao Xie <chao.xie@marvell.com>
---
arch/arm/plat-pxa/include/plat/pxa27x_keypad.h | 2 ++
drivers/input/keyboard/pxa27x_keypad.c | 9 ++++++++-
2 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
index 7ffb16b..5ce8d5e 100644
--- a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
+++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
@@ -46,6 +46,8 @@ struct pxa27x_keypad_platform_data {
unsigned int direct_key_map[MAX_DIRECT_KEY_NUM];
/* the key output may be low active */
int direct_key_low_active;
+ /* give board a chance to choose the start direct key */
+ unsigned int direct_key_mask;
/* rotary encoders 0 */
int enable_rotary0;
diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
index b41ebda..3da60b3 100644
--- a/drivers/input/keyboard/pxa27x_keypad.c
+++ b/drivers/input/keyboard/pxa27x_keypad.c
@@ -391,7 +391,14 @@ static void pxa27x_keypad_config(struct pxa27x_keypad *keypad)
if (pdata->direct_key_num > direct_key_num)
direct_key_num = pdata->direct_key_num;
- keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
+ /*
+ * Direct keys usage may not start from KP_DKIN0, check the platfrom
+ * mask data to config the specific.
+ */
+ if (pdata->direct_key_mask)
+ keypad->direct_key_mask = pdata->direct_key_mask;
+ else
+ keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
/* enable direct key */
if (direct_key_num)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 8+ messages in thread* [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask
2012-03-30 1:58 ` [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask Chao Xie
@ 2012-03-30 2:01 ` Haojian Zhuang
2012-03-31 21:44 ` Sergei Shtylyov
1 sibling, 0 replies; 8+ messages in thread
From: Haojian Zhuang @ 2012-03-30 2:01 UTC (permalink / raw)
To: linux-arm-kernel
On Fri, Mar 30, 2012 at 9:58 AM, Chao Xie <chao.xie@marvell.com> wrote:
> Direct keys usage may not start from KP_DKIN0, add a msk option
> to configure the specifics for platforms that can skip some keys.
>
> Change-Id: Ia8fd28254fec9595dcf39f12a78392c1e8b675eb
You need remove Change-Id
> Signed-off-by: Chao Xie <chao.xie@marvell.com>
> ---
> ?arch/arm/plat-pxa/include/plat/pxa27x_keypad.h | ? ?2 ++
> ?drivers/input/keyboard/pxa27x_keypad.c ? ? ? ? | ? ?9 ++++++++-
> ?2 files changed, 10 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
> index 7ffb16b..5ce8d5e 100644
> --- a/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
> +++ b/arch/arm/plat-pxa/include/plat/pxa27x_keypad.h
> @@ -46,6 +46,8 @@ struct pxa27x_keypad_platform_data {
> ? ? ? ?unsigned int ? ?direct_key_map[MAX_DIRECT_KEY_NUM];
> ? ? ? ?/* the key output may be low active */
> ? ? ? ?int ? ? ? ? ? ? direct_key_low_active;
> + ? ? ? /* give board a chance to choose the start direct key */
> + ? ? ? unsigned int ? ?direct_key_mask;
>
> ? ? ? ?/* rotary encoders 0 */
> ? ? ? ?int ? ? ? ? ? ? enable_rotary0;
> diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
> index b41ebda..3da60b3 100644
> --- a/drivers/input/keyboard/pxa27x_keypad.c
> +++ b/drivers/input/keyboard/pxa27x_keypad.c
> @@ -391,7 +391,14 @@ static void pxa27x_keypad_config(struct pxa27x_keypad *keypad)
> ? ? ? ?if (pdata->direct_key_num > direct_key_num)
> ? ? ? ? ? ? ? ?direct_key_num = pdata->direct_key_num;
>
> - ? ? ? keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
> + ? ? ? /*
> + ? ? ? ?* Direct keys usage may not start from KP_DKIN0, check the platfrom
> + ? ? ? ?* mask data to config the specific.
> + ? ? ? ?*/
> + ? ? ? if (pdata->direct_key_mask)
> + ? ? ? ? ? ? ? keypad->direct_key_mask = pdata->direct_key_mask;
> + ? ? ? else
> + ? ? ? ? ? ? ? keypad->direct_key_mask = ((1 << direct_key_num) - 1) & ~mask;
>
> ? ? ? ?/* enable direct key */
> ? ? ? ?if (direct_key_num)
> --
> 1.7.0.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 8+ messages in thread* [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask
2012-03-30 1:58 ` [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask Chao Xie
2012-03-30 2:01 ` Haojian Zhuang
@ 2012-03-31 21:44 ` Sergei Shtylyov
1 sibling, 0 replies; 8+ messages in thread
From: Sergei Shtylyov @ 2012-03-31 21:44 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
On 30-03-2012 5:58, Chao Xie wrote:
> Direct keys usage may not start from KP_DKIN0, add a msk option
> to configure the specifics for platforms that can skip some keys.
> Change-Id: Ia8fd28254fec9595dcf39f12a78392c1e8b675eb
Remove this line please -- it has no place in upstream patch.
> Signed-off-by: Chao Xie <chao.xie@marvell.com>
WBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source
2012-03-30 1:58 [PATCH V2 1/4] Input: pxa27x_keypad keep clock on as wakeup source Chao Xie
` (3 preceding siblings ...)
2012-03-30 1:58 ` [PATCH V2 4/4] Input: pxa27x_keypad add choice to set direct_key_mask Chao Xie
@ 2012-03-31 21:47 ` Sergei Shtylyov
4 siblings, 0 replies; 8+ messages in thread
From: Sergei Shtylyov @ 2012-03-31 21:47 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
On 30-03-2012 5:58, Chao Xie wrote:
> When the keypad is used as wake up source, the clock can not
> be disabled. Or it can not detect key pressing.
> If the keypad is used as wake up source, when resume back,
> do not enable the clock and configure it again because the
> register content is retained.
> Signed-off-by: Chao Xie<chao.xie@marvell.com>
> ---
> drivers/input/keyboard/pxa27x_keypad.c | 27 ++++++++++++++++++---------
> 1 files changed, 18 insertions(+), 9 deletions(-)
> diff --git a/drivers/input/keyboard/pxa27x_keypad.c b/drivers/input/keyboard/pxa27x_keypad.c
> index 29fe1b2..1c5752f 100644
> --- a/drivers/input/keyboard/pxa27x_keypad.c
> +++ b/drivers/input/keyboard/pxa27x_keypad.c
[...]
> @@ -433,19 +437,24 @@ static int pxa27x_keypad_resume(struct device *dev)
> struct pxa27x_keypad *keypad = platform_get_drvdata(pdev);
> struct input_dev *input_dev = keypad->input_dev;
>
> + /*
> + * If the keypad is used as wake up source, the clock is not turned
> + * off. So do not need configure it again.
> + */
> if (device_may_wakeup(&pdev->dev))
> disable_irq_wake(keypad->irq);
> + else {
According to CodingStyle, {} should be an all branches of *if* statement,
if it's used at least in one branch.
WBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread