The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for those IRQs then add IRQs capability to
the QUICC ENGINE GPIOs.
The number of GPIOs for which interrupts are supported depends on
the microcontroller:
- mpc8323 has 10 GPIOS supporting interrupts
- mpc8360 has 28 GPIOS supporting interrupts
- mpc8568 has 18 GPIOS supporting interrupts
Christophe Leroy (4):
soc: fsl: qe: Add an interrupt controller for QUICC Engine Ports
soc: fsl: qe: Change GPIO driver to a proper platform driver
soc: fsl: qe: Add support of IRQ in QE GPIO
dt-bindings: soc: fsl: qe: Add an interrupt controller for QUICC
Engine Ports
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++
drivers/soc/fsl/qe/Makefile | 2 +-
drivers/soc/fsl/qe/gpio.c | 108 ++++++++----
drivers/soc/fsl/qe/qe_ports_ic.c | 156 ++++++++++++++++++
4 files changed, 293 insertions(+), 36 deletions(-)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
create mode 100644 drivers/soc/fsl/qe/qe_ports_ic.c
--
2.49.0
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
Signed-off-by: Christophe Leroy <redacted>
---
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
@@ -0,0 +1,63 @@+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)++title:Freescale QUICC Engine I/O Ports Interrupt Controller++maintainers:+-name:Christophe Leroy+email:christophe.leroy@csgroup.eu++description:|+Interrupt controller for the QUICC Engine I/O ports found on some+Freescale/NXP PowerQUICC and QorIQ SoCs.++properties:+compatible:+enum:+-fsl,mpc8323-qe-ports-ic+-fsl,mpc8360-qe-ports-ic+-fsl,mpc8568-qe-ports-ic++reg:+description:Base address and size of the QE I/O Ports Interrupt Controller registers.+minItems:1+maxItems:1++interrupt-controller:+type:boolean+description:Indicates this node is an interrupt controller.++'#address-cells':+const:0+description:Must be 0.++'#interrupt-cells':+const:1+description:Number of cells to encode an interrupt specifier.++interrupts:+minItems:1+maxItems:1+description:Interrupt line to which the QE I/O Ports controller is connected.++interrupt-parent:+description:Phandle to the parent interrupt controller.++required:+-compatible+-reg+-interrupt-controller+-'#address-cells'+-'#interrupt-cells'+-interrupts+-interrupt-parent++examples:+-|+interrupt-controller@c00 {+interrupt-controller;+compatible = "fsl,mpc8323-qe-ports-ic";+#address-cells = <0>;+#interrupt-cells = <1>;+reg = <0xc00 0x18>;+interrupts = <74 0x8>;+interrupt-parent = <&ipic>;
In the QE, a few GPIOs are IRQ capable. Similarly to
commit 726bd223105c ("powerpc/8xx: Adding support of IRQ in MPC8xx
GPIO"), add IRQ support to QE GPIO.
Add property 'fsl,qe-gpio-irq-mask' similar to
'fsl,cpm1-gpio-irq-mask' that define which of the GPIOs have IRQs.
Here is an exemple for port B of mpc8323 which has IRQs for
GPIOs PB7, PB9, PB25 and PB27.
qe_pio_b: gpio-controller@1418 {
#gpio-cells = <2>;
compatible = "fsl,mpc8323-qe-pario-bank";
reg = <0x1418 0x18>;
interrupts = <4 5 6 7>;
fsl,qe-gpio-irq-mask = <0x01400050>;
interrupt-parent = <&qepic>;
gpio-controller;
};
Signed-off-by: Christophe Leroy <redacted>
---
drivers/soc/fsl/qe/gpio.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
@@ -32,6 +33,8 @@ struct qe_gpio_chip {/* saved_regs used to restore dedicated functions */structqe_pio_regssaved_regs;++intirq[32];};staticvoidqe_gpio_save_regs(structof_mm_gpio_chip*mm_gc)
@@ -141,6 +144,13 @@ static int qe_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)return0;}+staticintqe_gpio_to_irq(structgpio_chip*gc,unsignedintgpio)+{+structqe_gpio_chip*qe_gc=gpiochip_get_data(gc);++returnqe_gc->irq[gpio]?:-ENXIO;+}+structqe_pin{/**Theqe_gpio_chipnameisunfortunate,weshouldchangethatto
@@ -304,6 +314,7 @@ static int qe_gpio_probe(struct platform_device *ofdev)structqe_gpio_chip*qe_gc;structof_mm_gpio_chip*mm_gc;structgpio_chip*gc;+u32mask;qe_gc=kzalloc(sizeof(*qe_gc),GFP_KERNEL);if(!qe_gc){
@@ -313,6 +324,14 @@ static int qe_gpio_probe(struct platform_device *ofdev)spin_lock_init(&qe_gc->lock);+if(!of_property_read_u32(np,"fsl,qe-gpio-irq-mask",&mask)){+inti,j;++for(i=0,j=0;i<32;i++)+if(mask&(1<<(31-i)))+qe_gc->irq[i]=irq_of_parse_and_map(np,j++);+}+mm_gc=&qe_gc->mm_gc;gc=&mm_gc->gc;
@@ -323,6 +342,7 @@ static int qe_gpio_probe(struct platform_device *ofdev)gc->get=qe_gpio_get;gc->set=qe_gpio_set;gc->set_multiple=qe_gpio_set_multiple;+gc->to_irq=qe_gpio_to_irq;ret=of_mm_gpiochip_add_data(np,mm_gc,qe_gc);if(!ret)
In order to be able to add interrupts to the GPIOs, first change the
QE GPIO driver to the proper platform driver in order to allow
initialisation to be done in the right order, otherwise the GPIOs
get added before the interrupts are registered.
Signed-off-by: Christophe Leroy <redacted>
---
drivers/soc/fsl/qe/gpio.c | 88 +++++++++++++++++++++++----------------
1 file changed, 53 insertions(+), 35 deletions(-)
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
The number of ports for which interrupts are supported depends on
the microcontroller:
- mpc8323 has 10 interrupts
- mpc8360 has 28 interrupts
- mpc8568 has 18 interrupts
So add this information as data of the compatible.
Signed-off-by: Christophe Leroy <redacted>
---
drivers/soc/fsl/qe/Makefile | 2 +-
drivers/soc/fsl/qe/qe_ports_ic.c | 156 +++++++++++++++++++++++++++++++
2 files changed, 157 insertions(+), 1 deletion(-)
create mode 100644 drivers/soc/fsl/qe/qe_ports_ic.c
On Tue, 12 Aug 2025 13:02:52 +0200, Christophe Leroy
[off-list ref] said:
In order to be able to add interrupts to the GPIOs, first change the
QE GPIO driver to the proper platform driver in order to allow
initialisation to be done in the right order, otherwise the GPIOs
get added before the interrupts are registered.
Signed-off-by: Christophe Leroy <redacted>
---
On Tue, 12 Aug 2025 13:02:52 +0200, Christophe Leroy
[off-list ref] said:
quoted hunk
In order to be able to add interrupts to the GPIOs, first change the
QE GPIO driver to the proper platform driver in order to allow
initialisation to be done in the right order, otherwise the GPIOs
get added before the interrupts are registered.
Signed-off-by: Christophe Leroy <redacted>
---
drivers/soc/fsl/qe/gpio.c | 88 +++++++++++++++++++++++----------------
1 file changed, 53 insertions(+), 35 deletions(-)
Actually scratch my R-b, on second glance - this should now be
replaced with devm_gpiochip_add_data(). I don't see anything that
would be in the way now that it's an actuall platform device.
Bartosz
On Tue, 12 Aug 2025 13:02:53 +0200, Christophe Leroy
[off-list ref] said:
quoted hunk
In the QE, a few GPIOs are IRQ capable. Similarly to
commit 726bd223105c ("powerpc/8xx: Adding support of IRQ in MPC8xx
GPIO"), add IRQ support to QE GPIO.
Add property 'fsl,qe-gpio-irq-mask' similar to
'fsl,cpm1-gpio-irq-mask' that define which of the GPIOs have IRQs.
Here is an exemple for port B of mpc8323 which has IRQs for
GPIOs PB7, PB9, PB25 and PB27.
qe_pio_b: gpio-controller@1418 {
#gpio-cells = <2>;
compatible = "fsl,mpc8323-qe-pario-bank";
reg = <0x1418 0x18>;
interrupts = <4 5 6 7>;
fsl,qe-gpio-irq-mask = <0x01400050>;
interrupt-parent = <&qepic>;
gpio-controller;
};
Signed-off-by: Christophe Leroy <redacted>
---
drivers/soc/fsl/qe/gpio.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
@@ -32,6 +33,8 @@ struct qe_gpio_chip {/* saved_regs used to restore dedicated functions */structqe_pio_regssaved_regs;++intirq[32];};staticvoidqe_gpio_save_regs(structof_mm_gpio_chip*mm_gc)
@@ -141,6 +144,13 @@ static int qe_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)return0;}+staticintqe_gpio_to_irq(structgpio_chip*gc,unsignedintgpio)+{+structqe_gpio_chip*qe_gc=gpiochip_get_data(gc);++returnqe_gc->irq[gpio]?:-ENXIO;+}+structqe_pin{/**Theqe_gpio_chipnameisunfortunate,weshouldchangethatto
@@ -304,6 +314,7 @@ static int qe_gpio_probe(struct platform_device *ofdev)structqe_gpio_chip*qe_gc;structof_mm_gpio_chip*mm_gc;structgpio_chip*gc;+u32mask;qe_gc=kzalloc(sizeof(*qe_gc),GFP_KERNEL);if(!qe_gc){
@@ -313,6 +324,14 @@ static int qe_gpio_probe(struct platform_device *ofdev)spin_lock_init(&qe_gc->lock);+if(!of_property_read_u32(np,"fsl,qe-gpio-irq-mask",&mask)){
AFAICT: you can drop the of.h include and just use
device_property_present() here.
quoted hunk
+ int i, j;
+
+ for (i = 0, j = 0; i < 32; i++)
+ if (mask & (1 << (31 - i)))
+ qe_gc->irq[i] = irq_of_parse_and_map(np, j++);
+ }
+
mm_gc = &qe_gc->mm_gc;
gc = &mm_gc->gc;
@@ -323,6 +342,7 @@ static int qe_gpio_probe(struct platform_device *ofdev) gc->get = qe_gpio_get; gc->set = qe_gpio_set; gc->set_multiple = qe_gpio_set_multiple;+ gc->to_irq = qe_gpio_to_irq; ret = of_mm_gpiochip_add_data(np, mm_gc, qe_gc); if (!ret)--
On Tue, 12 Aug 2025 13:02:54 +0200, Christophe Leroy wrote:
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
Signed-off-by: Christophe Leroy <redacted>
---
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
./Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml:3:1: [error] missing document start "---" (document-start)
dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml: ignoring, error parsing file
Traceback (most recent call last):
File "/usr/local/bin/dt-doc-validate", line 8, in <module>
sys.exit(main())
^^^^^^
File "/usr/local/lib/python3.11/dist-packages/dtschema/doc_validate.py", line 66, in main
ret |= check_doc(f)
^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/dtschema/doc_validate.py", line 22, in check_doc
dtsch = dtschema.DTSchema(filename, line_numbers=line_number)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.11/dist-packages/dtschema/schema.py", line 83, in __init__
id = schema['$id'].rstrip('#')
~~~~~~^^^^^^^
KeyError: '$id'
Error: Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.example.dts:34.3-35.1 syntax error
FATAL ERROR: Unable to parse input tree
make[2]: *** [scripts/Makefile.dtbs:132: Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.example.dtb] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/builds/robherring/dt-review-ci/linux/Makefile:1527: dt_binding_check] Error 2
make: *** [Makefile:248: __sub-make] Error 2
doc reference errors (make refcheckdocs):
See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/0b56ef403a7c8d0f8305e847d68959a1037d365e.1754996033.git.christophe.leroy@csgroup.eu
The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.
From: Krzysztof Kozlowski <krzk@kernel.org> Date: 2025-08-12 15:23:57
On 12/08/2025 13:02, Christophe Leroy wrote:
quoted hunk
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
Signed-off-by: Christophe Leroy <redacted>
---
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
+
+description: |
+ Interrupt controller for the QUICC Engine I/O ports found on some
+ Freescale/NXP PowerQUICC and QorIQ SoCs.
+
+properties:
+ compatible:
+ enum:
+ - fsl,mpc8323-qe-ports-ic
+ - fsl,mpc8360-qe-ports-ic
+ - fsl,mpc8568-qe-ports-ic
+
+ reg:
+ description: Base address and size of the QE I/O Ports Interrupt Controller registers.
+ minItems: 1
+ maxItems: 1
This was never tested but more important this and everything further
looks like generated by AI. Please don't do that or at least mark it
clearly, so I will prioritize accordingly (hint: AI generates poor code
and burden to decipher AI slop should not be on open source reviewers
but on users of AI, but as one of maintainers probably you already know
that, so sorry for lecturing).
Best regards,
Krzysztof
From: Rob Herring <robh@kernel.org> Date: 2025-08-12 17:16:21
On Tue, Aug 12, 2025 at 10:23 AM Krzysztof Kozlowski [off-list ref] wrote:
On 12/08/2025 13:02, Christophe Leroy wrote:
quoted
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
Signed-off-by: Christophe Leroy <redacted>
---
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
+
+description: |
+ Interrupt controller for the QUICC Engine I/O ports found on some
+ Freescale/NXP PowerQUICC and QorIQ SoCs.
+
+properties:
+ compatible:
+ enum:
+ - fsl,mpc8323-qe-ports-ic
+ - fsl,mpc8360-qe-ports-ic
+ - fsl,mpc8568-qe-ports-ic
+
+ reg:
+ description: Base address and size of the QE I/O Ports Interrupt Controller registers.
+ minItems: 1
+ maxItems: 1
This was never tested but more important this and everything further
looks like generated by AI. Please don't do that or at least mark it
clearly, so I will prioritize accordingly (hint: AI generates poor code
and burden to decipher AI slop should not be on open source reviewers
but on users of AI, but as one of maintainers probably you already know
that, so sorry for lecturing).
If anyone needs some AI (chatgpt) converted bindings, my "dt-convert"
branch has ~800 of them. Feeding the warnings back to AI to fix was
somewhat effective. The result is not the worst I've seen submitted.
It saves some of the boilerplate, but can't fix things that are just
wrong or unclear in .txt bindings. Despite my 'prompt engineering'
attempts, it still tends to get the same things wrong over and over.
Rob
On Tue, Aug 12, 2025 at 10:23 AM Krzysztof Kozlowski [off-list ref] wrote:
quoted
On 12/08/2025 13:02, Christophe Leroy wrote:
quoted
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
Signed-off-by: Christophe Leroy <redacted>
---
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
+
+description: |
+ Interrupt controller for the QUICC Engine I/O ports found on some
+ Freescale/NXP PowerQUICC and QorIQ SoCs.
+
+properties:
+ compatible:
+ enum:
+ - fsl,mpc8323-qe-ports-ic
+ - fsl,mpc8360-qe-ports-ic
+ - fsl,mpc8568-qe-ports-ic
+
+ reg:
+ description: Base address and size of the QE I/O Ports Interrupt Controller registers.
+ minItems: 1
+ maxItems: 1
This was never tested but more important this and everything further
looks like generated by AI. Please don't do that or at least mark it
clearly, so I will prioritize accordingly (hint: AI generates poor code
and burden to decipher AI slop should not be on open source reviewers
but on users of AI, but as one of maintainers probably you already know
that, so sorry for lecturing).
If anyone needs some AI (chatgpt) converted bindings, my "dt-convert"
branch has ~800 of them. Feeding the warnings back to AI to fix was
somewhat effective. The result is not the worst I've seen submitted.
It saves some of the boilerplate, but can't fix things that are just
wrong or unclear in .txt bindings. Despite my 'prompt engineering'
attempts, it still tends to get the same things wrong over and over.
By the way, the new binding was not generated from text binding. I fed
the AI with the driver C source file.
Christophe
Le 12/08/2025 à 17:23, Krzysztof Kozlowski a écrit :
On 12/08/2025 13:02, Christophe Leroy wrote:
quoted
The QUICC Engine provides interrupts for a few I/O ports. This is
handled via a separate interrupt ID and managed via a triplet of
dedicated registers hosted by the SoC.
Implement an interrupt driver for it for that those IRQs can then
be linked to the related GPIOs.
Signed-off-by: Christophe Leroy <redacted>
---
.../soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml | 63 +++++++++++++++++++
1 file changed, 63 insertions(+)
create mode 100644 Documentation/devicetree/bindings/soc/fsl/cpm_qe/fsl,qe-ports-ic.yaml
+
+description: |
+ Interrupt controller for the QUICC Engine I/O ports found on some
+ Freescale/NXP PowerQUICC and QorIQ SoCs.
+
+properties:
+ compatible:
+ enum:
+ - fsl,mpc8323-qe-ports-ic
+ - fsl,mpc8360-qe-ports-ic
+ - fsl,mpc8568-qe-ports-ic
+
+ reg:
+ description: Base address and size of the QE I/O Ports Interrupt Controller registers.
+ minItems: 1
+ maxItems: 1
This was never tested but more important this and everything further
looks like generated by AI. Please don't do that or at least mark it
clearly, so I will prioritize accordingly (hint: AI generates poor code
and burden to decipher AI slop should not be on open source reviewers
but on users of AI, but as one of maintainers probably you already know
that, so sorry for lecturing).
Yes sorry, overconfidence into AI. Until now I knew almost nothing about
YAML and the generated file had a good look. I didn't know there was a
special procedure to test bindings, I thought checkpatch was doing all
necessary checks.
Fixed in v2.
Le 12/08/2025 à 16:21, Bartosz Golaszewski a écrit :
On Tue, 12 Aug 2025 13:02:53 +0200, Christophe Leroy
[off-list ref] said:
quoted
In the QE, a few GPIOs are IRQ capable. Similarly to
commit 726bd223105c ("powerpc/8xx: Adding support of IRQ in MPC8xx
GPIO"), add IRQ support to QE GPIO.
Add property 'fsl,qe-gpio-irq-mask' similar to
'fsl,cpm1-gpio-irq-mask' that define which of the GPIOs have IRQs.
Here is an exemple for port B of mpc8323 which has IRQs for
GPIOs PB7, PB9, PB25 and PB27.
qe_pio_b: gpio-controller@1418 {
#gpio-cells = <2>;
compatible = "fsl,mpc8323-qe-pario-bank";
reg = <0x1418 0x18>;
interrupts = <4 5 6 7>;
fsl,qe-gpio-irq-mask = <0x01400050>;
interrupt-parent = <&qepic>;
gpio-controller;
};
Signed-off-by: Christophe Leroy <redacted>
---
drivers/soc/fsl/qe/gpio.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
@@ -32,6 +33,8 @@ struct qe_gpio_chip {/* saved_regs used to restore dedicated functions */structqe_pio_regssaved_regs;++intirq[32];};staticvoidqe_gpio_save_regs(structof_mm_gpio_chip*mm_gc)
@@ -141,6 +144,13 @@ static int qe_gpio_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)return0;}+staticintqe_gpio_to_irq(structgpio_chip*gc,unsignedintgpio)+{+structqe_gpio_chip*qe_gc=gpiochip_get_data(gc);++returnqe_gc->irq[gpio]?:-ENXIO;+}+structqe_pin{/**Theqe_gpio_chipnameisunfortunate,weshouldchangethatto
@@ -304,6 +314,7 @@ static int qe_gpio_probe(struct platform_device *ofdev)structqe_gpio_chip*qe_gc;structof_mm_gpio_chip*mm_gc;structgpio_chip*gc;+u32mask;qe_gc=kzalloc(sizeof(*qe_gc),GFP_KERNEL);if(!qe_gc){
@@ -313,6 +324,14 @@ static int qe_gpio_probe(struct platform_device *ofdev)spin_lock_init(&qe_gc->lock);+if(!of_property_read_u32(np,"fsl,qe-gpio-irq-mask",&mask)){
AFAICT: you can drop the of.h include and just use
device_property_present() here.
This line reads the value of the mask, I can't see how it can be
replaced by device_property_present().
quoted
+ int i, j;
+
+ for (i = 0, j = 0; i < 32; i++)
+ if (mask & (1 << (31 - i)))
+ qe_gc->irq[i] = irq_of_parse_and_map(np, j++);
+ }
+
mm_gc = &qe_gc->mm_gc;
gc = &mm_gc->gc;
@@ -323,6 +342,7 @@ static int qe_gpio_probe(struct platform_device *ofdev) gc->get = qe_gpio_get; gc->set = qe_gpio_set; gc->set_multiple = qe_gpio_set_multiple;+ gc->to_irq = qe_gpio_to_irq; ret = of_mm_gpiochip_add_data(np, mm_gc, qe_gc); if (!ret)--