diff --git a/arch/arm/boot/dts/overlay/Makefile b/arch/arm/boot/dts/overlay/Makefile new file mode 100644 index 00000000..be4f2595 --- /dev/null +++ b/arch/arm/boot/dts/overlay/Makefile @@ -0,0 +1,28 @@ +ifeq ($(CONFIG_OF_CONFIGFS),y) + +dtbo-$(CONFIG_MACH_SUN7I) += \ + sun7i-a20-analog-codec.dtbo \ + sun7i-a20-can.dtbo \ + sun7i-a20-i2c1.dtbo \ + sun7i-a20-i2c2.dtbo \ + sun7i-a20-i2c3.dtbo \ + sun7i-a20-nand.dtbo \ + sun7i-a20-spdif-out.dtbo \ + sun7i-a20-spi0-cs0-spidev.dtbo \ + sun7i-a20-spi0-cs1-spidev.dtbo \ + sun7i-a20-spi1-a-spidev.dtbo \ + sun7i-a20-spi1-b-spidev.dtbo \ + sun7i-a20-spi2-a-spidev.dtbo \ + sun7i-a20-spi2-b-spidev.dtbo \ + sun7i-a20-uart1.dtbo \ + sun7i-a20-uart2.dtbo \ + sun7i-a20-uart3.dtbo \ + sun7i-a20-w1.dtbo + +targets += dtbs dtbs_install +targets += $(dtbo-y) + +endif + +always := $(dtbo-y) +clean-files := *.dtbo diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-analog-codec.dts b/arch/arm/boot/dts/overlay/sun7i-a20-analog-codec.dts new file mode 100644 index 00000000..74bb13d0 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-analog-codec.dts @@ -0,0 +1,12 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target = <&codec>; + __overlay__ { + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-can.dts b/arch/arm/boot/dts/overlay/sun7i-a20-can.dts new file mode 100644 index 00000000..4d2b33af --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-can.dts @@ -0,0 +1,34 @@ +/dts-v1/ /plugin/; + +#include + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target = <&pio>; + __overlay__ { + can0_pins_a: can0@0 { + allwinner,pins = "PH20", "PH21"; + allwinner,function = "can"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + }; + }; + + fragment@1 { + target-path = "/soc@01c00000"; + __overlay__ { + can0: can@01c2bc00 { + compatible = "allwinner,sun4i-a10-can"; + reg = <0x01c2bc00 0x400>; + interrupts = ; + clocks = <&apb1_gates 4>; + pinctrl-names = "default"; + pinctrl-0 = <&can0_pins_a>; + status = "okay"; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-i2c1.dts b/arch/arm/boot/dts/overlay/sun7i-a20-i2c1.dts new file mode 100644 index 00000000..1a5dc776 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-i2c1.dts @@ -0,0 +1,21 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the i2c1 controller node */ + i2c1 = "/soc@01c00000/i2c@01c2b000"; + }; + }; + fragment@1 { + target = <&i2c1>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&i2c1_pins_a>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-i2c2.dts b/arch/arm/boot/dts/overlay/sun7i-a20-i2c2.dts new file mode 100644 index 00000000..3f94c827 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-i2c2.dts @@ -0,0 +1,21 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the i2c2 controller node */ + i2c2 = "/soc@01c00000/i2c@01c2b400"; + }; + }; + fragment@1 { + target = <&i2c2>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&i2c2_pins_a>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-i2c3.dts b/arch/arm/boot/dts/overlay/sun7i-a20-i2c3.dts new file mode 100644 index 00000000..0236b5ae --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-i2c3.dts @@ -0,0 +1,21 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the i2c3 controller node */ + i2c3 = "/soc@01c00000/i2c@01c2b800"; + }; + }; + fragment@1 { + target = <&i2c3>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&i2c3_pins_a>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-nand.dts b/arch/arm/boot/dts/overlay/sun7i-a20-nand.dts new file mode 100644 index 00000000..fa778acc --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-nand.dts @@ -0,0 +1,116 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target = <&pio>; + __overlay__ { + nand_pins_a: nand_base0@0 { + allwinner,pins = "PC0", "PC1", "PC2", + "PC5", "PC8", "PC9", "PC10", + "PC11", "PC12", "PC13", "PC14", + "PC15", "PC16"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + + nand_cs0_pins_a: nand_cs@0 { + allwinner,pins = "PC4"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + + nand_cs1_pins_a: nand_cs@1 { + allwinner,pins = "PC3"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + + nand_cs2_pins_a: nand_cs@2 { + allwinner,pins = "PC17"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + + nand_cs3_pins_a: nand_cs@3 { + allwinner,pins = "PC18"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + + nand_rb0_pins_a: nand_rb@0 { + allwinner,pins = "PC6"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + + nand_rb1_pins_a: nand_rb@1 { + allwinner,pins = "PC7"; + allwinner,function = "nand0"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + }; + }; + + fragment@1 { + target = <&nfc>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&nand_pins_a>, <&nand_cs0_pins_a>, <&nand_rb0_pins_a>; + status = "okay"; + + nand@0 { + reg = <0>; + allwinner,rb = <0>; + nand-ecc-mode = "hw"; + nand-on-flash-bbt; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <2>; + #size-cells = <2>; + + partition@0 { + label = "SPL"; + reg = <0x0 0x0 0x0 0x400000>; + }; + + partition@400000 { + label = "SPL.backup"; + reg = <0x0 0x400000 0x0 0x400000>; + }; + + partition@800000 { + label = "U-Boot"; + reg = <0x0 0x800000 0x0 0x400000>; + }; + + partition@c00000 { + label = "U-Boot.backup"; + reg = <0x0 0xc00000 0x0 0x400000>; + }; + + partition@1000000 { + label = "env"; + reg = <0x0 0x1000000 0x0 0x400000>; + }; + + partition@1400000 { + label = "rootfs"; + reg = <0x0 0xa00000 0x01 0xff000000>; + }; + }; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spdif-out.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spdif-out.dts new file mode 100644 index 00000000..0463f43c --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spdif-out.dts @@ -0,0 +1,37 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target = <&spdif>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&spdif_tx_pins_a>; + status = "okay"; + }; + }; + + fragment@1 { + target-path = "/"; + __overlay__ { + sound { + compatible = "simple-audio-card"; + simple-audio-card,name = "On-board SPDIF"; + + simple-audio-card,cpu { + sound-dai = <&spdif>; + }; + + simple-audio-card,codec { + sound-dai = <&spdif_out>; + }; + + spdif_out: spdif-out { + #sound-dai-cells = <0>; + compatible = "linux,spdif-dit"; + }; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spi0-cs0-spidev.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spi0-cs0-spidev.dts new file mode 100644 index 00000000..926d6325 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spi0-cs0-spidev.dts @@ -0,0 +1,29 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the SPI controller nodes */ + spi0 = "/soc@01c00000/spi@01c05000"; + }; + }; + fragment@1 { + target = <&spi0>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + /* "PI11" "PI12" "PI13", "PI10" */ + pinctrl-0 = <&spi0_pins_a>, <&spi0_cs0_pins_a>; + status = "okay"; + spidev@0 { + compatible = "spidev"; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spi0-cs1-spidev.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spi0-cs1-spidev.dts new file mode 100644 index 00000000..4258672a --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spi0-cs1-spidev.dts @@ -0,0 +1,29 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the SPI controller nodes */ + spi0 = "/soc@01c00000/spi@01c05000"; + }; + }; + fragment@1 { + target = <&spi0>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + /* "PI11" "PI12" "PI13", "PI14" */ + pinctrl-0 = <&spi0_pins_a>, <&spi0_cs1_pins_a>; + status = "okay"; + spidev@1 { + compatible = "spidev"; + reg = <1>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spi1-a-spidev.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spi1-a-spidev.dts new file mode 100644 index 00000000..9034b747 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spi1-a-spidev.dts @@ -0,0 +1,29 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the SPI controller nodes */ + spi0 = "/soc@01c00000/spi@01c05000"; + }; + }; + fragment@1 { + target = <&spi0>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&spi2_pins_a>, <&spi2_cs0_pins_a>; + + status = "okay"; + spidev@0 { + compatible = "spidev"; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spi1-b-spidev.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spi1-b-spidev.dts new file mode 100644 index 00000000..a49ca8a3 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spi1-b-spidev.dts @@ -0,0 +1,29 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the SPI controller nodes */ + spi2 = "/soc@01c00000/spi@01c05000"; + }; + }; + fragment@1 { + target = <&spi2>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + /* "PB15" "PB16" "PB17", "PB14" */ + pinctrl-0 = <&spi2_pins_b>, <&spi2_cs0_pins_b>; + status = "okay"; + spidev@0 { + compatible = "spidev"; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spi2-a-spidev.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spi2-a-spidev.dts new file mode 100644 index 00000000..9034b747 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spi2-a-spidev.dts @@ -0,0 +1,29 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the SPI controller nodes */ + spi0 = "/soc@01c00000/spi@01c05000"; + }; + }; + fragment@1 { + target = <&spi0>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + pinctrl-0 = <&spi2_pins_a>, <&spi2_cs0_pins_a>; + + status = "okay"; + spidev@0 { + compatible = "spidev"; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-spi2-b-spidev.dts b/arch/arm/boot/dts/overlay/sun7i-a20-spi2-b-spidev.dts new file mode 100644 index 00000000..a49ca8a3 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-spi2-b-spidev.dts @@ -0,0 +1,29 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + /* Path to the SPI controller nodes */ + spi2 = "/soc@01c00000/spi@01c05000"; + }; + }; + fragment@1 { + target = <&spi2>; + __overlay__ { + #address-cells = <1>; + #size-cells = <0>; + pinctrl-names = "default"; + /* "PB15" "PB16" "PB17", "PB14" */ + pinctrl-0 = <&spi2_pins_b>, <&spi2_cs0_pins_b>; + status = "okay"; + spidev@0 { + compatible = "spidev"; + reg = <0>; + spi-max-frequency = <1000000>; + }; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-uart1.dts b/arch/arm/boot/dts/overlay/sun7i-a20-uart1.dts new file mode 100644 index 00000000..4fd6eede --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-uart1.dts @@ -0,0 +1,20 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + uart1 = "/soc@01c00000/serial@01c28400"; + }; + }; + fragment@1 { + target = <&uart1>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&uart1_pins>, <&uart1_rts_cts_pins>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-uart2.dts b/arch/arm/boot/dts/overlay/sun7i-a20-uart2.dts new file mode 100644 index 00000000..56774b07 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-uart2.dts @@ -0,0 +1,20 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + uart2 = "/soc@01c00000/serial@01c28800"; + }; + }; + fragment@1 { + target = <&uart2>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&uart2_pins>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-uart3.dts b/arch/arm/boot/dts/overlay/sun7i-a20-uart3.dts new file mode 100644 index 00000000..b34cf534 --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-uart3.dts @@ -0,0 +1,20 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/aliases"; + __overlay__ { + uart3 = "/soc@01c00000/serial@01c28c00"; + }; + }; + fragment@1 { + target = <&uart3>; + __overlay__ { + pinctrl-names = "default"; + pinctrl-0 = <&uart3_pins>; + status = "okay"; + }; + }; +}; diff --git a/arch/arm/boot/dts/overlay/sun7i-a20-w1.dts b/arch/arm/boot/dts/overlay/sun7i-a20-w1.dts new file mode 100644 index 00000000..0b28406a --- /dev/null +++ b/arch/arm/boot/dts/overlay/sun7i-a20-w1.dts @@ -0,0 +1,31 @@ +/dts-v1/ /plugin/; + +/ { + compatible = "allwinner,sun7i-a20"; + + fragment@0 { + target-path = "/"; + __overlay__ { + + w1: onewire@0 { + compatible = "w1-gpio"; + pinctrl-names = "default"; + pinctrl-0 = <&w1_pins>; + gpios = <&pio 3 14 0>; /* PD14 */ + status = "okay"; + }; + }; + }; + + fragment@1 { + target = <&pio>; + __overlay__ { + w1_pins: w1_pins@0 { + allwinner,pins = "PD14"; + allwinner,function = "gpio_in"; + allwinner,drive = <0>; + allwinner,pull = <0>; + }; + }; + }; +};