summaryrefslogtreecommitdiffstats
path: root/target/linux/bcm27xx/patches-6.1/950-1051-fixup-overlays-mcp23017-allow-specification-of-the-i.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/bcm27xx/patches-6.1/950-1051-fixup-overlays-mcp23017-allow-specification-of-the-i.patch')
-rw-r--r--target/linux/bcm27xx/patches-6.1/950-1051-fixup-overlays-mcp23017-allow-specification-of-the-i.patch95
1 files changed, 95 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-6.1/950-1051-fixup-overlays-mcp23017-allow-specification-of-the-i.patch b/target/linux/bcm27xx/patches-6.1/950-1051-fixup-overlays-mcp23017-allow-specification-of-the-i.patch
new file mode 100644
index 0000000000..5016e78778
--- /dev/null
+++ b/target/linux/bcm27xx/patches-6.1/950-1051-fixup-overlays-mcp23017-allow-specification-of-the-i.patch
@@ -0,0 +1,95 @@
+From 3ed6d34d53e94ecbebc64c8fa3d1b6d3c41db8fb Mon Sep 17 00:00:00 2001
+From: Phil Elwell <phil@raspberrypi.com>
+Date: Tue, 24 Oct 2023 09:58:52 +0100
+Subject: [PATCH] fixup! overlays: mcp23017: allow specification of the i2c bus
+
+The incorrect fragment order (*) caused broke the interrupt usage, and
+while it was being fixed the lack of a reference to the pinctrl
+declaration was noticed.
+
+See: https://github.com/raspberrypi/linux/issues/5677
+
+Signed-off-by: Phil Elwell <phil@raspberrypi.com>
+
+(*) Ideally all fragments would appear in the file in the order in which
+they should be merged, but that is easy to forget and can be awkward, so
+the firmware merges all "intra" fragments (those that target other
+fragments in the overlay) before "inter" fragments (those that target
+the base DTB). However, intra fragments that target other intra
+fragments is a level of nesting too far for this logic to cope, so they
+must appear before the fragments they target.
+---
+ .../boot/dts/overlays/mcp23017-overlay.dts | 42 ++++++++++---------
+ 1 file changed, 22 insertions(+), 20 deletions(-)
+
+--- a/arch/arm/boot/dts/overlays/mcp23017-overlay.dts
++++ b/arch/arm/boot/dts/overlays/mcp23017-overlay.dts
+@@ -24,30 +24,13 @@
+ };
+
+ fragment@2 {
+- target = <&i2cbus>;
+- __overlay__ {
+- #address-cells = <1>;
+- #size-cells = <0>;
+-
+- mcp23017: mcp@20 {
+- compatible = "microchip,mcp23017";
+- reg = <0x20>;
+- gpio-controller;
+- #gpio-cells = <2>;
+-
+- status = "okay";
+- };
+- };
+- };
+-
+- fragment@3 {
+ target = <&mcp23017>;
+ __dormant__ {
+ compatible = "microchip,mcp23008";
+ };
+ };
+
+- fragment@4 {
++ fragment@3 {
+ target = <&mcp23017>;
+ mcp23017_irq: __overlay__ {
+ #interrupt-cells=<2>;
+@@ -58,6 +41,25 @@
+ };
+ };
+
++ fragment@4 {
++ target = <&i2cbus>;
++ __overlay__ {
++ #address-cells = <1>;
++ #size-cells = <0>;
++
++ mcp23017: mcp@20 {
++ compatible = "microchip,mcp23017";
++ pinctrl-name = "default";
++ pinctrl-0 = <&mcp23017_pins>;
++ reg = <0x20>;
++ gpio-controller;
++ #gpio-cells = <2>;
++
++ status = "okay";
++ };
++ };
++ };
++
+ frag100: fragment@100 {
+ target = <&i2c1>;
+ i2cbus: __overlay__ {
+@@ -83,8 +85,8 @@
+ gpiopin = <&mcp23017_pins>,"brcm,pins:0",
+ <&mcp23017_irq>,"interrupts:0";
+ addr = <&mcp23017>,"reg:0", <&mcp23017_pins>,"reg:0";
+- mcp23008 = <0>,"=3";
+- noints = <0>,"!1!4";
++ mcp23008 = <0>,"=2";
++ noints = <0>,"!1!3";
+ i2c0 = <&frag100>, "target:0=",<&i2c0>;
+ i2c_csi_dsi = <&frag100>, "target:0=",<&i2c_csi_dsi>,
+ <0>,"+101+102";