274 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			274 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 4d19be9132ca10cf582450a86dcb2c41f227f589 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";
 | |
| +	};
 | |
| +};
 |