BCM2708: Add core Device Tree support

Add the bare minimum needed to boot BCM2708 from a Device Tree.

Signed-off-by: Noralf Tronnes <notro@tronnes.org>

BCM2708: DT: change 'axi' nodename to 'soc'

Change DT node named 'axi' to 'soc' so it matches ARCH_BCM2835.
The VC4 bootloader fills in certain properties in the 'axi' subtree,
but since this is part of an upstreaming effort, the name is changed.

Signed-off-by: Noralf Tronnes notro@tronnes.org

BCM2708_DT: Correct length of the peripheral space

Use dts-dirs feature for overlays.

The kernel makefiles have a dts-dirs target that is for vendor subdirectories.

Using this fixes the install_dtbs target, which previously did not install the overlays.

BCM270X_DT: configure I2S DMA channels

Signed-off-by: Matthias Reichl <hias@horus.com>

BCM270X_DT: switch to bcm2835-i2s

I2S soundcard drivers with proper devicetree support (i.e. not linking
to the cpu_dai/platform via name but to cpu/platform via of_node)
will work out of the box without any modifications.

When the kernel is compiled without devicetree support the platform
code will instantiate the bcm2708-i2s driver and I2S soundcard drivers
will link to it via name, as before.

Signed-off-by: Matthias Reichl <hias@horus.com>

SDIO-overlay: add poll_once-boolean parameter

Add paramter to toggle sdio-device-polling
done every second or once at boot-time.

Signed-off-by: Patrick Boettcher <patrick.boettcher@posteo.de>

BCM270X_DT: Make mmc overlay compatible with current firmware

The original DT overlay logic followed a merge-then-patch procedure,
i.e. parameters are applied to the loaded overlay before the overlay
is merged into the base DTB. This sequence has been changed to
patch-then-merge, in order to support parameterised node names, and
to protect against bad overlays. As a result, overrides (parameters)
must only target labels in the overlay, but the overlay can obviously target nodes in the base DTB.

mmc-overlay.dts (that switches back to the original mmc sdcard
driver) is the only overlay violating that rule, and this patch
fixes it.

bcm270x_dt: Use the sdhost MMC controller by default

The "mmc" overlay reverts to using the other controller.

squash: Add cprman to dt

BCM270X_DT: Use clk_core for I2C interfaces

BCM270X_DT: Use bcm283x.dtsi, bcm2835.dtsi and bcm2836.dtsi

The mainline Device Tree files are quite close to downstream now.
Let's use bcm283x.dtsi, bcm2835.dtsi and bcm2836.dtsi as base files
for our dts files.

Mainline dts files are based on these files:

          bcm2835-rpi.dtsi
  bcm2835.dtsi    bcm2836.dtsi
          bcm283x.dtsi

Current downstream are based on these:

  bcm2708.dtsi    bcm2709.dtsi    bcm2710.dtsi
             bcm2708_common.dtsi

This patch introduces this dependency:

  bcm2708.dtsi    bcm2709.dtsi
          bcm2708-rpi.dtsi
          bcm270x.dtsi
  bcm2835.dtsi    bcm2836.dtsi
          bcm283x.dtsi

And:
          bcm2710.dtsi
          bcm2708-rpi.dtsi
          bcm270x.dtsi
          bcm283x.dtsi

bcm270x.dtsi contains the downstream bcm283x.dtsi diff.
bcm2708-rpi.dtsi is the downstream version of bcm2835-rpi.dtsi.

Other changes:
- The led node has moved from /soc/leds to /leds. This is not a problem
  since the label is used to reference it.
- The clk_osc reg property changes from 6 to 3.
- The gpu nodes has their interrupt property set in the base file.
- the clocks label does not point to the /clocks node anymore, but
  points to the cprman node. This is not a problem since the overlays
  that use the clock node refer to it directly: target-path = "/clocks";
- some nodes now have 2 labels since mainline and downstream differs in
  this respect: cprman/clocks, spi0/spi, gpu/vc4.
- some nodes doesn't have an explicit status = "okay" since they're not
  disabled in the base file: watchdog and random.
- gpiomem doesn't need an explicit status = "okay".
- bcm2708-rpi-cm.dts got the hpd-gpios property from bcm2708_common.dtsi,
  it's now set directly in that file.
- bcm2709-rpi-2-b.dts has the timer node moved from /soc/timer to /timer.
- Removed clock-frequency property on the bcm{2709,2710}.dtsi timer nodes.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

BCM270X_DT: Use raspberrypi-power to turn on USB power

Use the raspberrypi-power driver to turn on USB power.

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>

BCM270X_DT: Add a .dtbo target, use for overlays

Change the filenames and extensions to keep the pre-DDT style of
overlay (<name>-overlay.dtb) distinct from new ones that use a
different style of local fixups (<name>.dtbo), and to match other
platforms.

The RPi firmware uses the DDTK trailer atom to choose which type of
overlay to use for each kernel.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

BCM270X_DT: Don't generate "linux,phandle" props

The EPAPR standard says to use "phandle" properties to store phandles,
rather than the deprecated "linux,phandle" version. By default, dtc
generates both, but adding "-H epapr" causes it to only generate
"phandle"s, saving some space and clutter.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

BCM270X_DT: Add overlay for enc28j60 on SPI2

Works on SPI2 for compute module

BCM270X_DT: Add midi-uart0 overlay

MIDI requires 31.25kbaud, a baudrate unsupported by Linux. The
midi-uart0 overlay configures uart0 (ttyAMA0) to use a fake clock
so that requesting 38.4kbaud actually gets 31.25kbaud.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

BCM270X_DT: Add i2c-sensor overlay

The i2c-sensor overlay is a container for various pressure and
temperature sensors, currently bmp085 and bmp280. The standalone
bmp085_i2c-sensor overlay is now deprecated.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

BCM270X_DT: overlays/*-overlay.dtb -> overlays/*.dtbo (#1752)

We now create overlays as .dtbo files.

build: support for .dtbo files for dtb overlays

Kernel 4.4.6+ on RaspberryPi support .dtbo files for overlays, instead of .dtb.
Patch the kernel, which has faulty rules to generate .dtbo the way yocto does

Signed-off-by: Herve Jourdain <herve.jourdain@neuf.fr>
Signed-off-by: Khem Raj <raj.khem@gmail.com>

BCM270X: Drop position requirement for CMA in VC4 overlay.

No longer necessary since 2aefcd5761,
and will probably let peeople that want to choose a larger CMA
allocation (particularly on pi0/1).

Signed-off-by: Eric Anholt <eric@anholt.net>

BCM270X_DT: RPi Device Tree tidy

Use the upstream sdhost node, add thermal-zones, and factor out some
common elements.

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

kbuild: Silence unhelpful DTC warnings

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

BCM270X_DT: DT build rules no longer arch-specific

Signed-off-by: Phil Elwell <phil@raspberrypi.org>

kbuild: Silence unavoidable dtc overlay warnings

Much effort has been put into finding ways to avoid warnings from dtc
about overlays, usually to do with the presence of #address-cells and
size-cells, but not exclusively so. Since the issues being warned about
are harmless, suppress the warnings to declutter the build output and
to avoid alarming users.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>

overlays: Suppress another dtc warning

I'm sure the dtc warnings mean well, but overlays don't have enough
context for the checkers to give meaningful results.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>

overlays: Use dtbs-list for overlay installation

Update the overlay build rules to use the dtbs-list mechanism. Also
include the README, and don't set the executable bits.

Signed-off-by: Phil Elwell <phil@raspberrypi.com>
This commit is contained in:
Dom Cobley
2024-09-30 16:40:14 +01:00
parent 0d6b167bb2
commit bda839e8c7
454 changed files with 46357 additions and 33 deletions

View File

@@ -39,3 +39,8 @@ subdir-y += unisoc
subdir-y += vt8500
subdir-y += xen
subdir-y += xilinx
targets += dtbs dtbs_install
targets += $(dtb-y)
subdir-y += overlays

View File

@@ -37,6 +37,30 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
bcm2711-rpi-cm4-io.dtb \
bcm2835-rpi-zero.dtb \
bcm2835-rpi-zero-w.dtb
dtb-$(CONFIG_ARCH_BCM2835) += \
bcm2708-rpi-b.dtb \
bcm2708-rpi-b-rev1.dtb \
bcm2708-rpi-b-plus.dtb \
bcm2708-rpi-cm.dtb \
bcm2708-rpi-zero.dtb \
bcm2708-rpi-zero-w.dtb \
bcm2710-rpi-zero-2.dtb \
bcm2710-rpi-zero-2-w.dtb \
bcm2709-rpi-2-b.dtb \
bcm2710-rpi-2-b.dtb \
bcm2710-rpi-3-b.dtb \
bcm2710-rpi-3-b-plus.dtb \
bcm2709-rpi-cm2.dtb \
bcm2710-rpi-cm0.dtb \
bcm2710-rpi-cm3.dtb \
bcm2711-rpi-cm4.dtb \
bcm2711-rpi-cm4s.dtb
ifeq ($(CONFIG_ARCH_BCM2835),y)
DTC_FLAGS += -@ -Wno-gpios_property
endif
dtb-$(CONFIG_ARCH_BCMBCA) += \
bcm6846-genexis-xg6846b.dtb \
bcm947622.dtb \

View File

@@ -0,0 +1,210 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-smsc9514.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
model = "Raspberry Pi Model B+";
};
&gpio {
/*
* Taken from Raspberry-Pi-B-Plus-V1.2-Schematics.pdf
* RPI-BPLUS sheet 1
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"SDA0",
"SCL0",
"NC", /* GPIO30 */
"LAN_RUN", /* GPIO31 */
"CAM_GPIO1", /* GPIO32 */
"NC", /* GPIO33 */
"NC", /* GPIO34 */
"PWR_LOW_N", /* GPIO35 */
"NC", /* GPIO36 */
"NC", /* GPIO37 */
"USB_LIMIT", /* GPIO38 */
"NC", /* GPIO39 */
"PWM0_OUT", /* GPIO40 */
"CAM_GPIO0", /* GPIO41 */
"NC", /* GPIO42 */
"NC", /* GPIO43 */
"ETH_CLK", /* GPIO44 */
"PWM1_OUT", /* GPIO45 */
"HDMI_HPD_N",
"STATUS_LED",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&uart0 {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 47 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&leds {
led_pwr: led-pwr {
label = "PWR";
gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "input";
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_arm: &i2c1 {
};
i2c_vc: &i2c0 {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,223 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-smsc9512.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,model-b", "brcm,bcm2835";
model = "Raspberry Pi Model B";
};
&gpio {
/*
* Taken from Raspberry-Pi-Rev-1.0-Model-AB-Schematics.pdf
* RPI00021 sheet 02
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "SDA0",
"SCL0",
"SDA1",
"SCL1",
"GPIO_GCLK",
"CAM_GPIO1",
"LAN_RUN",
"SPI_CE1_N",
"SPI_CE0_N",
"SPI_MISO",
"SPI_MOSI",
"SPI_SCLK",
"NC", /* GPIO12 */
"NC", /* GPIO13 */
/* Serial port */
"TXD0",
"RXD0",
"STATUS_LED_N",
"GPIO17",
"GPIO18",
"NC", /* GPIO19 */
"NC", /* GPIO20 */
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"NC", /* GPIO26 */
"CAM_GPIO0",
/* Binary number representing build/revision */
"CONFIG0",
"CONFIG1",
"CONFIG2",
"CONFIG3",
"NC", /* GPIO32 */
"NC", /* GPIO33 */
"NC", /* GPIO34 */
"NC", /* GPIO35 */
"NC", /* GPIO36 */
"NC", /* GPIO37 */
"NC", /* GPIO38 */
"NC", /* GPIO39 */
"PWM0_OUT",
"NC", /* GPIO41 */
"NC", /* GPIO42 */
"NC", /* GPIO43 */
"NC", /* GPIO44 */
"PWM1_OUT",
"HDMI_HPD_P",
"SD_CARD_DET",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <28 29 30 31>;
brcm,function = <6>; /* alt2 */
};
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&uart0 {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
/delete-node/ &i2c0mux;
i2c0: &i2c0if {
pinctrl-names = "default";
pinctrl-0 = <&i2c0_pins>;
clock-frequency = <100000>;
};
i2c_csi_dsi: &i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
/ {
aliases {
i2c0 = &i2c0;
};
/* Provide an i2c0mux label to avoid undefined symbols in overlays */
i2c0mux: i2c0mux {
};
__overrides__ {
i2c0 = <&i2c0>, "status";
};
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 27 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_arm: &i2c0 {
};
i2c_vc: &i2c1 {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
i2c = <&i2c0>,"status";
i2c_arm = <&i2c0>,"status";
i2c_vc = <&i2c1>,"status";
i2c_baudrate = <&i2c0>,"clock-frequency:0";
i2c_arm_baudrate = <&i2c0>,"clock-frequency:0";
i2c_vc_baudrate = <&i2c1>,"clock-frequency:0";
};
};

View File

@@ -0,0 +1,198 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-smsc9512.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,model-b", "brcm,bcm2835";
model = "Raspberry Pi Model B";
};
&gpio {
/*
* Taken from Raspberry-Pi-Rev-2.0-Model-AB-Schematics.pdf
* RPI00022 sheet 02
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "SDA0",
"SCL0",
"SDA1",
"SCL1",
"GPIO_GCLK",
"CAM_GPIO1",
"LAN_RUN",
"SPI_CE1_N",
"SPI_CE0_N",
"SPI_MISO",
"SPI_MOSI",
"SPI_SCLK",
"NC", /* GPIO12 */
"NC", /* GPIO13 */
/* Serial port */
"TXD0",
"RXD0",
"STATUS_LED_N",
"GPIO17",
"GPIO18",
"NC", /* GPIO19 */
"NC", /* GPIO20 */
"CAM_GPIO0",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"NC", /* GPIO26 */
"GPIO27",
"GPIO28",
"GPIO29",
"GPIO30",
"GPIO31",
"NC", /* GPIO32 */
"NC", /* GPIO33 */
"NC", /* GPIO34 */
"NC", /* GPIO35 */
"NC", /* GPIO36 */
"NC", /* GPIO37 */
"NC", /* GPIO38 */
"NC", /* GPIO39 */
"PWM0_OUT",
"NC", /* GPIO41 */
"NC", /* GPIO42 */
"NC", /* GPIO43 */
"NC", /* GPIO44 */
"PWM1_OUT",
"HDMI_HPD_P",
"SD_CARD_DET",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <28 29 30 31>;
brcm,function = <6>; /* alt2 */
};
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&uart0 {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 16 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 21 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_arm: &i2c1 {
};
i2c_vc: &i2c0 {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,42 @@
// SPDX-License-Identifier: GPL-2.0
&uart0 {
bt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <3000000>;
shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
local-bd-address = [ 00 00 00 00 00 00 ];
fallback-bd-address; // Don't override a valid address
status = "okay";
};
};
&uart1 {
minibt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <230400>;
shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
local-bd-address = [ 00 00 00 00 00 00 ];
fallback-bd-address; // Don't override a valid address
status = "disabled";
};
};
/ {
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_headphones=0 cgroup_disable=memory";
};
aliases {
bluetooth = &bt;
};
__overrides__ {
bdaddr = <&bt>,"local-bd-address[",
<&bt>,"fallback-bd-address?=0",
<&minibt>,"local-bd-address[",
<&minibt>,"fallback-bd-address?=0";
krnbt = <&bt>,"status";
krnbt_baudrate = <&bt>,"max-speed:0", <&minibt>,"max-speed:0";
};
};

View File

@@ -0,0 +1,174 @@
/dts-v1/;
#include "bcm2708-rpi-cm.dtsi"
#include "bcm283x-rpi-csi0-2lane.dtsi"
#include "bcm283x-rpi-csi1-4lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
/ {
compatible = "raspberrypi,compute-module", "brcm,bcm2835";
model = "Raspberry Pi Compute Module";
};
&cam1_reg {
gpio = <&gpio 3 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
cam0_reg: &cam0_regulator {
gpio = <&gpio 31 GPIO_ACTIVE_HIGH>;
};
i2c_csi_dsi0: &i2c0 {
};
&uart0 {
status = "okay";
};
&gpio {
/*
* This is based on the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "GPIO0",
"GPIO1",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"GPIO28",
"GPIO29",
"GPIO30",
"GPIO31",
"GPIO32",
"GPIO33",
"GPIO34",
"GPIO35",
"GPIO36",
"GPIO37",
"GPIO38",
"GPIO39",
"GPIO40",
"GPIO41",
"GPIO42",
"GPIO43",
"GPIO44",
"GPIO45",
"HDMI_HPD_N",
/* Also used as ACT LED */
"EMMC_EN_N",
/* Used by eMMC */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins;
brcm,function;
};
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};

View File

@@ -0,0 +1,23 @@
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
&led_act {
gpios = <&gpio 47 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
i2c_arm: &i2c1 {
};
i2c_vc: &i2c0 {
};
/ {
__overrides__ {
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,250 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm2708-rpi-bt.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
model = "Raspberry Pi Zero W";
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
/*
* This is based on the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"SDA0",
"SCL0",
/* Used by BT module */
"CTS0",
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD",
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
"CAM_GPIO1", /* GPIO40 */
"WL_ON", /* GPIO41 */
"NC", /* GPIO42 */
"WIFI_CLK", /* GPIO43 */
"CAM_GPIO0", /* GPIO44 */
"BT_ON", /* GPIO45 */
"HDMI_HPD_N",
"STATUS_LED_N",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; /* ALT3 = SD1 */
brcm,pull = <0 2 2 2 2 2>;
};
bt_pins: bt_pins {
brcm,pins = <43>;
brcm,function = <4>; /* alt0:GPCLK2 */
brcm,pull = <0>; /* none */
};
uart0_pins: uart0_pins {
brcm,pins = <30 31 32 33>;
brcm,function = <7>; /* alt3=UART0 */
brcm,pull = <2 0 0 2>; /* up none none up */
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33 30 31>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2 2 0>;
};
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "actpwr";
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 44 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_arm: &i2c1 {};
i2c_vc: &i2c0 {};
i2c_csi_dsi0: &i2c0 {};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,189 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,model-zero", "brcm,bcm2835";
model = "Raspberry Pi Zero";
};
&gpio {
/*
* This is based on the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"SDA0",
"SCL0",
"NC", /* GPIO30 */
"NC", /* GPIO31 */
"CAM_GPIO1", /* GPIO32 */
"NC", /* GPIO33 */
"NC", /* GPIO34 */
"NC", /* GPIO35 */
"NC", /* GPIO36 */
"NC", /* GPIO37 */
"NC", /* GPIO38 */
"NC", /* GPIO39 */
"NC", /* GPIO40 */
"CAM_GPIO0", /* GPIO41 */
"NC", /* GPIO42 */
"NC", /* GPIO43 */
"NC", /* GPIO44 */
"NC", /* GPIO45 */
"HDMI_HPD_N",
"STATUS_LED_N",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
&uart0 {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "actpwr";
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_arm: &i2c1 {};
i2c_vc: &i2c0 {};
i2c_csi_dsi0: &i2c0 {};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,63 @@
/* Downstream modifications common to bcm2835, bcm2836, bcm2837 */
#define i2c0 i2c0mux
#include "bcm2835-rpi.dtsi"
#undef i2c0
#include "bcm270x-rpi.dtsi"
/ {
memory@0 {
device_type = "memory";
reg = <0x0 0x0>;
};
aliases {
i2c2 = &i2c2;
};
__overrides__ {
hdmi = <&hdmi>,"status";
i2c2_iknowwhatimdoing = <&i2c2>,"status";
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
nvmem_cust_rw = <&nvmem_cust>,"rw?";
sd = <&sdhost>,"status";
sd_poll_once = <&sdhost>,"non-removable?";
};
};
&soc {
nvmem {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
nvmem_otp: nvmem_otp {
compatible = "raspberrypi,rpi-otp";
firmware = <&firmware>;
reg = <0 192>;
status = "okay";
};
nvmem_cust: nvmem_cust {
compatible = "raspberrypi,rpi-otp";
firmware = <&firmware>;
reg = <1 8>;
status = "okay";
};
};
};
&sdhost {
pinctrl-names = "default";
pinctrl-0 = <&sdhost_gpio48>;
status = "okay";
};
&hdmi {
power-domains = <&power RPI_POWER_DOMAIN_HDMI>;
status = "disabled";
};
&i2c2 {
status = "disabled";
};

View File

@@ -0,0 +1,19 @@
#define i2c0 i2c0if
#include "bcm2835.dtsi"
#undef i2c0
#include "bcm270x.dtsi"
/ {
__overrides__ {
arm_freq;
};
};
&soc {
dma-ranges = <0x80000000 0x00000000 0x20000000>,
<0x7e000000 0x20000000 0x02000000>;
};
&vc4 {
status = "disabled";
};

View File

@@ -0,0 +1,204 @@
/dts-v1/;
#include "bcm2709.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-smsc9514.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
model = "Raspberry Pi 2 Model B";
};
&gpio {
/*
* Taken from rpi_SCH_2b_1p2_reduced.pdf and
* the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"SDA0",
"SCL0",
"NC", /* GPIO30 */
"LAN_RUN",
"CAM_GPIO1",
"NC", /* GPIO33 */
"NC", /* GPIO34 */
"PWR_LOW_N",
"NC", /* GPIO36 */
"NC", /* GPIO37 */
"USB_LIMIT",
"NC", /* GPIO39 */
"PWM0_OUT",
"CAM_GPIO0",
"SMPS_SCL",
"SMPS_SDA",
"ETH_CLK",
"PWM1_OUT",
"HDMI_HPD_N",
"STATUS_LED",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&uart0 {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 47 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&leds {
led_pwr: led-pwr {
label = "PWR";
gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "input";
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,215 @@
/dts-v1/;
#include "bcm2709.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-csi0-2lane.dtsi"
#include "bcm283x-rpi-csi1-4lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,2-compute-module", "brcm,bcm2836";
model = "Raspberry Pi Compute Module 2";
};
&cam1_reg {
gpio = <&gpio 2 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
cam0_reg: &cam0_regulator {
gpio = <&gpio 30 GPIO_ACTIVE_HIGH>;
};
i2c_csi_dsi0: &i2c0 {
};
&uart0 {
status = "okay";
};
&gpio {
/*
* This is based on the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "GPIO0",
"GPIO1",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"GPIO28",
"GPIO29",
"GPIO30",
"GPIO31",
"GPIO32",
"GPIO33",
"GPIO34",
"GPIO35",
"GPIO36",
"GPIO37",
"GPIO38",
"GPIO39",
"GPIO40",
"GPIO41",
"GPIO42",
"GPIO43",
"GPIO44",
"GPIO45",
"SMPS_SCL",
"SMPS_SDA",
/* Used by eMMC */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins;
brcm,function;
};
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
gpio-controller;
#gpio-cells = <2>;
gpio-line-names = "HDMI_HPD_N",
"EMMC_EN_N",
"NC",
"NC",
"NC",
"NC",
"NC",
"NC";
status = "okay";
};
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
status = "okay";
};
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&virtgpio 0 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&hdmi {
hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,8 @@
#include "bcm2708-rpi.dtsi"
&vchiq {
compatible = "brcm,bcm2836-vchiq", "brcm,bcm2835-vchiq";
};
i2c_arm: &i2c1 {};
i2c_vc: &i2c0 {};

View File

@@ -0,0 +1,29 @@
#define i2c0 i2c0if
#include "bcm2836.dtsi"
#undef i2c0
#include "bcm270x.dtsi"
/ {
soc {
ranges = <0x7e000000 0x3f000000 0x01000000>,
<0x40000000 0x40000000 0x00040000>;
dma-ranges = <0xc0000000 0x00000000 0x3f000000>,
<0x7e000000 0x3f000000 0x01000000>;
};
__overrides__ {
arm_freq = <&v7_cpu0>, "clock-frequency:0",
<&v7_cpu1>, "clock-frequency:0",
<&v7_cpu2>, "clock-frequency:0",
<&v7_cpu3>, "clock-frequency:0";
};
};
&system_timer {
status = "disabled";
};
&vc4 {
status = "disabled";
};

View File

@@ -0,0 +1,201 @@
/* Downstream modifications to bcm2835-rpi.dtsi */
/ {
aliases: aliases {
aux = &aux;
sound = &sound;
soc = &soc;
dma = &dma;
intc = &intc;
watchdog = &watchdog;
random = &random;
mailbox = &mailbox;
gpio = &gpio;
uart0 = &uart0;
uart1 = &uart1;
sdhost = &sdhost;
mmc = &mmc;
mmc1 = &mmc;
mmc0 = &sdhost;
i2s = &i2s;
i2c0 = &i2c0;
i2c1 = &i2c1;
i2c10 = &i2c_csi_dsi;
i2c = &i2c_arm;
spi0 = &spi0;
spi1 = &spi1;
spi2 = &spi2;
usb = &usb;
leds = &leds;
fb = &fb;
thermal = &thermal;
axiperf = &axiperf;
};
/* Define these notional regulators for use by overlays */
vdd_3v3_reg: fixedregulator_3v3 {
compatible = "regulator-fixed";
regulator-always-on;
regulator-max-microvolt = <3300000>;
regulator-min-microvolt = <3300000>;
regulator-name = "3v3";
};
vdd_5v0_reg: fixedregulator_5v0 {
compatible = "regulator-fixed";
regulator-always-on;
regulator-max-microvolt = <5000000>;
regulator-min-microvolt = <5000000>;
regulator-name = "5v0";
};
soc {
gpiomem {
compatible = "brcm,bcm2835-gpiomem";
reg = <0x7e200000 0x1000>;
};
fb: fb {
compatible = "brcm,bcm2708-fb";
firmware = <&firmware>;
status = "okay";
};
/* External sound card */
sound: sound {
status = "disabled";
};
};
__overrides__ {
cache_line_size;
uart0 = <&uart0>,"status";
uart1 = <&uart1>,"status";
i2s = <&i2s>,"status";
spi = <&spi0>,"status";
i2c0 = <&i2c0if>,"status",<&i2c0mux>,"status";
i2c1 = <&i2c1>,"status";
i2c = <&i2c1>,"status";
i2c_arm = <&i2c1>,"status";
i2c_vc = <&i2c0if>,"status",<&i2c0mux>,"status";
i2c0_baudrate = <&i2c0if>,"clock-frequency:0";
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
i2c_baudrate = <&i2c1>,"clock-frequency:0";
i2c_arm_baudrate = <&i2c1>,"clock-frequency:0";
i2c_vc_baudrate = <&i2c0if>,"clock-frequency:0";
watchdog = <&watchdog>,"status";
random = <&random>,"status";
sd_overclock = <&sdhost>,"brcm,overclock-50:0";
sd_force_pio = <&sdhost>,"brcm,force-pio?";
sd_pio_limit = <&sdhost>,"brcm,pio-limit:0";
sd_debug = <&sdhost>,"brcm,debug";
sdio_overclock = <&mmc>,"brcm,overclock-50:0",
<&mmcnr>,"brcm,overclock-50:0";
axiperf = <&axiperf>,"status";
drm_fb0_vc4 = <&aliases>, "drm-fb0=",&vc4;
drm_fb1_vc4 = <&aliases>, "drm-fb1=",&vc4;
drm_fb2_vc4 = <&aliases>, "drm-fb2=",&vc4;
cam1_sync = <&csi1>, "sync-gpios:0=", <&gpio>,
<&csi1>, "sync-gpios:4",
<&csi1>, "sync-gpios:8=", <GPIO_ACTIVE_HIGH>;
cam1_sync_inverted = <&csi1>, "sync-gpios:0=", <&gpio>,
<&csi1>, "sync-gpios:4",
<&csi1>, "sync-gpios:8=", <GPIO_ACTIVE_LOW>;
cam0_sync = <&csi0>, "sync-gpios:0=", <&gpio>,
<&csi0>, "sync-gpios:4",
<&csi0>, "sync-gpios:8=", <GPIO_ACTIVE_HIGH>;
cam0_sync_inverted = <&csi0>, "sync-gpios:0=", <&gpio>,
<&csi0>, "sync-gpios:4",
<&csi0>, "sync-gpios:8=", <GPIO_ACTIVE_LOW>;
cam0_reg = <&cam0_reg>,"status";
cam0_reg_gpio = <&cam0_reg>,"gpio:4",
<&cam0_reg>,"gpio:0=", <&gpio>;
cam1_reg = <&cam1_reg>,"status";
cam1_reg_gpio = <&cam1_reg>,"gpio:4",
<&cam1_reg>,"gpio:0=", <&gpio>;
strict_gpiod = <&chosen>, "bootargs=pinctrl_bcm2835.persist_gpio_outputs=n";
};
};
&uart0 {
skip-init;
};
&uart1 {
skip-init;
};
&txp {
status = "disabled";
};
&i2c0if {
status = "disabled";
};
&i2c0mux {
pinctrl-names = "i2c0", "i2c_csi_dsi";
/delete-property/ clock-frequency;
status = "disabled";
};
&i2c1 {
status = "disabled";
};
i2s_clk_producer: &i2s {};
i2s_clk_consumer: &i2s {};
&clocks {
firmware = <&firmware>;
};
&sdhci {
pinctrl-names = "default";
pinctrl-0 = <&emmc_gpio48>;
bus-width = <4>;
};
&cpu_thermal {
// Add some labels
thermal_trips: trips {
cpu-crit {
// Raise upstream limit of 90C
temperature = <110000>;
};
};
cooling_maps: cooling-maps {
};
};
&vec {
clocks = <&firmware_clocks 15>;
status = "disabled";
};
&firmware {
vcio: vcio {
compatible = "raspberrypi,vcio";
};
};
&vc4 {
raspberrypi,firmware = <&firmware>;
};
#ifndef BCM2711
&hdmi {
reg-names = "hdmi",
"hd";
clocks = <&firmware_clocks 9>,
<&firmware_clocks 13>;
dmas = <&dma (17|(1<<27)|(1<<24))>;
};
#endif

View File

@@ -0,0 +1,264 @@
/* Downstream bcm283x.dtsi diff */
#include <dt-bindings/power/raspberrypi-power.h>
/ {
chosen: chosen {
// Disable audio by default
bootargs = "coherent_pool=1M snd_bcm2835.enable_headphones=0 cgroup_disable=memory";
stdout-path = "serial0:115200n8";
};
soc: soc {
watchdog: watchdog@7e100000 {
/* Add label */
};
random: rng@7e104000 {
/* Add label */
};
spi0: spi@7e204000 {
/* Add label */
};
#ifndef BCM2711
pixelvalve0: pixelvalve@7e206000 {
/* Add label */
status = "disabled";
};
pixelvalve1: pixelvalve@7e207000 {
/* Add label */
status = "disabled";
};
#endif
/delete-node/ mmc@7e300000;
sdhci: mmc: mmc@7e300000 {
compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
reg = <0x7e300000 0x100>;
interrupts = <2 30>;
clocks = <&clocks BCM2835_CLOCK_EMMC>;
dmas = <&dma 11>;
dma-names = "rx-tx";
brcm,overclock-50 = <0>;
status = "disabled";
};
/* A clone of mmc but with non-removable set */
mmcnr: mmcnr@7e300000 {
compatible = "brcm,bcm2835-mmc", "brcm,bcm2835-sdhci";
reg = <0x7e300000 0x100>;
interrupts = <2 30>;
clocks = <&clocks BCM2835_CLOCK_EMMC>;
dmas = <&dma 11>;
dma-names = "rx-tx";
brcm,overclock-50 = <0>;
non-removable;
status = "disabled";
};
hvs: hvs@7e400000 {
/* Add label */
status = "disabled";
};
firmwarekms: firmwarekms@7e600000 {
compatible = "raspberrypi,rpi-firmware-kms";
/* SMI interrupt reg */
reg = <0x7e600000 0x100>;
interrupts = <2 16>;
brcm,firmware = <&firmware>;
status = "disabled";
};
smi: smi@7e600000 {
compatible = "brcm,bcm2835-smi";
reg = <0x7e600000 0x100>;
interrupts = <2 16>;
clocks = <&clocks BCM2835_CLOCK_SMI>;
assigned-clocks = <&clocks BCM2835_CLOCK_SMI>;
assigned-clock-rates = <125000000>;
dmas = <&dma 4>;
dma-names = "rx-tx";
status = "disabled";
};
#ifndef BCM2711
pixelvalve2: pixelvalve@7e807000 {
/* Add label */
status = "disabled";
};
#endif
hdmi@7e902000 { /* hdmi */
status = "disabled";
};
usb@7e980000 { /* usb */
compatible = "brcm,bcm2708-usb";
reg = <0x7e980000 0x10000>,
<0x7e006000 0x1000>;
interrupt-names = "usb",
"soft";
interrupts = <1 9>,
<2 0>;
};
#ifndef BCM2711
v3d@7ec00000 { /* vd3 */
compatible = "brcm,vc4-v3d";
power-domains = <&power RPI_POWER_DOMAIN_V3D>;
status = "disabled";
};
#endif
axiperf: axiperf {
compatible = "brcm,bcm2835-axiperf";
reg = <0x7e009800 0x100>,
<0x7ee08000 0x100>;
firmware = <&firmware>;
status = "disabled";
};
i2c0mux: i2c0mux {
compatible = "i2c-mux-pinctrl";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&i2c0if>;
status = "disabled";
i2c0: i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
};
i2c_csi_dsi: i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
};
};
};
cam1_reg: cam1_regulator {
compatible = "regulator-fixed";
regulator-name = "cam1-reg";
enable-active-high;
/* Needs to be enabled, as removing a regulator is very unsafe */
status = "okay";
};
cam1_clk: cam1_clk {
compatible = "fixed-clock";
#clock-cells = <0>;
status = "disabled";
};
cam0_regulator: cam0_regulator {
compatible = "regulator-fixed";
regulator-name = "cam0-reg";
enable-active-high;
status = "disabled";
};
cam0_clk: cam0_clk {
compatible = "fixed-clock";
#clock-cells = <0>;
status = "disabled";
};
cam_dummy_reg: cam_dummy_reg {
compatible = "regulator-fixed";
regulator-name = "cam-dummy-reg";
status = "okay";
};
__overrides__ {
cam0-pwdn-ctrl;
cam0-pwdn;
cam0-led-ctrl;
cam0-led;
};
};
&gpio {
interrupts = <2 17>, <2 18>;
dpi_18bit_cpadhi_gpio0: dpi_18bit_cpadhi_gpio0 {
brcm,pins = <0 1 2 3 4 5 6 7 8 9
12 13 14 15 16 17
20 21 22 23 24 25>;
brcm,function = <BCM2835_FSEL_ALT2>;
brcm,pull = <0>; /* no pull */
};
dpi_18bit_cpadhi_gpio2: dpi_18bit_cpadhi_gpio2 {
brcm,pins = <2 3 4 5 6 7 8 9
12 13 14 15 16 17
20 21 22 23 24 25>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
dpi_18bit_gpio0: dpi_18bit_gpio0 {
brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19
20 21>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
dpi_18bit_gpio2: dpi_18bit_gpio2 {
brcm,pins = <2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19
20 21>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
dpi_16bit_gpio0: dpi_16bit_gpio0 {
brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
dpi_16bit_gpio2: dpi_16bit_gpio2 {
brcm,pins = <2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
dpi_16bit_cpadhi_gpio0: dpi_16bit_cpadhi_gpio0 {
brcm,pins = <0 1 2 3 4 5 6 7 8
12 13 14 15 16 17
20 21 22 23 24>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
dpi_16bit_cpadhi_gpio2: dpi_16bit_cpadhi_gpio2 {
brcm,pins = <2 3 4 5 6 7 8
12 13 14 15 16 17
20 21 22 23 24>;
brcm,function = <BCM2835_FSEL_ALT2>;
};
};
&uart0 {
/* Enable CTS bug workaround */
cts-event-workaround;
};
&i2s {
#sound-dai-cells = <0>;
dmas = <&dma 2>, <&dma 3>;
dma-names = "tx", "rx";
};
&sdhost {
dmas = <&dma (13|(1<<29))>;
dma-names = "rx-tx";
bus-width = <4>;
brcm,overclock-50 = <0>;
brcm,pio-limit = <1>;
firmware = <&firmware>;
};
&spi0 {
dmas = <&dma 6>, <&dma 7>;
dma-names = "tx", "rx";
};

View File

@@ -0,0 +1,204 @@
/dts-v1/;
#include "bcm2710.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-smsc9514.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,2-model-b-rev2", "brcm,bcm2837";
model = "Raspberry Pi 2 Model B rev 1.2";
};
&gpio {
/*
* Taken from rpi_SCH_2b_1p2_reduced.pdf and
* the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"SDA0",
"SCL0",
"NC", /* GPIO30 */
"LAN_RUN",
"CAM_GPIO1",
"NC", /* GPIO33 */
"NC", /* GPIO34 */
"PWR_LOW_N",
"NC", /* GPIO36 */
"NC", /* GPIO37 */
"USB_LIMIT",
"NC", /* GPIO39 */
"PWM0_OUT",
"CAM_GPIO0",
"SMPS_SCL",
"SMPS_SDA",
"ETH_CLK",
"PWM1_OUT",
"HDMI_HPD_N",
"STATUS_LED",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins = <40 45>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&uart0 {
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 47 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&leds {
led_pwr: led-pwr {
label = "PWR";
gpios = <&gpio 35 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "input";
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 41 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,295 @@
/dts-v1/;
#include "bcm2710.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-lan7515.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
#include "bcm271x-rpi-bt.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
model = "Raspberry Pi 3 Model B+";
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
/*
* Taken from rpi_SCH_3bplus_1p0_reduced.pdf and
* the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"HDMI_HPD_N",
"STATUS_LED_G",
/* Used by BT module */
"CTS0",
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD",
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
"PWM0_OUT",
"PWM1_OUT",
"ETH_CLK",
"WIFI_CLK",
"SDA0",
"SCL0",
"SMPS_SCL",
"SMPS_SDA",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; // alt3 = SD1
brcm,pull = <0 2 2 2 2 2>;
};
bt_pins: bt_pins {
brcm,pins = <43>;
brcm,function = <4>; /* alt0:GPCLK2 */
brcm,pull = <0>;
};
uart0_pins: uart0_pins {
brcm,pins = <32 33>;
brcm,function = <7>; /* alt3=UART0 */
brcm,pull = <0 2>;
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33 30 31>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2 2 0>;
};
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
gpio-controller;
#gpio-cells = <2>;
gpio-line-names = "BT_ON",
"WL_ON",
"PWR_LED_R",
"LAN_RUN",
"NC",
"CAM_GPIO0",
"CAM_GPIO1",
"NC";
status = "okay";
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 29 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&leds {
led_pwr: led-pwr {
label = "PWR";
gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "default-on";
};
};
&hdmi {
hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&eth_phy {
microchip,eee-enabled;
microchip,tx-lpi-timer = <600>; /* non-aggressive*/
microchip,downshift-after = <2>;
};
&cam1_reg {
gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
eee = <&eth_phy>,"microchip,eee-enabled?";
tx_lpi_timer = <&eth_phy>,"microchip,tx-lpi-timer:0";
eth_led0 = <&eth_phy>,"microchip,led-modes:0";
eth_led1 = <&eth_phy>,"microchip,led-modes:4";
eth_downshift_after = <&eth_phy>,"microchip,downshift-after:0";
eth_max_speed = <&eth_phy>,"max-speed:0";
};
};

View File

@@ -0,0 +1,293 @@
/dts-v1/;
#include "bcm2710.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-smsc9514.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
#include "bcm271x-rpi-bt.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
model = "Raspberry Pi 3 Model B";
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
/*
* Taken from rpi_SCH_3b_1p2_reduced.pdf and
* the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"NC", /* GPIO 28 */
"LAN_RUN_BOOT",
/* Used by BT module */
"CTS0",
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD",
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
"PWM0_OUT",
"PWM1_OUT",
"ETH_CLK",
"WIFI_CLK",
"SDA0",
"SCL0",
"SMPS_SCL",
"SMPS_SDA",
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; // alt3 = SD1
brcm,pull = <0 2 2 2 2 2>;
};
bt_pins: bt_pins {
brcm,pins = <43>;
brcm,function = <4>; /* alt0:GPCLK2 */
brcm,pull = <0>;
};
uart0_pins: uart0_pins {
brcm,pins = <32 33>;
brcm,function = <7>; /* alt3=UART0 */
brcm,pull = <0 2>;
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2>;
};
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
gpio-controller;
#gpio-cells = <2>;
gpio-line-names = "BT_ON",
"WL_ON",
"STATUS_LED",
"LAN_RUN",
"HDMI_HPD_N",
"CAM_GPIO0",
"CAM_GPIO1",
"PWR_LOW_N";
status = "okay";
};
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
status = "okay";
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&bt {
max-speed = <921600>;
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&virtgpio 0 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&leds {
led_pwr: led-pwr {
label = "PWR";
gpios = <&expgpio 7 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "input";
};
};
&hdmi {
hpd-gpios = <&expgpio 4 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,252 @@
/dts-v1/;
#include "bcm2710.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
#include "bcm2708-rpi-bt.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,0-compute-module", "brcm,bcm2837";
model = "Raspberry Pi Compute Module 0";
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
/*
* These names are (mostly) from the schematic.
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"HDMI_HPD_N",
"STATUS_LED_N",
/* Used by BT module */
"BT_CTS",
"BT_RTS",
"BT_TXD",
"BT_RXD",
/* Used by Wifi */
"WIFI_SD_CLK",
"WIFI_SD_CMD",
"WIFI_SD_D0",
"WIFI_SD_D1",
"WIFI_SD_D2",
"WIFI_SD_D3",
"CAM_GPIO", /* GPIO40 */
"WL_ON", /* GPIO41 */
"BT_ON", /* GPIO42 */
"EMMC_REENABLE_N", /* GPIO43 */
"SDA0", /* GPIO44 */
"SCL0", /* GPIO45 */
"INT_SDA", /* GPIO46 */
"INT_SCL", /* GPIO47 */
/* Used by SD Card */
"SD_CLK",
"SD_CMD",
"SD_D0",
"SD_D1",
"SD_D2",
"SD_D3";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; // alt3 = SD1
brcm,pull = <0 2 2 2 2 2>;
};
bt_pins: bt_pins {
brcm,pins = <43>;
brcm,function = <4>; /* alt0:GPCLK2 */
brcm,pull = <0>;
};
uart0_pins: uart0_pins {
brcm,pins = <30 31 32 33>;
brcm,function = <7>; /* alt3=UART0 */
brcm,pull = <2 0 0 2>; /* up none none up */
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33 30 31>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2 2 0>;
};
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 29 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "actpwr";
};
&hdmi {
hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&bt {
shutdown-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
&minibt {
shutdown-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
&cam1_reg {
gpio = <&gpio 40 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,215 @@
/dts-v1/;
#include "bcm2710.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-csi0-2lane.dtsi"
#include "bcm283x-rpi-csi1-4lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
model = "Raspberry Pi Compute Module 3";
};
&cam1_reg {
gpio = <&gpio 3 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
cam0_reg: &cam0_regulator {
gpio = <&gpio 31 GPIO_ACTIVE_HIGH>;
};
i2c_csi_dsi0: &i2c0 {
};
&uart0 {
status = "okay";
};
&gpio {
/*
* This is based on the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "GPIO0",
"GPIO1",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"GPIO28",
"GPIO29",
"GPIO30",
"GPIO31",
"GPIO32",
"GPIO33",
"GPIO34",
"GPIO35",
"GPIO36",
"GPIO37",
"GPIO38",
"GPIO39",
"GPIO40",
"GPIO41",
"GPIO42",
"GPIO43",
"GPIO44",
"GPIO45",
"SMPS_SCL",
"SMPS_SDA",
/* Used by eMMC */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
audio_pins: audio_pins {
brcm,pins;
brcm,function;
};
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
gpio-controller;
#gpio-cells = <2>;
gpio-line-names = "HDMI_HPD_N",
"EMMC_EN_N",
"NC",
"NC",
"NC",
"NC",
"NC",
"NC";
status = "okay";
};
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
status = "okay";
};
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&virtgpio 0 GPIO_ACTIVE_HIGH>;
default-state = "off";
linux,default-trigger = "mmc0";
};
&hdmi {
hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,257 @@
/dts-v1/;
#include "bcm2710.dtsi"
#include "bcm2709-rpi.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
#include "bcm2708-rpi-bt.dtsi"
#include "bcm283x-rpi-led-deprecated.dtsi"
/ {
compatible = "raspberrypi,model-zero-2-w", "brcm,bcm2837";
model = "Raspberry Pi Zero 2 W";
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
/*
* This is based on the official GPU firmware DT blob.
*
* Legend:
* "NC" = not connected (no rail from the SoC)
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"HDMI_HPD_N",
"STATUS_LED_N",
/* Used by BT module */
"CTS0",
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD",
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
"CAM_GPIO1", /* GPIO40 */
"WL_ON", /* GPIO41 */
"BT_ON", /* GPIO42 */
"WIFI_CLK", /* GPIO43 */
"SDA0", /* GPIO44 */
"SCL0", /* GPIO45 */
"SMPS_SCL", /* GPIO46 */
"SMPS_SDA", /* GPIO47 */
/* Used by SD Card */
"SD_CLK_R",
"SD_CMD_R",
"SD_DATA0_R",
"SD_DATA1_R",
"SD_DATA2_R",
"SD_DATA3_R";
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <4>; /* alt0 */
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <1>; /* output */
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <4>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <4>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <4>; /* alt0 */
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; // alt3 = SD1
brcm,pull = <0 2 2 2 2 2>;
};
bt_pins: bt_pins {
brcm,pins = <43>;
brcm,function = <4>; /* alt0:GPCLK2 */
brcm,pull = <0>;
};
uart0_pins: uart0_pins {
brcm,pins = <30 31 32 33>;
brcm,function = <7>; /* alt3=UART0 */
brcm,pull = <2 0 0 2>; /* up none none up */
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33 30 31>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2 2 0>;
};
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&led_act {
gpios = <&gpio 29 GPIO_ACTIVE_LOW>;
default-state = "off";
linux,default-trigger = "actpwr";
};
&hdmi {
hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&bt {
shutdown-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
&minibt {
shutdown-gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
&cam1_reg {
gpio = <&gpio 40 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1 @@
#include "bcm2710-rpi-zero-2-w.dts"

View File

@@ -0,0 +1,32 @@
#define i2c0 i2c0if
#include "bcm2837.dtsi"
#undef i2c0
#include "bcm270x.dtsi"
/ {
compatible = "brcm,bcm2837", "brcm,bcm2836";
arm-pmu {
compatible = "arm,cortex-a53-pmu", "arm,cortex-a7-pmu";
};
soc {
dma-ranges = <0xc0000000 0x00000000 0x3f000000>,
<0x7e000000 0x3f000000 0x01000000>;
};
__overrides__ {
arm_freq = <&cpu0>, "clock-frequency:0",
<&cpu1>, "clock-frequency:0",
<&cpu2>, "clock-frequency:0",
<&cpu3>, "clock-frequency:0";
};
};
&system_timer {
status = "disabled";
};
&vc4 {
status = "disabled";
};

View File

@@ -1,11 +1,19 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
#define BCM2711
#define i2c0 i2c0if
#include "bcm2711.dtsi"
#include "bcm2711-rpi.dtsi"
/delete-node/&i2c0mux;
#include "bcm283x-rpi-led-deprecated.dtsi"
#include "bcm283x-rpi-usb-peripheral.dtsi"
#include "bcm283x-rpi-wifi-bt.dtsi"
#include <dt-bindings/leds/common.h>
#undef i2c0
#include "bcm270x.dtsi"
#define i2c0 i2c0mux
#undef i2c0
/delete-node/ &cam1_reg;
/ {
compatible = "raspberrypi,4-model-b", "brcm,bcm2711";
@@ -68,7 +76,7 @@
"VDD_SD_IO_SEL",
"CAM_GPIO", /* 5 */
"SD_PWR_ON",
"";
"SD_OC_N";
};
&gpio {
@@ -82,21 +90,21 @@
*/
gpio-line-names = "ID_SDA", /* 0 */
"ID_SCL",
"SDA1",
"SCL1",
"GPIO_GCLK",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5", /* 5 */
"GPIO6",
"SPI_CE1_N",
"SPI_CE0_N",
"SPI_MISO",
"SPI_MOSI", /* 10 */
"SPI_SCLK",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10", /* 10 */
"GPIO11",
"GPIO12",
"GPIO13",
/* Serial port */
"TXD1",
"RXD1", /* 15 */
"GPIO14",
"GPIO15", /* 15 */
"GPIO16",
"GPIO17",
"GPIO18",
@@ -214,7 +222,7 @@
led@0 {
reg = <0>;
color = <LED_COLOR_ID_GREEN>;
function = LED_FUNCTION_LAN;
function = "lan";//LED_FUNCTION_LAN;
default-state = "keep";
};
@@ -222,7 +230,7 @@
led@1 {
reg = <1>;
color = <LED_COLOR_ID_AMBER>;
function = LED_FUNCTION_LAN;
function = "lan";//LED_FUNCTION_LAN;
default-state = "keep";
};
};
@@ -270,3 +278,233 @@
&wifi_pwrseq {
reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
};
// =============================================
// Downstream rpi- changes
#include "bcm271x-rpi-bt.dtsi"
/ {
soc {
/delete-node/ pixelvalve@7e807000;
/delete-node/ hdmi@7e902000;
};
};
&phy1 {
/delete-node/ leds;
};
#include "bcm2711-rpi-ds.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
/ {
/delete-node/ wifi-pwrseq;
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
};
&uart0 {
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-0 = <&uart1_pins>;
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&gpio {
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"RGMII_MDIO",
"RGMIO_MDC",
/* Used by BT module */
"CTS0", /* 30 */
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD", /* 35 */
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
/* Shared with SPI flash */
"PWM0_MISO", /* 40 */
"PWM1_MOSI",
"STATUS_LED_G_CLK",
"SPIFLASH_CE_N",
"SDA0",
"SCL0", /* 45 */
"RGMII_RXCLK",
"RGMII_RXCTL",
"RGMII_RXD0",
"RGMII_RXD1",
"RGMII_RXD2", /* 50 */
"RGMII_RXD3",
"RGMII_TXCLK",
"RGMII_TXCTL",
"RGMII_TXD0",
"RGMII_TXD1", /* 55 */
"RGMII_TXD2",
"RGMII_TXD3";
bt_pins: bt_pins {
brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
// to fool pinctrl
brcm,function = <0>;
brcm,pull = <2>;
};
uart0_pins: uart0_pins {
brcm,pins = <32 33>;
brcm,function = <BCM2835_FSEL_ALT3>;
brcm,pull = <0 2>;
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33 30 31>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2 2 0>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
// =============================================
// Board specific stuff here
&sdhost {
status = "disabled";
};
&phy1 {
led-modes = <0x00 0x08>; /* link/activity link */
};
&gpio {
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
brcm,pull = <0>;
};
};
&led_act {
default-state = "off";
linux,default-trigger = "mmc0";
};
&led_pwr {
default-state = "off";
};
&pwm1 {
status = "disabled";
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
};
cam0_reg: &cam_dummy_reg {
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_headphones=1 snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_headphones=0 snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
eth_led0 = <&phy1>,"led-modes:0";
eth_led1 = <&phy1>,"led-modes:4";
};
};

View File

@@ -1,5 +1,4 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
#include "bcm2711-rpi-4-b.dts"
/ {
@@ -37,8 +36,53 @@
gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
/delete-node/ &led_act;
&pm {
/delete-property/ system-power-controller;
};
// =============================================
// Downstream rpi- changes
/ {
chosen {
stdout-path = "serial0:115200n8";
};
};
&audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
// Declare the LED but leave it disabled, in case a user wants to map it
// to a GPIO on the header
&led_act {
default-state = "off";
gpios = <&gpio 0 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
&led_pwr {
default-state = "off";
};
&cam1_reg {
/delete-property/ gpio;
};
cam0_reg: &cam_dummy_reg {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4",
<&led_act>,"status=okay";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,497 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
#define BCM2711
#define i2c0 i2c0if
#include "bcm2711.dtsi"
#include "bcm2711-rpi.dtsi"
/delete-node/&i2c0mux;
#include "bcm283x-rpi-led-deprecated.dtsi"
#include "bcm283x-rpi-wifi-bt.dtsi"
#undef i2c0
#include "bcm270x.dtsi"
#define i2c0 i2c0mux
#undef i2c0
/ {
compatible = "raspberrypi,4-compute-module", "brcm,bcm2711";
model = "Raspberry Pi Compute Module 4";
chosen {
/* 8250 auxiliary UART instead of pl011 */
stdout-path = "serial1:115200n8";
};
sd_io_1v8_reg: sd_io_1v8_reg {
compatible = "regulator-gpio";
regulator-name = "vdd-sd-io";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
regulator-always-on;
regulator-settling-time-us = <5000>;
gpios = <&expgpio 4 GPIO_ACTIVE_HIGH>;
states = <1800000 0x1>,
<3300000 0x0>;
status = "okay";
};
sd_vcc_reg: sd_vcc_reg {
compatible = "regulator-fixed";
regulator-name = "vcc-sd";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
enable-active-high;
gpio = <&expgpio 6 GPIO_ACTIVE_HIGH>;
};
};
&bt {
shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
};
&ddc0 {
status = "okay";
};
&ddc1 {
status = "okay";
};
&expgpio {
gpio-line-names = "BT_ON",
"WL_ON",
"PWR_LED_OFF",
"ANT1",
"VDD_SD_IO_SEL",
"CAM_GPIO",
"SD_PWR_ON",
"ANT2";
ant1: ant1 {
gpio-hog;
gpios = <3 GPIO_ACTIVE_HIGH>;
output-high;
};
ant2: ant2 {
gpio-hog;
gpios = <7 GPIO_ACTIVE_HIGH>;
output-low;
};
};
&gpio {
/*
* Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
* the official GPU firmware DT blob.
*
* Legend:
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"SDA1",
"SCL1",
"GPIO_GCLK",
"GPIO5",
"GPIO6",
"SPI_CE1_N",
"SPI_CE0_N",
"SPI_MISO",
"SPI_MOSI",
"SPI_SCLK",
"GPIO12",
"GPIO13",
/* Serial port */
"TXD1",
"RXD1",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"RGMII_MDIO",
"RGMIO_MDC",
/* Used by BT module */
"CTS0",
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD",
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
/* Shared with SPI flash */
"PWM0_MISO",
"PWM1_MOSI",
"STATUS_LED_G_CLK",
"SPIFLASH_CE_N",
"SDA0",
"SCL0",
"RGMII_RXCLK",
"RGMII_RXCTL",
"RGMII_RXD0",
"RGMII_RXD1",
"RGMII_RXD2",
"RGMII_RXD3",
"RGMII_TXCLK",
"RGMII_TXCTL",
"RGMII_TXD0",
"RGMII_TXD1",
"RGMII_TXD2",
"RGMII_TXD3";
};
&hdmi0 {
status = "okay";
};
&hdmi1 {
status = "okay";
};
&led_act {
gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
&leds {
led_pwr: led-pwr {
label = "PWR";
gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
default-state = "keep";
linux,default-trigger = "default-on";
};
};
&pixelvalve0 {
status = "okay";
};
&pixelvalve1 {
status = "okay";
};
&pixelvalve2 {
status = "okay";
};
&pixelvalve4 {
status = "okay";
};
&pwm1 {
pinctrl-names = "default";
pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
status = "okay";
};
/* EMMC2 is used to drive the EMMC card */
&emmc2 {
bus-width = <8>;
vqmmc-supply = <&sd_io_1v8_reg>;
vmmc-supply = <&sd_vcc_reg>;
broken-cd;
status = "okay";
};
&genet {
phy-handle = <&phy1>;
phy-mode = "rgmii-rxid";
status = "okay";
};
&genet_mdio {
phy1: ethernet-phy@0 {
/* No PHY interrupt */
reg = <0x0>;
};
};
&pcie0 {
pci@0,0 {
device_type = "pci";
#address-cells = <3>;
#size-cells = <2>;
ranges;
reg = <0 0 0 0 0>;
};
};
/* uart0 communicates with the BT module */
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
uart-has-rtscts;
};
/* uart1 is mapped to the pin header */
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_gpio14>;
status = "okay";
};
&vc4 {
status = "okay";
};
&vec {
status = "disabled";
};
&wifi_pwrseq {
reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
};
// =============================================
// Downstream rpi- changes
#include "bcm271x-rpi-bt.dtsi"
/ {
soc {
/delete-node/ pixelvalve@7e807000;
/delete-node/ hdmi@7e902000;
};
};
#include "bcm2711-rpi-ds.dtsi"
#include "bcm283x-rpi-csi0-2lane.dtsi"
#include "bcm283x-rpi-csi1-4lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
/ {
/delete-node/ wifi-pwrseq;
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
};
&uart0 {
pinctrl-0 = <&uart0_pins &bt_pins>;
status = "okay";
};
&uart1 {
pinctrl-0 = <&uart1_pins>;
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&gpio {
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"RGMII_MDIO",
"RGMIO_MDC",
/* Used by BT module */
"CTS0",
"RTS0",
"TXD0",
"RXD0",
/* Used by Wifi */
"SD1_CLK",
"SD1_CMD",
"SD1_DATA0",
"SD1_DATA1",
"SD1_DATA2",
"SD1_DATA3",
/* Shared with SPI flash */
"PWM0_MISO",
"PWM1_MOSI",
"STATUS_LED_G_CLK",
"SPIFLASH_CE_N",
"SDA0",
"SCL0",
"RGMII_RXCLK",
"RGMII_RXCTL",
"RGMII_RXD0",
"RGMII_RXD1",
"RGMII_RXD2",
"RGMII_RXD3",
"RGMII_TXCLK",
"RGMII_TXCTL",
"RGMII_TXD0",
"RGMII_TXD1",
"RGMII_TXD2",
"RGMII_TXD3";
bt_pins: bt_pins {
brcm,pins = "-"; // non-empty to keep btuart happy, //4 = 0
// to fool pinctrl
brcm,function = <0>;
brcm,pull = <2>;
};
uart0_pins: uart0_pins {
brcm,pins = <32 33>;
brcm,function = <BCM2835_FSEL_ALT3>;
brcm,pull = <0 2>;
};
uart1_pins: uart1_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
uart1_bt_pins: uart1_bt_pins {
brcm,pins = <32 33 30 31>;
brcm,function = <BCM2835_FSEL_ALT5>; /* alt5=UART1 */
brcm,pull = <0 2 2 0>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
// =============================================
// Board specific stuff here
&sdhost {
status = "disabled";
};
&phy1 {
led-modes = <0x00 0x08>; /* link/activity link */
};
&gpio {
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
&led_act {
default-state = "off";
linux,default-trigger = "mmc0";
};
&led_pwr {
default-state = "off";
};
&pwm1 {
status = "disabled";
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
cam0_reg: &cam1_reg {
gpio = <&expgpio 5 GPIO_ACTIVE_HIGH>;
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
pwr_led_gpio = <&led_pwr>,"gpios:4";
pwr_led_activelow = <&led_pwr>,"gpios:8";
pwr_led_trigger = <&led_pwr>,"linux,default-trigger";
eth_led0 = <&phy1>,"led-modes:0";
eth_led1 = <&phy1>,"led-modes:4";
ant1 = <&ant1>,"output-high?=on",
<&ant1>, "output-low?=off",
<&ant2>, "output-high?=off",
<&ant2>, "output-low?=on";
ant2 = <&ant1>,"output-high?=off",
<&ant1>, "output-low?=on",
<&ant2>, "output-high?=on",
<&ant2>, "output-low?=off";
noant = <&ant1>,"output-high?=off",
<&ant1>, "output-low?=on",
<&ant2>, "output-high?=off",
<&ant2>, "output-low?=on";
noanthogs = <&ant1>,"status=disabled",
<&ant2>, "status=disabled";
pcie_tperst_clk_ms = <&pcie0>,"brcm,tperst-clk-ms:0";
};
};

View File

@@ -0,0 +1,293 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
#define BCM2711
#define i2c0 i2c0if
#include "bcm2711.dtsi"
#include "bcm2711-rpi.dtsi"
/delete-node/&i2c0mux;
#include "bcm283x-rpi-led-deprecated.dtsi"
#undef i2c0
#include "bcm270x.dtsi"
#define i2c0 i2c0mux
#undef i2c0
/ {
compatible = "raspberrypi,4-compute-module-s", "brcm,bcm2711";
model = "Raspberry Pi Compute Module 4S";
};
&ddc0 {
status = "okay";
};
&gpio {
/*
* Parts taken from rpi_SCH_4b_4p0_reduced.pdf and
* the official GPU firmware DT blob.
*
* Legend:
* "FOO" = GPIO line named "FOO" on the schematic
* "FOO_N" = GPIO line named "FOO" on schematic, active low
*/
gpio-line-names = "ID_SDA",
"ID_SCL",
"GPIO2",
"GPIO3",
"GPIO4",
"GPIO5",
"GPIO6",
"GPIO7",
"GPIO8",
"GPIO9",
"GPIO10",
"GPIO11",
"GPIO12",
"GPIO13",
"GPIO14",
"GPIO15",
"GPIO16",
"GPIO17",
"GPIO18",
"GPIO19",
"GPIO20",
"GPIO21",
"GPIO22",
"GPIO23",
"GPIO24",
"GPIO25",
"GPIO26",
"GPIO27",
"GPIO28",
"GPIO29",
"GPIO30",
"GPIO31",
"GPIO32",
"GPIO33",
"GPIO34",
"GPIO35",
"GPIO36",
"GPIO37",
"GPIO38",
"GPIO39",
"PWM0_MISO",
"PWM1_MOSI",
"GPIO42",
"GPIO43",
"GPIO44",
"GPIO45";
};
&hdmi0 {
status = "okay";
};
&led_act {
gpios = <&virtgpio 0 GPIO_ACTIVE_HIGH>;
};
&pixelvalve0 {
status = "okay";
};
&pixelvalve1 {
status = "okay";
};
&pixelvalve2 {
status = "okay";
};
&pixelvalve4 {
status = "okay";
};
&pwm1 {
pinctrl-names = "default";
pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
status = "okay";
};
/* EMMC2 is used to drive the EMMC card */
&emmc2 {
bus-width = <8>;
broken-cd;
status = "okay";
};
&pcie0 {
status = "disabled";
};
&vchiq {
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
};
&vc4 {
status = "okay";
};
&vec {
status = "disabled";
};
// =============================================
// Downstream rpi- changes
#include "bcm2711-rpi-ds.dtsi"
/ {
soc {
/delete-node/ pixelvalve@7e807000;
/delete-node/ hdmi@7e902000;
};
};
#include "bcm283x-rpi-csi0-2lane.dtsi"
#include "bcm283x-rpi-csi1-4lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
/ {
chosen {
bootargs = "coherent_pool=1M snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave";
};
aliases {
serial0 = &uart0;
serial1 = &uart1;
/delete-property/ i2c20;
/delete-property/ i2c21;
};
/delete-node/ wifi-pwrseq;
};
&firmware {
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
status = "okay";
};
};
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
status = "okay";
};
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>;
spidev0: spidev@0{
compatible = "spidev";
reg = <0>; /* CE0 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
spidev1: spidev@1{
compatible = "spidev";
reg = <1>; /* CE1 */
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <125000000>;
};
};
&gpio {
uart0_pins: uart0_pins {
brcm,pins;
brcm,function;
brcm,pull;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
// =============================================
// Board specific stuff here
/* Enable USB in OTG-aware mode */
&usb {
compatible = "brcm,bcm2835-usb";
dr_mode = "otg";
g-np-tx-fifo-size = <32>;
g-rx-fifo-size = <558>;
g-tx-fifo-size = <512 512 512 512 512 256 256>;
status = "okay";
};
&sdhost {
status = "disabled";
};
&gpio {
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
/* Permanently disable HDMI1 */
&hdmi1 {
compatible = "disabled";
};
/* Permanently disable DDC1 */
&ddc1 {
compatible = "disabled";
};
&led_act {
default-state = "off";
linux,default-trigger = "mmc0";
};
&pwm1 {
status = "disabled";
};
&vchiq {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&cam1_reg {
gpio = <&gpio 3 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
cam0_reg: &cam0_regulator {
gpio = <&gpio 31 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
i2c_csi_dsi0: &i2c0 {
};
/ {
__overrides__ {
audio = <&chosen>,"bootargs{on='snd_bcm2835.enable_hdmi=1',off='snd_bcm2835.enable_hdmi=0'}";
act_led_gpio = <&led_act>,"gpios:4";
act_led_activelow = <&led_act>,"gpios:8";
act_led_trigger = <&led_act>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,562 @@
// SPDX-License-Identifier: GPL-2.0
#include "bcm270x-rpi.dtsi"
/ {
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_headphones=0 cgroup_disable=memory numa_policy=interleave nvme.max_host_mem_size_mb=0";
};
__overrides__ {
arm_freq;
eee = <&chosen>,"bootargs{on='',off='genet.eee=N'}";
hdmi = <&hdmi0>,"status",
<&hdmi1>,"status";
nvmem_cust_rw = <&nvmem_cust>,"rw?";
nvmem_priv_rw = <&nvmem_priv>,"rw?";
pcie = <&pcie0>,"status";
sd = <&emmc2>,"status";
sd_poll_once = <&emmc2>, "non-removable?";
spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
<&spi0>, "dmas:8=", <&dma40>;
i2s_dma4 = <&i2s>, "dmas:0=", <&dma40>,
<&i2s>, "dmas:8=", <&dma40>;
};
scb: scb {
/* Add a label */
};
soc: soc {
/* Add a label */
};
chosen {
stdout-path = "serial0:115200n8";
};
aliases {
uart2 = &uart2;
uart3 = &uart3;
uart4 = &uart4;
uart5 = &uart5;
serial0 = &uart1;
serial1 = &uart0;
serial2 = &uart2;
serial3 = &uart3;
serial4 = &uart4;
serial5 = &uart5;
mmc0 = &emmc2;
mmc1 = &mmcnr;
mmc2 = &sdhost;
i2c3 = &i2c3;
i2c4 = &i2c4;
i2c5 = &i2c5;
i2c6 = &i2c6;
i2c20 = &ddc0;
i2c21 = &ddc1;
spi3 = &spi3;
spi4 = &spi4;
spi5 = &spi5;
spi6 = &spi6;
/delete-property/ intc;
};
/*
* Add a node with a dma-ranges value that exists only to be found
* by of_dma_get_max_cpu_address, and hence limit the DMA zone.
*/
zone_dma {
#address-cells = <1>;
#size-cells = <1>;
dma-ranges = <0x0 0x0 0x0 0x40000000>;
};
};
&vc4 {
raspberrypi,firmware = <&firmware>;
};
&cma {
/* Limit cma to the lower 768MB to allow room for HIGHMEM on 32-bit */
alloc-ranges = <0x0 0x00000000 0x30000000>;
};
&soc {
/* Add the physical <-> DMA mapping for the I/O space */
dma-ranges = <0xc0000000 0x0 0x00000000 0x40000000>,
<0x7c000000 0x0 0xfc000000 0x03800000>;
nvmem {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
nvmem_otp: nvmem_otp {
compatible = "raspberrypi,rpi-otp";
firmware = <&firmware>;
reg = <0 166>;
status = "okay";
};
nvmem_cust: nvmem_cust {
compatible = "raspberrypi,rpi-otp";
firmware = <&firmware>;
reg = <1 8>;
status = "okay";
};
nvmem_priv: nvmem_priv {
compatible = "raspberrypi,rpi-otp";
firmware = <&firmware>;
reg = <3 8>;
status = "okay";
};
};
};
&scb {
#size-cells = <2>;
ranges = <0x0 0x7c000000 0x0 0xfc000000 0x0 0x03800000>,
<0x0 0x40000000 0x0 0xff800000 0x0 0x00800000>,
<0x6 0x00000000 0x6 0x00000000 0x0 0x40000000>,
<0x0 0x00000000 0x0 0x00000000 0x0 0xfc000000>;
dma-ranges = <0x4 0x7c000000 0x0 0xfc000000 0x0 0x03800000>,
<0x0 0x00000000 0x0 0x00000000 0x4 0x00000000>;
dma40: dma@7e007b00 {
compatible = "brcm,bcm2711-dma";
reg = <0x0 0x7e007b00 0x0 0x400>;
interrupts =
<GIC_SPI 89 IRQ_TYPE_LEVEL_HIGH>, /* dma4 11 */
<GIC_SPI 90 IRQ_TYPE_LEVEL_HIGH>, /* dma4 12 */
<GIC_SPI 91 IRQ_TYPE_LEVEL_HIGH>, /* dma4 13 */
<GIC_SPI 92 IRQ_TYPE_LEVEL_HIGH>; /* dma4 14 */
interrupt-names = "dma11",
"dma12",
"dma13",
"dma14";
#dma-cells = <1>;
brcm,dma-channel-mask = <0x7800>;
};
xhci: xhci@7e9c0000 {
compatible = "generic-xhci";
status = "disabled";
reg = <0x0 0x7e9c0000 0x0 0x100000>;
interrupts = <GIC_SPI 176 IRQ_TYPE_LEVEL_HIGH>;
power-domains = <&power RPI_POWER_DOMAIN_USB>;
};
};
&hevc_dec {
reg = <0x0 0x7eb00000 0x0 0x10000>, /* HEVC */
<0x0 0x7eb10000 0x0 0x1000>; /* INTC */
};
&pcie0 {
reg = <0x0 0x7d500000 0x0 0x9310>;
ranges = <0x02000000 0x0 0xc0000000 0x6 0x00000000
0x0 0x40000000>;
};
&genet {
reg = <0x0 0x7d580000 0x0 0x10000>;
};
&dma40 {
/* The VPU firmware uses DMA channel 11 for VCHIQ */
brcm,dma-channel-mask = <0x7000>;
};
&vchiq {
compatible = "brcm,bcm2711-vchiq";
};
&firmwarekms {
compatible = "raspberrypi,rpi-firmware-kms-2711";
interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
};
&smi {
interrupts = <GIC_SPI 112 IRQ_TYPE_LEVEL_HIGH>;
};
&mmc {
interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
};
&mmcnr {
interrupts = <GIC_SPI 126 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <0>;
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
&csi0 {
interrupts = <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>;
};
&csi1 {
interrupts = <GIC_SPI 103 IRQ_TYPE_LEVEL_HIGH>;
};
&random {
compatible = "brcm,bcm2711-rng200";
status = "okay";
};
&usb {
/* Enable the FIQ support */
reg = <0x7e980000 0x10000>,
<0x7e00b200 0x200>;
interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 40 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
&gpio {
interrupts = <GIC_SPI 113 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 114 IRQ_TYPE_LEVEL_HIGH>;
spi0_pins: spi0_pins {
brcm,pins = <9 10 11>;
brcm,function = <BCM2835_FSEL_ALT0>;
};
spi0_cs_pins: spi0_cs_pins {
brcm,pins = <8 7>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
spi3_pins: spi3_pins {
brcm,pins = <1 2 3>;
brcm,function = <BCM2835_FSEL_ALT3>;
};
spi3_cs_pins: spi3_cs_pins {
brcm,pins = <0 24>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
spi4_pins: spi4_pins {
brcm,pins = <5 6 7>;
brcm,function = <BCM2835_FSEL_ALT3>;
};
spi4_cs_pins: spi4_cs_pins {
brcm,pins = <4 25>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
spi5_pins: spi5_pins {
brcm,pins = <13 14 15>;
brcm,function = <BCM2835_FSEL_ALT3>;
};
spi5_cs_pins: spi5_cs_pins {
brcm,pins = <12 26>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
spi6_pins: spi6_pins {
brcm,pins = <19 20 21>;
brcm,function = <BCM2835_FSEL_ALT3>;
};
spi6_cs_pins: spi6_cs_pins {
brcm,pins = <18 27>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
i2c0_pins: i2c0 {
brcm,pins = <0 1>;
brcm,function = <BCM2835_FSEL_ALT0>;
brcm,pull = <BCM2835_PUD_UP>;
};
i2c1_pins: i2c1 {
brcm,pins = <2 3>;
brcm,function = <BCM2835_FSEL_ALT0>;
brcm,pull = <BCM2835_PUD_UP>;
};
i2c3_pins: i2c3 {
brcm,pins = <4 5>;
brcm,function = <BCM2835_FSEL_ALT5>;
brcm,pull = <BCM2835_PUD_UP>;
};
i2c4_pins: i2c4 {
brcm,pins = <8 9>;
brcm,function = <BCM2835_FSEL_ALT5>;
brcm,pull = <BCM2835_PUD_UP>;
};
i2c5_pins: i2c5 {
brcm,pins = <12 13>;
brcm,function = <BCM2835_FSEL_ALT5>;
brcm,pull = <BCM2835_PUD_UP>;
};
i2c6_pins: i2c6 {
brcm,pins = <22 23>;
brcm,function = <BCM2835_FSEL_ALT5>;
brcm,pull = <BCM2835_PUD_UP>;
};
i2s_pins: i2s {
brcm,pins = <18 19 20 21>;
brcm,function = <BCM2835_FSEL_ALT0>;
};
sdio_pins: sdio_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <BCM2835_FSEL_ALT3>; // alt3 = SD1
brcm,pull = <0 2 2 2 2 2>;
};
uart2_pins: uart2_pins {
brcm,pins = <0 1>;
brcm,function = <BCM2835_FSEL_ALT4>;
brcm,pull = <0 2>;
};
uart3_pins: uart3_pins {
brcm,pins = <4 5>;
brcm,function = <BCM2835_FSEL_ALT4>;
brcm,pull = <0 2>;
};
uart4_pins: uart4_pins {
brcm,pins = <8 9>;
brcm,function = <BCM2835_FSEL_ALT4>;
brcm,pull = <0 2>;
};
uart5_pins: uart5_pins {
brcm,pins = <12 13>;
brcm,function = <BCM2835_FSEL_ALT4>;
brcm,pull = <0 2>;
};
};
&emmc2 {
mmc-ddr-3_3v;
};
&vc4 {
status = "disabled";
};
&pixelvalve0 {
status = "disabled";
};
&pixelvalve1 {
status = "disabled";
};
&pixelvalve2 {
status = "disabled";
};
&pixelvalve3 {
status = "disabled";
};
&pixelvalve4 {
status = "disabled";
};
&hdmi0 {
reg = <0x7ef00700 0x300>,
<0x7ef00300 0x200>,
<0x7ef00f00 0x80>,
<0x7ef00f80 0x80>,
<0x7ef01b00 0x200>,
<0x7ef01f00 0x400>,
<0x7ef00200 0x80>,
<0x7ef04300 0x100>,
<0x7ef20000 0x100>,
<0x7ef00100 0x30>;
reg-names = "hdmi",
"dvp",
"phy",
"rm",
"packet",
"metadata",
"csc",
"cec",
"hd",
"intr2";
clocks = <&firmware_clocks 13>,
<&firmware_clocks 14>,
<&dvp 0>,
<&clk_27MHz>;
dmas = <&dma40 (10|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
status = "disabled";
};
&ddc0 {
status = "disabled";
};
&hdmi1 {
reg = <0x7ef05700 0x300>,
<0x7ef05300 0x200>,
<0x7ef05f00 0x80>,
<0x7ef05f80 0x80>,
<0x7ef06b00 0x200>,
<0x7ef06f00 0x400>,
<0x7ef00280 0x80>,
<0x7ef09300 0x100>,
<0x7ef20000 0x100>,
<0x7ef00100 0x30>;
reg-names = "hdmi",
"dvp",
"phy",
"rm",
"packet",
"metadata",
"csc",
"cec",
"hd",
"intr2";
clocks = <&firmware_clocks 13>,
<&firmware_clocks 14>,
<&dvp 1>,
<&clk_27MHz>;
dmas = <&dma40 (17|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
status = "disabled";
};
&ddc1 {
status = "disabled";
};
&dvp {
status = "disabled";
};
&vec {
clocks = <&firmware_clocks 15>;
};
&aon_intr {
interrupts = <GIC_SPI 96 IRQ_TYPE_EDGE_RISING>;
status = "disabled";
};
&system_timer {
status = "disabled";
};
&i2c0 {
/delete-property/ compatible;
/delete-property/ interrupts;
};
&i2c0if {
compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
};
i2c_arm: &i2c1 {};
i2c_vc: &i2c0 {};
&i2c3 {
pinctrl-0 = <&i2c3_pins>;
pinctrl-names = "default";
};
&i2c4 {
pinctrl-0 = <&i2c4_pins>;
pinctrl-names = "default";
};
&i2c5 {
pinctrl-0 = <&i2c5_pins>;
pinctrl-names = "default";
};
&i2c6 {
pinctrl-0 = <&i2c6_pins>;
pinctrl-names = "default";
};
&spi3 {
pinctrl-0 = <&spi3_pins &spi3_cs_pins>;
pinctrl-names = "default";
};
&spi4 {
pinctrl-0 = <&spi4_pins &spi4_cs_pins>;
pinctrl-names = "default";
};
&spi5 {
pinctrl-0 = <&spi5_pins &spi5_cs_pins>;
pinctrl-names = "default";
};
&spi6 {
pinctrl-0 = <&spi6_pins &spi6_cs_pins>;
pinctrl-names = "default";
};
&uart2 {
pinctrl-0 = <&uart2_pins>;
pinctrl-names = "default";
};
&uart3 {
pinctrl-0 = <&uart3_pins>;
pinctrl-names = "default";
};
&uart4 {
pinctrl-0 = <&uart4_pins>;
pinctrl-names = "default";
};
&uart5 {
pinctrl-0 = <&uart5_pins>;
pinctrl-names = "default";
};
&axiperf {
compatible = "brcm,bcm2711-axiperf";
};
/delete-node/ &v3d;
/ {
v3dbus: v3dbus {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <2>;
ranges = <0x7c500000 0x0 0xfc500000 0x0 0x03300000>,
<0x40000000 0x0 0xff800000 0x0 0x00800000>;
dma-ranges = <0x00000000 0x0 0x00000000 0x4 0x00000000>;
v3d: v3d@7ec04000 {
compatible = "brcm,2711-v3d";
reg =
<0x7ec00000 0x0 0x4000>,
<0x7ec04000 0x0 0x4000>;
reg-names = "hub", "core0";
power-domains = <&pm BCM2835_POWER_DOMAIN_GRAFX_V3D>;
resets = <&pm BCM2835_RESET_V3D>;
clocks = <&firmware_clocks 5>;
clocks-names = "v3d";
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
};
};

View File

@@ -15,6 +15,7 @@
ethernet0 = &genet;
pcie0 = &pcie0;
blconfig = &blconfig;
blpubkey = &blpubkey;
};
i2c0mux: i2c-mux0 {
@@ -91,6 +92,18 @@
no-map;
status = "disabled";
};
/*
* RPi4 will copy the binary public key blob (if present) from the bootloader
* into memory for use by the OS.
*/
blpubkey: nvram@1 {
compatible = "raspberrypi,bootloader-public-key", "nvmem-rmem";
#address-cells = <1>;
#size-cells = <1>;
reg = <0x0 0x0 0x0>;
no-map;
status = "disabled";
};
};
&v3d {
@@ -100,3 +113,7 @@
&vchiq {
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
};
&hevc_dec {
clocks = <&firmware_clocks 11>;
};

View File

@@ -277,7 +277,7 @@
reg = <0x7e20c800 0x28>;
clocks = <&clocks BCM2835_CLOCK_PWM>;
assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
assigned-clock-rates = <10000000>;
assigned-clock-rates = <50000000>;
#pwm-cells = <3>;
status = "disabled";
};
@@ -612,6 +612,15 @@
resets = <&pm BCM2835_RESET_V3D>;
interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;
};
hevc_dec: codec@7eb10000 {
compatible = "brcm,bcm2711-hevc-dec", "raspberrypi,hevc-dec";
reg = <0x0 0x7eb00000 0x10000>, /* HEVC */
<0x0 0x7eb10000 0x1000>; /* INTC */
reg-names = "hevc",
"intc";
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
};
};
};

View File

@@ -0,0 +1,42 @@
// SPDX-License-Identifier: GPL-2.0
&uart0 {
bt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <3000000>;
shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
local-bd-address = [ 00 00 00 00 00 00 ];
fallback-bd-address; // Don't override a valid address
status = "okay";
};
};
&uart1 {
minibt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <230400>;
shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
local-bd-address = [ 00 00 00 00 00 00 ];
fallback-bd-address; // Don't override a valid address
status = "disabled";
};
};
/ {
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_headphones=0 cgroup_disable=memory";
};
aliases {
bluetooth = &bt;
};
__overrides__ {
bdaddr = <&bt>,"local-bd-address[",
<&bt>,"fallback-bd-address?=0",
<&minibt>,"local-bd-address[",
<&minibt>,"fallback-bd-address?=0";
krnbt = <&bt>,"status";
krnbt_baudrate = <&bt>,"max-speed:0", <&minibt>,"max-speed:0";
};
};

View File

@@ -0,0 +1,4 @@
// SPDX-License-Identifier: GPL-2.0-only
&csi0 {
brcm,num-data-lanes = <2>;
};

View File

@@ -0,0 +1,4 @@
// SPDX-License-Identifier: GPL-2.0-only
&csi1 {
brcm,num-data-lanes = <2>;
};

View File

@@ -0,0 +1,4 @@
// SPDX-License-Identifier: GPL-2.0-only
&csi1 {
brcm,num-data-lanes = <4>;
};

View File

@@ -0,0 +1,4 @@
&i2c0mux {
pinctrl-0 = <&i2c0_gpio0>;
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -0,0 +1,4 @@
&i2c0mux {
pinctrl-0 = <&i2c0_gpio0>;
pinctrl-1 = <&i2c0_gpio44>;
};

View File

@@ -363,7 +363,7 @@
#size-cells = <0>;
#clock-cells = <1>;
clocks = <&clocks BCM2835_PLLA_DSI0>,
clocks = <&clocks BCM2835_PLLD_DSI0>,
<&clocks BCM2835_CLOCK_DSI0E>,
<&clocks BCM2835_CLOCK_DSI0P>;
clock-names = "phy", "escape", "pixel";
@@ -415,7 +415,7 @@
reg = <0x7e20c000 0x28>;
clocks = <&clocks BCM2835_CLOCK_PWM>;
assigned-clocks = <&clocks BCM2835_CLOCK_PWM>;
assigned-clock-rates = <10000000>;
assigned-clock-rates = <50000000>;
#pwm-cells = <3>;
status = "disabled";
};
@@ -502,6 +502,10 @@
};
clocks {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
/* The oscillator is the root of the clock tree. */
clk_osc: clk-osc {
compatible = "fixed-clock";

View File

@@ -0,0 +1,364 @@
# Overlays for the Raspberry Pi platform
dtb-$(CONFIG_ARCH_BCM2835) += overlay_map.dtb hat_map.dtb
dtbo-$(CONFIG_ARCH_BCM2835) += \
act-led.dtbo \
adafruit-st7735r.dtbo \
adafruit18.dtbo \
adau1977-adc.dtbo \
adau7002-simple.dtbo \
ads1015.dtbo \
ads1115.dtbo \
ads7846.dtbo \
adv7282m.dtbo \
adv728x-m.dtbo \
akkordion-iqdacplus.dtbo \
allo-boss-dac-pcm512x-audio.dtbo \
allo-boss2-dac-audio.dtbo \
allo-digione.dtbo \
allo-katana-dac-audio.dtbo \
allo-piano-dac-pcm512x-audio.dtbo \
allo-piano-dac-plus-pcm512x-audio.dtbo \
anyspi.dtbo \
apds9960.dtbo \
applepi-dac.dtbo \
arducam-64mp.dtbo \
arducam-pivariety.dtbo \
at86rf233.dtbo \
audioinjector-addons.dtbo \
audioinjector-bare-i2s.dtbo \
audioinjector-isolated-soundcard.dtbo \
audioinjector-ultra.dtbo \
audioinjector-wm8731-audio.dtbo \
audiosense-pi.dtbo \
audremap.dtbo \
audremap-pi5.dtbo \
balena-fin.dtbo \
bcm2712d0.dtbo \
camera-mux-2port.dtbo \
camera-mux-4port.dtbo \
cap1106.dtbo \
chipcap2.dtbo \
chipdip-dac.dtbo \
cirrus-wm5102.dtbo \
cm-swap-i2c0.dtbo \
cma.dtbo \
crystalfontz-cfa050_pi_m.dtbo \
cutiepi-panel.dtbo \
dacberry400.dtbo \
dht11.dtbo \
dionaudio-kiwi.dtbo \
dionaudio-loco.dtbo \
dionaudio-loco-v2.dtbo \
disable-bt.dtbo \
disable-bt-pi5.dtbo \
disable-emmc2.dtbo \
disable-wifi.dtbo \
disable-wifi-pi5.dtbo \
dpi18.dtbo \
dpi18cpadhi.dtbo \
dpi24.dtbo \
draws.dtbo \
dwc-otg.dtbo \
dwc2.dtbo \
edt-ft5406.dtbo \
enc28j60.dtbo \
enc28j60-spi2.dtbo \
exc3000.dtbo \
ezsound-6x8iso.dtbo \
fbtft.dtbo \
fe-pi-audio.dtbo \
fsm-demo.dtbo \
gc9a01.dtbo \
ghost-amp.dtbo \
goodix.dtbo \
googlevoicehat-soundcard.dtbo \
gpio-charger.dtbo \
gpio-fan.dtbo \
gpio-hog.dtbo \
gpio-ir.dtbo \
gpio-ir-tx.dtbo \
gpio-key.dtbo \
gpio-led.dtbo \
gpio-no-bank0-irq.dtbo \
gpio-no-irq.dtbo \
gpio-poweroff.dtbo \
gpio-shutdown.dtbo \
hd44780-i2c-lcd.dtbo \
hd44780-lcd.dtbo \
hdmi-backlight-hwhack-gpio.dtbo \
hifiberry-adc.dtbo \
hifiberry-adc8x.dtbo \
hifiberry-amp.dtbo \
hifiberry-amp100.dtbo \
hifiberry-amp3.dtbo \
hifiberry-amp4pro.dtbo \
hifiberry-dac.dtbo \
hifiberry-dac8x.dtbo \
hifiberry-dacplus.dtbo \
hifiberry-dacplus-pro.dtbo \
hifiberry-dacplus-std.dtbo \
hifiberry-dacplusadc.dtbo \
hifiberry-dacplusadcpro.dtbo \
hifiberry-dacplusdsp.dtbo \
hifiberry-dacplushd.dtbo \
hifiberry-digi.dtbo \
hifiberry-digi-pro.dtbo \
highperi.dtbo \
hy28a.dtbo \
hy28b.dtbo \
hy28b-2017.dtbo \
i-sabre-q2m.dtbo \
i2c-bcm2708.dtbo \
i2c-fan.dtbo \
i2c-gpio.dtbo \
i2c-mux.dtbo \
i2c-pwm-pca9685a.dtbo \
i2c-rtc.dtbo \
i2c-rtc-gpio.dtbo \
i2c-sensor.dtbo \
i2c0.dtbo \
i2c0-pi5.dtbo \
i2c1.dtbo \
i2c1-pi5.dtbo \
i2c2-pi5.dtbo \
i2c3.dtbo \
i2c3-pi5.dtbo \
i2c4.dtbo \
i2c5.dtbo \
i2c6.dtbo \
i2s-dac.dtbo \
i2s-gpio28-31.dtbo \
i2s-master-dac.dtbo \
ilitek251x.dtbo \
imx219.dtbo \
imx258.dtbo \
imx283.dtbo \
imx290.dtbo \
imx296.dtbo \
imx327.dtbo \
imx335.dtbo \
imx378.dtbo \
imx415.dtbo \
imx462.dtbo \
imx477.dtbo \
imx500.dtbo \
imx500-pi5.dtbo \
imx519.dtbo \
imx708.dtbo \
interludeaudio-analog.dtbo \
interludeaudio-digital.dtbo \
iqaudio-codec.dtbo \
iqaudio-dac.dtbo \
iqaudio-dacplus.dtbo \
iqaudio-digi-wm8804-audio.dtbo \
iqs550.dtbo \
irs1125.dtbo \
jedec-spi-nor.dtbo \
justboom-both.dtbo \
justboom-dac.dtbo \
justboom-digi.dtbo \
ltc294x.dtbo \
max98357a.dtbo \
maxtherm.dtbo \
mbed-dac.dtbo \
mcp23017.dtbo \
mcp23s17.dtbo \
mcp2515.dtbo \
mcp2515-can0.dtbo \
mcp2515-can1.dtbo \
mcp251xfd.dtbo \
mcp3008.dtbo \
mcp3202.dtbo \
mcp342x.dtbo \
media-center.dtbo \
merus-amp.dtbo \
midi-uart0.dtbo \
midi-uart0-pi5.dtbo \
midi-uart1.dtbo \
midi-uart1-pi5.dtbo \
midi-uart2.dtbo \
midi-uart2-pi5.dtbo \
midi-uart3.dtbo \
midi-uart3-pi5.dtbo \
midi-uart4.dtbo \
midi-uart4-pi5.dtbo \
midi-uart5.dtbo \
minipitft13.dtbo \
miniuart-bt.dtbo \
mipi-dbi-spi.dtbo \
mira220.dtbo \
mlx90640.dtbo \
mmc.dtbo \
mz61581.dtbo \
ov2311.dtbo \
ov5647.dtbo \
ov64a40.dtbo \
ov7251.dtbo \
ov9281.dtbo \
papirus.dtbo \
pca953x.dtbo \
pcf857x.dtbo \
pcie-32bit-dma.dtbo \
pcie-32bit-dma-pi5.dtbo \
pciex1-compat-pi5.dtbo \
pibell.dtbo \
pifacedigital.dtbo \
pifi-40.dtbo \
pifi-dac-hd.dtbo \
pifi-dac-zero.dtbo \
pifi-mini-210.dtbo \
piglow.dtbo \
pimidi.dtbo \
pineboards-hat-ai.dtbo \
pineboards-hatdrive-poe-plus.dtbo \
piscreen.dtbo \
piscreen2r.dtbo \
pisound.dtbo \
pisound-micro.dtbo \
pisound-pi5.dtbo \
pitft22.dtbo \
pitft28-capacitive.dtbo \
pitft28-resistive.dtbo \
pitft35-resistive.dtbo \
pps-gpio.dtbo \
proto-codec.dtbo \
pwm.dtbo \
pwm-2chan.dtbo \
pwm-gpio.dtbo \
pwm-gpio-fan.dtbo \
pwm-ir-tx.dtbo \
pwm-pio.dtbo \
pwm1.dtbo \
qca7000.dtbo \
qca7000-uart0.dtbo \
ramoops.dtbo \
ramoops-pi4.dtbo \
rootmaster.dtbo \
rotary-encoder.dtbo \
rpi-backlight.dtbo \
rpi-codeczero.dtbo \
rpi-dacplus.dtbo \
rpi-dacpro.dtbo \
rpi-digiampplus.dtbo \
rpi-ft5406.dtbo \
rpi-fw-uart.dtbo \
rpi-poe.dtbo \
rpi-poe-plus.dtbo \
rpi-sense.dtbo \
rpi-sense-v2.dtbo \
rpi-tv.dtbo \
rra-digidac1-wm8741-audio.dtbo \
sainsmart18.dtbo \
sc16is750-i2c.dtbo \
sc16is752-i2c.dtbo \
sc16is75x-spi.dtbo \
sdhost.dtbo \
sdio.dtbo \
sdio-pi5.dtbo \
seeed-can-fd-hat-v1.dtbo \
seeed-can-fd-hat-v2.dtbo \
sh1106-spi.dtbo \
si446x-spi0.dtbo \
smi.dtbo \
smi-dev.dtbo \
smi-nand.dtbo \
spi-gpio35-39.dtbo \
spi-gpio40-45.dtbo \
spi-rtc.dtbo \
spi0-0cs.dtbo \
spi0-1cs.dtbo \
spi0-1cs-inverted.dtbo \
spi0-2cs.dtbo \
spi1-1cs.dtbo \
spi1-2cs.dtbo \
spi1-3cs.dtbo \
spi2-1cs.dtbo \
spi2-1cs-pi5.dtbo \
spi2-2cs.dtbo \
spi2-2cs-pi5.dtbo \
spi2-3cs.dtbo \
spi3-1cs.dtbo \
spi3-1cs-pi5.dtbo \
spi3-2cs.dtbo \
spi3-2cs-pi5.dtbo \
spi4-1cs.dtbo \
spi4-2cs.dtbo \
spi5-1cs.dtbo \
spi5-1cs-pi5.dtbo \
spi5-2cs.dtbo \
spi5-2cs-pi5.dtbo \
spi6-1cs.dtbo \
spi6-2cs.dtbo \
ssd1306.dtbo \
ssd1306-spi.dtbo \
ssd1327-spi.dtbo \
ssd1331-spi.dtbo \
ssd1351-spi.dtbo \
sunfounder-pipower3.dtbo \
sunfounder-pironman5.dtbo \
superaudioboard.dtbo \
sx150x.dtbo \
tc358743.dtbo \
tc358743-audio.dtbo \
tc358743-pi5.dtbo \
tinylcd35.dtbo \
tpm-slb9670.dtbo \
tpm-slb9673.dtbo \
uart0.dtbo \
uart0-pi5.dtbo \
uart1.dtbo \
uart1-pi5.dtbo \
uart2.dtbo \
uart2-pi5.dtbo \
uart3.dtbo \
uart3-pi5.dtbo \
uart4.dtbo \
uart4-pi5.dtbo \
uart5.dtbo \
udrc.dtbo \
ugreen-dabboard.dtbo \
upstream.dtbo \
upstream-pi4.dtbo \
vc4-fkms-v3d.dtbo \
vc4-fkms-v3d-pi4.dtbo \
vc4-kms-dpi-generic.dtbo \
vc4-kms-dpi-hyperpixel2r.dtbo \
vc4-kms-dpi-hyperpixel4.dtbo \
vc4-kms-dpi-hyperpixel4sq.dtbo \
vc4-kms-dpi-panel.dtbo \
vc4-kms-dsi-7inch.dtbo \
vc4-kms-dsi-generic.dtbo \
vc4-kms-dsi-ili9881-5inch.dtbo \
vc4-kms-dsi-ili9881-7inch.dtbo \
vc4-kms-dsi-lt070me05000.dtbo \
vc4-kms-dsi-lt070me05000-v2.dtbo \
vc4-kms-dsi-waveshare-800x480.dtbo \
vc4-kms-dsi-waveshare-panel.dtbo \
vc4-kms-dsi-waveshare-panel-v2.dtbo \
vc4-kms-kippah-7inch.dtbo \
vc4-kms-v3d.dtbo \
vc4-kms-v3d-pi4.dtbo \
vc4-kms-v3d-pi5.dtbo \
vc4-kms-vga666.dtbo \
vga666.dtbo \
vl805.dtbo \
w1-gpio.dtbo \
w1-gpio-pi5.dtbo \
w1-gpio-pullup.dtbo \
w1-gpio-pullup-pi5.dtbo \
w5500.dtbo \
watterott-display.dtbo \
waveshare-can-fd-hat-mode-a.dtbo \
waveshare-can-fd-hat-mode-b.dtbo \
wifimac.dtbo \
wittypi.dtbo \
wm8960-soundcard.dtbo \
ws2812-pio.dtbo
targets += dtbs dtbs_install
targets += $(dtbo-y)
always-y := $(dtbo-y)
clean-files := *.dtbo

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,28 @@
/dts-v1/;
/plugin/;
/* Pi3 uses a GPIO expander to drive the LEDs which can only be accessed
from the VPU. There is a special driver for this with a separate DT node,
which has the unfortunate consequence of breaking the act_led_gpio and
act_led_activelow dtparams.
This overlay changes the GPIO controller back to the standard one and
restores the dtparams.
*/
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&led_act>;
frag0: __overlay__ {
gpios = <&gpio 0 0>;
};
};
__overrides__ {
gpio = <&frag0>,"gpios:4",
<&frag0>,"status=okay";
activelow = <&frag0>,"gpios:8";
};
};

View File

@@ -0,0 +1,83 @@
/*
* adafruit-st7735r-overlay.dts
*
* ST7735R based SPI LCD displays. Either
* Adafruit 1.8" 160x128
* or
* Okaya 1.44" 128x128
*/
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
adafruit_pins: adafruit_pins {
brcm,pins = <25 24>;
brcm,function = <1>; /* out */
};
backlight_pins: backlight_pins {
brcm,pins = <18>;
brcm,function = <1>; /* out */
};
};
};
fragment@2 {
target-path = "/";
__overlay__ {
af18_backlight: backlight {
compatible = "gpio-backlight";
gpios = <&gpio 18 GPIO_ACTIVE_HIGH>;
pinctrl-names = "default";
pinctrl-0 = <&backlight_pins>;
};
};
};
fragment@3 {
target = <&spi0>;
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
af18: adafruit18@0 {
compatible = "jianda,jd-t18003-t01";
reg = <0>;
spi-max-frequency = <32000000>;
dc-gpios = <&gpio 24 GPIO_ACTIVE_HIGH>;
reset-gpios = <&gpio 25 GPIO_ACTIVE_HIGH>;
rotation = <90>;
pinctrl-names = "default";
pinctrl-0 = <&adafruit_pins>;
backlight = <&af18_backlight>;
};
};
};
__overrides__ {
128x128 = <&af18>, "compatible=okaya,rh128128t";
speed = <&af18>,"spi-max-frequency:0";
rotate = <&af18>,"rotation:0";
dc_pin = <&af18>,"dc-gpios:4", <&adafruit_pins>,"brcm,pins:4";
reset_pin = <&af18>,"reset-gpios:4",
<&adafruit_pins>,"brcm,pins:0";
led_pin = <&af18_backlight>,"gpios:4",
<&backlight_pins>,"brcm,pins:0";
};
};

View File

@@ -0,0 +1,55 @@
/*
* Device Tree overlay for Adafruit 1.8" TFT LCD with ST7735R chip 160x128
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@1 {
target = <&spi0>;
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
af18: adafruit18@0 {
compatible = "fbtft,adafruit18";
reg = <0>;
pinctrl-names = "default";
spi-max-frequency = <40000000>;
rotate = <90>;
buswidth = <8>;
fps = <50>;
height = <160>;
width = <128>;
reset-gpios = <&gpio 25 1>;
dc-gpios = <&gpio 24 0>;
led-gpios = <&gpio 18 0>;
debug = <0>;
};
};
};
__overrides__ {
green = <&af18>, "compatible=fbtft,adafruit18_green";
speed = <&af18>,"spi-max-frequency:0";
rotate = <&af18>,"rotate:0";
fps = <&af18>,"fps:0";
bgr = <&af18>,"bgr?";
debug = <&af18>,"debug:0";
dc_pin = <&af18>,"dc-gpios:4";
reset_pin = <&af18>,"reset-gpios:4";
led_pin = <&af18>,"led-gpios:4";
};
};

View File

@@ -0,0 +1,40 @@
// Definitions for ADAU1977 ADC
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
adau1977: codec@11 {
compatible = "adi,adau1977";
reg = <0x11>;
reset-gpios = <&gpio 5 0>;
AVDD-supply = <&vdd_3v3_reg>;
};
};
};
fragment@1 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "adi,adau1977-adc";
i2s-controller = <&i2s_clk_consumer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,52 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
adau7002_codec: adau7002-codec {
#sound-dai-cells = <0>;
compatible = "adi,adau7002";
/* IOVDD-supply = <&supply>;*/
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
sound_overlay: __overlay__ {
compatible = "simple-audio-card";
simple-audio-card,format = "i2s";
simple-audio-card,name = "adau7002";
simple-audio-card,bitclock-slave = <&dailink0_slave>;
simple-audio-card,frame-slave = <&dailink0_slave>;
simple-audio-card,widgets =
"Microphone", "Microphone Jack";
simple-audio-card,routing =
"PDM_DAT", "Microphone Jack";
status = "okay";
simple-audio-card,cpu {
sound-dai = <&i2s_clk_producer>;
};
dailink0_slave: simple-audio-card,codec {
sound-dai = <&adau7002_codec>;
};
};
};
__overrides__ {
card-name = <&sound_overlay>,"simple-audio-card,name";
};
};

View File

@@ -0,0 +1,98 @@
/*
* 2016 - Erik Sejr
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
/* ----------- ADS1015 ------------ */
fragment@0 {
target = <&i2c_arm>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ads1015: ads1015@48 {
compatible = "ti,ads1015";
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x48>;
};
};
};
fragment@1 {
target = <&ads1015>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
channel_a: channel_a {
reg = <4>;
ti,gain = <2>;
ti,datarate = <4>;
};
};
};
fragment@2 {
target = <&ads1015>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_b: channel_b {
reg = <5>;
ti,gain = <2>;
ti,datarate = <4>;
};
};
};
fragment@3 {
target = <&ads1015>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_c: channel_c {
reg = <6>;
ti,gain = <2>;
ti,datarate = <4>;
};
};
};
fragment@4 {
target = <&ads1015>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_d: channel_d {
reg = <7>;
ti,gain = <2>;
ti,datarate = <4>;
};
};
};
__overrides__ {
addr = <&ads1015>,"reg:0";
cha_enable = <0>,"=1";
cha_cfg = <&channel_a>,"reg:0";
cha_gain = <&channel_a>,"ti,gain:0";
cha_datarate = <&channel_a>,"ti,datarate:0";
chb_enable = <0>,"=2";
chb_cfg = <&channel_b>,"reg:0";
chb_gain = <&channel_b>,"ti,gain:0";
chb_datarate = <&channel_b>,"ti,datarate:0";
chc_enable = <0>,"=3";
chc_cfg = <&channel_c>,"reg:0";
chc_gain = <&channel_c>,"ti,gain:0";
chc_datarate = <&channel_c>,"ti,datarate:0";
chd_enable = <0>,"=4";
chd_cfg = <&channel_d>,"reg:0";
chd_gain = <&channel_d>,"ti,gain:0";
chd_datarate = <&channel_d>,"ti,datarate:0";
};
};

View File

@@ -0,0 +1,105 @@
/*
* TI ADS1115 multi-channel ADC overlay
*/
/dts-v1/;
/plugin/;
#include "i2c-buses.dtsi"
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_a: channel_a {
reg = <4>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@1 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_b: channel_b {
reg = <5>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@2 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_c: channel_c {
reg = <6>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@3 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_d: channel_d {
reg = <7>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@4 {
target = <&i2cbus>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ads1115: ads1115@48 {
compatible = "ti,ads1115";
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x48>;
};
};
};
__overrides__ {
addr = <&ads1115>,"reg:0";
cha_enable = <0>,"=0";
cha_cfg = <&channel_a>,"reg:0";
cha_gain = <&channel_a>,"ti,gain:0";
cha_datarate = <&channel_a>,"ti,datarate:0";
chb_enable = <0>,"=1";
chb_cfg = <&channel_b>,"reg:0";
chb_gain = <&channel_b>,"ti,gain:0";
chb_datarate = <&channel_b>,"ti,datarate:0";
chc_enable = <0>,"=2";
chc_cfg = <&channel_c>,"reg:0";
chc_gain = <&channel_c>,"ti,gain:0";
chc_datarate = <&channel_c>,"ti,datarate:0";
chd_enable = <0>,"=3";
chd_cfg = <&channel_d>,"reg:0";
chd_gain = <&channel_d>,"ti,gain:0";
chd_datarate = <&channel_d>,"ti,datarate:0";
};
};

View File

@@ -0,0 +1,91 @@
/*
* Generic Device Tree overlay for the ADS7846 touch controller
*
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spi0>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@2 {
target = <&spidev1>;
__overlay__ {
status = "disabled";
};
};
fragment@3 {
target = <&gpio>;
__overlay__ {
ads7846_pins: ads7846_pins {
brcm,pins = <255>; /* illegal default value */
brcm,function = <0>; /* in */
brcm,pull = <0>; /* none */
};
};
};
fragment@4 {
target = <&spi0>;
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = <1>;
#size-cells = <0>;
ads7846: ads7846@1 {
compatible = "ti,ads7846";
reg = <1>;
pinctrl-names = "default";
pinctrl-0 = <&ads7846_pins>;
spi-max-frequency = <2000000>;
interrupts = <255 2>; /* high-to-low edge triggered */
interrupt-parent = <&gpio>;
pendown-gpio = <&gpio 255 1>;
/* driver defaults */
ti,x-min = /bits/ 16 <0>;
ti,y-min = /bits/ 16 <0>;
ti,x-max = /bits/ 16 <0x0FFF>;
ti,y-max = /bits/ 16 <0x0FFF>;
ti,pressure-min = /bits/ 16 <0>;
ti,pressure-max = /bits/ 16 <0xFFFF>;
ti,x-plate-ohms = /bits/ 16 <400>;
};
};
};
__overrides__ {
cs = <&ads7846>,"reg:0";
speed = <&ads7846>,"spi-max-frequency:0";
penirq = <&ads7846_pins>,"brcm,pins:0", /* REQUIRED */
<&ads7846>,"interrupts:0",
<&ads7846>,"pendown-gpio:4";
penirq_pull = <&ads7846_pins>,"brcm,pull:0";
swapxy = <&ads7846>,"touchscreen-swapped-x-y?";
xmin = <&ads7846>,"ti,x-min;0";
ymin = <&ads7846>,"ti,y-min;0";
xmax = <&ads7846>,"ti,x-max;0";
ymax = <&ads7846>,"ti,y-max;0";
pmin = <&ads7846>,"ti,pressure-min;0";
pmax = <&ads7846>,"ti,pressure-max;0";
xohms = <&ads7846>,"ti,x-plate-ohms;0";
invx = <&ads7846>,"touchscreen-inverted-x?";
invy = <&ads7846>,"touchscreen-inverted-y?";
};
};

View File

@@ -0,0 +1,73 @@
// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Analog Devices ADV7282-M video to CSI2 bridge on VC I2C bus
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
adv728x: adv728x@21 {
compatible = "adi,adv7282-m";
reg = <0x21>;
status = "okay";
clock-frequency = <24000000>;
port {
adv728x_0: endpoint {
remote-endpoint = <&csi1_ep>;
clock-lanes = <0>;
data-lanes = <1>;
link-frequencies =
/bits/ 64 <297000000>;
mclk-frequency = <12000000>;
};
};
};
};
};
fragment@1 {
target = <&csi1>;
__overlay__ {
status = "okay";
port {
csi1_ep: endpoint {
remote-endpoint = <&adv728x_0>;
data-lanes = <1>;
};
};
};
};
fragment@2 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};
fragment@3 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};
fragment@4 {
target = <&csi1>;
__overlay__ {
compatible = "brcm,bcm2835-unicam-legacy";
};
};
__overrides__ {
addr = <&adv728x>,"reg:0";
media-controller = <0>,"!4";
};
};

View File

@@ -0,0 +1,37 @@
// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Analog Devices ADV728[0|1|2]-M video to CSI2 bridges on VC
// I2C bus
#include "adv7282m-overlay.dts"
/{
compatible = "brcm,bcm2835";
// Fragment numbers deliberately high to avoid conflicts with the
// included adv7282m overlay file.
fragment@101 {
target = <&adv728x>;
__dormant__ {
compatible = "adi,adv7280-m";
};
};
fragment@102 {
target = <&adv728x>;
__dormant__ {
compatible = "adi,adv7281-m";
};
};
fragment@103 {
target = <&adv728x>;
__dormant__ {
compatible = "adi,adv7281-ma";
};
};
__overrides__ {
adv7280m = <0>, "+101";
adv7281m = <0>, "+102";
adv7281ma = <0>, "+103";
};
};

View File

@@ -0,0 +1,49 @@
// Definitions for Digital Dreamtime Akkordion using IQaudIO DAC+ or DACZero
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pcm5122@4c {
#sound-dai-cells = <0>;
compatible = "ti,pcm5122";
reg = <0x4c>;
AVDD-supply = <&vdd_3v3_reg>;
DVDD-supply = <&vdd_3v3_reg>;
CPVDD-supply = <&vdd_3v3_reg>;
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
frag2: __overlay__ {
compatible = "iqaudio,iqaudio-dac";
card_name = "Akkordion";
dai_name = "IQaudIO DAC";
dai_stream_name = "IQaudIO DAC HiFi";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
};
};

View File

@@ -0,0 +1,61 @@
/*
* Definitions for Allo Boss DAC board
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
boss_osc: boss_osc {
compatible = "allo,dac-clk";
#clock-cells = <0>;
};
};
};
frag1: fragment@1 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pcm5122@4d {
#sound-dai-cells = <0>;
compatible = "ti,pcm5122";
clocks = <&boss_osc>;
reg = <0x4d>;
status = "okay";
};
};
};
fragment@3 {
target = <&sound>;
boss_dac: __overlay__ {
compatible = "allo,boss-dac";
i2s-controller = <&i2s_clk_consumer>;
mute-gpios = <&gpio 6 1>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain = <&boss_dac>,"allo,24db_digital_gain?";
slave = <&boss_dac>,"allo,slave?",
<&frag1>,"target:0=",<&i2s_clk_producer>,
<&boss_dac>,"i2s-controller:0=",<&i2s_clk_producer>;
};
};

View File

@@ -0,0 +1,57 @@
/* * Definitions for Allo Boss2 DAC boards
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
#sound-dai-cells = <0>;
status = "okay";
cpu_port: port {
cpu_endpoint: endpoint {
remote-endpoint = <&codec_endpoint>;
bitclock-master = <&codec_endpoint>;
frame-master = <&codec_endpoint>;
dai-format = "i2s";
};
};
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
allo-cs43130@30 {
#sound-dai-cells = <0>;
compatible = "allo,allo-cs43198";
clock44-gpio = <&gpio 5 0>;
clock48-gpio = <&gpio 6 0>;
reg = <0x30>;
port {
codec_endpoint: endpoint {
remote-endpoint = <&cpu_endpoint>;
};
};
};
};
};
fragment@2 {
target = <&sound>;
boss2_dac: __overlay__ {
compatible = "audio-graph-card";
label = "Allo Boss2";
dais = <&cpu_port>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,44 @@
// Definitions for Allo DigiOne
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
wm8804@3b {
#sound-dai-cells = <0>;
compatible = "wlf,wm8804";
reg = <0x3b>;
PVDD-supply = <&vdd_3v3_reg>;
DVDD-supply = <&vdd_3v3_reg>;
status = "okay";
wlf,reset-gpio = <&gpio 17 0>;
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "allo,allo-digione";
i2s-controller = <&i2s_clk_consumer>;
status = "okay";
clock44-gpio = <&gpio 5 0>;
clock48-gpio = <&gpio 6 0>;
};
};
};

View File

@@ -0,0 +1,58 @@
/*
* Definitions for Allo Katana DAC boards
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
#sound-dai-cells = <0>;
status = "okay";
cpu_port: port {
cpu_endpoint: endpoint {
remote-endpoint = <&codec_endpoint>;
bitclock-master = <&codec_endpoint>;
frame-master = <&codec_endpoint>;
dai-format = "i2s";
};
};
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
clock-frequency = <50000>;
allo-katana-codec@30 {
#sound-dai-cells = <0>;
compatible = "allo,allo-katana-codec";
reg = <0x30>;
port {
codec_endpoint: endpoint {
remote-endpoint = <&cpu_endpoint>;
};
};
};
};
};
fragment@2 {
target = <&sound>;
katana_dac: __overlay__ {
compatible = "audio-graph-card";
label = "Allo Katana";
dais = <&cpu_port>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,54 @@
/*
* Definitions for Allo Piano DAC (2.0/2.1) boards
*
* NB. The Piano DAC 2.1 board contains 2x TI PCM5142 DAC's. One DAC is stereo
* (left/right) and the other provides a subwoofer output, using DSP on the
* chip for digital high/low pass crossover.
* The initial support for this hardware, that doesn't require any codec driver
* modifications, uses only one DAC chip for stereo (left/right) output, the
* chip with 0x4c slave address. The other chip at 0x4d is currently ignored!
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pcm5142@4c {
#sound-dai-cells = <0>;
compatible = "ti,pcm5142";
reg = <0x4c>;
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
piano_dac: __overlay__ {
compatible = "allo,piano-dac";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain =
<&piano_dac>,"allo,24db_digital_gain?";
};
};

View File

@@ -0,0 +1,57 @@
// Definitions for Piano DAC
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
allo_pcm5122_4c: pcm5122@4c {
#sound-dai-cells = <0>;
compatible = "ti,pcm5122";
reg = <0x4c>;
sound-name-prefix = "Main";
status = "okay";
};
allo_pcm5122_4d: pcm5122@4d {
#sound-dai-cells = <0>;
compatible = "ti,pcm5122";
reg = <0x4d>;
sound-name-prefix = "Sub";
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
piano_dac: __overlay__ {
compatible = "allo,piano-dac-plus";
audio-codec = <&allo_pcm5122_4c &allo_pcm5122_4d>;
i2s-controller = <&i2s_clk_producer>;
mute1-gpios = <&gpio 6 1>;
mute2-gpios = <&gpio 25 1>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain =
<&piano_dac>,"allo,24db_digital_gain?";
glb_mclk =
<&piano_dac>,"allo,glb_mclk?";
};
};

View File

@@ -0,0 +1,205 @@
/*
* Universal device tree overlay for SPI devices
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spidev0>;
__dormant__ {
status = "disabled";
};
};
fragment@1 {
target = <&spidev1>;
__dormant__ {
status = "disabled";
};
};
fragment@2 {
target-path = "spi1/spidev@0";
__dormant__ {
status = "disabled";
};
};
fragment@3 {
target-path = "spi1/spidev@1";
__dormant__ {
status = "disabled";
};
};
fragment@4 {
target-path = "spi1/spidev@2";
__dormant__ {
status = "disabled";
};
};
fragment@5 {
target-path = "spi2/spidev@0";
__dormant__ {
status = "disabled";
};
};
fragment@6 {
target-path = "spi2/spidev@1";
__dormant__ {
status = "disabled";
};
};
fragment@7 {
target-path = "spi2/spidev@2";
__dormant__ {
status = "disabled";
};
};
fragment@8 {
target = <&spi0>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_00: anyspi@0 {
reg = <0>;
spi-max-frequency = <500000>;
};
};
};
fragment@9 {
target = <&spi0>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_01: anyspi@1 {
reg = <1>;
spi-max-frequency = <500000>;
};
};
};
fragment@10 {
target = <&spi1>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_10: anyspi@0 {
reg = <0>;
spi-max-frequency = <500000>;
};
};
};
fragment@11 {
target = <&spi1>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_11: anyspi@1 {
reg = <1>;
spi-max-frequency = <500000>;
};
};
};
fragment@12 {
target = <&spi1>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_12: anyspi@2 {
reg = <2>;
spi-max-frequency = <500000>;
};
};
};
fragment@13 {
target = <&spi2>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_20: anyspi@0 {
reg = <0>;
spi-max-frequency = <500000>;
};
};
};
fragment@14 {
target = <&spi2>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_21: anyspi@1 {
reg = <1>;
spi-max-frequency = <500000>;
};
};
};
fragment@15 {
target = <&spi2>;
__dormant__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
anyspi_22: anyspi@2 {
reg = <2>;
spi-max-frequency = <500000>;
};
};
};
__overrides__ {
spi0-0 = <0>, "+0+8";
spi0-1 = <0>, "+1+9";
spi1-0 = <0>, "+2+10";
spi1-1 = <0>, "+3+11";
spi1-2 = <0>, "+4+12";
spi2-0 = <0>, "+5+13";
spi2-1 = <0>, "+6+14";
spi2-2 = <0>, "+7+15";
dev = <&anyspi_00>,"compatible",
<&anyspi_01>,"compatible",
<&anyspi_10>,"compatible",
<&anyspi_11>,"compatible",
<&anyspi_12>,"compatible",
<&anyspi_20>,"compatible",
<&anyspi_21>,"compatible",
<&anyspi_22>,"compatible";
speed = <&anyspi_00>, "spi-max-frequency:0",
<&anyspi_01>, "spi-max-frequency:0",
<&anyspi_10>, "spi-max-frequency:0",
<&anyspi_11>, "spi-max-frequency:0",
<&anyspi_12>, "spi-max-frequency:0",
<&anyspi_20>, "spi-max-frequency:0",
<&anyspi_21>, "spi-max-frequency:0",
<&anyspi_22>, "spi-max-frequency:0";
};
};

View File

@@ -0,0 +1,55 @@
// Definitions for APDS-9960 ambient light and gesture sensor
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c1>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
apds9960_pins: apds9960_pins@39 {
brcm,pins = <4>;
brcm,function = <0>;
};
};
};
fragment@2 {
target = <&apds9960>;
apds9960_irq: __overlay__ {
#interrupt-cells = <2>;
interrupt-parent = <&gpio>;
interrupts = <4 1>;
};
};
fragment@3 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
apds9960: apds@39 {
compatible = "avago,apds9960";
reg = <0x39>;
status = "okay";
};
};
};
__overrides__ {
gpiopin = <&apds9960_pins>,"brcm,pins:0",
<&apds9960_irq>,"interrupts:0";
noints = <0>,"!1!2";
};
};

View File

@@ -0,0 +1,57 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&sound>;
__overlay__ {
compatible = "simple-audio-card";
simple-audio-card,name = "ApplePi-DAC";
status = "okay";
playback_link: simple-audio-card,dai-link@1 {
format = "i2s";
p_cpu_dai: cpu {
sound-dai = <&i2s_clk_producer>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
};
p_codec_dai: codec {
sound-dai = <&codec_out>;
};
};
};
};
fragment@1 {
target-path = "/";
__overlay__ {
codec_out: pcm1794a-codec {
#sound-dai-cells = <0>;
compatible = "ti,pcm1794a";
status = "okay";
};
};
};
fragment@2 {
target = <&i2s_clk_producer>;
__overlay__ {
#sound-dai-cells = <0>;
status = "okay";
};
};
};
/*
Written by: Leonid Ayzenshtat
Company: Orchard Audio (www.orchardaudio.com)
compile with:
dtc -@ -H epapr -O dtb -o ApplePi-DAC.dtbo -W no-unit_address_vs_reg ApplePi-DAC.dts
*/

View File

@@ -0,0 +1,97 @@
// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Arducam 64MP camera module on VC I2C bus
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
i2c_frag: fragment@0 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
#include "arducam-64mp.dtsi"
};
};
csi_frag: fragment@1 {
target = <&csi1>;
csi: __overlay__ {
status = "okay";
port{
csi_ep: endpoint{
remote-endpoint = <&cam_endpoint>;
clock-lanes = <0>;
data-lanes = <1 2>;
clock-noncontinuous;
};
};
};
};
fragment@2 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};
clk_frag: fragment@3 {
target = <&cam1_clk>;
__overlay__ {
clock-frequency = <24000000>;
status = "okay";
};
};
fragment@4 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};
fragment@5 {
target = <&cam_node>;
__overlay__ {
lens-focus = <&vcm_node>;
};
};
fragment@6 {
target = <&csi1>;
__dormant__ {
compatible = "brcm,bcm2835-unicam-legacy";
};
};
__overrides__ {
rotation = <&cam_node>,"rotation:0";
orientation = <&cam_node>,"orientation:0";
media-controller = <0>,"!6";
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
<&csi_frag>, "target:0=",<&csi0>,
<&clk_frag>, "target:0=",<&cam0_clk>,
<&cam_node>, "clocks:0=",<&cam0_clk>,
<&cam_node>, "VANA-supply:0=",<&cam0_reg>,
<&vcm_node>, "VDD-supply:0=", <&cam0_reg>;
vcm = <&vcm_node>, "status",
<0>, "=5";
};
};
&cam_node {
status = "okay";
};
&cam_endpoint {
remote-endpoint = <&csi_ep>;
};
&vcm_node {
status = "okay";
};

View File

@@ -0,0 +1,34 @@
// Fragment that configures a Arducam64MP
cam_node: arducam_64mp@1a {
compatible = "arducam,64mp";
reg = <0x1a>;
status = "disabled";
clocks = <&cam1_clk>;
clock-names = "xclk";
VANA-supply = <&cam1_reg>; /* 2.8v */
VDIG-supply = <&cam_dummy_reg>; /* 1.8v */
VDDL-supply = <&cam_dummy_reg>; /* 1.2v */
rotation = <0>;
orientation = <2>;
port {
cam_endpoint: endpoint {
clock-lanes = <0>;
data-lanes = <1 2>;
clock-noncontinuous;
link-frequencies =
/bits/ 64 <456000000>;
};
};
};
vcm_node: dw9817_arducam64mp@c {
compatible = "dongwoon,dw9817-vcm";
reg = <0x0c>;
status = "disabled";
VDD-supply = <&cam1_reg>;
};

View File

@@ -0,0 +1,100 @@
// SPDX-License-Identifier: GPL-2.0-only
// Definitions for Arducam Pivariety camera module on VC I2C bus
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
i2c_frag: fragment@0 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
arducam_pivariety: arducam_pivariety@c {
compatible = "arducam,arducam-pivariety";
reg = <0x0c>;
status = "okay";
clocks = <&cam1_clk>;
clock-names = "xclk";
VANA-supply = <&cam1_reg>; /* 2.8v */
VDIG-supply = <&cam_dummy_reg>; /* 1.8v */
VDDL-supply = <&cam_dummy_reg>; /* 1.2v */
rotation = <0>;
orientation = <2>;
port {
arducam_pivariety_0: endpoint {
remote-endpoint = <&csi1_ep>;
clock-lanes = <0>;
data-lanes = <1 2>;
clock-noncontinuous;
link-frequencies =
/bits/ 64 <493500000>;
};
};
};
};
};
csi_frag: fragment@1 {
target = <&csi1>;
csi: __overlay__ {
status = "okay";
port{
csi1_ep: endpoint{
remote-endpoint = <&arducam_pivariety_0>;
clock-lanes = <0>;
data-lanes = <1 2>;
clock-noncontinuous;
};
};
};
};
fragment@2 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};
clk_frag: fragment@3 {
target = <&cam1_clk>;
__overlay__ {
clock-frequency = <24000000>;
status = "okay";
};
};
fragment@4 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};
fragment@5 {
target = <&csi1>;
__dormant__ {
compatible = "brcm,bcm2835-unicam-legacy";
};
};
__overrides__ {
rotation = <&arducam_pivariety>,"rotation:0";
orientation = <&arducam_pivariety>,"orientation:0";
media-controller = <0>,"!5";
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
<&csi_frag>, "target:0=",<&csi0>,
<&clk_frag>, "target:0=",<&cam0_clk>,
<&arducam_pivariety>, "clocks:0=",<&cam0_clk>,
<&arducam_pivariety>, "VANA-supply:0=",<&cam0_reg>;
};
};

View File

@@ -0,0 +1,57 @@
/dts-v1/;
/plugin/;
/* Overlay for Atmel AT86RF233 IEEE 802.15.4 WPAN transceiver on spi0.0 */
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
lowpan0: at86rf233@0 {
compatible = "atmel,at86rf233";
reg = <0>;
interrupt-parent = <&gpio>;
interrupts = <23 4>; /* active high */
reset-gpio = <&gpio 24 1>;
sleep-gpio = <&gpio 25 1>;
spi-max-frequency = <3000000>;
xtal-trim = /bits/ 8 <0xf>;
};
};
};
fragment@1 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@2 {
target = <&gpio>;
__overlay__ {
lowpan0_pins: lowpan0_pins {
brcm,pins = <23 24 25>;
brcm,function = <0 1 1>; /* in out out */
};
};
};
__overrides__ {
interrupt = <&lowpan0>, "interrupts:0",
<&lowpan0_pins>, "brcm,pins:0";
reset = <&lowpan0>, "reset-gpio:4",
<&lowpan0_pins>, "brcm,pins:4";
sleep = <&lowpan0>, "sleep-gpio:4",
<&lowpan0_pins>, "brcm,pins:8";
speed = <&lowpan0>, "spi-max-frequency:0";
trim = <&lowpan0>, "xtal-trim.0";
};
};

View File

@@ -0,0 +1,60 @@
// Definitions for audioinjector.net audio add on soundcard
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
cs42448_mclk: codec-mclk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <49152000>;
};
};
};
fragment@2 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
cs42448: cs42448@48 {
#sound-dai-cells = <0>;
compatible = "cirrus,cs42448";
reg = <0x48>;
clocks = <&cs42448_mclk>;
clock-names = "mclk";
status = "okay";
};
};
};
fragment@3 {
target = <&sound>;
snd: __overlay__ {
compatible = "ai,audioinjector-octo-soundcard";
mult-gpios = <&gpio 27 0>, <&gpio 22 0>, <&gpio 23 0>,
<&gpio 24 0>;
reset-gpios = <&gpio 5 0>;
i2s-controller = <&i2s_clk_producer>;
codec = <&cs42448>;
status = "okay";
};
};
__overrides__ {
non-stop-clocks = <&snd>, "non-stop-clocks?";
};
};

View File

@@ -0,0 +1,50 @@
// Definitions for audioinjector.net audio soundcard
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
codec_bare: codec_bare {
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "simple-audio-card";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
simple-audio-card,name = "audioinjector-bare";
simple-audio-card,format = "i2s";
simple-audio-card,bitclock-master = <&dailink0_master>;
simple-audio-card,frame-master = <&dailink0_master>;
dailink0_master: simple-audio-card,cpu {
sound-dai = <&i2s_clk_producer>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
};
snd_codec: simple-audio-card,codec {
sound-dai = <&codec_bare>;
};
};
};
};

View File

@@ -0,0 +1,55 @@
// Definitions for audioinjector.net audio isolated soundcard
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
cs4272_mclk: codec-mclk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24576000>;
};
};
};
fragment@2 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
cs4272: cs4271@10 {
#sound-dai-cells = <0>;
compatible = "cirrus,cs4271";
reg = <0x10>;
reset-gpio = <&gpio 5 0>;
clocks = <&cs4272_mclk>;
clock-names = "mclk";
status = "okay";
};
};
};
fragment@3 {
target = <&sound>;
snd: __overlay__ {
compatible = "ai,audioinjector-isolated-soundcard";
mute-gpios = <&gpio 17 0>;
i2s-controller = <&i2s_clk_consumer>;
codec = <&cs4272>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,71 @@
// Definitions for audioinjector.net audio add on soundcard
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
cs4265: cs4265@4e {
#sound-dai-cells = <0>;
compatible = "cirrus,cs4265";
reg = <0x4e>;
reset-gpios = <&gpio 5 0>;
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "simple-audio-card";
i2s-controller = <&i2s_clk_consumer>;
status = "okay";
simple-audio-card,name = "audioinjector-ultra";
simple-audio-card,widgets =
"Line", "OUTPUTS",
"Line", "INPUTS";
simple-audio-card,routing =
"OUTPUTS","LINEOUTL",
"OUTPUTS","LINEOUTR",
"OUTPUTS","SPDIFOUT",
"LINEINL","INPUTS",
"LINEINR","INPUTS",
"MICL","INPUTS",
"MICR","INPUTS";
simple-audio-card,format = "i2s";
simple-audio-card,bitclock-master = <&sound_master>;
simple-audio-card,frame-master = <&sound_master>;
simple-audio-card,cpu {
sound-dai = <&i2s_clk_consumer>;
dai-tdm-slot-num = <2>;
dai-tdm-slot-width = <32>;
};
sound_master: simple-audio-card,codec {
sound-dai = <&cs4265>;
system-clock-frequency = <12288000>;
};
};
};
};

View File

@@ -0,0 +1,39 @@
// Definitions for audioinjector.net audio add on soundcard
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
wm8731@1a {
#sound-dai-cells = <0>;
compatible = "wlf,wm8731";
reg = <0x1a>;
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "ai,audioinjector-pi-soundcard";
i2s-controller = <&i2s_clk_consumer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,82 @@
// Definitions for audiosense add on soundcard
/dts-v1/;
/plugin/;
#include <dt-bindings/pinctrl/bcm2835.h>
#include <dt-bindings/gpio/gpio.h>
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
codec_reg_1v8: codec-reg-1v8 {
compatible = "regulator-fixed";
regulator-name = "tlv320aic3204_1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
/* audio external oscillator */
codec_osc: codec_osc {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <12000000>; /* 12 MHz */
};
};
};
fragment@2 {
target = <&gpio>;
__overlay__ {
codec_rst: codec-rst {
brcm,pins = <26>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
};
};
fragment@3 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
codec: tlv320aic32x4@18 {
#sound-dai-cells = <0>;
compatible = "ti,tlv320aic32x4";
reg = <0x18>;
clocks = <&codec_osc>;
clock-names = "mclk";
iov-supply = <&vdd_3v3_reg>;
ldoin-supply = <&vdd_3v3_reg>;
gpio-controller;
#gpio-cells = <2>;
reset-gpios = <&gpio 26 GPIO_ACTIVE_HIGH>;
status = "okay";
};
};
};
fragment@4 {
target = <&sound>;
__overlay__ {
compatible = "as,audiosense-pi";
i2s-controller = <&i2s_clk_consumer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,38 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&audio_pins>;
frag0: __overlay__ {
brcm,pins = <12 13>;
brcm,function = <4>; /* alt0 alt0 */
};
};
fragment@1 {
target = <&chosen>;
__overlay__ {
bootargs = "snd_bcm2835.enable_headphones=1";
};
};
__overrides__ {
swap_lr = <&frag0>, "swap_lr?";
enable_jack = <&frag0>, "enable_jack?";
pins_12_13 = <&frag0>,"brcm,pins:0=12",
<&frag0>,"brcm,pins:4=13",
<&frag0>,"brcm,function:0=4";
pins_18_19 = <&frag0>,"brcm,pins:0=18",
<&frag0>,"brcm,pins:4=19",
<&frag0>,"brcm,function:0=2";
pins_40_41 = <&frag0>,"brcm,pins:0=40",
<&frag0>,"brcm,pins:4=41",
<&frag0>,"brcm,function:0=4";
pins_40_45 = <&frag0>,"brcm,pins:0=40",
<&frag0>,"brcm,pins:4=45",
<&frag0>,"brcm,function:0=4";
};
};

View File

@@ -0,0 +1,65 @@
/dts-v1/;
/plugin/;
/*
* Raspberry Pi 5 has a different Audio Out hardware from earlier Raspberry Pis.
* It can output only to GPIOs 12 and 13. We therefore enable it *only* when
* that particular GPIO mapping is requested here. To make it work with ASOC
* we must also define a "dummy" codec and a generic audio card.
*/
/ {
compatible = "brcm,bcm2712";
fragment@0 {
target = <&rp1_audio_out>;
frag0: __overlay__ {
pinctrl-0 = <&rp1_audio_out_12_13>;
pinctrl-names = "default";
status = "ok";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
rp1_audio_out_codec: rp1_audio_out_codec@0 {
compatible = "linux,spdif-dit";
#sound-dai-cells = <0>;
status = "ok";
};
rp1_audio_out_simple_card@0 {
compatible = "simple-audio-card";
simple-audio-card,name = "RP1-Audio-Out";
#address-cells = <1>;
#size-cells = <0>;
status = "ok";
simple-audio-card,dai-link@0 {
reg = <0>;
format = "left_j";
bitclock-master = <&sndcpu0>;
frame-master = <&sndcpu0>;
sndcpu0: cpu {
sound-dai = <&rp1_audio_out>;
};
codec {
sound-dai = <&rp1_audio_out_codec>;
};
};
};
};
};
__overrides__ {
swap_lr = <&frag0>, "swap_lr?";
pins_12_13 = <0>, "+0+1"; /* this is the default */
pins_18_19 = <0>, "-0-1"; /* sorry not supported */
pins_40_41 = <0>, "-0-1"; /* sorry not supported */
pins_40_45 = <0>, "-0-1"; /* sorry not supported */
};
};

View File

@@ -0,0 +1,125 @@
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&mmcnr>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
brcm,overclock-50 = <35>;
status = "okay";
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
sdio_pins: sdio_ovl_pins {
brcm,pins = <34 35 36 37 38 39>;
brcm,function = <7>; /* ALT3 = SD1 */
brcm,pull = <0 2 2 2 2 2>;
};
power_ctrl_pins: power_ctrl_pins {
brcm,pins = <40>;
brcm,function = <1>; // out
};
};
};
fragment@2 {
target-path = "/";
__overlay__ {
// We should switch to mmc-pwrseq-sd8787 after making it
// compatible with sd8887
// Currently that module requires two GPIOs to function since it
// targets a slightly different chip
power_ctrl: power_ctrl {
compatible = "gpio-poweroff";
gpios = <&gpio 40 1>;
force;
pinctrl-names = "default";
pinctrl-0 = <&power_ctrl_pins>;
};
i2c_soft: i2c@0 {
compatible = "i2c-gpio";
gpios = <&gpio 43 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* sda */
&gpio 42 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN) /* scl */>;
i2c-gpio,delay-us = <5>;
i2c-gpio,scl-open-drain;
i2c-gpio,sda-open-drain;
#address-cells = <1>;
#size-cells = <0>;
};
sd8xxx-wlan {
drvdbg = <0x6>;
drv_mode = <0x1>;
cfg80211_wext = <0xf>;
sta_name = "wlan";
wfd_name = "p2p";
cal_data_cfg = "none";
};
};
};
fragment@3 {
target = <&i2c_soft>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
gpio_expander: gpio_expander@20 {
compatible = "nxp,pca9554";
gpio-controller;
#gpio-cells = <2>;
reg = <0x20>;
status = "okay";
};
// rtc clock
ds1307: ds1307@68 {
compatible = "dallas,ds1307";
reg = <0x68>;
status = "okay";
};
// RGB LEDs (>= v1.1.0)
pca9633: pca9633@62 {
compatible = "nxp,pca9633";
reg = <0x62>;
#address-cells = <1>;
#size-cells = <0>;
red@0 {
label = "red";
reg = <0>;
linux,default-trigger = "none";
};
green@1 {
label = "green";
reg = <1>;
linux,default-trigger = "none";
};
blue@2 {
label = "blue";
reg = <2>;
linux,default-trigger = "none";
};
unused@3 {
label = "unused";
reg = <3>;
linux,default-trigger = "none";
};
};
};
};
};

View File

@@ -0,0 +1,68 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
/plugin/;
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/interrupt-controller/arm-gic.h>
/ {
compatible = "brcm,bcm2712";
fragment@0 {
target = <&gio>;
__overlay__ {
brcm,gpio-bank-widths = <32 4>;
};
};
fragment@1 {
target = <&gio_aon>;
__overlay__ {
brcm,gpio-bank-widths = <15 6>;
};
};
fragment@2 {
target = <&pinctrl>;
__overlay__ {
compatible = "brcm,bcm2712d0-pinctrl";
reg = <0x7d504100 0x20>;
};
};
fragment@3 {
target = <&pinctrl_aon>;
__overlay__ {
compatible = "brcm,bcm2712d0-aon-pinctrl";
reg = <0x7d510700 0x1c>;
};
};
fragment@4 {
target = <&uart10>;
__overlay__ {
interrupts = <GIC_SPI 120 IRQ_TYPE_LEVEL_HIGH>;
};
};
fragment@5 {
target = <&spi10>;
__overlay__ {
dmas = <&dma40 3>, <&dma40 4>;
};
};
fragment@6 {
target = <&hdmi0>;
__overlay__ {
dmas = <&dma40 (12|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
};
};
fragment@7 {
target = <&hdmi1>;
__overlay__ {
dmas = <&dma40 (13|(1<<30)|(1<<24)|(10<<16)|(15<<20))>;
};
};
};

View File

@@ -0,0 +1,545 @@
// SPDX-License-Identifier: GPL-2.0-only
// Overlay to configure a 2 port camera multiplexer
//
// Configuration is based on the Arducam Doubleplexer
// which uses a PCA9543 I2C multiplexer to handle the
// I2C, and GPIO 4 to control the MIPI mux, and GPIO 17
// to enable the CSI-2 mux output (gpio-hog).
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2835";
/* Fragments that complete the individual sensor fragments */
/* IMX290 */
fragment@0 {
target = <&imx290_0_ep>;
__overlay__ {
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <445500000 297000000>;
};
};
fragment@1 {
target = <&imx290_1_ep>;
__overlay__ {
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <445500000 297000000>;
};
};
/* IMX477 */
fragment@10 {
target = <&imx477_0>;
__overlay__ {
compatible = "sony,imx477";
};
};
fragment@11 {
target = <&imx477_1>;
__overlay__ {
compatible = "sony,imx477";
};
};
/* Additional fragments affecting the mux nodes */
fragment@100 {
target = <&mux_in0>;
__dormant__ {
data-lanes = <1>;
};
};
fragment@101 {
target = <&mux_in0>;
__overlay__ {
data-lanes = <1 2>;
};
};
fragment@102 {
target = <&mux_in1>;
__dormant__ {
data-lanes = <1>;
};
};
fragment@103 {
target = <&mux_in1>;
__overlay__ {
data-lanes = <1 2>;
};
};
/* Mux define */
i2c_frag: fragment@200 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pca@70 {
reg = <0x70>;
compatible = "nxp,pca9543";
#address-cells = <1>;
#size-cells = <0>;
i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
#define cam_node arducam_64mp_0
#define cam_endpoint arducam_64mp_0_ep
#define vcm_node arducam_64mp_0_vcm
#define cam1_clk clk_24mhz
#include "arducam-64mp.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx219_0
#define cam_endpoint imx219_0_ep
#define cam1_clk clk_24mhz
#include "imx219.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx477_0
#define cam_endpoint imx477_0_ep
#define cam1_clk clk_24mhz
#include "imx477_378.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx519_0
#define cam_endpoint imx519_0_ep
#define vcm_node imx519_0_vcm
#define cam1_clk clk_24mhz
#include "imx519.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx708_0
#define cam_endpoint imx708_0_ep
#define vcm_node imx708_0_vcm
#define cam1_clk clk_24mhz
#include "imx708.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node ov5647_0
#define cam_endpoint ov5647_0_ep
#define cam1_clk clk_25mhz
#include "ov5647.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov7251_0
#define cam_endpoint ov7251_0_ep
#define cam1_clk clk_24mhz
#include "ov7251.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov9281_0
#define cam_endpoint ov9281_0_ep
#define cam1_clk clk_24mhz
#include "ov9281.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx258_0
#define cam_endpoint imx258_0_ep
#define cam1_clk clk_24mhz
#include "imx258.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx290_0
#define cam_endpoint imx290_0_ep
#define cam1_clk clk_imx290
#include "imx290_327.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov2311_0
#define cam_endpoint ov2311_0_ep
#define cam1_clk clk_24mhz
#include "ov2311.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov64a40_0
#define cam_endpoint ov64a40_0_ep
#define vcm_node ov64a40_0_vcm
#define cam1_clk clk_24mhz
#include "ov64a40.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
};
i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
#define cam_node arducam_64mp_1
#define cam_endpoint arducam_64mp_1_ep
#define vcm_node arducam_64mp_1_vcm
#define cam1_clk clk_24mhz
#include "arducam-64mp.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx219_1
#define cam_endpoint imx219_1_ep
#define cam1_clk clk_24mhz
#include "imx219.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx477_1
#define cam_endpoint imx477_1_ep
#define cam1_clk clk_24mhz
#include "imx477_378.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx519_1
#define cam_endpoint imx519_1_ep
#define vcm_node imx519_1_vcm
#define cam1_clk clk_24mhz
#include "imx519.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx708_1
#define cam_endpoint imx708_1_ep
#define vcm_node imx708_1_vcm
#define cam1_clk clk_24mhz
#include "imx708.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node ov5647_1
#define cam_endpoint ov5647_1_ep
#define cam1_clk clk_25mhz
#include "ov5647.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov7251_1
#define cam_endpoint ov7251_1_ep
#define cam1_clk clk_24mhz
#include "ov7251.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov9281_1
#define cam_endpoint ov9281_1_ep
#define cam1_clk clk_24mhz
#include "ov9281.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx258_1
#define cam_endpoint imx258_1_ep
#define cam1_clk clk_24mhz
#include "imx258.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx290_1
#define cam_endpoint imx290_1_ep
#define cam1_clk clk_imx290
#include "imx290_327.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov2311_1
#define cam_endpoint ov2311_1_ep
#define cam1_clk clk_24mhz
#include "ov2311.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov64a40_1
#define cam_endpoint ov64a40_1_ep
#define vcm_node ov64a40_1_vcm
#define cam1_clk clk_24mhz
#include "ov64a40.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
};
};
};
};
csi_frag: fragment@201 {
target = <&csi1>;
__overlay__ {
status = "okay";
port {
csi1_ep: endpoint {
remote-endpoint = <&mux_out>;
clock-lanes = <0>;
data-lanes = <1 2>;
};
};
};
};
fragment@202 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};
fragment@203 {
target-path="/";
__overlay__ {
mux: mux-controller {
compatible = "gpio-mux";
#mux-control-cells = <0>;
mux-gpios = <&gpio 4 GPIO_ACTIVE_HIGH>;
};
video-mux {
compatible = "video-mux";
mux-controls = <&mux>;
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
mux_in0: endpoint {
clock-lanes = <0>;
};
};
port@1 {
reg = <1>;
mux_in1: endpoint {
clock-lanes = <0>;
};
};
port@2 {
reg = <2>;
mux_out: endpoint {
remote-endpoint = <&csi1_ep>;
clock-lanes = <0>;
};
};
};
clk_24mhz: clk_24mhz {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24000000>;
status = "okay";
};
clk_25mhz: clk_25mhz {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <25000000>;
status = "okay";
};
clk_imx290: clk_imx290 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <37125000>;
status = "okay";
};
};
};
fragment@204 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};
fragment@205 {
target = <&gpio>;
__overlay__ {
mipi_sw_oe_hog {
gpio-hog;
gpios = <17 GPIO_ACTIVE_LOW>;
output-high;
};
};
};
__overrides__ {
cam0-arducam-64mp = <&mux_in0>, "remote-endpoint:0=",<&arducam_64mp_0_ep>,
<&arducam_64mp_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&arducam_64mp_0>, "status=okay",
<&arducam_64mp_0_vcm>, "status=okay",
<&arducam_64mp_0>,"lens-focus:0=", <&arducam_64mp_0_vcm>;
cam0-imx219 = <&mux_in0>, "remote-endpoint:0=",<&imx219_0_ep>,
<&imx219_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx219_0>, "status=okay";
cam0-imx477 = <&mux_in0>, "remote-endpoint:0=",<&imx477_0_ep>,
<&imx477_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx477_0>, "status=okay";
cam0-imx519 = <&mux_in0>, "remote-endpoint:0=",<&imx519_0_ep>,
<&imx519_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx519_0>, "status=okay",
<&imx519_0_vcm>, "status=okay",
<&imx519_0>,"lens-focus:0=", <&imx519_0_vcm>;
cam0-imx708 = <&mux_in0>, "remote-endpoint:0=",<&imx708_0_ep>,
<&imx708_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx708_0>, "status=okay",
<&imx708_0_vcm>, "status=okay",
<&imx708_0>,"lens-focus:0=", <&imx708_0_vcm>;
cam0-ov5647 = <&mux_in0>, "remote-endpoint:0=",<&ov5647_0_ep>,
<&ov5647_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&ov5647_0>, "status=okay";
cam0-ov7251 = <&mux_in0>, "remote-endpoint:0=",<&ov7251_0_ep>,
<&ov7251_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&ov7251_0>, "status=okay",
<0>,"+100-101";
cam0-ov9281 = <&mux_in0>, "remote-endpoint:0=",<&ov9281_0_ep>,
<&ov9281_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&ov9281_0>, "status=okay";
cam0-imx258 = <&mux_in0>, "remote-endpoint:0=",<&imx258_0_ep>,
<&imx258_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&imx258_0>, "status=okay";
cam0-imx290 = <&mux_in0>, "remote-endpoint:0=",<&imx290_0_ep>,
<&imx290_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&imx290_0>, "status=okay";
cam0-ov2311 = <&mux_in0>, "remote-endpoint:0=",<&ov2311_0_ep>,
<&ov2311_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&ov2311_0>, "status=okay";
cam0-ov64a40 = <&mux_in0>, "remote-endpoint:0=",<&ov64a40_0_ep>,
<&ov64a40_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&ov64a40_0>, "status=okay",
<&ov64a40_0_vcm>, "status=okay",
<&ov64a40_0>,"lens-focus:0=", <&ov64a40_0_vcm>;
cam1-arducam-64mp = <&mux_in1>, "remote-endpoint:0=",<&arducam_64mp_1_ep>,
<&arducam_64mp_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&arducam_64mp_1>, "status=okay",
<&arducam_64mp_1_vcm>, "status=okay",
<&arducam_64mp_1>,"lens-focus:0=", <&arducam_64mp_1_vcm>;
cam1-imx219 = <&mux_in1>, "remote-endpoint:0=",<&imx219_1_ep>,
<&imx219_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx219_1>, "status=okay";
cam1-imx477 = <&mux_in1>, "remote-endpoint:0=",<&imx477_1_ep>,
<&imx477_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx477_1>, "status=okay";
cam1-imx519 = <&mux_in1>, "remote-endpoint:0=",<&imx519_1_ep>,
<&imx519_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx519_1>, "status=okay",
<&imx519_1_vcm>, "status=okay",
<&imx519_1>,"lens-focus:0=", <&imx519_1_vcm>;
cam1-imx708 = <&mux_in1>, "remote-endpoint:0=",<&imx708_1_ep>,
<&imx708_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx708_1>, "status=okay",
<&imx708_1_vcm>, "status=okay",
<&imx708_1>,"lens-focus:0=", <&imx708_1_vcm>;
cam1-ov5647 = <&mux_in1>, "remote-endpoint:0=",<&ov5647_1_ep>,
<&ov5647_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&ov5647_1>, "status=okay";
cam1-ov7251 = <&mux_in1>, "remote-endpoint:0=",<&ov7251_1_ep>,
<&ov7251_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&ov7251_1>, "status=okay",
<0>,"+102-103";
cam1-ov9281 = <&mux_in1>, "remote-endpoint:0=",<&ov9281_1_ep>,
<&ov9281_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&ov9281_1>, "status=okay";
cam1-imx258 = <&mux_in1>, "remote-endpoint:0=",<&imx258_1_ep>,
<&imx258_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&imx258_1>, "status=okay";
cam1-imx290 = <&mux_in1>, "remote-endpoint:0=",<&imx290_1_ep>,
<&imx290_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&imx290_1>, "status=okay";
cam1-ov2311 = <&mux_in1>, "remote-endpoint:0=",<&ov2311_1_ep>,
<&ov2311_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&ov2311_1>, "status=okay";
cam1-ov64a40 = <&mux_in1>, "remote-endpoint:0=",<&ov64a40_1_ep>,
<&ov64a40_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&ov64a40_1>, "status=okay",
<&ov64a40_1_vcm>, "status=okay",
<&ov64a40_1>,"lens-focus:0=", <&ov64a40_1_vcm>;
cam0-imx290-clk-freq = <&clk_imx290>,"clock-frequency:0",
<&imx290_0>,"clock-frequency:0";
cam1-imx290-clk-freq = <&clk_imx290>,"clock-frequency:0",
<&imx290_1>,"clock-frequency:0";
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
<&csi_frag>, "target:0=",<&csi0>;
cam0-sync-source = <&imx477_0>, "trigger-mode:0=1";
cam0-sync-sink = <&imx477_0>, "trigger-mode:0=2";
cam1-sync-source = <&imx477_1>, "trigger-mode:0=1";
cam1-sync-sink = <&imx477_1>, "trigger-mode:0=2";
};
};

View File

@@ -0,0 +1,954 @@
// SPDX-License-Identifier: GPL-2.0-only
// Overlay to configure a 4 port camera multiplexer
//
// Configuration is based on the Arducam 4 channel multiplexer
// which uses a PCA9543 I2C multiplexer to handle the
// I2C, and GPIOs 4, 17, and 18 to control the MIPI muxes.
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2835";
/* Fragments that complete the individual sensor fragments */
/* IMX290 */
fragment@0 {
target = <&imx290_0_ep>;
__overlay__ {
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <445500000 297000000>;
};
};
fragment@1 {
target = <&imx290_1_ep>;
__overlay__ {
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <445500000 297000000>;
};
};
fragment@2 {
target = <&imx290_2_ep>;
__overlay__ {
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <445500000 297000000>;
};
};
fragment@3 {
target = <&imx290_3_ep>;
__overlay__ {
data-lanes = <1 2>;
link-frequencies =
/bits/ 64 <445500000 297000000>;
};
};
/* IMX477 */
fragment@10 {
target = <&imx477_0>;
__overlay__ {
compatible = "sony,imx477";
};
};
fragment@11 {
target = <&imx477_1>;
__overlay__ {
compatible = "sony,imx477";
};
};
fragment@12 {
target = <&imx477_2>;
__overlay__ {
compatible = "sony,imx477";
};
};
fragment@13 {
target = <&imx477_3>;
__overlay__ {
compatible = "sony,imx477";
};
};
/* Additional fragments affecting the mux nodes */
fragment@100 {
target = <&mux_in0>;
__dormant__ {
data-lanes = <1>;
};
};
fragment@101 {
target = <&mux_in0>;
__overlay__ {
data-lanes = <1 2>;
};
};
fragment@102 {
target = <&mux_in1>;
__dormant__ {
data-lanes = <1>;
};
};
fragment@103 {
target = <&mux_in1>;
__overlay__ {
data-lanes = <1 2>;
};
};
fragment@104 {
target = <&mux_in2>;
__dormant__ {
data-lanes = <1>;
};
};
fragment@105 {
target = <&mux_in2>;
__overlay__ {
data-lanes = <1 2>;
};
};
fragment@106 {
target = <&mux_in3>;
__dormant__ {
data-lanes = <1>;
};
};
fragment@107 {
target = <&mux_in3>;
__overlay__ {
data-lanes = <1 2>;
};
};
/* Mux define */
i2c_frag: fragment@200 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pca@70 {
reg = <0x70>;
compatible = "nxp,pca9544";
#address-cells = <1>;
#size-cells = <0>;
i2c@0 {
reg = <0>;
#address-cells = <1>;
#size-cells = <0>;
#define cam_node arducam_64mp_0
#define cam_endpoint arducam_64mp_0_ep
#define vcm_node arducam_64mp_0_vcm
#define cam1_clk clk_24mhz
#include "arducam-64mp.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx219_0
#define cam_endpoint imx219_0_ep
#define cam1_clk clk_24mhz
#include "imx219.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx477_0
#define cam_endpoint imx477_0_ep
#define cam1_clk clk_24mhz
#include "imx477_378.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx519_0
#define cam_endpoint imx519_0_ep
#define vcm_node imx519_0_vcm
#define cam1_clk clk_24mhz
#include "imx519.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx708_0
#define cam_endpoint imx708_0_ep
#define vcm_node imx708_0_vcm
#define cam1_clk clk_24mhz
#include "imx708.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node ov5647_0
#define cam_endpoint ov5647_0_ep
#define cam1_clk clk_25mhz
#include "ov5647.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov7251_0
#define cam_endpoint ov7251_0_ep
#define cam1_clk clk_24mhz
#include "ov7251.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov9281_0
#define cam_endpoint ov9281_0_ep
#define cam1_clk clk_24mhz
#include "ov9281.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx258_0
#define cam_endpoint imx258_0_ep
#define cam1_clk clk_24mhz
#include "imx258.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx290_0
#define cam_endpoint imx290_0_ep
#define cam1_clk clk_imx290
#include "imx290_327.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov2311_0
#define cam_endpoint ov2311_0_ep
#define cam1_clk clk_24mhz
#include "ov2311.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov64a40_0
#define cam_endpoint ov64a40_0_ep
#define vcm_node ov64a40_0_vcm
#define cam1_clk clk_24mhz
#include "ov64a40.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
};
i2c@1 {
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
#define cam_node arducam_64mp_1
#define cam_endpoint arducam_64mp_1_ep
#define vcm_node arducam_64mp_1_vcm
#define cam1_clk clk_24mhz
#include "arducam-64mp.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx219_1
#define cam_endpoint imx219_1_ep
#define cam1_clk clk_24mhz
#include "imx219.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx477_1
#define cam_endpoint imx477_1_ep
#define cam1_clk clk_24mhz
#include "imx477_378.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx519_1
#define cam_endpoint imx519_1_ep
#define vcm_node imx519_1_vcm
#define cam1_clk clk_24mhz
#include "imx519.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx708_1
#define cam_endpoint imx708_1_ep
#define vcm_node imx708_1_vcm
#define cam1_clk clk_24mhz
#include "imx708.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node ov5647_1
#define cam_endpoint ov5647_1_ep
#define cam1_clk clk_25mhz
#include "ov5647.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov7251_1
#define cam_endpoint ov7251_1_ep
#define cam1_clk clk_24mhz
#include "ov7251.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov9281_1
#define cam_endpoint ov9281_1_ep
#define cam1_clk clk_24mhz
#include "ov9281.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx258_1
#define cam_endpoint imx258_1_ep
#define cam1_clk clk_24mhz
#include "imx258.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx290_1
#define cam_endpoint imx290_1_ep
#define cam1_clk clk_imx290
#include "imx290_327.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov2311_1
#define cam_endpoint ov2311_1_ep
#define cam1_clk clk_24mhz
#include "ov2311.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov64a40_1
#define cam_endpoint ov64a40_1_ep
#define vcm_node ov64a40_1_vcm
#define cam1_clk clk_24mhz
#include "ov64a40.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
};
i2c@2 {
reg = <2>;
#address-cells = <1>;
#size-cells = <0>;
#define cam_node arducam_64mp_2
#define cam_endpoint arducam_64mp_2_ep
#define vcm_node arducam_64mp_2_vcm
#define cam1_clk clk_24mhz
#include "arducam-64mp.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx219_2
#define cam_endpoint imx219_2_ep
#define cam1_clk clk_24mhz
#include "imx219.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx477_2
#define cam_endpoint imx477_2_ep
#define cam1_clk clk_24mhz
#include "imx477_378.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx519_2
#define cam_endpoint imx519_2_ep
#define vcm_node imx519_2_vcm
#define cam1_clk clk_24mhz
#include "imx519.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx708_2
#define cam_endpoint imx708_2_ep
#define vcm_node imx708_2_vcm
#define cam1_clk clk_24mhz
#include "imx708.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node ov5647_2
#define cam_endpoint ov5647_2_ep
#define cam1_clk clk_25mhz
#include "ov5647.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov7251_2
#define cam_endpoint ov7251_2_ep
#define cam1_clk clk_24mhz
#include "ov7251.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov9281_2
#define cam_endpoint ov9281_2_ep
#define cam1_clk clk_24mhz
#include "ov9281.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx258_2
#define cam_endpoint imx258_2_ep
#define cam1_clk clk_24mhz
#include "imx258.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx290_2
#define cam_endpoint imx290_2_ep
#define cam1_clk clk_imx290
#include "imx290_327.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov2311_2
#define cam_endpoint ov2311_2_ep
#define cam1_clk clk_24mhz
#include "ov2311.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov64a40_2
#define cam_endpoint ov64a40_2_ep
#define vcm_node ov64a40_2_vcm
#define cam1_clk clk_24mhz
#include "ov64a40.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
};
i2c@3 {
reg = <3>;
#address-cells = <1>;
#size-cells = <0>;
#define cam_node arducam_64mp_3
#define cam_endpoint arducam_64mp_3_ep
#define vcm_node arducam_64mp_3_vcm
#define cam1_clk clk_24mhz
#include "arducam-64mp.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx219_3
#define cam_endpoint imx219_3_ep
#define cam1_clk clk_24mhz
#include "imx219.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx477_3
#define cam_endpoint imx477_3_ep
#define cam1_clk clk_24mhz
#include "imx477_378.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx519_3
#define cam_endpoint imx519_3_ep
#define vcm_node imx519_3_vcm
#define cam1_clk clk_24mhz
#include "imx519.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node imx708_3
#define cam_endpoint imx708_3_ep
#define vcm_node imx708_3_vcm
#define cam1_clk clk_24mhz
#include "imx708.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
#define cam_node ov5647_3
#define cam_endpoint ov5647_3_ep
#define cam1_clk clk_25mhz
#include "ov5647.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov7251_3
#define cam_endpoint ov7251_3_ep
#define cam1_clk clk_24mhz
#include "ov7251.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov9281_3
#define cam_endpoint ov9281_3_ep
#define cam1_clk clk_24mhz
#include "ov9281.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx258_3
#define cam_endpoint imx258_3_ep
#define cam1_clk clk_24mhz
#include "imx258.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node imx290_3
#define cam_endpoint imx290_3_ep
#define cam1_clk clk_imx290
#include "imx290_327.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov2311_3
#define cam_endpoint ov2311_3_ep
#define cam1_clk clk_24mhz
#include "ov2311.dtsi"
#undef cam_node
#undef cam_endpoint
#undef cam1_clk
#define cam_node ov64a40_3
#define cam_endpoint ov64a40_3_ep
#define vcm_node ov64a40_3_vcm
#define cam1_clk clk_24mhz
#include "ov64a40.dtsi"
#undef cam_node
#undef cam_endpoint
#undef vcm_node
#undef cam1_clk
};
};
};
};
csi_frag: fragment@201 {
target = <&csi1>;
__overlay__ {
status = "okay";
port {
csi1_ep: endpoint {
remote-endpoint = <&mux_out>;
clock-lanes = <0>;
data-lanes = <1 2>;
};
};
};
};
fragment@202 {
target = <&i2c0if>;
__overlay__ {
status = "okay";
};
};
fragment@203 {
target-path="/";
__overlay__ {
mux: mux-controller {
compatible = "gpio-mux";
#mux-control-cells = <0>;
/* SEL, En2, En1 */
mux-gpios = <&gpio 4 GPIO_ACTIVE_HIGH>,
<&gpio 18 GPIO_ACTIVE_HIGH>,
<&gpio 17 GPIO_ACTIVE_HIGH>;
};
video-mux {
compatible = "video-mux";
mux-controls = <&mux>;
#address-cells = <1>;
#size-cells = <0>;
/* GPIO mappings settings for selecting the different
* camera connectors are not direct, hence port@ values
* are not straight forward.
*/
port@2 {
/* Port A - GPIO 17 = 0, GPIO 18 = 1,GPIO 4 = 0 */
reg = <2>;
mux_in0: endpoint {
clock-lanes = <0>;
};
};
port@3 {
/* Port B - GPIO 17 = 0, GPIO 18 = 1,GPIO 4 = 1 */
reg = <3>;
mux_in1: endpoint {
clock-lanes = <0>;
};
};
port@4 {
/* Port C - GPIO 17 = 1, GPIO 18 = 0, GPIO 4 = 0 */
reg = <4>;
mux_in2: endpoint {
clock-lanes = <0>;
};
};
port@5 {
/* Port D - GPIO 17 = 1, GPIO 18 = 0, GPIO 4 = 1 */
reg = <5>;
mux_in3: endpoint {
clock-lanes = <0>;
};
};
port@6 {
/* Output port needs to be the highest port number */
reg = <6>;
mux_out: endpoint {
remote-endpoint = <&csi1_ep>;
clock-lanes = <0>;
};
};
};
clk_24mhz: clk_24mhz {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <24000000>;
status = "okay";
};
clk_25mhz: clk_25mhz {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <25000000>;
status = "okay";
};
clk_imx290: clk_imx290 {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <37125000>;
status = "okay";
};
};
};
fragment@204 {
target = <&i2c0mux>;
__overlay__ {
status = "okay";
};
};
__overrides__ {
cam0-arducam-64mp = <&mux_in0>, "remote-endpoint:0=",<&arducam_64mp_0_ep>,
<&arducam_64mp_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&arducam_64mp_0>, "status=okay",
<&arducam_64mp_0_vcm>, "status=okay",
<&arducam_64mp_0>,"lens-focus:0=", <&arducam_64mp_0_vcm>;
cam0-imx219 = <&mux_in0>, "remote-endpoint:0=",<&imx219_0_ep>,
<&imx219_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx219_0>, "status=okay";
cam0-imx477 = <&mux_in0>, "remote-endpoint:0=",<&imx477_0_ep>,
<&imx477_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx477_0>, "status=okay";
cam0-imx519 = <&mux_in0>, "remote-endpoint:0=",<&imx519_0_ep>,
<&imx519_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx519_0>, "status=okay",
<&imx519_0_vcm>, "status=okay",
<&imx519_0>,"lens-focus:0=", <&imx519_0_vcm>;
cam0-imx708 = <&mux_in0>, "remote-endpoint:0=",<&imx708_0_ep>,
<&imx708_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&imx708_0>, "status=okay",
<&imx708_0_vcm>, "status=okay",
<&imx708_0>,"lens-focus:0=", <&imx708_0_vcm>;
cam0-ov5647 = <&mux_in0>, "remote-endpoint:0=",<&ov5647_0_ep>,
<&ov5647_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&ov5647_0>, "status=okay";
cam0-ov7251 = <&mux_in0>, "remote-endpoint:0=",<&ov7251_0_ep>,
<&ov7251_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&ov7251_0>, "status=okay",
<0>,"+100-101";
cam0-ov9281 = <&mux_in0>, "remote-endpoint:0=",<&ov9281_0_ep>,
<&ov9281_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&ov9281_0>, "status=okay";
cam0-imx258 = <&mux_in0>, "remote-endpoint:0=",<&imx258_0_ep>,
<&imx258_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&imx258_0>, "status=okay";
cam0-imx290 = <&mux_in0>, "remote-endpoint:0=",<&imx290_0_ep>,
<&imx290_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&imx290_0>, "status=okay";
cam0-ov2311 = <&mux_in0>, "remote-endpoint:0=",<&ov2311_0_ep>,
<&ov2311_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&ov2311_0>, "status=okay";
cam0-ov64a40 = <&mux_in0>, "remote-endpoint:0=",<&ov64a40_0_ep>,
<&ov64a40_0_ep>, "remote-endpoint:0=",<&mux_in0>,
<&mux_in0>, "clock-noncontinuous?",
<&ov64a40_0>, "status=okay",
<&ov64a40_0_vcm>, "status=okay",
<&ov64a40_0>,"lens-focus:0=", <&ov64a40_0_vcm>;
cam1-arducam-64mp = <&mux_in1>, "remote-endpoint:0=",<&arducam_64mp_1_ep>,
<&arducam_64mp_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&arducam_64mp_1>, "status=okay",
<&arducam_64mp_1_vcm>, "status=okay",
<&arducam_64mp_1>,"lens-focus:0=", <&arducam_64mp_1_vcm>;
cam1-imx219 = <&mux_in1>, "remote-endpoint:0=",<&imx219_1_ep>,
<&imx219_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx219_1>, "status=okay";
cam1-imx477 = <&mux_in1>, "remote-endpoint:0=",<&imx477_1_ep>,
<&imx477_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx477_1>, "status=okay";
cam1-imx519 = <&mux_in1>, "remote-endpoint:0=",<&imx519_1_ep>,
<&imx519_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx519_1>, "status=okay",
<&imx519_1_vcm>, "status=okay",
<&imx519_1>,"lens-focus:0=", <&imx519_1_vcm>;
cam1-imx708 = <&mux_in1>, "remote-endpoint:0=",<&imx708_1_ep>,
<&imx708_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&imx708_1>, "status=okay",
<&imx708_1_vcm>, "status=okay",
<&imx708_1>,"lens-focus:0=", <&imx708_1_vcm>;
cam1-ov5647 = <&mux_in1>, "remote-endpoint:0=",<&ov5647_1_ep>,
<&ov5647_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&ov5647_1>, "status=okay";
cam1-ov7251 = <&mux_in1>, "remote-endpoint:0=",<&ov7251_1_ep>,
<&ov7251_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&ov7251_1>, "status=okay",
<0>,"+102-103";
cam1-ov9281 = <&mux_in1>, "remote-endpoint:0=",<&ov9281_1_ep>,
<&ov9281_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&ov9281_1>, "status=okay";
cam1-imx258 = <&mux_in1>, "remote-endpoint:0=",<&imx258_1_ep>,
<&imx258_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&imx258_1>, "status=okay";
cam1-imx290 = <&mux_in1>, "remote-endpoint:0=",<&imx290_1_ep>,
<&imx290_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&imx290_1>, "status=okay";
cam1-ov2311 = <&mux_in1>, "remote-endpoint:0=",<&ov2311_1_ep>,
<&ov2311_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&ov2311_1>, "status=okay";
cam1-ov64a40 = <&mux_in1>, "remote-endpoint:0=",<&ov64a40_1_ep>,
<&ov64a40_1_ep>, "remote-endpoint:0=",<&mux_in1>,
<&mux_in1>, "clock-noncontinuous?",
<&ov64a40_1>, "status=okay",
<&ov64a40_1_vcm>, "status=okay",
<&ov64a40_1>,"lens-focus:0=", <&ov64a40_1_vcm>;
cam2-arducam-64mp = <&mux_in2>, "remote-endpoint:0=",<&arducam_64mp_2_ep>,
<&arducam_64mp_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&arducam_64mp_2>, "status=okay",
<&arducam_64mp_2_vcm>, "status=okay",
<&arducam_64mp_2>,"lens-focus:0=", <&arducam_64mp_2_vcm>;
cam2-imx219 = <&mux_in2>, "remote-endpoint:0=",<&imx219_2_ep>,
<&imx219_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&imx219_2>, "status=okay";
cam2-imx477 = <&mux_in2>, "remote-endpoint:0=",<&imx477_2_ep>,
<&imx477_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&imx477_2>, "status=okay";
cam2-imx519 = <&mux_in2>, "remote-endpoint:0=",<&imx519_2_ep>,
<&imx519_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&imx519_2>, "status=okay",
<&imx519_2_vcm>, "status=okay",
<&imx519_2>,"lens-focus:0=", <&imx519_2_vcm>;
cam2-imx708 = <&mux_in2>, "remote-endpoint:0=",<&imx708_2_ep>,
<&imx708_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&imx708_2>, "status=okay",
<&imx708_2_vcm>, "status=okay",
<&imx708_2>,"lens-focus:0=", <&imx708_2_vcm>;
cam2-ov5647 = <&mux_in2>, "remote-endpoint:0=",<&ov5647_2_ep>,
<&ov5647_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&ov5647_2>, "status=okay";
cam2-ov7251 = <&mux_in2>, "remote-endpoint:0=",<&ov7251_2_ep>,
<&ov7251_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&ov7251_2>, "status=okay",
<0>,"+104-105";
cam2-ov9281 = <&mux_in2>, "remote-endpoint:0=",<&ov9281_2_ep>,
<&ov9281_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&ov9281_2>, "status=okay";
cam2-imx258 = <&mux_in2>, "remote-endpoint:0=",<&imx258_2_ep>,
<&imx258_2>, "status=okay",
<&imx258_2>, "remote-endpoint:0=",<&mux_in2>;
cam2-imx290 = <&mux_in2>, "remote-endpoint:0=",<&imx290_2_ep>,
<&imx290_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&imx290_2>, "status=okay";
cam2-ov2311 = <&mux_in2>, "remote-endpoint:0=",<&ov2311_2_ep>,
<&ov2311_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&ov2311_2>, "status=okay";
cam2-ov64a40 = <&mux_in2>, "remote-endpoint:0=",<&ov64a40_2_ep>,
<&ov64a40_2_ep>, "remote-endpoint:0=",<&mux_in2>,
<&mux_in2>, "clock-noncontinuous?",
<&ov64a40_2>, "status=okay",
<&ov64a40_2_vcm>, "status=okay",
<&ov64a40_2>,"lens-focus:0=", <&ov64a40_2_vcm>;
cam3-arducam-64mp = <&mux_in3>, "remote-endpoint:0=",<&arducam_64mp_3_ep>,
<&arducam_64mp_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&arducam_64mp_3>, "status=okay",
<&arducam_64mp_3_vcm>, "status=okay",
<&arducam_64mp_3>,"lens-focus:0=", <&arducam_64mp_3_vcm>;
cam3-imx219 = <&mux_in3>, "remote-endpoint:0=",<&imx219_3_ep>,
<&imx219_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&imx219_3>, "status=okay";
cam3-imx477 = <&mux_in3>, "remote-endpoint:0=",<&imx477_3_ep>,
<&imx477_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&imx477_3>, "status=okay";
cam3-imx519 = <&mux_in3>, "remote-endpoint:0=",<&imx519_3_ep>,
<&imx519_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&imx519_3>, "status=okay",
<&imx519_3_vcm>, "status=okay",
<&imx519_3>,"lens-focus:0=", <&imx519_3_vcm>;
cam3-imx708 = <&mux_in3>, "remote-endpoint:0=",<&imx708_3_ep>,
<&imx708_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&imx708_3>, "status=okay",
<&imx708_3_vcm>, "status=okay",
<&imx708_3>,"lens-focus:0=", <&imx708_3_vcm>;
cam3-ov5647 = <&mux_in3>, "remote-endpoint:0=",<&ov5647_3_ep>,
<&ov5647_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&ov5647_3>, "status=okay";
cam3-ov7251 = <&mux_in3>, "remote-endpoint:0=",<&ov7251_3_ep>,
<&ov7251_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&ov7251_3>, "status=okay",
<0>,"+106-107";
cam3-ov9281 = <&mux_in3>, "remote-endpoint:0=",<&ov9281_3_ep>,
<&ov9281_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&ov9281_3>, "status=okay";
cam3-imx258 = <&mux_in3>, "remote-endpoint:0=",<&imx258_3_ep>,
<&imx258_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&imx258_3>, "status=okay";
cam3-imx290 = <&mux_in3>, "remote-endpoint:0=",<&imx290_3_ep>,
<&imx290_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&imx290_3>, "status=okay";
cam3-ov2311 = <&mux_in3>, "remote-endpoint:0=",<&ov2311_3_ep>,
<&ov2311_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&ov2311_3>, "status=okay";
cam3-ov64a40 = <&mux_in3>, "remote-endpoint:0=",<&ov64a40_3_ep>,
<&ov64a40_3_ep>, "remote-endpoint:0=",<&mux_in3>,
<&mux_in3>, "clock-noncontinuous?",
<&ov64a40_3>, "status=okay",
<&ov64a40_3_vcm>, "status=okay",
<&ov64a40_3>,"lens-focus:0=", <&ov64a40_3_vcm>;
cam0-imx290-clk-freq = <&clk_imx290>,"clock-frequency:0",
<&imx290_0>,"clock-frequency:0";
cam1-imx290-clk-freq = <&clk_imx290>,"clock-frequency:0",
<&imx290_1>,"clock-frequency:0";
cam2-imx290-clk-freq = <&clk_imx290>,"clock-frequency:0",
<&imx290_2>,"clock-frequency:0";
cam3-imx290-clk-freq = <&clk_imx290>,"clock-frequency:0",
<&imx290_3>,"clock-frequency:0";
cam0 = <&i2c_frag>, "target:0=",<&i2c_csi_dsi0>,
<&csi_frag>, "target:0=",<&csi0>;
cam0-sync-source = <&imx477_0>, "trigger-mode:0=1";
cam0-sync-sink = <&imx477_0>, "trigger-mode:0=2";
cam1-sync-source = <&imx477_1>, "trigger-mode:0=1";
cam1-sync-sink = <&imx477_1>, "trigger-mode:0=2";
cam2-sync-source = <&imx477_2>, "trigger-mode:0=1";
cam2-sync-sink = <&imx477_2>, "trigger-mode:0=2";
cam3-sync-source = <&imx477_3>, "trigger-mode:0=1";
cam3-sync-sink = <&imx477_3>, "trigger-mode:0=2";
};
};

View File

@@ -0,0 +1,52 @@
// Overlay for cap1106 from Microchip Semiconductor
// add CONFIG_KEYBOARD_CAP11XX=y
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c1>;
__overlay__{
status = "okay";
cap1106: cap1106@28 {
compatible = "microchip,cap1106";
pinctrl-0 = <&cap1106_pins>;
pinctrl-names = "default";
interrupt-parent = <&gpio>;
interrupts = <4 2>;
reg = <0x28>;
autorepeat;
microchip,sensor-gain = <2>;
linux,keycodes = <2>, /* KEY_1 */
<3>, /* KEY_2 */
<4>, /* KEY_3 */
<5>, /* KEY_4 */
<6>, /* KEY_5 */
<7>; /* KEY_6 */
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
cap1106_pins: cap1106_pins {
brcm,pins = <4>;
brcm,function = <0>; /* in */
brcm,pull = <0>; /* none */
};
};
};
__overrides__ {
int_pin = <&cap1106>, "interrupts:0",
<&cap1106_pins>, "brcm,pins:0";
};
};

View File

@@ -0,0 +1,66 @@
/dts-v1/;
/plugin/;
/* Overlay for ChipCap 2 on i2c */
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
chipcap2: chipcap2@28 {
compatible = "amphenol,cc2d23s";
reg = <0x28>;
interrupt-parent = <&gpio>;
interrupts = <4 IRQ_TYPE_EDGE_RISING>,
<5 IRQ_TYPE_EDGE_RISING>,
<6 IRQ_TYPE_EDGE_RISING>;
interrupt-names = "ready", "low", "high";
vdd-supply = <&chipcap2_reg>;
status = "okay";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
chipcap2_pins: chipcap2_pins {
brcm,pins = <4 5 6 26>;
brcm,function = <0 0 0 1>;
};
};
};
fragment@2 {
target-path = "/";
__overlay__ {
chipcap2_reg: chipcap2_reg {
compatible = "regulator-fixed";
regulator-name = "chipcap2_reg";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio 26 GPIO_ACTIVE_HIGH>;
enable-active-high;
};
};
};
__overrides__ {
ready_pin = <&chipcap2>, "interrupts:0",
<&chipcap2_pins>, "brcm,pins:0";
low_pin = <&chipcap2>, "interrupts:8",
<&chipcap2_pins>, "brcm,pins:4";
high_pin = <&chipcap2>, "interrupts:16",
<&chipcap2_pins>, "brcm,pins:8";
reg_pin = <&chipcap2_reg>, "gpio:4",
<&chipcap2_pins>, "brcm,pins:12";
};
};

View File

@@ -0,0 +1,46 @@
/*
* Device Tree overlay for ChipDip DAC
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
spdif-transmitter {
#address-cells = <0>;
#size-cells = <0>;
#sound-dai-cells = <0>;
compatible = "linux,spdif-dit";
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "chipdip,chipdip-dac";
i2s-controller = <&i2s_clk_consumer>;
sr0-gpios = <&gpio 5 0>;
sr1-gpios = <&gpio 6 0>;
sr2-gpios = <&gpio 12 0>;
res0-gpios = <&gpio 24 0>;
res1-gpios = <&gpio 27 0>;
mute-gpios = <&gpio 4 0>;
sdwn-gpios = <&gpio 13 0>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,172 @@
// Definitions for the Cirrus Logic Audio Card
/dts-v1/;
/plugin/;
#include <dt-bindings/pinctrl/bcm2835.h>
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/mfd/arizona.h>
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_consumer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
wlf_5102_pins: wlf_5102_pins {
brcm,pins = <17 22 27>;
brcm,function = <
BCM2835_FSEL_GPIO_OUT
BCM2835_FSEL_GPIO_OUT
BCM2835_FSEL_GPIO_IN
>;
};
wlf_8804_pins: wlf_8804_pins {
brcm,pins = <8>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
};
};
fragment@2 {
target = <&spi0_cs_pins>;
__overlay__ {
brcm,pins = <7>;
brcm,function = <BCM2835_FSEL_GPIO_OUT>;
};
};
fragment@3 {
target-path = "/";
__overlay__ {
rpi_cirrus_reg_1v8: rpi_cirrus_reg_1v8 {
compatible = "regulator-fixed";
regulator-name = "RPi-Cirrus 1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
};
};
fragment@4 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@5 {
target = <&spidev1>;
__overlay__ {
status = "disabled";
};
};
fragment@6 {
target = <&spi0>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
cs-gpios = <&gpio 7 GPIO_ACTIVE_LOW>;
wm5102@0{
compatible = "wlf,wm5102";
reg = <0>;
pinctrl-names = "default";
pinctrl-0 = <&wlf_5102_pins>;
spi-max-frequency = <500000>;
interrupt-parent = <&gpio>;
interrupts = <27 8>;
interrupt-controller;
#interrupt-cells = <2>;
gpio-controller;
#gpio-cells = <2>;
LDOVDD-supply = <&rpi_cirrus_reg_1v8>;
AVDD-supply = <&rpi_cirrus_reg_1v8>;
DBVDD1-supply = <&rpi_cirrus_reg_1v8>;
DBVDD2-supply = <&vdd_3v3_reg>;
DBVDD3-supply = <&vdd_3v3_reg>;
CPVDD-supply = <&rpi_cirrus_reg_1v8>;
SPKVDDL-supply = <&vdd_5v0_reg>;
SPKVDDR-supply = <&vdd_5v0_reg>;
DCVDD-supply = <&arizona_ldo1>;
reset-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
wlf,ldoena = <&gpio 22 GPIO_ACTIVE_HIGH>;
wlf,gpio-defaults = <
ARIZONA_GP_DEFAULT
ARIZONA_GP_DEFAULT
ARIZONA_GP_DEFAULT
ARIZONA_GP_DEFAULT
ARIZONA_GP_DEFAULT
>;
wlf,micd-configs = <0 1 0>;
wlf,dmic-ref = <
ARIZONA_DMIC_MICVDD
ARIZONA_DMIC_MICBIAS2
ARIZONA_DMIC_MICVDD
ARIZONA_DMIC_MICVDD
>;
wlf,inmode = <
ARIZONA_INMODE_DIFF
ARIZONA_INMODE_DMIC
ARIZONA_INMODE_SE
ARIZONA_INMODE_DIFF
>;
status = "okay";
arizona_ldo1: ldo1 {
regulator-name = "LDO1";
// default constraints as in
// arizona-ldo1.c
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1800000>;
};
};
};
};
fragment@7 {
target = <&i2c1>;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
wm8804@3b {
compatible = "wlf,wm8804";
reg = <0x3b>;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&wlf_8804_pins>;
PVDD-supply = <&vdd_3v3_reg>;
DVDD-supply = <&vdd_3v3_reg>;
wlf,reset-gpio = <&gpio 8 GPIO_ACTIVE_HIGH>;
};
};
};
fragment@8 {
target = <&sound>;
__overlay__ {
compatible = "wlf,rpi-cirrus";
i2s-controller = <&i2s_clk_consumer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,27 @@
// SPDX-License-Identifier: GPL-2.0-only
// Definitions for IMX708 camera module on VC I2C bus
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c0mux>;
i2c0mux_frag: __overlay__ {
pinctrl-0 = <&i2c0_gpio28>;
pinctrl-1 = <&i2c0_gpio0>;
};
};
__overrides__ {
i2c0-gpio0 = <&i2c0mux_frag>, "pinctrl-0:0=",<&i2c0_gpio0>;
i2c0-gpio28 = <&i2c0mux_frag>, "pinctrl-0:0=",<&i2c0_gpio28>;
i2c0-gpio44 = <&i2c0mux_frag>, "pinctrl-0:0=",<&i2c0_gpio44>;
i2c10-gpio0 = <&i2c0mux_frag>, "pinctrl-1:0=",<&i2c0_gpio0>;
i2c10-gpio28 = <&i2c0mux_frag>, "pinctrl-1:0=",<&i2c0_gpio28>;
i2c10-gpio44 = <&i2c0mux_frag>, "pinctrl-1:0=",<&i2c0_gpio44>;
};
};

View File

@@ -0,0 +1,36 @@
/*
* cma.dts
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&cma>;
frag0: __overlay__ {
/*
* The default size when using this overlay is 256 MB
* and should be kept as is for backwards
* compatibility.
*/
size = <0x10000000>;
};
};
__overrides__ {
cma-512 = <&frag0>,"size:0=",<0x20000000>;
cma-448 = <&frag0>,"size:0=",<0x1c000000>;
cma-384 = <&frag0>,"size:0=",<0x18000000>;
cma-320 = <&frag0>,"size:0=",<0x14000000>;
cma-256 = <&frag0>,"size:0=",<0x10000000>;
cma-192 = <&frag0>,"size:0=",<0xC000000>;
cma-128 = <&frag0>,"size:0=",<0x8000000>;
cma-96 = <&frag0>,"size:0=",<0x6000000>;
cma-64 = <&frag0>,"size:0=",<0x4000000>;
cma-size = <&frag0>,"size:0"; /* in bytes, 4MB aligned */
cma-default = <0>,"-0";
};
};

View File

@@ -0,0 +1,124 @@
/*
* crystalfontz-cfa050_pi_m-overlay.dts
* Configures the Crystalfontz CFA050-PI-M series of modules
* using CFAF7201280A0-050TC/TN panels with RaspberryPi CM4 DSI1
*/
/dts-v1/;
/plugin/;
/{
// RaspberryPi CM4
compatible = "brcm,bcm2835";
// PCF8574 I2C GPIO EXPANDER
fragment@0 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pcf8574a: pcf8574a@38 {
reg = <0x38>;
compatible = "nxp,pcf8574";
gpio-controller;
#gpio-cells = <2>;
ngpios = <8>;
gpio-line-names = "TFT_RESET", "TOUCH_RESET", "EXT_P2", "EXT_P3",
"EXT_P4", "EXT_P5", "EXT_P6", "EXT_P7";
};
};
};
// LM3630a BACKLIGHT LED CONTROLLER
fragment@1 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
lm3630a: backlight@36 {
reg = <0x36>;
compatible = "ti,lm3630a";
#address-cells = <1>;
#size-cells = <0>;
led@0 {
reg = <0>;
led-sources = <0 1>;
label = "lcd-backlight";
default-brightness = <128>;
max-brightness = <255>;
};
};
};
};
// CFAF7201280A0_050Tx TFT DSI PANEL
fragment@2 {
target = <&dsi1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port {
dsi_out: endpoint {
remote-endpoint = <&panel_in>;
};
};
dsi_panel: dsi_panel@0 {
compatible = "crystalfontz,cfaf7201280a0_050tx";
reg = <0>;
reset-gpios = <&pcf8574a 0 1>;
backlight = <&lm3630a>;
fps = <60>;
port {
panel_in: endpoint {
remote-endpoint = <&dsi_out>;
};
};
};
};
};
// rPI GPIO INPUT FOR TOUCH IC IRQ
fragment@3 {
target = <&gpio>;
__dormant__ {
gt928intpins: gt928intpins {
brcm,pins = <26>;
brcm,function = <0>;
brcm,pull = <1>;
};
};
};
// GT928 TOUCH CONTROLLER IC
fragment@4 {
target = <&i2c_csi_dsi>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
gt928@5d {
compatible = "goodix,gt928";
reg = <0x5d>;
interrupt-parent = <&gpio>;
interrupts = <26 2>;
irq-gpios = <&gpio 26 0>;
reset-gpios = <&pcf8574a 1 1>;
touchscreen-inverted-x;
touchscreen-inverted-y;
};
};
};
// PCF85063A RTC on I2C
fragment@5 {
target = <&i2c_csi_dsi>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pcf85063a@51 {
compatible = "nxp,pcf85063a";
reg = <0x51>;
};
};
};
// CAPACITIVE TOUCH OPTION FOR TFT PANEL
__overrides__ {
captouch = <0>,"+3+4";
};
};

View File

@@ -0,0 +1,117 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2711";
fragment@0 {
target=<&dsi1>;
__overlay__ {
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
port {
dsi1_out_port: endpoint {
remote-endpoint = <&panel_dsi_in1>;
};
};
display1: panel@0 {
compatible = "nwe,nwe080";
reg=<0>;
backlight = <&rpi_backlight>;
reset-gpios = <&gpio 20 0>;
port {
panel_dsi_in1: endpoint {
remote-endpoint = <&dsi1_out_port>;
};
};
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
pwm_pins: pwm_pins {
brcm,pins = <12>;
brcm,function = <4>; // ALT0
};
};
};
fragment@2 {
target = <&pwm>;
frag1: __overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&pwm_pins>;
assigned-clock-rates = <1000000>;
status = "okay";
};
};
fragment@3 {
target-path = "/";
__overlay__ {
rpi_backlight: rpi_backlight {
compatible = "pwm-backlight";
brightness-levels = <0 6 8 12 16 24 32 40 48 64 96 128 160 192 224 255>;
default-brightness-level = <6>;
pwms = <&pwm 0 200000 0>;
power-supply = <&vdd_3v3_reg>;
status = "okay";
};
};
};
fragment@4 {
target = <&i2c6>;
frag0: __overlay__ {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&i2c6_pins>;
clock-frequency = <100000>;
};
};
fragment@5 {
target = <&i2c6_pins>;
__overlay__ {
brcm,pins = <22 23>;
};
};
fragment@6 {
target = <&gpio>;
__overlay__ {
goodix_pins: goodix_pins {
brcm,pins = <21 26>; // interrupt and reset
brcm,function = <0 0>; // in
brcm,pull = <2 2>; // pull-up
};
};
};
fragment@7 {
target = <&i2c6>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
gt9xx: gt9xx@5d {
compatible = "goodix,gt9271";
reg = <0x5D>;
pinctrl-names = "default";
pinctrl-0 = <&goodix_pins>;
interrupt-parent = <&gpio>;
interrupts = <21 2>; // high-to-low edge triggered
irq-gpios = <&gpio 21 0>;
reset-gpios = <&gpio 26 0>;
};
};
};
};

View File

@@ -0,0 +1,71 @@
// Definitions for DACberry400
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
codec_1v8_reg: codec-1v8-reg {
compatible = "regulator-fixed";
regulator-name = "tlv320aic3104_1v8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
};
};
fragment@2 {
target = <&gpio>;
__overlay__ {
codec_rst: codec-rst {
brcm,pins = <26>;
brcm,function = <1>;
};
};
};
fragment@3 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
tlv320aic3104@18 {
#sound-dai-cells = <0>;
reg = <0x18>;
compatible = "ti,tlv320aic3x";
AVDD-supply = <&vdd_3v3_reg>;
DRVDD-supply = <&vdd_3v3_reg>;
DVDD-supply = <&codec_1v8_reg>;
IOVDD-supply = <&codec_1v8_reg>;
gpio-controller;
reset-gpios = <&gpio 26 1>;
status = "okay";
};
};
};
fragment@4 {
target = <&sound>;
__overlay__ {
compatible = "osaelectronics,dacberry400";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,48 @@
/*
* Overlay for the DHT11/21/22 humidity/temperature sensor modules.
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
dht11: dht11@4 {
compatible = "dht11";
pinctrl-names = "default";
pinctrl-0 = <&dht11_pins>;
gpios = <&gpio 4 0>;
status = "okay";
#io-channel-cells = <1>;
};
iio: iio-hwmon@4 {
compatible = "iio-hwmon";
status = "okay";
io-channels = <&dht11 0>, <&dht11 1>;
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
dht11_pins: dht11_pins@4 {
brcm,pins = <4>;
brcm,function = <0>; // in
brcm,pull = <0>; // off
};
};
};
__overrides__ {
gpiopin = <&dht11_pins>,"brcm,pins:0",
<&dht11_pins>, "reg:0",
<&dht11>,"gpios:4",
<&dht11>,"reg:0",
<&iio>,"reg:0";
};
};

View File

@@ -0,0 +1,39 @@
// Definitions for Dion Audio KIWI streamer
/*
* PCM1794 DAC (in hardware mode).
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
pcm1794a-codec {
#sound-dai-cells = <0>;
compatible = "ti,pcm1794a";
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "dionaudio,dionaudio-kiwi";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,39 @@
// Definitions for Dion Audio LOCO DAC-AMP
/*
* PCM5242 DAC (in hardware mode) and TPA3118 AMP.
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
pcm5102a-codec {
#sound-dai-cells = <0>;
compatible = "ti,pcm5102a";
status = "okay";
};
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "dionaudio,loco-pcm5242-tpa3118";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,49 @@
/*
* Definitions for Dion Audio LOCO-V2 DAC-AMP
* eg. dtoverlay=dionaudio-loco-v2
*
* PCM5242 DAC (in software mode) and TPA3255 AMP.
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&sound>;
frag0: __overlay__ {
compatible = "dionaudio,dionaudio-loco-v2";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
};
};
fragment@1 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
pcm5122@4c {
#sound-dai-cells = <0>;
compatible = "ti,pcm5122";
reg = <0x4d>;
status = "okay";
};
};
};
__overrides__ {
24db_digital_gain = <&frag0>,"dionaudio,24db_digital_gain?";
};
};

View File

@@ -0,0 +1,59 @@
/dts-v1/;
/plugin/;
/* Disable Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15. */
#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&uart1>;
__overlay__ {
status = "disabled";
};
};
fragment@1 {
target = <&uart0>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&uart0_pins>;
status = "okay";
};
};
fragment@2 {
target = <&bt>;
__overlay__ {
status = "disabled";
};
};
fragment@3 {
target = <&uart0_pins>;
__overlay__ {
brcm,pins;
brcm,function;
brcm,pull;
};
};
fragment@4 {
target = <&bt_pins>;
__overlay__ {
brcm,pins;
brcm,function;
brcm,pull;
};
};
fragment@5 {
target-path = "/aliases";
__overlay__ {
serial0 = "/soc/serial@7e201000";
serial1 = "/soc/serial@7e215040";
};
};
};

View File

@@ -0,0 +1,17 @@
/dts-v1/;
/plugin/;
/* Disable Bluetooth */
#include <dt-bindings/gpio/gpio.h>
/{
compatible = "brcm,bcm2712";
fragment@0 {
target = <&bluetooth>;
__overlay__ {
status = "disabled";
};
};
};

View File

@@ -0,0 +1,13 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2711";
fragment@0 {
target = <&emmc2>;
__overlay__ {
status = "disabled";
};
};
};

View File

@@ -0,0 +1,20 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&mmc>;
__overlay__ {
status = "disabled";
};
};
fragment@1 {
target = <&mmcnr>;
__overlay__ {
status = "disabled";
};
};
};

View File

@@ -0,0 +1,13 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2712";
fragment@0 {
target = <&sdio2>;
__overlay__ {
status = "disabled";
};
};
};

View File

@@ -0,0 +1,39 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
// There is no DPI driver module, but we need a platform device
// node (that doesn't already use pinctrl) to hang the pinctrl
// reference on - leds will do
fragment@0 {
target = <&fb>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&dpi18_pins>;
};
};
fragment@1 {
target = <&vc4>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&dpi18_pins>;
};
};
fragment@2 {
target = <&gpio>;
__overlay__ {
dpi18_pins: dpi18_pins {
brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19 20
21>;
brcm,function = <6>; /* alt2 */
brcm,pull = <0>; /* no pull */
};
};
};
};

View File

@@ -0,0 +1,26 @@
/*
* dpi18cpadhi-overlay.dts
*/
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&fb>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&dpi_18bit_cpadhi_gpio0>;
};
};
fragment@1 {
target = <&vc4>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&dpi_18bit_cpadhi_gpio0>;
};
};
};

View File

@@ -0,0 +1,39 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
// There is no DPI driver module, but we need a platform device
// node (that doesn't already use pinctrl) to hang the pinctrl
// reference on - leds will do
fragment@0 {
target = <&fb>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&dpi24_pins>;
};
};
fragment@1 {
target = <&vc4>;
__overlay__ {
pinctrl-names = "default";
pinctrl-0 = <&dpi24_pins>;
};
};
fragment@2 {
target = <&gpio>;
__overlay__ {
dpi24_pins: dpi24_pins {
brcm,pins = <0 1 2 3 4 5 6 7 8 9 10 11
12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27>;
brcm,function = <6>; /* alt2 */
brcm,pull = <0>; /* no pull */
};
};
};
};

View File

@@ -0,0 +1,208 @@
#include <dt-bindings/clock/bcm2835.h>
/*
* Device tree overlay for the DRAWS Hardware
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s_clk_producer>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target-path = "/";
__overlay__ {
regulators {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
udrc0_ldoin: udrc0_ldoin {
compatible = "regulator-fixed";
regulator-name = "ldoin";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
sc16is752_clk: sc16is752_draws_clk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <1843200>;
};
};
pps: pps {
compatible = "pps-gpio";
pinctrl-names = "default";
pinctrl-0 = <&pps_pins>;
gpios = <&gpio 7 0>;
status = "okay";
};
iio-hwmon {
compatible = "iio-hwmon";
status = "okay";
io-channels = <&tla2024 4>, <&tla2024 5>, <&tla2024 6>,
<&tla2024 7>;
};
};
};
fragment@2 {
target = <&i2c_arm>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
tlv320aic32x4: tlv320aic32x4@18 {
compatible = "ti,tlv320aic32x4";
reg = <0x18>;
#sound-dai-cells = <0>;
status = "okay";
clocks = <&clocks BCM2835_CLOCK_GP0>;
clock-names = "mclk";
assigned-clocks = <&clocks BCM2835_CLOCK_GP0>;
assigned-clock-rates = <25000000>;
pinctrl-names = "default";
pinctrl-0 = <&gpclk0_pin &aic3204_reset>;
reset-gpios = <&gpio 13 0>;
iov-supply = <&udrc0_ldoin>;
ldoin-supply = <&udrc0_ldoin>;
};
sc16is752: sc16is752@50 {
compatible = "nxp,sc16is752";
reg = <0x50>;
clocks = <&sc16is752_clk>;
interrupt-parent = <&gpio>;
interrupts = <17 2>; /* IRQ_TYPE_EDGE_FALLING */
pinctrl-names = "default";
pinctrl-0 = <&sc16is752_irq>;
};
tla2024: tla2024@48 {
compatible = "ti,ads1015";
reg = <0x48>;
#address-cells = <1>;
#size-cells = <0>;
#io-channel-cells = <1>;
adc_ch4: channel@4 {
reg = <4>;
ti,gain = <1>;
ti,datarate = <4>;
};
adc_ch5: channel@5 {
reg = <5>;
ti,gain = <1>;
ti,datarate = <4>;
};
adc_ch6: channel@6 {
reg = <6>;
ti,gain = <2>;
ti,datarate = <4>;
};
adc_ch7: channel@7 {
reg = <7>;
ti,gain = <2>;
ti,datarate = <4>;
};
};
};
};
fragment@3 {
target = <&sound>;
snd: __overlay__ {
compatible = "simple-audio-card";
i2s-controller = <&i2s_clk_producer>;
status = "okay";
simple-audio-card,name = "draws";
simple-audio-card,format = "i2s";
simple-audio-card,bitclock-master = <&dailink0_master>;
simple-audio-card,frame-master = <&dailink0_master>;
simple-audio-card,widgets =
"Line", "Line In",
"Line", "Line Out";
simple-audio-card,routing =
"IN1_R", "Line In",
"IN1_L", "Line In",
"CM_L", "Line In",
"CM_R", "Line In",
"Line Out", "LOR",
"Line Out", "LOL";
dailink0_master: simple-audio-card,cpu {
sound-dai = <&i2s_clk_producer>;
};
simple-audio-card,codec {
sound-dai = <&tlv320aic32x4>;
};
};
};
fragment@4 {
target = <&gpio>;
__overlay__ {
gpclk0_pin: gpclk0_pin {
brcm,pins = <4>;
brcm,function = <4>;
};
aic3204_reset: aic3204_reset {
brcm,pins = <13>;
brcm,function = <1>;
brcm,pull = <1>;
};
aic3204_gpio: aic3204_gpio {
brcm,pins = <26>;
};
sc16is752_irq: sc16is752_irq {
brcm,pins = <17>;
brcm,function = <0>;
brcm,pull = <2>;
};
pps_pins: pps_pins {
brcm,pins = <7>;
brcm,function = <0>;
brcm,pull = <0>;
};
};
};
__overrides__ {
draws_adc_ch4_gain = <&adc_ch4>,"ti,gain:0";
draws_adc_ch4_datarate = <&adc_ch4>,"ti,datarate:0";
draws_adc_ch5_gain = <&adc_ch5>,"ti,gain:0";
draws_adc_ch5_datarate = <&adc_ch5>,"ti,datarate:0";
draws_adc_ch6_gain = <&adc_ch6>,"ti,gain:0";
draws_adc_ch6_datarate = <&adc_ch6>,"ti,datarate:0";
draws_adc_ch7_gain = <&adc_ch7>,"ti,gain:0";
draws_adc_ch7_datarate = <&adc_ch7>,"ti,datarate:0";
alsaname = <&snd>, "simple-audio-card,name";
};
};

Some files were not shown because too many files have changed in this diff Show More