From 5aace5a5fbcf4a80c6765b605ffdd86d2cfadfb0 Mon Sep 17 00:00:00 2001
From: Pavel Kubelun <be.dissent@gmail.com>
Date: Tue, 8 Nov 2016 08:49:07 +0300
Subject: [PATCH] ipq806x: fixes for R7800 and C2600

Updating spi pins configuration in R7800 and C2600 DTs
Adding more usb power pin export and gsbi6 in R7800 DT
Updating and fixing leds

Signed-off-by: Pavel Kubelun <be.dissent@gmail.com>
---
 .../ipq806x/base-files/etc/board.d/01_leds    |  6 +-
 .../arch/arm/boot/dts/qcom-ipq8064-c2600.dts  | 28 +++++-
 .../arch/arm/boot/dts/qcom-ipq8065-r7800.dts  | 93 +++++++++++++++++--
 .../files/arch/arm/boot/dts/qcom-ipq8065.dtsi |  6 +-
 4 files changed, 115 insertions(+), 18 deletions(-)

diff --git a/target/linux/ipq806x/base-files/etc/board.d/01_leds b/target/linux/ipq806x/base-files/etc/board.d/01_leds
index fbe19cd77b..1f3d3133f5 100755
--- a/target/linux/ipq806x/base-files/etc/board.d/01_leds
+++ b/target/linux/ipq806x/base-files/etc/board.d/01_leds
@@ -15,7 +15,7 @@ c2600)
 	ucidef_set_led_usbport "usb1" "USB 1" "${board}:white:usb_2" "usb1-port1" "usb2-port1"
 	ucidef_set_led_usbport "usb2" "USB 2" "${board}:white:usb_4" "usb3-port1" "usb4-port1"
 	ucidef_set_led_netdev "wan" "WAN" "${board}:white:wan" "eth0"
-	ucidef_set_led_netdev "lan" "LAN" "${board}:white:lan" "br-lan"
+	ucidef_set_led_netdev "lan" "LAN" "${board}:white:lan" "eth1"
 	ucidef_set_led_default "general" "general" "${board}:white:ledgnr" "1"
 	;;
 d7800 |\
@@ -29,8 +29,8 @@ r7500v2)
 	ucidef_set_led_default "rfkill" "rfkill" "${board}:white:rfkill" "0"
 	;;
 r7800)
-	ucidef_set_led_usbdev "usb1" "USB 1" "${board}:white:usb1" "2-1"
-	ucidef_set_led_usbdev "usb2" "USB 2" "${board}:white:usb2" "4-1"
+	ucidef_set_led_usbport "usb1" "USB 1" "${board}:white:usb1" "usb1-port1" "usb2-port1"
+	ucidef_set_led_usbport "usb2" "USB 2" "${board}:white:usb2" "usb3-port1" "usb4-port1"
 	ucidef_set_led_netdev "wan" "WAN" "${board}:white:wan" "eth0"
 	ucidef_set_led_ide "esata" "eSATA" "${board}:white:esata"
 	ucidef_set_led_wlan "wps" "WPS" "${board}:white:wps" "phy0tpt"
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
index 9427e993f3..9162200fd9 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8064-c2600.dts
@@ -46,8 +46,23 @@
 				mux {
 					pins = "gpio18", "gpio19", "gpio21";
 					function = "gsbi5";
+					bias-pull-down;
+				};
+
+				data {
+					pins = "gpio18", "gpio19";
 					drive-strength = <10>;
-					bias-none;
+				};
+
+				cs {
+					pins = "gpio20";
+					drive-strength = <10>;
+					bias-pull-up;
+				};
+
+				clk {
+					pins = "gpio21";
+					drive-strength = <12>;
 				};
 			};
 
@@ -114,7 +129,7 @@
 			qcom,mode = <GSBI_PROT_SPI>;
 			status = "ok";
 
-			spi4: spi@1a280000 {
+			spi5: spi@1a280000 {
 				status = "ok";
 				spi-max-frequency = <50000000>;
 
@@ -124,7 +139,7 @@
 				cs-gpios = <&qcom_pinmux 20 GPIO_ACTIVE_HIGH>;
 
 				flash: m25p80@0 {
-					compatible = "s25fl256s1";
+					compatible = "jedec,spi-nor";
 					#address-cells = <1>;
 					#size-cells = <1>;
 					spi-max-frequency = <50000000>;
@@ -380,7 +395,7 @@
 		wifi {
 			label = "wifi";
 			gpios = <&qcom_pinmux 49 GPIO_ACTIVE_LOW>;
-			linux,code = <KEY_WLAN>;
+			linux,code = <KEY_RFKILL>;
 		};
 
 		reset {
@@ -425,6 +440,11 @@
 			gpios = <&qcom_pinmux 9 GPIO_ACTIVE_HIGH>;
 		};
 
+		wan_red {
+			label = "c2600:red:wan";
+			gpios = <&qcom_pinmux 26 GPIO_ACTIVE_LOW>;
+		};
+
 		wan_blue {
 			label = "c2600:white:wan";
 			gpios = <&qcom_pinmux 33 GPIO_ACTIVE_LOW>;
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
index 560a487567..8566995ef5 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065-r7800.dts
@@ -110,15 +110,61 @@
 				mux {
 					pins = "gpio18", "gpio19", "gpio21";
 					function = "gsbi5";
+					bias-pull-down;
+				};
+
+				data {
+					pins = "gpio18", "gpio19";
 					drive-strength = <10>;
-					bias-none;
 				};
 
 				cs {
 					pins = "gpio20";
+					drive-strength = <10>;
+					bias-pull-up;
+				};
+
+				clk {
+					pins = "gpio21";
 					drive-strength = <12>;
 				};
 			};
+
+			spi6_pins: spi6_pins {
+				mux {
+					pins = "gpio55", "gpio56", "gpio58";
+					function = "gsbi6";
+					bias-pull-down;
+				};
+
+				mosi {
+					pins = "gpio55";
+					drive-strength = <12>;
+				};
+
+				miso {
+					pins = "gpio56";
+					drive-strength = <14>;
+				};
+
+				cs {
+					pins = "gpio57";
+					drive-strength = <12>;
+					bias-pull-up;
+				};
+
+				clk {
+					pins = "gpio58";
+					drive-strength = <12>;
+				};
+
+				reset {
+					pins = "gpio33";
+					drive-strength = <10>;
+					bias-pull-down;
+					output-high;
+				};
+			};
 		};
 
 		gsbi@16300000 {
@@ -139,7 +185,7 @@
 			qcom,mode = <GSBI_PROT_SPI>;
 			status = "ok";
 
-			spi4: spi@1a280000 {
+			spi5: spi@1a280000 {
 				status = "ok";
 				spi-max-frequency = <50000000>;
 				pinctrl-0 = <&spi_pins>;
@@ -148,10 +194,10 @@
 				cs-gpios = <&qcom_pinmux 20 0>;
 
 				flash: m25p80@0 {
-					compatible = "s25fl512s";
+					compatible = "jedec,spi-nor";
 					#address-cells = <1>;
 					#size-cells = <1>;
-					spi-max-frequency = <51200000>;
+					spi-max-frequency = <50000000>;
 					reg = <0>;
 
 					linux,part-probe = "qcom-smem";
@@ -159,6 +205,25 @@
 			};
 		};
 
+		gsbi6: gsbi@16500000 {
+			qcom,mode = <GSBI_PROT_SPI>;
+			status = "ok";
+			spi6: spi@16580000 {
+				status = "ok";
+				spi-max-frequency = <6000000>;
+				pinctrl-0 = <&spi6_pins>;
+				pinctrl-names = "default";
+
+				cs-gpios = <&qcom_pinmux 57 0>;
+
+				spi-nor@0 {
+					compatible = "spi-nor";
+					reg = <0>;
+					spi-max-frequency = <6000000>;
+				};
+			};
+		};
+
 		sata-phy@1b400000 {
 			status = "ok";
 		};
@@ -375,18 +440,24 @@
 			label = "wifi";
 			gpios = <&qcom_pinmux 6 1>;
 			linux,code = <KEY_RFKILL>;
+			debounce-interval = <60>;
+			wakeup-source;
 		};
 
 		reset {
 			label = "reset";
 			gpios = <&qcom_pinmux 54 1>;
 			linux,code = <KEY_RESTART>;
+			debounce-interval = <60>;
+			wakeup-source;
 		};
 
 		wps {
 			label = "wps";
 			gpios = <&qcom_pinmux 65 1>;
 			linux,code = <KEY_WPS_BUTTON>;
+			debounce-interval = <60>;
+			wakeup-source;
 		};
 	};
 
@@ -449,17 +520,23 @@
 		compatible = "gpio-export";
 		#size-cells = <0>;
 
-		display_data {
-			gpio-export,name = "usb0";
+		usb1-power {
+			gpio-export,name = "usb1";
 			gpio-export,output = <1>;
 			gpios = <&qcom_pinmux 15 0>;
 		};
 
-		display_clock {
-			gpio-export,name = "usb1";
+		usb2-power {
+			gpio-export,name = "usb2";
 			gpio-export,output = <1>;
 			gpios = <&qcom_pinmux 16 0>;
 		};
+
+		usb-power {
+			gpio-export,name = "usb_p";
+			gpio-export,output = <1>;
+			gpios = <&qcom_pinmux 68 0>;
+		};
 	};
 };
 
diff --git a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065.dtsi b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065.dtsi
index bff9979adf..435692b183 100644
--- a/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065.dtsi
+++ b/target/linux/ipq806x/files/arch/arm/boot/dts/qcom-ipq8065.dtsi
@@ -29,7 +29,7 @@
 			qcom,saw = <&saw0>;
 			clocks = <&kraitcc 0>, <&kraitcc 4>;
 			clock-names = "cpu", "l2";
-			qcom,imem = <&imem>;
+			qcom,imem = <&qfprom>;
 			clock-latency = <100000>;
 			cpu-supply = <&smb208_s2a>;
 			voltage-tolerance = <5>;
@@ -49,7 +49,7 @@
 			qcom,saw = <&saw1>;
 			clocks = <&kraitcc 1>, <&kraitcc 4>;
 			clock-names = "cpu", "l2";
-			qcom,imem = <&imem>;
+			qcom,imem = <&qfprom>;
 			clock-latency = <100000>;
 			cpu-supply = <&smb208_s2b>;
 			cooling-min-state = <0>;
@@ -200,7 +200,7 @@
 			reg-names = "lpass-lpaif";
 		};
 
-		imem: memory@700000 {
+		qfprom: qfprom@700000 {
 			compatible = "qcom,qfprom", "syscon";
 			reg = <0x00700000 0x1000>;
 			#address-cells = <1>;