diff --git a/arch/arm/boot/dts/overlays/Makefile b/arch/arm/boot/dts/overlays/Makefile index ea0600fc0a975..c83c624beafbc 100644 --- a/arch/arm/boot/dts/overlays/Makefile +++ b/arch/arm/boot/dts/overlays/Makefile @@ -63,6 +63,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \ draws-pi5.dtbo \ dwc-otg-deprecated.dtbo \ dwc2.dtbo \ + ed-ipc.dtbo \ edt-ft5406.dtbo \ enc28j60.dtbo \ enc28j60-spi2.dtbo \ diff --git a/arch/arm/boot/dts/overlays/README b/arch/arm/boot/dts/overlays/README index 8c73e31d1e419..113e20381266c 100644 --- a/arch/arm/boot/dts/overlays/README +++ b/arch/arm/boot/dts/overlays/README @@ -1278,6 +1278,59 @@ Params: dr_mode Dual role mode: "host", "peripheral" or "otg" mode +Name: ed-ipc +Info: Configures the EDATEC IPC/EXP series hardware peripherals. + This overlay provides support for PCA9535 GPIO expanders on + the EDATEC industrial PC carrier boards, including interrupt + handling, GPIO line names, and optional secondary expander + on i2c_arm. +Load: dtoverlay=ed-ipc,= +Params: addr I2C address for primary PCA9535 GPIO expander + (default 0x20) + + exp_addr I2C address for secondary PCA9535 GPIO + expander on i2c_arm (default 0x27) + + ipc3100 Enable configuration for IPC3100 board + (CM5, i2c_csi_dsi0, PCA int GPIO6) + + ipc2100 Enable configuration for IPC2100 board + (CM4, i2c_csi_dsi, PCA int GPIO6) + + ipc2210 Enable configuration for IPC2210 board + (CM4, i2c_csi_dsi, PCA int GPIO6) + + ipc3210 Enable configuration for IPC3210 board + (CM5, i2c_csi_dsi0, PCA int GPIO6) + + ipc1200 Enable configuration for IPC1200 board + (CM4, i2c_csi_dsi, PCA int GPIO15) + + ipc3300 Enable configuration for IPC3300 board + (CM5, i2c_arm, PCA int GPIO38) + + ipc2300 Enable configuration for IPC2300 board + (CM4, i2c_arm, PCA int GPIO44) + + plc2010 Enable configuration for PLC2010 board + (i2c_arm, PCA int GPIO7, addr 0x21) + + exp8x8y Enable 8-input/8-output expansion module + (CM5, i2c_arm) + + exp4x4y Enable 4-input/4-output expansion module + (CM5, i2c_arm, exp at addr 0x21) + + ipc3600 Enable combined configuration for IPC3600 + (IPC3100 + exp8x8y) + + ipc2600 Enable combined configuration for IPC2600 + (IPC2100 + exp8x8y) + + ipc1220 Enable combined configuration for IPC1220 + (IPC1200 + exp4x4y) + + [ The ds1307-rtc overlay has been deleted. See i2c-rtc. ] diff --git a/arch/arm/boot/dts/overlays/ed-ipc-overlay.dts b/arch/arm/boot/dts/overlays/ed-ipc-overlay.dts new file mode 100644 index 0000000000000..1784234d45ad4 --- /dev/null +++ b/arch/arm/boot/dts/overlays/ed-ipc-overlay.dts @@ -0,0 +1,279 @@ +/* + * EDATEC IPC/EXP unified board overlay + */ +/dts-v1/; +/plugin/; + +/ { + compatible = "brcm,bcm2835"; + i2c_frag: fragment@0 { + target = <&i2c_csi_dsi0>; + __dormant__ { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + pca_base: pca@20 { + compatible = "nxp,pca9535"; + reg = <0x20>; + gpio-controller; + #gpio-cells = <2>; + status = "okay"; + }; + }; + }; + + fragment@100 { + target = <&i2c0if>; + __overlay__ { + status = "okay"; + }; + }; + + fragment@101 { + target = <&i2c0mux>; + __overlay__ { + status = "okay"; + }; + }; + + fragment@200 { + target = <&pca_base>; + __dormant__ { + gpio-line-names = "5V_GOOD", "LVD", "BUZZER_EN", + "4G_RST", "4G_LED", "USER_LED"; + }; + }; + + fragment@201 { + target = <&pca_base>; + __dormant__ { + gpio-line-names = "5V_GOOD", "LVD", "BUZZER_EN", + "4G_RST", "4G_LED", "5G_RST", + "5G_PWR_ON", "USER_LED", + "MSATA_PRSNT"; + }; + }; + + fragment@203 { + target = <&pca_base>; + __dormant__ { + gpio-line-names = "BL_EN_L", "BL_BTN_EN", "BL_BTN_UP", + "BL_BTN_DOWN", "BUZZER_EN", + "4G_RST", "MSATA_PRSNT", "FAN_EN", + "NC", "NC", "NC", "NC", + "NC", "NC", "NC", "PANEL_ON_L"; + }; + }; + + fragment@205 { + target = <&pca_base>; + __dormant__ { + gpio-line-names = "USB_RST", "WK_RST", "4G_PWR", + "4G_RST", "4G_BOOT", + "4G_LED_REG_RED", "4G_LED_REG_GED", + "4G_LED_SIG_RED", "4G_LED_SIG_GED", + "USER_LED_RED", "USER_LED_GED", + "LCD_RST", "4G_PRESENT", + "IOB1_PRESENT", "IOB2_PRESENT"; + }; + }; + + fragment@206 { + target = <&pca_base>; + __dormant__ { + gpio-line-names = "4G_RST", "LED_ERR", "LED_UPDATE", + "LED_UDISK_BUSY", "LED_4G_EXP", + "LED_UDISK_DET", + "SW_FACTORY_RST", "SW_IP_ADDR_RST", + "SW_START_STOP", "SW_APP_IMPORT", + "SW_UDISK_REMOVE"; + }; + }; + + fragment@210 { + target = <&pca_base>; + __dormant__ { + interrupt-parent = <&gpio>; + interrupts = <6 2>; /* IRQ_TYPE_EDGE_FALLING */ + pinctrl-names = "default"; + pinctrl-0 = <&pca_irq6>; + }; + }; + + fragment@212 { + target = <&pca_base>; + __dormant__ { + interrupt-parent = <&gpio>; + interrupts = <38 2>; /* IPC2300 CM5 */ + pinctrl-names = "default"; + pinctrl-0 = <&pca_irq38>; + }; + }; + + fragment@213 { + target = <&pca_base>; + __dormant__ { + interrupt-parent = <&gpio>; + interrupts = <44 2>; /* IPC2300 CM4 */ + pinctrl-names = "default"; + pinctrl-0 = <&pca_irq44>; + }; + }; + + fragment@214 { + target = <&pca_base>; + __dormant__ { + interrupt-parent = <&gpio>; + interrupts = <7 2>; /* PLC2010 */ + pinctrl-names = "default"; + pinctrl-0 = <&pca_irq7>; + }; + }; + + fragment@310 { + target = <&gpio>; + __dormant__ { + pca_irq6: pca_irq6 { + brcm,pins = <6>; + brcm,function = <0>; /* input */ + }; + }; + }; + + fragment@312 { + target = <&gpio>; + __dormant__ { + pca_irq38: pca_irq38 { + brcm,pins = <38>; + brcm,function = <0>; /* input */ + }; + }; + }; + + fragment@313 { + target = <&gpio>; + __dormant__ { + pca_irq44: pca_irq44 { + brcm,pins = <44>; + brcm,function = <0>; /* input */ + }; + }; + }; + + fragment@314 { + target = <&gpio>; + __dormant__ { + pca_irq7: pca_irq7 { + brcm,pins = <7>; + brcm,function = <0>; /* input */ + }; + }; + }; + + fragment@400 { + target = <&i2c_arm>; + __dormant__ { + #address-cells = <1>; + #size-cells = <0>; + status = "okay"; + + pca_exp: pca@27 { + compatible = "nxp,pca9535"; + reg = <0x27>; + gpio-controller; + #gpio-cells = <2>; + status = "okay"; + }; + }; + }; + + fragment@500 { + target = <&pca_exp>; + __dormant__ { + gpio-line-names = "DI0", "DI1", "DI2", "DI3", + "DI4", "DI5", "DI6", "DI7", + "DO0", "DO1", "DO2", "DO3", + "DO4", "DO5", "DO6", "DO7"; + }; + }; + + fragment@501 { + target = <&pca_exp>; + __dormant__ { + gpio-line-names = "DI4", "DI5", "DI6", "DI7", + "DO4", "DO5", "DO6", "DO7", + "NC", "NC", "NC", "NC", + "NC", "NC", "NC", "NC"; + }; + }; + + fragment@410 { + target = <&pca_exp>; + __dormant__ { + interrupt-parent = <&gpio>; + interrupts = <10 2>; /* EXP8X8Y */ + pinctrl-names = "default"; + pinctrl-0 = <&pca_irq10>; + }; + }; + + fragment@411 { + target = <&pca_exp>; + __dormant__ { + interrupt-parent = <&gpio>; + interrupts = <4 2>; /* EXP4X4Y */ + pinctrl-names = "default"; + pinctrl-0 = <&pca_irq4>; + }; + }; + + fragment@510 { + target = <&gpio>; + __dormant__ { + pca_irq10: pca_irq10 { + brcm,pins = <10>; + brcm,function = <0>; /* input */ + }; + }; + }; + + fragment@511 { + target = <&gpio>; + __dormant__ { + pca_irq4: pca_irq4 { + brcm,pins = <4>; + brcm,function = <0>; /* input */ + }; + }; + }; + + __overrides__ { + addr = <&pca_base>, "reg:0"; + exp_addr = <&pca_exp>, "reg:0"; + ipc3100 = <0>, "+0+200+210+310"; + ipc2100 = <0>, "+0+200+210+310", + <&i2c_frag>, "target:0=", <&i2c_csi_dsi>; + ipc2210 = <0>, "+0+201+210+310", + <&i2c_frag>, "target:0=", <&i2c_csi_dsi>; + ipc3210 = <0>, "+0+201+210+310"; + ipc1200 = <0>, "+0+205", + <&i2c_frag>, "target:0=", <&i2c_csi_dsi>; + ipc3300 = <0>, "+0+203+212+312", + <&i2c_frag>, "target:0=", <&i2c_arm>; + ipc2300 = <0>, "+0+203+213+313", + <&i2c_frag>, "target:0=", <&i2c_arm>; + plc2010 = <0>, "+0+206+214+314", + <&i2c_frag>, "target:0=", <&i2c_arm>, + <&pca_base>, "reg:0=", <0x21>; + exp8x8y = <0>, "+400+500+410+510"; /* default CM5 */ + exp4x4y = <0>, "+400+501+411+511", + <&pca_exp>, "reg:0=", <0x21>; /* default CM5 */ + ipc3600 = <0>, "+0+200+210+310+400+500+410+510"; + ipc2600 = <0>, "+0+200+210+310+400+500+410+510", + <&i2c_frag>, "target:0=", <&i2c_csi_dsi>; + ipc1220 = <0>, "+0+205+400+501+411+511", + <&i2c_frag>, "target:0=", <&i2c_csi_dsi>, + <&pca_exp>, "reg:0=", <0x21>; + }; +};