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>
This commit is contained in:
notro
2014-07-09 14:46:08 +02:00
committed by popcornmix
parent e4a6adeb15
commit b5fd857e98
271 changed files with 23898 additions and 31 deletions

1
.gitignore vendored
View File

@@ -18,6 +18,7 @@
*.c.[012]*.*
*.dt.yaml
*.dtb
*.dtbo
*.dtb.S
*.dwo
*.elf

View File

@@ -1,4 +1,20 @@
# SPDX-License-Identifier: GPL-2.0
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 \
bcm2709-rpi-2-b.dtb \
bcm2710-rpi-2-b.dtb \
bcm2710-rpi-3-b.dtb \
bcm2711-rpi-4-b.dtb \
bcm2710-rpi-3-b-plus.dtb \
bcm2710-rpi-cm3.dtb \
bcm2711-rpi-cm4.dtb
dtb-$(CONFIG_ARCH_ALPINE) += \
alpine-db.dtb
dtb-$(CONFIG_MACH_ARTPEC6) += \
@@ -92,7 +108,6 @@ dtb-$(CONFIG_ARCH_BCM2835) += \
bcm2837-rpi-3-b.dtb \
bcm2837-rpi-3-b-plus.dtb \
bcm2837-rpi-cm3-io3.dtb \
bcm2711-rpi-4-b.dtb \
bcm2835-rpi-zero.dtb \
bcm2835-rpi-zero-w.dtb
dtb-$(CONFIG_ARCH_BCM_5301X) += \
@@ -1408,3 +1423,13 @@ dtb-$(CONFIG_ARCH_ASPEED) += \
aspeed-bmc-opp-zaius.dtb \
aspeed-bmc-portwell-neptune.dtb \
aspeed-bmc-quanta-q71l.dtb
targets += dtbs dtbs_install
targets += $(dtb-y)
subdir-y := overlays
# Enable fixups to support overlays on BCM2835 platforms
ifeq ($(CONFIG_ARCH_BCM2835),y)
DTC_FLAGS ?= -@
endif

View File

@@ -0,0 +1,124 @@
/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"
/ {
compatible = "raspberrypi,model-b-plus", "brcm,bcm2835";
model = "Raspberry Pi Model B+";
};
&gpio {
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>;
};
};
&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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 47 0>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "input";
gpios = <&gpio 35 0>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,127 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-smsc9512.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
/ {
compatible = "raspberrypi,model-b", "brcm,bcm2835";
model = "Raspberry Pi Model B";
};
&gpio {
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>;
};
};
&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;
};
__overrides__ {
i2c0 = <&i2c0>, "status";
};
};
&i2c2 {
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 16 1>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,114 @@
/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"
/ {
compatible = "raspberrypi,model-b", "brcm,bcm2835";
model = "Raspberry Pi Model B";
};
&gpio {
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>;
};
};
&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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 16 1>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,26 @@
// SPDX-License-Identifier: GPL-2.0
&uart0 {
bt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <3000000>;
shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
};
&uart1 {
minibt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <460800>;
shutdown-gpios = <&gpio 45 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
};
/ {
__overrides__ {
krnbt = <&bt>,"status";
krnbt_baudrate = <&bt>,"max-speed:0";
};
};

View File

@@ -0,0 +1,97 @@
/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";
};
&uart0 {
status = "okay";
};
&gpio {
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>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_HIGH>;
};

View File

@@ -0,0 +1,18 @@
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 47 0>;
};
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,163 @@
/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"
/ {
compatible = "raspberrypi,model-zero-w", "brcm,bcm2835";
model = "Raspberry Pi Zero W";
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
};
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
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;
};
audio_pins: audio_pins {
brcm,pins = <>;
brcm,function = <>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "actpwr";
gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,117 @@
/dts-v1/;
#include "bcm2708.dtsi"
#include "bcm2708-rpi.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_28.dtsi"
/ {
compatible = "raspberrypi,model-zero", "brcm,bcm2835";
model = "Raspberry Pi Zero";
chosen {
bootargs = "coherent_pool=1M snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
};
};
&gpio {
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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "actpwr";
gpios = <&gpio 47 GPIO_ACTIVE_LOW>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,36 @@
/* Downstream modifications common to bcm2835, bcm2836, bcm2837 */
#include "bcm2835-rpi.dtsi"
#include "bcm270x-rpi.dtsi"
/ {
memory@0 {
device_type = "memory";
reg = <0x0 0x0>;
};
aliases {
i2c2 = &i2c2;
};
__overrides__ {
i2c2_iknowwhatimdoing = <&i2c2>,"status";
i2c2_baudrate = <&i2c2>,"clock-frequency:0";
sd_poll_once = <&sdhost>,"non-removable?";
};
};
&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,12 @@
#include "bcm2835.dtsi"
#include "bcm270x.dtsi"
/ {
__overrides__ {
arm_freq;
};
};
&vc4 {
status = "disabled";
};

View File

@@ -0,0 +1,124 @@
/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"
/ {
compatible = "raspberrypi,2-model-b", "brcm,bcm2836";
model = "Raspberry Pi 2 Model B";
};
&gpio {
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>;
};
};
&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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 47 0>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "input";
gpios = <&gpio 35 0>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,5 @@
#include "bcm2708-rpi.dtsi"
&vchiq {
compatible = "brcm,bcm2836-vchiq", "brcm,bcm2835-vchiq";
};

View File

@@ -0,0 +1,22 @@
#include "bcm2836.dtsi"
#include "bcm270x.dtsi"
/ {
soc {
ranges = <0x7e000000 0x3f000000 0x01000000>,
<0x40000000 0x40000000 0x00040000>;
/delete-node/ timer@7e003000;
};
__overrides__ {
arm_freq = <&v7_cpu0>, "clock-frequency:0",
<&v7_cpu1>, "clock-frequency:0",
<&v7_cpu2>, "clock-frequency:0",
<&v7_cpu3>, "clock-frequency:0";
};
};
&vc4 {
status = "disabled";
};

View File

@@ -0,0 +1,154 @@
/* Downstream modifications to bcm2835-rpi.dtsi */
/ {
aliases {
audio = &audio;
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;
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";
};
leds: leds {
compatible = "gpio-leds";
};
soc {
gpiomem {
compatible = "brcm,bcm2835-gpiomem";
reg = <0x7e200000 0x1000>;
};
fb: fb {
compatible = "brcm,bcm2708-fb";
firmware = <&firmware>;
status = "okay";
};
vcsm: vcsm {
compatible = "raspberrypi,bcm2835-vcsm";
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";
i2c0_baudrate = <&i2c0if>,"clock-frequency:0";
i2c1_baudrate = <&i2c1>,"clock-frequency:0";
audio = <&audio>,"status";
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";
};
};
&uart0 {
skip-init;
};
&uart1 {
skip-init;
};
&txp {
status = "disabled";
};
&i2c0if {
status = "disabled";
};
&i2c0mux {
status = "disabled";
};
&i2c1 {
status = "disabled";
};
&clocks {
firmware = <&firmware>;
};
&sdhci {
pinctrl-names = "default";
pinctrl-0 = <&emmc_gpio48>;
bus-width = <4>;
};
&cpu_thermal {
/delete-node/ trips;
};
&vec {
status = "disabled";
};
&vchiq {
/* Onboard audio */
audio: bcm2835_audio {
compatible = "brcm,bcm2835-audio";
brcm,pwm-channels = <8>;
status = "disabled";
};
};

View File

@@ -0,0 +1,197 @@
/* Downstream bcm283x.dtsi diff */
#include <dt-bindings/power/raspberrypi-power.h>
/ {
chosen {
bootargs = "coherent_pool=1M snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
/delete-property/ stdout-path;
};
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/ sdhci@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";
};
csi0: csi@7e800000 {
compatible = "brcm,bcm2835-unicam";
reg = <0x7e800000 0x800>,
<0x7e802000 0x4>;
interrupts = <2 6>;
clocks = <&clocks BCM2835_CLOCK_CAM0>,
<&firmware_clocks 4>;
clock-names = "lp", "vpu";
power-domains = <&power RPI_POWER_DOMAIN_UNICAM0>;
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <1>;
status = "disabled";
};
csi1: csi@7e801000 {
compatible = "brcm,bcm2835-unicam";
reg = <0x7e801000 0x800>,
<0x7e802004 0x4>;
interrupts = <2 7>;
clocks = <&clocks BCM2835_CLOCK_CAM1>,
<&firmware_clocks 4>;
clock-names = "lp", "vpu";
power-domains = <&power RPI_POWER_DOMAIN_UNICAM1>;
#address-cells = <1>;
#size-cells = <0>;
#clock-cells = <1>;
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";
};
};
__overrides__ {
cam0-pwdn-ctrl;
cam0-pwdn;
cam0-led-ctrl;
cam0-led;
};
};
&gpio {
interrupts = <2 17>, <2 18>;
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>;
};
};
&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>;
};
&spi0 {
dmas = <&dma 6>, <&dma 7>;
dma-names = "tx", "rx";
};

View File

@@ -0,0 +1,124 @@
/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"
/ {
compatible = "raspberrypi,2-model-b-rev2", "brcm,bcm2837";
model = "Raspberry Pi 2 Model B rev 1.2";
};
&gpio {
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>;
};
};
&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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 47 0>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "input";
gpios = <&gpio 35 0>;
};
};
&hdmi {
hpd-gpios = <&gpio 46 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,196 @@
/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"
/ {
compatible = "raspberrypi,3-model-b-plus", "brcm,bcm2837";
model = "Raspberry Pi 3 Model B+";
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
};
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
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;
};
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
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";
};
&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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 29 0>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "default-on";
gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
};
};
&hdmi {
hpd-gpios = <&gpio 28 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
&eth_phy {
microchip,eee-enabled;
microchip,tx-lpi-timer = <600>; /* non-aggressive*/
microchip,downshift-after = <2>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"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,198 @@
/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"
/ {
compatible = "raspberrypi,3-model-b", "brcm,bcm2837";
model = "Raspberry Pi 3 Model B";
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
};
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc1 = &mmcnr;
};
};
&gpio {
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;
};
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
};
};
&mmcnr {
pinctrl-names = "default";
pinctrl-0 = <&sdio_pins>;
bus-width = <4>;
status = "okay";
};
&soc {
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
firmware = <&firmware>;
status = "okay";
};
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&virtgpio 0 0>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "input";
gpios = <&expgpio 7 0>;
};
};
&hdmi {
hpd-gpios = <&expgpio 4 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,133 @@
/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"
/ {
compatible = "raspberrypi,3-compute-module", "brcm,bcm2837";
model = "Raspberry Pi Compute Module 3";
};
&uart0 {
status = "okay";
};
&gpio {
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;
};
};
&soc {
virtgpio: virtgpio {
compatible = "brcm,bcm2835-virtgpio";
gpio-controller;
#gpio-cells = <2>;
firmware = <&firmware>;
status = "okay";
};
};
&firmware {
expgpio: expgpio {
compatible = "raspberrypi,firmware-gpio";
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>;
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&virtgpio 0 0>;
};
};
&hdmi {
hpd-gpios = <&expgpio 0 GPIO_ACTIVE_LOW>;
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
};
};

View File

@@ -0,0 +1,29 @@
#include "bcm2837.dtsi"
#include "bcm270x.dtsi"
/ {
compatible = "brcm,bcm2837", "brcm,bcm2836";
arm-pmu {
#ifdef RPI364
compatible = "arm,armv8-pmuv3", "arm,cortex-a7-pmu";
#else
compatible = "arm,cortex-a7-pmu";
#endif
};
soc {
/delete-node/ timer@7e003000;
};
__overrides__ {
arm_freq = <&cpu0>, "clock-frequency:0",
<&cpu1>, "clock-frequency:0",
<&cpu2>, "clock-frequency:0",
<&cpu3>, "clock-frequency:0";
};
};
&vc4 {
status = "disabled";
};

View File

@@ -2,7 +2,6 @@
/dts-v1/;
#include "bcm2711.dtsi"
#include "bcm2835-rpi.dtsi"
#include "bcm283x-rpi-usb-peripheral.dtsi"
#include <dt-bindings/reset/raspberrypi,firmware-reset.h>
@@ -95,7 +94,7 @@
"VDD_SD_IO_SEL",
"CAM_GPIO",
"SD_PWR_ON",
"";
"SD_OC_N";
status = "okay";
};
@@ -301,3 +300,306 @@
&vec {
status = "disabled";
};
// =============================================
// Downstream rpi- changes
#define BCM2711
#include "bcm270x.dtsi"
#include "bcm271x-rpi-bt.dtsi"
/ {
soc {
/delete-node/ pixelvalve@7e807000;
/delete-node/ hdmi@7e902000;
};
};
#include "bcm2711-rpi.dtsi"
#include "bcm283x-rpi-csi1-2lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
/ {
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
};
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc0 = &emmc2;
mmc1 = &mmcnr;
mmc2 = &sdhost;
/delete-property/ i2c2;
i2c3 = &i2c3;
i2c4 = &i2c4;
i2c5 = &i2c5;
i2c6 = &i2c6;
/delete-property/ intc;
};
/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 {
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>;
};
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;
};
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>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
/ {
__overrides__ {
/delete-property/ i2c2_baudrate;
/delete-property/ i2c2_iknowwhatimdoing;
};
};
// =============================================
// 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>;
};
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "default-on";
gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
};
};
&pwm1 {
status = "disabled";
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"linux,default-trigger";
eth_led0 = <&phy1>,"led-modes:0";
eth_led1 = <&phy1>,"led-modes:4";
sd_poll_once = <&emmc2>, "non-removable?";
spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
<&spi0>, "dmas:8=", <&dma40>;
};
};

View File

@@ -0,0 +1,609 @@
// SPDX-License-Identifier: GPL-2.0
/dts-v1/;
#include "bcm2711.dtsi"
#include "bcm2835-rpi.dtsi"
/ {
compatible = "raspberrypi,4-compute-module", "brcm,bcm2711";
model = "Raspberry Pi Compute Module 4";
chosen {
/* 8250 auxiliary UART instead of pl011 */
stdout-path = "serial1:115200n8";
};
/* Will be filled by the bootloader */
memory@0 {
device_type = "memory";
reg = <0 0 0>;
};
aliases {
emmc2bus = &emmc2bus;
ethernet0 = &genet;
pcie0 = &pcie0;
};
leds {
act {
gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
pwr {
label = "PWR";
gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
default-state = "keep";
linux,default-trigger = "default-on";
};
};
wifi_pwrseq: wifi-pwrseq {
compatible = "mmc-pwrseq-simple";
reset-gpios = <&expgpio 1 GPIO_ACTIVE_LOW>;
};
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>;
};
};
&ddc0 {
status = "okay";
};
&ddc1 {
status = "okay";
};
&firmware {
expgpio: gpio {
compatible = "raspberrypi,firmware-gpio";
gpio-controller;
#gpio-cells = <2>;
gpio-line-names = "BT_ON",
"WL_ON",
"PWR_LED_OFF",
"ANT1",
"VDD_SD_IO_SEL",
"CAM_GPIO",
"SD_PWR_ON",
"ANT2";
status = "okay";
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 {
clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 0>, <&clk_27MHz>;
clock-names = "hdmi", "bvb", "audio", "cec";
status = "okay";
};
&hdmi1 {
clocks = <&firmware_clocks 13>, <&firmware_clocks 14>, <&dvp 1>, <&clk_27MHz>;
clock-names = "hdmi", "bvb", "audio", "cec";
status = "okay";
};
&hvs {
clocks = <&firmware_clocks 4>;
};
&pixelvalve0 {
status = "okay";
};
&pixelvalve1 {
status = "okay";
};
&pixelvalve2 {
status = "okay";
};
&pixelvalve4 {
status = "okay";
};
&vc4 {
status = "okay";
};
&vec {
status = "disabled";
};
&pwm1 {
pinctrl-names = "default";
pinctrl-0 = <&pwm1_0_gpio40 &pwm1_1_gpio41>;
status = "okay";
};
/* SDHCI is used to control the SDIO for wireless */
&sdhci {
#address-cells = <1>;
#size-cells = <0>;
pinctrl-names = "default";
pinctrl-0 = <&emmc_gpio34>;
bus-width = <4>;
non-removable;
mmc-pwrseq = <&wifi_pwrseq>;
status = "okay";
brcmf: wifi@1 {
reg = <1>;
compatible = "brcm,bcm4329-fmac";
};
};
/* 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@1 {
/* No PHY interrupt */
reg = <0x1>;
};
};
/* uart0 communicates with the BT module */
&uart0 {
pinctrl-names = "default";
pinctrl-0 = <&uart0_ctsrts_gpio30 &uart0_gpio32>;
uart-has-rtscts;
status = "okay";
bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <2000000>;
shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
};
};
/* uart1 is mapped to the pin header */
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_gpio14>;
status = "okay";
};
&vchiq {
interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>;
};
// =============================================
// Downstream rpi- changes
#define BCM2711
#include "bcm270x.dtsi"
#include "bcm271x-rpi-bt.dtsi"
/ {
soc {
/delete-node/ pixelvalve@7e807000;
/delete-node/ hdmi@7e902000;
};
};
#include "bcm2711-rpi.dtsi"
#include "bcm283x-rpi-csi0-2lane.dtsi"
#include "bcm283x-rpi-csi1-4lane.dtsi"
#include "bcm283x-rpi-i2c0mux_0_44.dtsi"
/ {
chosen {
bootargs = "coherent_pool=1M 8250.nr_uarts=1 snd_bcm2835.enable_compat_alsa=0 snd_bcm2835.enable_hdmi=1 snd_bcm2835.enable_headphones=1";
};
aliases {
serial0 = &uart1;
serial1 = &uart0;
mmc0 = &emmc2;
mmc1 = &mmcnr;
mmc2 = &sdhost;
/delete-property/ i2c2;
i2c3 = &i2c3;
i2c4 = &i2c4;
i2c5 = &i2c5;
i2c6 = &i2c6;
/delete-property/ intc;
};
/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 {
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>;
};
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;
};
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>;
};
};
&i2c0if {
clock-frequency = <100000>;
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_pins>;
clock-frequency = <100000>;
};
&i2s {
pinctrl-names = "default";
pinctrl-0 = <&i2s_pins>;
};
/ {
__overrides__ {
/delete-property/ i2c2_baudrate;
/delete-property/ i2c2_iknowwhatimdoing;
};
};
// =============================================
// Board specific stuff here
&pcie0 {
brcm,enable-l1ss;
};
&sdhost {
status = "disabled";
};
&phy1 {
led-modes = <0x00 0x08>; /* link/activity link */
};
&gpio {
audio_pins: audio_pins {
brcm,pins = <40 41>;
brcm,function = <4>;
};
};
&leds {
act_led: act {
label = "led0";
linux,default-trigger = "mmc0";
gpios = <&gpio 42 GPIO_ACTIVE_HIGH>;
};
pwr_led: pwr {
label = "led1";
linux,default-trigger = "default-on";
gpios = <&expgpio 2 GPIO_ACTIVE_LOW>;
};
};
&pwm1 {
status = "disabled";
};
&audio {
pinctrl-names = "default";
pinctrl-0 = <&audio_pins>;
};
/ {
__overrides__ {
act_led_gpio = <&act_led>,"gpios:4";
act_led_activelow = <&act_led>,"gpios:8";
act_led_trigger = <&act_led>,"linux,default-trigger";
pwr_led_gpio = <&pwr_led>,"gpios:4";
pwr_led_activelow = <&pwr_led>,"gpios:8";
pwr_led_trigger = <&pwr_led>,"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";
sd_poll_once = <&emmc2>, "non-removable?";
spi_dma4 = <&spi0>, "dmas:0=", <&dma40>,
<&spi0>, "dmas:8=", <&dma40>;
};
};

View File

@@ -0,0 +1,201 @@
// SPDX-License-Identifier: GPL-2.0
#include "bcm270x-rpi.dtsi"
/ {
__overrides__ {
arm_freq;
};
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";
};
};
scb: scb {
/* Add a label */
};
};
&cma {
/* Limit cma to the lower 768MB to allow room for HIGHMEM on 32-bit */
alloc-ranges = <0x0 0x00000000 0x30000000>;
};
&scb {
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 = <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-decoder@7eb00000 {
compatible = "raspberrypi,rpivid-hevc-decoder";
reg = <0x0 0x7eb00000 0x0 0x10000>;
status = "okay";
};
rpivid-local-intc@7eb10000 {
compatible = "raspberrypi,rpivid-local-intc";
reg = <0x0 0x7eb10000 0x0 0x1000>;
status = "okay";
interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>;
};
h264-decoder@7eb20000 {
compatible = "raspberrypi,rpivid-h264-decoder";
reg = <0x0 0x7eb20000 0x0 0x10000>;
status = "okay";
};
vp9-decoder@7eb30000 {
compatible = "raspberrypi,rpivid-vp9-decoder";
reg = <0x0 0x7eb30000 0x0 0x10000>;
status = "okay";
};
};
&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>;
};
&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>;
};
&emmc2 {
mmc-ddr-3_3v;
};
&vc4 {
status = "disabled";
};
&pixelvalve0 {
status = "disabled";
};
&pixelvalve1 {
status = "disabled";
};
&pixelvalve2 {
status = "disabled";
};
&pixelvalve3 {
status = "disabled";
};
&pixelvalve4 {
status = "disabled";
};
&hdmi0 {
dmas = <&dma (10|(1<<27))>;
status = "disabled";
};
&ddc0 {
status = "disabled";
};
&hdmi1 {
dmas = <&dma (17|(1<<27))>;
status = "disabled";
};
&ddc1 {
status = "disabled";
};
&dvp {
status = "disabled";
};

View File

@@ -318,7 +318,8 @@
<0x7ef01f00 0x400>,
<0x7ef00200 0x80>,
<0x7ef04300 0x100>,
<0x7ef20000 0x100>;
<0x7ef20000 0x100>,
<0x7ef00100 0x30>;
reg-names = "hdmi",
"dvp",
"phy",
@@ -327,12 +328,18 @@
"metadata",
"csc",
"cec",
"hd";
"hd",
"intr2";
clocks = <&firmware_clocks 13>,
<&firmware_clocks 14>,
<&dvp 0>,
<&clk_27MHz>;
clock-names = "hdmi", "bvb", "audio", "cec";
resets = <&dvp 0>;
ddc = <&ddc0>;
dmas = <&dma 10>;
dma-names = "audio-rx";
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@@ -354,7 +361,8 @@
<0x7ef06f00 0x400>,
<0x7ef00280 0x80>,
<0x7ef09300 0x100>,
<0x7ef20000 0x100>;
<0x7ef20000 0x100>,
<0x7ef00100 0x30>;
reg-names = "hdmi",
"dvp",
"phy",
@@ -363,12 +371,18 @@
"metadata",
"csc",
"cec",
"hd";
"hd",
"intr2";
ddc = <&ddc1>;
clock-names = "hdmi", "bvb", "audio", "cec";
clocks = <&firmware_clocks 13>,
<&firmware_clocks 14>,
<&dvp 0>,
<&clk_27MHz>;
resets = <&dvp 1>;
dmas = <&dma 17>;
dma-names = "audio-rx";
interrupts = <GIC_SPI 96 IRQ_TYPE_LEVEL_HIGH>;
status = "disabled";
};
@@ -468,14 +482,14 @@
scb {
compatible = "simple-bus";
#address-cells = <2>;
#size-cells = <1>;
#size-cells = <2>;
ranges = <0x0 0x7c000000 0x0 0xfc000000 0x03800000>,
<0x6 0x00000000 0x6 0x00000000 0x40000000>;
ranges = <0x0 0x7c000000 0x0 0xfc000000 0x0 0x03800000>,
<0x6 0x00000000 0x6 0x00000000 0x0 0x40000000>;
pcie0: pcie@7d500000 {
compatible = "brcm,bcm2711-pcie";
reg = <0x0 0x7d500000 0x9310>;
reg = <0x0 0x7d500000 0x0 0x9310>;
device_type = "pci";
#address-cells = <3>;
#interrupt-cells = <1>;
@@ -503,7 +517,7 @@
genet: ethernet@7d580000 {
compatible = "brcm,bcm2711-genet-v5";
reg = <0x0 0x7d580000 0x10000>;
reg = <0x0 0x7d580000 0x0 0x10000>;
#address-cells = <0x1>;
#size-cells = <0x1>;
interrupts = <GIC_SPI 157 IRQ_TYPE_LEVEL_HIGH>,
@@ -1010,7 +1024,7 @@
alloc-ranges = <0x0 0x00000000 0x40000000>;
};
&i2c0 {
&i2c0if {
compatible = "brcm,bcm2711-i2c", "brcm,bcm2835-i2c";
interrupts = <GIC_SPI 117 IRQ_TYPE_LEVEL_HIGH>;
};

View File

@@ -0,0 +1,26 @@
// SPDX-License-Identifier: GPL-2.0
&uart0 {
bt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <3000000>;
shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
};
&uart1 {
minibt: bluetooth {
compatible = "brcm,bcm43438-bt";
max-speed = <460800>;
shutdown-gpios = <&expgpio 0 GPIO_ACTIVE_HIGH>;
status = "disabled";
};
};
/ {
__overrides__ {
krnbt = <&bt>,"status";
krnbt_baudrate = <&bt>,"max-speed:0";
};
};

View File

@@ -116,12 +116,14 @@
compatible = "brcm,bcm2835-hdmi";
reg = <0x7e902000 0x600>,
<0x7e808000 0x100>;
reg-names = "hdmi",
"hd";
interrupts = <2 8>, <2 9>;
ddc = <&i2c2>;
clocks = <&clocks BCM2835_PLLH_PIX>,
<&clocks BCM2835_CLOCK_HSM>;
clock-names = "pixel", "hdmi";
dmas = <&dma 17>;
dmas = <&dma (17|(1<<27))>;
dma-names = "audio-rx";
status = "disabled";
};

View File

@@ -126,3 +126,8 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 28&29 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -121,3 +121,10 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* i2c0 on camera/display connector is gpio 0&1. Not exposed on header.
* To avoid having to remap everything, map both ports to gpios 0&1
*/
&i2c0mux {
pinctrl-1 = <&i2c0_gpio0>;
};

View File

@@ -128,3 +128,8 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 28&29 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -121,3 +121,10 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* i2c0 on camera/display connector is gpio 0&1. Not exposed on header.
* To avoid having to remap everything, map both ports to gpios 0&1
*/
&i2c0mux {
pinctrl-1 = <&i2c0_gpio0>;
};

View File

@@ -116,3 +116,10 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* camera/display connector use BSC1 on GPIOS 2&3.
* To avoid having to remap everything, map both ports to gpios 0&1
*/
&i2c0mux {
pinctrl-1 = <&i2c0_gpio0>;
};

View File

@@ -95,3 +95,8 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* WHAT TO DO HERE? */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -149,3 +149,8 @@
pinctrl-0 = <&uart1_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 28&29 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -117,3 +117,8 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 28&29 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -19,6 +19,11 @@
mboxes = <&mailbox>;
dma-ranges;
firmware_clocks: clocks {
compatible = "raspberrypi,firmware-clocks";
#clock-cells = <1>;
};
};
power: power {
@@ -49,13 +54,17 @@
};
};
&i2c0 {
pinctrl-names = "default";
pinctrl-0 = <&i2c0_gpio0>;
&i2c0if {
status = "okay";
clock-frequency = <100000>;
};
&i2c0mux {
pinctrl-0 = <&i2c0_gpio0>;
/* pinctrl-1 varies based on platform */
status = "okay";
};
&i2c1 {
pinctrl-names = "default";
pinctrl-0 = <&i2c1_gpio2>;

View File

@@ -19,7 +19,7 @@
soc {
ranges = <0x7e000000 0x20000000 0x02000000>;
dma-ranges = <0x40000000 0x00000000 0x20000000>;
dma-ranges = <0x80000000 0x00000000 0x20000000>;
};
arm-pmu {

View File

@@ -128,3 +128,8 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 28&29 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

View File

@@ -178,3 +178,8 @@
pinctrl-0 = <&uart1_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 44&45 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio44>;
};

View File

@@ -181,3 +181,8 @@
pinctrl-0 = <&uart1_gpio14>;
status = "okay";
};
/* i2c on camera/display connector is gpio 44&45 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio44>;
};

View File

@@ -174,3 +174,8 @@
status = "okay";
bus-width = <4>;
};
/* i2c on camera/display connector is gpio 44&45 */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio44>;
};

View File

@@ -94,3 +94,8 @@
pinctrl-0 = <&uart0_gpio14>;
status = "okay";
};
/* WHAT TO DO HERE? */
&i2c0mux {
pinctrl-1 = <&i2c0_gpio28>;
};

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

@@ -1,7 +0,0 @@
// SPDX-License-Identifier: GPL-2.0
&usb {
dr_mode = "peripheral";
g-rx-fifo-size = <256>;
g-np-tx-fifo-size = <32>;
g-tx-fifo-size = <256 256 512 512 512 768 768>;
};

View File

@@ -334,7 +334,7 @@
status = "disabled";
};
i2c0: i2c@7e205000 {
i2c0if: i2c@7e205000 {
compatible = "brcm,bcm2835-i2c";
reg = <0x7e205000 0x200>;
interrupts = <2 21>;
@@ -344,6 +344,30 @@
status = "disabled";
};
i2c0mux: i2c0mux {
compatible = "i2c-mux-pinctrl";
#address-cells = <1>;
#size-cells = <0>;
i2c-parent = <&i2c0if>;
pinctrl-names = "i2c0", "i2c_csi_dsi";
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>;
};
};
dpi: dpi@7e208000 {
compatible = "brcm,bcm2835-dpi";
reg = <0x7e208000 0x8c>;

View File

@@ -0,0 +1,216 @@
# Overlays for the Raspberry Pi platform
dtb-$(CONFIG_ARCH_BCM2835) += overlay_map.dtb
dtbo-$(CONFIG_ARCH_BCM2835) += \
act-led.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-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 \
at86rf233.dtbo \
audioinjector-addons.dtbo \
audioinjector-isolated-soundcard.dtbo \
audioinjector-ultra.dtbo \
audioinjector-wm8731-audio.dtbo \
audiosense-pi.dtbo \
audremap.dtbo \
balena-fin.dtbo \
cma.dtbo \
dht11.dtbo \
dionaudio-loco.dtbo \
dionaudio-loco-v2.dtbo \
disable-bt.dtbo \
disable-wifi.dtbo \
dpi18.dtbo \
dpi24.dtbo \
draws.dtbo \
dwc-otg.dtbo \
dwc2.dtbo \
enc28j60.dtbo \
enc28j60-spi2.dtbo \
exc3000.dtbo \
fe-pi-audio.dtbo \
fsm-demo.dtbo \
ghost-amp.dtbo \
goodix.dtbo \
googlevoicehat-soundcard.dtbo \
gpio-fan.dtbo \
gpio-ir.dtbo \
gpio-ir-tx.dtbo \
gpio-key.dtbo \
gpio-no-bank0-irq.dtbo \
gpio-no-irq.dtbo \
gpio-poweroff.dtbo \
gpio-shutdown.dtbo \
hd44780-lcd.dtbo \
hdmi-backlight-hwhack-gpio.dtbo \
hifiberry-amp.dtbo \
hifiberry-dac.dtbo \
hifiberry-dacplus.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-gpio.dtbo \
i2c-mux.dtbo \
i2c-pwm-pca9685a.dtbo \
i2c-rtc.dtbo \
i2c-rtc-gpio.dtbo \
i2c-sensor.dtbo \
i2c0.dtbo \
i2c1.dtbo \
i2c3.dtbo \
i2c4.dtbo \
i2c5.dtbo \
i2c6.dtbo \
i2s-gpio28-31.dtbo \
ilitek251x.dtbo \
imx219.dtbo \
imx290.dtbo \
imx477.dtbo \
iqaudio-codec.dtbo \
iqaudio-dac.dtbo \
iqaudio-dacplus.dtbo \
iqaudio-digi-wm8804-audio.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-can0.dtbo \
mcp2515-can1.dtbo \
mcp3008.dtbo \
mcp3202.dtbo \
mcp342x.dtbo \
media-center.dtbo \
merus-amp.dtbo \
midi-uart0.dtbo \
midi-uart1.dtbo \
miniuart-bt.dtbo \
mmc.dtbo \
mpu6050.dtbo \
mz61581.dtbo \
ov5647.dtbo \
ov7251.dtbo \
ov9281.dtbo \
papirus.dtbo \
pca953x.dtbo \
pibell.dtbo \
pifacedigital.dtbo \
piglow.dtbo \
piscreen.dtbo \
piscreen2r.dtbo \
pisound.dtbo \
pitft22.dtbo \
pitft28-capacitive.dtbo \
pitft28-resistive.dtbo \
pitft35-resistive.dtbo \
pps-gpio.dtbo \
pwm.dtbo \
pwm-2chan.dtbo \
pwm-ir-tx.dtbo \
qca7000.dtbo \
rotary-encoder.dtbo \
rpi-backlight.dtbo \
rpi-cirrus-wm5102.dtbo \
rpi-dac.dtbo \
rpi-display.dtbo \
rpi-ft5406.dtbo \
rpi-poe.dtbo \
rpi-proto.dtbo \
rpi-sense.dtbo \
rpi-tv.dtbo \
rpivid-v4l2.dtbo \
rra-digidac1-wm8741-audio.dtbo \
sainsmart18.dtbo \
sc16is750-i2c.dtbo \
sc16is752-i2c.dtbo \
sc16is752-spi0.dtbo \
sc16is752-spi1.dtbo \
sdhost.dtbo \
sdio.dtbo \
sdtweak.dtbo \
sh1106-spi.dtbo \
smi.dtbo \
smi-dev.dtbo \
smi-nand.dtbo \
spi-gpio35-39.dtbo \
spi-gpio40-45.dtbo \
spi-rtc.dtbo \
spi0-1cs.dtbo \
spi0-2cs.dtbo \
spi1-1cs.dtbo \
spi1-2cs.dtbo \
spi1-3cs.dtbo \
spi2-1cs.dtbo \
spi2-2cs.dtbo \
spi2-3cs.dtbo \
spi3-1cs.dtbo \
spi3-2cs.dtbo \
spi4-1cs.dtbo \
spi4-2cs.dtbo \
spi5-1cs.dtbo \
spi5-2cs.dtbo \
spi6-1cs.dtbo \
spi6-2cs.dtbo \
ssd1306.dtbo \
ssd1306-spi.dtbo \
ssd1351-spi.dtbo \
superaudioboard.dtbo \
sx150x.dtbo \
tc358743.dtbo \
tc358743-audio.dtbo \
tinylcd35.dtbo \
tpm-slb9670.dtbo \
uart0.dtbo \
uart1.dtbo \
uart2.dtbo \
uart3.dtbo \
uart4.dtbo \
uart5.dtbo \
udrc.dtbo \
upstream.dtbo \
upstream-pi4.dtbo \
vc4-fkms-v3d.dtbo \
vc4-kms-kippah-7inch.dtbo \
vc4-kms-v3d.dtbo \
vc4-kms-v3d-pi4.dtbo \
vga666.dtbo \
w1-gpio.dtbo \
w1-gpio-pullup.dtbo \
w5500.dtbo \
wittypi.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,27 @@
/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 = <&act_led>;
frag0: __overlay__ {
gpios = <&gpio 0 0>;
};
};
__overrides__ {
gpio = <&frag0>,"gpios:4";
activelow = <&frag0>,"gpios:8";
};
};

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 = <&i2c>;
__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>;
__overlay__ {
status = "okay";
};
};
fragment@2 {
target = <&sound>;
__overlay__ {
compatible = "adi,adau1977-adc";
i2s-controller = <&i2s>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,52 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__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>;
};
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 {
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,103 @@
/*
* TI ADS1115 multi-channel ADC overlay
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2c_arm>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
ads1115: ads1115 {
compatible = "ti,ads1115";
status = "okay";
#address-cells = <1>;
#size-cells = <0>;
reg = <0x48>;
};
};
};
fragment@1 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_a: channel_a {
reg = <4>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@2 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_b: channel_b {
reg = <5>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@3 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_c: channel_c {
reg = <6>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
fragment@4 {
target = <&ads1115>;
__dormant__ {
#address-cells = <1>;
#size-cells = <0>;
channel_d: channel_d {
reg = <7>;
ti,gain = <1>;
ti,datarate = <7>;
};
};
};
__overrides__ {
addr = <&ads1115>,"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,89 @@
/*
* 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 0>;
/* 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>,"ti,swap-xy?";
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";
};
};

View File

@@ -0,0 +1,65 @@
// 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";
};
};
__overrides__ {
addr = <&adv728x>,"reg:0";
};
};

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>;
__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>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain = <&frag2>,"iqaudio,24db_digital_gain?";
};
};

View File

@@ -0,0 +1,59 @@
/*
* 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>;
};
};
};
fragment@1 {
target = <&i2s>;
__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>;
mute-gpios = <&gpio 6 1>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain = <&boss_dac>,"allo,24db_digital_gain?";
slave = <&boss_dac>,"allo,slave?";
};
};

View File

@@ -0,0 +1,44 @@
// Definitions for Allo DigiOne
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__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>;
status = "okay";
clock44-gpio = <&gpio 5 0>;
clock48-gpio = <&gpio 6 0>;
};
};
};

View File

@@ -0,0 +1,57 @@
/*
* Definitions for Allo Katana DAC boards
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__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-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>;
__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>;
status = "okay";
};
};
__overrides__ {
24db_digital_gain =
<&piano_dac>,"allo,24db_digital_gain?";
};
};

View File

@@ -0,0 +1,55 @@
// Definitions for Piano DAC
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__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>;
status = "okay";
};
allo_pcm5122_4d: pcm5122@4d {
#sound-dai-cells = <0>;
compatible = "ti,pcm5122";
reg = <0x4d>;
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>;
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,57 @@
// 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 = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
apds9960: apds@39 {
compatible = "avago,apds9960";
reg = <0x39>;
status = "okay";
};
};
};
fragment@3 {
target = <&i2c1>;
__overlay__ {
apds9960_irq: apds@39 {
#interrupt-cells=<2>;
interrupt-parent = <&gpio>;
interrupts = <4 1>;
};
};
};
__overrides__ {
gpiopin = <&apds9960_pins>,"brcm,pins:0",
<&apds9960_irq>,"interrupts:0";
noints = <0>,"!1!3";
};
};

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>;
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>;
__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,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>;
__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>;
codec = <&cs42448>;
status = "okay";
};
};
__overrides__ {
non-stop-clocks = <&snd>, "non-stop-clocks?";
};
};

View File

@@ -0,0 +1,55 @@
// Definitions for audioinjector.net audio isolated soundcard
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__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>;
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>;
__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>;
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>;
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>;
__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>;
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>;
__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>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,35 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&audio_pins>;
frag0: __overlay__ {
};
};
fragment@1 {
target = <&audio_pins>;
__overlay__ {
brcm,pins = < 12 13 >;
brcm,function = < 4 >; /* alt0 alt0 */
};
};
fragment@2 {
target = <&audio_pins>;
__dormant__ {
brcm,pins = < 18 19 >;
brcm,function = < 2 >; /* alt5 alt5 */
};
};
__overrides__ {
swap_lr = <&frag0>, "swap_lr?";
enable_jack = <&frag0>, "enable_jack?";
pins_12_13 = <0>,"+1-2";
pins_18_19 = <0>,"-1+2";
};
};

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_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,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,41 @@
/*
* Overlay for the DHT11/21/22 humidity/temperature sensor modules.
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
dht11: dht11@0 {
compatible = "dht11";
pinctrl-names = "default";
pinctrl-0 = <&dht11_pins>;
gpios = <&gpio 4 0>;
status = "okay";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
dht11_pins: dht11_pins@0 {
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";
};
};

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>;
__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>;
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>;
status = "okay";
};
};
fragment@1 {
target = <&i2s>;
__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,64 @@
/dts-v1/;
/plugin/;
/* Disable Bluetooth and restore UART0/ttyAMA0 over GPIOs 14 & 15.
To disable the systemd service that initialises the modem so it doesn't use
the UART:
sudo systemctl disable hciuart
*/
#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,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,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,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>;
__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>;
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>;
};
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";
};
};

View File

@@ -0,0 +1,14 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&usb>;
__overlay__ {
compatible = "brcm,bcm2708-usb";
status = "okay";
};
};
};

View File

@@ -0,0 +1,26 @@
/dts-v1/;
/plugin/;
/{
compatible = "brcm,bcm2835";
fragment@0 {
target = <&usb>;
#address-cells = <1>;
#size-cells = <1>;
dwc2_usb: __overlay__ {
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";
};
};
__overrides__ {
dr_mode = <&dwc2_usb>, "dr_mode";
g-np-tx-fifo-size = <&dwc2_usb>,"g-np-tx-fifo-size:0";
g-rx-fifo-size = <&dwc2_usb>,"g-rx-fifo-size:0";
};
};

View File

@@ -0,0 +1,53 @@
// Overlay for the Microchip ENC28J60 Ethernet Controller
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spi0>;
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
eth1: enc28j60@0{
compatible = "microchip,enc28j60";
reg = <0>; /* CE0 */
pinctrl-names = "default";
pinctrl-0 = <&eth1_pins>;
interrupt-parent = <&gpio>;
interrupts = <25 0x2>; /* falling edge */
spi-max-frequency = <12000000>;
status = "okay";
};
};
};
fragment@1 {
target = <&spidev0>;
__overlay__ {
status = "disabled";
};
};
fragment@2 {
target = <&gpio>;
__overlay__ {
eth1_pins: eth1_pins {
brcm,pins = <25>;
brcm,function = <0>; /* in */
brcm,pull = <0>; /* none */
};
};
};
__overrides__ {
int_pin = <&eth1>, "interrupts:0",
<&eth1_pins>, "brcm,pins:0";
speed = <&eth1>, "spi-max-frequency:0";
};
};

View File

@@ -0,0 +1,47 @@
// Overlay for the Microchip ENC28J60 Ethernet Controller - SPI2 Compute Module
// Interrupt pin: 39
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&spi2>;
__overlay__ {
/* needed to avoid dtc warning */
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
eth1: enc28j60@0{
compatible = "microchip,enc28j60";
reg = <0>; /* CE0 */
pinctrl-names = "default";
pinctrl-0 = <&eth1_pins>;
interrupt-parent = <&gpio>;
interrupts = <39 0x2>; /* falling edge */
spi-max-frequency = <12000000>;
status = "okay";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
eth1_pins: eth1_pins {
brcm,pins = <39>;
brcm,function = <0>; /* in */
brcm,pull = <0>; /* none */
};
};
};
__overrides__ {
int_pin = <&eth1>, "interrupts:0",
<&eth1_pins>, "brcm,pins:0";
speed = <&eth1>, "spi-max-frequency:0";
};
};

View File

@@ -0,0 +1,48 @@
// Device tree overlay for I2C connected EETI EXC3000 multiple touch controller
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&gpio>;
__overlay__ {
exc3000_pins: exc3000_pins {
brcm,pins = <4>; // interrupt
brcm,function = <0>; // in
brcm,pull = <2>; // pull-up
};
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
exc3000: exc3000@2a {
compatible = "eeti,exc3000";
reg = <0x2a>;
pinctrl-names = "default";
pinctrl-0 = <&exc3000_pins>;
interrupt-parent = <&gpio>;
interrupts = <4 8>; // active low level-sensitive
touchscreen-size-x = <4096>;
touchscreen-size-y = <4096>;
};
};
};
__overrides__ {
interrupt = <&exc3000_pins>,"brcm,pins:0",
<&exc3000>,"interrupts:0";
sizex = <&exc3000>,"touchscreen-size-x:0";
sizey = <&exc3000>,"touchscreen-size-y:0";
invx = <&exc3000>,"touchscreen-inverted-x?";
invy = <&exc3000>,"touchscreen-inverted-y?";
swapxy = <&exc3000>,"touchscreen-swapped-x-y?";
};
};

View File

@@ -0,0 +1,70 @@
// Definitions for Fe-Pi Audio
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
sgtl5000_mclk: sgtl5000_mclk {
compatible = "fixed-clock";
#clock-cells = <0>;
clock-frequency = <12288000>;
clock-output-names = "sgtl5000-mclk";
};
};
};
fragment@1 {
target = <&soc>;
__overlay__ {
reg_1v8: reg_1v8@0 {
compatible = "regulator-fixed";
regulator-name = "1V8";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
};
};
fragment@2 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
sgtl5000@0a {
#sound-dai-cells = <0>;
compatible = "fsl,sgtl5000";
reg = <0x0a>;
clocks = <&sgtl5000_mclk>;
micbias-resistor-k-ohms = <2>;
micbias-voltage-m-volts = <3000>;
VDDA-supply = <&vdd_3v3_reg>;
VDDIO-supply = <&vdd_3v3_reg>;
VDDD-supply = <&reg_1v8>;
status = "okay";
};
};
};
fragment@3 {
target = <&i2s>;
__overlay__ {
status = "okay";
};
};
fragment@4 {
target = <&sound>;
__overlay__ {
compatible = "fe-pi,fe-pi-audio";
i2s-controller = <&i2s>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,104 @@
// Demo overlay for the gpio-fsm driver
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio-fsm.h>
#define BUTTON1 GF_IP(0)
#define BUTTON2 GF_SW(0)
#define RED GF_OP(0) // GPIO7
#define AMBER GF_OP(1) // GPIO8
#define GREEN GF_OP(2) // GPIO25
/{
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
fsm_demo: fsm-demo {
compatible = "rpi,gpio-fsm";
debug = <0>;
gpio-controller;
#gpio-cells = <2>;
num-soft-gpios = <1>;
gpio-line-names = "button2";
input-gpios = <&gpio 6 1>; // BUTTON1 (active-low)
output-gpios = <&gpio 7 0>, // RED
<&gpio 8 0>, // AMBER
<&gpio 25 0>; // GREEN
shutdown-timeout-ms = <2000>;
start {
start_state;
set = <RED 1>, <AMBER 0>, <GREEN 0>;
start2 = <GF_DELAY 250>;
};
start2 {
set = <RED 0>, <AMBER 1>;
go = <GF_DELAY 250>;
};
go {
set = <RED 0>, <AMBER 0>, <GREEN 1>;
ready_wait = <BUTTON1 0>;
shutdown1 = <GF_SHUTDOWN 0>;
};
ready_wait {
// Clear the soft GPIO
set = <BUTTON2 0>;
ready = <GF_DELAY 1000>;
shutdown1 = <GF_SHUTDOWN 0>;
};
ready {
stopping = <BUTTON1 1>, <BUTTON2 1>;
shutdown1 = <GF_SHUTDOWN 0>;
};
stopping {
set = <GREEN 0>, <AMBER 1>;
stopped = <GF_DELAY 1000>;
};
stopped {
set = <AMBER 0>, <RED 1>;
get_set = <GF_DELAY 3000>;
shutdown1 = <GF_SHUTDOWN 0>;
};
get_set {
set = <AMBER 1>;
go = <GF_DELAY 1000>;
};
shutdown1 {
set = <RED 0>, <AMBER 0>, <GREEN 1>;
shutdown2 = <GF_SHUTDOWN 250>;
};
shutdown2 {
set = <AMBER 1>, <GREEN 0>;
shutdown3 = <GF_SHUTDOWN 250>;
};
shutdown3 {
set = <RED 1>, <AMBER 0>;
shutdown4 = <GF_SHUTDOWN 250>;
};
shutdown4 {
shutdown_state;
set = <RED 0>;
};
};
};
};
__overrides__ {
fsm_debug = <&fsm_demo>,"debug:0";
};
};

View File

@@ -0,0 +1,119 @@
// Overlay for the PCM5122-based Ghost amplifier using gpio-fsm
/dts-v1/;
/plugin/;
#include <dt-bindings/gpio/gpio-fsm.h>
#define ENABLE GF_SW(0)
#define FAULT GF_IP(0) // GPIO5
#define RELAY1 GF_OP(0) // GPIO22
#define RELAY2 GF_OP(1) // GPIO23
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__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>;
iqaudio_dac: __overlay__ {
compatible = "iqaudio,iqaudio-dac";
i2s-controller = <&i2s>;
mute-gpios = <&amp 0 0>;
iqaudio-dac,auto-mute-amp;
status = "okay";
};
};
fragment@3 {
target-path = "/";
__overlay__ {
amp: ghost-amp {
compatible = "rpi,gpio-fsm";
debug = <0>;
gpio-controller;
#gpio-cells = <2>;
num-soft-gpios = <1>;
gpio-line-names = "enable";
input-gpios = <&gpio 5 1>; // FAULT (active low)
output-gpios = <&gpio 22 0>, // RELAY1
<&gpio 23 0>; // RELAY2
shutdown-timeout-ms = <1000>;
amp_off {
start_state;
shutdown_state;
set = <RELAY2 0>,
<RELAY1 0>;
amp_on_1 = <ENABLE 1>;
fault = <FAULT 1>;
};
amp_on_1 {
set = <RELAY1 1>;
amp_on = <GF_DELAY 1500>;
amp_off = <ENABLE 0>;
fault = <FAULT 1>;
};
amp_on {
set = <RELAY2 1>;
amp_off_wait = <ENABLE 0>;
fault = <FAULT 1>;
};
amp_off_wait {
amp_off_1 = <GF_DELAY (30*60*1000)>,
<GF_SHUTDOWN 0>;
amp_on = <ENABLE 1>;
fault = <FAULT 1>;
};
amp_off_1 {
set = <RELAY2 0>;
amp_on = <ENABLE 1>;
amp_off = <GF_DELAY 100>;
fault = <FAULT 1>;
};
// Keep this a distinct state to prevent
// changes and for the diagnostic output
fault {
set = <RELAY2 0>,
<RELAY1 0>;
shutdown_state;
};
};
};
};
__overrides__ {
fsm_debug = <&amp>,"debug:0";
};
};

View File

@@ -0,0 +1,46 @@
// Device tree overlay for I2C connected Goodix gt9271 multiple touch controller
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&gpio>;
__overlay__ {
goodix_pins: goodix_pins {
brcm,pins = <4 17>; // interrupt and reset
brcm,function = <0 0>; // in
brcm,pull = <2 2>; // pull-up
};
};
};
fragment@1 {
target = <&i2c1>;
__overlay__ {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
gt9271: gt9271@14 {
compatible = "goodix,gt9271";
reg = <0x14>;
pinctrl-names = "default";
pinctrl-0 = <&goodix_pins>;
interrupt-parent = <&gpio>;
interrupts = <4 2>; // high-to-low edge triggered
irq-gpios = <&gpio 4 0>; // Pin7 on GPIO header
reset-gpios = <&gpio 17 1>; // Pin11 on GPIO header
};
};
};
__overrides__ {
interrupt = <&goodix_pins>,"brcm,pins:0",
<&gt9271>,"interrupts:0",
<&gt9271>,"irq-gpios:4";
reset = <&goodix_pins>,"brcm,pins:4",
<&gt9271>,"reset-gpios:4";
};
};

View File

@@ -0,0 +1,49 @@
// Definitions for Google voiceHAT v1 soundcard overlay
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&i2s>;
__overlay__ {
status = "okay";
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
googlevoicehat_pins: googlevoicehat_pins {
brcm,pins = <16>;
brcm,function = <1>; /* out */
brcm,pull = <0>; /* up */
};
};
};
fragment@2 {
target-path = "/";
__overlay__ {
voicehat-codec {
#sound-dai-cells = <0>;
compatible = "google,voicehat";
pinctrl-names = "default";
pinctrl-0 = <&googlevoicehat_pins>;
sdmode-gpios= <&gpio 16 0>;
status = "okay";
};
};
};
fragment@3 {
target = <&sound>;
__overlay__ {
compatible = "googlevoicehat,googlevoicehat-soundcard";
i2s-controller = <&i2s>;
status = "okay";
};
};
};

View File

@@ -0,0 +1,79 @@
/*
* Overlay for the Raspberry Pi GPIO Fan @ BCM GPIO12.
* References:
* - https://www.raspberrypi.org/forums/viewtopic.php?f=107&p=1367135#p1365084
*
* Optional parameters:
* - "gpiopin" - BCM number of the pin driving the fan, default 12 (GPIO12);
* - "temp" - CPU temperature at which fan is started in millicelsius, default 55000;
*
* Requires:
* - kernel configurations: CONFIG_SENSORS_GPIO_FAN=m;
* - kernel rebuild;
* - N-MOSFET connected to gpiopin, 2N7002-[https://en.wikipedia.org/wiki/2N7000];
* - DC Fan connected to N-MOSFET Drain terminal, a 12V fan is working fine and quite silently;
* [https://www.tme.eu/en/details/ee40101s1-999-a/dc12v-fans/sunon/ee40101s1-1000u-999/]
*
* ┌─────────────────────┐
* │Fan negative terminal│
* └┬────────────────────┘
* │D
* G │──┘
* [GPIO12]──────┤ │<─┐ 2N7002
* │──┤
* │S
* ─┴─
* GND
*
* Build:
* - `sudo dtc -W no-unit_address_vs_reg -@ -I dts -O dtb -o /boot/overlays/gpio-fan.dtbo gpio-fan-overlay.dts`
* Activate:
* - sudo nano /boot/config.txt add "dtoverlay=gpio-fan" or "dtoverlay=gpio-fan,gpiopin=12,temp=45000"
* or
* - sudo sh -c 'printf "\n# Enable PI GPIO-Fan Default\ndtoverlay=gpio-fan\n" >> /boot/config.txt'
* - sudo sh -c 'printf "\n# Enable PI GPIO-Fan Custom\ndtoverlay=gpio-fan,gpiopin=12,temp=45000\n" >> /boot/config.txt'
*
*/
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
fan0: gpio-fan@0 {
compatible = "gpio-fan";
gpios = <&gpio 12 0>;
gpio-fan,speed-map = <0 0>,
<5000 1>;
#cooling-cells = <2>;
};
};
};
fragment@1 {
target = <&cpu_thermal>;
polling-delay = <2000>; /* milliseconds */
__overlay__ {
trips {
cpu_hot: trip-point@0 {
temperature = <55000>; /* (millicelsius) Fan started at 55°C */
hysteresis = <10000>; /* (millicelsius) Fan stopped at 45°C */
type = "active";
};
};
cooling-maps {
map0 {
trip = <&cpu_hot>;
cooling-device = <&fan0 1 1>;
};
};
};
};
__overrides__ {
gpiopin = <&fan0>,"gpios:4", <&fan0>,"brcm,pins:0";
temp = <&cpu_hot>,"temperature:0";
};
};

View File

@@ -0,0 +1,49 @@
// Definitions for ir-gpio module
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target-path = "/";
__overlay__ {
gpio_ir: ir-receiver@12 {
compatible = "gpio-ir-receiver";
pinctrl-names = "default";
pinctrl-0 = <&gpio_ir_pins>;
// pin number, high or low
gpios = <&gpio 18 1>;
// parameter for keymap name
linux,rc-map-name = "rc-rc6-mce";
status = "okay";
};
};
};
fragment@1 {
target = <&gpio>;
__overlay__ {
gpio_ir_pins: gpio_ir_pins@12 {
brcm,pins = <18>; // pin 18
brcm,function = <0>; // in
brcm,pull = <2>; // up
};
};
};
__overrides__ {
// parameters
gpio_pin = <&gpio_ir>,"gpios:4", // pin number
<&gpio_ir>,"reg:0",
<&gpio_ir_pins>,"brcm,pins:0",
<&gpio_ir_pins>,"reg:0";
gpio_pull = <&gpio_ir_pins>,"brcm,pull:0"; // pull-up/down state
invert = <&gpio_ir>,"gpios:8"; // 0 = active high input
rc-map-name = <&gpio_ir>,"linux,rc-map-name"; // default rc map
};
};

View File

@@ -0,0 +1,36 @@
/dts-v1/;
/plugin/;
/ {
compatible = "brcm,bcm2835";
fragment@0 {
target = <&gpio>;
__overlay__ {
gpio_ir_tx_pins: gpio_ir_tx_pins@12 {
brcm,pins = <18>;
brcm,function = <1>; // out
};
};
};
fragment@1 {
target-path = "/";
__overlay__ {
gpio_ir_tx: gpio-ir-transmitter@12 {
compatible = "gpio-ir-tx";
pinctrl-names = "default";
pinctrl-0 = <&gpio_ir_tx_pins>;
gpios = <&gpio 18 0>;
};
};
};
__overrides__ {
gpio_pin = <&gpio_ir_tx>, "gpios:4", // pin number
<&gpio_ir_tx>, "reg:0",
<&gpio_ir_tx_pins>, "brcm,pins:0",
<&gpio_ir_tx_pins>, "reg:0";
invert = <&gpio_ir_tx>, "gpios:8"; // 1 = active low
};
};

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