mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-23 15:32:33 +00:00
274 lines
6.3 KiB
Diff
274 lines
6.3 KiB
Diff
|
From 17159731ae064a70031d746284855b7d30f17407 Mon Sep 17 00:00:00 2001
|
||
|
From: Ed Spiridonov <edo.rus@gmail.com>
|
||
|
Date: Tue, 10 Dec 2019 22:45:04 +0300
|
||
|
Subject: [PATCH] Add universal device tree overlay for SPI devices
|
||
|
|
||
|
Just specify the SPI address and device name ("compatible" property).
|
||
|
This overlay lacks any device-specific parameter support!
|
||
|
(some of them could be added later)
|
||
|
|
||
|
Examples:
|
||
|
1. SPI NOR flash on spi0.1, maximum SPI clock frequency 45MHz:
|
||
|
dtoverlay=anyspi:spi0-1,dev="jedec,spi-nor",speed=45000000
|
||
|
2. MCP3204 ADC on spi1.2, maximum SPI clock frequency 500kHz:
|
||
|
dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"
|
||
|
|
||
|
Signed-off-by: Ed Spiridonov <edo.rus@gmail.com>
|
||
|
---
|
||
|
arch/arm/boot/dts/overlays/Makefile | 1 +
|
||
|
arch/arm/boot/dts/overlays/README | 23 ++
|
||
|
arch/arm/boot/dts/overlays/anyspi-overlay.dts | 205 ++++++++++++++++++
|
||
|
3 files changed, 229 insertions(+)
|
||
|
create mode 100755 arch/arm/boot/dts/overlays/anyspi-overlay.dts
|
||
|
|
||
|
--- a/arch/arm/boot/dts/overlays/Makefile
|
||
|
+++ b/arch/arm/boot/dts/overlays/Makefile
|
||
|
@@ -15,6 +15,7 @@ dtbo-$(CONFIG_ARCH_BCM2835) += \
|
||
|
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 \
|
||
|
--- a/arch/arm/boot/dts/overlays/README
|
||
|
+++ b/arch/arm/boot/dts/overlays/README
|
||
|
@@ -441,6 +441,29 @@ Params: 24db_digital_gain Allow ga
|
||
|
better voice quality. (default Off)
|
||
|
|
||
|
|
||
|
+Name: anyspi
|
||
|
+Info: Universal device tree overlay for SPI devices
|
||
|
+
|
||
|
+ Just specify the SPI address and device name ("compatible" property).
|
||
|
+ This overlay lacks any device-specific parameter support!
|
||
|
+
|
||
|
+ For devices on spi1 or spi2, the interfaces should be enabled
|
||
|
+ with one of the spi1-1/2/3cs and/or spi2-1/2/3cs overlays.
|
||
|
+
|
||
|
+ Examples:
|
||
|
+ 1. SPI NOR flash on spi0.1, maximum SPI clock frequency 45MHz:
|
||
|
+ dtoverlay=anyspi:spi0-1,dev="jedec,spi-nor",speed=45000000
|
||
|
+ 2. MCP3204 ADC on spi1.2, maximum SPI clock frequency 500kHz:
|
||
|
+ dtoverlay=anyspi:spi1-2,dev="microchip,mcp3204"
|
||
|
+Load: dtoverlay=anyspi,<param>=<val>
|
||
|
+Params: spi<n>-<m> Configure device at spi<n>, cs<m>
|
||
|
+ (boolean, required)
|
||
|
+ dev Set device name to search compatible module
|
||
|
+ (string, required)
|
||
|
+ speed Set SPI clock frequency in Hz
|
||
|
+ (integer, optional, default 500000)
|
||
|
+
|
||
|
+
|
||
|
Name: apds9960
|
||
|
Info: Configures the AVAGO APDS9960 digital proximity, ambient light, RGB and
|
||
|
gesture sensor
|
||
|
--- /dev/null
|
||
|
+++ b/arch/arm/boot/dts/overlays/anyspi-overlay.dts
|
||
|
@@ -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";
|
||
|
+ };
|
||
|
+};
|