Hi,
Le 22/09/2023 à 10:05, zelong dong a écrit :
From: Zelong Dong <zelong.dong@xxxxxxxxxxx>
Amloic Meson-6 SoC only has one IR Controller, since then, there are 2 IR
Controllers in every SoCs, one is Legacy IR Controller (same as Meson-6's one),
the new one is Multi-Format IR Controller (abbreviated "MF-IR",
which supports more than one IR Protocol). MF-IR was updated several times,
so different SoCs could be got different register sizes.
There are all IR Controller register areas from upstream's SoCs:
Legacy IR MF-IR
Meson-6 | <0xc8100480 0x20> | NULL |
Meson-8/8B/8M2 | <0xc8100480 0x20> | <0xc8100580 0x30> |
Meson-GXBB | <0xc8100480 0x20> | <0xc8100580 0x44> |
Meson-GXM/GXL | <0xc8100480 0x20> | <0xc8100580 0x54> |
Meson-AXG/G12A/G12B/SM1 | <0xff808000 0x20> | <0xff808040 0x58> |
About Meson-IR driver, MF-IR was supported from Meson-8, which was distinguished
by compatible string (of_device_is_compatible(node, "amlogic,meson6-ir")),
and only one register (macro 'IR_DEC_REG2') was added because controller worked
in raw decoder mode, later registers are unused, so we recommend that register
size should be 0x24 if MF-IR is in use.
There are 2 ways to fix.
MF-IR is in use:
Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100580 0x24>
Meson-AXG/G12A/G12B/SM1: <0xff808040 0x24>
Legacy IR is in use:
Meson-8/8B/8M2/GXBB/GXM/GXL: <0xc8100480 0x20>
Meson-AXG/G12A/G12B/SM1: <0xff808000 0x20>
This is slighly confusing, so you mean since Meson-8 there's 2 IR controllers
which have the same register mapping, and both works with the "amlogic,meson6-ir" compatible ?
So why should we switch to the MF-IR address ? what does it exactly change ?
If we want to be clean:
- both should be added, legacy IR with current address + reg size change
- a new compatible should be added for the MF IR, with "amlogic,meson6-ir" as fallback to take in account they are compatible
- a new node should be added for the MR IR
- DTs should be switch to the MF IR label instead of the legacy IR
With this we would be able to take advantage of the MR IF functionalities while keeping driver functionnal
with old DTs and new DTs with old kernels.
Thanks,
Neil
Fixes: 2bfe8412c5388a ("arm64: dts: meson-g12a: Add IR nodes")
Fixes: 7bd46a79aad549 ("ARM64: dts: meson-axg: enable IR controller")
Fixes: c58d77855f0069 ("ARM64: dts: meson-gxbb: Add Infrared Remote Controller decoder")
Link: https://lore.kernel.org/all/20160820095424.636-5-martin.blumenstingl@xxxxxxxxxxxxxx/
Signed-off-by: Zelong Dong <zelong.dong@xxxxxxxxxxx>
---
arch/arm64/boot/dts/amlogic/meson-axg.dtsi | 4 ++--
arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi | 4 ++--
arch/arm64/boot/dts/amlogic/meson-gx.dtsi | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
index 768d0ed78dbe..dd8c58e74322 100644
--- a/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-axg.dtsi
@@ -1705,9 +1705,9 @@ pwm_AO_ab: pwm@7000 {
status = "disabled";
};
- ir: ir@8000 {
+ ir: ir@8040 {
compatible = "amlogic,meson-gxbb-ir";
- reg = <0x0 0x8000 0x0 0x20>;
+ reg = <0x0 0x8040 0x0 0x24>;
interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
status = "disabled";
};
diff --git a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
index ff68b911b729..e12cea5fa889 100644
--- a/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
@@ -2084,9 +2084,9 @@ pwm_AO_ab: pwm@7000 {
status = "disabled";
};
- ir: ir@8000 {
+ ir: ir@8040 {
compatible = "amlogic,meson-gxbb-ir";
- reg = <0x0 0x8000 0x0 0x20>;
+ reg = <0x0 0x8040 0x0 0x24>;
interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
status = "disabled";
};
diff --git a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
index 2673f0dbafe7..0c04e34a0923 100644
--- a/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
+++ b/arch/arm64/boot/dts/amlogic/meson-gx.dtsi
@@ -506,7 +506,7 @@ pwm_AO_ab: pwm@550 {
ir: ir@580 {
compatible = "amlogic,meson-gx-ir", "amlogic,meson-gxbb-ir";
- reg = <0x0 0x00580 0x0 0x40>;
+ reg = <0x0 0x00580 0x0 0x24>;
interrupts = <GIC_SPI 196 IRQ_TYPE_EDGE_RISING>;
status = "disabled";
};