* [PATCH v4 1/5] mfd: mt6397: create irq mappings in mfd core driver
2017-09-17 8:00 [PATCH v4 0/5] Add MediaTek PMIC keys support Chen Zhong
@ 2017-09-17 8:00 ` Chen Zhong
2017-09-17 8:00 ` [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys Chen Zhong
` (3 subsequent siblings)
4 siblings, 0 replies; 12+ messages in thread
From: Chen Zhong @ 2017-09-17 8:00 UTC (permalink / raw)
To: Dmitry Torokhov, Rob Herring, Lee Jones, Alexandre Belloni
Cc: Mark Rutland, Matthias Brugger, Eddie Huang, Alessandro Zummo,
Andi Shyti, Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
Chen Zhong, linux-input, devicetree, linux-arm-kernel,
linux-mediatek, linux-kernel, linux-rtc
The core driver should create and manage irq mappings instead of
leaf drivers. This patch change to pass irq domain to
devm_mfd_add_devices() and it will create mapping for irq resources
automatically. And remove irq mapping in rtc driver since this has
been done in core driver.
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
---
drivers/mfd/mt6397-core.c | 4 ++--
drivers/rtc/rtc-mt6397.c | 7 +++----
2 files changed, 5 insertions(+), 6 deletions(-)
diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c
index 04a601f..6546d7f 100644
--- a/drivers/mfd/mt6397-core.c
+++ b/drivers/mfd/mt6397-core.c
@@ -289,7 +289,7 @@ static int mt6397_probe(struct platform_device *pdev)
ret = devm_mfd_add_devices(&pdev->dev, -1, mt6323_devs,
ARRAY_SIZE(mt6323_devs), NULL,
- 0, NULL);
+ 0, pmic->irq_domain);
break;
case MT6397_CID_CODE:
@@ -304,7 +304,7 @@ static int mt6397_probe(struct platform_device *pdev)
ret = devm_mfd_add_devices(&pdev->dev, -1, mt6397_devs,
ARRAY_SIZE(mt6397_devs), NULL,
- 0, NULL);
+ 0, pmic->irq_domain);
break;
default:
diff --git a/drivers/rtc/rtc-mt6397.c b/drivers/rtc/rtc-mt6397.c
index 1a61fa5..385f830 100644
--- a/drivers/rtc/rtc-mt6397.c
+++ b/drivers/rtc/rtc-mt6397.c
@@ -322,10 +322,9 @@ static int mtk_rtc_probe(struct platform_device *pdev)
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
rtc->addr_base = res->start;
- res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
- rtc->irq = irq_create_mapping(mt6397_chip->irq_domain, res->start);
- if (rtc->irq <= 0)
- return -EINVAL;
+ rtc->irq = platform_get_irq(pdev, 0);
+ if (rtc->irq < 0)
+ return rtc->irq;
rtc->regmap = mt6397_chip->regmap;
rtc->dev = &pdev->dev;
--
1.7.9.5
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-17 8:00 [PATCH v4 0/5] Add MediaTek PMIC keys support Chen Zhong
2017-09-17 8:00 ` [PATCH v4 1/5] mfd: mt6397: create irq mappings in mfd core driver Chen Zhong
@ 2017-09-17 8:00 ` Chen Zhong
2017-09-20 20:53 ` Rob Herring
2017-09-17 8:00 ` [PATCH v4 3/5] dt-bindings: mfd: Add bindings for the keys as subnode of PMIC Chen Zhong
` (2 subsequent siblings)
4 siblings, 1 reply; 12+ messages in thread
From: Chen Zhong @ 2017-09-17 8:00 UTC (permalink / raw)
To: Dmitry Torokhov, Rob Herring, Lee Jones, Alexandre Belloni
Cc: Mark Rutland, Matthias Brugger, Eddie Huang, Alessandro Zummo,
Andi Shyti, Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
Chen Zhong, linux-input, devicetree, linux-arm-kernel,
linux-mediatek, linux-kernel, linux-rtc
This patch adds the device tree binding documentation for the MediaTek
pmic keys found on PMIC MT6397/MT6323.
Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
---
.../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
1 file changed, 41 insertions(+)
create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
new file mode 100644
index 0000000..fd48ff7
--- /dev/null
+++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
@@ -0,0 +1,41 @@
+MediaTek MT6397/MT6323 PMIC Keys Device Driver
+
+There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
+and homekey. The key functions are defined as the subnode of the function
+node provided by MT6397/MT6323 PMIC that is being defined as one kind
+of Muti-Function Device (MFD)
+
+For MT6397/MT6323 MFD bindings see:
+Documentation/devicetree/bindings/mfd/mt6397.txt
+
+Required properties:
+- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
+- linux,keycodes: Specifies the numeric keycode values to
+ be used for reporting keys presses. The array can
+ contain up to 2 entries.
+
+Optional Properties:
+- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
+ or not. This can be customized depends on board design.
+- wakeup-source: PMIC keys can be used as wakeup sources.
+- mediatek,long-press-mode: Long press key shutdown setting, 1 for
+ pwrkey only, 2 for pwrkey/homekey together, others for disabled.
+- debounce-interval: Long press key shutdown debouncing interval time
+ in seconds. 0/1/2/3 for 8/11/14/5 seconds. If not specified defaults to 0.
+
+Example:
+
+ pmic: mt6397 {
+ compatible = "mediatek,mt6397";
+
+ ...
+
+ mt6397keys: mt6397keys {
+ compatible = "mediatek,mt6397-keys";
+ linux,keycodes = <116>, <114>;
+ mediatek,wakeup-keys = <1>, <0>;
+ wakeup-source;
+ mediatek,long-press-mode = <1>;
+ debounce-interval = <0>;
+ };
+ };
--
1.7.9.5
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-17 8:00 ` [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys Chen Zhong
@ 2017-09-20 20:53 ` Rob Herring
2017-09-20 21:14 ` Dmitry Torokhov
2017-09-23 6:38 ` Chen Zhong
0 siblings, 2 replies; 12+ messages in thread
From: Rob Herring @ 2017-09-20 20:53 UTC (permalink / raw)
To: Chen Zhong
Cc: Dmitry Torokhov, Lee Jones, Alexandre Belloni, Mark Rutland,
Matthias Brugger, Eddie Huang, Alessandro Zummo, Andi Shyti,
Jaechul Lee, Krzysztof Kozlowski, Linus Walleij, linux-input,
devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
linux-rtc
On Sun, Sep 17, 2017 at 04:00:49PM +0800, Chen Zhong wrote:
> This patch adds the device tree binding documentation for the MediaTek
> pmic keys found on PMIC MT6397/MT6323.
>
> Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
> ---
> .../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
> 1 file changed, 41 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
>
> diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> new file mode 100644
> index 0000000..fd48ff7
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> @@ -0,0 +1,41 @@
> +MediaTek MT6397/MT6323 PMIC Keys Device Driver
> +
> +There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
> +and homekey. The key functions are defined as the subnode of the function
> +node provided by MT6397/MT6323 PMIC that is being defined as one kind
> +of Muti-Function Device (MFD)
> +
> +For MT6397/MT6323 MFD bindings see:
> +Documentation/devicetree/bindings/mfd/mt6397.txt
> +
> +Required properties:
> +- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
> +- linux,keycodes: Specifies the numeric keycode values to
> + be used for reporting keys presses. The array can
> + contain up to 2 entries.
> +
> +Optional Properties:
> +- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
> + or not. This can be customized depends on board design.
I think this should be a common property if we're going to put into DT.
Something like "wakeup-scancodes" to be clear the values are the raw
scancodes. Alternatively, we could list Linux keycodes instead with
something like "linux,wakeup-keycodes".
> +- wakeup-source: PMIC keys can be used as wakeup sources.
Just "See ../power/wakeup-source.txt" for the description.
> +- mediatek,long-press-mode: Long press key shutdown setting, 1 for
> + pwrkey only, 2 for pwrkey/homekey together, others for disabled.
> +- debounce-interval: Long press key shutdown debouncing interval time
> + in seconds. 0/1/2/3 for 8/11/14/5 seconds. If not specified defaults to 0.
This property units should be in milliseconds. However, this doesn't
sound like debounce filtering time if 5-14 seconds. That sounds like
forced power off time (i.e. for a hung device). This also should be
common. I imagine we already have some drivers with similar properties.
Rob
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-20 20:53 ` Rob Herring
@ 2017-09-20 21:14 ` Dmitry Torokhov
2017-09-23 6:38 ` Chen Zhong
1 sibling, 0 replies; 12+ messages in thread
From: Dmitry Torokhov @ 2017-09-20 21:14 UTC (permalink / raw)
To: Rob Herring
Cc: Chen Zhong, Lee Jones, Alexandre Belloni, Mark Rutland,
Matthias Brugger, Eddie Huang, Alessandro Zummo, Andi Shyti,
Jaechul Lee, Krzysztof Kozlowski, Linus Walleij, linux-input,
devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
linux-rtc
On Wed, Sep 20, 2017 at 03:53:01PM -0500, Rob Herring wrote:
> On Sun, Sep 17, 2017 at 04:00:49PM +0800, Chen Zhong wrote:
> > This patch adds the device tree binding documentation for the MediaTek
> > pmic keys found on PMIC MT6397/MT6323.
> >
> > Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
> > ---
> > .../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
> > 1 file changed, 41 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> >
> > diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > new file mode 100644
> > index 0000000..fd48ff7
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > @@ -0,0 +1,41 @@
> > +MediaTek MT6397/MT6323 PMIC Keys Device Driver
> > +
> > +There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
> > +and homekey. The key functions are defined as the subnode of the function
> > +node provided by MT6397/MT6323 PMIC that is being defined as one kind
> > +of Muti-Function Device (MFD)
> > +
> > +For MT6397/MT6323 MFD bindings see:
> > +Documentation/devicetree/bindings/mfd/mt6397.txt
> > +
> > +Required properties:
> > +- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
> > +- linux,keycodes: Specifies the numeric keycode values to
> > + be used for reporting keys presses. The array can
> > + contain up to 2 entries.
> > +
> > +Optional Properties:
> > +- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
> > + or not. This can be customized depends on board design.
>
> I think this should be a common property if we're going to put into DT.
> Something like "wakeup-scancodes" to be clear the values are the raw
> scancodes. Alternatively, we could list Linux keycodes instead with
> something like "linux,wakeup-keycodes".
Should we go the gpio-keys way and describe keys as sub-nodes, possibly
using address as index?
mt6397keys: mt6397keys {
...
power@0 {
linux,code = <116>;
wakeup-source;
};
home@1 {
linux,code = <...>;
};
};
Thanks.
--
Dmitry
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-20 20:53 ` Rob Herring
2017-09-20 21:14 ` Dmitry Torokhov
@ 2017-09-23 6:38 ` Chen Zhong
2017-09-23 6:47 ` Chen Zhong
1 sibling, 1 reply; 12+ messages in thread
From: Chen Zhong @ 2017-09-23 6:38 UTC (permalink / raw)
To: Rob Herring
Cc: Dmitry Torokhov, Lee Jones, Alexandre Belloni, Mark Rutland,
Matthias Brugger, Eddie Huang, Alessandro Zummo, Andi Shyti,
Jaechul Lee, Krzysztof Kozlowski, Linus Walleij, linux-input,
devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
linux-rtc
On Wed, 2017-09-20 at 15:53 -0500, Rob Herring wrote:
> On Sun, Sep 17, 2017 at 04:00:49PM +0800, Chen Zhong wrote:
> > This patch adds the device tree binding documentation for the MediaTek
> > pmic keys found on PMIC MT6397/MT6323.
> >
> > Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
> > ---
> > .../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
> > 1 file changed, 41 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> >
> > diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > new file mode 100644
> > index 0000000..fd48ff7
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > @@ -0,0 +1,41 @@
> > +MediaTek MT6397/MT6323 PMIC Keys Device Driver
> > +
> > +There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
> > +and homekey. The key functions are defined as the subnode of the function
> > +node provided by MT6397/MT6323 PMIC that is being defined as one kind
> > +of Muti-Function Device (MFD)
> > +
> > +For MT6397/MT6323 MFD bindings see:
> > +Documentation/devicetree/bindings/mfd/mt6397.txt
> > +
> > +Required properties:
> > +- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
> > +- linux,keycodes: Specifies the numeric keycode values to
> > + be used for reporting keys presses. The array can
> > + contain up to 2 entries.
> > +
> > +Optional Properties:
> > +- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
> > + or not. This can be customized depends on board design.
>
> I think this should be a common property if we're going to put into DT.
> Something like "wakeup-scancodes" to be clear the values are the raw
> scancodes. Alternatively, we could list Linux keycodes instead with
> something like "linux,wakeup-keycodes".
>
> > +- wakeup-source: PMIC keys can be used as wakeup sources.
>
> Just "See ../power/wakeup-source.txt" for the description.
>
> > +- mediatek,long-press-mode: Long press key shutdown setting, 1 for
> > + pwrkey only, 2 for pwrkey/homekey together, others for disabled.
> > +- debounce-interval: Long press key shutdown debouncing interval time
> > + in seconds. 0/1/2/3 for 8/11/14/5 seconds. If not specified defaults to 0.
>
> This property units should be in milliseconds. However, this doesn't
> sound like debounce filtering time if 5-14 seconds. That sounds like
> forced power off time (i.e. for a hung device). This also should be
> common. I imagine we already have some drivers with similar properties.
Hi Rob,
I searched in kernel documents and found a similar usage in
"ti,palmas-pwrbutton.txt"
"- ti,palmas-long-press-seconds: Duration in seconds which the power
button should be kept pressed for Palmas to power off automatically."
Could I just wrote it like this?
mediatek,long-press-seconds = <0>;
And for the wakeup source part, how about Dmitry's suggestion?
The whole device node would be:
mt6397keys: mt6397keys {
compatible = "mediatek,mt6397-keys";
mediatek,long-press-mode = <1>;
mediatek,long-press-seconds = <0>;
power@0 {
linux,code = <116>;
wakeup-source;
};
home@0 {
linux,code = <114>;
};
};
Thank you.
>
> Rob
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-23 6:38 ` Chen Zhong
@ 2017-09-23 6:47 ` Chen Zhong
2017-09-25 4:11 ` Rob Herring
0 siblings, 1 reply; 12+ messages in thread
From: Chen Zhong @ 2017-09-23 6:47 UTC (permalink / raw)
To: Rob Herring
Cc: Dmitry Torokhov, Lee Jones, Alexandre Belloni, Mark Rutland,
Matthias Brugger, Eddie Huang, Alessandro Zummo, Andi Shyti,
Jaechul Lee, Krzysztof Kozlowski, Linus Walleij, linux-input,
devicetree, linux-arm-kernel, linux-mediatek, linux-kernel,
linux-rtc
Sorry for the typo.
On Sat, 2017-09-23 at 14:38 +0800, Chen Zhong wrote:
> On Wed, 2017-09-20 at 15:53 -0500, Rob Herring wrote:
> > On Sun, Sep 17, 2017 at 04:00:49PM +0800, Chen Zhong wrote:
> > > This patch adds the device tree binding documentation for the MediaTek
> > > pmic keys found on PMIC MT6397/MT6323.
> > >
> > > Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
> > > ---
> > > .../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
> > > 1 file changed, 41 insertions(+)
> > > create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > >
> > > diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > > new file mode 100644
> > > index 0000000..fd48ff7
> > > --- /dev/null
> > > +++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> > > @@ -0,0 +1,41 @@
> > > +MediaTek MT6397/MT6323 PMIC Keys Device Driver
> > > +
> > > +There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
> > > +and homekey. The key functions are defined as the subnode of the function
> > > +node provided by MT6397/MT6323 PMIC that is being defined as one kind
> > > +of Muti-Function Device (MFD)
> > > +
> > > +For MT6397/MT6323 MFD bindings see:
> > > +Documentation/devicetree/bindings/mfd/mt6397.txt
> > > +
> > > +Required properties:
> > > +- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
> > > +- linux,keycodes: Specifies the numeric keycode values to
> > > + be used for reporting keys presses. The array can
> > > + contain up to 2 entries.
> > > +
> > > +Optional Properties:
> > > +- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
> > > + or not. This can be customized depends on board design.
> >
> > I think this should be a common property if we're going to put into DT.
> > Something like "wakeup-scancodes" to be clear the values are the raw
> > scancodes. Alternatively, we could list Linux keycodes instead with
> > something like "linux,wakeup-keycodes".
> >
> > > +- wakeup-source: PMIC keys can be used as wakeup sources.
> >
> > Just "See ../power/wakeup-source.txt" for the description.
> >
> > > +- mediatek,long-press-mode: Long press key shutdown setting, 1 for
> > > + pwrkey only, 2 for pwrkey/homekey together, others for disabled.
> > > +- debounce-interval: Long press key shutdown debouncing interval time
> > > + in seconds. 0/1/2/3 for 8/11/14/5 seconds. If not specified defaults to 0.
> >
> > This property units should be in milliseconds. However, this doesn't
> > sound like debounce filtering time if 5-14 seconds. That sounds like
> > forced power off time (i.e. for a hung device). This also should be
> > common. I imagine we already have some drivers with similar properties.
>
> Hi Rob,
>
> I searched in kernel documents and found a similar usage in
> "ti,palmas-pwrbutton.txt"
> "- ti,palmas-long-press-seconds: Duration in seconds which the power
> button should be kept pressed for Palmas to power off automatically."
>
> Could I just wrote it like this?
> mediatek,long-press-seconds = <0>;
>
> And for the wakeup source part, how about Dmitry's suggestion?
> The whole device node would be:
>
> mt6397keys: mt6397keys {
> compatible = "mediatek,mt6397-keys";
> mediatek,long-press-mode = <1>;
> mediatek,long-press-seconds = <0>;
>
> power@0 {
> linux,code = <116>;
> wakeup-source;
> };
>
> home@0 {
should be home@1 {
> linux,code = <114>;
> };
> };
>
> Thank you.
>
> >
> > Rob
>
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-23 6:47 ` Chen Zhong
@ 2017-09-25 4:11 ` Rob Herring
2017-09-25 8:14 ` Chen Zhong
0 siblings, 1 reply; 12+ messages in thread
From: Rob Herring @ 2017-09-25 4:11 UTC (permalink / raw)
To: Chen Zhong
Cc: Dmitry Torokhov, Lee Jones, Alexandre Belloni, Mark Rutland,
Matthias Brugger, Eddie Huang, Alessandro Zummo, Andi Shyti,
Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
linux-input@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-mediatek,
linux-kernel@vger.kernel.org, linux-rtc
On Sat, Sep 23, 2017 at 1:47 AM, Chen Zhong <chen.zhong@mediatek.com> wrote:
> Sorry for the typo.
>
> On Sat, 2017-09-23 at 14:38 +0800, Chen Zhong wrote:
>> On Wed, 2017-09-20 at 15:53 -0500, Rob Herring wrote:
>> > On Sun, Sep 17, 2017 at 04:00:49PM +0800, Chen Zhong wrote:
>> > > This patch adds the device tree binding documentation for the MediaTek
>> > > pmic keys found on PMIC MT6397/MT6323.
>> > >
>> > > Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
>> > > ---
>> > > .../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
>> > > 1 file changed, 41 insertions(+)
>> > > create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
>> > >
>> > > diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
>> > > new file mode 100644
>> > > index 0000000..fd48ff7
>> > > --- /dev/null
>> > > +++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
>> > > @@ -0,0 +1,41 @@
>> > > +MediaTek MT6397/MT6323 PMIC Keys Device Driver
>> > > +
>> > > +There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
>> > > +and homekey. The key functions are defined as the subnode of the function
>> > > +node provided by MT6397/MT6323 PMIC that is being defined as one kind
>> > > +of Muti-Function Device (MFD)
>> > > +
>> > > +For MT6397/MT6323 MFD bindings see:
>> > > +Documentation/devicetree/bindings/mfd/mt6397.txt
>> > > +
>> > > +Required properties:
>> > > +- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
>> > > +- linux,keycodes: Specifies the numeric keycode values to
>> > > + be used for reporting keys presses. The array can
>> > > + contain up to 2 entries.
>> > > +
>> > > +Optional Properties:
>> > > +- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
>> > > + or not. This can be customized depends on board design.
>> >
>> > I think this should be a common property if we're going to put into DT.
>> > Something like "wakeup-scancodes" to be clear the values are the raw
>> > scancodes. Alternatively, we could list Linux keycodes instead with
>> > something like "linux,wakeup-keycodes".
>> >
>> > > +- wakeup-source: PMIC keys can be used as wakeup sources.
>> >
>> > Just "See ../power/wakeup-source.txt" for the description.
>> >
>> > > +- mediatek,long-press-mode: Long press key shutdown setting, 1 for
>> > > + pwrkey only, 2 for pwrkey/homekey together, others for disabled.
>> > > +- debounce-interval: Long press key shutdown debouncing interval time
>> > > + in seconds. 0/1/2/3 for 8/11/14/5 seconds. If not specified defaults to 0.
>> >
>> > This property units should be in milliseconds. However, this doesn't
>> > sound like debounce filtering time if 5-14 seconds. That sounds like
>> > forced power off time (i.e. for a hung device). This also should be
>> > common. I imagine we already have some drivers with similar properties.
>>
>> Hi Rob,
>>
>> I searched in kernel documents and found a similar usage in
>> "ti,palmas-pwrbutton.txt"
>> "- ti,palmas-long-press-seconds: Duration in seconds which the power
>> button should be kept pressed for Palmas to power off automatically."
>>
>> Could I just wrote it like this?
>> mediatek,long-press-seconds = <0>;
That doesn't really tell what the long press does. How about
"power-off-time-sec"? Surprisingly we don't have a common keyboard
binding doc, so please start one and document it there. Then just
refer to it.
>>
>> And for the wakeup source part, how about Dmitry's suggestion?
It's fine for me.
>> The whole device node would be:
>>
>> mt6397keys: mt6397keys {
>> compatible = "mediatek,mt6397-keys";
>> mediatek,long-press-mode = <1>;
>> mediatek,long-press-seconds = <0>;
>>
>> power@0 {
>> linux,code = <116>;
linux,keycodes
Also, you either need a reg property with "0" or drop the unit address.
>> wakeup-source;
>> };
>>
>> home@0 {
> should be home@1 {
>> linux,code = <114>;
>> };
>> };
>>
>> Thank you.
>>
>> >
>> > Rob
>>
>
>
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys
2017-09-25 4:11 ` Rob Herring
@ 2017-09-25 8:14 ` Chen Zhong
0 siblings, 0 replies; 12+ messages in thread
From: Chen Zhong @ 2017-09-25 8:14 UTC (permalink / raw)
To: Rob Herring
Cc: Dmitry Torokhov, Lee Jones, Alexandre Belloni, Mark Rutland,
Matthias Brugger, Eddie Huang, Alessandro Zummo, Andi Shyti,
Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
linux-input@vger.kernel.org, devicetree@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-mediatek,
linux-kernel@vger.kernel.org, linux-rtc
On Sun, 2017-09-24 at 23:11 -0500, Rob Herring wrote:
> On Sat, Sep 23, 2017 at 1:47 AM, Chen Zhong <chen.zhong@mediatek.com> wrote:
> > Sorry for the typo.
> >
> > On Sat, 2017-09-23 at 14:38 +0800, Chen Zhong wrote:
> >> On Wed, 2017-09-20 at 15:53 -0500, Rob Herring wrote:
> >> > On Sun, Sep 17, 2017 at 04:00:49PM +0800, Chen Zhong wrote:
> >> > > This patch adds the device tree binding documentation for the MediaTek
> >> > > pmic keys found on PMIC MT6397/MT6323.
> >> > >
> >> > > Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
> >> > > ---
> >> > > .../devicetree/bindings/input/mtk-pmic-keys.txt | 41 ++++++++++++++++++++
> >> > > 1 file changed, 41 insertions(+)
> >> > > create mode 100644 Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> >> > >
> >> > > diff --git a/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> >> > > new file mode 100644
> >> > > index 0000000..fd48ff7
> >> > > --- /dev/null
> >> > > +++ b/Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
> >> > > @@ -0,0 +1,41 @@
> >> > > +MediaTek MT6397/MT6323 PMIC Keys Device Driver
> >> > > +
> >> > > +There are two key functions provided by MT6397/MT6323 PMIC, pwrkey
> >> > > +and homekey. The key functions are defined as the subnode of the function
> >> > > +node provided by MT6397/MT6323 PMIC that is being defined as one kind
> >> > > +of Muti-Function Device (MFD)
> >> > > +
> >> > > +For MT6397/MT6323 MFD bindings see:
> >> > > +Documentation/devicetree/bindings/mfd/mt6397.txt
> >> > > +
> >> > > +Required properties:
> >> > > +- compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
> >> > > +- linux,keycodes: Specifies the numeric keycode values to
> >> > > + be used for reporting keys presses. The array can
> >> > > + contain up to 2 entries.
> >> > > +
> >> > > +Optional Properties:
> >> > > +- mediatek,wakeup-keys: Specifies each key can be used as a wakeup source
> >> > > + or not. This can be customized depends on board design.
> >> >
> >> > I think this should be a common property if we're going to put into DT.
> >> > Something like "wakeup-scancodes" to be clear the values are the raw
> >> > scancodes. Alternatively, we could list Linux keycodes instead with
> >> > something like "linux,wakeup-keycodes".
> >> >
> >> > > +- wakeup-source: PMIC keys can be used as wakeup sources.
> >> >
> >> > Just "See ../power/wakeup-source.txt" for the description.
> >> >
> >> > > +- mediatek,long-press-mode: Long press key shutdown setting, 1 for
> >> > > + pwrkey only, 2 for pwrkey/homekey together, others for disabled.
> >> > > +- debounce-interval: Long press key shutdown debouncing interval time
> >> > > + in seconds. 0/1/2/3 for 8/11/14/5 seconds. If not specified defaults to 0.
> >> >
> >> > This property units should be in milliseconds. However, this doesn't
> >> > sound like debounce filtering time if 5-14 seconds. That sounds like
> >> > forced power off time (i.e. for a hung device). This also should be
> >> > common. I imagine we already have some drivers with similar properties.
> >>
> >> Hi Rob,
> >>
> >> I searched in kernel documents and found a similar usage in
> >> "ti,palmas-pwrbutton.txt"
> >> "- ti,palmas-long-press-seconds: Duration in seconds which the power
> >> button should be kept pressed for Palmas to power off automatically."
> >>
> >> Could I just wrote it like this?
> >> mediatek,long-press-seconds = <0>;
>
> That doesn't really tell what the long press does. How about
> "power-off-time-sec"? Surprisingly we don't have a common keyboard
> binding doc, so please start one and document it there. Then just
> refer to it.
>
OK, I will add a common document named "keys.txt" and put the long press
property "power-off-time-sec" there as a common property.
> >>
> >> And for the wakeup source part, how about Dmitry's suggestion?
>
> It's fine for me.
>
> >> The whole device node would be:
> >>
> >> mt6397keys: mt6397keys {
> >> compatible = "mediatek,mt6397-keys";
> >> mediatek,long-press-mode = <1>;
> >> mediatek,long-press-seconds = <0>;
> >>
> >> power@0 {
> >> linux,code = <116>;
>
> linux,keycodes
>
> Also, you either need a reg property with "0" or drop the unit address.
There is no need to add reg property here, I'll drop the unit address.
Thank you.
>
> >> wakeup-source;
> >> };
> >>
> >> home@0 {
> > should be home@1 {
> >> linux,code = <114>;
> >> };
> >> };
> >>
> >> Thank you.
> >>
> >> >
> >> > Rob
> >>
> >
> >
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 3/5] dt-bindings: mfd: Add bindings for the keys as subnode of PMIC
2017-09-17 8:00 [PATCH v4 0/5] Add MediaTek PMIC keys support Chen Zhong
2017-09-17 8:00 ` [PATCH v4 1/5] mfd: mt6397: create irq mappings in mfd core driver Chen Zhong
2017-09-17 8:00 ` [PATCH v4 2/5] dt-bindings: input: Add document bindings for mtk-pmic-keys Chen Zhong
@ 2017-09-17 8:00 ` Chen Zhong
2017-09-17 8:00 ` [PATCH v4 4/5] input: Add MediaTek PMIC keys support Chen Zhong
2017-09-17 8:00 ` [PATCH v4 5/5] mfd: mt6397: Add PMIC keys support to MT6397 driver Chen Zhong
4 siblings, 0 replies; 12+ messages in thread
From: Chen Zhong @ 2017-09-17 8:00 UTC (permalink / raw)
To: Dmitry Torokhov, Rob Herring, Lee Jones, Alexandre Belloni
Cc: Mark Rutland, Matthias Brugger, Eddie Huang, Alessandro Zummo,
Andi Shyti, Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
Chen Zhong, linux-input, devicetree, linux-arm-kernel,
linux-mediatek, linux-kernel, linux-rtc
This patch adds documentation for device tree bindings for keys support
as the subnode of MT6397/MT6323 PMIC.
Acked-by: Rob Herring <robh@kernel.org>
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
---
Documentation/devicetree/bindings/mfd/mt6397.txt | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
index 522a3bb..d1df77f 100644
--- a/Documentation/devicetree/bindings/mfd/mt6397.txt
+++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
@@ -7,6 +7,7 @@ MT6397/MT6323 is a multifunction device with the following sub modules:
- GPIO
- Clock
- LED
+- Keys
It is interfaced to host controller using SPI interface by a proprietary hardware
called PMIC wrapper or pwrap. MT6397/MT6323 MFD is a child device of pwrap.
@@ -40,6 +41,11 @@ Optional subnodes:
- compatible: "mediatek,mt6323-led"
see Documentation/devicetree/bindings/leds/leds-mt6323.txt
+- keys
+ Required properties:
+ - compatible: "mediatek,mt6397-keys" or "mediatek,mt6323-keys"
+ see Documentation/devicetree/bindings/input/mtk-pmic-keys.txt
+
Example:
pwrap: pwrap@1000f000 {
compatible = "mediatek,mt8135-pwrap";
--
1.7.9.5
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v4 4/5] input: Add MediaTek PMIC keys support
2017-09-17 8:00 [PATCH v4 0/5] Add MediaTek PMIC keys support Chen Zhong
` (2 preceding siblings ...)
2017-09-17 8:00 ` [PATCH v4 3/5] dt-bindings: mfd: Add bindings for the keys as subnode of PMIC Chen Zhong
@ 2017-09-17 8:00 ` Chen Zhong
2017-09-17 8:00 ` [PATCH v4 5/5] mfd: mt6397: Add PMIC keys support to MT6397 driver Chen Zhong
4 siblings, 0 replies; 12+ messages in thread
From: Chen Zhong @ 2017-09-17 8:00 UTC (permalink / raw)
To: Dmitry Torokhov, Rob Herring, Lee Jones, Alexandre Belloni
Cc: Mark Rutland, Matthias Brugger, Eddie Huang, Alessandro Zummo,
Andi Shyti, Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
Chen Zhong, linux-input, devicetree, linux-arm-kernel,
linux-mediatek, linux-kernel, linux-rtc
This patch add support to handle MediaTek PMIC MT6397/MT6323 key
interrupts including pwrkey and homekey, also add setting for
long press key shutdown behavior.
Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
---
drivers/input/keyboard/Kconfig | 9 +
drivers/input/keyboard/Makefile | 1 +
drivers/input/keyboard/mtk-pmic-keys.c | 354 ++++++++++++++++++++++++++++++++
3 files changed, 364 insertions(+)
create mode 100644 drivers/input/keyboard/mtk-pmic-keys.c
diff --git a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
index 4c4ab1c..bd4e20a 100644
--- a/drivers/input/keyboard/Kconfig
+++ b/drivers/input/keyboard/Kconfig
@@ -756,4 +756,13 @@ config KEYBOARD_BCM
To compile this driver as a module, choose M here: the
module will be called bcm-keypad.
+config KEYBOARD_MTK_PMIC
+ tristate "MediaTek PMIC keys support"
+ depends on MFD_MT6397
+ help
+ Say Y here if you want to use the pmic keys (powerkey/homekey).
+
+ To compile this driver as a module, choose M here: the
+ module will be called pmic-keys.
+
endif
diff --git a/drivers/input/keyboard/Makefile b/drivers/input/keyboard/Makefile
index d2338ba..20c0b98 100644
--- a/drivers/input/keyboard/Makefile
+++ b/drivers/input/keyboard/Makefile
@@ -40,6 +40,7 @@ obj-$(CONFIG_KEYBOARD_MATRIX) += matrix_keypad.o
obj-$(CONFIG_KEYBOARD_MAX7359) += max7359_keypad.o
obj-$(CONFIG_KEYBOARD_MCS) += mcs_touchkey.o
obj-$(CONFIG_KEYBOARD_MPR121) += mpr121_touchkey.o
+obj-$(CONFIG_KEYBOARD_MTK_PMIC) += mtk-pmic-keys.o
obj-$(CONFIG_KEYBOARD_NEWTON) += newtonkbd.o
obj-$(CONFIG_KEYBOARD_NOMADIK) += nomadik-ske-keypad.o
obj-$(CONFIG_KEYBOARD_NSPIRE) += nspire-keypad.o
diff --git a/drivers/input/keyboard/mtk-pmic-keys.c b/drivers/input/keyboard/mtk-pmic-keys.c
new file mode 100644
index 0000000..23b6ee4
--- /dev/null
+++ b/drivers/input/keyboard/mtk-pmic-keys.c
@@ -0,0 +1,354 @@
+/*
+ * Copyright (C) 2017 MediaTek, Inc.
+ *
+ * Author: Chen Zhong <chen.zhong@mediatek.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/input.h>
+#include <linux/interrupt.h>
+#include <linux/platform_device.h>
+#include <linux/kernel.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
+#include <linux/regmap.h>
+#include <linux/mfd/mt6323/registers.h>
+#include <linux/mfd/mt6397/registers.h>
+#include <linux/mfd/mt6397/core.h>
+
+#define MTK_PMIC_PWRKEY_RST_EN_MASK 0x1
+#define MTK_PMIC_PWRKEY_RST_EN_SHIFT 6
+#define MTK_PMIC_HOMEKEY_RST_EN_MASK 0x1
+#define MTK_PMIC_HOMEKEY_RST_EN_SHIFT 5
+#define MTK_PMIC_RST_DU_MASK 0x3
+#define MTK_PMIC_RST_DU_SHIFT 8
+
+#define MTK_PMIC_PWRKEY_RST \
+ (MTK_PMIC_PWRKEY_RST_EN_MASK << MTK_PMIC_PWRKEY_RST_EN_SHIFT)
+#define MTK_PMIC_HOMEKEY_RST \
+ (MTK_PMIC_HOMEKEY_RST_EN_MASK << MTK_PMIC_HOMEKEY_RST_EN_SHIFT)
+
+#define MTK_PMIC_PWRKEY_INDEX 0
+#define MTK_PMIC_HOMEKEY_INDEX 1
+#define MTK_PMIC_MAX_KEY_COUNT 2
+
+struct mtk_pmic_keys_regs {
+ u32 deb_reg;
+ u32 deb_mask;
+ u32 intsel_reg;
+ u32 intsel_mask;
+};
+
+#define MTK_PMIC_KEYS_REGS(_deb_reg, _deb_mask, \
+ _intsel_reg, _intsel_mask) \
+{ \
+ .deb_reg = _deb_reg, \
+ .deb_mask = _deb_mask, \
+ .intsel_reg = _intsel_reg, \
+ .intsel_mask = _intsel_mask, \
+}
+
+struct mtk_pmic_regs {
+ const struct mtk_pmic_keys_regs keys_regs[MTK_PMIC_MAX_KEY_COUNT];
+ u32 pmic_rst_reg;
+};
+
+static const struct mtk_pmic_regs mt6397_regs = {
+ .keys_regs[MTK_PMIC_PWRKEY_INDEX] =
+ MTK_PMIC_KEYS_REGS(MT6397_CHRSTATUS,
+ 0x8, MT6397_INT_RSV, 0x10),
+ .keys_regs[MTK_PMIC_HOMEKEY_INDEX] =
+ MTK_PMIC_KEYS_REGS(MT6397_OCSTATUS2,
+ 0x10, MT6397_INT_RSV, 0x8),
+ .pmic_rst_reg = MT6397_TOP_RST_MISC,
+};
+
+static const struct mtk_pmic_regs mt6323_regs = {
+ .keys_regs[MTK_PMIC_PWRKEY_INDEX] =
+ MTK_PMIC_KEYS_REGS(MT6323_CHRSTATUS,
+ 0x2, MT6323_INT_MISC_CON, 0x10),
+ .keys_regs[MTK_PMIC_HOMEKEY_INDEX] =
+ MTK_PMIC_KEYS_REGS(MT6323_CHRSTATUS,
+ 0x4, MT6323_INT_MISC_CON, 0x8),
+ .pmic_rst_reg = MT6323_TOP_RST_MISC,
+};
+
+struct mtk_pmic_keys_info {
+ struct mtk_pmic_keys *keys;
+ const struct mtk_pmic_keys_regs *regs;
+ unsigned int keycode;
+ int irq;
+ bool wakeup:1;
+};
+
+struct mtk_pmic_keys {
+ struct input_dev *input_dev;
+ struct device *dev;
+ struct regmap *regmap;
+ struct mtk_pmic_keys_info keys[MTK_PMIC_MAX_KEY_COUNT];
+};
+
+enum mtk_pmic_keys_lp_mode {
+ LP_DISABLE,
+ LP_ONEKEY,
+ LP_TWOKEY,
+};
+
+static void mtk_pmic_keys_lp_reset_setup(struct mtk_pmic_keys *keys,
+ u32 pmic_rst_reg)
+{
+ int ret;
+ u32 long_press_mode, long_press_debounce;
+
+ ret = of_property_read_u32(keys->dev->of_node,
+ "debounce-interval", &long_press_debounce);
+ if (ret)
+ long_press_debounce = 0;
+
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_RST_DU_MASK << MTK_PMIC_RST_DU_SHIFT,
+ long_press_debounce << MTK_PMIC_RST_DU_SHIFT);
+
+ ret = of_property_read_u32(keys->dev->of_node,
+ "mediatek,long-press-mode", &long_press_mode);
+ if (ret)
+ long_press_mode = LP_DISABLE;
+
+ switch (long_press_mode) {
+ case LP_ONEKEY:
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_PWRKEY_RST,
+ MTK_PMIC_PWRKEY_RST);
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_HOMEKEY_RST,
+ 0);
+ break;
+ case LP_TWOKEY:
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_PWRKEY_RST,
+ MTK_PMIC_PWRKEY_RST);
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_HOMEKEY_RST,
+ MTK_PMIC_HOMEKEY_RST);
+ break;
+ case LP_DISABLE:
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_PWRKEY_RST,
+ 0);
+ regmap_update_bits(keys->regmap, pmic_rst_reg,
+ MTK_PMIC_HOMEKEY_RST,
+ 0);
+ break;
+ default:
+ break;
+ }
+}
+
+static irqreturn_t mtk_pmic_keys_irq_handler_thread(int irq, void *data)
+{
+ struct mtk_pmic_keys_info *info = data;
+ u32 key_deb, pressed;
+
+ regmap_read(info->keys->regmap, info->regs->deb_reg, &key_deb);
+
+ key_deb &= info->regs->deb_mask;
+
+ pressed = !key_deb;
+
+ input_report_key(info->keys->input_dev, info->keycode, pressed);
+ input_sync(info->keys->input_dev);
+
+ dev_dbg(info->keys->dev, "(%s) key =%d using PMIC\n",
+ pressed ? "pressed" : "released", info->keycode);
+
+ return IRQ_HANDLED;
+}
+
+static int mtk_pmic_key_setup(struct mtk_pmic_keys *keys,
+ struct mtk_pmic_keys_info *info)
+{
+ int ret;
+
+ info->keys = keys;
+
+ ret = regmap_update_bits(keys->regmap, info->regs->intsel_reg,
+ info->regs->intsel_mask,
+ info->regs->intsel_mask);
+ if (ret < 0)
+ return ret;
+
+ ret = devm_request_threaded_irq(keys->dev, info->irq, NULL,
+ mtk_pmic_keys_irq_handler_thread,
+ IRQF_ONESHOT | IRQF_TRIGGER_HIGH,
+ "mtk-pmic-keys", info);
+ if (ret) {
+ dev_err(keys->dev, "Failed to request IRQ: %d: %d\n",
+ info->irq, ret);
+ return ret;
+ }
+
+ input_set_capability(keys->input_dev, EV_KEY, info->keycode);
+
+ return 0;
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int mtk_pmic_keys_suspend(struct device *dev)
+{
+ struct mtk_pmic_keys *keys = dev_get_drvdata(dev);
+ int index;
+
+ for (index = 0; index < MTK_PMIC_MAX_KEY_COUNT; index++) {
+ if (keys->keys[index].wakeup)
+ enable_irq_wake(keys->keys[index].irq);
+ }
+
+ return 0;
+}
+
+static int mtk_pmic_keys_resume(struct device *dev)
+{
+ struct mtk_pmic_keys *keys = dev_get_drvdata(dev);
+ int index;
+
+ for (index = 0; index < MTK_PMIC_MAX_KEY_COUNT; index++) {
+ if (keys->keys[index].wakeup)
+ disable_irq_wake(keys->keys[index].irq);
+ }
+
+ return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(mtk_pmic_keys_pm_ops, mtk_pmic_keys_suspend,
+ mtk_pmic_keys_resume);
+
+static const struct of_device_id of_mtk_pmic_keys_match_tbl[] = {
+ {
+ .compatible = "mediatek,mt6397-keys",
+ .data = &mt6397_regs,
+ }, {
+ .compatible = "mediatek,mt6323-keys",
+ .data = &mt6323_regs,
+ }, {
+ /* sentinel */
+ }
+};
+MODULE_DEVICE_TABLE(of, of_mtk_pmic_keys_match_tbl);
+
+static int mtk_pmic_keys_probe(struct platform_device *pdev)
+{
+ int error, index = 0;
+ unsigned int keycount;
+ unsigned int keycodes[MTK_PMIC_MAX_KEY_COUNT];
+ unsigned int wakeup_srcs[MTK_PMIC_MAX_KEY_COUNT] = {0};
+ struct mt6397_chip *pmic_chip = dev_get_drvdata(pdev->dev.parent);
+ struct mtk_pmic_keys *keys;
+ const struct mtk_pmic_regs *mtk_pmic_regs;
+ struct input_dev *input_dev;
+ const struct of_device_id *of_id =
+ of_match_device(of_mtk_pmic_keys_match_tbl, &pdev->dev);
+
+ keys = devm_kzalloc(&pdev->dev, sizeof(*keys), GFP_KERNEL);
+ if (!keys)
+ return -ENOMEM;
+
+ keys->dev = &pdev->dev;
+ keys->regmap = pmic_chip->regmap;
+ mtk_pmic_regs = of_id->data;
+
+ keys->input_dev = input_dev = devm_input_allocate_device(keys->dev);
+ if (!input_dev) {
+ dev_err(keys->dev, "input allocate device fail.\n");
+ return -ENOMEM;
+ }
+
+ input_dev->name = "mtk-pmic-keys";
+ input_dev->id.bustype = BUS_HOST;
+ input_dev->id.vendor = 0x0001;
+ input_dev->id.product = 0x0001;
+ input_dev->id.version = 0x0001;
+
+ keycount = device_property_read_u32_array(keys->dev, "linux,keycodes",
+ NULL, 0);
+ if (keycount > MTK_PMIC_MAX_KEY_COUNT) {
+ dev_err(keys->dev, "too many keys defined (%d)\n", keycount);
+ return -EINVAL;
+ }
+
+ error = device_property_read_u32_array(keys->dev, "linux,keycodes",
+ keycodes, keycount);
+ if (error) {
+ dev_err(keys->dev,
+ "failed to read linux,keycode property: %d\n", error);
+ return error;
+ }
+
+ if (device_property_read_bool(keys->dev, "wakeup-source")) {
+ error = device_property_read_u32_array(keys->dev,
+ "mediatek,wakeup-keys",
+ wakeup_srcs, keycount);
+ if (error) {
+ dev_err(keys->dev,
+ "failed to read wakeup-source property: %d\n",
+ error);
+ return error;
+ }
+ }
+
+ for (index = 0; index < keycount; index++) {
+ keys->keys[index].regs = &mtk_pmic_regs->keys_regs[index];
+
+ keys->keys[index].irq = platform_get_irq(pdev, index);
+ if (keys->keys[index].irq < 0)
+ return keys->keys[index].irq;
+
+ keys->keys[index].keycode = keycodes[index];
+
+ if (wakeup_srcs[index])
+ keys->keys[index].wakeup = true;
+
+ error = mtk_pmic_key_setup(keys, &keys->keys[index]);
+ if (error)
+ return error;
+ }
+
+ error = input_register_device(input_dev);
+ if (error) {
+ dev_err(&pdev->dev,
+ "register input device failed (%d)\n", error);
+ return error;
+ }
+
+ mtk_pmic_keys_lp_reset_setup(keys, mtk_pmic_regs->pmic_rst_reg);
+
+ platform_set_drvdata(pdev, keys);
+
+ return 0;
+}
+
+static struct platform_driver pmic_keys_pdrv = {
+ .probe = mtk_pmic_keys_probe,
+ .driver = {
+ .name = "mtk-pmic-keys",
+ .of_match_table = of_mtk_pmic_keys_match_tbl,
+ .pm = &mtk_pmic_keys_pm_ops,
+ },
+};
+
+module_platform_driver(pmic_keys_pdrv);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Chen Zhong <chen.zhong@mediatek.com>");
+MODULE_DESCRIPTION("MTK pmic-keys driver v0.1");
--
1.7.9.5
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v4 5/5] mfd: mt6397: Add PMIC keys support to MT6397 driver
2017-09-17 8:00 [PATCH v4 0/5] Add MediaTek PMIC keys support Chen Zhong
` (3 preceding siblings ...)
2017-09-17 8:00 ` [PATCH v4 4/5] input: Add MediaTek PMIC keys support Chen Zhong
@ 2017-09-17 8:00 ` Chen Zhong
4 siblings, 0 replies; 12+ messages in thread
From: Chen Zhong @ 2017-09-17 8:00 UTC (permalink / raw)
To: Dmitry Torokhov, Rob Herring, Lee Jones, Alexandre Belloni
Cc: Mark Rutland, Matthias Brugger, Eddie Huang, Alessandro Zummo,
Andi Shyti, Jaechul Lee, Krzysztof Kozlowski, Linus Walleij,
Chen Zhong, linux-input, devicetree, linux-arm-kernel,
linux-mediatek, linux-kernel, linux-rtc
This patch adds compatible strings and interrupts for pmic keys
which serves as child device of MFD.
Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>
Signed-off-by: Chen Zhong <chen.zhong@mediatek.com>
---
drivers/mfd/mt6397-core.c | 22 +++++++++++++++++++++-
1 file changed, 21 insertions(+), 1 deletion(-)
diff --git a/drivers/mfd/mt6397-core.c b/drivers/mfd/mt6397-core.c
index 6546d7f..77b64bd 100644
--- a/drivers/mfd/mt6397-core.c
+++ b/drivers/mfd/mt6397-core.c
@@ -43,6 +43,16 @@
},
};
+static const struct resource mt6323_keys_resources[] = {
+ DEFINE_RES_IRQ(MT6323_IRQ_STATUS_PWRKEY),
+ DEFINE_RES_IRQ(MT6323_IRQ_STATUS_FCHRKEY),
+};
+
+static const struct resource mt6397_keys_resources[] = {
+ DEFINE_RES_IRQ(MT6397_IRQ_PWRKEY),
+ DEFINE_RES_IRQ(MT6397_IRQ_HOMEKEY),
+};
+
static const struct mfd_cell mt6323_devs[] = {
{
.name = "mt6323-regulator",
@@ -50,6 +60,11 @@
}, {
.name = "mt6323-led",
.of_compatible = "mediatek,mt6323-led"
+ }, {
+ .name = "mtk-pmic-keys",
+ .num_resources = ARRAY_SIZE(mt6323_keys_resources),
+ .resources = mt6323_keys_resources,
+ .of_compatible = "mediatek,mt6323-keys"
},
};
@@ -71,7 +86,12 @@
}, {
.name = "mt6397-pinctrl",
.of_compatible = "mediatek,mt6397-pinctrl",
- },
+ }, {
+ .name = "mtk-pmic-keys",
+ .num_resources = ARRAY_SIZE(mt6397_keys_resources),
+ .resources = mt6397_keys_resources,
+ .of_compatible = "mediatek,mt6397-keys"
+ }
};
static void mt6397_irq_lock(struct irq_data *data)
--
1.7.9.5
^ permalink raw reply related [flat|nested] 12+ messages in thread