From 04ad02d132fb14d509d14054313405f24cf1e8ff Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Sun, 17 Jan 2016 19:56:03 +0000
Subject: [PATCH] lantiq: Switch to the new SPI driver

Compared to the "old" driver:
- Each device must assign a pinctrl setting to the SPI node to allow the
  new SPI driver to configure the SPI pins.
  While here we are also using separate input and output settings so we
  are independent of whether the bootloader configures the pins correctly.
- We use the new "compatible" strings to make the driver choose the
  correct number of chip-selects for each SoC.
- The new driver starts counting the chip-selects at 1 (instead of 0, like
  the old one did). Thus we have to adjust the devices accordingly.

Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>

SVN-Revision: 48293
---
 target/linux/lantiq/dts/DGN1000B.dts      | 23 +++++++++++++++++------
 target/linux/lantiq/dts/DGN3500.dtsi      | 19 +++++++++++++++----
 target/linux/lantiq/dts/EASY80920.dtsi    | 23 +++++++++++++++++------
 target/linux/lantiq/dts/FRITZ3370.dts     | 23 +++++++++++++++++------
 target/linux/lantiq/dts/TDW89X0.dtsi      | 23 +++++++++++++++++------
 target/linux/lantiq/dts/amazonse.dtsi     |  4 +++-
 target/linux/lantiq/dts/ar9.dtsi          |  4 +++-
 target/linux/lantiq/dts/vr9.dtsi          |  4 +++-
 target/linux/lantiq/xrx200/config-default |  3 +--
 target/linux/lantiq/xway/config-default   |  3 +--
 10 files changed, 94 insertions(+), 35 deletions(-)

diff --git a/target/linux/lantiq/dts/DGN1000B.dts b/target/linux/lantiq/dts/DGN1000B.dts
index a6bd5a8021c..68415ca35cb 100644
--- a/target/linux/lantiq/dts/DGN1000B.dts
+++ b/target/linux/lantiq/dts/DGN1000B.dts
@@ -28,10 +28,6 @@
 			pinctrl-0 = <&state_default>;
 
 			state_default: pinmux {
-				spi {
-					lantiq,groups = "spi", "spi_cs1";
-					lantiq,function = "spi";
-				};
 				asc {
 					lantiq,groups = "asc";
 					lantiq,function = "asc";
@@ -42,6 +38,18 @@
 					lantiq,open-drain = <1>;
 				};
 			};
+			pins_spi_default: pins_spi_default {
+				spi_in {
+					lantiq,groups = "spi_di";
+					lantiq,function = "spi";
+				};
+				spi_out {
+					lantiq,groups = "spi_do", "spi_clk",
+						"spi_cs1";
+					lantiq,function = "spi";
+					lantiq,output = <1>;
+				};
+			};
 		};
 
 		etop@E180000 {
@@ -50,11 +58,14 @@
 		};
 
 		spi@E100800 {
-			m25p80@0 {
+			pinctrl-names = "default";
+			pinctrl-0 = <&pins_spi_default>;
+
+			m25p80@1 {
 				#address-cells = <1>;
 				#size-cells = <1>;
 				compatible = "jedec,spi-nor";
-				reg = <0 0>;
+				reg = <1 0>;
 				spi-max-frequency = <5000000>;
 
 				partition@0 {
diff --git a/target/linux/lantiq/dts/DGN3500.dtsi b/target/linux/lantiq/dts/DGN3500.dtsi
index d43da9df040..48e2471e475 100644
--- a/target/linux/lantiq/dts/DGN3500.dtsi
+++ b/target/linux/lantiq/dts/DGN3500.dtsi
@@ -45,10 +45,18 @@
 					lantiq,output = <1>;
 					lantiq,pull = <0>;
 				};
-				spi {
-					lantiq,groups = "spi", "spi_cs4";
+			};
+			pins_spi_default: pins_spi_default {
+				spi_in {
+					lantiq,groups = "spi_di";
 					lantiq,function = "spi";
 				};
+				spi_out {
+					lantiq,groups = "spi_do", "spi_clk",
+						"spi_cs4";
+					lantiq,function = "spi";
+					lantiq,output = <1>;
+				};
 			};
 		};
 
@@ -150,13 +158,16 @@
 };
 
 &spi {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pins_spi_default>;
+
 	status = "ok";
 
-	m25p80@3 {
+	m25p80@4 {
 		#address-cells = <1>;
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
-		reg = <3 0>;
+		reg = <4 0>;
 		spi-max-frequency = <1000000>;
 
 		partition@0 {
diff --git a/target/linux/lantiq/dts/EASY80920.dtsi b/target/linux/lantiq/dts/EASY80920.dtsi
index 56efe7150f9..ad89ed95158 100644
--- a/target/linux/lantiq/dts/EASY80920.dtsi
+++ b/target/linux/lantiq/dts/EASY80920.dtsi
@@ -53,10 +53,6 @@
 					lantiq,groups = "stp";
 					lantiq,function = "stp";
 				};
-				spi {
-					lantiq,groups = "spi", "spi_cs4";
-					lantiq,function = "spi";
-				};
 				nand {
 					lantiq,groups = "nand cle", "nand ale",
 							"nand rd", "nand rdy";
@@ -90,6 +86,18 @@
 					lantiq,pull = <2>;
 				};
 			};
+			pins_spi_default: pins_spi_default {
+				spi_in {
+					lantiq,groups = "spi_di";
+					lantiq,function = "spi";
+				};
+				spi_out {
+					lantiq,groups = "spi_do", "spi_clk",
+						"spi_cs4";
+					lantiq,function = "spi";
+					lantiq,output = <1>;
+				};
+			};
 		};
 
 		eth@E108000 {
@@ -297,13 +305,16 @@
 };
 
 &spi {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pins_spi_default>;
+
 	status = "ok";
 
-	m25p80@3 {
+	m25p80@4 {
 		#address-cells = <1>;
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
-		reg = <3 0>;
+		reg = <4 0>;
 		spi-max-frequency = <1000000>;
 
 		partition@0 {
diff --git a/target/linux/lantiq/dts/FRITZ3370.dts b/target/linux/lantiq/dts/FRITZ3370.dts
index c6a593bfeda..648e36bcf0d 100644
--- a/target/linux/lantiq/dts/FRITZ3370.dts
+++ b/target/linux/lantiq/dts/FRITZ3370.dts
@@ -66,10 +66,6 @@
 			pinctrl-0 = <&state_default>;
 
 			state_default: pinmux {
-				spi {
-					lantiq,groups = "spi", "spi_cs4";
-					lantiq,function = "spi";
-				};
 				mdio {
 					lantiq,groups = "mdio";
 					lantiq,function = "mdio";
@@ -92,6 +88,18 @@
 					lantiq,output = <1>;
 				};
 			};
+			pins_spi_default: pins_spi_default {
+				spi_in {
+					lantiq,groups = "spi_di";
+					lantiq,function = "spi";
+				};
+				spi_out {
+					lantiq,groups = "spi_do", "spi_clk",
+						"spi_cs4";
+					lantiq,function = "spi";
+					lantiq,output = <1>;
+				};
+			};
 		};
 
 		eth@E108000 {
@@ -239,13 +247,16 @@
 };
 
 &spi {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pins_spi_default>;
+
 	status = "ok";
 
-	m25p80@3 {
+	m25p80@4 {
 		#address-cells = <1>;
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
-		reg = <3 0>;
+		reg = <4 0>;
 		spi-max-frequency = <1000000>;
 
 		ath9k_cal: partition@0 {
diff --git a/target/linux/lantiq/dts/TDW89X0.dtsi b/target/linux/lantiq/dts/TDW89X0.dtsi
index 30225d5cc16..eabb98056fa 100644
--- a/target/linux/lantiq/dts/TDW89X0.dtsi
+++ b/target/linux/lantiq/dts/TDW89X0.dtsi
@@ -43,16 +43,24 @@
 					lantiq,open-drain = <0>;
 					lantiq,output = <1>;
 				};
-				spi {
-					lantiq,groups = "spi", "spi_cs4";
-					lantiq,function = "spi";
-				};
 				pcie-rst {
 					lantiq,pins = "io38";
 					lantiq,pull = <0>;
 					lantiq,output = <1>;
 				};
 			};
+			pins_spi_default: pins_spi_default {
+				spi_in {
+					lantiq,groups = "spi_di";
+					lantiq,function = "spi";
+				};
+				spi_out {
+					lantiq,groups = "spi_do", "spi_clk",
+						"spi_cs4";
+					lantiq,function = "spi";
+					lantiq,output = <1>;
+				};
+			};
 		};
 
 		eth@E108000 {
@@ -211,13 +219,16 @@
 };
 
 &spi {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pins_spi_default>;
+
 	status = "ok";
 
-	m25p80@3 {
+	m25p80@4 {
 		#address-cells = <1>;
 		#size-cells = <1>;
 		compatible = "jedec,spi-nor";
-		reg = <3 0>;
+		reg = <4 0>;
 		spi-max-frequency = <33250000>;
 		m25p,fast-read;
 
diff --git a/target/linux/lantiq/dts/amazonse.dtsi b/target/linux/lantiq/dts/amazonse.dtsi
index 5389446eba5..c0bba436d1c 100644
--- a/target/linux/lantiq/dts/amazonse.dtsi
+++ b/target/linux/lantiq/dts/amazonse.dtsi
@@ -73,10 +73,12 @@
 		reg = <0x10000000 0xEF00000>;
 
 		spi@E100800 {
-			compatible = "lantiq,spi-xway";
+			compatible = "lantiq,ase-spi";
 			reg = <0xE100800 0x100>;
 			interrupt-parent = <&icu0>;
 			interrupts = <24 25 26>;
+			interrupt-names = "spi_rx", "spi_tx", "spi_err",
+					"spi_frm";
 			#address-cells = <1>;
 			#size-cells = <1>;
 		};
diff --git a/target/linux/lantiq/dts/ar9.dtsi b/target/linux/lantiq/dts/ar9.dtsi
index 25b834647c4..0be95c3711e 100644
--- a/target/linux/lantiq/dts/ar9.dtsi
+++ b/target/linux/lantiq/dts/ar9.dtsi
@@ -101,10 +101,12 @@
 		};
 
 		spi: spi@E100800 {
-			compatible = "lantiq,spi-xway";
+			compatible = "lantiq,xrx100-spi";
 			reg = <0xE100800 0x100>;
 			interrupt-parent = <&icu0>;
 			interrupts = <22 23 24>;
+			interrupt-names = "spi_rx", "spi_tx", "spi_err",
+					"spi_frm";
 			#address-cells = <1>;
 			#size-cells = <1>;
 			status = "disabled";
diff --git a/target/linux/lantiq/dts/vr9.dtsi b/target/linux/lantiq/dts/vr9.dtsi
index e38541ef69b..fce6f871745 100644
--- a/target/linux/lantiq/dts/vr9.dtsi
+++ b/target/linux/lantiq/dts/vr9.dtsi
@@ -113,10 +113,12 @@
 		};
 
 		spi: spi@E100800 {
-			compatible = "lantiq,spi-xway";
+			compatible = "lantiq,xrx200-spi";
 			reg = <0xE100800 0x100>;
 			interrupt-parent = <&icu0>;
 			interrupts = <22 23 24>;
+			interrupt-names = "spi_rx", "spi_tx", "spi_err",
+					"spi_frm";
 			#address-cells = <1>;
 			#size-cells = <1>;
 			status = "disabled";
diff --git a/target/linux/lantiq/xrx200/config-default b/target/linux/lantiq/xrx200/config-default
index ece2706e5df..1c9f5ccb132 100644
--- a/target/linux/lantiq/xrx200/config-default
+++ b/target/linux/lantiq/xrx200/config-default
@@ -56,9 +56,8 @@ CONFIG_RTL8366S_PHY=y
 CONFIG_RTL8367B_PHY=y
 CONFIG_RTL8367_PHY=y
 CONFIG_SPI=y
-CONFIG_SPI_BITBANG=y
+CONFIG_SPI_LANTIQ=y
 CONFIG_SPI_MASTER=y
-CONFIG_SPI_XWAY=y
 CONFIG_SYS_SUPPORTS_MIPS16=y
 CONFIG_UBIFS_FS=y
 CONFIG_UBIFS_FS_ADVANCED_COMPR=y
diff --git a/target/linux/lantiq/xway/config-default b/target/linux/lantiq/xway/config-default
index 974b06b9d50..ae13f805106 100644
--- a/target/linux/lantiq/xway/config-default
+++ b/target/linux/lantiq/xway/config-default
@@ -54,9 +54,8 @@ CONFIG_RTL8366S_PHY=y
 CONFIG_RTL8367B_PHY=y
 CONFIG_RTL8367_PHY=y
 CONFIG_SPI=y
-CONFIG_SPI_BITBANG=y
+CONFIG_SPI_LANTIQ=y
 CONFIG_SPI_MASTER=y
-CONFIG_SPI_XWAY=y
 CONFIG_SYS_SUPPORTS_MIPS16=y
 CONFIG_UBIFS_FS=y
 CONFIG_UBIFS_FS_ADVANCED_COMPR=y
-- 
GitLab