diff options
Diffstat (limited to 'arch/arm')
243 files changed, 10166 insertions, 3830 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index c49a775937db..32cbbd565902 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -1983,8 +1983,6 @@ config XIP_PHYS_ADDR  config KEXEC  	bool "Kexec system call (EXPERIMENTAL)"  	depends on (!SMP || PM_SLEEP_SMP) -	select CRYPTO -	select CRYPTO_SHA256  	help  	  kexec is a system call that implements the ability to shutdown your  	  current kernel, and to start another kernel.  It is like a reboot diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index b8c5cd3ddeb9..a13ea1cced60 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -159,8 +159,11 @@ dtb-$(CONFIG_MACH_KIRKWOOD) += kirkwood-b3.dtb \  	kirkwood-ts419-6282.dtb  dtb-$(CONFIG_ARCH_LPC32XX) += ea3250.dtb phy3250.dtb  dtb-$(CONFIG_ARCH_MARCO) += marco-evb.dtb +dtb-$(CONFIG_MACH_MESON6) += meson6-atv1200.dtb  dtb-$(CONFIG_ARCH_MOXART) += moxart-uc7112lx.dtb  dtb-$(CONFIG_ARCH_MXC) += \ +	imx1-ads.dtb \ +	imx1-apf9328.dtb \  	imx25-eukrea-mbimxsd25-baseboard.dtb \  	imx25-eukrea-mbimxsd25-baseboard-cmo-qvga.dtb \  	imx25-eukrea-mbimxsd25-baseboard-dvi-svga.dtb \ @@ -199,6 +202,7 @@ dtb-$(CONFIG_ARCH_MXC) += \  	imx6dl-gw52xx.dtb \  	imx6dl-gw53xx.dtb \  	imx6dl-gw54xx.dtb \ +	imx6dl-gw552x.dtb \  	imx6dl-hummingboard.dtb \  	imx6dl-nitrogen6x.dtb \  	imx6dl-phytec-pbab01.dtb \ @@ -223,6 +227,8 @@ dtb-$(CONFIG_ARCH_MXC) += \  	imx6q-gw53xx.dtb \  	imx6q-gw5400-a.dtb \  	imx6q-gw54xx.dtb \ +	imx6q-gw552x.dtb \ +	imx6q-hummingboard.dtb \  	imx6q-nitrogen6x.dtb \  	imx6q-phytec-pbab01.dtb \  	imx6q-rex-pro.dtb \ @@ -240,7 +246,7 @@ dtb-$(CONFIG_ARCH_MXC) += \  	imx6q-tx6q-1110.dtb \  	imx6sl-evk.dtb \  	imx6sx-sdb.dtb \ -	vf610-colibri.dtb \ +	vf610-colibri-eval-v3.dtb \  	vf610-cosmic.dtb \  	vf610-twr.dtb  dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \ @@ -286,7 +292,11 @@ dtb-$(CONFIG_ARCH_OMAP3) += am3517-craneboard.dtb \  	omap3-devkit8000.dtb \  	omap3-evm.dtb \  	omap3-evm-37xx.dtb \ -	omap3-gta04.dtb \ +	omap3-gta04a3.dtb \ +	omap3-gta04a4.dtb \ +	omap3-gta04a5.dtb \ +	omap3-ha.dtb \ +	omap3-ha-lcd.dtb \  	omap3-igep0020.dtb \  	omap3-igep0030.dtb \  	omap3-ldp.dtb \ @@ -309,6 +319,7 @@ dtb-$(CONFIG_ARCH_OMAP3) += am3517-craneboard.dtb \  	omap3-sbc-t3517.dtb \  	omap3-sbc-t3530.dtb \  	omap3-sbc-t3730.dtb \ +	omap3-thunder.dtb \  	omap3-zoom3.dtb  dtb-$(CONFIG_SOC_AM33XX) += am335x-base0033.dtb \  	am335x-bone.dtb \ @@ -341,7 +352,9 @@ dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb  dtb-$(CONFIG_ARCH_QCOM) += \  	qcom-apq8064-ifc6410.dtb \  	qcom-apq8074-dragonboard.dtb \ +	qcom-apq8084-ifc6540.dtb \  	qcom-apq8084-mtp.dtb \ +	qcom-ipq8064-ap148.dtb \  	qcom-msm8660-surf.dtb \  	qcom-msm8960-cdp.dtb  dtb-$(CONFIG_ARCH_ROCKCHIP) += \ @@ -375,7 +388,8 @@ dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d.dtb \  	r8a7791-henninger.dtb \  	r8a7791-koelsch.dtb \  	r8a7790-lager.dtb \ -	r8a7779-marzen.dtb +	r8a7779-marzen.dtb \ +	r8a7794-alt.dtb  dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_arria5_socdk.dtb \  	socfpga_cyclone5_socdk.dtb \  	socfpga_cyclone5_sockit.dtb \ @@ -406,6 +420,7 @@ dtb-$(CONFIG_MACH_SUN4I) += \  dtb-$(CONFIG_MACH_SUN5I) += \  	sun5i-a10s-olinuxino-micro.dtb \  	sun5i-a10s-r7-tv-dongle.dtb \ +	sun5i-a13-hsg-h702.dtb \  	sun5i-a13-olinuxino.dtb \  	sun5i-a13-olinuxino-micro.dtb  dtb-$(CONFIG_MACH_SUN6I) += \ @@ -416,7 +431,9 @@ dtb-$(CONFIG_MACH_SUN6I) += \  dtb-$(CONFIG_MACH_SUN7I) += \  	sun7i-a20-cubieboard2.dtb \  	sun7i-a20-cubietruck.dtb \ +	sun7i-a20-hummingbird.dtb \  	sun7i-a20-i12-tvbox.dtb \ +	sun7i-a20-olinuxino-lime.dtb \  	sun7i-a20-olinuxino-micro.dtb \  	sun7i-a20-pcduino3.dtb  dtb-$(CONFIG_MACH_SUN8I) += \ @@ -440,6 +457,7 @@ dtb-$(CONFIG_ARCH_TEGRA) += tegra20-harmony.dtb \  	tegra114-roth.dtb \  	tegra114-tn7.dtb \  	tegra124-jetson-tk1.dtb \ +	tegra124-nyan-big.dtb \  	tegra124-venice2.dtb  dtb-$(CONFIG_ARCH_U300) += ste-u300.dtb  dtb-$(CONFIG_ARCH_U8500) += ste-snowball.dtb \ @@ -491,6 +509,7 @@ dtb-$(CONFIG_MACH_DOVE) += dove-cm-a510.dtb \  	dove-d2plug.dtb \  	dove-d3plug.dtb \  	dove-dove-db.dtb +dtb-$(CONFIG_ARCH_MEDIATEK) += mt6589-aquaris5.dtb  targets += dtbs dtbs_install  targets += $(dtb-y) diff --git a/arch/arm/boot/dts/am335x-bone-common.dtsi b/arch/arm/boot/dts/am335x-bone-common.dtsi index bde1777b62be..fe983d204b2b 100644 --- a/arch/arm/boot/dts/am335x-bone-common.dtsi +++ b/arch/arm/boot/dts/am335x-bone-common.dtsi @@ -227,6 +227,7 @@  &tps {  	regulators {  		dcdc1_reg: regulator@0 { +			regulator-name = "vdds_dpr";  			regulator-always-on;  		}; @@ -249,18 +250,22 @@  		};  		ldo1_reg: regulator@3 { +			regulator-name = "vio,vrtc,vdds";  			regulator-always-on;  		};  		ldo2_reg: regulator@4 { +			regulator-name = "vdd_3v3aux";  			regulator-always-on;  		};  		ldo3_reg: regulator@5 { +			regulator-name = "vdd_1v8";  			regulator-always-on;  		};  		ldo4_reg: regulator@6 { +			regulator-name = "vdd_3v3a";  			regulator-always-on;  		};  	}; diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index 3a0a161342ba..e4f165a7833a 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi @@ -354,6 +354,10 @@  			ti,hwmods = "mailbox";  			ti,mbox-num-users = <4>;  			ti,mbox-num-fifos = <8>; +			mbox_wkupm3: wkup_m3 { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <0 0 3>; +			};  		};  		timer1: timer@44e31000 { diff --git a/arch/arm/boot/dts/am4372.dtsi b/arch/arm/boot/dts/am4372.dtsi index 9b3d2ba82f13..2f7570e3d483 100644 --- a/arch/arm/boot/dts/am4372.dtsi +++ b/arch/arm/boot/dts/am4372.dtsi @@ -58,10 +58,12 @@  	};  	am43xx_pinmux: pinmux@44e10800 { -		compatible = "pinctrl-single"; +		compatible = "ti,am437-padconf", "pinctrl-single";  		reg = <0x44e10800 0x31c>;  		#address-cells = <1>;  		#size-cells = <0>; +		#interrupt-cells = <1>; +		interrupt-controller;  		pinctrl-single,register-width = <32>;  		pinctrl-single,function-mask = <0xffffffff>;  	}; @@ -168,6 +170,10 @@  			ti,hwmods = "mailbox";  			ti,mbox-num-users = <4>;  			ti,mbox-num-fifos = <8>; +			mbox_wkupm3: wkup_m3 { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <0 0 3>; +			};  		};  		timer1: timer@44e31000 { diff --git a/arch/arm/boot/dts/armada-370-db.dts b/arch/arm/boot/dts/armada-370-db.dts index 416f4e5a69c1..a495e5821ab8 100644 --- a/arch/arm/boot/dts/armada-370-db.dts +++ b/arch/arm/boot/dts/armada-370-db.dts @@ -43,6 +43,8 @@  			};  			mdio { +				pinctrl-0 = <&mdio_pins>; +				pinctrl-names = "default";  				phy0: ethernet-phy@0 {  					reg = <0>;  				}; @@ -53,11 +55,15 @@  			};  			ethernet@70000 { +				pinctrl-0 = <&ge0_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy0>;  				phy-mode = "rgmii-id";  			};  			ethernet@74000 { +				pinctrl-0 = <&ge1_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy1>;  				phy-mode = "rgmii-id"; diff --git a/arch/arm/boot/dts/armada-370-mirabox.dts b/arch/arm/boot/dts/armada-370-mirabox.dts index 097df7d8f0f6..2b6d24e0d1e8 100644 --- a/arch/arm/boot/dts/armada-370-mirabox.dts +++ b/arch/arm/boot/dts/armada-370-mirabox.dts @@ -91,6 +91,8 @@  			};  			mdio { +				pinctrl-0 = <&mdio_pins>; +				pinctrl-names = "default";  				phy0: ethernet-phy@0 {  					reg = <0>;  				}; @@ -100,11 +102,15 @@  				};  			};  			ethernet@70000 { +				pinctrl-0 = <&ge0_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy0>;  				phy-mode = "rgmii-id";  			};  			ethernet@74000 { +				pinctrl-0 = <&ge1_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy1>;  				phy-mode = "rgmii-id"; diff --git a/arch/arm/boot/dts/armada-370-netgear-rn102.dts b/arch/arm/boot/dts/armada-370-netgear-rn102.dts index d6d572e5af32..29a7c4e926cc 100644 --- a/arch/arm/boot/dts/armada-370-netgear-rn102.dts +++ b/arch/arm/boot/dts/armada-370-netgear-rn102.dts @@ -101,12 +101,16 @@  			};  			mdio { +				pinctrl-0 = <&mdio_pins>; +				pinctrl-names = "default";  				phy0: ethernet-phy@0 { /* Marvell 88E1318 */  					reg = <0>;  				};  			};  			ethernet@74000 { +				pinctrl-0 = <&ge1_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy0>;  				phy-mode = "rgmii-id"; @@ -122,7 +126,7 @@  				status = "okay";  				isl12057: isl12057@68 { -					compatible = "isl,isl12057"; +					compatible = "isil,isl12057";  					reg = <0x68>;  				}; diff --git a/arch/arm/boot/dts/armada-370-netgear-rn104.dts b/arch/arm/boot/dts/armada-370-netgear-rn104.dts index c5fe8b5dcdc7..c8b23c0e08d2 100644 --- a/arch/arm/boot/dts/armada-370-netgear-rn104.dts +++ b/arch/arm/boot/dts/armada-370-netgear-rn104.dts @@ -86,6 +86,8 @@  			};  			mdio { +				pinctrl-0 = <&mdio_pins>; +				pinctrl-names = "default";  				phy0: ethernet-phy@0 { /* Marvell 88E1318 */  					reg = <0>;  				}; @@ -96,12 +98,16 @@  			};  			ethernet@70000 { +				pinctrl-0 = <&ge0_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy0>;  				phy-mode = "rgmii-id";  			};  			ethernet@74000 { +				pinctrl-0 = <&ge1_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy1>;  				phy-mode = "rgmii-id"; @@ -117,7 +123,7 @@  				status = "okay";  				isl12057: isl12057@68 { -					compatible = "isl,isl12057"; +					compatible = "isil,isl12057";  					reg = <0x68>;  				}; diff --git a/arch/arm/boot/dts/armada-370-rd.dts b/arch/arm/boot/dts/armada-370-rd.dts index 4169f4096ea3..14c66e4adbc0 100644 --- a/arch/arm/boot/dts/armada-370-rd.dts +++ b/arch/arm/boot/dts/armada-370-rd.dts @@ -50,6 +50,18 @@  		};  		internal-regs { +			pinctrl { +				fan_pins: fan-pins { +					marvell,pins = "mpp8"; +					marvell,function = "gpio"; +				}; + +				led_pins: led-pins { +					marvell,pins = "mpp32"; +					marvell,function = "gpio"; +				}; +			}; +  			serial@12000 {  				status = "okay";  			}; @@ -59,6 +71,8 @@  			};  			mdio { +				pinctrl-0 = <&mdio_pins>; +				pinctrl-names = "default";  				phy0: ethernet-phy@0 {  					reg = <0>;  				}; @@ -74,6 +88,8 @@  				phy-mode = "sgmii";  			};  			ethernet@74000 { +				pinctrl-0 = <&ge1_rgmii_pins>; +				pinctrl-names = "default";  				status = "okay";  				phy = <&phy1>;  				phy-mode = "rgmii-id"; @@ -106,6 +122,26 @@  				};  			}; +			gpio-fan { +				compatible = "gpio-fan"; +				gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>; +				gpio-fan,speed-map = <0 0 3000 1>; +				pinctrl-0 = <&fan_pins>; +				pinctrl-names = "default"; +			}; + +			gpio_leds { +				compatible = "gpio-leds"; +				pinctrl-names = "default"; +				pinctrl-0 = <&led_pins>; + +				sw_led { +					label = "370rd:green:sw"; +					gpios = <&gpio1 0 GPIO_ACTIVE_LOW>; +					default-state = "keep"; +				}; +			}; +  			nand@d0000 {  				status = "okay";  				num-cs = <1>; diff --git a/arch/arm/boot/dts/armada-370-xp.dtsi b/arch/arm/boot/dts/armada-370-xp.dtsi index 23227e0027ec..83286ec9702c 100644 --- a/arch/arm/boot/dts/armada-370-xp.dtsi +++ b/arch/arm/boot/dts/armada-370-xp.dtsi @@ -110,7 +110,7 @@  			};  			spi0: spi@10600 { -				compatible = "marvell,orion-spi"; +				compatible = "marvell,armada-370-spi", "marvell,orion-spi";  				reg = <0x10600 0x28>;  				#address-cells = <1>;  				#size-cells = <0>; @@ -121,7 +121,7 @@  			};  			spi1: spi@10680 { -				compatible = "marvell,orion-spi"; +				compatible = "marvell,armada-370-spi", "marvell,orion-spi";  				reg = <0x10680 0x28>;  				#address-cells = <1>;  				#size-cells = <0>; diff --git a/arch/arm/boot/dts/armada-370.dtsi b/arch/arm/boot/dts/armada-370.dtsi index 21b588b6f6bd..6b3c23b1e138 100644 --- a/arch/arm/boot/dts/armada-370.dtsi +++ b/arch/arm/boot/dts/armada-370.dtsi @@ -151,6 +151,25 @@  						       "mpp62", "mpp60", "mpp58";  					marvell,function = "audio";  				}; + +				mdio_pins: mdio-pins { +					marvell,pins = "mpp17", "mpp18"; +					marvell,function = "ge"; +				}; + +				ge0_rgmii_pins: ge0-rgmii-pins { +					marvell,pins = "mpp5", "mpp6", "mpp7", "mpp8", +						       "mpp9", "mpp10", "mpp11", "mpp12", +						       "mpp13", "mpp14", "mpp15", "mpp16"; +					marvell,function = "ge0"; +				}; + +				ge1_rgmii_pins: ge1-rgmii-pins { +					marvell,pins = "mpp19", "mpp20", "mpp21", "mpp22", +						       "mpp23", "mpp24", "mpp25", "mpp26", +						       "mpp27", "mpp28", "mpp29", "mpp30"; +					marvell,function = "ge1"; +				};  			};  			gpio0: gpio@18100 { @@ -206,6 +225,10 @@  				status = "okay";  			}; +			sscg@18330 { +				reg = <0x18330 0x4>; +			}; +  			interrupt-controller@20000 {  				reg = <0x20a00 0x1d0>, <0x21870 0x58>;  			}; diff --git a/arch/arm/boot/dts/armada-375.dtsi b/arch/arm/boot/dts/armada-375.dtsi index c1e49e7bf0fa..de6571445cef 100644 --- a/arch/arm/boot/dts/armada-375.dtsi +++ b/arch/arm/boot/dts/armada-375.dtsi @@ -185,6 +185,12 @@  				};  			}; +			rtc@10300 { +				compatible = "marvell,orion-rtc"; +				reg = <0x10300 0x20>; +				interrupts = <GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>; +			}; +  			spi0: spi@10600 {  				compatible = "marvell,orion-spi";  				reg = <0x10600 0x50>; diff --git a/arch/arm/boot/dts/armada-xp-netgear-rn2120.dts b/arch/arm/boot/dts/armada-xp-netgear-rn2120.dts index 0cf999abc4ed..252def861cbe 100644 --- a/arch/arm/boot/dts/armada-xp-netgear-rn2120.dts +++ b/arch/arm/boot/dts/armada-xp-netgear-rn2120.dts @@ -174,7 +174,7 @@  				status = "okay";  				isl12057: isl12057@68 { -					compatible = "isl,isl12057"; +					compatible = "isil,isl12057";  					reg = <0x68>;  				}; diff --git a/arch/arm/boot/dts/at91sam9263.dtsi b/arch/arm/boot/dts/at91sam9263.dtsi index bb23c2d33cf8..840958ba556c 100644 --- a/arch/arm/boot/dts/at91sam9263.dtsi +++ b/arch/arm/boot/dts/at91sam9263.dtsi @@ -345,10 +345,14 @@  				};  			}; -			ramc: ramc@ffffe200 { +			ramc0: ramc@ffffe200 {  				compatible = "atmel,at91sam9260-sdramc"; -				reg = <0xffffe200 0x200 -				       0xffffe800 0x200>; +				reg = <0xffffe200 0x200>; +			}; + +			ramc1: ramc@ffffe800 { +				compatible = "atmel,at91sam9260-sdramc"; +				reg = <0xffffe800 0x200>;  			};  			pit: timer@fffffd30 { diff --git a/arch/arm/boot/dts/at91sam9g20.dtsi b/arch/arm/boot/dts/at91sam9g20.dtsi index 31f7652612fc..5734dc18d7e1 100644 --- a/arch/arm/boot/dts/at91sam9g20.dtsi +++ b/arch/arm/boot/dts/at91sam9g20.dtsi @@ -22,6 +22,10 @@  				compatible = "atmel,at91sam9g20-i2c";  			}; +			ssc0: ssc@fffbc000 { +				compatible = "atmel,at91sam9rl-ssc"; +			}; +  			adc0: adc@fffe0000 {  				atmel,adc-startup-time = <40>;  			}; diff --git a/arch/arm/boot/dts/at91sam9g45.dtsi b/arch/arm/boot/dts/at91sam9g45.dtsi index 932a669156af..d3f65130a1f8 100644 --- a/arch/arm/boot/dts/at91sam9g45.dtsi +++ b/arch/arm/boot/dts/at91sam9g45.dtsi @@ -96,8 +96,14 @@  			ramc0: ramc@ffffe400 {  				compatible = "atmel,at91sam9g45-ddramc"; -				reg = <0xffffe400 0x200 -				       0xffffe600 0x200>; +				reg = <0xffffe400 0x200>; +				clocks = <&ddrck>; +				clock-names = "ddrck"; +			}; + +			ramc1: ramc@ffffe600 { +				compatible = "atmel,at91sam9g45-ddramc"; +				reg = <0xffffe600 0x200>;  				clocks = <&ddrck>;  				clock-names = "ddrck";  			}; @@ -159,7 +165,7 @@  					compatible = "atmel,at91rm9200-clk-master";  					#clock-cells = <0>;  					interrupts-extended = <&pmc AT91_PMC_MCKRDY>; -					clocks = <&slow_xtal>, <&main>, <&plladiv>, <&utmi>; +					clocks = <&clk32k>, <&main>, <&plladiv>, <&utmi>;  					atmel,clk-output-range = <0 133333333>;  					atmel,clk-divisors = <1 2 4 3>;  				}; @@ -175,7 +181,7 @@  					#address-cells = <1>;  					#size-cells = <0>;  					interrupt-parent = <&pmc>; -					clocks = <&slow_xtal>, <&main>, <&plladiv>, <&utmi>, <&mck>; +					clocks = <&clk32k>, <&main>, <&plladiv>, <&utmi>, <&mck>;  					prog0: prog0 {  						#clock-cells = <0>; @@ -1159,6 +1165,39 @@  					atmel,can-isoc;  				};  			}; + +			sckc@fffffd50 { +				compatible = "atmel,at91sam9x5-sckc"; +				reg = <0xfffffd50 0x4>; + +				slow_osc: slow_osc { +					compatible = "atmel,at91sam9x5-clk-slow-osc"; +					#clock-cells = <0>; +					atmel,startup-time-usec = <1200000>; +					clocks = <&slow_xtal>; +				}; + +				slow_rc_osc: slow_rc_osc { +					compatible = "atmel,at91sam9x5-clk-slow-rc-osc"; +					#clock-cells = <0>; +					atmel,startup-time-usec = <75>; +					clock-frequency = <32768>; +					clock-accuracy = <50000000>; +				}; + +				clk32k: slck { +					compatible = "atmel,at91sam9x5-clk-slow"; +					#clock-cells = <0>; +					clocks = <&slow_rc_osc &slow_osc>; +				}; +			}; + +			rtc@fffffdb0 { +				compatible = "atmel,at91rm9200-rtc"; +				reg = <0xfffffdb0 0x30>; +				interrupts = <1 IRQ_TYPE_LEVEL_HIGH 7>; +				status = "disabled"; +			};  		};  		fb0: fb@0x00500000 { diff --git a/arch/arm/boot/dts/at91sam9m10g45ek.dts b/arch/arm/boot/dts/at91sam9m10g45ek.dts index 96ccc7de4f0a..d8dd22651090 100644 --- a/arch/arm/boot/dts/at91sam9m10g45ek.dts +++ b/arch/arm/boot/dts/at91sam9m10g45ek.dts @@ -160,6 +160,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_pwm_leds>;  			}; + +			rtc@fffffdb0 { +				status = "okay"; +			};  		};  		fb0: fb@0x00500000 { diff --git a/arch/arm/boot/dts/at91sam9n12.dtsi b/arch/arm/boot/dts/at91sam9n12.dtsi index 2bfac310dbec..68eb9aded164 100644 --- a/arch/arm/boot/dts/at91sam9n12.dtsi +++ b/arch/arm/boot/dts/at91sam9n12.dtsi @@ -87,6 +87,8 @@  			ramc0: ramc@ffffe800 {  				compatible = "atmel,at91sam9g45-ddramc";  				reg = <0xffffe800 0x200>; +				clocks = <&ddrck>; +				clock-names = "ddrck";  			};  			pmc: pmc@fffffc00 { diff --git a/arch/arm/boot/dts/at91sam9n12ek.dts b/arch/arm/boot/dts/at91sam9n12ek.dts index 83d723711ae1..13bb24ea971a 100644 --- a/arch/arm/boot/dts/at91sam9n12ek.dts +++ b/arch/arm/boot/dts/at91sam9n12ek.dts @@ -136,6 +136,8 @@  		};  		usb0: ohci@00500000 { +			num-ports = <1>; +			atmel,vbus-gpio = <&pioB 7 GPIO_ACTIVE_LOW>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/at91sam9rl.dtsi b/arch/arm/boot/dts/at91sam9rl.dtsi index ab56c8b81dfa..f0b4352650ed 100644 --- a/arch/arm/boot/dts/at91sam9rl.dtsi +++ b/arch/arm/boot/dts/at91sam9rl.dtsi @@ -204,7 +204,7 @@  			};  			ssc0: ssc@fffc0000 { -				compatible = "atmel,at91rm9200-ssc"; +				compatible = "atmel,at91sam9rl-ssc";  				reg = <0xfffc0000 0x4000>;  				interrupts = <14 IRQ_TYPE_LEVEL_HIGH 5>;  				pinctrl-names = "default"; @@ -213,7 +213,7 @@  			};  			ssc1: ssc@fffc4000 { -				compatible = "atmel,at91rm9200-ssc"; +				compatible = "atmel,at91sam9rl-ssc";  				reg = <0xfffc4000 0x4000>;  				interrupts = <15 IRQ_TYPE_LEVEL_HIGH 5>;  				pinctrl-names = "default"; diff --git a/arch/arm/boot/dts/at91sam9x5.dtsi b/arch/arm/boot/dts/at91sam9x5.dtsi index e1a5c70b885c..726274f7959b 100644 --- a/arch/arm/boot/dts/at91sam9x5.dtsi +++ b/arch/arm/boot/dts/at91sam9x5.dtsi @@ -95,6 +95,8 @@  			ramc0: ramc@ffffe800 {  				compatible = "atmel,at91sam9g45-ddramc";  				reg = <0xffffe800 0x200>; +				clocks = <&ddrck>; +				clock-names = "ddrck";  			};  			pmc: pmc@fffffc00 { @@ -966,7 +968,7 @@  			adc0: adc@f804c000 {  				#address-cells = <1>;  				#size-cells = <0>; -				compatible = "atmel,at91sam9260-adc"; +				compatible = "atmel,at91sam9x5-adc";  				reg = <0xf804c000 0x100>;  				interrupts = <19 IRQ_TYPE_LEVEL_HIGH 0>;  				clocks = <&adc_clk>, diff --git a/arch/arm/boot/dts/da850-evm.dts b/arch/arm/boot/dts/da850-evm.dts index 1e11e5a5f723..4f935ad9f27b 100644 --- a/arch/arm/boot/dts/da850-evm.dts +++ b/arch/arm/boot/dts/da850-evm.dts @@ -17,6 +17,18 @@  	soc {  		pmx_core: pinmux@1c14120 {  			status = "okay"; + +			mcasp0_pins: pinmux_mcasp0_pins { +				pinctrl-single,bits = < +					/* +					 * AHCLKX, ACLKX, AFSX, AHCLKR, ACLKR, +					 * AFSR, AMUTE +					 */ +					0x00 0x11111111 0xffffffff +					/* AXR11, AXR12 */ +					0x04 0x00011000 0x000ff000 +				>; +			};  		};  		serial0: serial@1c42000 {  			status = "okay"; @@ -39,6 +51,20 @@  			tps: tps@48 {  				reg = <0x48>;  			}; +			tlv320aic3106: tlv320aic3106@18 { +				#sound-dai-cells = <0>; +				compatible = "ti,tlv320aic3106"; +				reg = <0x18>; +				status = "okay"; + +				/* Regulators */ +				IOVDD-supply = <&vdcdc2_reg>; +				/* Derived from VBAT: Baseboard 3.3V / 1.8V */ +				AVDD-supply = <&vbat>; +				DRVDD-supply = <&vbat>; +				DVDD-supply = <&vbat>; +			}; +  		};  		wdt: wdt@1c21000 {  			status = "okay"; @@ -117,6 +143,33 @@  		regulator-max-microvolt = <5000000>;  		regulator-boot-on;  	}; + +	sound { +		compatible = "simple-audio-card"; +		simple-audio-card,name = "DA850/OMAP-L138 EVM"; +		simple-audio-card,widgets = +			"Line", "Line In", +			"Line", "Line Out"; +		simple-audio-card,routing = +			"LINE1L", "Line In", +			"LINE1R", "Line In", +			"Line Out", "LLOUT", +			"Line Out", "RLOUT"; +		simple-audio-card,format = "dsp_b"; +		simple-audio-card,bitclock-master = <&link0_codec>; +		simple-audio-card,frame-master = <&link0_codec>; +		simple-audio-card,bitclock-inversion; + +		simple-audio-card,cpu { +			sound-dai = <&mcasp0>; +			system-clock-frequency = <24576000>; +		}; + +		link0_codec: simple-audio-card,codec { +			sound-dai = <&tlv320aic3106>; +			system-clock-frequency = <24576000>; +		}; +	};  };  /include/ "tps6507x.dtsi" @@ -170,3 +223,22 @@  		};  	};  }; + +&mcasp0 { +	#sound-dai-cells = <0>; +	status = "okay"; +	pinctrl-names = "default"; +	pinctrl-0 = <&mcasp0_pins>; + +	op-mode = <0>;          /* MCASP_IIS_MODE */ +	tdm-slots = <2>; +	/* 4 serializer */ +	serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */ +		0 0 0 0 +		0 0 0 0 +		0 0 0 1 +		2 0 0 0 +	>; +	tx-num-evt = <32>; +	rx-num-evt = <32>; +}; diff --git a/arch/arm/boot/dts/da850.dtsi b/arch/arm/boot/dts/da850.dtsi index b695548dbb4e..0bd98cd00816 100644 --- a/arch/arm/boot/dts/da850.dtsi +++ b/arch/arm/boot/dts/da850.dtsi @@ -150,6 +150,12 @@  			};  		}; +		edma0: edma@01c00000 { +			compatible = "ti,edma3"; +			reg =	<0x0 0x10000>; +			interrupts = <11 13 12>; +			#dma-cells = <1>; +		};  		serial0: serial@1c42000 {  			compatible = "ns16550a";  			reg = <0x42000 0x100>; @@ -270,6 +276,19 @@  			ti,davinci-gpio-unbanked = <0>;  			status = "disabled";  		}; + +		mcasp0: mcasp@01d00000 { +			compatible = "ti,da830-mcasp-audio"; +			reg = <0x100000 0x2000>, +			      <0x102000 0x400000>; +			reg-names = "mpu", "dat"; +			interrupts = <54>; +			interrupt-names = "common"; +			status = "disabled"; +			dmas = <&edma0 1>, +				<&edma0 0>; +			dma-names = "tx", "rx"; +		};  	};  	nand_cs3@62000000 {  		compatible = "ti,davinci-nand"; diff --git a/arch/arm/boot/dts/dra7-evm.dts b/arch/arm/boot/dts/dra7-evm.dts index 50f8022905a1..08434c7b9759 100644 --- a/arch/arm/boot/dts/dra7-evm.dts +++ b/arch/arm/boot/dts/dra7-evm.dts @@ -303,6 +303,8 @@  	status = "okay";  	pinctrl-names = "default";  	pinctrl-0 = <&uart1_pins>; +	interrupts-extended = <&gic GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>, +			      <&dra7_pmx_core 0x3e0>;  };  &uart2 { diff --git a/arch/arm/boot/dts/dra7.dtsi b/arch/arm/boot/dts/dra7.dtsi index 97f603c4483d..1fd6b931490f 100644 --- a/arch/arm/boot/dts/dra7.dtsi +++ b/arch/arm/boot/dts/dra7.dtsi @@ -217,10 +217,12 @@  		};  		dra7_pmx_core: pinmux@4a003400 { -			compatible = "pinctrl-single"; +			compatible = "ti,dra7-padconf", "pinctrl-single";  			reg = <0x4a003400 0x0464>;  			#address-cells = <1>;  			#size-cells = <0>; +			#interrupt-cells = <1>; +			interrupt-controller;  			pinctrl-single,register-width = <32>;  			pinctrl-single,function-mask = <0x3fffffff>;  		}; @@ -245,7 +247,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio2: gpio@48055000 { @@ -256,7 +258,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio3: gpio@48057000 { @@ -267,7 +269,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio4: gpio@48059000 { @@ -278,7 +280,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio5: gpio@4805b000 { @@ -289,7 +291,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio6: gpio@4805d000 { @@ -300,7 +302,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio7: gpio@48051000 { @@ -311,7 +313,7 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		gpio8: gpio@48053000 { @@ -322,13 +324,13 @@  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller; -			#interrupt-cells = <1>; +			#interrupt-cells = <2>;  		};  		uart1: serial@4806a000 {  			compatible = "ti,omap4-uart";  			reg = <0x4806a000 0x100>; -			interrupts = <GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 67 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart1";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -337,7 +339,7 @@  		uart2: serial@4806c000 {  			compatible = "ti,omap4-uart";  			reg = <0x4806c000 0x100>; -			interrupts = <GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 68 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart2";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -346,7 +348,7 @@  		uart3: serial@48020000 {  			compatible = "ti,omap4-uart";  			reg = <0x48020000 0x100>; -			interrupts = <GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 69 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart3";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -355,7 +357,7 @@  		uart4: serial@4806e000 {  			compatible = "ti,omap4-uart";  			reg = <0x4806e000 0x100>; -			interrupts = <GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 65 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart4";  			clock-frequency = <48000000>;                          status = "disabled"; @@ -364,7 +366,7 @@  		uart5: serial@48066000 {  			compatible = "ti,omap4-uart";  			reg = <0x48066000 0x100>; -			interrupts = <GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 100 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart5";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -373,7 +375,7 @@  		uart6: serial@48068000 {  			compatible = "ti,omap4-uart";  			reg = <0x48068000 0x100>; -			interrupts = <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart6";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -382,7 +384,7 @@  		uart7: serial@48420000 {  			compatible = "ti,omap4-uart";  			reg = <0x48420000 0x100>; -			interrupts = <GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 218 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart7";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -391,7 +393,7 @@  		uart8: serial@48422000 {  			compatible = "ti,omap4-uart";  			reg = <0x48422000 0x100>; -			interrupts = <GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 219 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart8";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -400,7 +402,7 @@  		uart9: serial@48424000 {  			compatible = "ti,omap4-uart";  			reg = <0x48424000 0x100>; -			interrupts = <GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 220 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart9";  			clock-frequency = <48000000>;  			status = "disabled"; @@ -409,7 +411,7 @@  		uart10: serial@4ae2b000 {  			compatible = "ti,omap4-uart";  			reg = <0x4ae2b000 0x100>; -			interrupts = <GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 221 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart10";  			clock-frequency = <48000000>;  			status = "disabled"; diff --git a/arch/arm/boot/dts/dra72-evm.dts b/arch/arm/boot/dts/dra72-evm.dts index 514702348818..41074288adfa 100644 --- a/arch/arm/boot/dts/dra72-evm.dts +++ b/arch/arm/boot/dts/dra72-evm.dts @@ -19,6 +19,126 @@  	};  }; +&dra7_pmx_core { +	i2c1_pins: pinmux_i2c1_pins { +		pinctrl-single,pins = < +			0x400 (PIN_INPUT | MUX_MODE0) /* i2c1_sda.i2c1_sda */ +			0x404 (PIN_INPUT | MUX_MODE0) /* i2c1_scl.i2c1_scl */ +		>; +	}; +}; + +&i2c1 { +	status = "okay"; +	pinctrl-names = "default"; +	pinctrl-0 = <&i2c1_pins>; +	clock-frequency = <400000>; + +	tps65917: tps65917@58 { +		compatible = "ti,tps65917"; +		reg = <0x58>; + +		interrupts = <GIC_SPI 2 IRQ_TYPE_NONE>;  /* IRQ_SYS_1N */ +		interrupt-parent = <&gic>; +		interrupt-controller; +		#interrupt-cells = <2>; + +		ti,system-power-controller; + +		tps65917_pmic { +			compatible = "ti,tps65917-pmic"; + +			regulators { +				smps1_reg: smps1 { +					/* VDD_MPU */ +					regulator-name = "smps1"; +					regulator-min-microvolt = <850000>; +					regulator-max-microvolt = <1250000>; +					regulator-always-on; +					regulator-boot-on; +				}; + +				smps2_reg: smps2 { +					/* VDD_CORE */ +					regulator-name = "smps2"; +					regulator-min-microvolt = <850000>; +					regulator-max-microvolt = <1030000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				smps3_reg: smps3 { +					/* VDD_GPU IVA DSPEVE */ +					regulator-name = "smps3"; +					regulator-min-microvolt = <850000>; +					regulator-max-microvolt = <1250000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				smps4_reg: smps4 { +					/* VDDS1V8 */ +					regulator-name = "smps4"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <1800000>; +					regulator-always-on; +					regulator-boot-on; +				}; + +				smps5_reg: smps5 { +					/* VDD_DDR */ +					regulator-name = "smps5"; +					regulator-min-microvolt = <1350000>; +					regulator-max-microvolt = <1350000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				ldo1_reg: ldo1 { +					/* LDO1_OUT --> SDIO  */ +					regulator-name = "ldo1"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <3300000>; +					regulator-boot-on; +				}; + +				ldo2_reg: ldo2 { +					/* LDO2_OUT --> TP1017 (UNUSED)  */ +					regulator-name = "ldo2"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <3300000>; +				}; + +				ldo3_reg: ldo3 { +					/* VDDA_1V8_PHY */ +					regulator-name = "ldo3"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <1800000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				ldo5_reg: ldo5 { +					/* VDDA_1V8_PLL */ +					regulator-name = "ldo5"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <1800000>; +					regulator-always-on; +					regulator-boot-on; +				}; + +				ldo4_reg: ldo4 { +					/* VDDA_3V_USB: VDDA_USBHS33 */ +					regulator-name = "ldo4"; +					regulator-min-microvolt = <3300000>; +					regulator-max-microvolt = <3300000>; +					regulator-boot-on; +				}; +			}; +		}; +	}; +}; +  &uart1 {  	status = "okay";  }; diff --git a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi index 6d6d23c83d30..adadaf97ac01 100644 --- a/arch/arm/boot/dts/exynos4412-odroid-common.dtsi +++ b/arch/arm/boot/dts/exynos4412-odroid-common.dtsi @@ -134,6 +134,8 @@  	i2c@13860000 {  		pinctrl-0 = <&i2c0_bus>;  		pinctrl-names = "default"; +		samsung,i2c-sda-delay = <100>; +		samsung,i2c-max-bus-freq = <400000>;  		status = "okay";  		usb3503: usb3503@08 { @@ -148,6 +150,10 @@  		max77686: pmic@09 {  			compatible = "maxim,max77686"; +			interrupt-parent = <&gpx3>; +			interrupts = <2 0>; +			pinctrl-names = "default"; +			pinctrl-0 = <&max77686_irq>;  			reg = <0x09>;  			#clock-cells = <1>; @@ -368,4 +374,11 @@  		samsung,pins = "gpx1-3";  		samsung,pin-pud = <0>;  	}; + +	max77686_irq: max77686-irq { +		samsung,pins = "gpx3-2"; +		samsung,pin-function = <0>; +		samsung,pin-pud = <0>; +		samsung,pin-drv = <0>; +	};  }; diff --git a/arch/arm/boot/dts/imx1-ads.dts b/arch/arm/boot/dts/imx1-ads.dts new file mode 100644 index 000000000000..af4eee5794aa --- /dev/null +++ b/arch/arm/boot/dts/imx1-ads.dts @@ -0,0 +1,152 @@ +/* + * Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +#include "imx1.dtsi" + +/ { +	model = "Freescale MX1 ADS"; +	compatible = "fsl,imx1ads", "fsl,imx1"; + +	chosen { +		stdout-path = &uart1; +	}; + +	memory { +		reg = <0x08000000 0x04000000>; +	}; + +	clocks { +		#address-cells = <1>; +		#size-cells = <0>; + +		clk32 { +			compatible = "fsl,imx-clk32", "fixed-clock"; +			#clock-cells = <0>; +			clock-frequency = <32000>; +		}; +	}; +}; + +&cspi1 { +	pinctrl-0 = <&pinctrl_cspi1>; +	fsl,spi-num-chipselects = <1>; +	cs-gpios = <&gpio3 15 GPIO_ACTIVE_LOW>; +	status = "okay"; +}; + +&i2c { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c>; +	status = "okay"; + +	extgpio0: pcf8575@22 { +		compatible = "nxp,pcf8575"; +		reg = <0x22>; +		gpio-controller; +		#gpio-cells = <2>; +	}; + +	extgpio1: pcf8575@24 { +		compatible = "nxp,pcf8575"; +		reg = <0x24>; +		gpio-controller; +		#gpio-cells = <2>; +	}; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1>; +	fsl,uart-has-rtscts; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	fsl,uart-has-rtscts; +	status = "okay"; +}; + +&weim { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_weim>; +	status = "okay"; + +	nor: nor@0,0 { +		compatible = "cfi-flash"; +		reg = <0 0x00000000 0x02000000>; +		bank-width = <4>; +		fsl,weim-cs-timing = <0x00003e00 0x00000801>; +		#address-cells = <1>; +		#size-cells = <1>; +	}; +}; + +&iomuxc { +	imx1-ads { +		pinctrl_cspi1: cspi1grp { +			fsl,pins = < +				MX1_PAD_SPI1_MISO__SPI1_MISO	0x0 +				MX1_PAD_SPI1_MOSI__SPI1_MOSI	0x0 +				MX1_PAD_SPI1_RDY__SPI1_RDY	0x0 +				MX1_PAD_SPI1_SCLK__SPI1_SCLK	0x0 +				MX1_PAD_SPI1_SS__GPIO3_15	0x0 +			>; +		}; + +		pinctrl_i2c: i2cgrp { +			fsl,pins = < +				MX1_PAD_I2C_SCL__I2C_SCL	0x0 +				MX1_PAD_I2C_SDA__I2C_SDA	0x0 +			>; +		}; + +		pinctrl_uart1: uart1grp { +			fsl,pins = < +				MX1_PAD_UART1_TXD__UART1_TXD	0x0 +				MX1_PAD_UART1_RXD__UART1_RXD	0x0 +				MX1_PAD_UART1_CTS__UART1_CTS	0x0 +				MX1_PAD_UART1_RTS__UART1_RTS	0x0 +			>; +		}; + +		pinctrl_uart2: uart2grp { +			fsl,pins = < +				MX1_PAD_UART2_TXD__UART2_TXD	0x0 +				MX1_PAD_UART2_RXD__UART2_RXD	0x0 +				MX1_PAD_UART2_CTS__UART2_CTS	0x0 +				MX1_PAD_UART2_RTS__UART2_RTS	0x0 +			>; +		}; + +		pinctrl_weim: weimgrp { +			fsl,pins = < +				MX1_PAD_A0__A0			0x0 +				MX1_PAD_A16__A16		0x0 +				MX1_PAD_A17__A17		0x0 +				MX1_PAD_A18__A18		0x0 +				MX1_PAD_A19__A19		0x0 +				MX1_PAD_A20__A20		0x0 +				MX1_PAD_A21__A21		0x0 +				MX1_PAD_A22__A22		0x0 +				MX1_PAD_A23__A23		0x0 +				MX1_PAD_A24__A24		0x0 +				MX1_PAD_BCLK__BCLK		0x0 +				MX1_PAD_CS4__CS4		0x0 +				MX1_PAD_DTACK__DTACK		0x0 +				MX1_PAD_ECB__ECB		0x0 +				MX1_PAD_LBA__LBA		0x0 +			>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/imx1-apf9328.dts b/arch/arm/boot/dts/imx1-apf9328.dts new file mode 100644 index 000000000000..07d92fb40e6f --- /dev/null +++ b/arch/arm/boot/dts/imx1-apf9328.dts @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +#include "imx1.dtsi" + +/ { +	model = "Armadeus APF9328"; +	compatible = "armadeus,imx1-apf9328", "fsl,imx1"; + +	chosen { +		stdout-path = &uart1; +	}; + +	memory { +		reg = <0x08000000 0x00800000>; +	}; +}; + +&i2c { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c>; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1>; +	fsl,uart-has-rtscts; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	fsl,uart-has-rtscts; +	status = "okay"; +}; + +&weim { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_weim>; +	status = "okay"; + +	nor: nor@0,0 { +		compatible = "cfi-flash"; +		reg = <0 0x00000000 0x02000000>; +		bank-width = <2>; +		fsl,weim-cs-timing = <0x00330e04 0x00000d01>; +		#address-cells = <1>; +		#size-cells = <1>; +	}; + +	eth: eth@4,c00000 { +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_eth>; +		compatible = "davicom,dm9000"; +		reg = < +			4 0x00c00000 0x2 +			4 0x00c00002 0x2 +		>; +		interrupt-parent = <&gpio2>; +		interrupts = <14 IRQ_TYPE_LEVEL_LOW>; +		fsl,weim-cs-timing = <0x0000c700 0x19190d01>; +	}; +}; + +&iomuxc { +	imx1-apf9328 { +		pinctrl_eth: ethgrp { +			fsl,pins = < +				MX1_PAD_SIM_SVEN__GPIO2_14	0x0 +			>; +		}; + +		pinctrl_i2c: i2cgrp { +			fsl,pins = < +				MX1_PAD_I2C_SCL__I2C_SCL	0x0 +				MX1_PAD_I2C_SDA__I2C_SDA	0x0 +			>; +		}; + +		pinctrl_uart1: uart1grp { +			fsl,pins = < +				MX1_PAD_UART1_TXD__UART1_TXD	0x0 +				MX1_PAD_UART1_RXD__UART1_RXD	0x0 +				MX1_PAD_UART1_CTS__UART1_CTS	0x0 +				MX1_PAD_UART1_RTS__UART1_RTS	0x0 +			>; +		}; + +		pinctrl_uart2: uart2grp { +			fsl,pins = < +				MX1_PAD_UART2_TXD__UART2_TXD	0x0 +				MX1_PAD_UART2_RXD__UART2_RXD	0x0 +				MX1_PAD_UART2_CTS__UART2_CTS	0x0 +				MX1_PAD_UART2_RTS__UART2_RTS	0x0 +			>; +		}; + +		pinctrl_weim: weimgrp { +			fsl,pins = < +				MX1_PAD_A0__A0			0x0 +				MX1_PAD_A16__A16		0x0 +				MX1_PAD_A17__A17		0x0 +				MX1_PAD_A18__A18		0x0 +				MX1_PAD_A19__A19		0x0 +				MX1_PAD_A20__A20		0x0 +				MX1_PAD_A21__A21		0x0 +				MX1_PAD_A22__A22		0x0 +				MX1_PAD_A23__A23		0x0 +				MX1_PAD_A24__A24		0x0 +				MX1_PAD_BCLK__BCLK		0x0 +				MX1_PAD_CS4__CS4		0x0 +				MX1_PAD_DTACK__DTACK		0x0 +				MX1_PAD_ECB__ECB		0x0 +				MX1_PAD_LBA__LBA		0x0 +			>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/imx1-pinfunc.h b/arch/arm/boot/dts/imx1-pinfunc.h new file mode 100644 index 000000000000..22bec8b87680 --- /dev/null +++ b/arch/arm/boot/dts/imx1-pinfunc.h @@ -0,0 +1,302 @@ +/* + * Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#ifndef __DTS_IMX1_PINFUNC_H +#define __DTS_IMX1_PINFUNC_H + +/* + * The pin function ID is a tuple of + * <pin mux_id> + * mux_id consists of + * function + (direction << 2) + (gpio_oconf << 4) + (gpio_iconfa << 8) + (gpio_iconfb << 10) + * + * function:      0 - Primary function + *                1 - Alternate function + *                2 - GPIO + * direction:     0 - Input + *                1 - Output + * gpio_oconf:    0 - A_IN + *                1 - B_IN + *                2 - A_OUT + *                3 - Data Register + * gpio_iconfa/b: 0 - GPIO_IN + *                1 - Interrupt Status Register + *                2 - 0 + *                3 - 1 + * + * 'pin' is an integer between 0 and 0xbf. i.MX1 has 4 ports with 32 configurable + * configurable pins each. 'pin' is PORT * 32 + PORT_PIN, PORT_PIN is the pin + * number on the specific port (between 0 and 31). + */ + +#define MX1_PAD_A24__A24			0x00 0x004 +#define MX1_PAD_A24__GPIO1_0			0x00 0x032 +#define MX1_PAD_A24__SPI2_CLK			0x00 0x006 +#define MX1_PAD_TIN__TIN			0x01 0x000 +#define MX1_PAD_TIN__GPIO1_1			0x01 0x032 +#define MX1_PAD_TIN__SPI2_RXD			0x01 0x022 +#define MX1_PAD_PWMO__PWMO			0x02 0x004 +#define MX1_PAD_PWMO__GPIO1_2			0x02 0x032 +#define MX1_PAD_CSI_MCLK__CSI_MCLK		0x03 0x004 +#define MX1_PAD_CSI_MCLK__GPIO1_3		0x03 0x032 +#define MX1_PAD_CSI_D0__CSI_D0			0x04 0x000 +#define MX1_PAD_CSI_D0__GPIO1_4			0x04 0x032 +#define MX1_PAD_CSI_D1__CSI_D1			0x05 0x000 +#define MX1_PAD_CSI_D1__GPIO1_5			0x05 0x032 +#define MX1_PAD_CSI_D2__CSI_D2			0x06 0x000 +#define MX1_PAD_CSI_D2__GPIO1_6			0x06 0x032 +#define MX1_PAD_CSI_D3__CSI_D3			0x07 0x000 +#define MX1_PAD_CSI_D3__GPIO1_7			0x07 0x032 +#define MX1_PAD_CSI_D4__CSI_D4			0x08 0x000 +#define MX1_PAD_CSI_D4__GPIO1_8			0x08 0x032 +#define MX1_PAD_CSI_D5__CSI_D5			0x09 0x000 +#define MX1_PAD_CSI_D5__GPIO1_9			0x09 0x032 +#define MX1_PAD_CSI_D6__CSI_D6			0x0a 0x000 +#define MX1_PAD_CSI_D6__GPIO1_10		0x0a 0x032 +#define MX1_PAD_CSI_D7__CSI_D7			0x0b 0x000 +#define MX1_PAD_CSI_D7__GPIO1_11		0x0b 0x032 +#define MX1_PAD_CSI_VSYNC__CSI_VSYNC		0x0c 0x000 +#define MX1_PAD_CSI_VSYNC__GPIO1_12		0x0c 0x032 +#define MX1_PAD_CSI_HSYNC__CSI_HSYNC		0x0d 0x000 +#define MX1_PAD_CSI_HSYNC__GPIO1_13		0x0d 0x032 +#define MX1_PAD_CSI_PIXCLK__CSI_PIXCLK		0x0e 0x000 +#define MX1_PAD_CSI_PIXCLK__GPIO1_14		0x0e 0x032 +#define MX1_PAD_I2C_SDA__I2C_SDA		0x0f 0x000 +#define MX1_PAD_I2C_SDA__GPIO1_15		0x0f 0x032 +#define MX1_PAD_I2C_SCL__I2C_SCL		0x10 0x004 +#define MX1_PAD_I2C_SCL__GPIO1_16		0x10 0x032 +#define MX1_PAD_DTACK__DTACK			0x11 0x000 +#define MX1_PAD_DTACK__GPIO1_17			0x11 0x032 +#define MX1_PAD_DTACK__SPI2_SS			0x11 0x002 +#define MX1_PAD_DTACK__A25			0x11 0x016 +#define MX1_PAD_BCLK__BCLK			0x12 0x004 +#define MX1_PAD_BCLK__GPIO1_18			0x12 0x032 +#define MX1_PAD_LBA__LBA			0x13 0x004 +#define MX1_PAD_LBA__GPIO1_19			0x13 0x032 +#define MX1_PAD_ECB__ECB			0x14 0x000 +#define MX1_PAD_ECB__GPIO1_20			0x14 0x032 +#define MX1_PAD_A0__A0				0x15 0x004 +#define MX1_PAD_A0__GPIO1_21			0x15 0x032 +#define MX1_PAD_CS4__CS4			0x16 0x004 +#define MX1_PAD_CS4__GPIO1_22			0x16 0x032 +#define MX1_PAD_CS5__CS5			0x17 0x004 +#define MX1_PAD_CS5__GPIO1_23			0x17 0x032 +#define MX1_PAD_A16__A16			0x18 0x004 +#define MX1_PAD_A16__GPIO1_24			0x18 0x032 +#define MX1_PAD_A17__A17			0x19 0x004 +#define MX1_PAD_A17__GPIO1_25			0x19 0x032 +#define MX1_PAD_A18__A18			0x1a 0x004 +#define MX1_PAD_A18__GPIO1_26			0x1a 0x032 +#define MX1_PAD_A19__A19			0x1b 0x004 +#define MX1_PAD_A19__GPIO1_27			0x1b 0x032 +#define MX1_PAD_A20__A20			0x1c 0x004 +#define MX1_PAD_A20__GPIO1_28			0x1c 0x032 +#define MX1_PAD_A21__A21			0x1d 0x004 +#define MX1_PAD_A21__GPIO1_29			0x1d 0x032 +#define MX1_PAD_A22__A22			0x1e 0x004 +#define MX1_PAD_A22__GPIO1_30			0x1e 0x032 +#define MX1_PAD_A23__A23			0x1f 0x004 +#define MX1_PAD_A23__GPIO1_31			0x1f 0x032 +#define MX1_PAD_SD_DAT0__SD_DAT0		0x28 0x000 +#define MX1_PAD_SD_DAT0__MS_PI0			0x28 0x001 +#define MX1_PAD_SD_DAT0__GPIO2_8		0x28 0x032 +#define MX1_PAD_SD_DAT1__SD_DAT1		0x29 0x000 +#define MX1_PAD_SD_DAT1__MS_PI1			0x29 0x001 +#define MX1_PAD_SD_DAT1__GPIO2_9		0x29 0x032 +#define MX1_PAD_SD_DAT2__SD_DAT2		0x2a 0x000 +#define MX1_PAD_SD_DAT2__MS_SCLKI		0x2a 0x001 +#define MX1_PAD_SD_DAT2__GPIO2_10		0x2a 0x032 +#define MX1_PAD_SD_DAT3__SD_DAT3		0x2b 0x000 +#define MX1_PAD_SD_DAT3__MS_SDIO		0x2b 0x001 +#define MX1_PAD_SD_DAT3__GPIO2_11		0x2b 0x032 +#define MX1_PAD_SD_SCLK__SD_SCLK		0x2c 0x004 +#define MX1_PAD_SD_SCLK__MS_SCLKO		0x2c 0x005 +#define MX1_PAD_SD_SCLK__GPIO2_12		0x2c 0x032 +#define MX1_PAD_SD_CMD__SD_CMD			0x2d 0x000 +#define MX1_PAD_SD_CMD__MS_BS			0x2d 0x005 +#define MX1_PAD_SD_CMD__GPIO2_13		0x2d 0x032 +#define MX1_PAD_SIM_SVEN__SIM_SVEN		0x2e 0x004 +#define MX1_PAD_SIM_SVEN__SSI_RXFS		0x2e 0x001 +#define MX1_PAD_SIM_SVEN__GPIO2_14		0x2e 0x032 +#define MX1_PAD_SIM_PD__SIM_PD			0x2f 0x000 +#define MX1_PAD_SIM_PD__SSI_RXCLK		0x2f 0x001 +#define MX1_PAD_SIM_PD__GPIO2_15		0x2f 0x032 +#define MX1_PAD_SIM_TX__SIM_TX			0x30 0x000 +#define MX1_PAD_SIM_TX__SSI_RXDAT		0x30 0x001 +#define MX1_PAD_SIM_TX__GPIO2_16		0x30 0x032 +#define MX1_PAD_SIM_RX__SIM_RX			0x31 0x000 +#define MX1_PAD_SIM_RX__SSI_TXDAT		0x31 0x005 +#define MX1_PAD_SIM_RX__GPIO2_17		0x31 0x032 +#define MX1_PAD_SIM_RST__SIM_RST		0x32 0x004 +#define MX1_PAD_SIM_RST__SSI_TXFS		0x32 0x001 +#define MX1_PAD_SIM_RST__GPIO2_18		0x32 0x032 +#define MX1_PAD_SIM_CLK__SIM_CLK		0x33 0x004 +#define MX1_PAD_SIM_CLK__SSI_TXCLK		0x33 0x001 +#define MX1_PAD_SIM_CLK__GPIO2_19		0x33 0x032 +#define MX1_PAD_USBD_AFE__USBD_AFE		0x34 0x004 +#define MX1_PAD_USBD_AFE__GPIO2_20		0x34 0x032 +#define MX1_PAD_USBD_OE__USBD_OE		0x35 0x004 +#define MX1_PAD_USBD_OE__GPIO2_21		0x35 0x032 +#define MX1_PAD_USBD_RCV__USBD_RCV		0x36 0x000 +#define MX1_PAD_USBD_RCV__GPIO2_22		0x36 0x032 +#define MX1_PAD_USBD_SUSPND__USBD_SUSPND	0x37 0x004 +#define MX1_PAD_USBD_SUSPND__GPIO2_23		0x37 0x032 +#define MX1_PAD_USBD_VP__USBD_VP		0x38 0x000 +#define MX1_PAD_USBD_VP__GPIO2_24		0x38 0x032 +#define MX1_PAD_USBD_VM__USBD_VM		0x39 0x000 +#define MX1_PAD_USBD_VM__GPIO2_25		0x39 0x032 +#define MX1_PAD_USBD_VPO__USBD_VPO		0x3a 0x004 +#define MX1_PAD_USBD_VPO__GPIO2_26		0x3a 0x032 +#define MX1_PAD_USBD_VMO__USBD_VMO		0x3b 0x004 +#define MX1_PAD_USBD_VMO__GPIO2_27		0x3b 0x032 +#define MX1_PAD_UART2_CTS__UART2_CTS		0x3c 0x004 +#define MX1_PAD_UART2_CTS__GPIO2_28		0x3c 0x032 +#define MX1_PAD_UART2_RTS__UART2_RTS		0x3d 0x000 +#define MX1_PAD_UART2_RTS__GPIO2_29		0x3d 0x032 +#define MX1_PAD_UART2_TXD__UART2_TXD		0x3e 0x004 +#define MX1_PAD_UART2_TXD__GPIO2_30		0x3e 0x032 +#define MX1_PAD_UART2_RXD__UART2_RXD		0x3f 0x000 +#define MX1_PAD_UART2_RXD__GPIO2_31		0x3f 0x032 +#define MX1_PAD_SSI_RXFS__SSI_RXFS		0x43 0x000 +#define MX1_PAD_SSI_RXFS__GPIO3_3		0x43 0x032 +#define MX1_PAD_SSI_RXCLK__SSI_RXCLK		0x44 0x000 +#define MX1_PAD_SSI_RXCLK__GPIO3_4		0x44 0x032 +#define MX1_PAD_SSI_RXDAT__SSI_RXDAT		0x45 0x000 +#define MX1_PAD_SSI_RXDAT__GPIO3_5		0x45 0x032 +#define MX1_PAD_SSI_TXDAT__SSI_TXDAT		0x46 0x004 +#define MX1_PAD_SSI_TXDAT__GPIO3_6		0x46 0x032 +#define MX1_PAD_SSI_TXFS__SSI_TXFS		0x47 0x000 +#define MX1_PAD_SSI_TXFS__GPIO3_7		0x47 0x032 +#define MX1_PAD_SSI_TXCLK__SSI_TXCLK		0x48 0x000 +#define MX1_PAD_SSI_TXCLK__GPIO3_8		0x48 0x032 +#define MX1_PAD_UART1_CTS__UART1_CTS		0x49 0x004 +#define MX1_PAD_UART1_CTS__GPIO3_9		0x49 0x032 +#define MX1_PAD_UART1_RTS__UART1_RTS		0x4a 0x000 +#define MX1_PAD_UART1_RTS__GPIO3_10		0x4a 0x032 +#define MX1_PAD_UART1_TXD__UART1_TXD		0x4b 0x004 +#define MX1_PAD_UART1_TXD__GPIO3_11		0x4b 0x032 +#define MX1_PAD_UART1_RXD__UART1_RXD		0x4c 0x000 +#define MX1_PAD_UART1_RXD__GPIO3_12		0x4c 0x032 +#define MX1_PAD_SPI1_RDY__SPI1_RDY		0x4d 0x000 +#define MX1_PAD_SPI1_RDY__GPIO3_13		0x4d 0x032 +#define MX1_PAD_SPI1_SCLK__SPI1_SCLK		0x4e 0x004 +#define MX1_PAD_SPI1_SCLK__GPIO3_14		0x4e 0x032 +#define MX1_PAD_SPI1_SS__SPI1_SS		0x4f 0x000 +#define MX1_PAD_SPI1_SS__GPIO3_15		0x4f 0x032 +#define MX1_PAD_SPI1_MISO__SPI1_MISO		0x50 0x000 +#define MX1_PAD_SPI1_MISO__GPIO3_16		0x50 0x032 +#define MX1_PAD_SPI1_MOSI__SPI1_MOSI		0x51 0x004 +#define MX1_PAD_SPI1_MOSI__GPIO3_17		0x51 0x032 +#define MX1_PAD_BT13__BT13			0x53 0x004 +#define MX1_PAD_BT13__SSI2_RXCLK		0x53 0x001 +#define MX1_PAD_BT13__GPIO3_19			0x53 0x032 +#define MX1_PAD_BT12__BT12			0x54 0x004 +#define MX1_PAD_BT12__SSI2_TXFS			0x54 0x001 +#define MX1_PAD_BT12__GPIO3_20			0x54 0x032 +#define MX1_PAD_BT11__BT11			0x55 0x004 +#define MX1_PAD_BT11__SSI2_TXCLK		0x55 0x001 +#define MX1_PAD_BT11__GPIO3_21			0x55 0x032 +#define MX1_PAD_BT10__BT10			0x56 0x004 +#define MX1_PAD_BT10__SSI2_TX			0x56 0x001 +#define MX1_PAD_BT10__GPIO3_22			0x56 0x032 +#define MX1_PAD_BT9__BT9			0x57 0x004 +#define MX1_PAD_BT9__SSI2_RX			0x57 0x001 +#define MX1_PAD_BT9__GPIO3_23			0x57 0x032 +#define MX1_PAD_BT8__BT8			0x58 0x004 +#define MX1_PAD_BT8__SSI2_RXFS			0x58 0x001 +#define MX1_PAD_BT8__GPIO3_24			0x58 0x032 +#define MX1_PAD_BT8__UART3_RI			0x58 0x016 +#define MX1_PAD_BT7__BT7			0x59 0x004 +#define MX1_PAD_BT7__GPIO3_25			0x59 0x032 +#define MX1_PAD_BT7__UART3_DSR			0x59 0x016 +#define MX1_PAD_BT6__BT6			0x5a 0x004 +#define MX1_PAD_BT6__GPIO3_26			0x5a 0x032 +#define MX1_PAD_BT6__SPI2_SS3			0x5a 0x016 +#define MX1_PAD_BT6__UART3_DTR			0x5a 0x022 +#define MX1_PAD_BT5__BT5			0x5b 0x000 +#define MX1_PAD_BT5__GPIO3_27			0x5b 0x032 +#define MX1_PAD_BT5__UART3_DCD			0x5b 0x016 +#define MX1_PAD_BT4__BT4			0x5c 0x000 +#define MX1_PAD_BT4__GPIO3_28			0x5c 0x032 +#define MX1_PAD_BT4__UART3_CTS			0x5c 0x016 +#define MX1_PAD_BT3__BT3			0x5d 0x000 +#define MX1_PAD_BT3__GPIO3_29			0x5d 0x032 +#define MX1_PAD_BT3__UART3_RTS			0x5d 0x022 +#define MX1_PAD_BT2__BT2			0x5e 0x004 +#define MX1_PAD_BT2__GPIO3_30			0x5e 0x032 +#define MX1_PAD_BT2__UART3_TX			0x5e 0x016 +#define MX1_PAD_BT1__BT1			0x5f 0x000 +#define MX1_PAD_BT1__GPIO3_31			0x5f 0x032 +#define MX1_PAD_BT1__UART3_RX			0x5f 0x022 +#define MX1_PAD_LSCLK__LSCLK			0x66 0x004 +#define MX1_PAD_LSCLK__GPIO4_6			0x66 0x032 +#define MX1_PAD_REV__REV			0x67 0x004 +#define MX1_PAD_REV__UART2_DTR			0x67 0x001 +#define MX1_PAD_REV__GPIO4_7			0x67 0x032 +#define MX1_PAD_REV__SPI2_CLK			0x67 0x006 +#define MX1_PAD_CLS__CLS			0x68 0x004 +#define MX1_PAD_CLS__UART2_DCD			0x68 0x005 +#define MX1_PAD_CLS__GPIO4_8			0x68 0x032 +#define MX1_PAD_CLS__SPI2_SS			0x68 0x002 +#define MX1_PAD_PS__PS				0x69 0x004 +#define MX1_PAD_PS__UART2_RI			0x69 0x005 +#define MX1_PAD_PS__GPIO4_9			0x69 0x032 +#define MX1_PAD_PS__SPI2_RXD			0x69 0x022 +#define MX1_PAD_SPL_SPR__SPL_SPR		0x6a 0x004 +#define MX1_PAD_SPL_SPR__UART2_DSR		0x6a 0x005 +#define MX1_PAD_SPL_SPR__GPIO4_10		0x6a 0x032 +#define MX1_PAD_SPL_SPR__SPI2_TXD		0x6a 0x006 +#define MX1_PAD_CONTRAST__CONTRAST		0x6b 0x004 +#define MX1_PAD_CONTRAST__GPIO4_11		0x6b 0x032 +#define MX1_PAD_CONTRAST__SPI2_SS2		0x6b 0x012 +#define MX1_PAD_ACD_OE__ACD_OE			0x6c 0x004 +#define MX1_PAD_ACD_OE__GPIO4_12		0x6c 0x032 +#define MX1_PAD_LP_HSYNC__LP_HSYNC		0x6d 0x004 +#define MX1_PAD_LP_HSYNC__GPIO4_13		0x6d 0x032 +#define MX1_PAD_FLM_VSYNC__FLM_VSYNC		0x6e 0x004 +#define MX1_PAD_FLM_VSYNC__GPIO4_14		0x6e 0x032 +#define MX1_PAD_LD0__LD0			0x6f 0x004 +#define MX1_PAD_LD0__GPIO4_15			0x6f 0x032 +#define MX1_PAD_LD1__LD1			0x70 0x004 +#define MX1_PAD_LD1__GPIO4_16			0x70 0x032 +#define MX1_PAD_LD2__LD2			0x71 0x004 +#define MX1_PAD_LD2__GPIO4_17			0x71 0x032 +#define MX1_PAD_LD3__LD3			0x72 0x004 +#define MX1_PAD_LD3__GPIO4_18			0x72 0x032 +#define MX1_PAD_LD4__LD4			0x73 0x004 +#define MX1_PAD_LD4__GPIO4_19			0x73 0x032 +#define MX1_PAD_LD5__LD5			0x74 0x004 +#define MX1_PAD_LD5__GPIO4_20			0x74 0x032 +#define MX1_PAD_LD6__LD6			0x75 0x004 +#define MX1_PAD_LD6__GPIO4_21			0x75 0x032 +#define MX1_PAD_LD7__LD7			0x76 0x004 +#define MX1_PAD_LD7__GPIO4_22			0x76 0x032 +#define MX1_PAD_LD8__LD8			0x77 0x004 +#define MX1_PAD_LD8__GPIO4_23			0x77 0x032 +#define MX1_PAD_LD9__LD9			0x78 0x004 +#define MX1_PAD_LD9__GPIO4_24			0x78 0x032 +#define MX1_PAD_LD10__LD10			0x79 0x004 +#define MX1_PAD_LD10__GPIO4_25			0x79 0x032 +#define MX1_PAD_LD11__LD11			0x7a 0x004 +#define MX1_PAD_LD11__GPIO4_26			0x7a 0x032 +#define MX1_PAD_LD12__LD12			0x7b 0x004 +#define MX1_PAD_LD12__GPIO4_27			0x7b 0x032 +#define MX1_PAD_LD13__LD13			0x7c 0x004 +#define MX1_PAD_LD13__GPIO4_28			0x7c 0x032 +#define MX1_PAD_LD14__LD14			0x7d 0x004 +#define MX1_PAD_LD14__GPIO4_29			0x7d 0x032 +#define MX1_PAD_LD15__LD15			0x7e 0x004 +#define MX1_PAD_LD15__GPIO4_30			0x7e 0x032 +#define MX1_PAD_TMR2OUT__TMR2OUT		0x7f 0x000 +#define MX1_PAD_TMR2OUT__GPIO4_31		0x7f 0x032 +#define MX1_PAD_TMR2OUT__SPI2_TXD		0x7f 0x006 + +#endif diff --git a/arch/arm/boot/dts/imx1.dtsi b/arch/arm/boot/dts/imx1.dtsi new file mode 100644 index 000000000000..22f5d1db5b31 --- /dev/null +++ b/arch/arm/boot/dts/imx1.dtsi @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include "skeleton.dtsi" +#include "imx1-pinfunc.h" + +#include <dt-bindings/clock/imx1-clock.h> +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/interrupt-controller/irq.h> + +/ { +	aliases { +		gpio0 = &gpio1; +		gpio1 = &gpio2; +		gpio2 = &gpio3; +		gpio3 = &gpio4; +		i2c0 = &i2c; +		serial0 = &uart1; +		serial1 = &uart2; +		serial2 = &uart3; +		spi0 = &cspi1; +		spi1 = &cspi2; +	}; + +	aitc: aitc-interrupt-controller@00223000 { +		compatible = "fsl,imx1-aitc", "fsl,avic"; +		interrupt-controller; +		#interrupt-cells = <1>; +		reg = <0x00223000 0x1000>; +	}; + +	cpus { +		#size-cells = <0>; +		#address-cells = <1>; + +		cpu: cpu@0 { +			device_type = "cpu"; +			compatible = "arm,arm920t"; +			operating-points = <200000 1900000>; +			clock-latency = <62500>; +			clocks = <&clks IMX1_CLK_MCU>; +			voltage-tolerance = <5>; +		}; +	}; + +	soc { +		#address-cells = <1>; +		#size-cells = <1>; +		compatible = "simple-bus"; +		interrupt-parent = <&aitc>; +		ranges; + +		aipi@00200000 { +			compatible = "fsl,aipi-bus", "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			reg = <0x00200000 0x10000>; +			ranges; + +			gpt1: timer@00202000 { +				compatible = "fsl,imx1-gpt"; +				reg = <0x00202000 0x1000>; +				interrupts = <59>; +				clocks = <&clks IMX1_CLK_HCLK>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +			}; + +			gpt2: timer@00203000 { +				compatible = "fsl,imx1-gpt"; +				reg = <0x00203000 0x1000>; +				interrupts = <58>; +				clocks = <&clks IMX1_CLK_HCLK>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +			}; + +			fb: fb@00205000 { +				compatible = "fsl,imx1-fb"; +				reg = <0x00205000 0x1000>; +				interrupts = <14>; +				clocks = <&clks IMX1_CLK_DUMMY>, +					 <&clks IMX1_CLK_DUMMY>, +					 <&clks IMX1_CLK_PER2>; +				clock-names = "ipg", "ahb", "per"; +				status = "disabled"; +			}; + +			uart1: serial@00206000 { +				compatible = "fsl,imx1-uart"; +				reg = <0x00206000 0x1000>; +				interrupts = <30 29 26>; +				clocks = <&clks IMX1_CLK_HCLK>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +				status = "disabled"; +			}; + +			uart2: serial@00207000 { +				compatible = "fsl,imx1-uart"; +				reg = <0x00207000 0x1000>; +				interrupts = <24 23 20>; +				clocks = <&clks IMX1_CLK_HCLK>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +				status = "disabled"; +			}; + +			pwm: pwm@00208000 { +				#pwm-cells = <2>; +				compatible = "fsl,imx1-pwm"; +				reg = <0x00208000 0x1000>; +				interrupts = <34>; +				clocks = <&clks IMX1_CLK_DUMMY>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +			}; + +			dma: dma@00209000 { +				compatible = "fsl,imx1-dma"; +				reg = <0x00209000 0x1000>; +				interrupts = <61 60>; +				clocks = <&clks IMX1_CLK_HCLK>, +					 <&clks IMX1_CLK_DMA_GATE>; +				clock-names = "ipg", "ahb"; +				#dma-cells = <1>; +			}; + +			uart3: serial@0020a000 { +				compatible = "fsl,imx1-uart"; +				reg = <0x0020a000 0x1000>; +				interrupts = <54 4 1>; +				clocks = <&clks IMX1_CLK_UART3_GATE>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +				status = "disabled"; +			}; +		}; + +		aipi@00210000 { +			compatible = "fsl,aipi-bus", "simple-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			reg = <0x00210000 0x10000>; +			ranges; + +			cspi1: cspi@00213000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "fsl,imx1-cspi"; +				reg = <0x00213000 0x1000>; +				interrupts = <41>; +				clocks = <&clks IMX1_CLK_DUMMY>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +				status = "disabled"; +			}; + +			i2c: i2c@00217000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "fsl,imx1-i2c"; +				reg = <0x00217000 0x1000>; +				interrupts = <39>; +				clocks = <&clks IMX1_CLK_HCLK>; +				status = "disabled"; +			}; + +			cspi2: cspi@00219000 { +				#address-cells = <1>; +				#size-cells = <0>; +				compatible = "fsl,imx1-cspi"; +				reg = <0x00219000 0x1000>; +				interrupts = <40>; +				clocks = <&clks IMX1_CLK_DUMMY>, +					 <&clks IMX1_CLK_PER1>; +				clock-names = "ipg", "per"; +				status = "disabled"; +			}; + +			clks: ccm@0021b000 { +				compatible = "fsl,imx1-ccm"; +				reg = <0x0021b000 0x1000>; +				#clock-cells = <1>; +			}; + +			iomuxc: iomuxc@0021c000 { +				compatible = "fsl,imx1-iomuxc"; +				reg = <0x0021c000 0x1000>; +				#address-cells = <1>; +				#size-cells = <1>; +				ranges; + +				gpio1: gpio@0021c000 { +					compatible = "fsl,imx1-gpio"; +					reg = <0x0021c000 0x100>; +					interrupts = <11>; +					gpio-controller; +					#gpio-cells = <2>; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				gpio2: gpio@0021c100 { +					compatible = "fsl,imx1-gpio"; +					reg = <0x0021c100 0x100>; +					interrupts = <12>; +					gpio-controller; +					#gpio-cells = <2>; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				gpio3: gpio@0021c200 { +					compatible = "fsl,imx1-gpio"; +					reg = <0x0021c200 0x100>; +					interrupts = <13>; +					gpio-controller; +					#gpio-cells = <2>; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; + +				gpio4: gpio@0021c300 { +					compatible = "fsl,imx1-gpio"; +					reg = <0x0021c300 0x100>; +					interrupts = <62>; +					gpio-controller; +					#gpio-cells = <2>; +					interrupt-controller; +					#interrupt-cells = <2>; +				}; +			}; +		}; + +		weim: weim@00220000 { +			#address-cells = <2>; +			#size-cells = <1>; +			compatible = "fsl,imx1-weim"; +			reg = <0x00220000 0x1000>; +			clocks = <&clks IMX1_CLK_DUMMY>; +			ranges = < +				0 0 0x10000000 0x02000000 +				1 0 0x12000000 0x01000000 +				2 0 0x13000000 0x01000000 +				3 0 0x14000000 0x01000000 +				4 0 0x15000000 0x01000000 +				5 0 0x16000000 0x01000000 +			>; +			status = "disabled"; +		}; + +		esram: esram@00300000 { +			compatible = "mmio-sram"; +			reg = <0x00300000 0x20000>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/imx23-evk.dts b/arch/arm/boot/dts/imx23-evk.dts index a33f66c11b73..57e29977ba06 100644 --- a/arch/arm/boot/dts/imx23-evk.dts +++ b/arch/arm/boot/dts/imx23-evk.dts @@ -60,10 +60,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_24bit_pins_a>;  				lcd-supply = <®_lcd_3v3>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <24>; diff --git a/arch/arm/boot/dts/imx25-pinfunc.h b/arch/arm/boot/dts/imx25-pinfunc.h index 9238a95d8e62..88eebb15da6a 100644 --- a/arch/arm/boot/dts/imx25-pinfunc.h +++ b/arch/arm/boot/dts/imx25-pinfunc.h @@ -247,6 +247,7 @@  #define MX25_PAD_OE_ACD__GPIO_1_25		0x114 0x30c 0x000 0x15 0x000  #define MX25_PAD_CONTRAST__CONTRAST		0x118 0x310 0x000 0x10 0x000 +#define MX25_PAD_CONTRAST__CC4			0x118 0x310 0x000 0x11 0x000  #define MX25_PAD_CONTRAST__PWM4_PWMO		0x118 0x310 0x000 0x14 0x000  #define MX25_PAD_CONTRAST__FEC_CRS		0x118 0x310 0x508 0x15 0x001 @@ -260,6 +261,7 @@  #define MX25_PAD_CSI_D2__CSPI3_MOSI		0x120 0x318 0x000 0x17 0x000  #define MX25_PAD_CSI_D3__CSI_D3			0x124 0x31c 0x000 0x10 0x000 +#define MX25_PAD_CSI_D3__UART5_TXD_MUX		0x124 0x31c 0x000 0x11 0x000  #define MX25_PAD_CSI_D3__GPIO_1_28		0x124 0x31c 0x000 0x15 0x000  #define MX25_PAD_CSI_D3__CSPI3_MISO		0x124 0x31c 0x4b4 0x17 0x001 @@ -269,31 +271,46 @@  #define MX25_PAD_CSI_D4__CSPI3_SCLK		0x128 0x320 0x000 0x17 0x000  #define MX25_PAD_CSI_D5__CSI_D5			0x12c 0x324 0x000 0x10 0x000 +#define MX25_PAD_CSI_D5__UART5_CTS		0x12c 0x324 0x000 0x11 0x001  #define MX25_PAD_CSI_D5__GPIO_1_30		0x12c 0x324 0x000 0x15 0x000  #define MX25_PAD_CSI_D5__CSPI3_RDY		0x12c 0x324 0x000 0x17 0x000  #define MX25_PAD_CSI_D6__CSI_D6			0x130 0x328 0x000 0x10 0x000 +#define MX25_PAD_CSI_D6__SDHC2_CMD		0x130 0x328 0x4e0 0x12 0x001  #define MX25_PAD_CSI_D6__GPIO_1_31		0x130 0x328 0x000 0x15 0x000  #define MX25_PAD_CSI_D7__CSI_D7			0x134 0x32c 0x000 0x10 0x000 +#define MX25_PAD_CSI_D7__SDHC2_DAT_CLK		0x134 0x32C 0x4dc 0x12 0x001  #define MX25_PAD_CSI_D7__GPIO_1_6		0x134 0x32c 0x000 0x15 0x000  #define MX25_PAD_CSI_D8__CSI_D8			0x138 0x330 0x000 0x10 0x000 +#define MX25_PAD_CSI_D8__AUD6_RXC		0x138 0x330 0x000 0x12 0x001  #define MX25_PAD_CSI_D8__GPIO_1_7		0x138 0x330 0x000 0x15 0x000 +#define MX25_PAD_CSI_D8__CSPI3_SS2		0x138 0x330 0x4c4 0x17 0x000  #define MX25_PAD_CSI_D9__CSI_D9			0x13c 0x334 0x000 0x10 0x000 +#define MX25_PAD_CSI_D9__AUD6_RXFS		0x13c 0x334 0x000 0x12 0x001  #define MX25_PAD_CSI_D9__GPIO_4_21		0x13c 0x334 0x000 0x15 0x000 +#define MX25_PAD_CSI_D9__CSPI3_SS3		0x13c 0x334 0x4c8 0x17 0x000  #define MX25_PAD_CSI_MCLK__CSI_MCLK		0x140 0x338 0x000 0x10 0x000 +#define MX25_PAD_CSI_MCLK__AUD6_TXD		0x140 0x338 0x000 0x11 0x001 +#define MX25_PAD_CSI_MCLK__SDHC2_DAT0		0x140 0x338 0x4e4 0x12 0x001  #define MX25_PAD_CSI_MCLK__GPIO_1_8		0x140 0x338 0x000 0x15 0x000  #define MX25_PAD_CSI_VSYNC__CSI_VSYNC		0x144 0x33c 0x000 0x10 0x000 +#define MX25_PAD_CSI_VSYNC__AUD6_RXD		0x144 0x33c 0x000 0x11 0x001 +#define MX25_PAD_CSI_VSYNC__SDHC2_DAT1		0x144 0x33c 0x4e8 0x12 0x001  #define MX25_PAD_CSI_VSYNC__GPIO_1_9		0x144 0x33c 0x000 0x15 0x000  #define MX25_PAD_CSI_HSYNC__CSI_HSYNC		0x148 0x340 0x000 0x10 0x000 +#define MX25_PAD_CSI_HSYNC__AUD6_TXC		0x148 0x340 0x000 0x11 0x001 +#define MX25_PAD_CSI_HSYNC__SDHC2_DAT2		0x148 0x340 0x4ec 0x12 0x001  #define MX25_PAD_CSI_HSYNC__GPIO_1_10		0x148 0x340 0x000 0x15 0x000  #define MX25_PAD_CSI_PIXCLK__CSI_PIXCLK		0x14c 0x344 0x000 0x10 0x000 +#define MX25_PAD_CSI_PIXCLK__AUD6_TXFS		0x14c 0x344 0x000 0x11 0x001 +#define MX25_PAD_CSI_PIXCLK__SDHC2_DAT3		0x14c 0x344 0x4f0 0x12 0x001  #define MX25_PAD_CSI_PIXCLK__GPIO_1_11		0x14c 0x344 0x000 0x15 0x000  #define MX25_PAD_I2C1_CLK__I2C1_CLK		0x150 0x348 0x000 0x10 0x000 @@ -303,18 +320,24 @@  #define MX25_PAD_I2C1_DAT__GPIO_1_13		0x154 0x34c 0x000 0x15 0x000  #define MX25_PAD_CSPI1_MOSI__CSPI1_MOSI		0x158 0x350 0x000 0x10 0x000 +#define MX25_PAD_CSPI1_MOSI__UART3_RXD		0x158 0x350 0x000 0x12 0x000  #define MX25_PAD_CSPI1_MOSI__GPIO_1_14		0x158 0x350 0x000 0x15 0x000  #define MX25_PAD_CSPI1_MISO__CSPI1_MISO		0x15c 0x354 0x000 0x10 0x000 +#define MX25_PAD_CSPI1_MISO__UART3_TXD		0x15c 0x354 0x000 0x12 0x000  #define MX25_PAD_CSPI1_MISO__GPIO_1_15		0x15c 0x354 0x000 0x15 0x000  #define MX25_PAD_CSPI1_SS0__CSPI1_SS0		0x160 0x358 0x000 0x10 0x000 +#define MX25_PAD_CSPI1_SS0__PWM2_PWMO		0x160 0x358 0x000 0x12 0x000  #define MX25_PAD_CSPI1_SS0__GPIO_1_16		0x160 0x358 0x000 0x15 0x000  #define MX25_PAD_CSPI1_SS1__CSPI1_SS1		0x164 0x35c 0x000 0x10 0x000 +#define MX25_PAD_CSPI1_SS1__I2C3_DAT		0x164 0x35C 0x528 0x11 0x001 +#define MX25_PAD_CSPI1_SS1__UART3_RTS		0x164 0x35c 0x000 0x12 0x000  #define MX25_PAD_CSPI1_SS1__GPIO_1_17		0x164 0x35c 0x000 0x15 0x000  #define MX25_PAD_CSPI1_SCLK__CSPI1_SCLK		0x168 0x360 0x000 0x10 0x000 +#define MX25_PAD_CSPI1_SCLK__UART3_CTS		0x168 0x360 0x000 0x12 0x000  #define MX25_PAD_CSPI1_SCLK__GPIO_1_18		0x168 0x360 0x000 0x15 0x000  #define MX25_PAD_CSPI1_RDY__CSPI1_RDY		0x16c 0x364 0x000 0x10 0x000 @@ -328,6 +351,7 @@  #define MX25_PAD_UART1_RTS__UART1_RTS		0x178 0x370 0x000 0x10 0x000  #define MX25_PAD_UART1_RTS__CSI_D0		0x178 0x370 0x488 0x11 0x001 +#define MX25_PAD_UART1_RTS__CC3			0x178 0x370 0x000 0x12 0x000  #define MX25_PAD_UART1_RTS__GPIO_4_24		0x178 0x370 0x000 0x15 0x000  #define MX25_PAD_UART1_CTS__UART1_CTS		0x17c 0x374 0x000 0x10 0x000 @@ -342,6 +366,7 @@  #define MX25_PAD_UART2_RTS__UART2_RTS		0x188 0x380 0x000 0x10 0x000  #define MX25_PAD_UART2_RTS__FEC_COL		0x188 0x380 0x504 0x12 0x002 +#define MX25_PAD_UART2_RTS__CC1			0x188 0x380 0x000 0x13 0x000  #define MX25_PAD_UART2_RTS__GPIO_4_28		0x188 0x380 0x000 0x15 0x000  #define MX25_PAD_UART2_CTS__FEC_RX_ER		0x18c 0x384 0x518 0x12 0x002 @@ -349,14 +374,17 @@  #define MX25_PAD_UART2_CTS__GPIO_4_29		0x18c 0x384 0x000 0x15 0x000  #define MX25_PAD_SD1_CMD__SD1_CMD		0x190 0x388 0x000 0x10 0x000 +#define MX25_PAD_SD1_CMD__CSPI2_MOSI		0x190 0x388 0x4a0 0x11 0x001  #define MX25_PAD_SD1_CMD__FEC_RDATA2		0x190 0x388 0x50c 0x12 0x002  #define MX25_PAD_SD1_CMD__GPIO_2_23		0x190 0x388 0x000 0x15 0x000  #define MX25_PAD_SD1_CLK__SD1_CLK		0x194 0x38c 0x000 0x10 0x000 +#define MX25_PAD_SD1_CLK__CSPI2_MISO		0x194 0x38c 0x49c 0x11 0x001  #define MX25_PAD_SD1_CLK__FEC_RDATA3		0x194 0x38c 0x510 0x12 0x002  #define MX25_PAD_SD1_CLK__GPIO_2_24		0x194 0x38c 0x000 0x15 0x000  #define MX25_PAD_SD1_DATA0__SD1_DATA0		0x198 0x390 0x000 0x10 0x000 +#define MX25_PAD_SD1_DATA0__CSPI2_SCLK		0x198 0x390 0x494 0x11 0x001  #define MX25_PAD_SD1_DATA0__GPIO_2_25		0x198 0x390 0x000 0x15 0x000  #define MX25_PAD_SD1_DATA1__SD1_DATA1		0x19c 0x394 0x000 0x10 0x000 @@ -457,14 +485,15 @@  #define MX25_PAD_GPIO_C__CAN2_TX		0x1fc 0x3f8 0x000 0x16 0x000  #define MX25_PAD_GPIO_D__GPIO_D			0x200 0x3fc 0x000 0x10 0x000 -#define MX25_PAD_GPIO_E__LD16			0x204 0x400 0x000 0x02 0x000  #define MX25_PAD_GPIO_D__CAN2_RX		0x200 0x3fc 0x484 0x16 0x001  #define MX25_PAD_GPIO_E__GPIO_E			0x204 0x400 0x000 0x10 0x000 -#define MX25_PAD_GPIO_F__LD17			0x208 0x404 0x000 0x02 0x000 +#define MX25_PAD_GPIO_E__I2C3_CLK		0x204 0x400 0x524 0x11 0x002 +#define MX25_PAD_GPIO_E__LD16			0x204 0x400 0x000 0x12 0x000  #define MX25_PAD_GPIO_E__AUD7_TXD		0x204 0x400 0x000 0x14 0x000  #define MX25_PAD_GPIO_F__GPIO_F			0x208 0x404 0x000 0x10 0x000 +#define MX25_PAD_GPIO_F__LD17			0x208 0x404 0x000 0x12 0x000  #define MX25_PAD_GPIO_F__AUD7_TXC		0x208 0x404 0x000 0x14 0x000  #define MX25_PAD_EXT_ARMCLK__EXT_ARMCLK		0x20c 0x000 0x000 0x10 0x000 diff --git a/arch/arm/boot/dts/imx25.dtsi b/arch/arm/boot/dts/imx25.dtsi index c1740396b2c9..58d3c3cf2923 100644 --- a/arch/arm/boot/dts/imx25.dtsi +++ b/arch/arm/boot/dts/imx25.dtsi @@ -239,6 +239,7 @@  			};  			ssi2: ssi@50014000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx25-ssi", "fsl,imx21-ssi";  				reg = <0x50014000 0x4000>;  				interrupts = <11>; @@ -274,6 +275,7 @@  			};  			ssi1: ssi@50034000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx25-ssi", "fsl,imx21-ssi";  				reg = <0x50034000 0x4000>;  				interrupts = <12>; @@ -453,7 +455,7 @@  			};  			sdma: sdma@53fd4000 { -				compatible = "fsl,imx25-sdma", "fsl,imx35-sdma"; +				compatible = "fsl,imx25-sdma";  				reg = <0x53fd4000 0x4000>;  				clocks = <&clks 112>, <&clks 68>;  				clock-names = "ipg", "ahb"; diff --git a/arch/arm/boot/dts/imx27-apf27dev.dts b/arch/arm/boot/dts/imx27-apf27dev.dts index 2b6d489dae69..da306c5dd678 100644 --- a/arch/arm/boot/dts/imx27-apf27dev.dts +++ b/arch/arm/boot/dts/imx27-apf27dev.dts @@ -67,6 +67,16 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_cspi1 &pinctrl_cspi1_cs>;  	status = "okay"; + +	adc@0 { +		compatible = "maxim,max1027"; +		reg = <0>; +		interrupt-parent = <&gpio5>; +		interrupts = <15 IRQ_TYPE_EDGE_FALLING>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_max1027>; +		spi-max-frequency = <10000000>; +	};  };  &cspi2 { @@ -189,6 +199,13 @@  			>;  		}; +		pinctrl_max1027: max1027 { +			 fsl,pins = < +				 MX27_PAD_UART1_CTS__GPIO5_14 0x0 /* CNVST */ +				 MX27_PAD_UART1_RTS__GPIO5_15 0x0 /* EOC */ +			>; +		}; +  		pinctrl_pwm: pwmgrp {  			fsl,pins = <  				MX27_PAD_PWMO__PWMO 0x0 diff --git a/arch/arm/boot/dts/imx28-apf28dev.dts b/arch/arm/boot/dts/imx28-apf28dev.dts index 221cac4fb2cd..1f38a052ad4b 100644 --- a/arch/arm/boot/dts/imx28-apf28dev.dts +++ b/arch/arm/boot/dts/imx28-apf28dev.dts @@ -83,10 +83,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_16bit_pins_a  						&lcdif_pins_apf28dev>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <16>;  					bus-width = <16>; diff --git a/arch/arm/boot/dts/imx28-apx4devkit.dts b/arch/arm/boot/dts/imx28-apx4devkit.dts index e1ce9179db63..1092b761d7ac 100644 --- a/arch/arm/boot/dts/imx28-apx4devkit.dts +++ b/arch/arm/boot/dts/imx28-apx4devkit.dts @@ -94,10 +94,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_24bit_pins_a  					     &lcdif_pins_apx4>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <24>; diff --git a/arch/arm/boot/dts/imx28-cfa10049.dts b/arch/arm/boot/dts/imx28-cfa10049.dts index 7d51459de5e8..ef944b6d4f01 100644 --- a/arch/arm/boot/dts/imx28-cfa10049.dts +++ b/arch/arm/boot/dts/imx28-cfa10049.dts @@ -177,10 +177,10 @@  				pinctrl-0 = <&lcdif_18bit_pins_cfa10049  					     &lcdif_pins_cfa10049  					     &lcdif_pins_cfa10049_pullup>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <18>; diff --git a/arch/arm/boot/dts/imx28-cfa10055.dts b/arch/arm/boot/dts/imx28-cfa10055.dts index c3900e7ba331..6a34114bec29 100644 --- a/arch/arm/boot/dts/imx28-cfa10055.dts +++ b/arch/arm/boot/dts/imx28-cfa10055.dts @@ -92,10 +92,10 @@  				pinctrl-0 = <&lcdif_18bit_pins_cfa10055  					     &lcdif_pins_cfa10055  					     &lcdif_pins_cfa10055_pullup>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <18>; diff --git a/arch/arm/boot/dts/imx28-cfa10056.dts b/arch/arm/boot/dts/imx28-cfa10056.dts index cef959a97219..ba6495ca44d2 100644 --- a/arch/arm/boot/dts/imx28-cfa10056.dts +++ b/arch/arm/boot/dts/imx28-cfa10056.dts @@ -64,10 +64,10 @@  				pinctrl-0 = <&lcdif_24bit_pins_a  						&lcdif_pins_cfa10056  						&lcdif_pins_cfa10056_pullup >; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <24>; diff --git a/arch/arm/boot/dts/imx28-cfa10057.dts b/arch/arm/boot/dts/imx28-cfa10057.dts index c4e00ce4b6da..5df0b24eaf59 100644 --- a/arch/arm/boot/dts/imx28-cfa10057.dts +++ b/arch/arm/boot/dts/imx28-cfa10057.dts @@ -78,10 +78,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_18bit_pins_cfa10057  					     &lcdif_pins_cfa10057>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <18>; diff --git a/arch/arm/boot/dts/imx28-cfa10058.dts b/arch/arm/boot/dts/imx28-cfa10058.dts index 7c9cc783f0d1..f5c6dce34abe 100644 --- a/arch/arm/boot/dts/imx28-cfa10058.dts +++ b/arch/arm/boot/dts/imx28-cfa10058.dts @@ -51,10 +51,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_24bit_pins_a  						 &lcdif_pins_cfa10058>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <24>; diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts index e4cc44c98585..09664fcf5afb 100644 --- a/arch/arm/boot/dts/imx28-evk.dts +++ b/arch/arm/boot/dts/imx28-evk.dts @@ -124,10 +124,10 @@  				pinctrl-0 = <&lcdif_24bit_pins_a  					     &lcdif_pins_evk>;  				lcd-supply = <®_lcd_3v3>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <24>; diff --git a/arch/arm/boot/dts/imx28-m28cu3.dts b/arch/arm/boot/dts/imx28-m28cu3.dts index 9348ce59dda4..2df63bee6f4e 100644 --- a/arch/arm/boot/dts/imx28-m28cu3.dts +++ b/arch/arm/boot/dts/imx28-m28cu3.dts @@ -115,10 +115,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_24bit_pins_a  					     &lcdif_pins_m28>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display0 { +				display0: display0 {  					bits-per-pixel = <32>;  					bus-width = <24>; diff --git a/arch/arm/boot/dts/imx28-m28evk.dts b/arch/arm/boot/dts/imx28-m28evk.dts index b3c09ae3b928..e35cc6ba3ca6 100644 --- a/arch/arm/boot/dts/imx28-m28evk.dts +++ b/arch/arm/boot/dts/imx28-m28evk.dts @@ -81,10 +81,10 @@  				pinctrl-names = "default";  				pinctrl-0 = <&lcdif_24bit_pins_a  					     &lcdif_pins_m28>; -				display = <&display>; +				display = <&display0>;  				status = "okay"; -				display: display { +				display0: display0 {  					bits-per-pixel = <16>;  					bus-width = <18>; diff --git a/arch/arm/boot/dts/imx28-tx28.dts b/arch/arm/boot/dts/imx28-tx28.dts index e14bd86f3e99..a5b27c85a91c 100644 --- a/arch/arm/boot/dts/imx28-tx28.dts +++ b/arch/arm/boot/dts/imx28-tx28.dts @@ -21,12 +21,15 @@  	aliases {  		can0 = &can0;  		can1 = &can1; -		display = &display; +		display = &display0;  		ds1339 = &ds1339;  		gpio5 = &gpio5;  		lcdif = &lcdif;  		lcdif_23bit_pins = &tx28_lcdif_23bit_pins;  		lcdif_24bit_pins = &lcdif_24bit_pins_a; +		reg_can_xcvr = ®_can_xcvr; +		spi_gpio = &spi_gpio; +		spi_mxs = &ssp3;  		stk5led = &user_led;  		usbotg = &usb0;  	}; @@ -37,7 +40,7 @@  	onewire {  		compatible = "w1-gpio"; -		gpios = <&gpio2 7 0>; +		gpios = <&gpio2 7 GPIO_ACTIVE_HIGH>;  		status = "disabled";  	}; @@ -52,7 +55,7 @@  			regulator-name = "usb0_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio0 18 0>; +			gpio = <&gpio0 18 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		}; @@ -62,7 +65,7 @@  			regulator-name = "usb1_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio3 27 0>; +			gpio = <&gpio3 27 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		}; @@ -90,7 +93,7 @@  			regulator-name = "CAN XCVR";  			regulator-min-microvolt = <3300000>;  			regulator-max-microvolt = <3300000>; -			gpio = <&gpio1 0 0>; +			gpio = <&gpio1 0 GPIO_ACTIVE_HIGH>;  			pinctrl-names = "default";  			pinctrl-0 = <&tx28_flexcan_xcvr_pins>;  		}; @@ -101,7 +104,7 @@  			regulator-name = "LCD POWER";  			regulator-min-microvolt = <3300000>;  			regulator-max-microvolt = <3300000>; -			gpio = <&gpio1 31 0>; +			gpio = <&gpio1 31 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		}; @@ -111,7 +114,7 @@  			regulator-name = "LCD RESET";  			regulator-min-microvolt = <3300000>;  			regulator-max-microvolt = <3300000>; -			gpio = <&gpio3 30 0>; +			gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>;  			startup-delay-us = <300000>;  			enable-active-high;  			regulator-always-on; @@ -143,7 +146,7 @@  		user_led: user {  			label = "Heartbeat"; -			gpios = <&gpio4 10 0>; +			gpios = <&gpio4 10 GPIO_ACTIVE_HIGH>;  			linux,default-trigger = "heartbeat";  		};  	}; @@ -172,16 +175,16 @@  	matrix_keypad: matrix-keypad@0 {  		compatible = "gpio-matrix-keypad";  		col-gpios = < -			&gpio5 0 0 -			&gpio5 1 0 -			&gpio5 2 0 -			&gpio5 3 0 +			&gpio5 0 GPIO_ACTIVE_HIGH +			&gpio5 1 GPIO_ACTIVE_HIGH +			&gpio5 2 GPIO_ACTIVE_HIGH +			&gpio5 3 GPIO_ACTIVE_HIGH  		>;  		row-gpios = < -			&gpio5 4 0 -			&gpio5 5 0 -			&gpio5 6 0 -			&gpio5 7 0 +			&gpio5 4 GPIO_ACTIVE_HIGH +			&gpio5 5 GPIO_ACTIVE_HIGH +			&gpio5 6 GPIO_ACTIVE_HIGH +			&gpio5 7 GPIO_ACTIVE_HIGH  		>;  		/* sample keymap */  		linux,keymap = < @@ -203,6 +206,44 @@  		col-scan-delay-us = <5000>;  		linux,no-autorepeat;  	}; + +	spi_gpio: spi-gpio { +		compatible = "spi-gpio"; +		#address-cells = <1>; +		#size-cells = <0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&tx28_spi_gpio_pins>; + +		gpio-sck = <&gpio2 24 GPIO_ACTIVE_HIGH>; +		gpio-mosi = <&gpio2 25 GPIO_ACTIVE_HIGH>; +		gpio-miso = <&gpio2 26 GPIO_ACTIVE_HIGH>; +		num-chipselects = <3>; +		cs-gpios = < +			&gpio2 27 GPIO_ACTIVE_LOW +			&gpio3 8 GPIO_ACTIVE_LOW +			&gpio3 9 GPIO_ACTIVE_LOW +		>; +		/* enable this and disable ssp3 below, if you need full duplex SPI transfer */ +		status = "disabled"; + +		spi@0 { +			compatible = "spidev"; +			reg = <0>; +			spi-max-frequency = <57600000>; +		}; + +		spi@1 { +			compatible = "spidev"; +			reg = <1>; +			spi-max-frequency = <57600000>; +		}; + +		spi@2 { +			compatible = "spidev"; +			reg = <2>; +			spi-max-frequency = <57600000>; +		}; +	};  };  /* 2nd TX-Std UART - (A)UART1  */ @@ -284,8 +325,8 @@  		pinctrl-0 = <&tx28_edt_ft5x06_pins>;  		interrupt-parent = <&gpio2>;  		interrupts = <5 0>; -		reset-gpios = <&gpio2 6 1>; -		wake-gpios = <&gpio4 9 0>; +		reset-gpios = <&gpio2 6 GPIO_ACTIVE_LOW>; +		wake-gpios = <&gpio4 9 GPIO_ACTIVE_HIGH>;  	};  	touchscreen: tsc2007@48 { @@ -295,7 +336,7 @@  		pinctrl-0 = <&tx28_tsc2007_pins>;  		interrupt-parent = <&gpio3>;  		interrupts = <20 0>; -		pendown-gpio = <&gpio3 20 1>; +		pendown-gpio = <&gpio3 20 GPIO_ACTIVE_LOW>;  		ti,x-plate-ohms = /bits/ 16 <660>;  	}; @@ -309,10 +350,10 @@  	pinctrl-names = "default";  	pinctrl-0 = <&lcdif_24bit_pins_a &lcdif_sync_pins_a &tx28_lcdif_ctrl_pins>;  	lcd-supply = <®_lcd>; -	display = <&display>; +	display = <&display0>;  	status = "okay"; -	display: display@0 { +	display0: display0 {  		bits-per-pixel = <32>;  		bus-width = <24>;  		display-timings { @@ -558,6 +599,20 @@  		fsl,pull-up = <MXS_PULL_DISABLE>;  	}; +	tx28_spi_gpio_pins: spi-gpiogrp { +		fsl,pinmux-ids = < +			MX28_PAD_AUART2_RX__GPIO_3_8 +			MX28_PAD_AUART2_TX__GPIO_3_9 +			MX28_PAD_SSP3_SCK__GPIO_2_24 +			MX28_PAD_SSP3_MOSI__GPIO_2_25 +			MX28_PAD_SSP3_MISO__GPIO_2_26 +			MX28_PAD_SSP3_SS0__GPIO_2_27 +		>; +		fsl,drive-strength = <MXS_DRIVE_8mA>; +		fsl,voltage = <MXS_VOLTAGE_HIGH>; +		fsl,pull-up = <MXS_PULL_DISABLE>; +	}; +  	tx28_tsc2007_pins: tx28-tsc2007-pins {  		fsl,pinmux-ids = <  			MX28_PAD_SAIF0_MCLK__GPIO_3_20 /* TSC2007 IRQ */ @@ -619,17 +674,23 @@  	clock-frequency = <57600000>;  	status = "okay"; -	spidev0: spi@0 { +	spi@0 {  		compatible = "spidev";  		reg = <0>;  		spi-max-frequency = <57600000>;  	}; -	spidev1: spi@1 { +	spi@1 {  		compatible = "spidev";  		reg = <1>;  		spi-max-frequency = <57600000>;  	}; + +	spi@2 { +		compatible = "spidev"; +		reg = <2>; +		spi-max-frequency = <57600000>; +	};  };  &usb0 { diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi index a95cc5358ff4..47f68ac868d4 100644 --- a/arch/arm/boot/dts/imx28.dtsi +++ b/arch/arm/boot/dts/imx28.dtsi @@ -489,6 +489,38 @@  					fsl,pull-up = <MXS_PULL_DISABLE>;  				}; +				mmc1_4bit_pins_a: mmc1-4bit@0 { +					reg = <0>; +					fsl,pinmux-ids = < +						MX28_PAD_GPMI_D00__SSP1_D0 +						MX28_PAD_GPMI_D01__SSP1_D1 +						MX28_PAD_GPMI_D02__SSP1_D2 +						MX28_PAD_GPMI_D03__SSP1_D3 +						MX28_PAD_GPMI_RDY1__SSP1_CMD +						MX28_PAD_GPMI_RDY0__SSP1_CARD_DETECT +						MX28_PAD_GPMI_WRN__SSP1_SCK +					>; +					fsl,drive-strength = <MXS_DRIVE_8mA>; +					fsl,voltage = <MXS_VOLTAGE_HIGH>; +					fsl,pull-up = <MXS_PULL_ENABLE>; +				}; + +				mmc1_cd_cfg: mmc1-cd-cfg { +					fsl,pinmux-ids = < +						MX28_PAD_GPMI_RDY0__SSP1_CARD_DETECT +					>; +					fsl,pull-up = <MXS_PULL_DISABLE>; +				}; + +				mmc1_sck_cfg: mmc1-sck-cfg { +					fsl,pinmux-ids = < +						MX28_PAD_GPMI_WRN__SSP1_SCK +					>; +					fsl,drive-strength = <MXS_DRIVE_12mA>; +					fsl,pull-up = <MXS_PULL_DISABLE>; +				}; + +  				mmc2_4bit_pins_a: mmc2-4bit@0 {  					reg = <0>;  					fsl,pinmux-ids = < @@ -553,6 +585,17 @@  					fsl,pull-up = <MXS_PULL_ENABLE>;  				}; +				i2c1_pins_b: i2c1@1 { +					reg = <1>; +					fsl,pinmux-ids = < +						MX28_PAD_AUART2_CTS__I2C1_SCL +						MX28_PAD_AUART2_RTS__I2C1_SDA +					>; +					fsl,drive-strength = <MXS_DRIVE_8mA>; +					fsl,voltage = <MXS_VOLTAGE_HIGH>; +					fsl,pull-up = <MXS_PULL_ENABLE>; +				}; +  				saif0_pins_a: saif0@0 {  					reg = <0>;  					fsl,pinmux-ids = < diff --git a/arch/arm/boot/dts/imx35.dtsi b/arch/arm/boot/dts/imx35.dtsi index 442e216ca9d9..6932928f3b45 100644 --- a/arch/arm/boot/dts/imx35.dtsi +++ b/arch/arm/boot/dts/imx35.dtsi @@ -114,6 +114,7 @@  			};  			ssi1: ssi@43fa0000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx35-ssi", "fsl,imx21-ssi";  				reg = <0x43fa0000 0x4000>;  				interrupts = <11>; diff --git a/arch/arm/boot/dts/imx50.dtsi b/arch/arm/boot/dts/imx50.dtsi index c0e0f60ab6b2..620b0f030591 100644 --- a/arch/arm/boot/dts/imx50.dtsi +++ b/arch/arm/boot/dts/imx50.dtsi @@ -145,6 +145,7 @@  				};  				ssi2: ssi@50014000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx50-ssi",  							"fsl,imx51-ssi",  							"fsl,imx21-ssi"; @@ -454,6 +455,7 @@  			};  			ssi1: ssi@63fcc000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx50-ssi", "fsl,imx51-ssi",  							"fsl,imx21-ssi";  				reg = <0x63fcc000 0x4000>; diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 17c05a6fa776..92660e1fe1fc 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi @@ -210,6 +210,7 @@  				};  				ssi2: ssi@70014000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";  					reg = <0x70014000 0x4000>;  					interrupts = <30>; @@ -499,6 +500,7 @@  			};  			ssi1: ssi@83fcc000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";  				reg = <0x83fcc000 0x4000>;  				interrupts = <29>; @@ -554,6 +556,7 @@  			};  			ssi3: ssi@83fe8000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx51-ssi", "fsl,imx21-ssi";  				reg = <0x83fe8000 0x4000>;  				interrupts = <96>; diff --git a/arch/arm/boot/dts/imx53-qsrb.dts b/arch/arm/boot/dts/imx53-qsrb.dts index f1bbf9a32991..82d623d05915 100644 --- a/arch/arm/boot/dts/imx53-qsrb.dts +++ b/arch/arm/boot/dts/imx53-qsrb.dts @@ -28,6 +28,12 @@  				MX53_PAD_CSI0_DAT9__I2C1_SCL      0x400001ec  			>;  		}; + +		pinctrl_pmic: pmicgrp { +			fsl,pins = < +				MX53_PAD_CSI0_DAT5__GPIO5_23	0x1e4 /* IRQ */ +			>; +		};  	};  }; @@ -38,6 +44,8 @@  	pmic: mc34708@8 {  		compatible = "fsl,mc34708"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_pmic>;  		reg = <0x08>;  		interrupt-parent = <&gpio5>;  		interrupts = <23 0x8>; diff --git a/arch/arm/boot/dts/imx53-smd.dts b/arch/arm/boot/dts/imx53-smd.dts index 5ec1590ff7bc..1d325576bcc0 100644 --- a/arch/arm/boot/dts/imx53-smd.dts +++ b/arch/arm/boot/dts/imx53-smd.dts @@ -265,7 +265,7 @@  	};  	pmic: dialog@48 { -		compatible = "dialog,da9053", "dialog,da9052"; +		compatible = "dlg,da9053", "dlg,da9052";  		reg = <0x48>;  	};  }; diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index 64fa27b36be0..6b198c6d4da5 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi @@ -221,6 +221,7 @@  				};  				ssi2: ssi@50014000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx53-ssi",  							"fsl,imx51-ssi",  							"fsl,imx21-ssi"; @@ -661,6 +662,7 @@  			};  			ssi1: ssi@63fcc000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx53-ssi", "fsl,imx51-ssi",  						"fsl,imx21-ssi";  				reg = <0x63fcc000 0x4000>; @@ -688,6 +690,7 @@  			};  			ssi3: ssi@63fe8000 { +				#sound-dai-cells = <0>;  				compatible = "fsl,imx53-ssi", "fsl,imx51-ssi",  						"fsl,imx21-ssi";  				reg = <0x63fe8000 0x4000>; @@ -731,7 +734,7 @@  				compatible = "fsl,imx53-vpu";  				reg = <0x63ff4000 0x1000>;  				interrupts = <9>; -				clocks = <&clks IMX5_CLK_VPU_GATE>, +				clocks = <&clks IMX5_CLK_VPU_REFERENCE_GATE>,  				         <&clks IMX5_CLK_VPU_GATE>;  				clock-names = "per", "ahb";  				resets = <&src 1>; @@ -744,5 +747,10 @@  			reg = <0xf8000000 0x20000>;  			clocks = <&clks IMX5_CLK_OCRAM>;  		}; + +		pmu { +			compatible = "arm,cortex-a8-pmu"; +			interrupts = <77>; +		};  	};  }; diff --git a/arch/arm/boot/dts/imx6dl-gw552x.dts b/arch/arm/boot/dts/imx6dl-gw552x.dts new file mode 100644 index 000000000000..a4b700cef188 --- /dev/null +++ b/arch/arm/boot/dts/imx6dl-gw552x.dts @@ -0,0 +1,20 @@ +/* + * Copyright 2014 Gateworks Corporation + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; + +#include "imx6dl.dtsi" +#include "imx6qdl-gw552x.dtsi" + +/ { +	model = "Gateworks Ventana i.MX6 DualLite/Solo GW552X"; +	compatible = "gw,imx6dl-gw552x", "gw,ventana", "fsl,imx6dl"; +}; diff --git a/arch/arm/boot/dts/imx6dl-hummingboard.dts b/arch/arm/boot/dts/imx6dl-hummingboard.dts index c8e51dd41b8f..44a0e6736bb1 100644 --- a/arch/arm/boot/dts/imx6dl-hummingboard.dts +++ b/arch/arm/boot/dts/imx6dl-hummingboard.dts @@ -1,204 +1,13 @@  /* - * Copyright (C) 2013,2014 Russell King + * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) + * Based on dt work by Russell King   */  /dts-v1/;  #include "imx6dl.dtsi" -#include "imx6qdl-microsom.dtsi" -#include "imx6qdl-microsom-ar8035.dtsi" +#include "imx6qdl-hummingboard.dtsi"  / { -	model = "SolidRun HummingBoard DL/Solo"; -	compatible = "solidrun,hummingboard", "fsl,imx6dl"; - -	chosen { -		stdout-path = &uart1; -	}; - -	ir_recv: ir-receiver { -		compatible = "gpio-ir-receiver"; -		gpios = <&gpio1 2 1>; -		pinctrl-names = "default"; -		pinctrl-0 = <&pinctrl_hummingboard_gpio1_2>; -	}; - -	regulators { -		compatible = "simple-bus"; - -		reg_3p3v: 3p3v { -			compatible = "regulator-fixed"; -			regulator-name = "3P3V"; -			regulator-min-microvolt = <3300000>; -			regulator-max-microvolt = <3300000>; -			regulator-always-on; -		}; - -		reg_usbh1_vbus: usb-h1-vbus { -			compatible = "regulator-fixed"; -			enable-active-high; -			gpio = <&gpio1 0 0>; -			pinctrl-names = "default"; -			pinctrl-0 = <&pinctrl_hummingboard_usbh1_vbus>; -			regulator-name = "usb_h1_vbus"; -			regulator-min-microvolt = <5000000>; -			regulator-max-microvolt = <5000000>; -		}; - -		reg_usbotg_vbus: usb-otg-vbus { -			compatible = "regulator-fixed"; -			enable-active-high; -			gpio = <&gpio3 22 0>; -			pinctrl-names = "default"; -			pinctrl-0 = <&pinctrl_hummingboard_usbotg_vbus>; -			regulator-name = "usb_otg_vbus"; -			regulator-min-microvolt = <5000000>; -			regulator-max-microvolt = <5000000>; -		}; -	}; - -	sound-spdif { -		compatible = "fsl,imx-audio-spdif"; -		model = "imx-spdif"; -		/* IMX6 doesn't implement this yet */ -		spdif-controller = <&spdif>; -		spdif-out; -	}; -}; - -&can1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hummingboard_flexcan1>; -	status = "okay"; -}; - -&hdmi { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hummingboard_hdmi>; -	ddc-i2c-bus = <&i2c2>; -	status = "okay"; -}; - -&i2c1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hummingboard_i2c1>; - -	/* -	 * Not fitted on Carrier-1 board... yet -	status = "okay"; - -	rtc: pcf8523@68 { -		compatible = "nxp,pcf8523"; -		reg = <0x68>; -	}; -	 */ -}; - -&i2c2 { -	clock-frequency = <100000>; -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hummingboard_i2c2>; -	status = "okay"; -}; - -&iomuxc { -	hummingboard { -		pinctrl_hummingboard_flexcan1: hummingboard-flexcan1 { -			fsl,pins = < -				MX6QDL_PAD_SD3_CLK__FLEXCAN1_RX 0x80000000 -				MX6QDL_PAD_SD3_CMD__FLEXCAN1_TX 0x80000000 -			>; -		}; - -		pinctrl_hummingboard_gpio1_2: hummingboard-gpio1_2 { -			fsl,pins = < -				MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 -			>; -		}; - -		pinctrl_hummingboard_hdmi: hummingboard-hdmi { -			fsl,pins = < -				MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0 -			>; -		}; - -		pinctrl_hummingboard_i2c1: hummingboard-i2c1 { -			fsl,pins = < -				MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 -				MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 -			>; -		}; - -		pinctrl_hummingboard_i2c2: hummingboard-i2c2 { -			fsl,pins = < -				MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 -				MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 -			>; -		}; - -		pinctrl_hummingboard_spdif: hummingboard-spdif { -			fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>; -		}; - -		pinctrl_hummingboard_usbh1_vbus: hummingboard-usbh1-vbus { -			fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0>; -		}; - -		pinctrl_hummingboard_usbotg_id: hummingboard-usbotg-id { -			/* -			 * Similar to pinctrl_usbotg_2, but we want it -			 * pulled down for a fixed host connection. -			 */ -			fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>; -		}; - -		pinctrl_hummingboard_usbotg_vbus: hummingboard-usbotg-vbus { -			fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x1b0b0>; -		}; - -		pinctrl_hummingboard_usdhc2_aux: hummingboard-usdhc2-aux { -			fsl,pins = < -				MX6QDL_PAD_GPIO_4__GPIO1_IO04    0x1f071 -			>; -		}; - -		pinctrl_hummingboard_usdhc2: hummingboard-usdhc2 { -			fsl,pins = < -				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059 -				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059 -				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059 -				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059 -				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059 -				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059 -			>; -		}; -	}; -}; - -&spdif { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hummingboard_spdif>; -	status = "okay"; -}; - -&usbh1 { -	vbus-supply = <®_usbh1_vbus>; -	status = "okay"; -}; - -&usbotg { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hummingboard_usbotg_id>; -	vbus-supply = <®_usbotg_vbus>; -	status = "okay"; -}; - -&usdhc2 { -	pinctrl-names = "default"; -	pinctrl-0 = < -		&pinctrl_hummingboard_usdhc2_aux -		&pinctrl_hummingboard_usdhc2 -	>; -	vmmc-supply = <®_3p3v>; -	cd-gpios = <&gpio1 4 0>; -	status = "okay"; +	model = "SolidRun HummingBoard Solo/DualLite"; +	compatible = "solidrun,hummingboard/dl", "fsl,imx6dl";  }; diff --git a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts index 8c1cb53464a0..4fa254347798 100644 --- a/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts +++ b/arch/arm/boot/dts/imx6q-dmo-edmqmx6.dts @@ -119,7 +119,7 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_enet>;  	phy-mode = "rgmii"; -	phy-reset-gpios = <&gpio3 23 0>; +	phy-reset-gpios = <&gpio1 25 0>;  	phy-supply = <&vgen2_1v2_eth>;  	status = "okay";  }; @@ -339,6 +339,7 @@  				MX6QDL_PAD_ENET_REF_CLK__ENET_TX_CLK	0x1b0b0  				MX6QDL_PAD_ENET_MDIO__ENET_MDIO		0x1b0b0  				MX6QDL_PAD_ENET_MDC__ENET_MDC		0x1b0b0 +				MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25	0x1b0b0  				MX6QDL_PAD_GPIO_16__ENET_REF_CLK	0x4001b0a8  			>;  		}; diff --git a/arch/arm/boot/dts/imx6q-gw5400-a.dts b/arch/arm/boot/dts/imx6q-gw5400-a.dts index 22e6f8e657d2..822ffb231c57 100644 --- a/arch/arm/boot/dts/imx6q-gw5400-a.dts +++ b/arch/arm/boot/dts/imx6q-gw5400-a.dts @@ -10,6 +10,7 @@   */  /dts-v1/; +#include <dt-bindings/gpio/gpio.h>  #include "imx6q.dtsi"  / { @@ -18,7 +19,6 @@  	/* these are used by bootloader for disabling nodes */  	aliases { -		ethernet0 = &fec;  		ethernet1 = ð1;  		i2c0 = &i2c1;  		i2c1 = &i2c2; @@ -26,12 +26,10 @@  		led0 = &led0;  		led1 = &led1;  		led2 = &led2; -		sky2 = ð1;  		ssi0 = &ssi1;  		spi0 = &ecspi1;  		usb0 = &usbh1;  		usb1 = &usbotg; -		usdhc2 = &usdhc3;  	};  	chosen { @@ -40,23 +38,25 @@  	leds {  		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>;  		led0: user1 {  			label = "user1"; -			gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */ +			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; /* 102 -> MX6_PANLEDG */  			default-state = "on";  			linux,default-trigger = "heartbeat";  		};  		led1: user2 {  			label = "user2"; -			gpios = <&gpio4 10 0>; /* 106 -> MX6_PANLEDR */ +			gpios = <&gpio4 10 GPIO_ACTIVE_HIGH>; /* 106 -> MX6_PANLEDR */  			default-state = "off";  		};  		led2: user3 {  			label = "user3"; -			gpios = <&gpio4 15 1>; /* 111 -> MX6_LOCLED# */ +			gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; /* 111 -> MX6_LOCLED# */  			default-state = "off";  		};  	}; @@ -67,7 +67,9 @@  	pps {  		compatible = "pps-gpio"; -		gpios = <&gpio1 5 0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>; +		gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;  		status = "okay";  	}; @@ -109,7 +111,7 @@  			regulator-name = "usb_otg_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio3 22 0>; +			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		};  	}; @@ -137,7 +139,7 @@  &ecspi1 {  	fsl,spi-num-chipselects = <1>; -	cs-gpios = <&gpio3 19 0>; +	cs-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_ecspi1>;  	status = "okay"; @@ -153,7 +155,7 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_enet>;  	phy-mode = "rgmii"; -	phy-reset-gpios = <&gpio1 30 0>; +	phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>;  	status = "okay";  }; @@ -199,11 +201,6 @@  		#gpio-cells = <2>;  	}; -	hwmon: gsc@29 { -		compatible = "gw,gsp"; -		reg = <0x29>; -	}; -  	rtc: ds1672@68 {  		compatible = "dallas,ds1672";  		reg = <0x68>; @@ -314,16 +311,6 @@  			};  		};  	}; - -	pciswitch: pex8609@3f { -		compatible = "plx,pex8609"; -		reg = <0x3f>; -	}; - -	pciclkgen: si52147@6b { -		compatible = "sil,si52147"; -		reg = <0x6b>; -	};  };  &i2c3 { @@ -345,51 +332,73 @@  		VDDIO-supply = <®_3p3v>;  	}; -	hdmiin: adv7611@4c { -		compatible = "adi,adv7611"; -		reg = <0x4c>; -	}; -  	touchscreen: egalax_ts@04 {  		compatible = "eeti,egalax_ts";  		reg = <0x04>;  		interrupt-parent = <&gpio7>; -		interrupts = <12 2>; /* gpio7_12 active low */ -		wakeup-gpios = <&gpio7 12 0>; +		interrupts = <12 2>; +		wakeup-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;  	}; +}; -	videoout: adv7393@2a { -		compatible = "adi,adv7393"; -		reg = <0x2a>; -	}; +&ldb { +	status = "okay"; +}; + +&pcie { +	reset-gpio = <&gpio1 29 GPIO_ACTIVE_LOW>; +	status = "okay"; -	videoin: adv7180@20 { -		compatible = "adi,adv7180"; -		reg = <0x20>; +	eth1: sky2@8 { /* MAC/PHY on bus 8 */ +		compatible = "marvell,sky2";  	};  }; -&iomuxc { +&ssi1 { +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1>; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; + +&uart5 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart5>; +	status = "okay"; +}; + +&usbotg { +	vbus-supply = <®_usb_otg_vbus>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg>; +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	vbus-supply = <®_usb_h1_vbus>; +	status = "okay"; +}; + +&usdhc3 {  	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hog>; +	pinctrl-0 = <&pinctrl_usdhc3>; +	cd-gpios = <&gpio7 0 GPIO_ACTIVE_LOW>; +	vmmc-supply = <®_3p3v>; +	status = "okay"; +}; +&iomuxc {  	imx6q-gw5400-a { -		pinctrl_hog: hoggrp { -			fsl,pins = < -				MX6QDL_PAD_EIM_D22__GPIO3_IO22    0x80000000 /* OTG_PWR_EN */ -				MX6QDL_PAD_EIM_D19__GPIO3_IO19    0x80000000 /* SPINOR_CS0# */ -				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 /* PCIE IRQ */ -				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29  0x80000000 /* PCIE RST */ -				MX6QDL_PAD_GPIO_0__CCM_CLKO1      0x000130b0 /* AUD4_MCK */ -				MX6QDL_PAD_GPIO_5__GPIO1_IO05     0x80000000 /* GPS_PPS */ -				MX6QDL_PAD_GPIO_17__GPIO7_IO12    0x80000000 /* TOUCH_IRQ# */ -				MX6QDL_PAD_KEY_COL0__GPIO4_IO06   0x80000000 /* user1 led */ -				MX6QDL_PAD_KEY_COL2__GPIO4_IO10   0x80000000 /* user2 led */ -				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15   0x80000000 /* user3 led */ -				MX6QDL_PAD_SD1_DAT0__GPIO1_IO16   0x80000000 /* USBHUB_RST# */ -				MX6QDL_PAD_SD1_DAT3__GPIO1_IO21   0x80000000 /* MIPI_DIO */ -			 >; -		};  		pinctrl_audmux: audmuxgrp {  			fsl,pins = < @@ -397,6 +406,7 @@  				MX6QDL_PAD_SD2_DAT3__AUD4_TXC		0x130b0  				MX6QDL_PAD_SD2_DAT2__AUD4_TXD		0x110b0  				MX6QDL_PAD_SD2_DAT1__AUD4_TXFS		0x130b0 +				MX6QDL_PAD_GPIO_0__CCM_CLKO1		0x130b0 /* AUD4_MCK */  			>;  		}; @@ -405,6 +415,7 @@  				MX6QDL_PAD_EIM_D17__ECSPI1_MISO		0x100b1  				MX6QDL_PAD_EIM_D18__ECSPI1_MOSI		0x100b1  				MX6QDL_PAD_EIM_D16__ECSPI1_SCLK		0x100b1 +				MX6QDL_PAD_EIM_D19__GPIO3_IO19		0x1b0b0 /* SPINOR_CS0# */  			>;  		}; @@ -429,6 +440,14 @@  			>;  		}; +		pinctrl_gpio_leds: gpioledsgrp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL0__GPIO4_IO06		0x1b0b0 /* user1 led */ +				MX6QDL_PAD_KEY_COL2__GPIO4_IO10		0x1b0b0 /* user2 led */ +				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15		0x1b0b0 /* user3 led */ +			>; +		}; +  		pinctrl_i2c1: i2c1grp {  			fsl,pins = <  				MX6QDL_PAD_EIM_D21__I2C1_SCL		0x4001b8b1 @@ -450,6 +469,19 @@  			>;  		}; +		pinctrl_pcie: pciegrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28	0x1b0b0 /* PCIE IRQ */ +				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29	0x1b0b0 /* PCIE RST */ +			>; +		}; + +		pinctrl_pps: ppsgrp { +			fsl,pins = < +				MX6QDL_PAD_GPIO_5__GPIO1_IO05		0x1b0b0 /* GPS_PPS */ +			>; +		}; +  		pinctrl_uart1: uart1grp {  			fsl,pins = <  				MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA	0x1b0b1 @@ -474,6 +506,7 @@  		pinctrl_usbotg: usbotggrp {  			fsl,pins = <  				MX6QDL_PAD_GPIO_1__USB_OTG_ID		0x17059 +				MX6QDL_PAD_EIM_D22__GPIO3_IO22		0x1b0b0 /* OTG_PWR_EN */  			>;  		}; @@ -489,59 +522,3 @@  		};  	};  }; - -&ldb { -	status = "okay"; -}; - -&pcie { -	reset-gpio = <&gpio1 29 0>; -	status = "okay"; - -	eth1: sky2@8 { /* MAC/PHY on bus 8 */ -		compatible = "marvell,sky2"; -	}; -}; - -&ssi1 { -	status = "okay"; -}; - -&uart1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart1>; -	status = "okay"; -}; - -&uart2 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart2>; -	status = "okay"; -}; - -&uart5 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart5>; -	status = "okay"; -}; - -&usbotg { -	vbus-supply = <®_usb_otg_vbus>; -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usbotg>; -	disable-over-current; -	status = "okay"; -}; - -&usbh1 { -	vbus-supply = <®_usb_h1_vbus>; -	status = "okay"; -}; - -&usdhc3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc3>; -	cd-gpios = <&gpio7 0 0>; -	vmmc-supply = <®_3p3v>; -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6q-gw552x.dts b/arch/arm/boot/dts/imx6q-gw552x.dts new file mode 100644 index 000000000000..f87a8fa6e04d --- /dev/null +++ b/arch/arm/boot/dts/imx6q-gw552x.dts @@ -0,0 +1,24 @@ +/* + * Copyright 2014 Gateworks Corporation + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; + +#include "imx6q.dtsi" +#include "imx6qdl-gw552x.dtsi" + +/ { +	model = "Gateworks Ventana i.MX6 Dual/Quad GW552X"; +	compatible = "gw,imx6q-gw552x", "gw,ventana", "fsl,imx6q"; +}; + +&sata { +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx6q-hummingboard.dts b/arch/arm/boot/dts/imx6q-hummingboard.dts new file mode 100644 index 000000000000..c2bf8476ce45 --- /dev/null +++ b/arch/arm/boot/dts/imx6q-hummingboard.dts @@ -0,0 +1,21 @@ +/* + * Copyright (C) 2014 Rabeeh Khoury (rabeeh@solid-run.com) + * Based on dt work by Russell King + */ +/dts-v1/; + +#include "imx6q.dtsi" +#include "imx6qdl-hummingboard.dtsi" + +/ { +	model = "SolidRun HummingBoard Dual/Quad"; +	compatible = "solidrun,hummingboard/q", "fsl,imx6q"; +}; + +&sata { +	status = "okay"; +	fsl,transmit-level-mV = <1025>; +	fsl,transmit-boost-mdB = <3330>; +	fsl,transmit-atten-16ths = <9>; +	fsl,receive-eq-mdB = <3000>; +}; diff --git a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi index e8e781656b3f..6a524ca011e7 100644 --- a/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi +++ b/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi @@ -61,7 +61,7 @@  	sound-spdif {  		compatible = "fsl,imx-audio-spdif"; -		model = "imx-spdif"; +		model = "Integrated SPDIF";  		/* IMX6 doesn't implement this yet */  		spdif-controller = <&spdif>;  		spdif-out; @@ -130,16 +130,23 @@  			fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>;  		}; +		pinctrl_cubox_i_usbh1: cubox-i-usbh1 { +			fsl,pins = <MX6QDL_PAD_GPIO_3__USB_H1_OC 0x1b0b0>; +		}; +  		pinctrl_cubox_i_usbh1_vbus: cubox-i-usbh1-vbus {  			fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x4001b0b0>;  		}; -		pinctrl_cubox_i_usbotg_id: cubox-i-usbotg-id { +		pinctrl_cubox_i_usbotg: cubox-i-usbotg {  			/* -			 * The Cubox-i pulls this low, but as it's pointless +			 * The Cubox-i pulls ID low, but as it's pointless  			 * leaving it as a pull-up, even if it is just 10uA.  			 */ -			fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>; +			fsl,pins = < +				MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059 +				MX6QDL_PAD_KEY_COL4__USB_OTG_OC 0x1b0b0 +			>;  		};  		pinctrl_cubox_i_usbotg_vbus: cubox-i-usbotg-vbus { @@ -173,13 +180,15 @@  };  &usbh1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_cubox_i_usbh1>;  	vbus-supply = <®_usbh1_vbus>;  	status = "okay";  };  &usbotg {  	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_cubox_i_usbotg_id>; +	pinctrl-0 = <&pinctrl_cubox_i_usbotg>;  	vbus-supply = <®_usbotg_vbus>;  	status = "okay";  }; diff --git a/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi index 0db15af41cb1..f2867c4b34a8 100644 --- a/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw51xx.dtsi @@ -9,11 +9,11 @@   * http://www.gnu.org/copyleft/gpl.html   */ +#include <dt-bindings/gpio/gpio.h> +  / {  	/* these are used by bootloader for disabling nodes */  	aliases { -		can0 = &can1; -		ethernet0 = &fec;  		led0 = &led0;  		led1 = &led1;  		nand = &gpmi; @@ -27,17 +27,19 @@  	leds {  		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>;  		led0: user1 {  			label = "user1"; -			gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */ +			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDG */  			default-state = "on";  			linux,default-trigger = "heartbeat";  		};  		led1: user2 {  			label = "user2"; -			gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */ +			gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDR */  			default-state = "off";  		};  	}; @@ -48,7 +50,9 @@  	pps {  		compatible = "pps-gpio"; -		gpios = <&gpio1 26 0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_pps>; +		gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;  		status = "okay";  	}; @@ -81,7 +85,7 @@  			regulator-name = "usb_otg_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio3 22 0>; +			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		};  	}; @@ -91,7 +95,7 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_enet>;  	phy-mode = "rgmii"; -	phy-reset-gpios = <&gpio1 30 0>; +	phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;  	status = "okay";  }; @@ -143,11 +147,6 @@  		#gpio-cells = <2>;  	}; -	hwmon: gsc@29 { -		compatible = "gw,gsp"; -		reg = <0x29>; -	}; -  	rtc: ds1672@68 {  		compatible = "dallas,ds1672";  		reg = <0x68>; @@ -159,53 +158,6 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_i2c2>;  	status = "okay"; - -	pmic: ltc3676@3c { -		compatible = "lltc,ltc3676"; -		reg = <0x3c>; - -		regulators { -			sw1_reg: ltc3676__sw1 { -				regulator-min-microvolt = <1175000>; -				regulator-max-microvolt = <1175000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			sw2_reg: ltc3676__sw2 { -				regulator-min-microvolt = <1800000>; -				regulator-max-microvolt = <1800000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			sw3_reg: ltc3676__sw3 { -				regulator-min-microvolt = <1175000>; -				regulator-max-microvolt = <1175000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			sw4_reg: ltc3676__sw4 { -				regulator-min-microvolt = <1500000>; -				regulator-max-microvolt = <1500000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			ldo2_reg: ltc3676__ldo2 { -				regulator-min-microvolt = <2500000>; -				regulator-max-microvolt = <2500000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			ldo4_reg: ltc3676__ldo4 { -				regulator-min-microvolt = <3000000>; -				regulator-max-microvolt = <3000000>; -			}; -		}; -	};  };  &i2c3 { @@ -213,31 +165,53 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_i2c3>;  	status = "okay"; +}; -	videoin: adv7180@20 { -		compatible = "adi,adv7180"; -		reg = <0x20>; -	}; +&pcie { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pcie>; +	reset-gpio = <&gpio1 0 GPIO_ACTIVE_LOW>; +	status = "okay";  }; -&iomuxc { +&uart1 {  	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hog>; +	pinctrl-0 = <&pinctrl_uart1>; +	status = "okay"; +}; -	imx6qdl-gw51xx { -		pinctrl_hog: hoggrp { -			fsl,pins = < -				MX6QDL_PAD_EIM_A19__GPIO2_IO19   0x80000000 /* MEZZ_DIO0 */ -				MX6QDL_PAD_EIM_A20__GPIO2_IO18   0x80000000 /* MEZZ_DIO1 */ -				MX6QDL_PAD_EIM_D22__GPIO3_IO22   0x80000000 /* OTG_PWR_EN */ -				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* GPS_PPS */ -				MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* PHY Reset */ -				MX6QDL_PAD_GPIO_0__GPIO1_IO00    0x80000000 /* PCIE_RST# */ -				MX6QDL_PAD_KEY_COL0__GPIO4_IO06  0x80000000 /* user1 led */ -				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07  0x80000000 /* user2 led */ -			 >; -		}; +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; +&uart3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart3>; +	status = "okay"; +}; + +&uart5 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart5>; +	status = "okay"; +}; + +&usbotg { +	vbus-supply = <®_usb_otg_vbus>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg>; +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	status = "okay"; +}; + +&iomuxc { +	imx6qdl-gw51xx {  		pinctrl_enet: enetgrp {  			fsl,pins = <  				MX6QDL_PAD_RGMII_RXC__RGMII_RXC		0x1b0b0 @@ -256,6 +230,14 @@  				MX6QDL_PAD_ENET_MDIO__ENET_MDIO		0x1b0b0  				MX6QDL_PAD_ENET_MDC__ENET_MDC		0x1b0b0  				MX6QDL_PAD_GPIO_16__ENET_REF_CLK	0x4001b0a8 +				MX6QDL_PAD_ENET_TXD0__GPIO1_IO30	0x1b0b0 /* PHY Reset */ +			>; +		}; + +		pinctrl_gpio_leds: gpioledsgrp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL0__GPIO4_IO06		0x1b0b0 +				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07		0x1b0b0  			>;  		}; @@ -301,6 +283,18 @@  			>;  		}; +		pinctrl_pcie: pciegrp { +			fsl,pins = < +				MX6QDL_PAD_GPIO_0__GPIO1_IO00		0x1b0b0 +			>; +		}; + +		pinctrl_pps: ppsgrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26	0x1b0b1 +			>; +		}; +  		pinctrl_uart1: uart1grp {  			fsl,pins = <  				MX6QDL_PAD_SD3_DAT7__UART1_TX_DATA	0x1b0b1 @@ -332,48 +326,8 @@  		pinctrl_usbotg: usbotggrp {  			fsl,pins = <  				MX6QDL_PAD_GPIO_1__USB_OTG_ID		0x17059 +				MX6QDL_PAD_EIM_D22__GPIO3_IO22		0x1b0b0 /* OTG_PWR_EN */  			>;  		};  	};  }; - -&pcie { -	reset-gpio = <&gpio1 0 0>; -	status = "okay"; -}; - -&uart1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart1>; -	status = "okay"; -}; - -&uart2 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart2>; -	status = "okay"; -}; - -&uart3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart3>; -	status = "okay"; -}; - -&uart5 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart5>; -	status = "okay"; -}; - -&usbotg { -	vbus-supply = <®_usb_otg_vbus>; -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usbotg>; -	disable-over-current; -	status = "okay"; -}; - -&usbh1 { -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi index 234e7b755232..d3c0bf5c84e3 100644 --- a/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw52xx.dtsi @@ -9,10 +9,11 @@   * http://www.gnu.org/copyleft/gpl.html   */ +#include <dt-bindings/gpio/gpio.h> +  / {  	/* these are used by bootloader for disabling nodes */  	aliases { -		ethernet0 = &fec;  		led0 = &led0;  		led1 = &led1;  		led2 = &led2; @@ -20,7 +21,6 @@  		ssi0 = &ssi1;  		usb0 = &usbh1;  		usb1 = &usbotg; -		usdhc2 = &usdhc3;  	};  	chosen { @@ -36,23 +36,25 @@  	leds {  		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>;  		led0: user1 {  			label = "user1"; -			gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */ +			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDG */  			default-state = "on";  			linux,default-trigger = "heartbeat";  		};  		led1: user2 {  			label = "user2"; -			gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */ +			gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDR */  			default-state = "off";  		};  		led2: user3 {  			label = "user3"; -			gpios = <&gpio4 15 1>; /* 111 - MX6_LOCLED# */ +			gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; /* MX6_LOCLED# */  			default-state = "off";  		};  	}; @@ -63,7 +65,9 @@  	pps {  		compatible = "pps-gpio"; -		gpios = <&gpio1 26 0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_pps>; +		gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;  		status = "okay";  	}; @@ -115,7 +119,7 @@  			regulator-name = "usb_otg_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio3 22 0>; +			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		};  	}; @@ -141,11 +145,17 @@  	status = "okay";  }; +&can1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_flexcan1>; +	status = "okay"; +}; +  &fec {  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_enet>;  	phy-mode = "rgmii"; -	phy-reset-gpios = <&gpio1 30 0>; +	phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;  	status = "okay";  }; @@ -197,11 +207,6 @@  		#gpio-cells = <2>;  	}; -	hwmon: gsc@29 { -		compatible = "gw,gsp"; -		reg = <0x29>; -	}; -  	rtc: ds1672@68 {  		compatible = "dallas,ds1672";  		reg = <0x68>; @@ -213,65 +218,6 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_i2c2>;  	status = "okay"; - -	pciswitch: pex8609@3f { -		compatible = "plx,pex8609"; -		reg = <0x3f>; -	}; - -	pmic: ltc3676@3c { -		compatible = "lltc,ltc3676"; -		reg = <0x3c>; - -		regulators { -			sw1_reg: ltc3676__sw1 { -				regulator-min-microvolt = <1175000>; -				regulator-max-microvolt = <1175000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			sw2_reg: ltc3676__sw2 { -				regulator-min-microvolt = <1800000>; -				regulator-max-microvolt = <1800000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			sw3_reg: ltc3676__sw3 { -				regulator-min-microvolt = <1175000>; -				regulator-max-microvolt = <1175000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			sw4_reg: ltc3676__sw4 { -				regulator-min-microvolt = <1500000>; -				regulator-max-microvolt = <1500000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			ldo2_reg: ltc3676__ldo2 { -				regulator-min-microvolt = <2500000>; -				regulator-max-microvolt = <2500000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			ldo3_reg: ltc3676__ldo3 { -				regulator-min-microvolt = <1800000>; -				regulator-max-microvolt = <1800000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			ldo4_reg: ltc3676__ldo4 { -				regulator-min-microvolt = <3000000>; -				regulator-max-microvolt = <3000000>; -			}; -		}; -	};  };  &i2c3 { @@ -280,11 +226,6 @@  	pinctrl-0 = <&pinctrl_i2c3>;  	status = "okay"; -	accelerometer: fxos8700@1e { -		compatible = "fsl,fxos8700"; -		reg = <0x13>; -	}; -  	codec: sgtl5000@0a {  		compatible = "fsl,sgtl5000";  		reg = <0x0a>; @@ -297,49 +238,101 @@  		compatible = "eeti,egalax_ts";  		reg = <0x04>;  		interrupt-parent = <&gpio7>; -		interrupts = <12 2>; /* gpio7_12 active low */ -		wakeup-gpios = <&gpio7 12 0>; +		interrupts = <12 2>; +		wakeup-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;  	}; +}; + +&ldb { +	status = "okay"; -	videoin: adv7180@20 { -		compatible = "adi,adv7180"; -		reg = <0x20>; +	lvds-channel@0 { +		fsl,data-mapping = "spwg"; +		fsl,data-width = <18>; +		status = "okay"; + +		display-timings { +			native-mode = <&timing0>; +			timing0: hsd100pxn1 { +				clock-frequency = <65000000>; +				hactive = <1024>; +				vactive = <768>; +				hback-porch = <220>; +				hfront-porch = <40>; +				vback-porch = <21>; +				vfront-porch = <7>; +				hsync-len = <60>; +				vsync-len = <10>; +			}; +		};  	};  }; -&iomuxc { +&pcie {  	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hog>; +	pinctrl-0 = <&pinctrl_pcie>; +	reset-gpio = <&gpio1 29 GPIO_ACTIVE_LOW>; +	status = "okay"; +}; -	imx6qdl-gw52xx { -		pinctrl_hog: hoggrp { -			fsl,pins = < -				MX6QDL_PAD_EIM_A19__GPIO2_IO19   0x80000000 /* MEZZ_DIO0 */ -				MX6QDL_PAD_EIM_A20__GPIO2_IO18   0x80000000 /* MEZZ_DIO1 */ -				MX6QDL_PAD_EIM_D22__GPIO3_IO22   0x80000000 /* OTG_PWR_EN */ -				MX6QDL_PAD_EIM_D31__GPIO3_IO31   0x80000000 /* VIDDEC_PDN# */ -				MX6QDL_PAD_ENET_TXD0__GPIO1_IO30 0x80000000 /* PHY Reset */ -				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 /* PCIE_RST# */ -				MX6QDL_PAD_ENET_RXD0__GPIO1_IO27 0x80000000 /* GPS_PWDN */ -				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26 0x80000000 /* GPS_PPS */ -				MX6QDL_PAD_GPIO_0__CCM_CLKO1     0x000130b0 /* AUD4_MCK */ -				MX6QDL_PAD_GPIO_2__GPIO1_IO02    0x80000000 /* USB_SEL_PCI */ -				MX6QDL_PAD_GPIO_17__GPIO7_IO12   0x80000000 /* TOUCH_IRQ# */ -				MX6QDL_PAD_KEY_COL0__GPIO4_IO06  0x80000000 /* user1 led */ -				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07  0x80000000 /* user2 led */ -				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15  0x80000000 /* user3 led */ -				MX6QDL_PAD_SD2_CMD__GPIO1_IO11   0x80000000 /* LVDS_TCH# */ -				MX6QDL_PAD_SD3_DAT5__GPIO7_IO00  0x80000000 /* SD3_CD# */ -				MX6QDL_PAD_SD4_DAT3__GPIO2_IO11  0x80000000 /* UART2_EN# */ -			 >; -		}; +&pwm4 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pwm4>; +	status = "okay"; +}; + +&ssi1 { +	fsl,mode = "i2s-slave"; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1>; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; + +&uart5 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart5>; +	status = "okay"; +}; + +&usbotg { +	vbus-supply = <®_usb_otg_vbus>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg>; +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3>; +	cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; +	vmmc-supply = <®_3p3v>; +	status = "okay"; +}; +&iomuxc { +	imx6qdl-gw52xx {  		pinctrl_audmux: audmuxgrp {  			fsl,pins = <  				MX6QDL_PAD_SD2_DAT0__AUD4_RXD		0x130b0  				MX6QDL_PAD_SD2_DAT3__AUD4_TXC		0x130b0  				MX6QDL_PAD_SD2_DAT2__AUD4_TXD		0x110b0  				MX6QDL_PAD_SD2_DAT1__AUD4_TXFS		0x130b0 +				MX6QDL_PAD_GPIO_0__CCM_CLKO1	0x130b0 /* AUD4_MCK */  			>;  		}; @@ -361,6 +354,23 @@  				MX6QDL_PAD_ENET_MDIO__ENET_MDIO		0x1b0b0  				MX6QDL_PAD_ENET_MDC__ENET_MDC		0x1b0b0  				MX6QDL_PAD_GPIO_16__ENET_REF_CLK	0x4001b0a8 +				MX6QDL_PAD_ENET_TXD0__GPIO1_IO30	0x1b0b0 /* PHY Reset */ +			>; +		}; + +		pinctrl_flexcan1: flexcan1grp { +			fsl,pins = < +				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX	0x1b0b1 +				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX	0x1b0b1 +				MX6QDL_PAD_GPIO_9__GPIO1_IO09		0x4001b0b0 /* CAN_STBY */ +			>; +		}; + +		pinctrl_gpio_leds: gpioledsgrp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL0__GPIO4_IO06  0x1b0b0 +				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07  0x1b0b0 +				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15  0x1b0b0  			>;  		}; @@ -406,6 +416,18 @@  			>;  		}; +		pinctrl_pcie: pciegrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29	0x1b0b0 /* PCIE_RST# */ +			>; +		}; + +		pinctrl_pps: ppsgrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26	0x1b0b1 +			>; +		}; +  		pinctrl_pwm4: pwm4grp {  			fsl,pins = <  				MX6QDL_PAD_SD1_CMD__PWM4_OUT		0x1b0b1 @@ -436,6 +458,7 @@  		pinctrl_usbotg: usbotggrp {  			fsl,pins = <  				MX6QDL_PAD_GPIO_1__USB_OTG_ID		0x17059 +				MX6QDL_PAD_EIM_D22__GPIO3_IO22	0x1b0b0 /* OTG_PWR_EN */  			>;  		}; @@ -447,85 +470,8 @@  				MX6QDL_PAD_SD3_DAT1__SD3_DATA1		0x17059  				MX6QDL_PAD_SD3_DAT2__SD3_DATA2		0x17059  				MX6QDL_PAD_SD3_DAT3__SD3_DATA3		0x17059 +				MX6QDL_PAD_SD3_DAT5__GPIO7_IO00	0x1b0b0 /* CD */  			>;  		};  	};  }; - -&ldb { -	status = "okay"; - -	lvds-channel@0 { -		fsl,data-mapping = "spwg"; -		fsl,data-width = <18>; -		status = "okay"; - -		display-timings { -			native-mode = <&timing0>; -			timing0: hsd100pxn1 { -				clock-frequency = <65000000>; -				hactive = <1024>; -				vactive = <768>; -				hback-porch = <220>; -				hfront-porch = <40>; -				vback-porch = <21>; -				vfront-porch = <7>; -				hsync-len = <60>; -				vsync-len = <10>; -			}; -		}; -	}; -}; - -&pcie { -	reset-gpio = <&gpio1 29 0>; -	status = "okay"; -}; - -&pwm4 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_pwm4>; -	status = "okay"; -}; - -&ssi1 { -	status = "okay"; -}; - -&uart1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart1>; -	status = "okay"; -}; - -&uart2 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart2>; -	status = "okay"; -}; - -&uart5 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart5>; -	status = "okay"; -}; - -&usbotg { -	vbus-supply = <®_usb_otg_vbus>; -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usbotg>; -	disable-over-current; -	status = "okay"; -}; - -&usbh1 { -	status = "okay"; -}; - -&usdhc3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc3>; -	cd-gpios = <&gpio7 0 0>; -	vmmc-supply = <®_3p3v>; -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi index 143f84f7812c..cade1bdc97e9 100644 --- a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi @@ -9,21 +9,19 @@   * http://www.gnu.org/copyleft/gpl.html   */ +#include <dt-bindings/gpio/gpio.h> +  / {  	/* these are used by bootloader for disabling nodes */  	aliases { -		can0 = &can1; -		ethernet0 = &fec;  		ethernet1 = ð1;  		led0 = &led0;  		led1 = &led1;  		led2 = &led2;  		nand = &gpmi; -		sky2 = ð1;  		ssi0 = &ssi1;  		usb0 = &usbh1;  		usb1 = &usbotg; -		usdhc2 = &usdhc3;  	};  	chosen { @@ -39,23 +37,25 @@  	leds {  		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>;  		led0: user1 {  			label = "user1"; -			gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */ +			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDG */  			default-state = "on";  			linux,default-trigger = "heartbeat";  		};  		led1: user2 {  			label = "user2"; -			gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */ +			gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDR */  			default-state = "off";  		};  		led2: user3 {  			label = "user3"; -			gpios = <&gpio4 15 1>; /* 111 -> MX6_LOCLED# */ +			gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; /* MX6_LOCLED# */  			default-state = "off";  		};  	}; @@ -66,7 +66,9 @@  	pps {  		compatible = "pps-gpio"; -		gpios = <&gpio1 26 0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_pps>; +		gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;  		status = "okay";  	}; @@ -118,7 +120,7 @@  			regulator-name = "usb_otg_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio3 22 0>; +			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		};  	}; @@ -154,7 +156,7 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_enet>;  	phy-mode = "rgmii"; -	phy-reset-gpios = <&gpio1 30 0>; +	phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;  	status = "okay";  }; @@ -206,11 +208,6 @@  		#gpio-cells = <2>;  	}; -	hwmon: gsc@29 { -		compatible = "gw,gsp"; -		reg = <0x29>; -	}; -  	rtc: ds1672@68 {  		compatible = "dallas,ds1672";  		reg = <0x68>; @@ -222,77 +219,6 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_i2c2>;  	status = "okay"; - -	pciclkgen: si53156@6b { -		compatible = "sil,si53156"; -		reg = <0x6b>; -	}; - -	pciswitch: pex8606@3f { -		compatible = "plx,pex8606"; -		reg = <0x3f>; -	}; - -	pmic: ltc3676@3c { -		compatible = "lltc,ltc3676"; -		reg = <0x3c>; - -		regulators { -			/* VDD_SOC */ -			sw1_reg: ltc3676__sw1 { -				regulator-min-microvolt = <1175000>; -				regulator-max-microvolt = <1175000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			/* VDD_1P8 */ -			sw2_reg: ltc3676__sw2 { -				regulator-min-microvolt = <1800000>; -				regulator-max-microvolt = <1800000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			/* VDD_ARM */ -			sw3_reg: ltc3676__sw3 { -				regulator-min-microvolt = <1175000>; -				regulator-max-microvolt = <1175000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			/* VDD_DDR */ -			sw4_reg: ltc3676__sw4 { -				regulator-min-microvolt = <1500000>; -				regulator-max-microvolt = <1500000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			/* VDD_2P5 */ -			ldo2_reg: ltc3676__ldo2 { -				regulator-min-microvolt = <2500000>; -				regulator-max-microvolt = <2500000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			/* VDD_1P8 */ -			ldo3_reg: ltc3676__ldo3 { -				regulator-min-microvolt = <1800000>; -				regulator-max-microvolt = <1800000>; -				regulator-boot-on; -				regulator-always-on; -			}; - -			/* VDD_HIGH */ -			ldo4_reg: ltc3676__ldo4 { -				regulator-min-microvolt = <3000000>; -				regulator-max-microvolt = <3000000>; -			}; -		}; -	};  };  &i2c3 { @@ -301,11 +227,6 @@  	pinctrl-0 = <&pinctrl_i2c3>;  	status = "okay"; -	accelerometer: fxos8700@1e { -		compatible = "fsl,fxos8700"; -		reg = <0x1e>; -	}; -  	codec: sgtl5000@0a {  		compatible = "fsl,sgtl5000";  		reg = <0x0a>; @@ -314,65 +235,110 @@  		VDDIO-supply = <®_3p3v>;  	}; -	hdmiin: adv7611@4c { -		compatible = "adi,adv7611"; -		reg = <0x4c>; -	}; -  	touchscreen: egalax_ts@04 {  		compatible = "eeti,egalax_ts";  		reg = <0x04>;  		interrupt-parent = <&gpio1>; -		interrupts = <11 2>; /* gpio1_11 active low */ -		wakeup-gpios = <&gpio1 11 0>; +		interrupts = <11 2>; +		wakeup-gpios = <&gpio1 11 GPIO_ACTIVE_LOW>;  	}; +}; -	videoout: adv7393@2a { -		compatible = "adi,adv7393"; -		reg = <0x2a>; +&ldb { +	status = "okay"; + +	lvds-channel@1 { +		fsl,data-mapping = "spwg"; +		fsl,data-width = <18>; +		status = "okay"; + +		display-timings { +			native-mode = <&timing0>; +			timing0: hsd100pxn1 { +				clock-frequency = <65000000>; +				hactive = <1024>; +				vactive = <768>; +				hback-porch = <220>; +				hfront-porch = <40>; +				vback-porch = <21>; +				vfront-porch = <7>; +				hsync-len = <60>; +				vsync-len = <10>; +			}; +		};  	}; +}; -	videoin: adv7180@20 { -		compatible = "adi,adv7180"; -		reg = <0x20>; +&pcie { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pcie>; +	reset-gpio = <&gpio1 29 GPIO_ACTIVE_LOW>; +	status = "okay"; + +	eth1: sky2@8 { /* MAC/PHY on bus 8 */ +		compatible = "marvell,sky2";  	};  }; -&iomuxc { +&pwm4 {  	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hog>; +	pinctrl-0 = <&pinctrl_pwm4>; +	status = "okay"; +}; -	imx6qdl-gw53xx { -		pinctrl_hog: hoggrp { -			fsl,pins = < -				MX6QDL_PAD_EIM_A19__GPIO2_IO19    0x80000000 /* PCIE6EXP_DIO0 */ -				MX6QDL_PAD_EIM_A20__GPIO2_IO18    0x80000000 /* PCIE6EXP_DIO1 */ -				MX6QDL_PAD_EIM_D22__GPIO3_IO22    0x80000000 /* OTG_PWR_EN */ -				MX6QDL_PAD_ENET_RXD0__GPIO1_IO27  0x80000000 /* GPS_SHDN */ -				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26  0x80000000 /* GPS_PPS */ -				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 /* PCIE IRQ */ -				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29  0x80000000 /* PCIE RST */ -				MX6QDL_PAD_GPIO_0__CCM_CLKO1      0x000130b0 /* AUD4_MCK */ -				MX6QDL_PAD_GPIO_2__GPIO1_IO02     0x80000000 /* CAN_STBY */ -				MX6QDL_PAD_GPIO_8__GPIO1_IO08     0x80000000 /* PMIC_IRQ# */ -				MX6QDL_PAD_GPIO_9__GPIO1_IO09     0x80000000 /* HUB_RST# */ -				MX6QDL_PAD_GPIO_17__GPIO7_IO12    0x80000000 /* PCIE_WDIS# */ -				MX6QDL_PAD_GPIO_19__GPIO4_IO05    0x80000000 /* ACCEL_IRQ# */ -				MX6QDL_PAD_KEY_COL0__GPIO4_IO06   0x80000000 /* user1 led */ -				MX6QDL_PAD_KEY_COL4__GPIO4_IO14   0x80000000 /* USBOTG_OC# */ -				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07   0x80000000 /* user2 led */ -				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15   0x80000000 /* user3 led */ -				MX6QDL_PAD_SD2_CMD__GPIO1_IO11    0x80000000 /* TOUCH_IRQ# */ -				MX6QDL_PAD_SD3_DAT5__GPIO7_IO00   0x80000000 /* SD3_DET# */ -			 >; -		}; +&ssi1 { +	fsl,mode = "i2s-slave"; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1>; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; +&uart5 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart5>; +	status = "okay"; +}; + +&usbotg { +	vbus-supply = <®_usb_otg_vbus>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg>; +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	vbus-supply = <®_usb_h1_vbus>; +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3>; +	cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; +	vmmc-supply = <®_3p3v>; +	status = "okay"; +}; + +&iomuxc { +	imx6qdl-gw53xx {  		pinctrl_audmux: audmuxgrp {  			fsl,pins = <  				MX6QDL_PAD_SD2_DAT0__AUD4_RXD		0x130b0  				MX6QDL_PAD_SD2_DAT3__AUD4_TXC		0x130b0  				MX6QDL_PAD_SD2_DAT2__AUD4_TXD		0x110b0  				MX6QDL_PAD_SD2_DAT1__AUD4_TXFS		0x130b0 +				MX6QDL_PAD_GPIO_0__CCM_CLKO1		0x130b0 /* AUD4_MCK */  			>;  		}; @@ -399,8 +365,17 @@  		pinctrl_flexcan1: flexcan1grp {  			fsl,pins = < -				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX	0x80000000 -				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX	0x80000000 +				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX	0x1b0b1 +				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX	0x1b0b1 +				MX6QDL_PAD_GPIO_2__GPIO1_IO02		0x4001b0b0 /* CAN_STBY */ +			>; +		}; + +		pinctrl_gpio_leds: gpioledsgrp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL0__GPIO4_IO06   0x1b0b0 +				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07   0x1b0b0 +				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15   0x1b0b0  			>;  		}; @@ -446,6 +421,19 @@  			>;  		}; +		pinctrl_pcie: pciegrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x1b0b0 /* PCIE IRQ */ +				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29  0x1b0b0 /* PCIE RST */ +			>; +		}; + +		pinctrl_pps: ppsgrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26	0x1b0b1 +			>; +		}; +  		pinctrl_pwm4: pwm4grp {  			fsl,pins = <  				MX6QDL_PAD_SD1_CMD__PWM4_OUT		0x1b0b1 @@ -476,6 +464,8 @@  		pinctrl_usbotg: usbotggrp {  			fsl,pins = <  				MX6QDL_PAD_GPIO_1__USB_OTG_ID		0x17059 +				MX6QDL_PAD_EIM_D22__GPIO3_IO22		0x1b0b0 /* PWR_EN */ +				MX6QDL_PAD_KEY_COL4__GPIO4_IO14		0x1b0b0 /* OC */  			>;  		}; @@ -487,90 +477,8 @@  				MX6QDL_PAD_SD3_DAT1__SD3_DATA1		0x17059  				MX6QDL_PAD_SD3_DAT2__SD3_DATA2		0x17059  				MX6QDL_PAD_SD3_DAT3__SD3_DATA3		0x17059 +				MX6QDL_PAD_SD3_DAT5__GPIO7_IO00		0x1b0b0 /* CD */  			>;  		};  	};  }; - -&ldb { -	status = "okay"; - -	lvds-channel@1 { -		fsl,data-mapping = "spwg"; -		fsl,data-width = <18>; -		status = "okay"; - -		display-timings { -			native-mode = <&timing0>; -			timing0: hsd100pxn1 { -				clock-frequency = <65000000>; -				hactive = <1024>; -				vactive = <768>; -				hback-porch = <220>; -				hfront-porch = <40>; -				vback-porch = <21>; -				vfront-porch = <7>; -				hsync-len = <60>; -				vsync-len = <10>; -			}; -		}; -	}; -}; - -&pcie { -	reset-gpio = <&gpio1 29 0>; -	status = "okay"; - -	eth1: sky2@8 { /* MAC/PHY on bus 8 */ -		compatible = "marvell,sky2"; -	}; -}; - -&pwm4 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_pwm4>; -	status = "okay"; -}; - -&ssi1 { -	status = "okay"; -}; - -&uart1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart1>; -	status = "okay"; -}; - -&uart2 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart2>; -	status = "okay"; -}; - -&uart5 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart5>; -	status = "okay"; -}; - -&usbotg { -	vbus-supply = <®_usb_otg_vbus>; -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usbotg>; -	disable-over-current; -	status = "okay"; -}; - -&usbh1 { -	vbus-supply = <®_usb_h1_vbus>; -	status = "okay"; -}; - -&usdhc3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc3>; -	cd-gpios = <&gpio7 0 0>; -	vmmc-supply = <®_3p3v>; -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi index 16e7ad3d98ad..cf13239a1619 100644 --- a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi @@ -9,21 +9,19 @@   * http://www.gnu.org/copyleft/gpl.html   */ +#include <dt-bindings/gpio/gpio.h> +  / {  	/* these are used by bootloader for disabling nodes */  	aliases { -		can0 = &can1; -		ethernet0 = &fec;  		ethernet1 = ð1;  		led0 = &led0;  		led1 = &led1;  		led2 = &led2;  		nand = &gpmi; -		sky2 = ð1;  		ssi0 = &ssi1;  		usb0 = &usbh1;  		usb1 = &usbotg; -		usdhc2 = &usdhc3;  	};  	chosen { @@ -39,23 +37,25 @@  	leds {  		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>;  		led0: user1 {  			label = "user1"; -			gpios = <&gpio4 6 0>; /* 102 -> MX6_PANLEDG */ +			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDG */  			default-state = "on";  			linux,default-trigger = "heartbeat";  		};  		led1: user2 {  			label = "user2"; -			gpios = <&gpio4 7 0>; /* 103 -> MX6_PANLEDR */ +			gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDR */  			default-state = "off";  		};  		led2: user3 {  			label = "user3"; -			gpios = <&gpio4 15 1>; /* 111 -> MX6_LOCLED# */ +			gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; /* MX6_LOCLED# */  			default-state = "off";  		};  	}; @@ -66,7 +66,9 @@  	pps {  		compatible = "pps-gpio"; -		gpios = <&gpio1 26 0>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_pps>; +		gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;  		status = "okay";  	}; @@ -108,7 +110,7 @@  			regulator-name = "usb_otg_vbus";  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>; -			gpio = <&gpio3 22 0>; +			gpio = <&gpio3 22 GPIO_ACTIVE_HIGH>;  			enable-active-high;  		};  	}; @@ -144,7 +146,7 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_enet>;  	phy-mode = "rgmii"; -	phy-reset-gpios = <&gpio1 30 0>; +	phy-reset-gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;  	status = "okay";  }; @@ -196,11 +198,6 @@  		#gpio-cells = <2>;  	}; -	hwmon: gsc@29 { -		compatible = "gw,gsp"; -		reg = <0x29>; -	}; -  	rtc: ds1672@68 {  		compatible = "dallas,ds1672";  		reg = <0x68>; @@ -311,16 +308,6 @@  			};  		};  	}; - -	pciswitch: pex8609@3f { -		compatible = "plx,pex8609"; -		reg = <0x3f>; -	}; - -	pciclkgen: si52147@6b { -		compatible = "sil,si52147"; -		reg = <0x6b>; -	};  };  &i2c3 { @@ -329,11 +316,6 @@  	pinctrl-0 = <&pinctrl_i2c3>;  	status = "okay"; -	accelerometer: fxos8700@1e { -		compatible = "fsl,fxos8700"; -		reg = <0x1e>; -	}; -  	codec: sgtl5000@0a {  		compatible = "fsl,sgtl5000";  		reg = <0x0a>; @@ -342,59 +324,115 @@  		VDDIO-supply = <®_3p3v>;  	}; -	hdmiin: adv7611@4c { -		compatible = "adi,adv7611"; -		reg = <0x4c>; -	}; -  	touchscreen: egalax_ts@04 {  		compatible = "eeti,egalax_ts";  		reg = <0x04>;  		interrupt-parent = <&gpio7>; -		interrupts = <12 2>; /* gpio7_12 active low */ -		wakeup-gpios = <&gpio7 12 0>; +		interrupts = <12 2>; +		wakeup-gpios = <&gpio7 12 GPIO_ACTIVE_LOW>;  	}; +}; -	videoout: adv7393@2a { -		compatible = "adi,adv7393"; -		reg = <0x2a>; +&ldb { +	status = "okay"; + +	lvds-channel@1 { +		fsl,data-mapping = "spwg"; +		fsl,data-width = <18>; +		status = "okay"; + +		display-timings { +			native-mode = <&timing0>; +			timing0: hsd100pxn1 { +				clock-frequency = <65000000>; +				hactive = <1024>; +				vactive = <768>; +				hback-porch = <220>; +				hfront-porch = <40>; +				vback-porch = <21>; +				vfront-porch = <7>; +				hsync-len = <60>; +				vsync-len = <10>; +			}; +		};  	}; +}; + +&pcie { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pcie>; +	reset-gpio = <&gpio1 29 GPIO_ACTIVE_LOW>; +	status = "okay"; -	videoin: adv7180@20 { -		compatible = "adi,adv7180"; -		reg = <0x20>; +	eth1: sky2@8 { /* MAC/PHY on bus 8 */ +		compatible = "marvell,sky2";  	};  }; -&iomuxc { +&pwm4 {  	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_hog>; +	pinctrl-0 = <&pinctrl_pwm4>; +	status = "okay"; +}; -	imx6qdl-gw54xx { -		pinctrl_hog: hoggrp { -			fsl,pins = < -				MX6QDL_PAD_EIM_D22__GPIO3_IO22    0x80000000 /* OTG_PWR_EN */ -				MX6QDL_PAD_EIM_D19__GPIO3_IO19    0x80000000 /* SPINOR_CS0# */ -				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26  0x80000000 /* GPS_PPS */ -				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28 0x80000000 /* PCIE IRQ */ -				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29  0x80000000 /* PCIE RST */ -				MX6QDL_PAD_GPIO_0__CCM_CLKO1      0x000130b0 /* AUD4_MCK */ -				MX6QDL_PAD_GPIO_2__GPIO1_IO02     0x80000000 /* CAN_STBY */ -				MX6QDL_PAD_GPIO_17__GPIO7_IO12    0x80000000 /* TOUCH_IRQ# */ -				MX6QDL_PAD_KEY_COL0__GPIO4_IO06   0x80000000 /* user1 led */ -				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07   0x80000000 /* user2 led */ -				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15   0x80000000 /* user3 led */ -				MX6QDL_PAD_SD1_DAT0__GPIO1_IO16   0x80000000 /* USBHUB_RST# */ -				MX6QDL_PAD_SD1_DAT3__GPIO1_IO21   0x80000000 /* MIPI_DIO */ -			 >; -		}; +&ssi1 { +	fsl,mode = "i2s-slave"; +	status = "okay"; +}; + +&ssi2 { +	fsl,mode = "i2s-slave"; +	status = "okay"; +}; + +&uart1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart1>; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; + +&uart5 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart5>; +	status = "okay"; +}; + +&usbotg { +	vbus-supply = <®_usb_otg_vbus>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usbotg>; +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	vbus-supply = <®_usb_h1_vbus>; +	status = "okay"; +}; + +&usdhc3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_usdhc3>; +	cd-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; +	vmmc-supply = <®_3p3v>; +	status = "okay"; +}; +&iomuxc { +	imx6qdl-gw54xx {  		pinctrl_audmux: audmuxgrp {  			fsl,pins = <  				MX6QDL_PAD_SD2_DAT0__AUD4_RXD		0x130b0  				MX6QDL_PAD_SD2_DAT3__AUD4_TXC		0x130b0  				MX6QDL_PAD_SD2_DAT2__AUD4_TXD		0x110b0  				MX6QDL_PAD_SD2_DAT1__AUD4_TXFS		0x130b0 +				MX6QDL_PAD_GPIO_0__CCM_CLKO1		0x130b0 /* AUD4_MCK */  			>;  		}; @@ -421,8 +459,17 @@  		pinctrl_flexcan1: flexcan1grp {  			fsl,pins = < -				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX	0x80000000 -				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX	0x80000000 +				MX6QDL_PAD_KEY_ROW2__FLEXCAN1_RX	0x1b0b1 +				MX6QDL_PAD_KEY_COL2__FLEXCAN1_TX	0x1b0b1 +				MX6QDL_PAD_GPIO_2__GPIO1_IO02		0x4001b0b0 /* CAN_STBY */ +			>; +		}; + +		pinctrl_gpio_leds: gpioledsgrp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL0__GPIO4_IO06		0x1b0b0 +				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07		0x1b0b0 +				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15		0x1b0b0  			>;  		}; @@ -468,6 +515,19 @@  			>;  		}; +		pinctrl_pcie: pciegrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_TX_EN__GPIO1_IO28	0x1b0b0 /* PCIE IRQ */ +				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29	0x1b0b0 /* PCIE RST */ +			>; +		}; + +		pinctrl_pps: ppsgrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_RXD1__GPIO1_IO26	0x1b0b1 +			>; +		}; +  		pinctrl_pwm4: pwm4grp {  			fsl,pins = <  				MX6QDL_PAD_SD1_CMD__PWM4_OUT		0x1b0b1 @@ -498,6 +558,7 @@  		pinctrl_usbotg: usbotggrp {  			fsl,pins = <  				MX6QDL_PAD_GPIO_1__USB_OTG_ID		0x17059 +				MX6QDL_PAD_EIM_D22__GPIO3_IO22		0x1b0b0 /* PWR_EN */  			>;  		}; @@ -513,90 +574,3 @@  		};  	};  }; - -&ldb { -	status = "okay"; - -	lvds-channel@1 { -		fsl,data-mapping = "spwg"; -		fsl,data-width = <18>; -		status = "okay"; - -		display-timings { -			native-mode = <&timing0>; -			timing0: hsd100pxn1 { -				clock-frequency = <65000000>; -				hactive = <1024>; -				vactive = <768>; -				hback-porch = <220>; -				hfront-porch = <40>; -				vback-porch = <21>; -				vfront-porch = <7>; -				hsync-len = <60>; -				vsync-len = <10>; -			}; -		}; -	}; -}; - -&pcie { -	reset-gpio = <&gpio1 29 0>; -	status = "okay"; - -	eth1: sky2@8 { /* MAC/PHY on bus 8 */ -		compatible = "marvell,sky2"; -	}; -}; - -&pwm4 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_pwm4>; -	status = "okay"; -}; - -&ssi1 { -	status = "okay"; -}; - -&ssi2 { -	status = "okay"; -}; - -&uart1 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart1>; -	status = "okay"; -}; - -&uart2 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart2>; -	status = "okay"; -}; - -&uart5 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_uart5>; -	status = "okay"; -}; - -&usbotg { -	vbus-supply = <®_usb_otg_vbus>; -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usbotg>; -	disable-over-current; -	status = "okay"; -}; - -&usbh1 { -	vbus-supply = <®_usb_h1_vbus>; -	status = "okay"; -}; - -&usdhc3 { -	pinctrl-names = "default"; -	pinctrl-0 = <&pinctrl_usdhc3>; -	cd-gpios = <&gpio7 0 0>; -	vmmc-supply = <®_3p3v>; -	status = "okay"; -}; diff --git a/arch/arm/boot/dts/imx6qdl-gw552x.dtsi b/arch/arm/boot/dts/imx6qdl-gw552x.dtsi new file mode 100644 index 000000000000..5c6587f6c420 --- /dev/null +++ b/arch/arm/boot/dts/imx6qdl-gw552x.dtsi @@ -0,0 +1,267 @@ +/* + * Copyright 2014 Gateworks Corporation + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +#include <dt-bindings/gpio/gpio.h> + +/ { +	/* these are used by bootloader for disabling nodes */ +	aliases { +		led0 = &led0; +		led1 = &led1; +		led2 = &led2; +		nand = &gpmi; +		usb0 = &usbh1; +		usb1 = &usbotg; +	}; + +	chosen { +		bootargs = "console=ttymxc1,115200"; +	}; + +	leds { +		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_gpio_leds>; + +		led0: user1 { +			label = "user1"; +			gpios = <&gpio4 6 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDG */ +			default-state = "on"; +			linux,default-trigger = "heartbeat"; +		}; + +		led1: user2 { +			label = "user2"; +			gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>; /* MX6_PANLEDR */ +			default-state = "off"; +		}; + +		led2: user3 { +			label = "user3"; +			gpios = <&gpio4 15 GPIO_ACTIVE_LOW>; /* MX6_LOCLED# */ +			default-state = "off"; +		}; +	}; + +	memory { +		reg = <0x10000000 0x20000000>; +	}; + +	regulators { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <0>; + +		reg_1p0v: regulator@0 { +			compatible = "regulator-fixed"; +			reg = <0>; +			regulator-name = "1P0V"; +			regulator-min-microvolt = <1000000>; +			regulator-max-microvolt = <1000000>; +			regulator-always-on; +		}; + +		reg_3p3v: regulator@2 { +			compatible = "regulator-fixed"; +			reg = <2>; +			regulator-name = "3P3V"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +		}; + +		reg_5p0v: regulator@3 { +			compatible = "regulator-fixed"; +			reg = <3>; +			regulator-name = "5P0V"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			regulator-always-on; +		}; +	}; +}; + +&gpmi { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_gpmi_nand>; +	status = "okay"; +}; + +&hdmi { +	ddc-i2c-bus = <&i2c3>; +	status = "okay"; +}; + +&i2c1 { +	clock-frequency = <100000>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c1>; +	status = "okay"; + +	eeprom1: eeprom@50 { +		compatible = "atmel,24c02"; +		reg = <0x50>; +		pagesize = <16>; +	}; + +	eeprom2: eeprom@51 { +		compatible = "atmel,24c02"; +		reg = <0x51>; +		pagesize = <16>; +	}; + +	eeprom3: eeprom@52 { +		compatible = "atmel,24c02"; +		reg = <0x52>; +		pagesize = <16>; +	}; + +	eeprom4: eeprom@53 { +		compatible = "atmel,24c02"; +		reg = <0x53>; +		pagesize = <16>; +	}; + +	gpio: pca9555@23 { +		compatible = "nxp,pca9555"; +		reg = <0x23>; +		gpio-controller; +		#gpio-cells = <2>; +	}; + +	rtc: ds1672@68 { +		compatible = "dallas,ds1672"; +		reg = <0x68>; +	}; +}; + +&i2c2 { +	clock-frequency = <100000>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c2>; +	status = "okay"; +}; + +&i2c3 { +	clock-frequency = <100000>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c3>; +	status = "okay"; +}; + +&pcie { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pcie>; +	reset-gpio = <&gpio1 29 GPIO_ACTIVE_LOW>; +	status = "okay"; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; + +&uart3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart3>; +	status = "okay"; +}; + +&uart5 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart5>; +	status = "okay"; }; + +&usbh1 { +	status = "okay"; +}; + +&iomuxc { +	imx6qdl-gw552x { +		pinctrl_gpio_leds: gpioledsgrp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL0__GPIO4_IO06		0x1b0b0 +				MX6QDL_PAD_KEY_ROW0__GPIO4_IO07		0x1b0b0 +				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15		0x1b0b0 +			>; +		}; + +		pinctrl_gpmi_nand: gpminandgrp { +			fsl,pins = < +				MX6QDL_PAD_NANDF_CLE__NAND_CLE		0xb0b1 +				MX6QDL_PAD_NANDF_ALE__NAND_ALE		0xb0b1 +				MX6QDL_PAD_NANDF_WP_B__NAND_WP_B	0xb0b1 +				MX6QDL_PAD_NANDF_RB0__NAND_READY_B	0xb000 +				MX6QDL_PAD_NANDF_CS0__NAND_CE0_B	0xb0b1 +				MX6QDL_PAD_NANDF_CS1__NAND_CE1_B	0xb0b1 +				MX6QDL_PAD_SD4_CMD__NAND_RE_B		0xb0b1 +				MX6QDL_PAD_SD4_CLK__NAND_WE_B		0xb0b1 +				MX6QDL_PAD_NANDF_D0__NAND_DATA00	0xb0b1 +				MX6QDL_PAD_NANDF_D1__NAND_DATA01	0xb0b1 +				MX6QDL_PAD_NANDF_D2__NAND_DATA02	0xb0b1 +				MX6QDL_PAD_NANDF_D3__NAND_DATA03	0xb0b1 +				MX6QDL_PAD_NANDF_D4__NAND_DATA04	0xb0b1 +				MX6QDL_PAD_NANDF_D5__NAND_DATA05	0xb0b1 +				MX6QDL_PAD_NANDF_D6__NAND_DATA06	0xb0b1 +				MX6QDL_PAD_NANDF_D7__NAND_DATA07	0xb0b1 +			>; +		}; + +		pinctrl_i2c1: i2c1grp { +			fsl,pins = < +				MX6QDL_PAD_EIM_D21__I2C1_SCL		0x4001b8b1 +				MX6QDL_PAD_EIM_D28__I2C1_SDA		0x4001b8b1 +			>; +		}; + +		pinctrl_i2c2: i2c2grp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL3__I2C2_SCL		0x4001b8b1 +				MX6QDL_PAD_KEY_ROW3__I2C2_SDA		0x4001b8b1 +			>; +		}; + +		pinctrl_i2c3: i2c3grp { +			fsl,pins = < +				MX6QDL_PAD_GPIO_3__I2C3_SCL		0x4001b8b1 +				MX6QDL_PAD_GPIO_6__I2C3_SDA		0x4001b8b1 +			>; +		}; + +		pinctrl_pcie: pciegrp { +			fsl,pins = < +				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29	0x1b0b0 +			>; +		}; + +		pinctrl_uart2: uart2grp { +			fsl,pins = < +				MX6QDL_PAD_SD4_DAT7__UART2_TX_DATA	0x1b0b1 +				MX6QDL_PAD_SD4_DAT4__UART2_RX_DATA	0x1b0b1 +			>; +		}; + +		pinctrl_uart3: uart3grp { +			fsl,pins = < +				MX6QDL_PAD_EIM_D24__UART3_TX_DATA	0x1b0b1 +				MX6QDL_PAD_EIM_D25__UART3_RX_DATA	0x1b0b1 +			>; +		}; + +		pinctrl_uart5: uart5grp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL1__UART5_TX_DATA	0x1b0b1 +				MX6QDL_PAD_KEY_ROW1__UART5_RX_DATA	0x1b0b1 +			>; +                }; +	}; +}; diff --git a/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi new file mode 100644 index 000000000000..62841e85a91e --- /dev/null +++ b/arch/arm/boot/dts/imx6qdl-hummingboard.dtsi @@ -0,0 +1,200 @@ +/* + * Copyright (C) 2013,2014 Russell King + */ +#include "imx6qdl-microsom.dtsi" +#include "imx6qdl-microsom-ar8035.dtsi" + +/ { +	chosen { +		stdout-path = &uart1; +	}; + +	ir_recv: ir-receiver { +		compatible = "gpio-ir-receiver"; +		gpios = <&gpio3 5 1>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pinctrl_hummingboard_gpio3_5>; +	}; + +	regulators { +		compatible = "simple-bus"; + +		reg_3p3v: 3p3v { +			compatible = "regulator-fixed"; +			regulator-name = "3P3V"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +		}; + +		reg_usbh1_vbus: usb-h1-vbus { +			compatible = "regulator-fixed"; +			enable-active-high; +			gpio = <&gpio1 0 0>; +			pinctrl-names = "default"; +			pinctrl-0 = <&pinctrl_hummingboard_usbh1_vbus>; +			regulator-name = "usb_h1_vbus"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +		}; + +		reg_usbotg_vbus: usb-otg-vbus { +			compatible = "regulator-fixed"; +			enable-active-high; +			gpio = <&gpio3 22 0>; +			pinctrl-names = "default"; +			pinctrl-0 = <&pinctrl_hummingboard_usbotg_vbus>; +			regulator-name = "usb_otg_vbus"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +		}; +	}; + +	sound-spdif { +		compatible = "fsl,imx-audio-spdif"; +		model = "On-board SPDIF"; +		/* IMX6 doesn't implement this yet */ +		spdif-controller = <&spdif>; +		spdif-out; +	}; +}; + +&can1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hummingboard_flexcan1>; +	status = "okay"; +}; + +&hdmi { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hummingboard_hdmi>; +	ddc-i2c-bus = <&i2c2>; +	status = "okay"; +}; + +&i2c1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hummingboard_i2c1>; + +	/* +	 * Not fitted on Carrier-1 board... yet +	status = "okay"; + +	rtc: pcf8523@68 { +		compatible = "nxp,pcf8523"; +		reg = <0x68>; +	}; +	 */ +}; + +&i2c2 { +	clock-frequency = <100000>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hummingboard_i2c2>; +	status = "okay"; +}; + +&iomuxc { +	hummingboard { +		pinctrl_hummingboard_flexcan1: hummingboard-flexcan1 { +			fsl,pins = < +				MX6QDL_PAD_SD3_CLK__FLEXCAN1_RX 0x80000000 +				MX6QDL_PAD_SD3_CMD__FLEXCAN1_TX 0x80000000 +			>; +		}; + +		pinctrl_hummingboard_gpio3_5: hummingboard-gpio3_5 { +			fsl,pins = < +				MX6QDL_PAD_EIM_DA5__GPIO3_IO05 0x1b0b1 +			>; +		}; + +		pinctrl_hummingboard_hdmi: hummingboard-hdmi { +			fsl,pins = < +				MX6QDL_PAD_KEY_ROW2__HDMI_TX_CEC_LINE 0x1f8b0 +			>; +		}; + +		pinctrl_hummingboard_i2c1: hummingboard-i2c1 { +			fsl,pins = < +				MX6QDL_PAD_EIM_D21__I2C1_SCL 0x4001b8b1 +				MX6QDL_PAD_EIM_D28__I2C1_SDA 0x4001b8b1 +			>; +		}; + +		pinctrl_hummingboard_i2c2: hummingboard-i2c2 { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL3__I2C2_SCL 0x4001b8b1 +				MX6QDL_PAD_KEY_ROW3__I2C2_SDA 0x4001b8b1 +			>; +		}; + +		pinctrl_hummingboard_spdif: hummingboard-spdif { +			fsl,pins = <MX6QDL_PAD_GPIO_17__SPDIF_OUT 0x13091>; +		}; + +		pinctrl_hummingboard_usbh1_vbus: hummingboard-usbh1-vbus { +			fsl,pins = <MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0>; +		}; + +		pinctrl_hummingboard_usbotg_id: hummingboard-usbotg-id { +			/* +			 * Similar to pinctrl_usbotg_2, but we want it +			 * pulled down for a fixed host connection. +			 */ +			fsl,pins = <MX6QDL_PAD_GPIO_1__USB_OTG_ID 0x13059>; +		}; + +		pinctrl_hummingboard_usbotg_vbus: hummingboard-usbotg-vbus { +			fsl,pins = <MX6QDL_PAD_EIM_D22__GPIO3_IO22 0x1b0b0>; +		}; + +		pinctrl_hummingboard_usdhc2_aux: hummingboard-usdhc2-aux { +			fsl,pins = < +				MX6QDL_PAD_GPIO_4__GPIO1_IO04    0x1f071 +			>; +		}; + +		pinctrl_hummingboard_usdhc2: hummingboard-usdhc2 { +			fsl,pins = < +				MX6QDL_PAD_SD2_CMD__SD2_CMD    0x17059 +				MX6QDL_PAD_SD2_CLK__SD2_CLK    0x10059 +				MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x17059 +				MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x17059 +				MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059 +				MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059 +			>; +		}; +	}; +}; + +&spdif { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hummingboard_spdif>; +	status = "okay"; +}; + +&usbh1 { +	disable-over-current; +	vbus-supply = <®_usbh1_vbus>; +	status = "okay"; +}; + +&usbotg { +	disable-over-current; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_hummingboard_usbotg_id>; +	vbus-supply = <®_usbotg_vbus>; +	status = "okay"; +}; + +&usdhc2 { +	pinctrl-names = "default"; +	pinctrl-0 = < +		&pinctrl_hummingboard_usdhc2_aux +		&pinctrl_hummingboard_usdhc2 +	>; +	vmmc-supply = <®_3p3v>; +	cd-gpios = <&gpio1 4 0>; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi b/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi index d16066608e21..db9f45b2c573 100644 --- a/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi +++ b/arch/arm/boot/dts/imx6qdl-microsom-ar8035.dtsi @@ -17,7 +17,7 @@  	enet {  		pinctrl_microsom_enet_ar8035: microsom-enet-ar8035 {  			fsl,pins = < -				MX6QDL_PAD_ENET_MDIO__ENET_MDIO		0x1b0b0 +				MX6QDL_PAD_ENET_MDIO__ENET_MDIO		0x1b8b0  				MX6QDL_PAD_ENET_MDC__ENET_MDC		0x1b0b0  				/* AR8035 reset */  				MX6QDL_PAD_KEY_ROW4__GPIO4_IO15		0x130b0 diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi index 42ff525ebe13..08218120e770 100644 --- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi +++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi @@ -174,6 +174,11 @@  	status = "okay";  }; +&hdmi { +	ddc-i2c-bus = <&i2c2>; +	status = "okay"; +}; +  &i2c1 {  	clock-frequency = <100000>;  	pinctrl-names = "default"; @@ -187,6 +192,25 @@  		VDDA-supply = <®_2p5v>;  		VDDIO-supply = <®_3p3v>;  	}; + +	rtc: rtc@6f { +		compatible = "isil,isl1208"; +		reg = <0x6f>; +	}; +}; + +&i2c2 { +	clock-frequency = <100000>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c2>; +	status = "okay"; +}; + +&i2c3 { +	clock-frequency = <100000>; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_i2c3>; +	status = "okay";  };  &iomuxc { @@ -266,6 +290,20 @@  			>;  		}; +		pinctrl_i2c2: i2c2grp { +			fsl,pins = < +				MX6QDL_PAD_KEY_COL3__I2C2_SCL		0x4001b8b1 +				MX6QDL_PAD_KEY_ROW3__I2C2_SDA		0x4001b8b1 +			>; +		}; + +		pinctrl_i2c3: i2c3grp { +			fsl,pins = < +				MX6QDL_PAD_GPIO_5__I2C3_SCL		0x4001b8b1 +				MX6QDL_PAD_GPIO_16__I2C3_SDA		0x4001b8b1 +			>; +		}; +  		pinctrl_pwm1: pwm1grp {  			fsl,pins = <  				MX6QDL_PAD_SD1_DAT3__PWM1_OUT 0x1b0b1 diff --git a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi index 2694aa84e187..0e50bb0a6b94 100644 --- a/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi +++ b/arch/arm/boot/dts/imx6qdl-phytec-pfla02.dtsi @@ -83,7 +83,7 @@  	};  	pmic@58 { -		compatible = "dialog,da9063"; +		compatible = "dlg,da9063";  		reg = <0x58>;  		interrupt-parent = <&gpio4>;  		interrupts = <17 0x8>; /* active-low GPIO4_17 */ diff --git a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi index ec43dde78525..baf2f00d519a 100644 --- a/arch/arm/boot/dts/imx6qdl-sabresd.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabresd.dtsi @@ -54,6 +54,19 @@  			gpio = <&gpio4 10 0>;  			enable-active-high;  		}; + +		reg_pcie: regulator@3 { +			compatible = "regulator-fixed"; +			reg = <3>; +			pinctrl-names = "default"; +			pinctrl-0 = <&pinctrl_pcie_reg>; +			regulator-name = "MPCIE_3V3"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			gpio = <&gpio3 19 0>; +			regulator-always-on; +			enable-active-high; +		};  	};  	gpio-keys { @@ -314,15 +327,15 @@  	imx6qdl-sabresd {  		pinctrl_hog: hoggrp {  			fsl,pins = < -				MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x80000000 -				MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x80000000 -				MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x80000000 -				MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x80000000 +				MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x1b0b0 +				MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x1b0b0 +				MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x1b0b0 +				MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x1b0b0  				MX6QDL_PAD_GPIO_0__CCM_CLKO1    0x130b0 -				MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x80000000 -				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x80000000 -				MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x80000000 -				MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x80000000 +				MX6QDL_PAD_NANDF_CLE__GPIO6_IO07 0x1b0b0 +				MX6QDL_PAD_ENET_TXD1__GPIO1_IO29 0x1b0b0 +				MX6QDL_PAD_EIM_D22__GPIO3_IO22  0x1b0b0 +				MX6QDL_PAD_ENET_CRS_DV__GPIO1_IO25 0x1b0b0  			>;  		}; @@ -367,9 +380,9 @@  		pinctrl_gpio_keys: gpio_keysgrp {  			fsl,pins = < -				MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x80000000 -				MX6QDL_PAD_GPIO_4__GPIO1_IO04  0x80000000 -				MX6QDL_PAD_GPIO_5__GPIO1_IO05  0x80000000 +				MX6QDL_PAD_EIM_D29__GPIO3_IO29 0x1b0b0 +				MX6QDL_PAD_GPIO_4__GPIO1_IO04  0x1b0b0 +				MX6QDL_PAD_GPIO_5__GPIO1_IO05  0x1b0b0  			>;  		}; @@ -396,7 +409,13 @@  		pinctrl_pcie: pciegrp {  			fsl,pins = < -				MX6QDL_PAD_GPIO_17__GPIO7_IO12	0x80000000 +				MX6QDL_PAD_GPIO_17__GPIO7_IO12	0x1b0b0 +			>; +		}; + +		pinctrl_pcie_reg: pciereggrp { +			fsl,pins = < +				MX6QDL_PAD_EIM_D19__GPIO3_IO19	0x1b0b0  			>;  		}; @@ -468,7 +487,7 @@  	gpio_leds {  		pinctrl_gpio_leds: gpioledsgrp {  			fsl,pins = < -				MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x80000000 +				MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x1b0b0  			>;  		};  	}; diff --git a/arch/arm/boot/dts/imx6qdl.dtsi b/arch/arm/boot/dts/imx6qdl.dtsi index c701af958006..9596ed5867e6 100644 --- a/arch/arm/boot/dts/imx6qdl.dtsi +++ b/arch/arm/boot/dts/imx6qdl.dtsi @@ -137,7 +137,9 @@  		pcie: pcie@0x01000000 {  			compatible = "fsl,imx6q-pcie", "snps,dw-pcie"; -			reg = <0x01ffc000 0x4000>; /* DBI */ +			reg = <0x01ffc000 0x04000>, +			      <0x01f00000 0x80000>; +			reg-names = "dbi", "config";  			#address-cells = <3>;  			#size-cells = <2>;  			device_type = "pci"; @@ -273,11 +275,14 @@  				};  				ssi1: ssi@02028000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6q-ssi",  							"fsl,imx51-ssi";  					reg = <0x02028000 0x4000>;  					interrupts = <0 46 IRQ_TYPE_LEVEL_HIGH>; -					clocks = <&clks IMX6QDL_CLK_SSI1_IPG>; +					clocks = <&clks IMX6QDL_CLK_SSI1_IPG>, +						 <&clks IMX6QDL_CLK_SSI1>; +					clock-names = "ipg", "baud";  					dmas = <&sdma 37 1 0>,  					       <&sdma 38 1 0>;  					dma-names = "rx", "tx"; @@ -286,11 +291,14 @@  				};  				ssi2: ssi@0202c000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6q-ssi",  							"fsl,imx51-ssi";  					reg = <0x0202c000 0x4000>;  					interrupts = <0 47 IRQ_TYPE_LEVEL_HIGH>; -					clocks = <&clks IMX6QDL_CLK_SSI2_IPG>; +					clocks = <&clks IMX6QDL_CLK_SSI2_IPG>, +						 <&clks IMX6QDL_CLK_SSI2>; +					clock-names = "ipg", "baud";  					dmas = <&sdma 41 1 0>,  					       <&sdma 42 1 0>;  					dma-names = "rx", "tx"; @@ -299,11 +307,14 @@  				};  				ssi3: ssi@02030000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6q-ssi",  							"fsl,imx51-ssi";  					reg = <0x02030000 0x4000>;  					interrupts = <0 48 IRQ_TYPE_LEVEL_HIGH>; -					clocks = <&clks IMX6QDL_CLK_SSI3_IPG>; +					clocks = <&clks IMX6QDL_CLK_SSI3_IPG>, +						 <&clks IMX6QDL_CLK_SSI3>; +					clock-names = "ipg", "baud";  					dmas = <&sdma 45 1 0>,  					       <&sdma 46 1 0>;  					dma-names = "rx", "tx"; @@ -396,8 +407,9 @@  				reg = <0x02098000 0x4000>;  				interrupts = <0 55 IRQ_TYPE_LEVEL_HIGH>;  				clocks = <&clks IMX6QDL_CLK_GPT_IPG>, -					 <&clks IMX6QDL_CLK_GPT_IPG_PER>; -				clock-names = "ipg", "per"; +					 <&clks IMX6QDL_CLK_GPT_IPG_PER>, +					 <&clks IMX6QDL_CLK_GPT_3M>; +				clock-names = "ipg", "per", "osc_per";  			};  			gpio1: gpio@0209c000 { diff --git a/arch/arm/boot/dts/imx6sl-evk.dts b/arch/arm/boot/dts/imx6sl-evk.dts index 3f9e041c0252..898d14fd765f 100644 --- a/arch/arm/boot/dts/imx6sl-evk.dts +++ b/arch/arm/boot/dts/imx6sl-evk.dts @@ -20,6 +20,13 @@  		reg = <0x80000000 0x40000000>;  	}; +	backlight { +		compatible = "pwm-backlight"; +		pwms = <&pwm1 0 5000000>; +		brightness-levels = <0 4 8 16 32 64 128 255>; +		default-brightness-level = <6>; +	}; +  	leds {  		compatible = "gpio-leds";  		pinctrl-names = "default"; @@ -74,6 +81,14 @@  			regulator-max-microvolt = <4325000>;  			regulator-boot-on;  		}; + +		reg_lcd_3v3: regulator@4 { +			compatible = "regulator-fixed"; +			reg = <4>; +			regulator-name = "lcd-3v3"; +			gpio = <&gpio4 3 0>; +			enable-active-high; +		};  	};  	sound { @@ -329,12 +344,6 @@  			>;  		}; -		pinctrl_led: ledgrp { -			fsl,pins = < -				MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x17059 -			>; -		}; -  		pinctrl_kpp: kppgrp {  			fsl,pins = <  				MX6SL_PAD_KEY_ROW0__KEY_ROW0    0x1b010 @@ -346,6 +355,51 @@  			>;  		}; +		pinctrl_lcd: lcdgrp { +			fsl,pins = < +				MX6SL_PAD_LCD_DAT0__LCD_DATA00 0x1b0b0 +				MX6SL_PAD_LCD_DAT1__LCD_DATA01 0x1b0b0 +				MX6SL_PAD_LCD_DAT2__LCD_DATA02 0x1b0b0 +				MX6SL_PAD_LCD_DAT3__LCD_DATA03 0x1b0b0 +				MX6SL_PAD_LCD_DAT4__LCD_DATA04 0x1b0b0 +				MX6SL_PAD_LCD_DAT5__LCD_DATA05 0x1b0b0 +				MX6SL_PAD_LCD_DAT6__LCD_DATA06 0x1b0b0 +				MX6SL_PAD_LCD_DAT7__LCD_DATA07 0x1b0b0 +				MX6SL_PAD_LCD_DAT8__LCD_DATA08 0x1b0b0 +				MX6SL_PAD_LCD_DAT9__LCD_DATA09 0x1b0b0 +				MX6SL_PAD_LCD_DAT10__LCD_DATA10 0x1b0b0 +				MX6SL_PAD_LCD_DAT11__LCD_DATA11 0x1b0b0 +				MX6SL_PAD_LCD_DAT12__LCD_DATA12 0x1b0b0 +				MX6SL_PAD_LCD_DAT13__LCD_DATA13 0x1b0b0 +				MX6SL_PAD_LCD_DAT14__LCD_DATA14 0x1b0b0 +				MX6SL_PAD_LCD_DAT15__LCD_DATA15 0x1b0b0 +				MX6SL_PAD_LCD_DAT16__LCD_DATA16 0x1b0b0 +				MX6SL_PAD_LCD_DAT17__LCD_DATA17 0x1b0b0 +				MX6SL_PAD_LCD_DAT18__LCD_DATA18 0x1b0b0 +				MX6SL_PAD_LCD_DAT19__LCD_DATA19 0x1b0b0 +				MX6SL_PAD_LCD_DAT20__LCD_DATA20 0x1b0b0 +				MX6SL_PAD_LCD_DAT21__LCD_DATA21 0x1b0b0 +				MX6SL_PAD_LCD_DAT22__LCD_DATA22 0x1b0b0 +				MX6SL_PAD_LCD_DAT23__LCD_DATA23 0x1b0b0 +				MX6SL_PAD_LCD_CLK__LCD_CLK 0x1b0b0 +				MX6SL_PAD_LCD_ENABLE__LCD_ENABLE 0x1b0b0 +				MX6SL_PAD_LCD_HSYNC__LCD_HSYNC 0x1b0b0 +				MX6SL_PAD_LCD_VSYNC__LCD_VSYNC 0x1b0b0 +			>; +		}; + +		pinctrl_led: ledgrp { +			fsl,pins = < +				MX6SL_PAD_HSIC_STROBE__GPIO3_IO20 0x17059 +			>; +		}; + +		pinctrl_pwm1: pwmgrp { +			fsl,pins = < +				MX6SL_PAD_PWM1__PWM1_OUT 0x110b0 +			>; +		}; +  		pinctrl_uart1: uart1grp {  			fsl,pins = <  				MX6SL_PAD_UART1_RXD__UART1_RX_DATA	0x1b0b1 @@ -488,6 +542,44 @@  	status = "okay";  }; +&lcdif { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_lcd>; +	lcd-supply = <®_lcd_3v3>; +	display = <&display0>; +	status = "okay"; + +	display0: display0 { +		bits-per-pixel = <32>; +		bus-width = <24>; + +		display-timings { +			native-mode = <&timing0>; +			timing0: timing0 { +				clock-frequency = <33500000>; +				hactive = <800>; +				vactive = <480>; +				hback-porch = <89>; +				hfront-porch = <164>; +				vback-porch = <23>; +				vfront-porch = <10>; +				hsync-len = <10>; +				vsync-len = <10>; +				hsync-active = <0>; +				vsync-active = <0>; +				de-active = <1>; +				pixelclk-active = <0>; +			}; +		}; +	}; +}; + +&pwm1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pwm1>; +	status = "okay"; +}; +  &ssi2 {  	status = "okay";  }; diff --git a/arch/arm/boot/dts/imx6sl.dtsi b/arch/arm/boot/dts/imx6sl.dtsi index c75800ca8b35..dfd83e6d8087 100644 --- a/arch/arm/boot/dts/imx6sl.dtsi +++ b/arch/arm/boot/dts/imx6sl.dtsi @@ -226,11 +226,14 @@  				};  				ssi1: ssi@02028000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6sl-ssi",  							"fsl,imx51-ssi";  					reg = <0x02028000 0x4000>;  					interrupts = <0 46 IRQ_TYPE_LEVEL_HIGH>; -					clocks = <&clks IMX6SL_CLK_SSI1>; +					clocks = <&clks IMX6SL_CLK_SSI1_IPG>, +						 <&clks IMX6SL_CLK_SSI1>; +					clock-names = "ipg", "baud";  					dmas = <&sdma 37 1 0>,  					       <&sdma 38 1 0>;  					dma-names = "rx", "tx"; @@ -239,11 +242,14 @@  				};  				ssi2: ssi@0202c000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6sl-ssi",  							"fsl,imx51-ssi";  					reg = <0x0202c000 0x4000>;  					interrupts = <0 47 IRQ_TYPE_LEVEL_HIGH>; -					clocks = <&clks IMX6SL_CLK_SSI2>; +					clocks = <&clks IMX6SL_CLK_SSI2_IPG>, +						 <&clks IMX6SL_CLK_SSI2>; +					clock-names = "ipg", "baud";  					dmas = <&sdma 41 1 0>,  					       <&sdma 42 1 0>;  					dma-names = "rx", "tx"; @@ -252,11 +258,14 @@  				};  				ssi3: ssi@02030000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6sl-ssi",  							"fsl,imx51-ssi";  					reg = <0x02030000 0x4000>;  					interrupts = <0 48 IRQ_TYPE_LEVEL_HIGH>; -					clocks = <&clks IMX6SL_CLK_SSI3>; +					clocks = <&clks IMX6SL_CLK_SSI3_IPG>, +						 <&clks IMX6SL_CLK_SSI3>; +					clock-names = "ipg", "baud";  					dmas = <&sdma 45 1 0>,  					       <&sdma 46 1 0>;  					dma-names = "rx", "tx"; @@ -529,6 +538,14 @@  				};  			}; +			tempmon: tempmon { +				compatible = "fsl,imx6q-tempmon"; +				interrupts = <0 49 IRQ_TYPE_LEVEL_HIGH>; +				fsl,tempmon = <&anatop>; +				fsl,tempmon-data = <&ocotp>; +				clocks = <&clks IMX6SL_CLK_PLL3_USB_OTG>; +			}; +  			usbphy1: usbphy@020c9000 {  				compatible = "fsl,imx6sl-usbphy", "fsl,imx23-usbphy";  				reg = <0x020c9000 0x1000>; @@ -627,8 +644,14 @@  			};  			lcdif: lcdif@020f8000 { +				compatible = "fsl,imx6sl-lcdif", "fsl,imx28-lcdif";  				reg = <0x020f8000 0x4000>;  				interrupts = <0 39 IRQ_TYPE_LEVEL_HIGH>; +				clocks = <&clks IMX6SL_CLK_LCDIF_PIX>, +					 <&clks IMX6SL_CLK_LCDIF_AXI>, +					 <&clks IMX6SL_CLK_DUMMY>; +				clock-names = "pix", "axi", "disp_axi"; +				status = "disabled";  			};  			dcp: dcp@020fc000 { @@ -784,7 +807,7 @@  			};  			ocotp: ocotp@021bc000 { -				compatible = "fsl,imx6sl-ocotp"; +				compatible = "fsl,imx6sl-ocotp", "syscon";  				reg = <0x021bc000 0x4000>;  			}; diff --git a/arch/arm/boot/dts/imx6sx-pinfunc.h b/arch/arm/boot/dts/imx6sx-pinfunc.h index 3e0b816dac08..bb9c6b78cb97 100644 --- a/arch/arm/boot/dts/imx6sx-pinfunc.h +++ b/arch/arm/boot/dts/imx6sx-pinfunc.h @@ -78,7 +78,7 @@  #define MX6SX_PAD_GPIO1_IO07__USDHC2_WP                           0x0030 0x0378 0x0870 0x1 0x1  #define MX6SX_PAD_GPIO1_IO07__ENET2_MDIO                          0x0030 0x0378 0x0770 0x2 0x0  #define MX6SX_PAD_GPIO1_IO07__AUDMUX_MCLK                         0x0030 0x0378 0x0000 0x3 0x0 -#define MX6SX_PAD_GPIO1_IO07__UART1_CTS_B                         0x0030 0x0378 0x082C 0x4 0x1 +#define MX6SX_PAD_GPIO1_IO07__UART1_CTS_B                         0x0030 0x0378 0x0000 0x4 0x0  #define MX6SX_PAD_GPIO1_IO07__GPIO1_IO_7                          0x0030 0x0378 0x0000 0x5 0x0  #define MX6SX_PAD_GPIO1_IO07__SRC_EARLY_RESET                     0x0030 0x0378 0x0000 0x6 0x0  #define MX6SX_PAD_GPIO1_IO07__DCIC2_OUT                           0x0030 0x0378 0x0000 0x7 0x0 @@ -96,7 +96,7 @@  #define MX6SX_PAD_GPIO1_IO09__WDOG2_WDOG_B                        0x0038 0x0380 0x0000 0x1 0x0  #define MX6SX_PAD_GPIO1_IO09__SDMA_EXT_EVENT_1                    0x0038 0x0380 0x0820 0x2 0x0  #define MX6SX_PAD_GPIO1_IO09__CCM_OUT0                            0x0038 0x0380 0x0000 0x3 0x0 -#define MX6SX_PAD_GPIO1_IO09__UART2_CTS_B                         0x0038 0x0380 0x0834 0x4 0x1 +#define MX6SX_PAD_GPIO1_IO09__UART2_CTS_B                         0x0038 0x0380 0x0000 0x4 0x0  #define MX6SX_PAD_GPIO1_IO09__GPIO1_IO_9                          0x0038 0x0380 0x0000 0x5 0x0  #define MX6SX_PAD_GPIO1_IO09__SRC_INT_BOOT                        0x0038 0x0380 0x0000 0x6 0x0  #define MX6SX_PAD_GPIO1_IO09__OBSERVE_MUX_OUT_4                   0x0038 0x0380 0x0000 0x7 0x0 @@ -213,7 +213,7 @@  #define MX6SX_PAD_CSI_DATA07__ESAI_TX3_RX2                        0x0068 0x03B0 0x079C 0x1 0x1  #define MX6SX_PAD_CSI_DATA07__I2C4_SDA                            0x0068 0x03B0 0x07C4 0x2 0x2  #define MX6SX_PAD_CSI_DATA07__KPP_ROW_7                           0x0068 0x03B0 0x07DC 0x3 0x0 -#define MX6SX_PAD_CSI_DATA07__UART6_CTS_B                         0x0068 0x03B0 0x0854 0x4 0x1 +#define MX6SX_PAD_CSI_DATA07__UART6_CTS_B                         0x0068 0x03B0 0x0000 0x4 0x0  #define MX6SX_PAD_CSI_DATA07__GPIO1_IO_21                         0x0068 0x03B0 0x0000 0x5 0x0  #define MX6SX_PAD_CSI_DATA07__WEIM_DATA_16                        0x0068 0x03B0 0x0000 0x6 0x0  #define MX6SX_PAD_CSI_DATA07__DCIC1_OUT                           0x0068 0x03B0 0x0000 0x7 0x0 @@ -254,7 +254,7 @@  #define MX6SX_PAD_CSI_VSYNC__CSI1_VSYNC                           0x0078 0x03C0 0x0708 0x0 0x0  #define MX6SX_PAD_CSI_VSYNC__ESAI_TX5_RX0                         0x0078 0x03C0 0x07A4 0x1 0x1  #define MX6SX_PAD_CSI_VSYNC__AUDMUX_AUD6_RXD                      0x0078 0x03C0 0x0674 0x2 0x1 -#define MX6SX_PAD_CSI_VSYNC__UART4_CTS_B                          0x0078 0x03C0 0x0844 0x3 0x3 +#define MX6SX_PAD_CSI_VSYNC__UART4_CTS_B                          0x0078 0x03C0 0x0000 0x3 0x0  #define MX6SX_PAD_CSI_VSYNC__MQS_RIGHT                            0x0078 0x03C0 0x0000 0x4 0x0  #define MX6SX_PAD_CSI_VSYNC__GPIO1_IO_25                          0x0078 0x03C0 0x0000 0x5 0x0  #define MX6SX_PAD_CSI_VSYNC__WEIM_DATA_24                         0x0078 0x03C0 0x0000 0x6 0x0 @@ -352,7 +352,7 @@  #define MX6SX_PAD_ENET2_TX_CLK__ENET2_TX_CLK                      0x00A0 0x03E8 0x0000 0x0 0x0  #define MX6SX_PAD_ENET2_TX_CLK__ENET2_REF_CLK2                    0x00A0 0x03E8 0x076C 0x1 0x1  #define MX6SX_PAD_ENET2_TX_CLK__I2C3_SDA                          0x00A0 0x03E8 0x07BC 0x2 0x1 -#define MX6SX_PAD_ENET2_TX_CLK__UART1_CTS_B                       0x00A0 0x03E8 0x082C 0x3 0x3 +#define MX6SX_PAD_ENET2_TX_CLK__UART1_CTS_B                       0x00A0 0x03E8 0x0000 0x3 0x0  #define MX6SX_PAD_ENET2_TX_CLK__MLB_CLK                           0x00A0 0x03E8 0x07E8 0x4 0x1  #define MX6SX_PAD_ENET2_TX_CLK__GPIO2_IO_9                        0x00A0 0x03E8 0x0000 0x5 0x0  #define MX6SX_PAD_ENET2_TX_CLK__USB_OTG2_PWR                      0x00A0 0x03E8 0x0000 0x6 0x0 @@ -404,7 +404,7 @@  #define MX6SX_PAD_KEY_COL4__SAI2_RX_BCLK                          0x00B4 0x03FC 0x0808 0x7 0x0  #define MX6SX_PAD_KEY_ROW0__KPP_ROW_0                             0x00B8 0x0400 0x0000 0x0 0x0  #define MX6SX_PAD_KEY_ROW0__USDHC3_WP                             0x00B8 0x0400 0x0000 0x1 0x0 -#define MX6SX_PAD_KEY_ROW0__UART6_CTS_B                           0x00B8 0x0400 0x0854 0x2 0x3 +#define MX6SX_PAD_KEY_ROW0__UART6_CTS_B                           0x00B8 0x0400 0x0000 0x2 0x0  #define MX6SX_PAD_KEY_ROW0__ECSPI1_MOSI                           0x00B8 0x0400 0x0718 0x3 0x0  #define MX6SX_PAD_KEY_ROW0__AUDMUX_AUD5_TXD                       0x00B8 0x0400 0x0660 0x4 0x0  #define MX6SX_PAD_KEY_ROW0__GPIO2_IO_15                           0x00B8 0x0400 0x0000 0x5 0x0 @@ -423,7 +423,7 @@  #define MX6SX_PAD_KEY_ROW1__M4_NMI                                0x00BC 0x0404 0x0000 0x8 0x0  #define MX6SX_PAD_KEY_ROW2__KPP_ROW_2                             0x00C0 0x0408 0x0000 0x0 0x0  #define MX6SX_PAD_KEY_ROW2__USDHC4_WP                             0x00C0 0x0408 0x0878 0x1 0x1 -#define MX6SX_PAD_KEY_ROW2__UART5_CTS_B                           0x00C0 0x0408 0x084C 0x2 0x3 +#define MX6SX_PAD_KEY_ROW2__UART5_CTS_B                           0x00C0 0x0408 0x0000 0x2 0x0  #define MX6SX_PAD_KEY_ROW2__CAN1_RX                               0x00C0 0x0408 0x068C 0x3 0x1  #define MX6SX_PAD_KEY_ROW2__CANFD_RX1                             0x00C0 0x0408 0x0694 0x4 0x1  #define MX6SX_PAD_KEY_ROW2__GPIO2_IO_17                           0x00C0 0x0408 0x0000 0x5 0x0 @@ -815,7 +815,7 @@  #define MX6SX_PAD_NAND_DATA05__RAWNAND_DATA05                     0x0164 0x04AC 0x0000 0x0 0x0  #define MX6SX_PAD_NAND_DATA05__USDHC2_DATA5                       0x0164 0x04AC 0x0000 0x1 0x0  #define MX6SX_PAD_NAND_DATA05__QSPI2_B_DQS                        0x0164 0x04AC 0x0000 0x2 0x0 -#define MX6SX_PAD_NAND_DATA05__UART3_CTS_B                        0x0164 0x04AC 0x083C 0x3 0x1 +#define MX6SX_PAD_NAND_DATA05__UART3_CTS_B                        0x0164 0x04AC 0x0000 0x3 0x0  #define MX6SX_PAD_NAND_DATA05__AUDMUX_AUD4_RXC                    0x0164 0x04AC 0x064C 0x4 0x0  #define MX6SX_PAD_NAND_DATA05__GPIO4_IO_9                         0x0164 0x04AC 0x0000 0x5 0x0  #define MX6SX_PAD_NAND_DATA05__WEIM_AD_5                          0x0164 0x04AC 0x0000 0x6 0x0 @@ -957,7 +957,7 @@  #define MX6SX_PAD_QSPI1A_SS1_B__SIM_M_HADDR_12                    0x019C 0x04E4 0x0000 0x7 0x0  #define MX6SX_PAD_QSPI1A_SS1_B__SDMA_DEBUG_PC_3                   0x019C 0x04E4 0x0000 0x9 0x0  #define MX6SX_PAD_QSPI1B_DATA0__QSPI1_B_DATA_0                    0x01A0 0x04E8 0x0000 0x0 0x0 -#define MX6SX_PAD_QSPI1B_DATA0__UART3_CTS_B                       0x01A0 0x04E8 0x083C 0x1 0x4 +#define MX6SX_PAD_QSPI1B_DATA0__UART3_CTS_B                       0x01A0 0x04E8 0x0000 0x1 0x0  #define MX6SX_PAD_QSPI1B_DATA0__ECSPI3_MOSI                       0x01A0 0x04E8 0x0738 0x2 0x1  #define MX6SX_PAD_QSPI1B_DATA0__ESAI_RX_FS                        0x01A0 0x04E8 0x0778 0x3 0x2  #define MX6SX_PAD_QSPI1B_DATA0__CSI1_DATA_22                      0x01A0 0x04E8 0x06F4 0x4 0x1 @@ -1236,7 +1236,7 @@  #define MX6SX_PAD_SD1_DATA2__AUDMUX_AUD5_TXFS                     0x0230 0x0578 0x0670 0x1 0x1  #define MX6SX_PAD_SD1_DATA2__PWM3_OUT                             0x0230 0x0578 0x0000 0x2 0x0  #define MX6SX_PAD_SD1_DATA2__GPT_COMPARE2                         0x0230 0x0578 0x0000 0x3 0x0 -#define MX6SX_PAD_SD1_DATA2__UART2_CTS_B                          0x0230 0x0578 0x0834 0x4 0x2 +#define MX6SX_PAD_SD1_DATA2__UART2_CTS_B                          0x0230 0x0578 0x0000 0x4 0x0  #define MX6SX_PAD_SD1_DATA2__GPIO6_IO_4                           0x0230 0x0578 0x0000 0x5 0x0  #define MX6SX_PAD_SD1_DATA2__ECSPI4_RDY                           0x0230 0x0578 0x0000 0x6 0x0  #define MX6SX_PAD_SD1_DATA2__CCM_OUT0                             0x0230 0x0578 0x0000 0x7 0x0 @@ -1315,7 +1315,7 @@  #define MX6SX_PAD_SD2_DATA3__VADC_CLAMP_CURRENT_3                 0x024C 0x0594 0x0000 0x8 0x0  #define MX6SX_PAD_SD2_DATA3__MMDC_DEBUG_31                        0x024C 0x0594 0x0000 0x9 0x0  #define MX6SX_PAD_SD3_CLK__USDHC3_CLK                             0x0250 0x0598 0x0000 0x0 0x0 -#define MX6SX_PAD_SD3_CLK__UART4_CTS_B                            0x0250 0x0598 0x0844 0x1 0x0 +#define MX6SX_PAD_SD3_CLK__UART4_CTS_B                            0x0250 0x0598 0x0000 0x1 0x0  #define MX6SX_PAD_SD3_CLK__ECSPI4_SCLK                            0x0250 0x0598 0x0740 0x2 0x0  #define MX6SX_PAD_SD3_CLK__AUDMUX_AUD6_RXFS                       0x0250 0x0598 0x0680 0x3 0x0  #define MX6SX_PAD_SD3_CLK__LCDIF2_VSYNC                           0x0250 0x0598 0x0000 0x4 0x0 @@ -1409,7 +1409,7 @@  #define MX6SX_PAD_SD3_DATA7__USDHC3_DATA7                         0x0274 0x05BC 0x0000 0x0 0x0  #define MX6SX_PAD_SD3_DATA7__CAN1_RX                              0x0274 0x05BC 0x068C 0x1 0x0  #define MX6SX_PAD_SD3_DATA7__CANFD_RX1                            0x0274 0x05BC 0x0694 0x2 0x0 -#define MX6SX_PAD_SD3_DATA7__UART3_CTS_B                          0x0274 0x05BC 0x083C 0x3 0x3 +#define MX6SX_PAD_SD3_DATA7__UART3_CTS_B                          0x0274 0x05BC 0x0000 0x3 0x0  #define MX6SX_PAD_SD3_DATA7__LCDIF2_DATA_5                        0x0274 0x05BC 0x0000 0x4 0x0  #define MX6SX_PAD_SD3_DATA7__GPIO7_IO_9                           0x0274 0x05BC 0x0000 0x5 0x0  #define MX6SX_PAD_SD3_DATA7__ENET1_1588_EVENT0_IN                 0x0274 0x05BC 0x0000 0x6 0x0 @@ -1510,7 +1510,7 @@  #define MX6SX_PAD_SD4_DATA6__SDMA_DEBUG_EVENT_CHANNEL_1           0x0298 0x05E0 0x0000 0x9 0x0  #define MX6SX_PAD_SD4_DATA7__USDHC4_DATA7                         0x029C 0x05E4 0x0000 0x0 0x0  #define MX6SX_PAD_SD4_DATA7__RAWNAND_DATA08                       0x029C 0x05E4 0x0000 0x1 0x0 -#define MX6SX_PAD_SD4_DATA7__UART5_CTS_B                          0x029C 0x05E4 0x084C 0x2 0x1 +#define MX6SX_PAD_SD4_DATA7__UART5_CTS_B                          0x029C 0x05E4 0x0000 0x2 0x0  #define MX6SX_PAD_SD4_DATA7__ECSPI3_SS0                           0x029C 0x05E4 0x073C 0x3 0x0  #define MX6SX_PAD_SD4_DATA7__LCDIF2_DATA_15                       0x029C 0x05E4 0x0000 0x4 0x0  #define MX6SX_PAD_SD4_DATA7__GPIO6_IO_21                          0x029C 0x05E4 0x0000 0x5 0x0 diff --git a/arch/arm/boot/dts/imx6sx-sdb.dts b/arch/arm/boot/dts/imx6sx-sdb.dts index a3980d970590..82d6b34527b7 100644 --- a/arch/arm/boot/dts/imx6sx-sdb.dts +++ b/arch/arm/boot/dts/imx6sx-sdb.dts @@ -24,6 +24,13 @@  		reg = <0x80000000 0x40000000>;  	}; +	backlight { +		compatible = "pwm-backlight"; +		pwms = <&pwm3 0 5000000>; +		brightness-levels = <0 4 8 16 32 64 128 255>; +		default-brightness-level = <6>; +	}; +  	gpio-keys {  		compatible = "gpio-keys";  		pinctrl-names = "default"; @@ -90,6 +97,14 @@  			regulator-min-microvolt = <5000000>;  			regulator-max-microvolt = <5000000>;  		}; + +		reg_lcd_3v3: regulator@4 { +			compatible = "regulator-fixed"; +			reg = <4>; +			regulator-name = "lcd-3v3"; +			gpio = <&gpio3 27 0>; +			enable-active-high; +		};  	};  	sound { @@ -251,6 +266,44 @@  	};  }; +&lcdif1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_lcd>; +	lcd-supply = <®_lcd_3v3>; +	display = <&display0>; +	status = "okay"; + +	display0: display0 { +		bits-per-pixel = <16>; +		bus-width = <24>; + +		display-timings { +			native-mode = <&timing0>; +			timing0: timing0 { +				clock-frequency = <33500000>; +				hactive = <800>; +				vactive = <480>; +				hback-porch = <89>; +				hfront-porch = <164>; +				vback-porch = <23>; +				vfront-porch = <10>; +				hsync-len = <10>; +				vsync-len = <10>; +				hsync-active = <0>; +				vsync-active = <0>; +				de-active = <1>; +				pixelclk-active = <0>; +			}; +		}; +	}; +}; + +&pwm3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_pwm3>; +	status = "okay"; +}; +  &ssi2 {  	status = "okay";  }; @@ -365,6 +418,46 @@  			>;  		}; +		pinctrl_lcd: lcdgrp { +			fsl,pins = < +				MX6SX_PAD_LCD1_DATA00__LCDIF1_DATA_0 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA01__LCDIF1_DATA_1 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA02__LCDIF1_DATA_2 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA03__LCDIF1_DATA_3 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA04__LCDIF1_DATA_4 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA05__LCDIF1_DATA_5 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA06__LCDIF1_DATA_6 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA07__LCDIF1_DATA_7 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA08__LCDIF1_DATA_8 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA09__LCDIF1_DATA_9 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA10__LCDIF1_DATA_10 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA11__LCDIF1_DATA_11 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA12__LCDIF1_DATA_12 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA13__LCDIF1_DATA_13 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA14__LCDIF1_DATA_14 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA15__LCDIF1_DATA_15 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA16__LCDIF1_DATA_16 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA17__LCDIF1_DATA_17 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA18__LCDIF1_DATA_18 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA19__LCDIF1_DATA_19 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA20__LCDIF1_DATA_20 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA21__LCDIF1_DATA_21 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA22__LCDIF1_DATA_22 0x4001b0b0 +				MX6SX_PAD_LCD1_DATA23__LCDIF1_DATA_23 0x4001b0b0 +				MX6SX_PAD_LCD1_CLK__LCDIF1_CLK	0x4001b0b0 +				MX6SX_PAD_LCD1_ENABLE__LCDIF1_ENABLE 0x4001b0b0 +				MX6SX_PAD_LCD1_VSYNC__LCDIF1_VSYNC 0x4001b0b0 +				MX6SX_PAD_LCD1_HSYNC__LCDIF1_HSYNC 0x4001b0b0 +				MX6SX_PAD_LCD1_RESET__GPIO3_IO_27 0x4001b0b0 +			>; +		}; + +		pinctrl_pwm3: pwm3grp-1 { +			fsl,pins = < +				MX6SX_PAD_SD1_DATA2__PWM3_OUT 0x110b0 +			>; +		}; +  		pinctrl_vcc_sd3: vccsd3grp {  			fsl,pins = <  				MX6SX_PAD_KEY_COL1__GPIO2_IO_11		0x17059 diff --git a/arch/arm/boot/dts/imx6sx.dtsi b/arch/arm/boot/dts/imx6sx.dtsi index f4b9da65bc0f..888dd767a0b3 100644 --- a/arch/arm/boot/dts/imx6sx.dtsi +++ b/arch/arm/boot/dts/imx6sx.dtsi @@ -298,6 +298,7 @@  				};  				ssi1: ssi@02028000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6sx-ssi", "fsl,imx51-ssi";  					reg = <0x02028000 0x4000>;  					interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; @@ -311,6 +312,7 @@  				};  				ssi2: ssi@0202c000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6sx-ssi", "fsl,imx51-ssi";  					reg = <0x0202c000 0x4000>;  					interrupts = <GIC_SPI 47 IRQ_TYPE_LEVEL_HIGH>; @@ -324,6 +326,7 @@  				};  				ssi3: ssi@02030000 { +					#sound-dai-cells = <0>;  					compatible = "fsl,imx6sx-ssi", "fsl,imx51-ssi";  					reg = <0x02030000 0x4000>;  					interrupts = <GIC_SPI 48 IRQ_TYPE_LEVEL_HIGH>; @@ -418,7 +421,7 @@  				reg = <0x02098000 0x4000>;  				interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>;  				clocks = <&clks IMX6SX_CLK_GPT_BUS>, -					 <&clks IMX6SX_CLK_GPT_SERIAL>; +					 <&clks IMX6SX_CLK_GPT_3M>;  				clock-names = "ipg", "per";  			}; @@ -1062,6 +1065,7 @@  				};  				lcdif1: lcdif@02220000 { +					compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";  					reg = <0x02220000 0x4000>;  					interrupts = <GIC_SPI 5 IRQ_TYPE_LEVEL_HIGH>;  					clocks = <&clks IMX6SX_CLK_LCDIF1_PIX>, @@ -1072,6 +1076,7 @@  				};  				lcdif2: lcdif@02224000 { +					compatible = "fsl,imx6sx-lcdif", "fsl,imx28-lcdif";  					reg = <0x02224000 0x4000>;  					interrupts = <GIC_SPI 6 IRQ_TYPE_LEVEL_HIGH>;  					clocks = <&clks IMX6SX_CLK_LCDIF2_PIX>, diff --git a/arch/arm/boot/dts/meson.dtsi b/arch/arm/boot/dts/meson.dtsi new file mode 100644 index 000000000000..55feb14a333d --- /dev/null +++ b/arch/arm/boot/dts/meson.dtsi @@ -0,0 +1,105 @@ +/* + * Copyright 2014 Carlo Caione <carlo@caione.org> + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE. + */ + +/include/ "skeleton.dtsi" + +/ { +	interrupt-parent = <&gic>; + +	gic: interrupt-controller@c4301000 { +		compatible = "arm,cortex-a9-gic"; +		reg = <0xc4301000 0x1000>, +		      <0xc4300100 0x0100>; +		interrupt-controller; +		#interrupt-cells = <3>; +	}; + +	timer@c1109940 { +		compatible = "amlogic,meson6-timer"; +		reg = <0xc1109940 0x14>; +		interrupts = <0 10 1>; +	}; + +	soc { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		uart_AO: serial@c81004c0 { +			compatible = "amlogic,meson-uart"; +			reg = <0xc81004c0 0x14>; +			interrupts = <0 90 1>; +			clocks = <&clk81>; +			status = "disabled"; +		}; + +		uart_A: serial@c81084c0 { +			compatible = "amlogic,meson-uart"; +			reg = <0xc81084c0 0x14>; +			interrupts = <0 90 1>; +			clocks = <&clk81>; +			status = "disabled"; +		}; + +		uart_B: serial@c81084dc { +			compatible = "amlogic,meson-uart"; +			reg = <0xc81084dc 0x14>; +			interrupts = <0 90 1>; +			clocks = <&clk81>; +			status = "disabled"; +		}; + +		uart_C: serial@c8108700 { +			compatible = "amlogic,meson-uart"; +			reg = <0xc8108700 0x14>; +			interrupts = <0 90 1>; +			clocks = <&clk81>; +			status = "disabled"; +		}; +	}; +}; /* end of / */ diff --git a/arch/arm/boot/dts/meson6-atv1200.dts b/arch/arm/boot/dts/meson6-atv1200.dts new file mode 100644 index 000000000000..dc2541faf1ec --- /dev/null +++ b/arch/arm/boot/dts/meson6-atv1200.dts @@ -0,0 +1,66 @@ +/* + * Copyright 2014 Carlo Caione <carlo@caione.org> + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE. + */ + +/dts-v1/; +/include/ "meson6.dtsi" + +/ { +	model = "Geniatech ATV1200"; +	compatible = "geniatech,atv1200"; + +	aliases { +		serial0 = &uart_AO; +	}; + +	memory { +		reg = <0x40000000 0x80000000>; +	}; +}; + +&uart_AO { +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/meson6.dtsi b/arch/arm/boot/dts/meson6.dtsi new file mode 100644 index 000000000000..4ba49127779f --- /dev/null +++ b/arch/arm/boot/dts/meson6.dtsi @@ -0,0 +1,78 @@ +/* + * Copyright 2014 Carlo Caione <carlo@caione.org> + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE. + */ + +/include/ "meson.dtsi" + +/ { +	model = "Amlogic Meson6 SoC"; +	compatible = "amlogic,meson6"; + +	interrupt-parent = <&gic>; + +	cpus { +		#address-cells = <1>; +		#size-cells = <0>; + +		cpu@200 { +			device_type = "cpu"; +			compatible = "arm,cortex-a9"; +			reg = <0x200>; +		}; + +		cpu@201 { +			device_type = "cpu"; +			compatible = "arm,cortex-a9"; +			reg = <0x201>; +		}; +	}; + +	clk81: clk@0 { +		#clock-cells = <0>; +		compatible = "fixed-clock"; +		clock-frequency = <200000000>; +	}; +}; /* end of / */ diff --git a/arch/arm/boot/dts/mt6589-aquaris5.dts b/arch/arm/boot/dts/mt6589-aquaris5.dts index 443b4467de15..0da047013120 100644 --- a/arch/arm/boot/dts/mt6589-aquaris5.dts +++ b/arch/arm/boot/dts/mt6589-aquaris5.dts @@ -18,6 +18,11 @@  / {  	model = "bq Aquaris5"; +	compatible = "mundoreader,bq-aquaris5", "mediatek,mt6589"; + +	chosen { +		bootargs = "earlyprintk"; +	};  	memory {  		reg = <0x80000000 0x40000000>; diff --git a/arch/arm/boot/dts/mt6589.dtsi b/arch/arm/boot/dts/mt6589.dtsi index d0297a051549..e3c7600ddb38 100644 --- a/arch/arm/boot/dts/mt6589.dtsi +++ b/arch/arm/boot/dts/mt6589.dtsi @@ -81,8 +81,8 @@  			clock-names = "system-clk", "rtc-clk";  		}; -		gic: interrupt-controller@10212000 { -			compatible = "arm,cortex-a15-gic"; +		gic: interrupt-controller@10211000 { +			compatible = "arm,cortex-a7-gic";  			interrupt-controller;  			#interrupt-cells = <3>;  			reg = <0x10211000 0x1000>, diff --git a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi index 9be3c1266378..ae89aad01595 100644 --- a/arch/arm/boot/dts/omap2420.dtsi +++ b/arch/arm/boot/dts/omap2420.dtsi @@ -159,6 +159,14 @@  			ti,hwmods = "mailbox";  			ti,mbox-num-users = <4>;  			ti,mbox-num-fifos = <6>; +			mbox_dsp: dsp { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <1 0 0>; +			}; +			mbox_iva: iva { +				ti,mbox-tx = <2 1 3>; +				ti,mbox-rx = <3 1 3>; +			};  		};  		timer1: timer@48028000 { diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi index 1a00f15d9096..b56d71611026 100644 --- a/arch/arm/boot/dts/omap2430.dtsi +++ b/arch/arm/boot/dts/omap2430.dtsi @@ -249,6 +249,10 @@  			ti,hwmods = "mailbox";  			ti,mbox-num-users = <4>;  			ti,mbox-num-fifos = <6>; +			mbox_dsp: dsp { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <1 0 0>; +			};  		};  		timer1: timer@49018000 { diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts index 3c3e6da1deac..a9aae88b74f5 100644 --- a/arch/arm/boot/dts/omap3-beagle.dts +++ b/arch/arm/boot/dts/omap3-beagle.dts @@ -292,6 +292,7 @@  &uart3 {  	pinctrl-names = "default";  	pinctrl-0 = <&uart3_pins>; +	interrupts-extended = <&intc 74 &omap3_pmx_core OMAP3_UART3_RX>;  };  &gpio1 { diff --git a/arch/arm/boot/dts/omap3-gta04.dts b/arch/arm/boot/dts/omap3-gta04.dtsi index 021311f7964b..fd34f913ace3 100644 --- a/arch/arm/boot/dts/omap3-gta04.dts +++ b/arch/arm/boot/dts/omap3-gta04.dtsi @@ -26,6 +26,10 @@  		reg = <0x80000000 0x20000000>; /* 512 MB */  	}; +	aliases { +		display0 = &lcd; +	}; +  	gpio-keys {  		compatible = "gpio-keys"; @@ -74,9 +78,30 @@  			};  		};  	}; + +	hsusb2_phy: hsusb2_phy { +		compatible = "usb-nop-xceiv"; +		reset-gpios = <&gpio6 14 GPIO_ACTIVE_LOW>; +	};  };  &omap3_pmx_core { +	pinctrl-names = "default"; +	pinctrl-0 = < +			&hsusb2_pins +	>; + +	hsusb2_pins: pinmux_hsusb2_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x21d4, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi1_cs3.hsusb2_data2 */ +			OMAP3_CORE1_IOPAD(0x21d6, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_clk.hsusb2_data7 */ +			OMAP3_CORE1_IOPAD(0x21d8, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_simo.hsusb2_data4 */ +			OMAP3_CORE1_IOPAD(0x21da, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_somi.hsusb2_data5 */ +			OMAP3_CORE1_IOPAD(0x21dc, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_cs0.hsusb2_data6 */ +			OMAP3_CORE1_IOPAD(0x21de, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_cs1.hsusb2_data3 */ +		>; +	}; +  	uart1_pins: pinmux_uart1_pins {  		pinctrl-single,pins = <  			0x152 (PIN_INPUT | MUX_MODE0)		/* uart1_rx.uart1_rx */ @@ -141,12 +166,31 @@                         0x0da (PIN_OUTPUT | MUX_MODE0)   /* dss_data23.dss_data23 */                 >;         }; +}; + +&omap3_pmx_core2 { +	pinctrl-names = "default"; +	pinctrl-0 = < +			&hsusb2_2_pins +	>; + +	hsusb2_2_pins: pinmux_hsusb2_2_pins { +		pinctrl-single,pins = < +			OMAP3630_CORE2_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)		/* etk_d10.hsusb2_clk */ +			OMAP3630_CORE2_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)		/* etk_d11.hsusb2_stp */ +			OMAP3630_CORE2_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d12.hsusb2_dir */ +			OMAP3630_CORE2_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d13.hsusb2_nxt */ +			OMAP3630_CORE2_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d14.hsusb2_data0 */ +			OMAP3630_CORE2_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d15.hsusb2_data1 */ +		>; +	};  	spi_gpio_pins: spi_gpio_pinmux { -		pinctrl-single,pins = <0x5a8 (PIN_OUTPUT | MUX_MODE4) /* clk */ -			0x5b6 (PIN_OUTPUT | MUX_MODE4) /* cs */ -			0x5b8 (PIN_OUTPUT | MUX_MODE4) /* tx */ -			0x5b4 (PIN_INPUT | MUX_MODE4) /* rx */ +		pinctrl-single,pins = < +			OMAP3630_CORE2_IOPAD(0x25d8, PIN_OUTPUT | MUX_MODE4) /* clk */ +			OMAP3630_CORE2_IOPAD(0x25e6, PIN_OUTPUT | MUX_MODE4) /* cs */ +			OMAP3630_CORE2_IOPAD(0x25e8, PIN_OUTPUT | MUX_MODE4) /* tx */ +			OMAP3630_CORE2_IOPAD(0x25e4, PIN_INPUT | MUX_MODE4) /* rx */  		>;  	};  }; @@ -196,6 +240,9 @@  		#size-cells = <0>;  		reg = <0x45>; +		gpio-controller; +		#gpio-cells = <2>; +  		gta04_led0: red_aux@0 {  			label = "gta04:red:aux";  			reg = <0x0>; @@ -216,11 +263,16 @@  			label = "gta04:green:power";  			reg = <0x4>;  		}; + +		wifi_reset: wifi_reset@6 { +			reg = <0x6>; +			compatible = "gpio"; +		};  	};  	/* compass aka magnetometer */  	hmc5843@1e { -		compatible = "honeywell,hmc5843"; +		compatible = "honeywell,hmc5883l";  		reg = <0x1e>;  	}; @@ -248,6 +300,14 @@  	power = <50>;  }; +&usbhshost { +	port2-mode = "ehci-phy"; +}; + +&usbhsehci { +	phys = <0 &hsusb2_phy>; +}; +  &mmc1 {  	pinctrl-names = "default";  	pinctrl-0 = <&mmc1_pins>; @@ -286,11 +346,37 @@  	bb_uamp = <150>;  }; +/* spare */ +&vaux1 { +	regulator-min-microvolt = <2500000>; +	regulator-max-microvolt = <3000000>; +}; + +/* sensors */ +&vaux2 { +	regulator-min-microvolt = <2800000>; +	regulator-max-microvolt = <2800000>; +	regulator-always-on; +}; + +/* camera */ +&vaux3 { +	regulator-min-microvolt = <2500000>; +	regulator-max-microvolt = <2500000>; +}; + +/* WLAN/BT */  &vaux4 {  	regulator-min-microvolt = <2800000>;  	regulator-max-microvolt = <3150000>;  }; +/* GPS LNA */ +&vsim { +	regulator-min-microvolt = <2800000>; +	regulator-max-microvolt = <3150000>; +}; +  /* Needed to power the DPI pins */  &vpll2 {  	regulator-always-on; @@ -309,3 +395,57 @@  		};  	};  }; + +&gpmc { +	ranges = <0 0 0x30000000 0x04>; /* CS0: NAND */ + +	nand@0,0 { +		reg = <0 0 0>; /* CS0, offset 0 */ +		nand-bus-width = <16>; +		ti,nand-ecc-opt = "bch8"; + +		gpmc,sync-clk-ps = <0>; +		gpmc,cs-on-ns = <0>; +		gpmc,cs-rd-off-ns = <44>; +		gpmc,cs-wr-off-ns = <44>; +		gpmc,adv-on-ns = <6>; +		gpmc,adv-rd-off-ns = <34>; +		gpmc,adv-wr-off-ns = <44>; +		gpmc,we-off-ns = <40>; +		gpmc,oe-off-ns = <54>; +		gpmc,access-ns = <64>; +		gpmc,rd-cycle-ns = <82>; +		gpmc,wr-cycle-ns = <82>; +		gpmc,wr-access-ns = <40>; +		gpmc,wr-data-mux-bus-ns = <0>; +		gpmc,device-width = <2>; + +		#address-cells = <1>; +		#size-cells = <1>; + +		x-loader@0 { +			label = "X-Loader"; +			reg = <0 0x80000>; +		}; + +		bootloaders@80000 { +			label = "U-Boot"; +			reg = <0x80000 0x1e0000>; +		}; + +		bootloaders_env@260000 { +			label = "U-Boot Env"; +			reg = <0x260000 0x20000>; +		}; + +		kernel@280000 { +			label = "Kernel"; +			reg = <0x280000 0x400000>; +		}; + +		filesystem@680000 { +			label = "File System"; +			reg = <0x680000 0xf980000>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/omap3-gta04a3.dts b/arch/arm/boot/dts/omap3-gta04a3.dts new file mode 100644 index 000000000000..3099a892cf50 --- /dev/null +++ b/arch/arm/boot/dts/omap3-gta04a3.dts @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2014 H. Nikolaus Schaller <hns@goldelico.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-gta04.dtsi" + +/ { +	model = "Goldelico GTA04A3"; +}; + +&i2c2 { + +	/* alternate accelerometer that might be installed on some GTA04A3 boards */ +	lis302@1d { +		compatible = "st,lis331dlh", "st,lis3lv02d"; +		reg = <0x1d>; +		interrupt-parent = <&gpio3>; +		interrupts = <18 (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_EDGE_RISING)>; +		Vdd-supply = <&vaux2>; +		Vdd_IO-supply = <&vaux2>; + +		st,click-single-x; +		st,click-single-y; +		st,click-single-z; +		st,click-thresh-x = <8>; +		st,click-thresh-y = <8>; +		st,click-thresh-z = <10>; +		st,click-click-time-limit = <9>; +		st,click-latency = <50>; +		st,irq1-click; +		st,wakeup-x-lo; +		st,wakeup-x-hi; +		st,wakeup-y-lo; +		st,wakeup-y-hi; +		st,wakeup-z-lo; +		st,wakeup-z-hi; +		st,min-limit-x = <32>; +		st,min-limit-y = <3>; +		st,min-limit-z = <3>; +		st,max-limit-x = <3>; +		st,max-limit-y = <32>; +		st,max-limit-z = <32>; +	}; +}; diff --git a/arch/arm/boot/dts/omap3-gta04a4.dts b/arch/arm/boot/dts/omap3-gta04a4.dts new file mode 100644 index 000000000000..c918bb1f0529 --- /dev/null +++ b/arch/arm/boot/dts/omap3-gta04a4.dts @@ -0,0 +1,13 @@ +/* + * Copyright (C) 2014 Marek Belisko <marek@goldelico.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-gta04.dtsi" + +/ { +	model = "Goldelico GTA04A4"; +}; diff --git a/arch/arm/boot/dts/omap3-gta04a5.dts b/arch/arm/boot/dts/omap3-gta04a5.dts new file mode 100644 index 000000000000..52b386f6865b --- /dev/null +++ b/arch/arm/boot/dts/omap3-gta04a5.dts @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2014 H. Nikolaus Schaller <hns@goldelico.com> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-gta04.dtsi" + +/ { +	model = "Goldelico GTA04A5"; + +	sound { +		ti,jack-det-gpio = <&twl_gpio 2 0>;    /* GTA04A5 only */ +	}; +}; diff --git a/arch/arm/boot/dts/omap3-ha-common.dtsi b/arch/arm/boot/dts/omap3-ha-common.dtsi new file mode 100644 index 000000000000..bd66545ef954 --- /dev/null +++ b/arch/arm/boot/dts/omap3-ha-common.dtsi @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2014 Stefan Roese <sr@denx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-tao3530.dtsi" + +/ { +	gpio_poweroff { +		pinctrl-names = "default"; +		pinctrl-0 = <&poweroff_pins>; + +		compatible = "gpio-poweroff"; +		gpios = <&gpio6 8 GPIO_ACTIVE_LOW>;	/* GPIO 168 */ +	}; +}; + +&omap3_pmx_core { +	sound2_pins: pinmux_sound2_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x209e, PIN_OUTPUT | MUX_MODE4)	/* gpmc_d8 gpio_44 */ +		>; +	}; + +	led_blue_pins: pinmux_led_blue_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2110, PIN_OUTPUT | MUX_MODE4)	/* cam_xclka gpio_96, LED blue */ +		>; +	}; + +	led_green_pins: pinmux_led_green_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2126, PIN_OUTPUT | MUX_MODE4)	/* cam_d8 gpio_107, LED green */ +		>; +	}; + +	led_red_pins: pinmux_led_red_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x212e, PIN_OUTPUT_PULLUP | MUX_MODE4)	/* cam_xclkb gpio_111, LED red */ +		>; +	}; + +	poweroff_pins: pinmux_poweroff_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x21be, PIN_OUTPUT_PULLUP | MUX_MODE4)	/* i2c2_scl gpio_168 */ +		>; +	}; + +	powerdown_input_pins: pinmux_powerdown_input_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x21c0, PIN_INPUT_PULLUP | MUX_MODE4)	/* i2c2_sda gpio_183 */ +		>; +	}; + +	fpga_boot0_pins: fpga_boot0_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x211a, PIN_INPUT | MUX_MODE4)	/* cam_d2 gpio_101 */ +			OMAP3_CORE1_IOPAD(0x211c, PIN_OUTPUT | MUX_MODE4)	/* cam_d3 gpio_102 */ +			OMAP3_CORE1_IOPAD(0x211e, PIN_OUTPUT | MUX_MODE4)	/* cam_d4 gpio_103 */ +			OMAP3_CORE1_IOPAD(0x2120, PIN_INPUT_PULLUP | MUX_MODE4)	/* cam_d5 gpio_104 */ +		>; +	}; + +	fpga_boot1_pins: fpga_boot1_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x20a2, PIN_INPUT | MUX_MODE4)	/* gpmc_d10 gpio_46 */ +			OMAP3_CORE1_IOPAD(0x20a4, PIN_OUTPUT | MUX_MODE4)	/* gpmc_d11 gpio_47 */ +			OMAP3_CORE1_IOPAD(0x20a6, PIN_OUTPUT | MUX_MODE4)	/* gpmc_d12 gpio_48 */ +			OMAP3_CORE1_IOPAD(0x20a8, PIN_INPUT_PULLUP | MUX_MODE4)	/* gpmc_d13 gpio_49 */ +		>; +	}; +}; + +/* I2C2: mux'ed with GPIO168 which is connected to nKILL_POWER */ +&i2c2 { +	status = "disabled"; +}; + +&i2c3 { +	clock-frequency = <100000>; + +	pinctrl-names = "default"; +	pinctrl-0 = <&i2c3_pins>; +}; diff --git a/arch/arm/boot/dts/omap3-ha-lcd.dts b/arch/arm/boot/dts/omap3-ha-lcd.dts new file mode 100644 index 000000000000..11aa28d73f3a --- /dev/null +++ b/arch/arm/boot/dts/omap3-ha-lcd.dts @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2014 Stefan Roese <sr@denx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-ha-common.dtsi" + +/ { +	model = "TI OMAP3 HEAD acoustics LCD-baseboard with TAO3530 SOM"; +	compatible = "headacoustics,omap3-ha-lcd", "technexion,omap3-tao3530", "ti,omap34xx", "ti,omap3"; +}; + +&omap3_pmx_core { +	pinctrl-names = "default"; +	pinctrl-0 = < +		&hsusbb2_pins +		&powerdown_input_pins +		&fpga_boot0_pins +		&fpga_boot1_pins +		&led_blue_pins +		&led_green_pins +		&led_red_pins +		&touchscreen_wake_pins +	>; + +	touchscreen_irq_pins: pinmux_touchscreen_irq_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2164, PIN_INPUT_PULLUP | MUX_MODE4)	/* gpio_136, Touchscreen IRQ */ +		>; +	}; + +	touchscreen_wake_pins: pinmux_touchscreen_wake_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x212c, PIN_OUTPUT_PULLUP | MUX_MODE4)	/* gpio_110, Touchscreen Wake */ +		>; +	}; + +	dss_dpi_pins: pinmux_dss_dpi_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x20d4, PIN_OUTPUT | MUX_MODE0)	/* dss_pclk.dss_pclk */ +			OMAP3_CORE1_IOPAD(0x20d6, PIN_OUTPUT | MUX_MODE0)	/* dss_hsync.dss_hsync */ +			OMAP3_CORE1_IOPAD(0x20d8, PIN_OUTPUT | MUX_MODE0)	/* dss_vsync.dss_vsync */ +			OMAP3_CORE1_IOPAD(0x20da, PIN_OUTPUT | MUX_MODE0)	/* dss_acbias.dss_acbias */ +			OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE0)	/* dss_data0.dss_data0 */ +			OMAP3_CORE1_IOPAD(0x20de, PIN_OUTPUT | MUX_MODE0)	/* dss_data1.dss_data1 */ +			OMAP3_CORE1_IOPAD(0x20e0, PIN_OUTPUT | MUX_MODE0)	/* dss_data2.dss_data2 */ +			OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE0)	/* dss_data3.dss_data3 */ +			OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE0)	/* dss_data4.dss_data4 */ +			OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE0)	/* dss_data5.dss_data5 */ +			OMAP3_CORE1_IOPAD(0x20e8, PIN_OUTPUT | MUX_MODE0)	/* dss_data6.dss_data6 */ +			OMAP3_CORE1_IOPAD(0x20ea, PIN_OUTPUT | MUX_MODE0)	/* dss_data7.dss_data7 */ +			OMAP3_CORE1_IOPAD(0x20ec, PIN_OUTPUT | MUX_MODE0)	/* dss_data8.dss_data8 */ +			OMAP3_CORE1_IOPAD(0x20ee, PIN_OUTPUT | MUX_MODE0)	/* dss_data9.dss_data9 */ +			OMAP3_CORE1_IOPAD(0x20f0, PIN_OUTPUT | MUX_MODE0)	/* dss_data10.dss_data10 */ +			OMAP3_CORE1_IOPAD(0x20f2, PIN_OUTPUT | MUX_MODE0)	/* dss_data11.dss_data11 */ +			OMAP3_CORE1_IOPAD(0x20f4, PIN_OUTPUT | MUX_MODE0)	/* dss_data12.dss_data12 */ +			OMAP3_CORE1_IOPAD(0x20f6, PIN_OUTPUT | MUX_MODE0)	/* dss_data13.dss_data13 */ +			OMAP3_CORE1_IOPAD(0x20f8, PIN_OUTPUT | MUX_MODE0)	/* dss_data14.dss_data14 */ +			OMAP3_CORE1_IOPAD(0x20fa, PIN_OUTPUT | MUX_MODE0)	/* dss_data15.dss_data15 */ +			OMAP3_CORE1_IOPAD(0x20fc, PIN_OUTPUT | MUX_MODE0)	/* dss_data16.dss_data16 */ +			OMAP3_CORE1_IOPAD(0x20fe, PIN_OUTPUT | MUX_MODE0)	/* dss_data17.dss_data17 */ +			OMAP3_CORE1_IOPAD(0x2100, PIN_OUTPUT | MUX_MODE0)	/* dss_data18.dss_data18 */ +			OMAP3_CORE1_IOPAD(0x2102, PIN_OUTPUT | MUX_MODE0)	/* dss_data19.dss_data19 */ +			OMAP3_CORE1_IOPAD(0x2104, PIN_OUTPUT | MUX_MODE0)	/* dss_data20.dss_data20 */ +			OMAP3_CORE1_IOPAD(0x2106, PIN_OUTPUT | MUX_MODE0)	/* dss_data21.dss_data21 */ +			OMAP3_CORE1_IOPAD(0x2108, PIN_OUTPUT | MUX_MODE0)	/* dss_data22.dss_data22 */ +			OMAP3_CORE1_IOPAD(0x210a, PIN_OUTPUT | MUX_MODE0)	/* dss_data23.dss_data23 */ +		>; +	}; + +	lte430_pins: pinmux_lte430_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2168, PIN_OUTPUT | MUX_MODE4)	/* sdmmc2_dat6.gpio_138 */ +		>; +	}; + +	backlight_pins: pinmux_backlight_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x216a, PIN_OUTPUT | MUX_MODE4)	/* sdmmc2_dat7.gpio_139 */ +		>; +	}; +}; + +/* I2C2: mux'ed with GPIO168 which is connected to nKILL_POWER */ +&i2c2 { +	status = "disabled"; +}; + +&i2c3 { +	clock-frequency = <100000>; + +	pinctrl-names = "default"; +	pinctrl-0 = <&i2c3_pins>; +}; + +/* Needed to power the DPI pins */ +&vpll2 { +	regulator-always-on; +}; + +&dss { +	status = "ok"; + +	pinctrl-names = "default"; +	pinctrl-0 = <&dss_dpi_pins>; + +	port { +		dpi_out: endpoint { +			remote-endpoint = <&lcd_in>; +			data-lines = <24>; +		}; +	}; +}; + +/ { +	aliases { +		display0 = &lcd0; +	}; + +	lcd0: display@0 { +		compatible = "panel-dpi"; +		label = "lcd"; + +		pinctrl-names = "default"; +		pinctrl-0 = <<e430_pins>; +		enable-gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;	/* gpio_138 */ + +		port { +			lcd_in: endpoint { +				remote-endpoint = <&dpi_out>; +			}; +		}; + +		panel-timing { +			clock-frequency = <31250000>; +			hactive = <800>; +			vactive = <480>; +			hfront-porch = <40>; +			hback-porch = <86>; +			hsync-len = <1>; +			vback-porch = <30>; +			vfront-porch = <13>; +			vsync-len = <3>; + +			hsync-active = <0>; +			vsync-active = <0>; +			de-active = <1>; +			pixelclk-active = <1>; +		}; +	}; + +	backlight { +		compatible = "gpio-backlight"; + +		pinctrl-names = "default"; +		pinctrl-0 = <&backlight_pins>; +		gpios = <&gpio5 11 GPIO_ACTIVE_HIGH>;		/* gpio_139 */ + +		default-on; +	}; +}; diff --git a/arch/arm/boot/dts/omap3-ha.dts b/arch/arm/boot/dts/omap3-ha.dts new file mode 100644 index 000000000000..fde325688fb9 --- /dev/null +++ b/arch/arm/boot/dts/omap3-ha.dts @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2014 Stefan Roese <sr@denx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-ha-common.dtsi" + +/ { +	model = "TI OMAP3 HEAD acoustics baseboard with TAO3530 SOM"; +	compatible = "headacoustics,omap3-ha", "technexion,omap3-tao3530", "ti,omap34xx", "ti,omap3"; +}; + +&omap3_pmx_core { +	pinctrl-names = "default"; +	pinctrl-0 = < +		&hsusbb2_pins +		&powerdown_input_pins +		&fpga_boot0_pins +		&fpga_boot1_pins +		&led_blue_pins +		&led_green_pins +		&led_red_pins +	>; +}; diff --git a/arch/arm/boot/dts/omap3-n900.dts b/arch/arm/boot/dts/omap3-n900.dts index b15f1a77d684..1fe45d1f75ec 100644 --- a/arch/arm/boot/dts/omap3-n900.dts +++ b/arch/arm/boot/dts/omap3-n900.dts @@ -353,7 +353,7 @@  	};  	twl_power: power { -		compatible = "ti,twl4030-power-n900"; +		compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off";  		ti,use_poweroff;  	};  }; diff --git a/arch/arm/boot/dts/omap3-tao3530.dtsi b/arch/arm/boot/dts/omap3-tao3530.dtsi new file mode 100644 index 000000000000..b30f387d3a83 --- /dev/null +++ b/arch/arm/boot/dts/omap3-tao3530.dtsi @@ -0,0 +1,337 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2014 Stefan Roese <sr@denx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +/dts-v1/; + +#include "omap34xx-hs.dtsi" + +/ { +	cpus { +		cpu@0 { +			cpu0-supply = <&vcc>; +		}; +	}; + +	memory { +		device_type = "memory"; +		reg = <0x80000000 0x10000000>; /* 256 MB */ +	}; + +	/* HS USB Port 2 Power */ +	hsusb2_power: hsusb2_power_reg { +		compatible = "regulator-fixed"; +		regulator-name = "hsusb2_vbus"; +		regulator-min-microvolt = <3300000>; +		regulator-max-microvolt = <3300000>; +		gpio = <&twl_gpio 18 0>;	/* GPIO LEDA */ +		startup-delay-us = <70000>; +	}; + +	/* HS USB Host PHY on PORT 2 */ +	hsusb2_phy: hsusb2_phy { +		compatible = "usb-nop-xceiv"; +		reset-gpios = <&gpio6 2 GPIO_ACTIVE_LOW>;	/* gpio_162 */ +		vcc-supply = <&hsusb2_power>; +	}; + +	sound { +		compatible = "ti,omap-twl4030"; +		ti,model = "omap3beagle"; + +		/* McBSP2 is used for onboard sound, same as on beagle */ +		ti,mcbsp = <&mcbsp2>; +		ti,codec = <&twl_audio>; +	}; + +	/* Regulator to enable/switch the vcc of the Wifi module */ +	mmc2_sdio_poweron: regulator-mmc2-sdio-poweron { +		compatible = "regulator-fixed"; +		regulator-name = "regulator-mmc2-sdio-poweron"; +		regulator-min-microvolt = <3150000>; +		regulator-max-microvolt = <3150000>; +		gpio = <&gpio5 29 GPIO_ACTIVE_LOW>;		/* gpio_157 */ +		enable-active-low; +		startup-delay-us = <10000>; +	}; +}; + +&omap3_pmx_core { +	hsusbb2_pins: pinmux_hsusbb2_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x25f0, PIN_OUTPUT | MUX_MODE3)		/* etk_d10.hsusb2_clk */ +			OMAP3_CORE1_IOPAD(0x25f2, PIN_OUTPUT | MUX_MODE3)		/* etk_d11.hsusb2_stp */ +			OMAP3_CORE1_IOPAD(0x25f4, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d12.hsusb2_dir */ +			OMAP3_CORE1_IOPAD(0x25f6, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d13.hsusb2_nxt */ +			OMAP3_CORE1_IOPAD(0x25f8, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d14.hsusb2_data0 */ +			OMAP3_CORE1_IOPAD(0x25fa, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* etk_d15.hsusb2_data1 */ +			OMAP3_CORE1_IOPAD(0x21d4, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi1_cs3.hsusb2_data2 */ +			OMAP3_CORE1_IOPAD(0x21d6, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_clk.hsusb2_data7 */ +			OMAP3_CORE1_IOPAD(0x21d8, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_simo.hsusb2_data4 */ +			OMAP3_CORE1_IOPAD(0x21da, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_somi.hsusb2_data5 */ +			OMAP3_CORE1_IOPAD(0x21dc, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_cs0.hsusb2_data6 */ +			OMAP3_CORE1_IOPAD(0x21de, PIN_INPUT_PULLDOWN | MUX_MODE3)	/* mcspi2_cs1.hsusb2_data3 */ +		>; +	}; + +	mmc1_pins: pinmux_mmc1_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2144, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc1_clk.sdmmc1_clk */ +			OMAP3_CORE1_IOPAD(0x2146, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc1_cmd.sdmmc1_cmd */ +			OMAP3_CORE1_IOPAD(0x2148, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc1_dat0.sdmmc1_dat0 */ +			OMAP3_CORE1_IOPAD(0x214a, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc1_dat1.sdmmc1_dat1 */ +			OMAP3_CORE1_IOPAD(0x214c, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc1_dat2.sdmmc1_dat2 */ +			OMAP3_CORE1_IOPAD(0x214e, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc1_dat3.sdmmc1_dat3 */ +			OMAP3_CORE1_IOPAD(0x2150, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat4.sdmmc1_dat4 */ +			OMAP3_CORE1_IOPAD(0x2152, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat5.sdmmc1_dat5 */ +			OMAP3_CORE1_IOPAD(0x2154, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat6.sdmmc1_dat6 */ +			OMAP3_CORE1_IOPAD(0x2156, PIN_INPUT_PULLUP | MUX_MODE0) /* sdmmc1_dat7.sdmmc1_dat7 */ +		>; +	}; + +	mmc2_pins: pinmux_mmc2_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2158, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc2_clk.sdmmc2_clk */ +			OMAP3_CORE1_IOPAD(0x215a, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc2_cmd.sdmmc2_cmd */ +			OMAP3_CORE1_IOPAD(0x215c, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc2_dat0.sdmmc2_dat0 */ +			OMAP3_CORE1_IOPAD(0x215e, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc2_dat1.sdmmc2_dat1 */ +			OMAP3_CORE1_IOPAD(0x2160, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc2_dat2.sdmmc2_dat2 */ +			OMAP3_CORE1_IOPAD(0x2162, PIN_INPUT_PULLUP | MUX_MODE0)	/* sdmmc2_dat3.sdmmc2_dat3 */ +		>; +	}; + +	/* wlan GPIO output for WLAN_EN */ +	wlan_gpio: pinmux_wlan_gpio { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x218e, PIN_OUTPUT | MUX_MODE4)	/* mcbsp1_fsr gpio_157 */ +		>; +	}; + +	uart3_pins: pinmux_uart3_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x219e, PIN_INPUT | PIN_OFF_WAKEUPENABLE | MUX_MODE0) /* uart3_rx_irrx.uart3_rx_irrx */ +			OMAP3_CORE1_IOPAD(0x21a0, PIN_OUTPUT | MUX_MODE0)	/* uart3_tx_irtx.uart3_tx_irtx */ +		>; +	}; + +	i2c3_pins: pinmux_i2c3_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x21c2, PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c3_scl.i2c3_scl */ +			OMAP3_CORE1_IOPAD(0x21c4, PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c3_sda.i2c3_sda */ +		>; +	}; + +	mcspi1_pins: pinmux_mcspi1_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x21c8, PIN_INPUT | MUX_MODE0)	/* mcspi1_clk.mcspi1_clk */ +			OMAP3_CORE1_IOPAD(0x21ca, PIN_OUTPUT | MUX_MODE0)	/* mcspi1_simo.mcspi1_simo */ +			OMAP3_CORE1_IOPAD(0x21cc, PIN_INPUT_PULLUP | MUX_MODE0)	/* mcspi1_somi.mcspi1_somi */ +			OMAP3_CORE1_IOPAD(0x21ce, PIN_OUTPUT | MUX_MODE0)	/* mcspi1_cs0.mcspi1_cs0 */ +		>; +	}; + +	mcspi3_pins: pinmux_mcspi3_pins { +		pinctrl-single,pins = < +                        OMAP3_CORE1_IOPAD(0x25dc, PIN_OUTPUT | MUX_MODE1)	/* etk_d0.mcspi3_simo gpio14 INPUT | MODE1 */ +                        OMAP3_CORE1_IOPAD(0x25de, PIN_INPUT_PULLUP | MUX_MODE1)	/* etk_d1.mcspi3_somi gpio15 INPUT | MODE1 */ +                        OMAP3_CORE1_IOPAD(0x25e0, PIN_OUTPUT | MUX_MODE1)	/* etk_d2.mcspi3_cs0 gpio16 INPUT | MODE1 */ +                        OMAP3_CORE1_IOPAD(0x25e2, PIN_INPUT | MUX_MODE1)	/* etk_d3.mcspi3_clk gpio17 INPUT | MODE1 */ +		>; +	}; + +	mcbsp3_pins: pinmux_mcbsp3_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x216c, PIN_OUTPUT | MUX_MODE0)	/* mcbsp3_dx.uart2_cts */ +			OMAP3_CORE1_IOPAD(0x216e, PIN_INPUT | MUX_MODE0)	/* mcbsp3_dr.uart2_rts */ +			OMAP3_CORE1_IOPAD(0x2170, PIN_INPUT | MUX_MODE0)	/* mcbsp3_clk.uart2_tx */ +			OMAP3_CORE1_IOPAD(0x2172, PIN_INPUT | MUX_MODE0)	/* mcbsp3_fsx.uart2_rx */ +		>; +	}; +}; + +/* McBSP1: mux'ed with GPIO158 as clock for HA-DSP */ +&mcbsp1 { +	status = "disabled"; +}; + +&mcbsp2 { +	status = "okay"; +}; + +&i2c1 { +	clock-frequency = <2600000>; + +	twl: twl@48 { +		reg = <0x48>; +		interrupts = <7>; /* SYS_NIRQ cascaded to intc */ +		interrupt-parent = <&intc>; + +		twl_audio: audio { +			compatible = "ti,twl4030-audio"; +			codec { +			}; +		}; +	}; +}; + +&i2c3 { +	clock-frequency = <100000>; + +	pinctrl-names = "default"; +	pinctrl-0 = <&i2c3_pins>; +}; + +&mcspi1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&mcspi1_pins>; + +	spidev@0 { +		compatible = "spidev"; +		spi-max-frequency = <48000000>; +		reg = <0>; +		spi-cpha; +	}; +}; + +&mcspi3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&mcspi3_pins>; + +	spidev@0 { +		compatible = "spidev"; +		spi-max-frequency = <48000000>; +		reg = <0>; +		spi-cpha; +	}; +}; + +#include "twl4030.dtsi" +#include "twl4030_omap3.dtsi" + +&mmc1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&mmc1_pins>; +	vmmc-supply = <&vmmc1>; +	vmmc_aux-supply = <&vsim>; +	cd-gpios = <&twl_gpio 0 0>; +	bus-width = <8>; +}; + +// WiFi (Marvell 88W8686) on MMC2/SDIO +&mmc2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&mmc2_pins>; +	vmmc-supply = <&mmc2_sdio_poweron>; +	non-removable; +	bus-width = <4>; +	cap-power-off-card; +}; + +&mmc3 { +	status = "disabled"; +}; + +&usbhshost { +	port2-mode = "ehci-phy"; +}; + +&usbhsehci { +	phys = <0 &hsusb2_phy>; +}; + +&twl_gpio { +	ti,use-leds; +	/* pullups: BIT(1) */ +	ti,pullups = <0x000002>; +	/* +	 * pulldowns: +	 * BIT(2), BIT(6), BIT(7), BIT(8), BIT(13) +	 * BIT(15), BIT(16), BIT(17) +	 */ +	ti,pulldowns = <0x03a1c4>; +}; + +&uart3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&uart3_pins>; +}; + +&mcbsp3 { +	status = "okay"; +	pinctrl-names = "default"; +	pinctrl-0 = <&mcbsp3_pins>; +}; + +&gpmc { +	ranges = <0 0 0x00000000 0x01000000>; + +	nand@0,0 { +		reg = <0 0 0>; /* CS0, offset 0 */ +		nand-bus-width = <16>; +		gpmc,device-width = <2>;	/* GPMC_DEVWIDTH_16BIT */ +		ti,nand-ecc-opt = "sw"; + +		gpmc,cs-on-ns = <0>; +		gpmc,cs-rd-off-ns = <36>; +		gpmc,cs-wr-off-ns = <36>; +		gpmc,adv-on-ns = <6>; +		gpmc,adv-rd-off-ns = <24>; +		gpmc,adv-wr-off-ns = <36>; +		gpmc,oe-on-ns = <6>; +		gpmc,oe-off-ns = <48>; +		gpmc,we-on-ns = <6>; +		gpmc,we-off-ns = <30>; +		gpmc,rd-cycle-ns = <72>; +		gpmc,wr-cycle-ns = <72>; +		gpmc,access-ns = <54>; +		gpmc,wr-access-ns = <30>; + +		#address-cells = <1>; +		#size-cells = <1>; + +		x-loader@0 { +			label = "X-Loader"; +			reg = <0 0x80000>; +		}; + +		bootloaders@80000 { +			label = "U-Boot"; +			reg = <0x80000 0x1e0000>; +		}; + +		bootloaders_env@260000 { +			label = "U-Boot Env"; +			reg = <0x260000 0x20000>; +		}; + +		kernel@280000 { +			label = "Kernel"; +			reg = <0x280000 0x400000>; +		}; + +		filesystem@680000 { +			label = "File System"; +			reg = <0x680000 0xf980000>; +		}; +	}; +}; + +&usb_otg_hs { +	interface-type = <0>; +	usb-phy = <&usb2_phy>; +	phys = <&usb2_phy>; +	phy-names = "usb2-phy"; +	mode = <3>; +	power = <50>; +}; + +&vaux2 { +	regulator-name = "vdd_ehci"; +	regulator-min-microvolt = <1800000>; +	regulator-max-microvolt = <1800000>; +	regulator-always-on; +}; diff --git a/arch/arm/boot/dts/omap3-thunder.dts b/arch/arm/boot/dts/omap3-thunder.dts new file mode 100644 index 000000000000..d659515ab9b8 --- /dev/null +++ b/arch/arm/boot/dts/omap3-thunder.dts @@ -0,0 +1,129 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * Copyright (C) 2014 Stefan Roese <sr@denx.de> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include "omap3-tao3530.dtsi" + +/ { +	model = "TI OMAP3 Thunder baseboard with TAO3530 SOM"; +	compatible = "technexion,omap3-thunder", "technexion,omap3-tao3530", "ti,omap34xx", "ti,omap3"; +}; + +&omap3_pmx_core { +	dss_dpi_pins: pinmux_dss_dpi_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x20d4, PIN_OUTPUT | MUX_MODE0)	/* dss_pclk.dss_pclk */ +			OMAP3_CORE1_IOPAD(0x20d6, PIN_OUTPUT | MUX_MODE0)	/* dss_hsync.dss_hsync */ +			OMAP3_CORE1_IOPAD(0x20d8, PIN_OUTPUT | MUX_MODE0)	/* dss_vsync.dss_vsync */ +			OMAP3_CORE1_IOPAD(0x20da, PIN_OUTPUT | MUX_MODE0)	/* dss_acbias.dss_acbias */ +			OMAP3_CORE1_IOPAD(0x20dc, PIN_OUTPUT | MUX_MODE0)	/* dss_data0.dss_data0 */ +			OMAP3_CORE1_IOPAD(0x20de, PIN_OUTPUT | MUX_MODE0)	/* dss_data1.dss_data1 */ +			OMAP3_CORE1_IOPAD(0x20e0, PIN_OUTPUT | MUX_MODE0)	/* dss_data2.dss_data2 */ +			OMAP3_CORE1_IOPAD(0x20e2, PIN_OUTPUT | MUX_MODE0)	/* dss_data3.dss_data3 */ +			OMAP3_CORE1_IOPAD(0x20e4, PIN_OUTPUT | MUX_MODE0)	/* dss_data4.dss_data4 */ +			OMAP3_CORE1_IOPAD(0x20e6, PIN_OUTPUT | MUX_MODE0)	/* dss_data5.dss_data5 */ +			OMAP3_CORE1_IOPAD(0x20e8, PIN_OUTPUT | MUX_MODE0)	/* dss_data6.dss_data6 */ +			OMAP3_CORE1_IOPAD(0x20ea, PIN_OUTPUT | MUX_MODE0)	/* dss_data7.dss_data7 */ +			OMAP3_CORE1_IOPAD(0x20ec, PIN_OUTPUT | MUX_MODE0)	/* dss_data8.dss_data8 */ +			OMAP3_CORE1_IOPAD(0x20ee, PIN_OUTPUT | MUX_MODE0)	/* dss_data9.dss_data9 */ +			OMAP3_CORE1_IOPAD(0x20f0, PIN_OUTPUT | MUX_MODE0)	/* dss_data10.dss_data10 */ +			OMAP3_CORE1_IOPAD(0x20f2, PIN_OUTPUT | MUX_MODE0)	/* dss_data11.dss_data11 */ +			OMAP3_CORE1_IOPAD(0x20f4, PIN_OUTPUT | MUX_MODE0)	/* dss_data12.dss_data12 */ +			OMAP3_CORE1_IOPAD(0x20f6, PIN_OUTPUT | MUX_MODE0)	/* dss_data13.dss_data13 */ +			OMAP3_CORE1_IOPAD(0x20f8, PIN_OUTPUT | MUX_MODE0)	/* dss_data14.dss_data14 */ +			OMAP3_CORE1_IOPAD(0x20fa, PIN_OUTPUT | MUX_MODE0)	/* dss_data15.dss_data15 */ +			OMAP3_CORE1_IOPAD(0x20fc, PIN_OUTPUT | MUX_MODE0)	/* dss_data16.dss_data16 */ +			OMAP3_CORE1_IOPAD(0x20fe, PIN_OUTPUT | MUX_MODE0)	/* dss_data17.dss_data17 */ +			OMAP3_CORE1_IOPAD(0x2100, PIN_OUTPUT | MUX_MODE0)	/* dss_data18.dss_data18 */ +			OMAP3_CORE1_IOPAD(0x2102, PIN_OUTPUT | MUX_MODE0)	/* dss_data19.dss_data19 */ +			OMAP3_CORE1_IOPAD(0x2104, PIN_OUTPUT | MUX_MODE0)	/* dss_data20.dss_data20 */ +			OMAP3_CORE1_IOPAD(0x2106, PIN_OUTPUT | MUX_MODE0)	/* dss_data21.dss_data21 */ +			OMAP3_CORE1_IOPAD(0x2108, PIN_OUTPUT | MUX_MODE0)	/* dss_data22.dss_data22 */ +			OMAP3_CORE1_IOPAD(0x210a, PIN_OUTPUT | MUX_MODE0)	/* dss_data23.dss_data23 */ +		>; +	}; + +	lte430_pins: pinmux_lte430_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x2168, PIN_OUTPUT | MUX_MODE4)	/* sdmmc2_dat6.gpio_138 */ +		>; +	}; + +	backlight_pins: pinmux_backlight_pins { +		pinctrl-single,pins = < +			OMAP3_CORE1_IOPAD(0x216a, PIN_OUTPUT | MUX_MODE4)	/* sdmmc2_dat7.gpio_139 */ +		>; +	}; +}; + +/* Needed to power the DPI pins */ +&vpll2 { +	regulator-always-on; +}; + +&dss { +	status = "ok"; + +	pinctrl-names = "default"; +	pinctrl-0 = <&dss_dpi_pins>; + +	port { +		dpi_out: endpoint { +			remote-endpoint = <&lcd_in>; +			data-lines = <24>; +		}; +	}; +}; + +/ { +	aliases { +		display0 = &lcd0; +	}; + +	lcd0: display@0 { +		compatible = "samsung,lte430wq-f0c", "panel-dpi"; +		label = "lcd"; + +		pinctrl-names = "default"; +		pinctrl-0 = <<e430_pins>; +		enable-gpios = <&gpio5 10 GPIO_ACTIVE_LOW>;	/* gpio_138 */ + +		port { +			lcd_in: endpoint { +				remote-endpoint = <&dpi_out>; +			}; +		}; + +		panel-timing { +			clock-frequency = <9000000>; +			hactive = <480>; +			vactive = <272>; +			hfront-porch = <3>; +			hback-porch = <2>; +			hsync-len = <42>; +			vback-porch = <2>; +			vfront-porch = <3>; +			vsync-len = <11>; + +			hsync-active = <0>; +			vsync-active = <0>; +			de-active = <1>; +			pixelclk-active = <1>; +		}; +	}; + +	backlight { +		compatible = "gpio-backlight"; + +		pinctrl-names = "default"; +		pinctrl-0 = <&backlight_pins>; +		gpios = <&gpio5 11 GPIO_ACTIVE_HIGH>;		/* gpio_139 */ + +		default-on; +	}; +}; diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 575a49bf968d..b2ae8b8e54d6 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi @@ -334,6 +334,10 @@  			interrupts = <26>;  			ti,mbox-num-users = <2>;  			ti,mbox-num-fifos = <2>; +			mbox_dsp: dsp { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <1 0 0>; +			};  		};  		mcspi1: spi@48098000 { diff --git a/arch/arm/boot/dts/omap3430-sdp.dts b/arch/arm/boot/dts/omap3430-sdp.dts index 02f69f4a8fd3..9bad94efe1c8 100644 --- a/arch/arm/boot/dts/omap3430-sdp.dts +++ b/arch/arm/boot/dts/omap3430-sdp.dts @@ -107,7 +107,7 @@  		#address-cells = <1>;  		#size-cells = <1>;  		reg = <1 0 0x08000000>; -		ti,nand-ecc-opt = "ham1"; +		ti,nand-ecc-opt = "sw";  		nand-bus-width = <8>;  		gpmc,cs-on-ns = <0>;  		gpmc,cs-rd-off-ns = <36>; diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 69408b53200d..bc54d669f36d 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi @@ -656,6 +656,14 @@  			ti,hwmods = "mailbox";  			ti,mbox-num-users = <3>;  			ti,mbox-num-fifos = <8>; +			mbox_ipu: mbox_ipu { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <1 0 0>; +			}; +			mbox_dsp: mbox_dsp { +				ti,mbox-tx = <3 0 0>; +				ti,mbox-rx = <2 0 0>; +			};  		};  		timer1: timer@4a318000 { diff --git a/arch/arm/boot/dts/omap5-sbc-t54.dts b/arch/arm/boot/dts/omap5-sbc-t54.dts index aa98fea3f2b3..8e89793e0f6b 100644 --- a/arch/arm/boot/dts/omap5-sbc-t54.dts +++ b/arch/arm/boot/dts/omap5-sbc-t54.dts @@ -1,11 +1,11 @@  /* - * Suppport for CompuLab SBC-T54 with CM-T54 + * Suppport for CompuLab CM-T54 on SB-T54 baseboard   */  #include "omap5-cm-t54.dts"  / { -	model = "CompuLab SBC-T54 with CM-T54"; +	model = "CompuLab CM-T54 on SB-T54";  	compatible = "compulab,omap5-sbc-t54", "compulab,omap5-cm-t54", "ti,omap5";  }; diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index fc8df1739f39..30ce71add4ef 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi @@ -187,18 +187,22 @@  		};  		omap5_pmx_core: pinmux@4a002840 { -			compatible = "ti,omap4-padconf", "pinctrl-single"; +			compatible = "ti,omap5-padconf", "pinctrl-single";  			reg = <0x4a002840 0x01b6>;  			#address-cells = <1>;  			#size-cells = <0>; +			#interrupt-cells = <1>; +			interrupt-controller;  			pinctrl-single,register-width = <16>;  			pinctrl-single,function-mask = <0x7fff>;  		};  		omap5_pmx_wkup: pinmux@4ae0c840 { -			compatible = "ti,omap4-padconf", "pinctrl-single"; +			compatible = "ti,omap5-padconf", "pinctrl-single";  			reg = <0x4ae0c840 0x0038>;  			#address-cells = <1>;  			#size-cells = <0>; +			#interrupt-cells = <1>; +			interrupt-controller;  			pinctrl-single,register-width = <16>;  			pinctrl-single,function-mask = <0x7fff>;  		}; @@ -447,7 +451,7 @@  		uart1: serial@4806a000 {  			compatible = "ti,omap4-uart";  			reg = <0x4806a000 0x100>; -			interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart1";  			clock-frequency = <48000000>;  		}; @@ -455,7 +459,7 @@  		uart2: serial@4806c000 {  			compatible = "ti,omap4-uart";  			reg = <0x4806c000 0x100>; -			interrupts = <GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart2";  			clock-frequency = <48000000>;  		}; @@ -463,7 +467,7 @@  		uart3: serial@48020000 {  			compatible = "ti,omap4-uart";  			reg = <0x48020000 0x100>; -			interrupts = <GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart3";  			clock-frequency = <48000000>;  		}; @@ -471,7 +475,7 @@  		uart4: serial@4806e000 {  			compatible = "ti,omap4-uart";  			reg = <0x4806e000 0x100>; -			interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart4";  			clock-frequency = <48000000>;  		}; @@ -479,7 +483,7 @@  		uart5: serial@48066000 {  			compatible = "ti,omap4-uart";  			reg = <0x48066000 0x100>; -			interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart5";  			clock-frequency = <48000000>;  		}; @@ -487,7 +491,7 @@  		uart6: serial@48068000 {  			compatible = "ti,omap4-uart";  			reg = <0x48068000 0x100>; -			interrupts = <GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>; +			interrupts-extended = <&gic GIC_SPI 106 IRQ_TYPE_LEVEL_HIGH>;  			ti,hwmods = "uart6";  			clock-frequency = <48000000>;  		}; @@ -642,6 +646,14 @@  			ti,hwmods = "mailbox";  			ti,mbox-num-users = <3>;  			ti,mbox-num-fifos = <8>; +			mbox_ipu: mbox_ipu { +				ti,mbox-tx = <0 0 0>; +				ti,mbox-rx = <1 0 0>; +			}; +			mbox_dsp: mbox_dsp { +				ti,mbox-tx = <3 0 0>; +				ti,mbox-rx = <2 0 0>; +			};  		};  		timer1: timer@4ae18000 { @@ -945,6 +957,15 @@  				clock-names = "fck";  			}; +			rfbi: encoder@58002000  { +				compatible = "ti,omap5-rfbi"; +				reg = <0x58002000 0x100>; +				status = "disabled"; +				ti,hwmods = "dss_rfbi"; +				clocks = <&dss_dss_clk>, <&l3_iclk_div>; +				clock-names = "fck", "ick"; +			}; +  			dsi1: encoder@58004000 {  				compatible = "ti,omap5-dsi";  				reg = <0x58004000 0x200>, diff --git a/arch/arm/boot/dts/omap54xx-clocks.dtsi b/arch/arm/boot/dts/omap54xx-clocks.dtsi index e67a23b5d788..58c27466f012 100644 --- a/arch/arm/boot/dts/omap54xx-clocks.dtsi +++ b/arch/arm/boot/dts/omap54xx-clocks.dtsi @@ -367,10 +367,12 @@  	l3_iclk_div: l3_iclk_div {  		#clock-cells = <0>; -		compatible = "fixed-factor-clock"; +		compatible = "ti,divider-clock"; +		ti,max-div = <2>; +		ti,bit-shift = <4>; +		reg = <0x100>;  		clocks = <&dpll_core_h12x2_ck>; -		clock-mult = <1>; -		clock-div = <1>; +		ti,index-power-of-two;  	};  	gpu_l3_iclk: gpu_l3_iclk { @@ -383,10 +385,12 @@  	l4_root_clk_div: l4_root_clk_div {  		#clock-cells = <0>; -		compatible = "fixed-factor-clock"; +		compatible = "ti,divider-clock"; +		ti,max-div = <2>; +		ti,bit-shift = <8>; +		reg = <0x100>;  		clocks = <&l3_iclk_div>; -		clock-mult = <1>; -		clock-div = <1>; +		ti,index-power-of-two;  	};  	slimbus1_slimbus_clk: slimbus1_slimbus_clk { diff --git a/arch/arm/boot/dts/pxa2xx.dtsi b/arch/arm/boot/dts/pxa2xx.dtsi index a5e90f078aa9..c08f84629aa9 100644 --- a/arch/arm/boot/dts/pxa2xx.dtsi +++ b/arch/arm/boot/dts/pxa2xx.dtsi @@ -113,14 +113,14 @@  		};  		usb0: ohci@4c000000 { -			compatible = "mrvl,pxa-ohci"; +			compatible = "marvell,pxa-ohci";  			reg = <0x4c000000 0x10000>;  			interrupts = <3>;  			status = "disabled";  		};  		mmc0: mmc@41100000 { -			compatible = "mrvl,pxa-mmc"; +			compatible = "marvell,pxa-mmc";  			reg = <0x41100000 0x1000>;  			interrupts = <23>;  			status = "disabled"; diff --git a/arch/arm/boot/dts/qcom-apq8064-ifc6410.dts b/arch/arm/boot/dts/qcom-apq8064-ifc6410.dts index 7c2441d526bc..b396c8311b27 100644 --- a/arch/arm/boot/dts/qcom-apq8064-ifc6410.dts +++ b/arch/arm/boot/dts/qcom-apq8064-ifc6410.dts @@ -5,6 +5,33 @@  	compatible = "qcom,apq8064-ifc6410", "qcom,apq8064";  	soc { +		pinctrl@800000 { +			i2c1_pins: i2c1 { +				mux { +					pins = "gpio20", "gpio21"; +					function = "gsbi1"; +				}; +			}; +		}; + +		gsbi@12440000 { +			status = "okay"; +			qcom,mode = <GSBI_PROT_I2C>; + +			i2c@12460000 { +				status = "okay"; +				clock-frequency = <200000>; +				pinctrl-0 = <&i2c1_pins>; +				pinctrl-names = "default"; + +				eeprom: eeprom@52 { +					compatible = "atmel,24c128"; +					reg = <0x52>; +					pagesize = <32>; +				}; +			}; +		}; +  		gsbi@16600000 {  			status = "ok";  			qcom,mode = <GSBI_PROT_I2C_UART>; @@ -12,5 +39,21 @@  				status = "ok";  			};  		}; + +		amba { +			/* eMMC */ +			sdcc1: sdcc@12400000 { +				status = "okay"; +			}; + +			/* External micro SD card */ +			sdcc3: sdcc@12180000 { +				status = "okay"; +			}; +			/* WLAN */ +			sdcc4: sdcc@121c0000 { +				status = "okay"; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/qcom-apq8064.dtsi b/arch/arm/boot/dts/qcom-apq8064.dtsi index 92bf793622c3..b3154c071652 100644 --- a/arch/arm/boot/dts/qcom-apq8064.dtsi +++ b/arch/arm/boot/dts/qcom-apq8064.dtsi @@ -2,7 +2,9 @@  #include "skeleton.dtsi"  #include <dt-bindings/clock/qcom,gcc-msm8960.h> +#include <dt-bindings/clock/qcom,mmcc-msm8960.h>  #include <dt-bindings/soc/qcom,gsbi.h> +#include <dt-bindings/interrupt-controller/arm-gic.h>  / {  	model = "Qualcomm APQ8064"; @@ -70,6 +72,34 @@  		ranges;  		compatible = "simple-bus"; +		tlmm_pinmux: pinctrl@800000 { +			compatible = "qcom,apq8064-pinctrl"; +			reg = <0x800000 0x4000>; + +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			interrupts = <0 16 IRQ_TYPE_LEVEL_HIGH>; + +			pinctrl-names = "default"; +			pinctrl-0 = <&ps_hold>; + +			sdc4_gpios: sdc4-gpios { +				pios { +					pins = "gpio63", "gpio64", "gpio65", "gpio66", "gpio67", "gpio68"; +					function = "sdc4"; +				}; +			}; + +			ps_hold: ps_hold { +				mux { +					pins = "gpio78"; +					function = "ps_hold"; +				}; +			}; +		}; +  		intc: interrupt-controller@2000000 {  			compatible = "qcom,msm-qgic2";  			interrupt-controller; @@ -133,6 +163,48 @@  			regulator;  		}; +		gsbi1: gsbi@12440000 { +			status = "disabled"; +			compatible = "qcom,gsbi-v1.0.0"; +			reg = <0x12440000 0x100>; +			clocks = <&gcc GSBI1_H_CLK>; +			clock-names = "iface"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; + +			i2c1: i2c@12460000 { +				compatible = "qcom,i2c-qup-v1.1.1"; +				reg = <0x12460000 0x1000>; +				interrupts = <0 194 IRQ_TYPE_NONE>; +				clocks = <&gcc GSBI1_QUP_CLK>, <&gcc GSBI1_H_CLK>; +				clock-names = "core", "iface"; +				#address-cells = <1>; +				#size-cells = <0>; +			}; +		}; + +		gsbi2: gsbi@12480000 { +			status = "disabled"; +			compatible = "qcom,gsbi-v1.0.0"; +			reg = <0x12480000 0x100>; +			clocks = <&gcc GSBI2_H_CLK>; +			clock-names = "iface"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; + +			i2c2: i2c@124a0000 { +				compatible = "qcom,i2c-qup-v1.1.1"; +				reg = <0x124a0000 0x1000>; +				interrupts = <0 196 IRQ_TYPE_NONE>; +				clocks = <&gcc GSBI2_QUP_CLK>, <&gcc GSBI2_H_CLK>; +				clock-names = "core", "iface"; +				#address-cells = <1>; +				#size-cells = <0>; +			}; +		}; +  		gsbi7: gsbi@16600000 {  			status = "disabled";  			compatible = "qcom,gsbi-v1.0.0"; @@ -166,5 +238,116 @@  			#clock-cells = <1>;  			#reset-cells = <1>;  		}; + +		mmcc: clock-controller@4000000 { +			compatible = "qcom,mmcc-apq8064"; +			reg = <0x4000000 0x1000>; +			#clock-cells = <1>; +			#reset-cells = <1>; +		}; + +		/* Temporary fixed regulator */ +		vsdcc_fixed: vsdcc-regulator { +			compatible = "regulator-fixed"; +			regulator-name = "SDCC Power"; +			regulator-min-microvolt = <2700000>; +			regulator-max-microvolt = <2700000>; +			regulator-always-on; +		}; + +		sdcc1bam:dma@12402000{ +			compatible = "qcom,bam-v1.3.0"; +			reg = <0x12402000 0x8000>; +			interrupts = <0 98 0>; +			clocks = <&gcc SDC1_H_CLK>; +			clock-names = "bam_clk"; +			#dma-cells = <1>; +			qcom,ee = <0>; +		}; + +		sdcc3bam:dma@12182000{ +			compatible = "qcom,bam-v1.3.0"; +			reg = <0x12182000 0x8000>; +			interrupts = <0 96 0>; +			clocks = <&gcc SDC3_H_CLK>; +			clock-names = "bam_clk"; +			#dma-cells = <1>; +			qcom,ee = <0>; +		}; + +		sdcc4bam:dma@121c2000{ +			compatible = "qcom,bam-v1.3.0"; +			reg = <0x121c2000 0x8000>; +			interrupts = <0 95 0>; +			clocks = <&gcc SDC4_H_CLK>; +			clock-names = "bam_clk"; +			#dma-cells = <1>; +			qcom,ee = <0>; +		}; + +		amba { +			compatible = "arm,amba-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; +			sdcc1: sdcc@12400000 { +				status		= "disabled"; +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				reg		= <0x12400000 0x2000>; +				interrupts	= <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC1_CLK>, <&gcc SDC1_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <8>; +				max-frequency	= <96000000>; +				non-removable; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				vmmc-supply = <&vsdcc_fixed>; +				dmas = <&sdcc1bam 2>, <&sdcc1bam 1>; +				dma-names = "tx", "rx"; +			}; + +			sdcc3: sdcc@12180000 { +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				status		= "disabled"; +				reg		= <0x12180000 0x2000>; +				interrupts	= <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC3_CLK>, <&gcc SDC3_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <4>; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				max-frequency	= <192000000>; +				no-1-8-v; +				vmmc-supply = <&vsdcc_fixed>; +				dmas = <&sdcc3bam 2>, <&sdcc3bam 1>; +				dma-names = "tx", "rx"; +			}; + +			sdcc4: sdcc@121c0000 { +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				status		= "disabled"; +				reg		= <0x121c0000 0x2000>; +				interrupts	= <GIC_SPI 101 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC4_CLK>, <&gcc SDC4_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <4>; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				max-frequency	= <48000000>; +				vmmc-supply = <&vsdcc_fixed>; +				vqmmc-supply = <&vsdcc_fixed>; +				dmas = <&sdcc4bam 2>, <&sdcc4bam 1>; +				dma-names = "tx", "rx"; +				pinctrl-names = "default"; +				pinctrl-0 = <&sdc4_gpios>; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts b/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts index b4dfb01fe6fb..47370494d0f8 100644 --- a/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts +++ b/arch/arm/boot/dts/qcom-apq8074-dragonboard.dts @@ -22,6 +22,13 @@  		pinctrl@fd510000 { +			i2c11_pins: i2c11 { +				mux { +					pins = "gpio83", "gpio84"; +					function = "blsp_i2c11"; +				}; +			}; +  			spi8_default: spi8_default {  				mosi {  					pins = "gpio45"; @@ -41,5 +48,19 @@  				};  			};  		}; + +		i2c@f9967000 { +			status = "okay"; +			clock-frequency = <200000>; +			pinctrl-0 = <&i2c11_pins>; +			pinctrl-names = "default"; + +			eeprom: eeprom@52 { +				compatible = "atmel,24c128"; +				reg = <0x52>; +				pagesize = <32>; +				read-only; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/qcom-apq8084-ifc6540.dts b/arch/arm/boot/dts/qcom-apq8084-ifc6540.dts new file mode 100644 index 000000000000..c9ff10821ad9 --- /dev/null +++ b/arch/arm/boot/dts/qcom-apq8084-ifc6540.dts @@ -0,0 +1,23 @@ +#include "qcom-apq8084.dtsi" + +/ { +	model = "Qualcomm APQ8084/IFC6540"; +	compatible = "qcom,apq8084-ifc6540", "qcom,apq8084"; + +	soc { +		serial@f995e000 { +			status = "okay"; +		}; + +		sdhci@f9824900 { +			bus-width = <8>; +			non-removable; +			status = "okay"; +		}; + +		sdhci@f98a4900 { +			cd-gpios = <&tlmm 122 GPIO_ACTIVE_LOW>; +			bus-width = <4>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/qcom-apq8084-mtp.dts b/arch/arm/boot/dts/qcom-apq8084-mtp.dts index 9dae3878b71d..8ecec58a9ff6 100644 --- a/arch/arm/boot/dts/qcom-apq8084-mtp.dts +++ b/arch/arm/boot/dts/qcom-apq8084-mtp.dts @@ -3,4 +3,10 @@  / {  	model = "Qualcomm APQ 8084-MTP";  	compatible = "qcom,apq8084-mtp", "qcom,apq8084"; + +	soc { +		serial@f995e000 { +			status = "okay"; +		}; +	};  }; diff --git a/arch/arm/boot/dts/qcom-apq8084.dtsi b/arch/arm/boot/dts/qcom-apq8084.dtsi index e3e009a5912b..1f130bc16858 100644 --- a/arch/arm/boot/dts/qcom-apq8084.dtsi +++ b/arch/arm/boot/dts/qcom-apq8084.dtsi @@ -2,6 +2,9 @@  #include "skeleton.dtsi" +#include <dt-bindings/clock/qcom,gcc-apq8084.h> +#include <dt-bindings/gpio/gpio.h> +  / {  	model = "Qualcomm APQ 8084";  	compatible = "qcom,apq8084"; @@ -175,5 +178,53 @@  			compatible = "qcom,pshold";  			reg = <0xfc4ab000 0x4>;  		}; + +		gcc: clock-controller@fc400000 { +			compatible = "qcom,gcc-apq8084"; +			#clock-cells = <1>; +			#reset-cells = <1>; +			reg = <0xfc400000 0x4000>; +		}; + +		tlmm: pinctrl@fd510000 { +			compatible = "qcom,apq8084-pinctrl"; +			reg = <0xfd510000 0x4000>; +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			interrupts = <0 208 0>; +		}; + +		serial@f995e000 { +			compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm"; +			reg = <0xf995e000 0x1000>; +			interrupts = <0 114 0x0>; +			clocks = <&gcc GCC_BLSP2_UART2_APPS_CLK>, <&gcc GCC_BLSP2_AHB_CLK>; +			clock-names = "core", "iface"; +			status = "disabled"; +		}; + +		sdhci@f9824900 { +			compatible = "qcom,sdhci-msm-v4"; +			reg = <0xf9824900 0x11c>, <0xf9824000 0x800>; +			reg-names = "hc_mem", "core_mem"; +			interrupts = <0 123 0>, <0 138 0>; +			interrupt-names = "hc_irq", "pwr_irq"; +			clocks = <&gcc GCC_SDCC1_APPS_CLK>, <&gcc GCC_SDCC1_AHB_CLK>; +			clock-names = "core", "iface"; +			status = "disabled"; +		}; + +		sdhci@f98a4900 { +			compatible = "qcom,sdhci-msm-v4"; +			reg = <0xf98a4900 0x11c>, <0xf98a4000 0x800>; +			reg-names = "hc_mem", "core_mem"; +			interrupts = <0 125 0>, <0 221 0>; +			interrupt-names = "hc_irq", "pwr_irq"; +			clocks = <&gcc GCC_SDCC2_APPS_CLK>, <&gcc GCC_SDCC2_AHB_CLK>; +			clock-names = "core", "iface"; +			status = "disabled"; +		};  	};  }; diff --git a/arch/arm/boot/dts/qcom-ipq8064-ap148.dts b/arch/arm/boot/dts/qcom-ipq8064-ap148.dts new file mode 100644 index 000000000000..95e64955fb8e --- /dev/null +++ b/arch/arm/boot/dts/qcom-ipq8064-ap148.dts @@ -0,0 +1,85 @@ +#include "qcom-ipq8064-v1.0.dtsi" + +/ { +	model = "Qualcomm IPQ8064/AP148"; +	compatible = "qcom,ipq8064-ap148", "qcom,ipq8064"; + +	reserved-memory { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; +		rsvd@41200000 { +			reg = <0x41200000 0x300000>; +			no-map; +		}; +	}; + +	soc { +		pinmux@800000 { +			i2c4_pins: i2c4_pinmux { +				pins = "gpio12", "gpio13"; +				function = "gsbi4"; +				bias-disable; +			}; + +			spi_pins: spi_pins { +				mux { +					pins = "gpio18", "gpio19", "gpio21"; +					function = "gsbi5"; +					drive-strength = <10>; +					bias-none; +				}; +			}; +		}; + +		gsbi@16300000 { +			qcom,mode = <GSBI_PROT_I2C_UART>; +			status = "ok"; +			serial@16340000 { +				status = "ok"; +			}; + +			i2c4: i2c@16380000 { +				status = "ok"; + +				clock-frequency = <200000>; + +				pinctrl-0 = <&i2c4_pins>; +				pinctrl-names = "default"; +			}; +		}; + +		gsbi5: gsbi@1a200000 { +			qcom,mode = <GSBI_PROT_SPI>; +			status = "ok"; + +			spi4: spi@1a280000 { +				status = "ok"; +				spi-max-frequency = <50000000>; + +				pinctrl-0 = <&spi_pins>; +				pinctrl-names = "default"; + +				cs-gpios = <&qcom_pinmux 20 0>; + +				flash: m25p80@0 { +					compatible = "s25fl256s1"; +					#address-cells = <1>; +					#size-cells = <1>; +					spi-max-frequency = <50000000>; +					reg = <0>; + +					partition@0 { +						label = "rootfs"; +						reg = <0x0 0x1000000>; +					}; + +					partition@1 { +						label = "scratch"; +						reg = <0x1000000 0x1000000>; +					}; +				}; +			}; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/qcom-ipq8064-v1.0.dtsi b/arch/arm/boot/dts/qcom-ipq8064-v1.0.dtsi new file mode 100644 index 000000000000..7093b075e408 --- /dev/null +++ b/arch/arm/boot/dts/qcom-ipq8064-v1.0.dtsi @@ -0,0 +1 @@ +#include "qcom-ipq8064.dtsi" diff --git a/arch/arm/boot/dts/qcom-ipq8064.dtsi b/arch/arm/boot/dts/qcom-ipq8064.dtsi new file mode 100644 index 000000000000..244f857f0e6f --- /dev/null +++ b/arch/arm/boot/dts/qcom-ipq8064.dtsi @@ -0,0 +1,250 @@ +/dts-v1/; + +#include "skeleton.dtsi" +#include <dt-bindings/clock/qcom,gcc-ipq806x.h> +#include <dt-bindings/soc/qcom,gsbi.h> + +/ { +	model = "Qualcomm IPQ8064"; +	compatible = "qcom,ipq8064"; +	interrupt-parent = <&intc>; + +	cpus { +		#address-cells = <1>; +		#size-cells = <0>; + +		cpu@0 { +			compatible = "qcom,krait"; +			enable-method = "qcom,kpss-acc-v1"; +			device_type = "cpu"; +			reg = <0>; +			next-level-cache = <&L2>; +			qcom,acc = <&acc0>; +			qcom,saw = <&saw0>; +		}; + +		cpu@1 { +			compatible = "qcom,krait"; +			enable-method = "qcom,kpss-acc-v1"; +			device_type = "cpu"; +			reg = <1>; +			next-level-cache = <&L2>; +			qcom,acc = <&acc1>; +			qcom,saw = <&saw1>; +		}; + +		L2: l2-cache { +			compatible = "cache"; +			cache-level = <2>; +		}; +	}; + +	cpu-pmu { +		compatible = "qcom,krait-pmu"; +		interrupts = <1 10 0x304>; +	}; + +	reserved-memory { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		nss@40000000 { +			reg = <0x40000000 0x1000000>; +			no-map; +		}; + +		smem@41000000 { +			reg = <0x41000000 0x200000>; +			no-map; +		}; +	}; + +	soc: soc { +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; +		compatible = "simple-bus"; + +		qcom_pinmux: pinmux@800000 { +			compatible = "qcom,ipq8064-pinctrl"; +			reg = <0x800000 0x4000>; + +			gpio-controller; +			#gpio-cells = <2>; +			interrupt-controller; +			#interrupt-cells = <2>; +			interrupts = <0 32 0x4>; +		}; + +		intc: interrupt-controller@2000000 { +			compatible = "qcom,msm-qgic2"; +			interrupt-controller; +			#interrupt-cells = <3>; +			reg = <0x02000000 0x1000>, +			      <0x02002000 0x1000>; +		}; + +		timer@200a000 { +			compatible = "qcom,kpss-timer", "qcom,msm-timer"; +			interrupts = <1 1 0x301>, +				     <1 2 0x301>, +				     <1 3 0x301>; +			reg = <0x0200a000 0x100>; +			clock-frequency = <25000000>, +					  <32768>; +			cpu-offset = <0x80000>; +		}; + +		acc0: clock-controller@2088000 { +			compatible = "qcom,kpss-acc-v1"; +			reg = <0x02088000 0x1000>, <0x02008000 0x1000>; +		}; + +		acc1: clock-controller@2098000 { +			compatible = "qcom,kpss-acc-v1"; +			reg = <0x02098000 0x1000>, <0x02008000 0x1000>; +		}; + +		saw0: regulator@2089000 { +			compatible = "qcom,saw2"; +			reg = <0x02089000 0x1000>, <0x02009000 0x1000>; +			regulator; +		}; + +		saw1: regulator@2099000 { +			compatible = "qcom,saw2"; +			reg = <0x02099000 0x1000>, <0x02009000 0x1000>; +			regulator; +		}; + +		gsbi2: gsbi@12480000 { +			compatible = "qcom,gsbi-v1.0.0"; +			reg = <0x12480000 0x100>; +			clocks = <&gcc GSBI2_H_CLK>; +			clock-names = "iface"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; +			status = "disabled"; + +			serial@12490000 { +				compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm"; +				reg = <0x12490000 0x1000>, +				      <0x12480000 0x1000>; +				interrupts = <0 195 0x0>; +				clocks = <&gcc GSBI2_UART_CLK>, <&gcc GSBI2_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; +			}; + +			i2c@124a0000 { +				compatible = "qcom,i2c-qup-v1.1.1"; +				reg = <0x124a0000 0x1000>; +				interrupts = <0 196 0>; + +				clocks = <&gcc GSBI2_QUP_CLK>, <&gcc GSBI2_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; + +				#address-cells = <1>; +				#size-cells = <0>; +			}; + +		}; + +		gsbi4: gsbi@16300000 { +			compatible = "qcom,gsbi-v1.0.0"; +			reg = <0x16300000 0x100>; +			clocks = <&gcc GSBI4_H_CLK>; +			clock-names = "iface"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; +			status = "disabled"; + +			serial@16340000 { +				compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm"; +				reg = <0x16340000 0x1000>, +				      <0x16300000 0x1000>; +				interrupts = <0 152 0x0>; +				clocks = <&gcc GSBI4_UART_CLK>, <&gcc GSBI4_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; +			}; + +			i2c@16380000 { +				compatible = "qcom,i2c-qup-v1.1.1"; +				reg = <0x16380000 0x1000>; +				interrupts = <0 153 0>; + +				clocks = <&gcc GSBI4_QUP_CLK>, <&gcc GSBI4_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; + +				#address-cells = <1>; +				#size-cells = <0>; +			}; +		}; + +		gsbi5: gsbi@1a200000 { +			compatible = "qcom,gsbi-v1.0.0"; +			reg = <0x1a200000 0x100>; +			clocks = <&gcc GSBI5_H_CLK>; +			clock-names = "iface"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; +			status = "disabled"; + +			serial@1a240000 { +				compatible = "qcom,msm-uartdm-v1.3", "qcom,msm-uartdm"; +				reg = <0x1a240000 0x1000>, +				      <0x1a200000 0x1000>; +				interrupts = <0 154 0x0>; +				clocks = <&gcc GSBI5_UART_CLK>, <&gcc GSBI5_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; +			}; + +			i2c@1a280000 { +				compatible = "qcom,i2c-qup-v1.1.1"; +				reg = <0x1a280000 0x1000>; +				interrupts = <0 155 0>; + +				clocks = <&gcc GSBI5_QUP_CLK>, <&gcc GSBI5_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; + +				#address-cells = <1>; +				#size-cells = <0>; +			}; + +			spi@1a280000 { +				compatible = "qcom,spi-qup-v1.1.1"; +				reg = <0x1a280000 0x1000>; +				interrupts = <0 155 0>; + +				clocks = <&gcc GSBI5_QUP_CLK>, <&gcc GSBI5_H_CLK>; +				clock-names = "core", "iface"; +				status = "disabled"; + +				#address-cells = <1>; +				#size-cells = <0>; +			}; +		}; + +		qcom,ssbi@500000 { +			compatible = "qcom,ssbi"; +			reg = <0x00500000 0x1000>; +			qcom,controller-type = "pmic-arbiter"; +		}; + +		gcc: clock-controller@900000 { +			compatible = "qcom,gcc-ipq8064"; +			reg = <0x00900000 0x4000>; +			#clock-cells = <1>; +			#reset-cells = <1>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/qcom-msm8660-surf.dts b/arch/arm/boot/dts/qcom-msm8660-surf.dts index 45180adfadf1..e0883c376248 100644 --- a/arch/arm/boot/dts/qcom-msm8660-surf.dts +++ b/arch/arm/boot/dts/qcom-msm8660-surf.dts @@ -1,3 +1,5 @@ +#include <dt-bindings/input/input.h> +  #include "qcom-msm8660.dtsi"  / { @@ -12,5 +14,45 @@  				status = "ok";  			};  		}; + +		amba { +			/* eMMC */ +			sdcc1: sdcc@12400000 { +				status = "okay"; +			}; + +			/* External micro SD card */ +			sdcc3: sdcc@12180000 { +				status = "okay"; +			}; +		}; +	}; +}; + +&pmicintc { +	keypad@148 { +		linux,keymap = < +			MATRIX_KEY(0, 0, KEY_FN_F1) +			MATRIX_KEY(0, 1, KEY_UP) +			MATRIX_KEY(0, 2, KEY_LEFT) +			MATRIX_KEY(0, 3, KEY_VOLUMEUP) +			MATRIX_KEY(1, 0, KEY_FN_F2) +			MATRIX_KEY(1, 1, KEY_RIGHT) +			MATRIX_KEY(1, 2, KEY_DOWN) +			MATRIX_KEY(1, 3, KEY_VOLUMEDOWN) +			MATRIX_KEY(2, 3, KEY_ENTER) +			MATRIX_KEY(4, 0, KEY_CAMERA_FOCUS) +			MATRIX_KEY(4, 1, KEY_UP) +			MATRIX_KEY(4, 2, KEY_LEFT) +			MATRIX_KEY(4, 3, KEY_HOME) +			MATRIX_KEY(4, 4, KEY_FN_F3) +			MATRIX_KEY(5, 0, KEY_CAMERA) +			MATRIX_KEY(5, 1, KEY_RIGHT) +			MATRIX_KEY(5, 2, KEY_DOWN) +			MATRIX_KEY(5, 3, KEY_BACK) +			MATRIX_KEY(5, 4, KEY_MENU) +			>; +		keypad,num-rows = <6>; +		keypad,num-columns = <5>;  	};  }; diff --git a/arch/arm/boot/dts/qcom-msm8660.dtsi b/arch/arm/boot/dts/qcom-msm8660.dtsi index 53837aaa2f72..0affd6193f56 100644 --- a/arch/arm/boot/dts/qcom-msm8660.dtsi +++ b/arch/arm/boot/dts/qcom-msm8660.dtsi @@ -2,6 +2,7 @@  /include/ "skeleton.dtsi" +#include <dt-bindings/interrupt-controller/arm-gic.h>  #include <dt-bindings/clock/qcom,gcc-msm8660.h>  #include <dt-bindings/soc/qcom,gsbi.h> @@ -103,6 +104,98 @@  			compatible = "qcom,ssbi";  			reg = <0x500000 0x1000>;  			qcom,controller-type = "pmic-arbiter"; + +			pmicintc: pmic@0 { +				compatible = "qcom,pm8058"; +				interrupt-parent = <&msmgpio>; +				interrupts = <88 8>; +				#interrupt-cells = <2>; +				interrupt-controller; +				#address-cells = <1>; +				#size-cells = <0>; + +				pwrkey@1c { +					compatible = "qcom,pm8058-pwrkey"; +					reg = <0x1c>; +					interrupt-parent = <&pmicintc>; +					interrupts = <50 1>, <51 1>; +					debounce = <15625>; +					pull-up; +				}; + +				keypad@148 { +					compatible = "qcom,pm8058-keypad"; +					reg = <0x148>; +					interrupt-parent = <&pmicintc>; +					interrupts = <74 1>, <75 1>; +					debounce = <15>; +					scan-delay = <32>; +					row-hold = <91500>; +				}; + +				rtc@11d { +					compatible = "qcom,pm8058-rtc"; +					interrupt-parent = <&pmicintc>; +					interrupts = <39 1>; +					reg = <0x11d>; +					allow-set-time; +				}; + +				vibrator@4a { +					compatible = "qcom,pm8058-vib"; +					reg = <0x4a>; +				}; +			}; +		}; + +		/* Temporary fixed regulator */ +		vsdcc_fixed: vsdcc-regulator { +			compatible = "regulator-fixed"; +			regulator-name = "SDCC Power"; +			regulator-min-microvolt = <2700000>; +			regulator-max-microvolt = <2700000>; +			regulator-always-on; +		}; + +		amba { +			compatible = "arm,amba-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; +			sdcc1: sdcc@12400000 { +				status		= "disabled"; +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				reg		= <0x12400000 0x8000>; +				interrupts	= <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC1_CLK>, <&gcc SDC1_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <8>; +				max-frequency	= <48000000>; +				non-removable; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				vmmc-supply = <&vsdcc_fixed>; +			}; + +			sdcc3: sdcc@12180000 { +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				status		= "disabled"; +				reg		= <0x12180000 0x8000>; +				interrupts	= <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC3_CLK>, <&gcc SDC3_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <4>; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				max-frequency	= <48000000>; +				no-1-8-v; +				vmmc-supply = <&vsdcc_fixed>; +			};  		};  	}; +  }; diff --git a/arch/arm/boot/dts/qcom-msm8960-cdp.dts b/arch/arm/boot/dts/qcom-msm8960-cdp.dts index 8f75cc4c8340..7f70fae90959 100644 --- a/arch/arm/boot/dts/qcom-msm8960-cdp.dts +++ b/arch/arm/boot/dts/qcom-msm8960-cdp.dts @@ -1,3 +1,5 @@ +#include <dt-bindings/input/input.h> +  #include "qcom-msm8960.dtsi"  / { @@ -12,5 +14,30 @@  				status = "ok";  			};  		}; + +		amba { +			/* eMMC */ +			sdcc1: sdcc@12400000 { +				status = "okay"; +			}; + +			/* External micro SD card */ +			sdcc3: sdcc@12180000 { +				status = "okay"; +			}; +		}; +	}; +}; + +&pmicintc { +	keypad@148 { +		linux,keymap = < +			MATRIX_KEY(0, 0, KEY_VOLUMEUP) +			MATRIX_KEY(0, 1, KEY_VOLUMEDOWN) +			MATRIX_KEY(0, 2, KEY_CAMERA_FOCUS) +			MATRIX_KEY(0, 3, KEY_CAMERA) +			>; +		keypad,num-rows = <1>; +		keypad,num-columns = <5>;  	};  }; diff --git a/arch/arm/boot/dts/qcom-msm8960.dtsi b/arch/arm/boot/dts/qcom-msm8960.dtsi index 5303e53e34dc..e1b0d5cd9e3c 100644 --- a/arch/arm/boot/dts/qcom-msm8960.dtsi +++ b/arch/arm/boot/dts/qcom-msm8960.dtsi @@ -2,6 +2,7 @@  /include/ "skeleton.dtsi" +#include <dt-bindings/interrupt-controller/arm-gic.h>  #include <dt-bindings/clock/qcom,gcc-msm8960.h>  #include <dt-bindings/soc/qcom,gsbi.h> @@ -143,6 +144,43 @@  			compatible = "qcom,ssbi";  			reg = <0x500000 0x1000>;  			qcom,controller-type = "pmic-arbiter"; + +			pmicintc: pmic@0 { +				compatible = "qcom,pm8921"; +				interrupt-parent = <&msmgpio>; +				interrupts = <104 8>; +				#interrupt-cells = <2>; +				interrupt-controller; +				#address-cells = <1>; +				#size-cells = <0>; + +				pwrkey@1c { +					compatible = "qcom,pm8921-pwrkey"; +					reg = <0x1c>; +					interrupt-parent = <&pmicintc>; +					interrupts = <50 1>, <51 1>; +					debounce = <15625>; +					pull-up; +				}; + +				keypad@148 { +					compatible = "qcom,pm8921-keypad"; +					reg = <0x148>; +					interrupt-parent = <&pmicintc>; +					interrupts = <74 1>, <75 1>; +					debounce = <15>; +					scan-delay = <32>; +					row-hold = <91500>; +				}; + +				rtc@11d { +					compatible = "qcom,pm8921-rtc"; +					interrupt-parent = <&pmicintc>; +					interrupts = <39 1>; +					reg = <0x11d>; +					allow-set-time; +				}; +			};  		};  		rng@1a500000 { @@ -151,5 +189,54 @@  			clocks = <&gcc PRNG_CLK>;  			clock-names = "core";  		}; + +		/* Temporary fixed regulator */ +		vsdcc_fixed: vsdcc-regulator { +			compatible = "regulator-fixed"; +			regulator-name = "SDCC Power"; +			regulator-min-microvolt = <2700000>; +			regulator-max-microvolt = <2700000>; +			regulator-always-on; +		}; + +		amba { +			compatible = "arm,amba-bus"; +			#address-cells = <1>; +			#size-cells = <1>; +			ranges; +			sdcc1: sdcc@12400000 { +				status		= "disabled"; +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				reg		= <0x12400000 0x8000>; +				interrupts	= <GIC_SPI 104 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC1_CLK>, <&gcc SDC1_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <8>; +				max-frequency	= <96000000>; +				non-removable; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				vmmc-supply = <&vsdcc_fixed>; +			}; + +			sdcc3: sdcc@12180000 { +				compatible	= "arm,pl18x", "arm,primecell"; +				arm,primecell-periphid = <0x00051180>; +				status		= "disabled"; +				reg		= <0x12180000 0x8000>; +				interrupts	= <GIC_SPI 102 IRQ_TYPE_LEVEL_HIGH>; +				interrupt-names	= "cmd_irq"; +				clocks		= <&gcc SDC3_CLK>, <&gcc SDC3_H_CLK>; +				clock-names	= "mclk", "apb_pclk"; +				bus-width	= <4>; +				cap-sd-highspeed; +				cap-mmc-highspeed; +				max-frequency	= <192000000>; +				no-1-8-v; +				vmmc-supply = <&vsdcc_fixed>; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/qcom-msm8974.dtsi b/arch/arm/boot/dts/qcom-msm8974.dtsi index 69dca2aca25a..e265ec16a787 100644 --- a/arch/arm/boot/dts/qcom-msm8974.dtsi +++ b/arch/arm/boot/dts/qcom-msm8974.dtsi @@ -1,8 +1,8 @@  /dts-v1/; -#include "skeleton.dtsi" - +#include <dt-bindings/interrupt-controller/irq.h>  #include <dt-bindings/clock/qcom,gcc-msm8974.h> +#include "skeleton.dtsi"  / {  	model = "Qualcomm MSM8974"; @@ -236,5 +236,16 @@  			#interrupt-cells = <2>;  			interrupts = <0 208 0>;  		}; + +		blsp_i2c11: i2c@f9967000 { +			status = "disable"; +			compatible = "qcom,i2c-qup-v2.1.1"; +			reg = <0xf9967000 0x1000>; +			interrupts = <0 105 IRQ_TYPE_NONE>; +			clocks = <&gcc GCC_BLSP2_QUP5_I2C_APPS_CLK>, <&gcc GCC_BLSP2_AHB_CLK>; +			clock-names = "core", "iface"; +			#address-cells = <1>; +			#size-cells = <0>; +		};  	};  }; diff --git a/arch/arm/boot/dts/r8a73a4.dtsi b/arch/arm/boot/dts/r8a73a4.dtsi index d8ec5058c351..ef152e384822 100644 --- a/arch/arm/boot/dts/r8a73a4.dtsi +++ b/arch/arm/boot/dts/r8a73a4.dtsi @@ -51,7 +51,7 @@  	};  	irqc0: interrupt-controller@e61c0000 { -		compatible = "renesas,irqc"; +		compatible = "renesas,irqc-r8a73a4", "renesas,irqc";  		#interrupt-cells = <2>;  		interrupt-controller;  		reg = <0 0xe61c0000 0 0x200>; @@ -90,7 +90,7 @@  	};  	irqc1: interrupt-controller@e61c0200 { -		compatible = "renesas,irqc"; +		compatible = "renesas,irqc-r8a73a4", "renesas,irqc";  		#interrupt-cells = <2>;  		interrupt-controller;  		reg = <0 0xe61c0200 0 0x200>; @@ -165,7 +165,7 @@  	};  	thermal@e61f0000 { -		compatible = "renesas,rcar-thermal"; +		compatible = "renesas,thermal-r8a73a4", "renesas,rcar-thermal";  		reg = <0 0xe61f0000 0 0x14>, <0 0xe61f0100 0 0x38>,  			 <0 0xe61f0200 0 0x38>, <0 0xe61f0300 0 0x38>;  		interrupts = <0 69 IRQ_TYPE_LEVEL_HIGH>; diff --git a/arch/arm/boot/dts/r8a7779.dtsi b/arch/arm/boot/dts/r8a7779.dtsi index 58d0d952d60e..05b68f427c50 100644 --- a/arch/arm/boot/dts/r8a7779.dtsi +++ b/arch/arm/boot/dts/r8a7779.dtsi @@ -199,7 +199,6 @@  	scif0: serial@ffe40000 {  		compatible = "renesas,scif-r8a7779", "renesas,scif";  		reg = <0xffe40000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 88 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&cpg_clocks R8A7779_CLK_P>;  		clock-names = "sci_ick"; @@ -209,7 +208,6 @@  	scif1: serial@ffe41000 {  		compatible = "renesas,scif-r8a7779", "renesas,scif";  		reg = <0xffe41000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 89 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&cpg_clocks R8A7779_CLK_P>;  		clock-names = "sci_ick"; @@ -219,7 +217,6 @@  	scif2: serial@ffe42000 {  		compatible = "renesas,scif-r8a7779", "renesas,scif";  		reg = <0xffe42000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 90 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&cpg_clocks R8A7779_CLK_P>;  		clock-names = "sci_ick"; @@ -229,7 +226,6 @@  	scif3: serial@ffe43000 {  		compatible = "renesas,scif-r8a7779", "renesas,scif";  		reg = <0xffe43000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 91 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&cpg_clocks R8A7779_CLK_P>;  		clock-names = "sci_ick"; @@ -239,7 +235,6 @@  	scif4: serial@ffe44000 {  		compatible = "renesas,scif-r8a7779", "renesas,scif";  		reg = <0xffe44000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 92 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&cpg_clocks R8A7779_CLK_P>;  		clock-names = "sci_ick"; @@ -249,7 +244,6 @@  	scif5: serial@ffe45000 {  		compatible = "renesas,scif-r8a7779", "renesas,scif";  		reg = <0xffe45000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 93 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&cpg_clocks R8A7779_CLK_P>;  		clock-names = "sci_ick"; @@ -262,7 +256,7 @@  	};  	thermal@ffc48000 { -		compatible = "renesas,rcar-thermal"; +		compatible = "renesas,thermal-r8a7779", "renesas,rcar-thermal";  		reg = <0xffc48000 0x38>;  	}; @@ -404,10 +398,10 @@  		/* Gate clocks */  		mstp0_clks: clocks@ffc80030 {  			compatible = "renesas,r8a7779-mstp-clocks", -			             "renesas,cpg-mstp-clocks"; +				     "renesas,cpg-mstp-clocks";  			reg = <0xffc80030 4>;  			clocks = <&cpg_clocks R8A7779_CLK_S>, -			         <&cpg_clocks R8A7779_CLK_P>, +				 <&cpg_clocks R8A7779_CLK_P>,  				 <&cpg_clocks R8A7779_CLK_P>,  				 <&cpg_clocks R8A7779_CLK_P>,  				 <&cpg_clocks R8A7779_CLK_S>, @@ -441,7 +435,7 @@  		};  		mstp1_clks: clocks@ffc80034 {  			compatible = "renesas,r8a7779-mstp-clocks", -			             "renesas,cpg-mstp-clocks"; +				     "renesas,cpg-mstp-clocks";  			reg = <0xffc80034 4>, <0xffc80044 4>;  			clocks = <&cpg_clocks R8A7779_CLK_P>,  				 <&cpg_clocks R8A7779_CLK_P>, @@ -470,7 +464,7 @@  		};  		mstp3_clks: clocks@ffc8003c {  			compatible = "renesas,r8a7779-mstp-clocks", -			             "renesas,cpg-mstp-clocks"; +				     "renesas,cpg-mstp-clocks";  			reg = <0xffc8003c 4>;  			clocks = <&s4_clk>, <&s4_clk>, <&s4_clk>, <&s4_clk>,  				 <&s4_clk>, <&s4_clk>; diff --git a/arch/arm/boot/dts/r8a7790-lager.dts b/arch/arm/boot/dts/r8a7790-lager.dts index 856b4236b674..2a6587b0c1f7 100644 --- a/arch/arm/boot/dts/r8a7790-lager.dts +++ b/arch/arm/boot/dts/r8a7790-lager.dts @@ -32,7 +32,7 @@  		reg = <0 0x40000000 0 0x40000000>;  	}; -	memory@180000000 { +	memory@140000000 {  		device_type = "memory";  		reg = <1 0x40000000 0 0xc0000000>;  	}; @@ -234,6 +234,11 @@  		renesas,groups = "usb2";  		renesas,function = "usb2";  	}; + +	vin1_pins: vin { +		renesas,groups = "vin1_data8", "vin1_clk"; +		renesas,function = "vin1"; +	};  };  ðer { @@ -366,6 +371,19 @@  	status = "ok";  	pinctrl-0 = <&iic2_pins>;  	pinctrl-names = "default"; + +	composite-in@20 { +		compatible = "adi,adv7180"; +		reg = <0x20>; +		remote = <&vin1>; + +		port { +			adv7180: endpoint { +				bus-width = <8>; +				remote-endpoint = <&vin1ep0>; +			}; +		}; +	};  };  &iic3 { @@ -374,7 +392,7 @@  	status = "okay";  	vdd_dvfs: regulator@68 { -		compatible = "diasemi,da9210"; +		compatible = "dlg,da9210";  		reg = <0x68>;  		regulator-min-microvolt = <1000000>; @@ -401,3 +419,21 @@  	pinctrl-0 = <&usb2_pins>;  	pinctrl-names = "default";  }; + +/* composite video input */ +&vin1 { +	pinctrl-0 = <&vin1_pins>; +	pinctrl-names = "default"; + +	status = "ok"; + +	port { +		#address-cells = <1>; +		#size-cells = <0>; + +		vin1ep0: endpoint { +			remote-endpoint = <&adv7180>; +			bus-width = <8>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/r8a7790.dtsi b/arch/arm/boot/dts/r8a7790.dtsi index d9ddecbb859c..4b6915ac7675 100644 --- a/arch/arm/boot/dts/r8a7790.dtsi +++ b/arch/arm/boot/dts/r8a7790.dtsi @@ -33,6 +33,10 @@  		spi2 = &msiof1;  		spi3 = &msiof2;  		spi4 = &msiof3; +		vin0 = &vin0; +		vin1 = &vin1; +		vin2 = &vin2; +		vin3 = &vin3;  	};  	cpus { @@ -217,6 +221,65 @@  			     <0 3 IRQ_TYPE_LEVEL_HIGH>;  	}; +	dmac0: dma-controller@e6700000 { +		compatible = "renesas,rcar-dmac"; +		reg = <0 0xe6700000 0 0x20000>; +		interrupts = <0 197 IRQ_TYPE_LEVEL_HIGH +			      0 200 IRQ_TYPE_LEVEL_HIGH +			      0 201 IRQ_TYPE_LEVEL_HIGH +			      0 202 IRQ_TYPE_LEVEL_HIGH +			      0 203 IRQ_TYPE_LEVEL_HIGH +			      0 204 IRQ_TYPE_LEVEL_HIGH +			      0 205 IRQ_TYPE_LEVEL_HIGH +			      0 206 IRQ_TYPE_LEVEL_HIGH +			      0 207 IRQ_TYPE_LEVEL_HIGH +			      0 208 IRQ_TYPE_LEVEL_HIGH +			      0 209 IRQ_TYPE_LEVEL_HIGH +			      0 210 IRQ_TYPE_LEVEL_HIGH +			      0 211 IRQ_TYPE_LEVEL_HIGH +			      0 212 IRQ_TYPE_LEVEL_HIGH +			      0 213 IRQ_TYPE_LEVEL_HIGH +			      0 214 IRQ_TYPE_LEVEL_HIGH>; +		interrupt-names = "error", +				"ch0", "ch1", "ch2", "ch3", +				"ch4", "ch5", "ch6", "ch7", +				"ch8", "ch9", "ch10", "ch11", +				"ch12", "ch13", "ch14"; +		clocks = <&mstp2_clks R8A7790_CLK_SYS_DMAC0>; +		clock-names = "fck"; +		#dma-cells = <1>; +		dma-channels = <15>; +	}; + +	dmac1: dma-controller@e6720000 { +		compatible = "renesas,rcar-dmac"; +		reg = <0 0xe6720000 0 0x20000>; +		interrupts = <0 220 IRQ_TYPE_LEVEL_HIGH +			      0 216 IRQ_TYPE_LEVEL_HIGH +			      0 217 IRQ_TYPE_LEVEL_HIGH +			      0 218 IRQ_TYPE_LEVEL_HIGH +			      0 219 IRQ_TYPE_LEVEL_HIGH +			      0 308 IRQ_TYPE_LEVEL_HIGH +			      0 309 IRQ_TYPE_LEVEL_HIGH +			      0 310 IRQ_TYPE_LEVEL_HIGH +			      0 311 IRQ_TYPE_LEVEL_HIGH +			      0 312 IRQ_TYPE_LEVEL_HIGH +			      0 313 IRQ_TYPE_LEVEL_HIGH +			      0 314 IRQ_TYPE_LEVEL_HIGH +			      0 315 IRQ_TYPE_LEVEL_HIGH +			      0 316 IRQ_TYPE_LEVEL_HIGH +			      0 317 IRQ_TYPE_LEVEL_HIGH +			      0 318 IRQ_TYPE_LEVEL_HIGH>; +		interrupt-names = "error", +				"ch0", "ch1", "ch2", "ch3", +				"ch4", "ch5", "ch6", "ch7", +				"ch8", "ch9", "ch10", "ch11", +				"ch12", "ch13", "ch14"; +		clocks = <&mstp2_clks R8A7790_CLK_SYS_DMAC1>; +		clock-names = "fck"; +		#dma-cells = <1>; +		dma-channels = <15>; +	};  	i2c0: i2c@e6508000 {  		#address-cells = <1>;  		#size-cells = <0>; @@ -473,6 +536,38 @@  		status = "disabled";  	}; +	vin0: video@e6ef0000 { +		compatible = "renesas,vin-r8a7790"; +		clocks = <&mstp8_clks R8A7790_CLK_VIN0>; +		reg = <0 0xe6ef0000 0 0x1000>; +		interrupts = <0 188 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; + +	vin1: video@e6ef1000 { +		compatible = "renesas,vin-r8a7790"; +		clocks = <&mstp8_clks R8A7790_CLK_VIN1>; +		reg = <0 0xe6ef1000 0 0x1000>; +		interrupts = <0 189 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; + +	vin2: video@e6ef2000 { +		compatible = "renesas,vin-r8a7790"; +		clocks = <&mstp8_clks R8A7790_CLK_VIN2>; +		reg = <0 0xe6ef2000 0 0x1000>; +		interrupts = <0 190 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; + +	vin3: video@e6ef3000 { +		compatible = "renesas,vin-r8a7790"; +		clocks = <&mstp8_clks R8A7790_CLK_VIN3>; +		reg = <0 0xe6ef3000 0 0x1000>; +		interrupts = <0 191 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; +  	clocks {  		#address-cells = <2>;  		#size-cells = <2>; @@ -741,33 +836,36 @@  		mstp1_clks: mstp1_clks@e6150134 {  			compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks";  			reg = <0 0xe6150134 0 4>, <0 0xe6150038 0 4>; -			clocks = <&p_clk>, <&p_clk>, <&p_clk>, <&rclk_clk>, +			clocks = <&m2_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&rclk_clk>,  				 <&cp_clk>, <&zs_clk>, <&zs_clk>, <&zs_clk>,  				 <&zs_clk>;  			#clock-cells = <1>;  			renesas,clock-indices = < -				R8A7790_CLK_TMU1 R8A7790_CLK_TMU3 R8A7790_CLK_TMU2 +				R8A7790_CLK_JPU R8A7790_CLK_TMU1 R8A7790_CLK_TMU3 R8A7790_CLK_TMU2  				R8A7790_CLK_CMT0 R8A7790_CLK_TMU0 R8A7790_CLK_VSP1_DU1  				R8A7790_CLK_VSP1_DU0 R8A7790_CLK_VSP1_R R8A7790_CLK_VSP1_S  			>;  			clock-output-names = -				"tmu1", "tmu3", "tmu2", "cmt0", "tmu0", "vsp1-du1", +				"jpu", "tmu1", "tmu3", "tmu2", "cmt0", "tmu0", "vsp1-du1",  				"vsp1-du0", "vsp1-rt", "vsp1-sy";  		};  		mstp2_clks: mstp2_clks@e6150138 {  			compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks";  			reg = <0 0xe6150138 0 4>, <0 0xe6150040 0 4>;  			clocks = <&mp_clk>, <&mp_clk>, <&mp_clk>, <&mp_clk>, <&mp_clk>, -				 <&mp_clk>, <&mp_clk>, <&mp_clk>, <&mp_clk>; +				 <&mp_clk>, <&mp_clk>, <&mp_clk>, <&mp_clk>, <&zs_clk>, +				 <&zs_clk>;  			#clock-cells = <1>;  			renesas,clock-indices = <  				R8A7790_CLK_SCIFA2 R8A7790_CLK_SCIFA1 R8A7790_CLK_SCIFA0  				R8A7790_CLK_MSIOF2 R8A7790_CLK_SCIFB0 R8A7790_CLK_SCIFB1  				R8A7790_CLK_MSIOF1 R8A7790_CLK_MSIOF3 R8A7790_CLK_SCIFB2 +				R8A7790_CLK_SYS_DMAC1 R8A7790_CLK_SYS_DMAC0  			>;  			clock-output-names =  				"scifa2", "scifa1", "scifa0", "msiof2", "scifb0", -				"scifb1", "msiof1", "msiof3", "scifb2"; +				"scifb1", "msiof1", "msiof3", "scifb2", +				"sys-dmac1", "sys-dmac0";  		};  		mstp3_clks: mstp3_clks@e615013c {  			compatible = "renesas,r8a7790-mstp-clocks", "renesas,cpg-mstp-clocks"; @@ -884,6 +982,8 @@  		reg = <0 0xe6b10000 0 0x2c>;  		interrupts = <0 184 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp9_clks R8A7790_CLK_QSPI_MOD>; +		dmas = <&dmac0 0x17>, <&dmac0 0x18>; +		dma-names = "tx", "rx";  		num-cs = <1>;  		#address-cells = <1>;  		#size-cells = <0>; @@ -892,9 +992,11 @@  	msiof0: spi@e6e20000 {  		compatible = "renesas,msiof-r8a7790"; -		reg = <0 0xe6e20000 0 0x0064>; +		reg = <0 0xe6e20000 0 0x0064>, <0 0xe7e20000 0 0x0064>;  		interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp0_clks R8A7790_CLK_MSIOF0>; +		dmas = <&dmac0 0x51>, <&dmac0 0x52>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -902,9 +1004,11 @@  	msiof1: spi@e6e10000 {  		compatible = "renesas,msiof-r8a7790"; -		reg = <0 0xe6e10000 0 0x0064>; +		reg = <0 0xe6e10000 0 0x0064>, <0 0xe7e10000 0 0x0064>;  		interrupts = <0 157 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp2_clks R8A7790_CLK_MSIOF1>; +		dmas = <&dmac0 0x55>, <&dmac0 0x56>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -912,9 +1016,11 @@  	msiof2: spi@e6e00000 {  		compatible = "renesas,msiof-r8a7790"; -		reg = <0 0xe6e00000 0 0x0064>; +		reg = <0 0xe6e00000 0 0x0064>, <0 0xe7e00000 0 0x0064>;  		interrupts = <0 158 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp2_clks R8A7790_CLK_MSIOF2>; +		dmas = <&dmac0 0x41>, <&dmac0 0x42>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -922,9 +1028,11 @@  	msiof3: spi@e6c90000 {  		compatible = "renesas,msiof-r8a7790"; -		reg = <0 0xe6c90000 0 0x0064>; +		reg = <0 0xe6c90000 0 0x0064>, <0 0xe7c90000 0 0x0064>;  		interrupts = <0 159 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp2_clks R8A7790_CLK_MSIOF3>; +		dmas = <&dmac0 0x45>, <&dmac0 0x46>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -1018,7 +1126,6 @@  	rcar_sound: rcar_sound@0xec500000 {  		#sound-dai-cells = <1>;  		compatible =  "renesas,rcar_sound-r8a7790", "renesas,rcar_sound-gen2", "renesas,rcar_sound"; -		interrupt-parent = <&gic>;  		reg =	<0 0xec500000 0 0x1000>, /* SCU */  			<0 0xec5a0000 0 0x100>,  /* ADG */  			<0 0xec540000 0 0x1000>, /* SSIU */ diff --git a/arch/arm/boot/dts/r8a7791-henninger.dts b/arch/arm/boot/dts/r8a7791-henninger.dts index 3a2ef0a2a137..f1b56de10205 100644 --- a/arch/arm/boot/dts/r8a7791-henninger.dts +++ b/arch/arm/boot/dts/r8a7791-henninger.dts @@ -135,6 +135,11 @@  		renesas,groups = "usb1";  		renesas,function = "usb1";  	}; + +	vin0_pins: vin0 { +		renesas,groups = "vin0_data8", "vin0_clk"; +		renesas,function = "vin0"; +	};  };  &scif0 { @@ -191,6 +196,19 @@  	status = "okay";  	clock-frequency = <400000>; + +	composite-in@20 { +		compatible = "adi,adv7180"; +		reg = <0x20>; +		remote = <&vin0>; + +		port { +			adv7180: endpoint { +				bus-width = <8>; +				remote-endpoint = <&vin0ep>; +			}; +		}; +	};  };  &qspi { @@ -260,3 +278,20 @@  &pciec {  	status = "okay";  }; + +/* composite video input */ +&vin0 { +	status = "ok"; +	pinctrl-0 = <&vin0_pins>; +	pinctrl-names = "default"; + +	port { +		#address-cells = <1>; +		#size-cells = <0>; + +		vin0ep: endpoint { +			remote-endpoint = <&adv7180>; +			bus-width = <8>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/r8a7791-koelsch.dts b/arch/arm/boot/dts/r8a7791-koelsch.dts index 23486c081a69..98541c3c580f 100644 --- a/arch/arm/boot/dts/r8a7791-koelsch.dts +++ b/arch/arm/boot/dts/r8a7791-koelsch.dts @@ -275,11 +275,6 @@  		renesas,function = "msiof0";  	}; -	i2c6_pins: i2c6 { -		renesas,groups = "i2c6"; -		renesas,function = "i2c6"; -	}; -  	usb0_pins: usb0 {  		renesas,groups = "usb0";  		renesas,function = "usb0"; @@ -289,6 +284,11 @@  		renesas,groups = "usb1";  		renesas,function = "usb1";  	}; + +	vin1_pins: vin1 { +		renesas,groups = "vin1_data8", "vin1_clk"; +		renesas,function = "vin1"; +	};  };  ðer { @@ -412,6 +412,19 @@  	status = "okay";  	clock-frequency = <400000>; +	composite-in@20 { +		compatible = "adi,adv7180"; +		reg = <0x20>; +		remote = <&vin1>; + +		port { +			adv7180: endpoint { +				bus-width = <8>; +				remote-endpoint = <&vin1ep>; +			}; +		}; +	}; +  	eeprom@50 {  		compatible = "renesas,24c02";  		reg = <0x50>; @@ -420,13 +433,11 @@  };  &i2c6 { -	pinctrl-names = "default"; -	pinctrl-0 = <&i2c6_pins>;  	status = "okay";  	clock-frequency = <100000>;  	vdd_dvfs: regulator@68 { -		compatible = "diasemi,da9210"; +		compatible = "dlg,da9210";  		reg = <0x68>;  		regulator-min-microvolt = <1000000>; @@ -459,3 +470,20 @@  &cpu0 {  	cpu0-supply = <&vdd_dvfs>;  }; + +/* composite video input */ +&vin1 { +	status = "ok"; +	pinctrl-0 = <&vin1_pins>; +	pinctrl-names = "default"; + +	port { +		#address-cells = <1>; +		#size-cells = <0>; + +		vin1ep: endpoint { +			remote-endpoint = <&adv7180>; +			bus-width = <8>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/r8a7791.dtsi b/arch/arm/boot/dts/r8a7791.dtsi index 0d82a4b3c650..9ee1d4133f07 100644 --- a/arch/arm/boot/dts/r8a7791.dtsi +++ b/arch/arm/boot/dts/r8a7791.dtsi @@ -34,6 +34,9 @@  		spi1 = &msiof0;  		spi2 = &msiof1;  		spi3 = &msiof2; +		vin0 = &vin0; +		vin1 = &vin1; +		vin2 = &vin2;  	};  	cpus { @@ -206,6 +209,66 @@  			     <0 17 IRQ_TYPE_LEVEL_HIGH>;  	}; +	dmac0: dma-controller@e6700000 { +		compatible = "renesas,rcar-dmac"; +		reg = <0 0xe6700000 0 0x20000>; +		interrupts = <0 197 IRQ_TYPE_LEVEL_HIGH +			      0 200 IRQ_TYPE_LEVEL_HIGH +			      0 201 IRQ_TYPE_LEVEL_HIGH +			      0 202 IRQ_TYPE_LEVEL_HIGH +			      0 203 IRQ_TYPE_LEVEL_HIGH +			      0 204 IRQ_TYPE_LEVEL_HIGH +			      0 205 IRQ_TYPE_LEVEL_HIGH +			      0 206 IRQ_TYPE_LEVEL_HIGH +			      0 207 IRQ_TYPE_LEVEL_HIGH +			      0 208 IRQ_TYPE_LEVEL_HIGH +			      0 209 IRQ_TYPE_LEVEL_HIGH +			      0 210 IRQ_TYPE_LEVEL_HIGH +			      0 211 IRQ_TYPE_LEVEL_HIGH +			      0 212 IRQ_TYPE_LEVEL_HIGH +			      0 213 IRQ_TYPE_LEVEL_HIGH +			      0 214 IRQ_TYPE_LEVEL_HIGH>; +		interrupt-names = "error", +				"ch0", "ch1", "ch2", "ch3", +				"ch4", "ch5", "ch6", "ch7", +				"ch8", "ch9", "ch10", "ch11", +				"ch12", "ch13", "ch14"; +		clocks = <&mstp2_clks R8A7791_CLK_SYS_DMAC0>; +		clock-names = "fck"; +		#dma-cells = <1>; +		dma-channels = <15>; +	}; + +	dmac1: dma-controller@e6720000 { +		compatible = "renesas,rcar-dmac"; +		reg = <0 0xe6720000 0 0x20000>; +		interrupts = <0 220 IRQ_TYPE_LEVEL_HIGH +			      0 216 IRQ_TYPE_LEVEL_HIGH +			      0 217 IRQ_TYPE_LEVEL_HIGH +			      0 218 IRQ_TYPE_LEVEL_HIGH +			      0 219 IRQ_TYPE_LEVEL_HIGH +			      0 308 IRQ_TYPE_LEVEL_HIGH +			      0 309 IRQ_TYPE_LEVEL_HIGH +			      0 310 IRQ_TYPE_LEVEL_HIGH +			      0 311 IRQ_TYPE_LEVEL_HIGH +			      0 312 IRQ_TYPE_LEVEL_HIGH +			      0 313 IRQ_TYPE_LEVEL_HIGH +			      0 314 IRQ_TYPE_LEVEL_HIGH +			      0 315 IRQ_TYPE_LEVEL_HIGH +			      0 316 IRQ_TYPE_LEVEL_HIGH +			      0 317 IRQ_TYPE_LEVEL_HIGH +			      0 318 IRQ_TYPE_LEVEL_HIGH>; +		interrupt-names = "error", +				"ch0", "ch1", "ch2", "ch3", +				"ch4", "ch5", "ch6", "ch7", +				"ch8", "ch9", "ch10", "ch11", +				"ch12", "ch13", "ch14"; +		clocks = <&mstp2_clks R8A7791_CLK_SYS_DMAC1>; +		clock-names = "fck"; +		#dma-cells = <1>; +		dma-channels = <15>; +	}; +  	/* The memory map in the User's Manual maps the cores to bus numbers */  	i2c0: i2c@e6508000 {  		#address-cells = <1>; @@ -518,6 +581,30 @@  		status = "disabled";  	}; +	vin0: video@e6ef0000 { +		compatible = "renesas,vin-r8a7791"; +		clocks = <&mstp8_clks R8A7791_CLK_VIN0>; +		reg = <0 0xe6ef0000 0 0x1000>; +		interrupts = <0 188 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; + +	vin1: video@e6ef1000 { +		compatible = "renesas,vin-r8a7791"; +		clocks = <&mstp8_clks R8A7791_CLK_VIN1>; +		reg = <0 0xe6ef1000 0 0x1000>; +		interrupts = <0 189 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; + +	vin2: video@e6ef2000 { +		compatible = "renesas,vin-r8a7791"; +		clocks = <&mstp8_clks R8A7791_CLK_VIN2>; +		reg = <0 0xe6ef2000 0 0x1000>; +		interrupts = <0 190 IRQ_TYPE_LEVEL_HIGH>; +		status = "disabled"; +	}; +  	clocks {  		#address-cells = <2>;  		#size-cells = <2>; @@ -770,16 +857,16 @@  		mstp1_clks: mstp1_clks@e6150134 {  			compatible = "renesas,r8a7791-mstp-clocks", "renesas,cpg-mstp-clocks";  			reg = <0 0xe6150134 0 4>, <0 0xe6150038 0 4>; -			clocks = <&p_clk>, <&p_clk>, <&p_clk>, <&rclk_clk>, +			clocks = <&m2_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&rclk_clk>,  				 <&cp_clk>, <&zs_clk>, <&zs_clk>, <&zs_clk>;  			#clock-cells = <1>;  			renesas,clock-indices = < -				R8A7791_CLK_TMU1 R8A7791_CLK_TMU3 R8A7791_CLK_TMU2 +				R8A7791_CLK_JPU R8A7791_CLK_TMU1 R8A7791_CLK_TMU3 R8A7791_CLK_TMU2  				R8A7791_CLK_CMT0 R8A7791_CLK_TMU0 R8A7791_CLK_VSP1_DU1  				R8A7791_CLK_VSP1_DU0 R8A7791_CLK_VSP1_S  			>;  			clock-output-names = -				"tmu1", "tmu3", "tmu2", "cmt0", "tmu0", "vsp1-du1", +				"jpu", "tmu1", "tmu3", "tmu2", "cmt0", "tmu0", "vsp1-du1",  				"vsp1-du0", "vsp1-sy";  		};  		mstp2_clks: mstp2_clks@e6150138 { @@ -925,6 +1012,8 @@  		reg = <0 0xe6b10000 0 0x2c>;  		interrupts = <0 184 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp9_clks R8A7791_CLK_QSPI_MOD>; +		dmas = <&dmac0 0x17>, <&dmac0 0x18>; +		dma-names = "tx", "rx";  		num-cs = <1>;  		#address-cells = <1>;  		#size-cells = <0>; @@ -933,9 +1022,11 @@  	msiof0: spi@e6e20000 {  		compatible = "renesas,msiof-r8a7791"; -		reg = <0 0xe6e20000 0 0x0064>; +		reg = <0 0xe6e20000 0 0x0064>, <0 0xe7e20000 0 0x0064>;  		interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp0_clks R8A7791_CLK_MSIOF0>; +		dmas = <&dmac0 0x51>, <&dmac0 0x52>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -943,9 +1034,11 @@  	msiof1: spi@e6e10000 {  		compatible = "renesas,msiof-r8a7791"; -		reg = <0 0xe6e10000 0 0x0064>; +		reg = <0 0xe6e10000 0 0x0064>, <0 0xe7e10000 0 0x0064>;  		interrupts = <0 157 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp2_clks R8A7791_CLK_MSIOF1>; +		dmas = <&dmac0 0x55>, <&dmac0 0x56>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -953,9 +1046,11 @@  	msiof2: spi@e6e00000 {  		compatible = "renesas,msiof-r8a7791"; -		reg = <0 0xe6e00000 0 0x0064>; +		reg = <0 0xe6e00000 0 0x0064>, <0 0xe7e00000 0 0x0064>;  		interrupts = <0 158 IRQ_TYPE_LEVEL_HIGH>;  		clocks = <&mstp2_clks R8A7791_CLK_MSIOF2>; +		dmas = <&dmac0 0x41>, <&dmac0 0x42>; +		dma-names = "tx", "rx";  		#address-cells = <1>;  		#size-cells = <0>;  		status = "disabled"; @@ -1029,7 +1124,6 @@  	rcar_sound: rcar_sound@0xec500000 {  		#sound-dai-cells = <1>;  		compatible =  "renesas,rcar_sound-r8a7791", "renesas,rcar_sound-gen2", "renesas,rcar_sound"; -		interrupt-parent = <&gic>;  		reg =	<0 0xec500000 0 0x1000>, /* SCU */  			<0 0xec5a0000 0 0x100>,  /* ADG */  			<0 0xec540000 0 0x1000>, /* SSIU */ diff --git a/arch/arm/boot/dts/r8a7794-alt.dts b/arch/arm/boot/dts/r8a7794-alt.dts new file mode 100644 index 000000000000..79d06ef017a0 --- /dev/null +++ b/arch/arm/boot/dts/r8a7794-alt.dts @@ -0,0 +1,47 @@ +/* + * Device Tree Source for the Alt board + * + * Copyright (C) 2014 Renesas Electronics Corporation + * + * This file is licensed under the terms of the GNU General Public License + * version 2.  This program is licensed "as is" without any warranty of any + * kind, whether express or implied. + */ + +/dts-v1/; +#include "r8a7794.dtsi" + +/ { +	model = "Alt"; +	compatible = "renesas,alt", "renesas,r8a7794"; + +	aliases { +		serial0 = &scif2; +	}; + +	chosen { +		bootargs = "console=ttySC0,38400 ignore_loglevel rw root=/dev/nfs ip=dhcp"; +	}; + +	memory@40000000 { +		device_type = "memory"; +		reg = <0 0x40000000 0 0x40000000>; +	}; + +	lbsc { +		#address-cells = <1>; +		#size-cells = <1>; +	}; +}; + +&extal_clk { +	clock-frequency = <20000000>; +}; + +&cmt0 { +	status = "ok"; +}; + +&scif2 { +	status = "ok"; +}; diff --git a/arch/arm/boot/dts/r8a7794.dtsi b/arch/arm/boot/dts/r8a7794.dtsi new file mode 100644 index 000000000000..d4e8bce1e0b7 --- /dev/null +++ b/arch/arm/boot/dts/r8a7794.dtsi @@ -0,0 +1,531 @@ +/* + * Device Tree Source for the r8a7794 SoC + * + * Copyright (C) 2014 Renesas Electronics Corporation + * Copyright (C) 2014 Ulrich Hecht + * + * This file is licensed under the terms of the GNU General Public License + * version 2.  This program is licensed "as is" without any warranty of any + * kind, whether express or implied. + */ + +#include <dt-bindings/clock/r8a7794-clock.h> +#include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/interrupt-controller/irq.h> + +/ { +	compatible = "renesas,r8a7794"; +	interrupt-parent = <&gic>; +	#address-cells = <2>; +	#size-cells = <2>; + +	cpus { +		#address-cells = <1>; +		#size-cells = <0>; + +		cpu0: cpu@0 { +			device_type = "cpu"; +			compatible = "arm,cortex-a7"; +			reg = <0>; +			clock-frequency = <1000000000>; +		}; + +		cpu1: cpu@1 { +			device_type = "cpu"; +			compatible = "arm,cortex-a7"; +			reg = <1>; +			clock-frequency = <1000000000>; +		}; +	}; + +	gic: interrupt-controller@f1001000 { +		compatible = "arm,cortex-a7-gic"; +		#interrupt-cells = <3>; +		#address-cells = <0>; +		interrupt-controller; +		reg = <0 0xf1001000 0 0x1000>, +			<0 0xf1002000 0 0x1000>, +			<0 0xf1004000 0 0x2000>, +			<0 0xf1006000 0 0x2000>; +		interrupts = <1 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; +	}; + +	cmt0: timer@ffca0000 { +		compatible = "renesas,cmt-48-gen2"; +		reg = <0 0xffca0000 0 0x1004>; +		interrupts = <0 142 IRQ_TYPE_LEVEL_HIGH>, +			     <0 143 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp1_clks R8A7794_CLK_CMT0>; +		clock-names = "fck"; + +		renesas,channels-mask = <0x60>; + +		status = "disabled"; +	}; + +	cmt1: timer@e6130000 { +		compatible = "renesas,cmt-48-gen2"; +		reg = <0 0xe6130000 0 0x1004>; +		interrupts = <0 120 IRQ_TYPE_LEVEL_HIGH>, +			     <0 121 IRQ_TYPE_LEVEL_HIGH>, +			     <0 122 IRQ_TYPE_LEVEL_HIGH>, +			     <0 123 IRQ_TYPE_LEVEL_HIGH>, +			     <0 124 IRQ_TYPE_LEVEL_HIGH>, +			     <0 125 IRQ_TYPE_LEVEL_HIGH>, +			     <0 126 IRQ_TYPE_LEVEL_HIGH>, +			     <0 127 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp3_clks R8A7794_CLK_CMT1>; +		clock-names = "fck"; + +		renesas,channels-mask = <0xff>; + +		status = "disabled"; +	}; + +	irqc0: interrupt-controller@e61c0000 { +		compatible = "renesas,irqc-r8a7794", "renesas,irqc"; +		#interrupt-cells = <2>; +		interrupt-controller; +		reg = <0 0xe61c0000 0 0x200>; +		interrupts = <0 0 IRQ_TYPE_LEVEL_HIGH>, +			     <0 1 IRQ_TYPE_LEVEL_HIGH>, +			     <0 2 IRQ_TYPE_LEVEL_HIGH>, +			     <0 3 IRQ_TYPE_LEVEL_HIGH>, +			     <0 12 IRQ_TYPE_LEVEL_HIGH>, +			     <0 13 IRQ_TYPE_LEVEL_HIGH>, +			     <0 14 IRQ_TYPE_LEVEL_HIGH>, +			     <0 15 IRQ_TYPE_LEVEL_HIGH>, +			     <0 16 IRQ_TYPE_LEVEL_HIGH>, +			     <0 17 IRQ_TYPE_LEVEL_HIGH>; +	}; + +	scifa0: serial@e6c40000 { +		compatible = "renesas,scifa-r8a7794", "renesas,scifa"; +		reg = <0 0xe6c40000 0 64>; +		interrupts = <0 144 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp2_clks R8A7794_CLK_SCIFA0>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifa1: serial@e6c50000 { +		compatible = "renesas,scifa-r8a7794", "renesas,scifa"; +		reg = <0 0xe6c50000 0 64>; +		interrupts = <0 145 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp2_clks R8A7794_CLK_SCIFA1>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifa2: serial@e6c60000 { +		compatible = "renesas,scifa-r8a7794", "renesas,scifa"; +		reg = <0 0xe6c60000 0 64>; +		interrupts = <0 151 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp2_clks R8A7794_CLK_SCIFA2>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifa3: serial@e6c70000 { +		compatible = "renesas,scifa-r8a7794", "renesas,scifa"; +		reg = <0 0xe6c70000 0 64>; +		interrupts = <0 29 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp11_clks R8A7794_CLK_SCIFA3>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifa4: serial@e6c78000 { +		compatible = "renesas,scifa-r8a7794", "renesas,scifa"; +		reg = <0 0xe6c78000 0 64>; +		interrupts = <0 30 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp11_clks R8A7794_CLK_SCIFA4>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifa5: serial@e6c80000 { +		compatible = "renesas,scifa-r8a7794", "renesas,scifa"; +		reg = <0 0xe6c80000 0 64>; +		interrupts = <0 31 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp11_clks R8A7794_CLK_SCIFA5>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifb0: serial@e6c20000 { +		compatible = "renesas,scifb-r8a7794", "renesas,scifb"; +		reg = <0 0xe6c20000 0 64>; +		interrupts = <0 148 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp2_clks R8A7794_CLK_SCIFB0>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifb1: serial@e6c30000 { +		compatible = "renesas,scifb-r8a7794", "renesas,scifb"; +		reg = <0 0xe6c30000 0 64>; +		interrupts = <0 149 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp2_clks R8A7794_CLK_SCIFB1>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scifb2: serial@e6ce0000 { +		compatible = "renesas,scifb-r8a7794", "renesas,scifb"; +		reg = <0 0xe6ce0000 0 64>; +		interrupts = <0 150 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp2_clks R8A7794_CLK_SCIFB2>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scif0: serial@e6e60000 { +		compatible = "renesas,scif-r8a7794", "renesas,scif"; +		reg = <0 0xe6e60000 0 64>; +		interrupts = <0 152 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_SCIF0>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scif1: serial@e6e68000 { +		compatible = "renesas,scif-r8a7794", "renesas,scif"; +		reg = <0 0xe6e68000 0 64>; +		interrupts = <0 153 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_SCIF1>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scif2: serial@e6e58000 { +		compatible = "renesas,scif-r8a7794", "renesas,scif"; +		reg = <0 0xe6e58000 0 64>; +		interrupts = <0 22 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_SCIF2>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scif3: serial@e6ea8000 { +		compatible = "renesas,scif-r8a7794", "renesas,scif"; +		reg = <0 0xe6ea8000 0 64>; +		interrupts = <0 23 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_SCIF3>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scif4: serial@e6ee0000 { +		compatible = "renesas,scif-r8a7794", "renesas,scif"; +		reg = <0 0xe6ee0000 0 64>; +		interrupts = <0 24 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_SCIF4>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	scif5: serial@e6ee8000 { +		compatible = "renesas,scif-r8a7794", "renesas,scif"; +		reg = <0 0xe6ee8000 0 64>; +		interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_SCIF5>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	hscif0: serial@e62c0000 { +		compatible = "renesas,hscif-r8a7794", "renesas,hscif"; +		reg = <0 0xe62c0000 0 96>; +		interrupts = <0 154 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_HSCIF0>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	hscif1: serial@e62c8000 { +		compatible = "renesas,hscif-r8a7794", "renesas,hscif"; +		reg = <0 0xe62c8000 0 96>; +		interrupts = <0 155 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_HSCIF1>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	hscif2: serial@e62d0000 { +		compatible = "renesas,hscif-r8a7794", "renesas,hscif"; +		reg = <0 0xe62d0000 0 96>; +		interrupts = <0 21 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&mstp7_clks R8A7794_CLK_HSCIF2>; +		clock-names = "sci_ick"; +		status = "disabled"; +	}; + +	clocks { +		#address-cells = <2>; +		#size-cells = <2>; +		ranges; + +		/* External root clock */ +		extal_clk: extal_clk { +			compatible = "fixed-clock"; +			#clock-cells = <0>; +			/* This value must be overriden by the board. */ +			clock-frequency = <0>; +			clock-output-names = "extal"; +		}; + +		/* Special CPG clocks */ +		cpg_clocks: cpg_clocks@e6150000 { +			compatible = "renesas,r8a7794-cpg-clocks", +				     "renesas,rcar-gen2-cpg-clocks"; +			reg = <0 0xe6150000 0 0x1000>; +			clocks = <&extal_clk>; +			#clock-cells = <1>; +			clock-output-names = "main", "pll0", "pll1", "pll3", +					     "lb", "qspi", "sdh", "sd0", "z"; +		}; + +		/* Fixed factor clocks */ +		pll1_div2_clk: pll1_div2_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <2>; +			clock-mult = <1>; +			clock-output-names = "pll1_div2"; +		}; +		zg_clk: zg_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <6>; +			clock-mult = <1>; +			clock-output-names = "zg"; +		}; +		zx_clk: zx_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <3>; +			clock-mult = <1>; +			clock-output-names = "zx"; +		}; +		zs_clk: zs_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <6>; +			clock-mult = <1>; +			clock-output-names = "zs"; +		}; +		hp_clk: hp_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <12>; +			clock-mult = <1>; +			clock-output-names = "hp"; +		}; +		i_clk: i_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <2>; +			clock-mult = <1>; +			clock-output-names = "i"; +		}; +		b_clk: b_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <12>; +			clock-mult = <1>; +			clock-output-names = "b"; +		}; +		p_clk: p_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <24>; +			clock-mult = <1>; +			clock-output-names = "p"; +		}; +		cl_clk: cl_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <48>; +			clock-mult = <1>; +			clock-output-names = "cl"; +		}; +		m2_clk: m2_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <8>; +			clock-mult = <1>; +			clock-output-names = "m2"; +		}; +		imp_clk: imp_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <4>; +			clock-mult = <1>; +			clock-output-names = "imp"; +		}; +		rclk_clk: rclk_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <(48 * 1024)>; +			clock-mult = <1>; +			clock-output-names = "rclk"; +		}; +		oscclk_clk: oscclk_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <(12 * 1024)>; +			clock-mult = <1>; +			clock-output-names = "oscclk"; +		}; +		zb3_clk: zb3_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL3>; +			#clock-cells = <0>; +			clock-div = <4>; +			clock-mult = <1>; +			clock-output-names = "zb3"; +		}; +		zb3d2_clk: zb3d2_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL3>; +			#clock-cells = <0>; +			clock-div = <8>; +			clock-mult = <1>; +			clock-output-names = "zb3d2"; +		}; +		ddr_clk: ddr_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL3>; +			#clock-cells = <0>; +			clock-div = <8>; +			clock-mult = <1>; +			clock-output-names = "ddr"; +		}; +		mp_clk: mp_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&pll1_div2_clk>; +			#clock-cells = <0>; +			clock-div = <15>; +			clock-mult = <1>; +			clock-output-names = "mp"; +		}; +		cp_clk: cp_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&cpg_clocks R8A7794_CLK_PLL1>; +			#clock-cells = <0>; +			clock-div = <48>; +			clock-mult = <1>; +			clock-output-names = "cp"; +		}; + +		acp_clk: acp_clk { +			compatible = "fixed-factor-clock"; +			clocks = <&extal_clk>; +			#clock-cells = <0>; +			clock-div = <2>; +			clock-mult = <1>; +			clock-output-names = "acp"; +		}; + +		/* Gate clocks */ +		mstp0_clks: mstp0_clks@e6150130 { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe6150130 0 4>, <0 0xe6150030 0 4>; +			clocks = <&mp_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = <R8A7794_CLK_MSIOF0>; +			clock-output-names = "msiof0"; +		}; +		mstp1_clks: mstp1_clks@e6150134 { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe6150134 0 4>, <0 0xe6150038 0 4>; +			clocks = <&p_clk>, <&p_clk>, <&p_clk>, <&rclk_clk>, +				 <&cp_clk>, +				 <&zs_clk>, <&zs_clk>, <&zs_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = < +				R8A7794_CLK_TMU1 R8A7794_CLK_TMU3 R8A7794_CLK_TMU2 +				R8A7794_CLK_CMT0 R8A7794_CLK_TMU0 +			>; +			clock-output-names = +				"tmu1", "tmu3", "tmu2", "cmt0", "tmu0"; +		}; +		mstp2_clks: mstp2_clks@e6150138 { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe6150138 0 4>, <0 0xe6150040 0 4>; +			clocks = <&mp_clk>, <&mp_clk>, <&mp_clk>, <&mp_clk>, <&mp_clk>, +				 <&mp_clk>, <&mp_clk>, <&mp_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = < +				R8A7794_CLK_SCIFA2 R8A7794_CLK_SCIFA1 R8A7794_CLK_SCIFA0 +				R8A7794_CLK_MSIOF2 R8A7794_CLK_SCIFB0 R8A7794_CLK_SCIFB1 +				R8A7794_CLK_MSIOF1 R8A7794_CLK_SCIFB2 +			>; +			clock-output-names = +				"scifa2", "scifa1", "scifa0", "msiof2", "scifb0", +				"scifb1", "msiof1", "scifb2"; +		}; +		mstp3_clks: mstp3_clks@e615013c { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe615013c 0 4>, <0 0xe6150048 0 4>; +			clocks = <&rclk_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = < +				R8A7794_CLK_CMT1 +			>; +			clock-output-names = +				"cmt1"; +		}; +		mstp7_clks: mstp7_clks@e615014c { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe615014c 0 4>, <0 0xe61501c4 0 4>; +			clocks = <&zs_clk>, <&p_clk>, <&p_clk>, <&zs_clk>, +				 <&zs_clk>, <&p_clk>, <&p_clk>, <&p_clk>, <&p_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = < +				R8A7794_CLK_HSCIF2 R8A7794_CLK_SCIF5 +				R8A7794_CLK_SCIF4 R8A7794_CLK_HSCIF1 R8A7794_CLK_HSCIF0 +				R8A7794_CLK_SCIF3 R8A7794_CLK_SCIF2 R8A7794_CLK_SCIF1 +				R8A7794_CLK_SCIF0 +			>; +			clock-output-names = +				"hscif2", "scif5", "scif4", "hscif1", "hscif0", +				"scif3", "scif2", "scif1", "scif0"; +		}; +		mstp8_clks: mstp8_clks@e6150990 { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe6150990 0 4>, <0 0xe61509a0 0 4>; +			clocks = <&p_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = < +				R8A7794_CLK_ETHER +			>; +			clock-output-names = +				"ether"; +		}; +		mstp11_clks: mstp11_clks@e615099c { +			compatible = "renesas,r8a7794-mstp-clocks", "renesas,cpg-mstp-clocks"; +			reg = <0 0xe615099c 0 4>, <0 0xe61509ac 0 4>; +			clocks = <&mp_clk>, <&mp_clk>, <&mp_clk>; +			#clock-cells = <1>; +			renesas,clock-indices = < +				R8A7794_CLK_SCIFA3 R8A7794_CLK_SCIFA4 R8A7794_CLK_SCIFA5 +			>; +			clock-output-names = "scifa3", "scifa4", "scifa5"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/rk3066a-bqcurie2.dts b/arch/arm/boot/dts/rk3066a-bqcurie2.dts index 042f821d9e4d..d5344510c676 100644 --- a/arch/arm/boot/dts/rk3066a-bqcurie2.dts +++ b/arch/arm/boot/dts/rk3066a-bqcurie2.dts @@ -149,13 +149,11 @@  &mmc0 { /* sdmmc */  	num-slots = <1>;  	status = "okay"; +	pinctrl-names = "default"; +	pinctrl-0 = <&sd0_clk>, <&sd0_cmd>, <&sd0_cd>, <&sd0_bus4>;  	vmmc-supply = <&vcc_sd0>; - -	slot@0 { -		reg = <0>; -		bus-width = <4>; -		disable-wp; -	}; +	bus-width = <4>; +	disable-wp;  };  &mmc1 { /* wifi */ @@ -166,11 +164,8 @@  	pinctrl-names = "default";  	pinctrl-0 = <&sd1_clk &sd1_cmd &sd1_bus4>; -	slot@0 { -		reg = <0>; -		bus-width = <4>; -		disable-wp; -	}; +	bus-width = <4>; +	disable-wp;  };  &uart0 { diff --git a/arch/arm/boot/dts/rk3066a.dtsi b/arch/arm/boot/dts/rk3066a.dtsi index 879a818fba51..ad9c2db59670 100644 --- a/arch/arm/boot/dts/rk3066a.dtsi +++ b/arch/arm/boot/dts/rk3066a.dtsi @@ -179,6 +179,27 @@  			bias-disable;  		}; +		emmc { +			emmc_clk: emmc-clk { +				rockchip,pins = <RK_GPIO3 31 RK_FUNC_2 &pcfg_pull_default>; +			}; + +			emmc_cmd: emmc-cmd { +				rockchip,pins = <RK_GPIO4 9 RK_FUNC_2 &pcfg_pull_default>; +			}; + +			emmc_rst: emmc-rst { +				rockchip,pins = <RK_GPIO4 10 RK_FUNC_2 &pcfg_pull_default>; +			}; + +			/* +			 * The data pins are shared between nandc and emmc and +			 * not accessible through pinctrl. Also they should've +			 * been already set correctly by firmware, as +			 * flash/emmc is the boot-device. +			 */ +		}; +  		i2c0 {  			i2c0_xfer: i2c0-xfer {  				rockchip,pins = <RK_GPIO2 28 RK_FUNC_1 &pcfg_pull_none>, @@ -238,6 +259,42 @@  			};  		}; +		spi0 { +			spi0_clk: spi0-clk { +				rockchip,pins = <RK_GPIO1 5 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi0_cs0: spi0-cs0 { +				rockchip,pins = <RK_GPIO1 4 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi0_tx: spi0-tx { +				rockchip,pins = <RK_GPIO1 7 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi0_rx: spi0-rx { +				rockchip,pins = <RK_GPIO1 6 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi0_cs1: spi0-cs1 { +				rockchip,pins = <RK_GPIO4 15 RK_FUNC_1 &pcfg_pull_default>; +			}; +		}; + +		spi1 { +			spi1_clk: spi1-clk { +				rockchip,pins = <RK_GPIO2 19 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi1_cs0: spi1-cs0 { +				rockchip,pins = <RK_GPIO2 20 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi1_rx: spi1-rx { +				rockchip,pins = <RK_GPIO2 22 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi1_tx: spi1-tx { +				rockchip,pins = <RK_GPIO2 21 RK_FUNC_2 &pcfg_pull_default>; +			}; +			spi1_cs1: spi1-cs1 { +				rockchip,pins = <RK_GPIO2 23 RK_FUNC_2 &pcfg_pull_default>; +			}; +		}; +  		uart0 {  			uart0_xfer: uart0-xfer {  				rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_default>, @@ -406,6 +463,16 @@  	pinctrl-0 = <&pwm3_out>;  }; +&spi0 { +	pinctrl-names = "default"; +	pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0>; +}; + +&spi1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&spi1_clk &spi1_tx &spi1_rx &spi1_cs0>; +}; +  &uart0 {  	pinctrl-names = "default";  	pinctrl-0 = <&uart0_xfer>; diff --git a/arch/arm/boot/dts/rk3188-radxarock.dts b/arch/arm/boot/dts/rk3188-radxarock.dts index 171b610db709..39f66e349445 100644 --- a/arch/arm/boot/dts/rk3188-radxarock.dts +++ b/arch/arm/boot/dts/rk3188-radxarock.dts @@ -65,6 +65,19 @@  		pinctrl-0 = <&ir_recv_pin>;  	}; +	vcc_otg: usb-otg-regulator { +		compatible = "regulator-fixed"; +		enable-active-high; +		gpio = <&gpio2 31 GPIO_ACTIVE_HIGH>; +		pinctrl-names = "default"; +		pinctrl-0 = <&otg_vbus_drv>; +		regulator-name = "otg-vbus"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		regulator-always-on; +		regulator-boot-on; +	}; +  	vcc_sd0: sdmmc-regulator {  		compatible = "regulator-fixed";  		regulator-name = "sdmmc-supply"; @@ -74,12 +87,36 @@  		startup-delay-us = <100000>;  		vin-supply = <&vcc_io>;  	}; + +	vcc_host: usb-host-regulator { +		compatible = "regulator-fixed"; +		enable-active-high; +		gpio = <&gpio0 3 GPIO_ACTIVE_HIGH>; +		pinctrl-names = "default"; +		pinctrl-0 = <&host_vbus_drv>; +		regulator-name = "host-pwr"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		regulator-always-on; +		regulator-boot-on; +	};  };  &i2c1 {  	status = "okay";  	clock-frequency = <400000>; +	rtc@51 { +		compatible = "haoyu,hym8563"; +		reg = <0x51>; +		interrupt-parent = <&gpio0>; +		interrupts = <13 IRQ_TYPE_EDGE_FALLING>; +		pinctrl-names = "default"; +		pinctrl-0 = <&rtc_int>; +		#clock-cells = <0>; +		clock-output-names = "xin32k"; +	}; +  	act8846: act8846@5a {  		compatible = "active-semi,act8846";  		reg = <0x5a>; @@ -149,7 +186,6 @@  				regulator-name = "VCC_RMII";  				regulator-min-microvolt = <3300000>;  				regulator-max-microvolt = <3300000>; -				regulator-always-on;  			};  			vccio_wl: REG10 { @@ -179,13 +215,12 @@  &mmc0 {  	num-slots = <1>;  	status = "okay"; +	pinctrl-names = "default"; +	pinctrl-0 = <&sd0_clk>, <&sd0_cmd>, <&sd0_cd>, <&sd0_bus4>;  	vmmc-supply = <&vcc_sd0>; -	slot@0 { -		reg = <0>; -		bus-width = <4>; -		disable-wp; -	}; +	bus-width = <4>; +	disable-wp;  };  &pinctrl { @@ -199,11 +234,26 @@  		};  	}; +	hym8563 { +		rtc_int: rtc-int { +			rockchip,pins = <RK_GPIO0 0 RK_FUNC_GPIO &pcfg_pull_up>; +		}; +	}; +  	ir-receiver {  		ir_recv_pin: ir-recv-pin {  			rockchip,pins = <RK_GPIO0 10 RK_FUNC_GPIO &pcfg_pull_none>;  		};  	}; + +	usb { +		host_vbus_drv: host-vbus-drv { +			rockchip,pins = <0 3 RK_FUNC_GPIO &pcfg_pull_none>; +		}; +		otg_vbus_drv: otg-vbus-drv { +			rockchip,pins = <2 31 RK_FUNC_GPIO &pcfg_pull_none>; +		}; +	};  };  &uart0 { @@ -222,6 +272,14 @@  	status = "okay";  }; +&usb_host { +	status = "okay"; +}; + +&usb_otg { +	status = "okay"; +}; +  &wdt {  	status = "okay";  }; diff --git a/arch/arm/boot/dts/rk3188.dtsi b/arch/arm/boot/dts/rk3188.dtsi index ee801a9c6b74..82732f5249b2 100644 --- a/arch/arm/boot/dts/rk3188.dtsi +++ b/arch/arm/boot/dts/rk3188.dtsi @@ -147,6 +147,27 @@  			bias-disable;  		}; +		emmc { +			emmc_clk: emmc-clk { +				rockchip,pins = <RK_GPIO0 24 RK_FUNC_2 &pcfg_pull_none>; +			}; + +			emmc_cmd: emmc-cmd { +				rockchip,pins = <RK_GPIO0 26 RK_FUNC_2 &pcfg_pull_up>; +			}; + +			emmc_rst: emmc-rst { +				rockchip,pins = <RK_GPIO0 27 RK_FUNC_2 &pcfg_pull_none>; +			}; + +			/* +			 * The data pins are shared between nandc and emmc and +			 * not accessible through pinctrl. Also they should've +			 * been already set correctly by firmware, as +			 * flash/emmc is the boot-device. +			 */ +		}; +  		i2c0 {  			i2c0_xfer: i2c0-xfer {  				rockchip,pins = <RK_GPIO1 24 RK_FUNC_1 &pcfg_pull_none>, @@ -206,6 +227,42 @@  			};  		}; +		spi0 { +			spi0_clk: spi0-clk { +				rockchip,pins = <RK_GPIO1 6 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi0_cs0: spi0-cs0 { +				rockchip,pins = <RK_GPIO1 7 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi0_tx: spi0-tx { +				rockchip,pins = <RK_GPIO1 5 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi0_rx: spi0-rx { +				rockchip,pins = <RK_GPIO1 4 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi0_cs1: spi0-cs1 { +				rockchip,pins = <RK_GPIO1 15 RK_FUNC_1 &pcfg_pull_up>; +			}; +		}; + +		spi1 { +			spi1_clk: spi1-clk { +				rockchip,pins = <RK_GPIO0 30 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi1_cs0: spi1-cs0 { +				rockchip,pins = <RK_GPIO0 31 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi1_rx: spi1-rx { +				rockchip,pins = <RK_GPIO0 28 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi1_tx: spi1-tx { +				rockchip,pins = <RK_GPIO0 29 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi1_cs1: spi1-cs1 { +				rockchip,pins = <RK_GPIO1 14 RK_FUNC_2 &pcfg_pull_up>; +			}; +		}; +  		uart0 {  			uart0_xfer: uart0-xfer {  				rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_up>, @@ -381,6 +438,18 @@  	pinctrl-0 = <&pwm3_out>;  }; +&spi0 { +	compatible = "rockchip,rk3188-spi", "rockchip,rk3066-spi"; +	pinctrl-names = "default"; +	pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0>; +}; + +&spi1 { +	compatible = "rockchip,rk3188-spi", "rockchip,rk3066-spi"; +	pinctrl-names = "default"; +	pinctrl-0 = <&spi1_clk &spi1_tx &spi1_rx &spi1_cs0>; +}; +  &uart0 {  	pinctrl-names = "default";  	pinctrl-0 = <&uart0_xfer>; diff --git a/arch/arm/boot/dts/rk3288-evb-act8846.dts b/arch/arm/boot/dts/rk3288-evb-act8846.dts index 7d59ff4de408..a76dd44adb53 100644 --- a/arch/arm/boot/dts/rk3288-evb-act8846.dts +++ b/arch/arm/boot/dts/rk3288-evb-act8846.dts @@ -26,7 +26,7 @@  		interrupts = <4 IRQ_TYPE_EDGE_FALLING>;  		pinctrl-names = "default"; -		pinctrl-0 = <&hym8563_int>; +		pinctrl-0 = <&pmic_int>;  		#clock-cells = <0>;  		clock-output-names = "xin32k"; @@ -124,11 +124,3 @@  		};  	};  }; - -&pinctrl { -	hym8563 { -		hym8563_int: hym8563-int { -			rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>; -		}; -	}; -}; diff --git a/arch/arm/boot/dts/rk3288-evb-rk808.dts b/arch/arm/boot/dts/rk3288-evb-rk808.dts index 9a88b6c66396..ff522f8e3df4 100644 --- a/arch/arm/boot/dts/rk3288-evb-rk808.dts +++ b/arch/arm/boot/dts/rk3288-evb-rk808.dts @@ -16,3 +16,135 @@  / {  	compatible = "rockchip,rk3288-evb-rk808", "rockchip,rk3288";  }; + +&i2c0 { +	clock-frequency = <400000>; +	status = "okay"; + +	rk808: pmic@1b { +		compatible = "rockchip,rk808"; +		reg = <0x1b>; +		interrupt-parent = <&gpio0>; +		interrupts = <4 IRQ_TYPE_LEVEL_LOW>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pmic_int>; +		rockchip,system-power-controller; +		wakeup-source; +		#clock-cells = <1>; +		clock-output-names = "xin32k", "rk808-clkout2"; + +		vcc8-supply = <&vcc_18>; +		vcc9-supply = <&vcc_io>; +		vcc10-supply = <&vcc_io>; +		vcc12-supply = <&vcc_io>; +		vddio-supply = <&vccio_pmu>; + +		regulators { +			vdd_cpu: DCDC_REG1 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <750000>; +				regulator-max-microvolt = <1300000>; +				regulator-name = "vdd_arm"; +			}; + +			vdd_gpu: DCDC_REG2 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <850000>; +				regulator-max-microvolt = <1250000>; +				regulator-name = "vdd_gpu"; +			}; + +			vcc_ddr: DCDC_REG3 { +				regulator-always-on; +				regulator-boot-on; +				regulator-name = "vcc_ddr"; +			}; + +			vcc_io: DCDC_REG4 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <3300000>; +				regulator-max-microvolt = <3300000>; +				regulator-name = "vcc_io"; +			}; + +			vccio_pmu: LDO_REG1 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <3300000>; +				regulator-max-microvolt = <3300000>; +				regulator-name = "vccio_pmu"; +			}; + +			vcc_tp: LDO_REG2 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <3300000>; +				regulator-max-microvolt = <3300000>; +				regulator-name = "vcc_tp"; +			}; + +			vdd_10: LDO_REG3 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <1000000>; +				regulator-max-microvolt = <1000000>; +				regulator-name = "vdd_10"; +			}; + +			vcc18_lcd: LDO_REG4 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <1800000>; +				regulator-max-microvolt = <1800000>; +				regulator-name = "vcc18_lcd"; +			}; + +			vccio_sd: LDO_REG5 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <1800000>; +				regulator-max-microvolt = <3300000>; +				regulator-name = "vccio_sd"; +			}; + +			vdd10_lcd: LDO_REG6 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <1000000>; +				regulator-max-microvolt = <1000000>; +				regulator-name = "vdd10_lcd"; +			}; + +			vcc_18: LDO_REG7 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <1800000>; +				regulator-max-microvolt = <1800000>; +				regulator-name = "vcc_18"; +			}; + +			vcca_codec: LDO_REG8 { +				regulator-always-on; +				regulator-boot-on; +				regulator-min-microvolt = <3300000>; +				regulator-max-microvolt = <3300000>; +				regulator-name = "vcca_codec"; +			}; + +			vcc_wl: SWITCH_REG1 { +				regulator-always-on; +				regulator-boot-on; +				regulator-name = "vcc_wl"; +			}; + +			vcc_lcd: SWITCH_REG2 { +				regulator-always-on; +				regulator-boot-on; +				regulator-name = "vcc_lcd"; +			}; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/rk3288-evb.dtsi b/arch/arm/boot/dts/rk3288-evb.dtsi index 4f572093c8b4..cb83cea52fa1 100644 --- a/arch/arm/boot/dts/rk3288-evb.dtsi +++ b/arch/arm/boot/dts/rk3288-evb.dtsi @@ -10,6 +10,7 @@   * GNU General Public License for more details.   */ +#include <dt-bindings/pwm/pwm.h>  #include "rk3288.dtsi"  / { @@ -17,6 +18,48 @@  		reg = <0x0 0x80000000>;  	}; +	backlight { +		compatible = "pwm-backlight"; +		brightness-levels = < +			  0   1   2   3   4   5   6   7 +			  8   9  10  11  12  13  14  15 +			 16  17  18  19  20  21  22  23 +			 24  25  26  27  28  29  30  31 +			 32  33  34  35  36  37  38  39 +			 40  41  42  43  44  45  46  47 +			 48  49  50  51  52  53  54  55 +			 56  57  58  59  60  61  62  63 +			 64  65  66  67  68  69  70  71 +			 72  73  74  75  76  77  78  79 +			 80  81  82  83  84  85  86  87 +			 88  89  90  91  92  93  94  95 +			 96  97  98  99 100 101 102 103 +			104 105 106 107 108 109 110 111 +			112 113 114 115 116 117 118 119 +			120 121 122 123 124 125 126 127 +			128 129 130 131 132 133 134 135 +			136 137 138 139 140 141 142 143 +			144 145 146 147 148 149 150 151 +			152 153 154 155 156 157 158 159 +			160 161 162 163 164 165 166 167 +			168 169 170 171 172 173 174 175 +			176 177 178 179 180 181 182 183 +			184 185 186 187 188 189 190 191 +			192 193 194 195 196 197 198 199 +			200 201 202 203 204 205 206 207 +			208 209 210 211 212 213 214 215 +			216 217 218 219 220 221 222 223 +			224 225 226 227 228 229 230 231 +			232 233 234 235 236 237 238 239 +			240 241 242 243 244 245 246 247 +			248 249 250 251 252 253 254 255>; +		default-brightness-level = <128>; +		enable-gpios = <&gpio7 2 GPIO_ACTIVE_HIGH>; +		pinctrl-names = "default"; +		pinctrl-0 = <&bl_en>; +		pwms = <&pwm0 0 1000000 PWM_POLARITY_INVERTED>; +	}; +  	gpio-keys {  		compatible = "gpio-keys";  		#address-cells = <1>; @@ -49,6 +92,30 @@  	};  }; +&emmc { +	broken-cd; +	bus-width = <8>; +	cap-mmc-highspeed; +	disable-wp; +	non-removable; +	num-slots = <1>; +	pinctrl-names = "default"; +	pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>; +	status = "okay"; +}; + +&sdmmc { +	bus-width = <4>; +	cap-mmc-highspeed; +	cap-sd-highspeed; +	card-detect-delay = <200>; +	disable-wp;			/* wp not hooked up */ +	num-slots = <1>; +	pinctrl-names = "default"; +	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>; +	status = "okay"; +}; +  &i2c0 {  	status = "okay";  }; @@ -57,6 +124,10 @@  	status = "okay";  }; +&pwm0 { +	status = "okay"; +}; +  &uart0 {  	status = "okay";  }; @@ -78,12 +149,24 @@  };  &pinctrl { +	backlight { +		bl_en: bl-en { +			rockchip,pins = <7 2 RK_FUNC_GPIO &pcfg_pull_none>; +		}; +	}; +  	buttons {  		pwrbtn: pwrbtn {  			rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;  		};  	}; +	pmic { +		pmic_int: pmic-int { +			rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>; +		}; +	}; +  	usb {  		host_vbus_drv: host-vbus-drv {  			rockchip,pins = <0 14 RK_FUNC_GPIO &pcfg_pull_none>; @@ -94,3 +177,7 @@  &usb_host0_ehci {  	status = "okay";  }; + +&usb_host1 { +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/rk3288.dtsi b/arch/arm/boot/dts/rk3288.dtsi index 5950b0a53224..be276bdfde04 100644 --- a/arch/arm/boot/dts/rk3288.dtsi +++ b/arch/arm/boot/dts/rk3288.dtsi @@ -29,11 +29,18 @@  		i2c3 = &i2c3;  		i2c4 = &i2c4;  		i2c5 = &i2c5; +		mshc0 = &emmc; +		mshc1 = &sdmmc; +		mshc2 = &sdio0; +		mshc3 = &sdio1;  		serial0 = &uart0;  		serial1 = &uart1;  		serial2 = &uart2;  		serial3 = &uart3;  		serial4 = &uart4; +		spi0 = &spi0; +		spi1 = &spi1; +		spi2 = &spi2;  	};  	cpus { @@ -62,6 +69,44 @@  		};  	}; +	amba { +		compatible = "arm,amba-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		dmac_peri: dma-controller@ff250000 { +			compatible = "arm,pl330", "arm,primecell"; +			reg = <0xff250000 0x4000>; +			interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; +			#dma-cells = <1>; +			clocks = <&cru ACLK_DMAC2>; +			clock-names = "apb_pclk"; +		}; + +		dmac_bus_ns: dma-controller@ff600000 { +			compatible = "arm,pl330", "arm,primecell"; +			reg = <0xff600000 0x4000>; +			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>; +			#dma-cells = <1>; +			clocks = <&cru ACLK_DMAC1>; +			clock-names = "apb_pclk"; +			status = "disabled"; +		}; + +		dmac_bus_s: dma-controller@ffb20000 { +			compatible = "arm,pl330", "arm,primecell"; +			reg = <0xffb20000 0x4000>; +			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>; +			#dma-cells = <1>; +			clocks = <&cru ACLK_DMAC1>; +			clock-names = "apb_pclk"; +		}; +	}; +  	xin24m: oscillator {  		compatible = "fixed-clock";  		clock-frequency = <24000000>; @@ -78,6 +123,95 @@  		clock-frequency = <24000000>;  	}; +	sdmmc: dwmmc@ff0c0000 { +		compatible = "rockchip,rk3288-dw-mshc"; +		clocks = <&cru HCLK_SDMMC>, <&cru SCLK_SDMMC>; +		clock-names = "biu", "ciu"; +		fifo-depth = <0x100>; +		interrupts = <GIC_SPI 32 IRQ_TYPE_LEVEL_HIGH>; +		reg = <0xff0c0000 0x4000>; +		status = "disabled"; +	}; + +	sdio0: dwmmc@ff0d0000 { +		compatible = "rockchip,rk3288-dw-mshc"; +		clocks = <&cru HCLK_SDIO0>, <&cru SCLK_SDIO0>; +		clock-names = "biu", "ciu"; +		fifo-depth = <0x100>; +		interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; +		reg = <0xff0d0000 0x4000>; +		status = "disabled"; +	}; + +	sdio1: dwmmc@ff0e0000 { +		compatible = "rockchip,rk3288-dw-mshc"; +		clocks = <&cru HCLK_SDIO1>, <&cru SCLK_SDIO1>; +		clock-names = "biu", "ciu"; +		fifo-depth = <0x100>; +		interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; +		reg = <0xff0e0000 0x4000>; +		status = "disabled"; +	}; + +	emmc: dwmmc@ff0f0000 { +		compatible = "rockchip,rk3288-dw-mshc"; +		clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>; +		clock-names = "biu", "ciu"; +		fifo-depth = <0x100>; +		interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; +		reg = <0xff0f0000 0x4000>; +		status = "disabled"; +	}; + +	saradc: saradc@ff100000 { +		compatible = "rockchip,saradc"; +		reg = <0xff100000 0x100>; +		interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; +		#io-channel-cells = <1>; +		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>; +		clock-names = "saradc", "apb_pclk"; +		status = "disabled"; +	}; + +	spi0: spi@ff110000 { +		compatible = "rockchip,rk3288-spi", "rockchip,rk3066-spi"; +		clocks = <&cru SCLK_SPI0>, <&cru PCLK_SPI0>; +		clock-names = "spiclk", "apb_pclk"; +		interrupts = <GIC_SPI 44 IRQ_TYPE_LEVEL_HIGH>; +		pinctrl-names = "default"; +		pinctrl-0 = <&spi0_clk &spi0_tx &spi0_rx &spi0_cs0>; +		reg = <0xff110000 0x1000>; +		#address-cells = <1>; +		#size-cells = <0>; +		status = "disabled"; +	}; + +	spi1: spi@ff120000 { +		compatible = "rockchip,rk3288-spi", "rockchip,rk3066-spi"; +		clocks = <&cru SCLK_SPI1>, <&cru PCLK_SPI1>; +		clock-names = "spiclk", "apb_pclk"; +		interrupts = <GIC_SPI 45 IRQ_TYPE_LEVEL_HIGH>; +		pinctrl-names = "default"; +		pinctrl-0 = <&spi1_clk &spi1_tx &spi1_rx &spi1_cs0>; +		reg = <0xff120000 0x1000>; +		#address-cells = <1>; +		#size-cells = <0>; +		status = "disabled"; +	}; + +	spi2: spi@ff130000 { +		compatible = "rockchip,rk3288-spi", "rockchip,rk3066-spi"; +		clocks = <&cru SCLK_SPI2>, <&cru PCLK_SPI2>; +		clock-names = "spiclk", "apb_pclk"; +		interrupts = <GIC_SPI 46 IRQ_TYPE_LEVEL_HIGH>; +		pinctrl-names = "default"; +		pinctrl-0 = <&spi2_clk &spi2_tx &spi2_rx &spi2_cs0>; +		reg = <0xff130000 0x1000>; +		#address-cells = <1>; +		#size-cells = <0>; +		status = "disabled"; +	}; +  	i2c1: i2c@ff140000 {  		compatible = "rockchip,rk3288-i2c";  		reg = <0xff140000 0x1000>; @@ -206,6 +340,26 @@  	/* NOTE: ohci@ff520000 doesn't actually work on hardware */ +	usb_host1: usb@ff540000 { +		compatible = "rockchip,rk3288-usb", "rockchip,rk3066-usb", +				"snps,dwc2"; +		reg = <0xff540000 0x40000>; +		interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&cru HCLK_USBHOST1>; +		clock-names = "otg"; +		status = "disabled"; +	}; + +	usb_otg: usb@ff580000 { +		compatible = "rockchip,rk3288-usb", "rockchip,rk3066-usb", +				"snps,dwc2"; +		reg = <0xff580000 0x40000>; +		interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&cru HCLK_OTG0>; +		clock-names = "otg"; +		status = "disabled"; +	}; +  	usb_hsic: usb@ff5c0000 {  		compatible = "generic-ehci";  		reg = <0xff5c0000 0x100>; @@ -241,6 +395,50 @@  		status = "disabled";  	}; +	pwm0: pwm@ff680000 { +		compatible = "rockchip,rk3288-pwm"; +		reg = <0xff680000 0x10>; +		#pwm-cells = <3>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pwm0_pin>; +		clocks = <&cru PCLK_PWM>; +		clock-names = "pwm"; +		status = "disabled"; +	}; + +	pwm1: pwm@ff680010 { +		compatible = "rockchip,rk3288-pwm"; +		reg = <0xff680010 0x10>; +		#pwm-cells = <3>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pwm1_pin>; +		clocks = <&cru PCLK_PWM>; +		clock-names = "pwm"; +		status = "disabled"; +	}; + +	pwm2: pwm@ff680020 { +		compatible = "rockchip,rk3288-pwm"; +		reg = <0xff680020 0x10>; +		#pwm-cells = <3>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pwm2_pin>; +		clocks = <&cru PCLK_PWM>; +		clock-names = "pwm"; +		status = "disabled"; +	}; + +	pwm3: pwm@ff680030 { +		compatible = "rockchip,rk3288-pwm"; +		reg = <0xff680030 0x10>; +		#pwm-cells = <2>; +		pinctrl-names = "default"; +		pinctrl-0 = <&pwm3_pin>; +		clocks = <&cru PCLK_PWM>; +		clock-names = "pwm"; +		status = "disabled"; +	}; +  	pmu: power-management@ff730000 {  		compatible = "rockchip,rk3288-pmu", "syscon";  		reg = <0xff730000 0x100>; @@ -488,6 +686,88 @@  			};  		}; +		sdio0 { +			sdio0_bus1: sdio0-bus1 { +				rockchip,pins = <4 20 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_bus4: sdio0-bus4 { +				rockchip,pins = <4 20 RK_FUNC_1 &pcfg_pull_up>, +						<4 21 RK_FUNC_1 &pcfg_pull_up>, +						<4 22 RK_FUNC_1 &pcfg_pull_up>, +						<4 23 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_cmd: sdio0-cmd { +				rockchip,pins = <4 24 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_clk: sdio0-clk { +				rockchip,pins = <4 25 RK_FUNC_1 &pcfg_pull_none>; +			}; + +			sdio0_cd: sdio0-cd { +				rockchip,pins = <4 26 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_wp: sdio0-wp { +				rockchip,pins = <4 27 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_pwr: sdio0-pwr { +				rockchip,pins = <4 28 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_bkpwr: sdio0-bkpwr { +				rockchip,pins = <4 29 RK_FUNC_1 &pcfg_pull_up>; +			}; + +			sdio0_int: sdio0-int { +				rockchip,pins = <4 30 RK_FUNC_1 &pcfg_pull_up>; +			}; +		}; + +		sdio1 { +			sdio1_bus1: sdio1-bus1 { +				rockchip,pins = <3 24 4 &pcfg_pull_up>; +			}; + +			sdio1_bus4: sdio1-bus4 { +				rockchip,pins = <3 24 4 &pcfg_pull_up>, +						<3 25 4 &pcfg_pull_up>, +						<3 26 4 &pcfg_pull_up>, +						<3 27 4 &pcfg_pull_up>; +			}; + +			sdio1_cd: sdio1-cd { +				rockchip,pins = <3 28 4 &pcfg_pull_up>; +			}; + +			sdio1_wp: sdio1-wp { +				rockchip,pins = <3 29 4 &pcfg_pull_up>; +			}; + +			sdio1_bkpwr: sdio1-bkpwr { +				rockchip,pins = <3 30 4 &pcfg_pull_up>; +			}; + +			sdio1_int: sdio1-int { +				rockchip,pins = <3 31 4 &pcfg_pull_up>; +			}; + +			sdio1_cmd: sdio1-cmd { +				rockchip,pins = <4 6 4 &pcfg_pull_up>; +			}; + +			sdio1_clk: sdio1-clk { +				rockchip,pins = <4 7 4 &pcfg_pull_none>; +			}; + +			sdio1_pwr: sdio1-pwr { +				rockchip,pins = <4 9 4 &pcfg_pull_up>; +			}; +		}; +  		emmc {  			emmc_clk: emmc-clk {  				rockchip,pins = <3 18 RK_FUNC_2 &pcfg_pull_none>; @@ -524,6 +804,56 @@  			};  		}; +		spi0 { +			spi0_clk: spi0-clk { +				rockchip,pins = <5 12 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi0_cs0: spi0-cs0 { +				rockchip,pins = <5 13 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi0_tx: spi0-tx { +				rockchip,pins = <5 14 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi0_rx: spi0-rx { +				rockchip,pins = <5 15 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi0_cs1: spi0-cs1 { +				rockchip,pins = <5 16 RK_FUNC_1 &pcfg_pull_up>; +			}; +		}; +		spi1 { +			spi1_clk: spi1-clk { +				rockchip,pins = <7 12 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi1_cs0: spi1-cs0 { +				rockchip,pins = <7 13 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi1_rx: spi1-rx { +				rockchip,pins = <7 14 RK_FUNC_2 &pcfg_pull_up>; +			}; +			spi1_tx: spi1-tx { +				rockchip,pins = <7 15 RK_FUNC_2 &pcfg_pull_up>; +			}; +		}; + +		spi2 { +			spi2_cs1: spi2-cs1 { +				rockchip,pins = <8 3 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi2_clk: spi2-clk { +				rockchip,pins = <8 6 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi2_cs0: spi2-cs0 { +				rockchip,pins = <8 7 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi2_rx: spi2-rx { +				rockchip,pins = <8 8 RK_FUNC_1 &pcfg_pull_up>; +			}; +			spi2_tx: spi2-tx { +				rockchip,pins = <8 9 RK_FUNC_1 &pcfg_pull_up>; +			}; +		}; +  		uart0 {  			uart0_xfer: uart0-xfer {  				rockchip,pins = <4 16 RK_FUNC_1 &pcfg_pull_up>, @@ -591,5 +921,29 @@  				rockchip,pins = <5 15 3 &pcfg_pull_none>;  			};  		}; + +		pwm0 { +			pwm0_pin: pwm0-pin { +				rockchip,pins = <7 0 RK_FUNC_1 &pcfg_pull_none>; +			}; +		}; + +		pwm1 { +			pwm1_pin: pwm1-pin { +				rockchip,pins = <7 1 RK_FUNC_1 &pcfg_pull_none>; +			}; +		}; + +		pwm2 { +			pwm2_pin: pwm2-pin { +				rockchip,pins = <7 22 3 &pcfg_pull_none>; +			}; +		}; + +		pwm3 { +			pwm3_pin: pwm3-pin { +				rockchip,pins = <7 23 3 &pcfg_pull_none>; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/rk3xxx.dtsi b/arch/arm/boot/dts/rk3xxx.dtsi index 8caf85d83901..7332d12eb565 100644 --- a/arch/arm/boot/dts/rk3xxx.dtsi +++ b/arch/arm/boot/dts/rk3xxx.dtsi @@ -26,6 +26,49 @@  		i2c2 = &i2c2;  		i2c3 = &i2c3;  		i2c4 = &i2c4; +		mshc0 = &emmc; +		mshc1 = &mmc0; +		mshc2 = &mmc1; +		spi0 = &spi0; +		spi1 = &spi1; +	}; + +	amba { +		compatible = "arm,amba-bus"; +		#address-cells = <1>; +		#size-cells = <1>; +		ranges; + +		dmac1_s: dma-controller@20018000 { +			compatible = "arm,pl330", "arm,primecell"; +			reg = <0x20018000 0x4000>; +			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>; +			#dma-cells = <1>; +			clocks = <&cru ACLK_DMA1>; +			clock-names = "apb_pclk"; +		}; + +		dmac1_ns: dma-controller@2001c000 { +			compatible = "arm,pl330", "arm,primecell"; +			reg = <0x2001c000 0x4000>; +			interrupts = <GIC_SPI 0 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 1 IRQ_TYPE_LEVEL_HIGH>; +			#dma-cells = <1>; +			clocks = <&cru ACLK_DMA1>; +			clock-names = "apb_pclk"; +			status = "disabled"; +		}; + +		dmac2: dma-controller@20078000 { +			compatible = "arm,pl330", "arm,primecell"; +			reg = <0x20078000 0x4000>; +			interrupts = <GIC_SPI 2 IRQ_TYPE_LEVEL_HIGH>, +				     <GIC_SPI 3 IRQ_TYPE_LEVEL_HIGH>; +			#dma-cells = <1>; +			clocks = <&cru ACLK_DMA2>; +			clock-names = "apb_pclk"; +		};  	};  	xin24m: oscillator { @@ -91,12 +134,28 @@  		status = "disabled";  	}; +	usb_otg: usb@10180000 { +		compatible = "rockchip,rk3066-usb", "snps,dwc2"; +		reg = <0x10180000 0x40000>; +		interrupts = <GIC_SPI 16 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&cru HCLK_OTG0>; +		clock-names = "otg"; +		status = "disabled"; +	}; + +	usb_host: usb@101c0000 { +		compatible = "snps,dwc2"; +		reg = <0x101c0000 0x40000>; +		interrupts = <GIC_SPI 17 IRQ_TYPE_LEVEL_HIGH>; +		clocks = <&cru HCLK_OTG1>; +		clock-names = "otg"; +		status = "disabled"; +	}; +  	mmc0: dwmmc@10214000 {  		compatible = "rockchip,rk2928-dw-mshc";  		reg = <0x10214000 0x1000>;  		interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; -		#address-cells = <1>; -		#size-cells = <0>;  		clocks = <&cru HCLK_SDMMC>, <&cru SCLK_SDMMC>;  		clock-names = "biu", "ciu"; @@ -108,8 +167,6 @@  		compatible = "rockchip,rk2928-dw-mshc";  		reg = <0x10218000 0x1000>;  		interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; -		#address-cells = <1>; -		#size-cells = <0>;  		clocks = <&cru HCLK_SDIO>, <&cru SCLK_SDIO>;  		clock-names = "biu", "ciu"; @@ -117,6 +174,17 @@  		status = "disabled";  	}; +	emmc: dwmmc@1021c000 { +		compatible = "rockchip,rk2928-dw-mshc"; +		reg = <0x1021c000 0x1000>; +		interrupts = <GIC_SPI 25 IRQ_TYPE_LEVEL_HIGH>; + +		clocks = <&cru HCLK_EMMC>, <&cru SCLK_EMMC>; +		clock-names = "biu", "ciu"; + +		status = "disabled"; +	}; +  	pmu: pmu@20004000 {  		compatible = "rockchip,rk3066-pmu", "syscon";  		reg = <0x20004000 0x100>; @@ -135,7 +203,6 @@  		#size-cells = <0>;  		rockchip,grf = <&grf>; -		rockchip,bus-index = <0>;  		clock-names = "i2c";  		clocks = <&cru PCLK_I2C0>; @@ -264,4 +331,36 @@  		clocks = <&cru SCLK_UART3>, <&cru PCLK_UART3>;  		status = "disabled";  	}; + +	saradc: saradc@2006c000 { +		compatible = "rockchip,saradc"; +		reg = <0x2006c000 0x100>; +		interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH>; +		#io-channel-cells = <1>; +		clocks = <&cru SCLK_SARADC>, <&cru PCLK_SARADC>; +		clock-names = "saradc", "apb_pclk"; +		status = "disabled"; +	}; + +	spi0: spi@20070000 { +		compatible = "rockchip,rk3066-spi"; +		clocks = <&cru SCLK_SPI0>, <&cru PCLK_SPI0>; +		clock-names = "spiclk", "apb_pclk"; +		interrupts = <GIC_SPI 38 IRQ_TYPE_LEVEL_HIGH>; +		reg = <0x20070000 0x1000>; +		#address-cells = <1>; +		#size-cells = <0>; +		status = "disabled"; +	}; + +	spi1: spi@20074000 { +		compatible = "rockchip,rk3066-spi"; +		clocks = <&cru SCLK_SPI1>, <&cru PCLK_SPI1>; +		clock-names = "spiclk", "apb_pclk"; +		interrupts = <GIC_SPI 39 IRQ_TYPE_LEVEL_HIGH>; +		reg = <0x20074000 0x1000>; +		#address-cells = <1>; +		#size-cells = <0>; +		status = "disabled"; +	};  }; diff --git a/arch/arm/boot/dts/sama5d3.dtsi b/arch/arm/boot/dts/sama5d3.dtsi index 45013b867c8d..5f4144d1e3a1 100644 --- a/arch/arm/boot/dts/sama5d3.dtsi +++ b/arch/arm/boot/dts/sama5d3.dtsi @@ -177,6 +177,9 @@  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf001c000 0x100>;  				interrupts = <12 IRQ_TYPE_LEVEL_HIGH 5>; +				dmas = <&dma0 2 AT91_DMA_CFG_PER_ID(3)>, +				       <&dma0 2 (AT91_DMA_CFG_PER_ID(4) | AT91_DMA_CFG_FIFOCFG_ASAP)>; +				dma-names = "tx", "rx";  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_usart0>;  				clocks = <&usart0_clk>; @@ -188,6 +191,9 @@  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf0020000 0x100>;  				interrupts = <13 IRQ_TYPE_LEVEL_HIGH 5>; +				dmas = <&dma0 2 AT91_DMA_CFG_PER_ID(5)>, +				       <&dma0 2 (AT91_DMA_CFG_PER_ID(6) | AT91_DMA_CFG_FIFOCFG_ASAP)>; +				dma-names = "tx", "rx";  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_usart1>;  				clocks = <&usart1_clk>; @@ -333,6 +339,9 @@  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8020000 0x100>;  				interrupts = <14 IRQ_TYPE_LEVEL_HIGH 5>; +				dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(7)>, +				       <&dma1 2 (AT91_DMA_CFG_PER_ID(8) | AT91_DMA_CFG_FIFOCFG_ASAP)>; +				dma-names = "tx", "rx";  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_usart2>;  				clocks = <&usart2_clk>; @@ -344,6 +353,9 @@  				compatible = "atmel,at91sam9260-usart";  				reg = <0xf8024000 0x100>;  				interrupts = <15 IRQ_TYPE_LEVEL_HIGH 5>; +				dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(9)>, +				       <&dma1 2 (AT91_DMA_CFG_PER_ID(10) | AT91_DMA_CFG_FIFOCFG_ASAP)>; +				dma-names = "tx", "rx";  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_usart3>;  				clocks = <&usart3_clk>; @@ -402,14 +414,19 @@  			};  			ramc0: ramc@ffffea00 { -				compatible = "atmel,at91sam9g45-ddramc"; +				compatible = "atmel,sama5d3-ddramc";  				reg = <0xffffea00 0x200>; +				clocks = <&ddrck>, <&mpddr_clk>; +				clock-names = "ddrck", "mpddr";  			};  			dbgu: serial@ffffee00 {  				compatible = "atmel,at91sam9260-usart";  				reg = <0xffffee00 0x200>;  				interrupts = <2 IRQ_TYPE_LEVEL_HIGH 7>; +				dmas = <&dma1 2 AT91_DMA_CFG_PER_ID(13)>, +				       <&dma1 2 (AT91_DMA_CFG_PER_ID(14) | AT91_DMA_CFG_FIFOCFG_ASAP)>; +				dma-names = "tx", "rx";  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_dbgu>;  				clocks = <&dbgu_clk>; @@ -428,7 +445,7 @@  			pinctrl@fffff200 {  				#address-cells = <1>;  				#size-cells = <1>; -				compatible = "atmel,at91sam9x5-pinctrl", "atmel,at91rm9200-pinctrl", "simple-bus"; +				compatible = "atmel,sama5d3-pinctrl", "atmel,at91sam9x5-pinctrl", "simple-bus";  				ranges = <0xfffff200 0xfffff200 0xa00>;  				atmel,mux-mask = <  					/*   A          B          C  */ @@ -1003,6 +1020,11 @@  						reg = <2>;  					}; +					hsmc_clk: hsmc_clk { +						#clock-cells = <0>; +						reg = <5>; +					}; +  					pioA_clk: pioA_clk {  						#clock-cells = <0>;  						reg = <6>; @@ -1170,6 +1192,11 @@  						#clock-cells = <0>;  						reg = <48>;  					}; + +					mpddr_clk: mpddr_clk { +						#clock-cells = <0>; +						reg = <49>; +					};  				};  			}; @@ -1178,6 +1205,11 @@  				reg = <0xfffffe00 0x10>;  			}; +			shutdown-controller@fffffe10 { +				compatible = "atmel,at91sam9x5-shdwc"; +				reg = <0xfffffe10 0x10>; +			}; +  			pit: timer@fffffe30 {  				compatible = "atmel,at91sam9260-pit";  				reg = <0xfffffe30 0xf>; @@ -1393,6 +1425,7 @@  					0xffffc000 0x00000070	/* NFC HSMC regs */  					0x00200000 0x00100000	/* NFC SRAM banks */  					>; +				clocks = <&hsmc_clk>;  			};  		};  	}; diff --git a/arch/arm/boot/dts/sama5d3_can.dtsi b/arch/arm/boot/dts/sama5d3_can.dtsi index a0775851cce5..eaf41451ad0c 100644 --- a/arch/arm/boot/dts/sama5d3_can.dtsi +++ b/arch/arm/boot/dts/sama5d3_can.dtsi @@ -40,7 +40,7 @@  						atmel,clk-output-range = <0 66000000>;  					}; -					can1_clk: can0_clk { +					can1_clk: can1_clk {  						#clock-cells = <0>;  						reg = <41>;  						atmel,clk-output-range = <0 66000000>; diff --git a/arch/arm/boot/dts/sama5d3xcm.dtsi b/arch/arm/boot/dts/sama5d3xcm.dtsi index f7d8583eef82..962dc28dc37b 100644 --- a/arch/arm/boot/dts/sama5d3xcm.dtsi +++ b/arch/arm/boot/dts/sama5d3xcm.dtsi @@ -36,6 +36,36 @@  			macb0: ethernet@f0028000 {  				phy-mode = "rgmii"; +				#address-cells = <1>; +				#size-cells = <0>; + +				ethernet-phy@1 { +					reg = <0x1>; +					interrupt-parent = <&pioB>; +					interrupts = <25 IRQ_TYPE_EDGE_FALLING>; +					txen-skew-ps = <800>; +					txc-skew-ps = <3000>; +					rxdv-skew-ps = <400>; +					rxc-skew-ps = <3000>; +					rxd0-skew-ps = <400>; +					rxd1-skew-ps = <400>; +					rxd2-skew-ps = <400>; +					rxd3-skew-ps = <400>; +				}; + +				ethernet-phy@7 { +					reg = <0x7>; +					interrupt-parent = <&pioB>; +					interrupts = <25 IRQ_TYPE_EDGE_FALLING>; +					txen-skew-ps = <800>; +					txc-skew-ps = <3000>; +					rxdv-skew-ps = <400>; +					rxc-skew-ps = <3000>; +					rxd0-skew-ps = <400>; +					rxd1-skew-ps = <400>; +					rxd2-skew-ps = <400>; +					rxd3-skew-ps = <400>; +				};  			};  			pmc: pmc@fffffc00 { diff --git a/arch/arm/boot/dts/sama5d3xmb.dtsi b/arch/arm/boot/dts/sama5d3xmb.dtsi index b8c6f20e780c..49c10d33df30 100644 --- a/arch/arm/boot/dts/sama5d3xmb.dtsi +++ b/arch/arm/boot/dts/sama5d3xmb.dtsi @@ -25,6 +25,8 @@  			};  			spi0: spi@f0004000 { +				dmas = <0>, <0>;	/*  Do not use DMA for spi0 */ +  				m25p80@0 {  					compatible = "atmel,at25df321a";  					spi-max-frequency = <50000000>; @@ -51,6 +53,7 @@  			};  			usart1: serial@f0020000 { +				dmas = <0>, <0>;	/*  Do not use DMA for usart1 */  				pinctrl-names = "default";  				pinctrl-0 = <&pinctrl_usart1 &pinctrl_usart1_rts_cts>;  				status = "okay"; @@ -132,6 +135,7 @@  			};  			dbgu: serial@ffffee00 { +				dmas = <0>, <0>;	/*  Do not use DMA for dbgu */  				status = "okay";  			}; diff --git a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts index 18662aec2ec4..477f8153debd 100644 --- a/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts +++ b/arch/arm/boot/dts/sh73a0-kzm9g-reference.dts @@ -66,7 +66,7 @@  	};  	vmmc_sdhi0: regulator@2 { -	        compatible = "regulator-fixed"; +		compatible = "regulator-fixed";  		regulator-name = "SDHI0 Vcc";  		regulator-min-microvolt = <3300000>;  		regulator-max-microvolt = <3300000>; @@ -75,7 +75,7 @@  	};  	vmmc_sdhi2: regulator@3 { -	        compatible = "regulator-fixed"; +		compatible = "regulator-fixed";  		regulator-name = "SDHI2 Vcc";  		regulator-min-microvolt = <3300000>;  		regulator-max-microvolt = <3300000>; diff --git a/arch/arm/boot/dts/sh73a0.dtsi b/arch/arm/boot/dts/sh73a0.dtsi index 910b79079d5a..c95935563e44 100644 --- a/arch/arm/boot/dts/sh73a0.dtsi +++ b/arch/arm/boot/dts/sh73a0.dtsi @@ -14,6 +14,7 @@  / {  	compatible = "renesas,sh73a0"; +	interrupt-parent = <&gic>;  	cpus {  		#address-cells = <1>; @@ -54,7 +55,6 @@  			<0xe6900020 1>,  			<0xe6900040 1>,  			<0xe6900060 1>; -		interrupt-parent = <&gic>;  		interrupts = <0 1 IRQ_TYPE_LEVEL_HIGH  			      0 2 IRQ_TYPE_LEVEL_HIGH  			      0 3 IRQ_TYPE_LEVEL_HIGH @@ -74,7 +74,6 @@  			<0xe6900024 1>,  			<0xe6900044 1>,  			<0xe6900064 1>; -		interrupt-parent = <&gic>;  		interrupts = <0 9 IRQ_TYPE_LEVEL_HIGH  			      0 10 IRQ_TYPE_LEVEL_HIGH  			      0 11 IRQ_TYPE_LEVEL_HIGH @@ -95,7 +94,6 @@  			<0xe6900028 1>,  			<0xe6900048 1>,  			<0xe6900068 1>; -		interrupt-parent = <&gic>;  		interrupts = <0 17 IRQ_TYPE_LEVEL_HIGH  			      0 18 IRQ_TYPE_LEVEL_HIGH  			      0 19 IRQ_TYPE_LEVEL_HIGH @@ -115,7 +113,6 @@  			<0xe690002c 1>,  			<0xe690004c 1>,  			<0xe690006c 1>; -		interrupt-parent = <&gic>;  		interrupts = <0 25 IRQ_TYPE_LEVEL_HIGH  			      0 26 IRQ_TYPE_LEVEL_HIGH  			      0 27 IRQ_TYPE_LEVEL_HIGH @@ -131,7 +128,6 @@  		#size-cells = <0>;  		compatible = "renesas,rmobile-iic";  		reg = <0xe6820000 0x425>; -		interrupt-parent = <&gic>;  		interrupts = <0 167 IRQ_TYPE_LEVEL_HIGH  			      0 168 IRQ_TYPE_LEVEL_HIGH  			      0 169 IRQ_TYPE_LEVEL_HIGH @@ -144,7 +140,6 @@  		#size-cells = <0>;  		compatible = "renesas,rmobile-iic";  		reg = <0xe6822000 0x425>; -		interrupt-parent = <&gic>;  		interrupts = <0 51 IRQ_TYPE_LEVEL_HIGH  			      0 52 IRQ_TYPE_LEVEL_HIGH  			      0 53 IRQ_TYPE_LEVEL_HIGH @@ -157,7 +152,6 @@  		#size-cells = <0>;  		compatible = "renesas,rmobile-iic";  		reg = <0xe6824000 0x425>; -		interrupt-parent = <&gic>;  		interrupts = <0 171 IRQ_TYPE_LEVEL_HIGH  			      0 172 IRQ_TYPE_LEVEL_HIGH  			      0 173 IRQ_TYPE_LEVEL_HIGH @@ -170,7 +164,6 @@  		#size-cells = <0>;  		compatible = "renesas,rmobile-iic";  		reg = <0xe6826000 0x425>; -		interrupt-parent = <&gic>;  		interrupts = <0 183 IRQ_TYPE_LEVEL_HIGH  			      0 184 IRQ_TYPE_LEVEL_HIGH  			      0 185 IRQ_TYPE_LEVEL_HIGH @@ -183,7 +176,6 @@  		#size-cells = <0>;  		compatible = "renesas,rmobile-iic";  		reg = <0xe6828000 0x425>; -		interrupt-parent = <&gic>;  		interrupts = <0 187 IRQ_TYPE_LEVEL_HIGH  			      0 188 IRQ_TYPE_LEVEL_HIGH  			      0 189 IRQ_TYPE_LEVEL_HIGH @@ -194,7 +186,6 @@  	mmcif: mmc@e6bd0000 {  		compatible = "renesas,sh-mmcif";  		reg = <0xe6bd0000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 140 IRQ_TYPE_LEVEL_HIGH  			      0 141 IRQ_TYPE_LEVEL_HIGH>;  		reg-io-width = <4>; @@ -204,7 +195,6 @@  	sdhi0: sd@ee100000 {  		compatible = "renesas,sdhi-sh73a0";  		reg = <0xee100000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 83 IRQ_TYPE_LEVEL_HIGH  			      0 84 IRQ_TYPE_LEVEL_HIGH  			      0 85 IRQ_TYPE_LEVEL_HIGH>; @@ -216,7 +206,6 @@  	sdhi1: sd@ee120000 {  		compatible = "renesas,sdhi-sh73a0";  		reg = <0xee120000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 88 IRQ_TYPE_LEVEL_HIGH  			      0 89 IRQ_TYPE_LEVEL_HIGH>;  		toshiba,mmc-wrprotect-disable; @@ -227,7 +216,6 @@  	sdhi2: sd@ee140000 {  		compatible = "renesas,sdhi-sh73a0";  		reg = <0xee140000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 104 IRQ_TYPE_LEVEL_HIGH  			      0 105 IRQ_TYPE_LEVEL_HIGH>;  		toshiba,mmc-wrprotect-disable; @@ -238,7 +226,6 @@  	scifa0: serial@e6c40000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6c40000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 72 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -246,7 +233,6 @@  	scifa1: serial@e6c50000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6c50000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 73 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -254,7 +240,6 @@  	scifa2: serial@e6c60000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6c60000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 74 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -262,7 +247,6 @@  	scifa3: serial@e6c70000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6c70000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 75 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -270,7 +254,6 @@  	scifa4: serial@e6c80000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6c80000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 78 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -278,7 +261,6 @@  	scifa5: serial@e6cb0000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6cb0000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 79 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -286,7 +268,6 @@  	scifa6: serial@e6cc0000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6cc0000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 156 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -294,7 +275,6 @@  	scifa7: serial@e6cd0000 {  		compatible = "renesas,scifa-sh73a0", "renesas,scifa";  		reg = <0xe6cd0000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 143 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -302,7 +282,6 @@  	scifb8: serial@e6c30000 {  		compatible = "renesas,scifb-sh73a0", "renesas,scifb";  		reg = <0xe6c30000 0x100>; -		interrupt-parent = <&gic>;  		interrupts = <0 80 IRQ_TYPE_LEVEL_HIGH>;  		status = "disabled";  	}; @@ -328,7 +307,6 @@  		#sound-dai-cells = <1>;  		compatible = "renesas,sh_fsi2";  		reg = <0xec230000 0x400>; -		interrupt-parent = <&gic>;  		interrupts = <0 146 0x4>;  		status = "disabled";  	}; diff --git a/arch/arm/boot/dts/socfpga.dtsi b/arch/arm/boot/dts/socfpga.dtsi index 4d77ad690ed5..45fce2cf6fed 100644 --- a/arch/arm/boot/dts/socfpga.dtsi +++ b/arch/arm/boot/dts/socfpga.dtsi @@ -607,6 +607,17 @@  			};  		}; +		sdr: sdr@ffc25000 { +			compatible = "syscon"; +			reg = <0xffc25000 0x1000>; +		}; + +		sdramedac { +			compatible = "altr,sdram-edac"; +			altr,sdr-syscon = <&sdr>; +			interrupts = <0 39 4>; +		}; +  		L2: l2-cache@fffef000 {  			compatible = "arm,pl310-cache";  			reg = <0xfffef000 0x1000>; diff --git a/arch/arm/boot/dts/socfpga_arria5.dtsi b/arch/arm/boot/dts/socfpga_arria5.dtsi index 12d1c2ccaf5b..03e8268ae219 100644 --- a/arch/arm/boot/dts/socfpga_arria5.dtsi +++ b/arch/arm/boot/dts/socfpga_arria5.dtsi @@ -15,6 +15,8 @@   */  /dts-v1/; +/* First 4KB has trampoline code for secondary cores. */ +/memreserve/ 0x00000000 0x0001000;  #include "socfpga.dtsi"  / { @@ -29,13 +31,10 @@  		dwmmc0@ff704000 {  			num-slots = <1>; -			supports-highspeed;  			broken-cd; - -			slot@0 { -				reg = <0>; -				bus-width = <4>; -			}; +			bus-width = <4>; +			cap-mmc-highspeed; +			cap-sd-highspeed;  		};  		sysmgr@ffd08000 { diff --git a/arch/arm/boot/dts/socfpga_arria5_socdk.dts b/arch/arm/boot/dts/socfpga_arria5_socdk.dts index d532d171e391..27d551c384d0 100644 --- a/arch/arm/boot/dts/socfpga_arria5_socdk.dts +++ b/arch/arm/boot/dts/socfpga_arria5_socdk.dts @@ -37,13 +37,6 @@  		*/  		ethernet0 = &gmac1;  	}; - -	aliases { -		/* this allow the ethaddr uboot environmnet variable contents -		 * to be added to the gmac1 device tree blob. -		 */ -		ethernet0 = &gmac1; -	};  };  &gmac1 { diff --git a/arch/arm/boot/dts/socfpga_cyclone5.dtsi b/arch/arm/boot/dts/socfpga_cyclone5.dtsi index bf511828729f..28c05e7a31c9 100644 --- a/arch/arm/boot/dts/socfpga_cyclone5.dtsi +++ b/arch/arm/boot/dts/socfpga_cyclone5.dtsi @@ -16,6 +16,8 @@   */  /dts-v1/; +/* First 4KB has trampoline code for secondary cores. */ +/memreserve/ 0x00000000 0x0001000;  #include "socfpga.dtsi"  / { @@ -28,15 +30,12 @@  			};  		}; -		dwmmc0@ff704000 { +		mmc0: dwmmc0@ff704000 {  			num-slots = <1>; -			supports-highspeed;  			broken-cd; - -			slot@0 { -				reg = <0>; -				bus-width = <4>; -			}; +			bus-width = <4>; +			cap-mmc-highspeed; +			cap-sd-highspeed;  		};  		ethernet@ff702000 { diff --git a/arch/arm/boot/dts/socfpga_cyclone5_socdk.dts b/arch/arm/boot/dts/socfpga_cyclone5_socdk.dts index 45de1514af0a..d7296a5f750c 100644 --- a/arch/arm/boot/dts/socfpga_cyclone5_socdk.dts +++ b/arch/arm/boot/dts/socfpga_cyclone5_socdk.dts @@ -68,6 +68,10 @@  	};  }; +&mmc0 { +	cd-gpios = <&gpio1 18 0>; +}; +  &usb1 {  	status = "okay";  }; diff --git a/arch/arm/boot/dts/socfpga_vt.dts b/arch/arm/boot/dts/socfpga_vt.dts index 09792b411110..f9345e02ca49 100644 --- a/arch/arm/boot/dts/socfpga_vt.dts +++ b/arch/arm/boot/dts/socfpga_vt.dts @@ -43,13 +43,10 @@  		dwmmc0@ff704000 {  			num-slots = <1>; -			supports-highspeed;  			broken-cd; - -			slot@0 { -				reg = <0>; -				bus-width = <4>; -			}; +			bus-width = <4>; +			cap-mmc-highspeed; +			cap-sd-highspeed;  		};  		ethernet@ff700000 { diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi index 459cb6377764..380f914b226d 100644 --- a/arch/arm/boot/dts/sun4i-a10.dtsi +++ b/arch/arm/boot/dts/sun4i-a10.dtsi @@ -339,12 +339,22 @@  		#size-cells = <1>;  		ranges; +		dma: dma-controller@01c02000 { +			compatible = "allwinner,sun4i-a10-dma"; +			reg = <0x01c02000 0x1000>; +			interrupts = <27>; +			clocks = <&ahb_gates 6>; +			#dma-cells = <2>; +		}; +  		spi0: spi@01c05000 {  			compatible = "allwinner,sun4i-a10-spi";  			reg = <0x01c05000 0x1000>;  			interrupts = <10>;  			clocks = <&ahb_gates 20>, <&spi0_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 27>, <&dma 1 26>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -356,6 +366,8 @@  			interrupts = <11>;  			clocks = <&ahb_gates 21>, <&spi1_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 9>, <&dma 1 8>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -451,6 +463,8 @@  			interrupts = <12>;  			clocks = <&ahb_gates 22>, <&spi2_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 29>, <&dma 1 28>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -490,6 +504,8 @@  			interrupts = <50>;  			clocks = <&ahb_gates 23>, <&spi3_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 31>, <&dma 1 30>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -749,7 +765,6 @@  			reg = <0x01c2ac00 0x400>;  			interrupts = <7>;  			clocks = <&apb1_gates 0>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -760,7 +775,6 @@  			reg = <0x01c2b000 0x400>;  			interrupts = <8>;  			clocks = <&apb1_gates 1>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -771,7 +785,6 @@  			reg = <0x01c2b400 0x400>;  			interrupts = <9>;  			clocks = <&apb1_gates 2>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; diff --git a/arch/arm/boot/dts/sun5i-a10s.dtsi b/arch/arm/boot/dts/sun5i-a10s.dtsi index 24b0ad3a7c07..d73a2287b37a 100644 --- a/arch/arm/boot/dts/sun5i-a10s.dtsi +++ b/arch/arm/boot/dts/sun5i-a10s.dtsi @@ -300,12 +300,22 @@  		#size-cells = <1>;  		ranges; +		dma: dma-controller@01c02000 { +			compatible = "allwinner,sun4i-a10-dma"; +			reg = <0x01c02000 0x1000>; +			interrupts = <27>; +			clocks = <&ahb_gates 6>; +			#dma-cells = <2>; +		}; +  		spi0: spi@01c05000 {  			compatible = "allwinner,sun4i-a10-spi";  			reg = <0x01c05000 0x1000>;  			interrupts = <10>;  			clocks = <&ahb_gates 20>, <&spi0_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 27>, <&dma 1 26>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -317,6 +327,8 @@  			interrupts = <11>;  			clocks = <&ahb_gates 21>, <&spi1_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 9>, <&dma 1 8>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -403,6 +415,8 @@  			interrupts = <12>;  			clocks = <&ahb_gates 22>, <&spi2_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 29>, <&dma 1 28>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -564,7 +578,6 @@  			reg = <0x01c2ac00 0x400>;  			interrupts = <7>;  			clocks = <&apb1_gates 0>; -			clock-frequency = <100000>;  			status = "disabled";  		}; @@ -575,7 +588,6 @@  			reg = <0x01c2b000 0x400>;  			interrupts = <8>;  			clocks = <&apb1_gates 1>; -			clock-frequency = <100000>;  			status = "disabled";  		}; @@ -586,7 +598,6 @@  			reg = <0x01c2b400 0x400>;  			interrupts = <9>;  			clocks = <&apb1_gates 2>; -			clock-frequency = <100000>;  			status = "disabled";  		}; diff --git a/arch/arm/boot/dts/sun5i-a13-hsg-h702.dts b/arch/arm/boot/dts/sun5i-a13-hsg-h702.dts new file mode 100644 index 000000000000..8b3cd0907b32 --- /dev/null +++ b/arch/arm/boot/dts/sun5i-a13-hsg-h702.dts @@ -0,0 +1,130 @@ +/* + * Copyright 2014 Chen-Yu Tsai <wens@csie.org> + * + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole. + * + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE. + */ + +/dts-v1/; +/include/ "sun5i-a13.dtsi" +/include/ "sunxi-common-regulators.dtsi" + +/ { +	model = "HSG H702"; +	compatible = "hsg,h702", "allwinner,sun5i-a13"; + +	soc@01c00000 { +		mmc0: mmc@01c0f000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_h702>; +			vmmc-supply = <®_vcc3v3>; +			bus-width = <4>; +			cd-gpios = <&pio 6 0 0>; /* PG0 */ +			cd-inverted; +			status = "okay"; +		}; + +		usbphy: phy@01c13400 { +			/* +			 * There doesn't seem to be a GPIO for controlling +			 * usb1 vbus, despite the fex file saying otherwise. +			 */ +			usb1_vbus-supply = <®_vcc5v0>; +			status = "okay"; +		}; + +		ehci0: usb@01c14000 { +			status = "okay"; +		}; + +		ohci0: usb@01c14400 { +			status = "okay"; +		}; + +		pinctrl@01c20800 { +			mmc0_cd_pin_h702: mmc0_cd_pin@0 { +				allwinner,pins = "PG0"; +				allwinner,function = "gpio_in"; +				allwinner,drive = <0>; +				allwinner,pull = <1>; +			}; +		}; + +		uart1: serial@01c28400 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart1_pins_b>; +			status = "okay"; +		}; + +		i2c0: i2c@01c2ac00 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c0_pins_a>; +			status = "okay"; + +			axp209: pmic@34 { +				compatible = "x-powers,axp209"; +				reg = <0x34>; +				interrupts = <0>; +				interrupt-controller; +				#interrupt-cells = <1>; +			}; +		}; + +		i2c1: i2c@01c2b000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c1_pins_a>; +			status = "okay"; + +			pcf8563: rtc@51 { +				compatible = "nxp,pcf8563"; +				reg = <0x51>; +			}; +		}; + +		i2c2: i2c@01c2b400 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c2_pins_a>; +			status = "okay"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/sun5i-a13.dtsi b/arch/arm/boot/dts/sun5i-a13.dtsi index bf86e65dd167..c4b5d7825b9f 100644 --- a/arch/arm/boot/dts/sun5i-a13.dtsi +++ b/arch/arm/boot/dts/sun5i-a13.dtsi @@ -298,12 +298,22 @@  		#size-cells = <1>;  		ranges; +		dma: dma-controller@01c02000 { +			compatible = "allwinner,sun4i-a10-dma"; +			reg = <0x01c02000 0x1000>; +			interrupts = <27>; +			clocks = <&ahb_gates 6>; +			#dma-cells = <2>; +		}; +  		spi0: spi@01c05000 {  			compatible = "allwinner,sun4i-a10-spi";  			reg = <0x01c05000 0x1000>;  			interrupts = <10>;  			clocks = <&ahb_gates 20>, <&spi0_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 27>, <&dma 1 26>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -315,6 +325,8 @@  			interrupts = <11>;  			clocks = <&ahb_gates 21>, <&spi1_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 9>, <&dma 1 8>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -376,6 +388,8 @@  			interrupts = <12>;  			clocks = <&ahb_gates 22>, <&spi2_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 29>, <&dma 1 28>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -490,7 +504,6 @@  			reg = <0x01c2ac00 0x400>;  			interrupts = <7>;  			clocks = <&apb1_gates 0>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -501,7 +514,6 @@  			reg = <0x01c2b000 0x400>;  			interrupts = <8>;  			clocks = <&apb1_gates 1>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -512,7 +524,6 @@  			reg = <0x01c2b400 0x400>;  			interrupts = <9>;  			clocks = <&apb1_gates 2>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi index 44b07e512c24..543f895d18d3 100644 --- a/arch/arm/boot/dts/sun6i-a31.dtsi +++ b/arch/arm/boot/dts/sun6i-a31.dtsi @@ -3,12 +3,48 @@   *   * Maxime Ripard <maxime.ripard@free-electrons.com>   * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole.   * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE.   */  /include/ "skeleton.dtsi" @@ -657,9 +693,10 @@  			reg = <0x01c2ac00 0x400>;  			interrupts = <0 6 4>;  			clocks = <&apb2_gates 0>; -			clock-frequency = <100000>;  			resets = <&apb2_rst 0>;  			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>;  		};  		i2c1: i2c@01c2b000 { @@ -667,9 +704,10 @@  			reg = <0x01c2b000 0x400>;  			interrupts = <0 7 4>;  			clocks = <&apb2_gates 1>; -			clock-frequency = <100000>;  			resets = <&apb2_rst 1>;  			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>;  		};  		i2c2: i2c@01c2b400 { @@ -677,9 +715,10 @@  			reg = <0x01c2b400 0x400>;  			interrupts = <0 8 4>;  			clocks = <&apb2_gates 2>; -			clock-frequency = <100000>;  			resets = <&apb2_rst 2>;  			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>;  		};  		i2c3: i2c@01c2b800 { @@ -687,9 +726,10 @@  			reg = <0x01c2b800 0x400>;  			interrupts = <0 9 4>;  			clocks = <&apb2_gates 3>; -			clock-frequency = <100000>;  			resets = <&apb2_rst 3>;  			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>;  		};  		gmac: ethernet@01c30000 { @@ -779,6 +819,12 @@  			interrupts = <1 9 0xf04>;  		}; +		rtc: rtc@01f00000 { +			compatible = "allwinner,sun6i-a31-rtc"; +			reg = <0x01f00000 0x54>; +			interrupts = <0 40 4>, <0 41 4>; +		}; +  		nmi_intc: interrupt-controller@01f00c0c {  			compatible = "allwinner,sun6i-a31-sc-nmi";  			interrupt-controller; diff --git a/arch/arm/boot/dts/sun7i-a20-hummingbird.dts b/arch/arm/boot/dts/sun7i-a20-hummingbird.dts new file mode 100644 index 000000000000..0e4bfa3b2b85 --- /dev/null +++ b/arch/arm/boot/dts/sun7i-a20-hummingbird.dts @@ -0,0 +1,236 @@ +/* + * Copyright 2013 Wills Wang + * + * Wills Wang <wills.wang.open@gmail.com> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +/include/ "sun7i-a20.dtsi" +/include/ "sunxi-common-regulators.dtsi" + +/ { +	model = "Merrii A20 Hummingbird"; +	compatible = "merrii,a20-hummingbird", "allwinner,sun7i-a20"; + +	soc@01c00000 { +		mmc0: mmc@01c0f000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_reference_design>; +			vmmc-supply = <®_vcc3v0>; +			bus-width = <4>; +			cd-gpios = <&pio 7 1 0>; /* PH1 */ +			cd-inverted; +			status = "okay"; +		}; + +		mmc3: mmc@01c12000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&mmc3_pins_a>; +			vmmc-supply = <®_mmc3_vdd>; +			bus-width = <4>; +			non-removable; +			status = "okay"; +		}; + +		usbphy: phy@01c13400 { +			usb1_vbus-supply = <®_usb1_vbus>; +			usb2_vbus-supply = <®_usb2_vbus>; +			status = "okay"; +		}; + +		ehci0: usb@01c14000 { +			status = "okay"; +		}; + +		ohci0: usb@01c14400 { +			status = "okay"; +		}; + +		ahci: sata@01c18000 { +			target-supply = <®_ahci_5v>; +			status = "okay"; +		}; + +		ehci1: usb@01c1c000 { +			status = "okay"; +		}; + +		ohci1: usb@01c1c400 { +			status = "okay"; +		}; + +		pio: pinctrl@01c20800 { +			ahci_pwr_pin_a20_hummingbird: ahci_pwr_pin@0 { +				allwinner,pins = "PH15"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			usb1_vbus_pin_a20_hummingbird: usb1_vbus_pin@0 { +				allwinner,pins = "PH2"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			mmc3_vdd_pin_a20_hummingbird: mmc3_vdd_pin@0 { +				allwinner,pins = "PH9"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			gmac_vdd_pin_a20_hummingbird: gmac_vdd_pin@0 { +				allwinner,pins = "PH16"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; +		}; + +		pwm: pwm@01c20e00 { +			pinctrl-names = "default"; +			pinctrl-0 = <&pwm0_pins_a>; +			status = "okay"; +		}; + +		ir0: ir@01c21800 { +			pinctrl-names = "default"; +			pinctrl-0 = <&ir0_pins_a>; +			status = "okay"; +		}; + +		uart0: serial@01c28000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart0_pins_a>; +			status = "okay"; +		}; + +		uart2: serial@01c28800 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart2_pins_a>; +			status = "okay"; +		}; + +		uart3: serial@01c28c00 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart3_pins_a>; +			status = "okay"; +		}; + +		uart4: serial@01c29000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart4_pins_a>; +			status = "okay"; +		}; + +		uart5: serial@01c29400 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart5_pins_a>; +			status = "okay"; +		}; + +		i2c0: i2c@01c2ac00 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c0_pins_a>; +			status = "okay"; + +			axp209: pmic@34 { +				compatible = "x-powers,axp209"; +				reg = <0x34>; +				interrupt-parent = <&nmi_intc>; +				interrupts = <0 8>; +				interrupt-controller; +				#interrupt-cells = <1>; +			}; +		}; + +		i2c1: i2c@01c2b000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c1_pins_a>; +			status = "okay"; +		}; + +		i2c2: i2c@01c2b400 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c2_pins_a>; +			status = "okay"; +		}; + +		i2c3: i2c@01c2b800 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c3_pins_a>; +			status = "okay"; +		}; + +		spi2: spi@01c17000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&spi2_pins_b>; +			status = "okay"; +		}; + +		gmac: ethernet@01c50000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&gmac_pins_rgmii_a>; +			phy = <&phy1>; +			phy-mode = "rgmii"; +			phy-supply = <®_gmac_vdd>; +			/* phy reset config */ +			snps,reset-gpio = <&pio 0 17 0>; /* PA17 */ +			snps,reset-active-low; +			/* wait 1s after reset, otherwise fail to read phy id */ +			snps,reset-delays-us = <0 10000 1000000>; +			status = "okay"; + +			phy1: ethernet-phy@1 { +				reg = <1>; +			}; +		}; +	}; + +	reg_ahci_5v: ahci-5v { +		pinctrl-0 = <&ahci_pwr_pin_a20_hummingbird>; +		gpio = <&pio 7 15 0>; /* PH15 */ +		status = "okay"; +	}; + +	reg_usb1_vbus: usb1-vbus { +		pinctrl-0 = <&usb1_vbus_pin_a20_hummingbird>; +		gpio = <&pio 7 2 0>; /* PH2 */ +		status = "okay"; +	}; + +	reg_usb2_vbus: usb2-vbus { +		status = "okay"; +	}; + +	reg_mmc3_vdd: mmc3_vdd { +		compatible = "regulator-fixed"; +		pinctrl-names = "default"; +		pinctrl-0 = <&mmc3_vdd_pin_a20_hummingbird>; +		regulator-name = "mmc3_vdd"; +		regulator-min-microvolt = <3000000>; +		regulator-max-microvolt = <3000000>; +		enable-active-high; +		gpio = <&pio 7 9 0>; /* PH9 */ +	}; + +	reg_gmac_vdd: gmac_vdd { +		compatible = "regulator-fixed"; +		pinctrl-names = "default"; +		pinctrl-0 = <&gmac_vdd_pin_a20_hummingbird>; +		regulator-name = "gmac_vdd"; +		regulator-min-microvolt = <3000000>; +		regulator-max-microvolt = <3000000>; +		enable-active-high; +		gpio = <&pio 7 16 0>; /* PH16 */ +	}; +}; diff --git a/arch/arm/boot/dts/sun7i-a20-olinuxino-lime.dts b/arch/arm/boot/dts/sun7i-a20-olinuxino-lime.dts new file mode 100644 index 000000000000..1eb8175959a6 --- /dev/null +++ b/arch/arm/boot/dts/sun7i-a20-olinuxino-lime.dts @@ -0,0 +1,137 @@ +/* + * This is based on sun4i-a10-olinuxino-lime.dts + * + * Copyright 2014 - Hans de Goede <hdegoede@redhat.com> + * Copyright (c) 2014 FUKAUMI Naoki <naobsd@gmail.com> + * + * The code contained herein is licensed under the GNU General Public + * License. You may obtain a copy of the GNU General Public License + * Version 2 or later at the following locations: + * + * http://www.opensource.org/licenses/gpl-license.html + * http://www.gnu.org/copyleft/gpl.html + */ + +/dts-v1/; +/include/ "sun7i-a20.dtsi" +/include/ "sunxi-common-regulators.dtsi" + +/ { +	model = "Olimex A20-OLinuXino-LIME"; +	compatible = "olimex,a20-olinuxino-lime", "allwinner,sun7i-a20"; + +	soc@01c00000 { +		mmc0: mmc@01c0f000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_reference_design>; +			vmmc-supply = <®_vcc3v3>; +			bus-width = <4>; +			cd-gpios = <&pio 7 1 0>; /* PH1 */ +			cd-inverted; +			status = "okay"; +		}; + +		usbphy: phy@01c13400 { +			usb1_vbus-supply = <®_usb1_vbus>; +			usb2_vbus-supply = <®_usb2_vbus>; +			status = "okay"; +		}; + +		ehci0: usb@01c14000 { +			status = "okay"; +		}; + +		ohci0: usb@01c14400 { +			status = "okay"; +		}; + +		ahci: sata@01c18000 { +			target-supply = <®_ahci_5v>; +			status = "okay"; +		}; + +		ehci1: usb@01c1c000 { +			status = "okay"; +		}; + +		ohci1: usb@01c1c400 { +			status = "okay"; +		}; + +		pinctrl@01c20800 { +			ahci_pwr_pin_olinuxinolime: ahci_pwr_pin@1 { +				allwinner,pins = "PC3"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			led_pins_olinuxinolime: led_pins@0 { +				allwinner,pins = "PH2"; +				allwinner,function = "gpio_out"; +				allwinner,drive = <1>; +				allwinner,pull = <0>; +			}; +		}; + +		uart0: serial@01c28000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&uart0_pins_a>; +			status = "okay"; +		}; + +		i2c0: i2c@01c2ac00 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c0_pins_a>; +			status = "okay"; + +			axp209: pmic@34 { +				compatible = "x-powers,axp209"; +				reg = <0x34>; +				interrupt-parent = <&nmi_intc>; +				interrupts = <0 8>; + +				interrupt-controller; +				#interrupt-cells = <1>; +			}; +		}; + +		gmac: ethernet@01c50000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&gmac_pins_mii_a>; +			phy = <&phy1>; +			phy-mode = "mii"; +			status = "okay"; + +			phy1: ethernet-phy@1 { +				reg = <1>; +			}; +		}; +	}; + +	leds { +		compatible = "gpio-leds"; +		pinctrl-names = "default"; +		pinctrl-0 = <&led_pins_olinuxinolime>; + +		green { +			label = "a20-olinuxino-lime:green:usr"; +			gpios = <&pio 7 2 0>; +			default-state = "on"; +		}; +	}; + +	reg_ahci_5v: ahci-5v { +		pinctrl-0 = <&ahci_pwr_pin_olinuxinolime>; +		gpio = <&pio 2 3 0>; +		status = "okay"; +	}; + +	reg_usb1_vbus: usb1-vbus { +		status = "okay"; +	}; + +	reg_usb2_vbus: usb2-vbus { +		status = "okay"; +	}; +}; diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi index 4011628c7381..a96b99465069 100644 --- a/arch/arm/boot/dts/sun7i-a20.dtsi +++ b/arch/arm/boot/dts/sun7i-a20.dtsi @@ -3,12 +3,48 @@   *   * Maxime Ripard <maxime.ripard@free-electrons.com>   * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole.   * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE.   */  /include/ "skeleton.dtsi" @@ -423,12 +459,22 @@  			interrupts = <0 0 4>;  		}; +		dma: dma-controller@01c02000 { +			compatible = "allwinner,sun4i-a10-dma"; +			reg = <0x01c02000 0x1000>; +			interrupts = <0 27 4>; +			clocks = <&ahb_gates 6>; +			#dma-cells = <2>; +		}; +  		spi0: spi@01c05000 {  			compatible = "allwinner,sun4i-a10-spi";  			reg = <0x01c05000 0x1000>;  			interrupts = <0 10 4>;  			clocks = <&ahb_gates 20>, <&spi0_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 27>, <&dma 1 26>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -440,6 +486,8 @@  			interrupts = <0 11 4>;  			clocks = <&ahb_gates 21>, <&spi1_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 9>, <&dma 1 8>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -535,6 +583,8 @@  			interrupts = <0 12 4>;  			clocks = <&ahb_gates 22>, <&spi2_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 29>, <&dma 1 28>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -574,6 +624,8 @@  			interrupts = <0 50 4>;  			clocks = <&ahb_gates 23>, <&spi3_clk>;  			clock-names = "ahb", "mod"; +			dmas = <&dma 1 31>, <&dma 1 30>; +			dma-names = "rx", "tx";  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -618,6 +670,27 @@  				allwinner,pull = <0>;  			}; +			uart3_pins_a: uart3@0 { +				allwinner,pins = "PG6", "PG7", "PG8", "PG9"; +				allwinner,function = "uart3"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			uart4_pins_a: uart4@0 { +				allwinner,pins = "PG10", "PG11"; +				allwinner,function = "uart4"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			uart5_pins_a: uart5@0 { +				allwinner,pins = "PI10", "PI11"; +				allwinner,function = "uart5"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; +  			uart6_pins_a: uart6@0 {  				allwinner,pins = "PI12", "PI13";  				allwinner,function = "uart6"; @@ -653,6 +726,13 @@  				allwinner,pull = <0>;  			}; +			i2c3_pins_a: i2c3@0 { +				allwinner,pins = "PI0", "PI1"; +				allwinner,function = "i2c3"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; +  			emac_pins_a: emac0@0 {  				allwinner,pins = "PA0", "PA1", "PA2",  						"PA3", "PA4", "PA5", "PA6", @@ -718,6 +798,13 @@  				allwinner,pull = <0>;  			}; +			spi2_pins_b: spi2@1 { +				allwinner,pins = "PB14", "PB15", "PB16", "PB17"; +				allwinner,function = "spi2"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; +  			mmc0_pins_a: mmc0@0 {  				allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5";  				allwinner,function = "mmc0"; @@ -899,7 +986,6 @@  			reg = <0x01c2ac00 0x400>;  			interrupts = <0 7 4>;  			clocks = <&apb1_gates 0>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -910,7 +996,6 @@  			reg = <0x01c2b000 0x400>;  			interrupts = <0 8 4>;  			clocks = <&apb1_gates 1>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -921,7 +1006,6 @@  			reg = <0x01c2b400 0x400>;  			interrupts = <0 9 4>;  			clocks = <&apb1_gates 2>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -932,7 +1016,6 @@  			reg = <0x01c2b800 0x400>;  			interrupts = <0 88 4>;  			clocks = <&apb1_gates 3>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; @@ -943,7 +1026,6 @@  			reg = <0x01c2c000 0x400>;  			interrupts = <0 89 4>;  			clocks = <&apb1_gates 15>; -			clock-frequency = <100000>;  			status = "disabled";  			#address-cells = <1>;  			#size-cells = <0>; diff --git a/arch/arm/boot/dts/sun8i-a23-ippo-q8h-v5.dts b/arch/arm/boot/dts/sun8i-a23-ippo-q8h-v5.dts index 34002e3eba9d..e9b8cca8dcc1 100644 --- a/arch/arm/boot/dts/sun8i-a23-ippo-q8h-v5.dts +++ b/arch/arm/boot/dts/sun8i-a23-ippo-q8h-v5.dts @@ -13,6 +13,7 @@  /dts-v1/;  /include/ "sun8i-a23.dtsi" +/include/ "sunxi-common-regulators.dtsi"  / {  	model = "Ippo Q8H Dual Core Tablet (v5)"; @@ -23,7 +24,47 @@  	};  	soc@01c00000 { +		mmc0: mmc@01c0f000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_q8h>; +			vmmc-supply = <®_vcc3v0>; +			bus-width = <4>; +			cd-gpios = <&pio 1 4 0>; /* PB4 */ +			cd-inverted; +			status = "okay"; +		}; + +		pinctrl@01c20800 { +			mmc0_cd_pin_q8h: mmc0_cd_pin@0 { +				allwinner,pins = "PB4"; +				allwinner,function = "gpio_in"; +				allwinner,drive = <0>; +				allwinner,pull = <1>; +			}; +		}; + +		i2c0: i2c@01c2ac00 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c0_pins_a>; +			status = "okay"; +		}; + +		i2c1: i2c@01c2b000 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c1_pins_a>; +			status = "okay"; +		}; + +		i2c2: i2c@01c2b400 { +			pinctrl-names = "default"; +			pinctrl-0 = <&i2c2_pins_a>; +			/* pull-ups and devices require PMIC regulator */ +			status = "failed"; +		}; +  		r_uart: serial@01f02800 { +			pinctrl-names = "default"; +			pinctrl-0 = <&r_uart_pins_a>;  			status = "okay";  		};  	}; diff --git a/arch/arm/boot/dts/sun8i-a23.dtsi b/arch/arm/boot/dts/sun8i-a23.dtsi index 54ac0787216a..6146ef15efbe 100644 --- a/arch/arm/boot/dts/sun8i-a23.dtsi +++ b/arch/arm/boot/dts/sun8i-a23.dtsi @@ -3,12 +3,48 @@   *   * Chen-Yu Tsai <wens@csie.org>   * - * The code contained herein is licensed under the GNU General Public - * License. You may obtain a copy of the GNU General Public License - * Version 2 or later at the following locations: + * This file is dual-licensed: you can use it either under the terms + * of the GPL or the X11 license, at your option. Note that this dual + * licensing only applies to this file, and not this project as a + * whole.   * - * http://www.opensource.org/licenses/gpl-license.html - * http://www.gnu.org/copyleft/gpl.html + *  a) This library is free software; you can redistribute it and/or + *     modify it under the terms of the GNU General Public License as + *     published by the Free Software Foundation; either version 2 of the + *     License, or (at your option) any later version. + * + *     This library is distributed in the hope that it will be useful, + *     but WITHOUT ANY WARRANTY; without even the implied warranty of + *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + *     GNU General Public License for more details. + * + *     You should have received a copy of the GNU General Public + *     License along with this library; if not, write to the Free + *     Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + *     MA 02110-1301 USA + * + * Or, alternatively, + * + *  b) Permission is hereby granted, free of charge, to any person + *     obtaining a copy of this software and associated documentation + *     files (the "Software"), to deal in the Software without + *     restriction, including without limitation the rights to use, + *     copy, modify, merge, publish, distribute, sublicense, and/or + *     sell copies of the Software, and to permit persons to whom the + *     Software is furnished to do so, subject to the following + *     conditions: + * + *     The above copyright notice and this permission notice shall be + *     included in all copies or substantial portions of the Software. + * + *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + *     OTHER DEALINGS IN THE SOFTWARE.   */  /include/ "skeleton.dtsi" @@ -179,6 +215,30 @@  					"apb2_uart1", "apb2_uart2",  					"apb2_uart3", "apb2_uart4";  		}; + +		mmc0_clk: clk@01c20088 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-a10-mod0-clk"; +			reg = <0x01c20088 0x4>; +			clocks = <&osc24M>, <&pll6>; +			clock-output-names = "mmc0"; +		}; + +		mmc1_clk: clk@01c2008c { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-a10-mod0-clk"; +			reg = <0x01c2008c 0x4>; +			clocks = <&osc24M>, <&pll6>; +			clock-output-names = "mmc1"; +		}; + +		mmc2_clk: clk@01c20090 { +			#clock-cells = <0>; +			compatible = "allwinner,sun4i-a10-mod0-clk"; +			reg = <0x01c20090 0x4>; +			clocks = <&osc24M>, <&pll6>; +			clock-output-names = "mmc2"; +		};  	};  	soc@01c00000 { @@ -187,6 +247,104 @@  		#size-cells = <1>;  		ranges; +		dma: dma-controller@01c02000 { +			compatible = "allwinner,sun8i-a23-dma"; +			reg = <0x01c02000 0x1000>; +			interrupts = <0 50 4>; +			clocks = <&ahb1_gates 6>; +			resets = <&ahb1_rst 6>; +			#dma-cells = <1>; +		}; + +		mmc0: mmc@01c0f000 { +			compatible = "allwinner,sun5i-a13-mmc"; +			reg = <0x01c0f000 0x1000>; +			clocks = <&ahb1_gates 8>, <&mmc0_clk>; +			clock-names = "ahb", "mmc"; +			resets = <&ahb1_rst 8>; +			reset-names = "ahb"; +			interrupts = <0 60 4>; +			status = "disabled"; +		}; + +		mmc1: mmc@01c10000 { +			compatible = "allwinner,sun5i-a13-mmc"; +			reg = <0x01c10000 0x1000>; +			clocks = <&ahb1_gates 9>, <&mmc1_clk>; +			clock-names = "ahb", "mmc"; +			resets = <&ahb1_rst 9>; +			reset-names = "ahb"; +			interrupts = <0 61 4>; +			status = "disabled"; +		}; + +		mmc2: mmc@01c11000 { +			compatible = "allwinner,sun5i-a13-mmc"; +			reg = <0x01c11000 0x1000>; +			clocks = <&ahb1_gates 10>, <&mmc2_clk>; +			clock-names = "ahb", "mmc"; +			resets = <&ahb1_rst 10>; +			reset-names = "ahb"; +			interrupts = <0 62 4>; +			status = "disabled"; +		}; + +		pio: pinctrl@01c20800 { +			compatible = "allwinner,sun8i-a23-pinctrl"; +			reg = <0x01c20800 0x400>; +			interrupts = <0 11 4>, +				     <0 15 4>, +				     <0 17 4>; +			clocks = <&apb1_gates 5>; +			gpio-controller; +			interrupt-controller; +			#address-cells = <1>; +			#size-cells = <0>; +			#gpio-cells = <3>; + +			uart0_pins_a: uart0@0 { +				allwinner,pins = "PF2", "PF4"; +				allwinner,function = "uart0"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			mmc0_pins_a: mmc0@0 { +				allwinner,pins = "PF0","PF1","PF2","PF3","PF4","PF5"; +				allwinner,function = "mmc0"; +				allwinner,drive = <2>; +				allwinner,pull = <0>; +			}; + +			mmc1_pins_a: mmc1@0 { +				allwinner,pins = "PG0","PG1","PG2","PG3","PG4","PG5"; +				allwinner,function = "mmc1"; +				allwinner,drive = <2>; +				allwinner,pull = <0>; +			}; + +			i2c0_pins_a: i2c0@0 { +				allwinner,pins = "PH2", "PH3"; +				allwinner,function = "i2c0"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			i2c1_pins_a: i2c1@0 { +				allwinner,pins = "PH4", "PH5"; +				allwinner,function = "i2c1"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; + +			i2c2_pins_a: i2c2@0 { +				allwinner,pins = "PE12", "PE13"; +				allwinner,function = "i2c2"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; +		}; +  		ahb1_rst: reset@01c202c0 {  			#reset-cells = <1>;  			compatible = "allwinner,sun6i-a31-clock-reset"; @@ -227,6 +385,8 @@  			reg-io-width = <4>;  			clocks = <&apb2_gates 16>;  			resets = <&apb2_rst 16>; +			dmas = <&dma 6>, <&dma 6>; +			dma-names = "rx", "tx";  			status = "disabled";  		}; @@ -238,6 +398,8 @@  			reg-io-width = <4>;  			clocks = <&apb2_gates 17>;  			resets = <&apb2_rst 17>; +			dmas = <&dma 7>, <&dma 7>; +			dma-names = "rx", "tx";  			status = "disabled";  		}; @@ -249,6 +411,8 @@  			reg-io-width = <4>;  			clocks = <&apb2_gates 18>;  			resets = <&apb2_rst 18>; +			dmas = <&dma 8>, <&dma 8>; +			dma-names = "rx", "tx";  			status = "disabled";  		}; @@ -260,6 +424,8 @@  			reg-io-width = <4>;  			clocks = <&apb2_gates 19>;  			resets = <&apb2_rst 19>; +			dmas = <&dma 9>, <&dma 9>; +			dma-names = "rx", "tx";  			status = "disabled";  		}; @@ -271,9 +437,44 @@  			reg-io-width = <4>;  			clocks = <&apb2_gates 20>;  			resets = <&apb2_rst 20>; +			dmas = <&dma 10>, <&dma 10>; +			dma-names = "rx", "tx";  			status = "disabled";  		}; +		i2c0: i2c@01c2ac00 { +			compatible = "allwinner,sun6i-a31-i2c"; +			reg = <0x01c2ac00 0x400>; +			interrupts = <0 6 4>; +			clocks = <&apb2_gates 0>; +			resets = <&apb2_rst 0>; +			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>; +		}; + +		i2c1: i2c@01c2b000 { +			compatible = "allwinner,sun6i-a31-i2c"; +			reg = <0x01c2b000 0x400>; +			interrupts = <0 7 4>; +			clocks = <&apb2_gates 1>; +			resets = <&apb2_rst 1>; +			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>; +		}; + +		i2c2: i2c@01c2b400 { +			compatible = "allwinner,sun6i-a31-i2c"; +			reg = <0x01c2b400 0x400>; +			interrupts = <0 8 4>; +			clocks = <&apb2_gates 2>; +			resets = <&apb2_rst 2>; +			status = "disabled"; +			#address-cells = <1>; +			#size-cells = <0>; +		}; +  		gic: interrupt-controller@01c81000 {  			compatible = "arm,cortex-a7-gic", "arm,cortex-a15-gic";  			reg = <0x01c81000 0x1000>, @@ -285,6 +486,12 @@  			interrupts = <1 9 0xf04>;  		}; +		rtc: rtc@01f00000 { +			compatible = "allwinner,sun6i-a31-rtc"; +			reg = <0x01f00000 0x54>; +			interrupts = <0 40 4>, <0 41 4>; +		}; +  		prcm@01f01400 {  			compatible = "allwinner,sun8i-a23-prcm";  			reg = <0x01f01400 0x200>; @@ -339,5 +546,25 @@  			resets = <&apb0_rst 4>;  			status = "disabled";  		}; + +		r_pio: pinctrl@01f02c00 { +			compatible = "allwinner,sun8i-a23-r-pinctrl"; +			reg = <0x01f02c00 0x400>; +			interrupts = <0 45 4>; +			clocks = <&apb0_gates 0>; +			resets = <&apb0_rst 0>; +			gpio-controller; +			interrupt-controller; +			#address-cells = <1>; +			#size-cells = <0>; +			#gpio-cells = <3>; + +			r_uart_pins_a: r_uart@0 { +				allwinner,pins = "PL2", "PL3"; +				allwinner,function = "s_uart"; +				allwinner,drive = <0>; +				allwinner,pull = <0>; +			}; +		};  	};  }; diff --git a/arch/arm/boot/dts/sunxi-common-regulators.dtsi b/arch/arm/boot/dts/sunxi-common-regulators.dtsi index 3d021efd1a38..c9c5b10e03eb 100644 --- a/arch/arm/boot/dts/sunxi-common-regulators.dtsi +++ b/arch/arm/boot/dts/sunxi-common-regulators.dtsi @@ -86,4 +86,11 @@  		regulator-min-microvolt = <3300000>;  		regulator-max-microvolt = <3300000>;  	}; + +	reg_vcc5v0: vcc5v0 { +		compatible = "regulator-fixed"; +		regulator-name = "vcc5v0"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +	};  }; diff --git a/arch/arm/boot/dts/tegra114.dtsi b/arch/arm/boot/dts/tegra114.dtsi index 80b8eddb4105..2ca9c1807f72 100644 --- a/arch/arm/boot/dts/tegra114.dtsi +++ b/arch/arm/boot/dts/tegra114.dtsi @@ -157,6 +157,11 @@  		#reset-cells = <1>;  	}; +	flow-controller@60007000 { +		compatible = "nvidia,tegra114-flowctrl"; +		reg = <0x60007000 0x1000>; +	}; +  	apbdma: dma@6000a000 {  		compatible = "nvidia,tegra114-apbdma";  		reg = <0x6000a000 0x1400>; diff --git a/arch/arm/boot/dts/tegra124-jetson-tk1.dts b/arch/arm/boot/dts/tegra124-jetson-tk1.dts index 624b0fba2d0a..029c9a021541 100644 --- a/arch/arm/boot/dts/tegra124-jetson-tk1.dts +++ b/arch/arm/boot/dts/tegra124-jetson-tk1.dts @@ -16,6 +16,26 @@  		reg = <0x0 0x80000000 0x0 0x80000000>;  	}; +	pcie-controller@0,01003000 { +		status = "okay"; + +		avddio-pex-supply = <&vdd_1v05_run>; +		dvddio-pex-supply = <&vdd_1v05_run>; +		avdd-pex-pll-supply = <&vdd_1v05_run>; +		hvdd-pex-supply = <&vdd_3v3_lp0>; +		hvdd-pex-pll-e-supply = <&vdd_3v3_lp0>; +		vddio-pex-ctl-supply = <&vdd_3v3_lp0>; +		avdd-pll-erefe-supply = <&avdd_1v05_run>; + +		pci@1,0 { +			status = "okay"; +		}; + +		pci@2,0 { +			status = "okay"; +		}; +	}; +  	host1x@0,50000000 {  		hdmi@0,54280000 {  			status = "okay"; @@ -31,10 +51,10 @@  	};  	pinmux: pinmux@0,70000868 { -		pinctrl-names = "default"; -		pinctrl-0 = <&state_default>; +		pinctrl-names = "boot"; +		pinctrl-0 = <&state_boot>; -		state_default: pinmux { +		state_boot: pinmux {  			clk_32k_out_pa0 {  				nvidia,pins = "clk_32k_out_pa0";  				nvidia,function = "soc"; @@ -1231,6 +1251,41 @@  				nvidia,tristate = <TEGRA_PIN_DISABLE>;  				nvidia,enable-input = <TEGRA_PIN_DISABLE>;  			}; +			pex_l0_rst_n_pdd1 { +				nvidia,pins = "pex_l0_rst_n_pdd1"; +				nvidia,function = "pe0"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			pex_l0_clkreq_n_pdd2 { +				nvidia,pins = "pex_l0_clkreq_n_pdd2"; +				nvidia,function = "pe0"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			pex_wake_n_pdd3 { +				nvidia,pins = "pex_wake_n_pdd3"; +				nvidia,function = "pe"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			pex_l1_rst_n_pdd5 { +				nvidia,pins = "pex_l1_rst_n_pdd5"; +				nvidia,function = "pe1"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			pex_l1_clkreq_n_pdd6 { +				nvidia,pins = "pex_l1_clkreq_n_pdd6"; +				nvidia,function = "pe1"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			};  			clk3_out_pee0 {  				nvidia,pins = "clk3_out_pee0";  				nvidia,function = "extperiph3"; @@ -1515,7 +1570,7 @@  					regulator-always-on;  				}; -				ldo0 { +				avdd_1v05_run: ldo0 {  					regulator-name = "+1.05V_RUN_AVDD";  					regulator-min-microvolt = <1050000>;  					regulator-max-microvolt = <1050000>; @@ -1619,6 +1674,18 @@  		nvidia,sys-clock-req-active-high;  	}; +	/* Serial ATA */ +	sata@0,70020000 { +		status = "okay"; + +		hvdd-supply = <&vdd_3v3_lp0>; +		vddio-supply = <&vdd_1v05_run>; +		avdd-supply = <&vdd_1v05_run>; + +		target-5v-supply = <&vdd_5v0_sata>; +		target-12v-supply = <&vdd_12v0_sata>; +	}; +  	padctl@0,7009f000 {  		pinctrl-0 = <&padctl_default>;  		pinctrl-names = "default"; @@ -1828,6 +1895,29 @@  			enable-active-high;  			vin-supply = <&vdd_5v0_sys>;  		}; + +		/* Molex power connector */ +		vdd_5v0_sata: regulator@13 { +			compatible = "regulator-fixed"; +			reg = <13>; +			regulator-name = "+5V_SATA"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			gpio = <&gpio TEGRA_GPIO(EE, 2) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_5v0_sys>; +		}; + +		vdd_12v0_sata: regulator@14 { +			compatible = "regulator-fixed"; +			reg = <14>; +			regulator-name = "+12V_SATA"; +			regulator-min-microvolt = <12000000>; +			regulator-max-microvolt = <12000000>; +			gpio = <&gpio TEGRA_GPIO(EE, 2) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_mux>; +		};  	};  	sound { diff --git a/arch/arm/boot/dts/tegra124-nyan-big.dts b/arch/arm/boot/dts/tegra124-nyan-big.dts new file mode 100644 index 000000000000..7d0784ce4c74 --- /dev/null +++ b/arch/arm/boot/dts/tegra124-nyan-big.dts @@ -0,0 +1,1136 @@ +/dts-v1/; + +#include <dt-bindings/input/input.h> +#include "tegra124.dtsi" + +/ { +	model = "Acer Chromebook 13 CB5-311"; +	compatible = "google,nyan-big", "nvidia,tegra124"; + +	aliases { +		rtc0 = "/i2c@0,7000d000/pmic@40"; +		rtc1 = "/rtc@0,7000e000"; +	}; + +	memory { +		reg = <0x0 0x80000000 0x0 0x80000000>; +	}; + +	host1x@0,50000000 { +		hdmi@0,54280000 { +			status = "okay"; + +			vdd-supply = <&vdd_3v3_hdmi>; +			pll-supply = <&vdd_hdmi_pll>; +			hdmi-supply = <&vdd_5v0_hdmi>; + +			nvidia,ddc-i2c-bus = <&hdmi_ddc>; +			nvidia,hpd-gpio = +				<&gpio TEGRA_GPIO(N, 7) GPIO_ACTIVE_HIGH>; +		}; + +		sor@0,54540000 { +			status = "okay"; + +			nvidia,dpaux = <&dpaux>; +			nvidia,panel = <&panel>; +		}; + +		dpaux@0,545c0000 { +			vdd-supply = <&vdd_3v3_panel>; +			status = "okay"; +		}; +	}; + +	pinmux@0,70000868 { +		pinctrl-names = "default"; +		pinctrl-0 = <&pinmux_default>; + +		pinmux_default: common { +			dap_mclk1_pw4 { +				nvidia,pins = "dap_mclk1_pw4"; +				nvidia,function = "extperiph1"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			dap2_din_pa4 { +				nvidia,pins = "dap2_din_pa4"; +				nvidia,function = "i2s1"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			dap2_dout_pa5 { +				nvidia,pins = "dap2_dout_pa5", +					      "dap2_fs_pa2", +					      "dap2_sclk_pa3"; +				nvidia,function = "i2s1"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			dvfs_pwm_px0 { +				nvidia,pins = "dvfs_pwm_px0", +					      "dvfs_clk_px2"; +				nvidia,function = "cldvfs"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			ulpi_clk_py0 { +				nvidia,pins = "ulpi_clk_py0", +					      "ulpi_nxt_py2", +					      "ulpi_stp_py3"; +				nvidia,function = "spi1"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			ulpi_dir_py1 { +				nvidia,pins = "ulpi_dir_py1"; +				nvidia,function = "spi1"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			cam_i2c_scl_pbb1 { +				nvidia,pins = "cam_i2c_scl_pbb1", +					      "cam_i2c_sda_pbb2"; +				nvidia,function = "i2c3"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,open-drain = <TEGRA_PIN_ENABLE>; +			}; +			gen2_i2c_scl_pt5 { +				nvidia,pins = "gen2_i2c_scl_pt5", +					      "gen2_i2c_sda_pt6"; +				nvidia,function = "i2c2"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,open-drain = <TEGRA_PIN_ENABLE>; +			}; +			pg4 { +				nvidia,pins = "pg4", +					      "pg5", +					      "pg6", +					      "pi3"; +				nvidia,function = "spi4"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			pg7 { +				nvidia,pins = "pg7"; +				nvidia,function = "spi4"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			ph1 { +				nvidia,pins = "ph1"; +				nvidia,function = "pwm1"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			pk0 { +				nvidia,pins = "pk0", +					      "kb_row15_ps7", +					      "clk_32k_out_pa0"; +				nvidia,function = "soc"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			sdmmc1_clk_pz0 { +				nvidia,pins = "sdmmc1_clk_pz0"; +				nvidia,function = "sdmmc1"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			sdmmc1_cmd_pz1 { +				nvidia,pins = "sdmmc1_cmd_pz1", +					      "sdmmc1_dat0_py7", +					      "sdmmc1_dat1_py6", +					      "sdmmc1_dat2_py5", +					      "sdmmc1_dat3_py4"; +				nvidia,function = "sdmmc1"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			sdmmc3_clk_pa6 { +				nvidia,pins = "sdmmc3_clk_pa6"; +				nvidia,function = "sdmmc3"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			sdmmc3_cmd_pa7 { +				nvidia,pins = "sdmmc3_cmd_pa7", +					      "sdmmc3_dat0_pb7", +					      "sdmmc3_dat1_pb6", +					      "sdmmc3_dat2_pb5", +					      "sdmmc3_dat3_pb4", +					      "kb_col4_pq4", +					      "sdmmc3_clk_lb_out_pee4", +					      "sdmmc3_clk_lb_in_pee5", +					      "sdmmc3_cd_n_pv2"; +				nvidia,function = "sdmmc3"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			sdmmc4_clk_pcc4 { +				nvidia,pins = "sdmmc4_clk_pcc4"; +				nvidia,function = "sdmmc4"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			sdmmc4_cmd_pt7 { +				nvidia,pins = "sdmmc4_cmd_pt7", +					      "sdmmc4_dat0_paa0", +					      "sdmmc4_dat1_paa1", +					      "sdmmc4_dat2_paa2", +					      "sdmmc4_dat3_paa3", +					      "sdmmc4_dat4_paa4", +					      "sdmmc4_dat5_paa5", +					      "sdmmc4_dat6_paa6", +					      "sdmmc4_dat7_paa7"; +				nvidia,function = "sdmmc4"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			pwr_i2c_scl_pz6 { +				nvidia,pins = "pwr_i2c_scl_pz6", +					      "pwr_i2c_sda_pz7"; +				nvidia,function = "i2cpwr"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,open-drain = <TEGRA_PIN_ENABLE>; +			}; +			jtag_rtck { +				nvidia,pins = "jtag_rtck"; +				nvidia,function = "rtck"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			clk_32k_in { +				nvidia,pins = "clk_32k_in"; +				nvidia,function = "clk"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			core_pwr_req { +				nvidia,pins = "core_pwr_req"; +				nvidia,function = "pwron"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			cpu_pwr_req { +				nvidia,pins = "cpu_pwr_req"; +				nvidia,function = "cpu"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			pwr_int_n { +				nvidia,pins = "pwr_int_n"; +				nvidia,function = "pmi"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			reset_out_n { +				nvidia,pins = "reset_out_n"; +				nvidia,function = "reset_out_n"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			clk3_out_pee0 { +				nvidia,pins = "clk3_out_pee0"; +				nvidia,function = "extperiph3"; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			gen1_i2c_sda_pc5 { +				nvidia,pins = "gen1_i2c_sda_pc5", +					      "gen1_i2c_scl_pc4"; +				nvidia,function = "i2c1"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,open-drain = <TEGRA_PIN_ENABLE>; +			}; +			hdmi_cec_pee3 { +				nvidia,pins = "hdmi_cec_pee3"; +				nvidia,function = "cec"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,open-drain = <TEGRA_PIN_DISABLE>; +			}; +			hdmi_int_pn7 { +				nvidia,pins = "hdmi_int_pn7"; +				nvidia,function = "rsvd1"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_DOWN>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +			}; +			ddc_scl_pv4 { +				nvidia,pins = "ddc_scl_pv4", +					      "ddc_sda_pv5"; +				nvidia,function = "i2c4"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,rcv-sel = <TEGRA_PIN_ENABLE>; +			}; +			kb_row10_ps2 { +				nvidia,pins = "kb_row10_ps2"; +				nvidia,function = "uarta"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			kb_row9_ps1 { +				nvidia,pins = "kb_row9_ps1"; +				nvidia,function = "uarta"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			usb_vbus_en0_pn4 { +				nvidia,pins = "usb_vbus_en0_pn4", +					      "usb_vbus_en1_pn5"; +				nvidia,function = "usb"; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,lock = <TEGRA_PIN_DISABLE>; +				nvidia,open-drain = <TEGRA_PIN_ENABLE>; +			}; +			drive_sdio1 { +				nvidia,pins = "drive_sdio1"; +				nvidia,high-speed-mode = <TEGRA_PIN_ENABLE>; +				nvidia,schmitt = <TEGRA_PIN_DISABLE>; +				nvidia,pull-down-strength = <36>; +				nvidia,pull-up-strength = <20>; +				nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_SLOW>; +				nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_SLOW>; +			}; +			drive_sdio3 { +				nvidia,pins = "drive_sdio3"; +				nvidia,high-speed-mode = <TEGRA_PIN_ENABLE>; +				nvidia,schmitt = <TEGRA_PIN_DISABLE>; +				nvidia,pull-down-strength = <22>; +				nvidia,pull-up-strength = <36>; +				nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_FASTEST>; +				nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_FASTEST>; +			}; +			drive_gma { +				nvidia,pins = "drive_gma"; +				nvidia,high-speed-mode = <TEGRA_PIN_ENABLE>; +				nvidia,schmitt = <TEGRA_PIN_DISABLE>; +				nvidia,pull-down-strength = <2>; +				nvidia,pull-up-strength = <1>; +				nvidia,slew-rate-rising = <TEGRA_PIN_SLEW_RATE_FASTEST>; +				nvidia,slew-rate-falling = <TEGRA_PIN_SLEW_RATE_FASTEST>; +				nvidia,drive-type = <1>; +			}; +			codec_irq_l { +				nvidia,pins = "ph4"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			lcd_bl_en { +				nvidia,pins = "ph2"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_DOWN>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			touch_irq_l { +				nvidia,pins = "gpio_w3_aud_pw3"; +				nvidia,function = "spi6"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			tpm_davint_l { +				nvidia,pins = "ph6"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			ts_irq_l { +				nvidia,pins = "pk2"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			ts_reset_l { +				nvidia,pins = "pk4"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			ts_shdn_l { +				nvidia,pins = "pk1"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			ph7 { +				nvidia,pins = "ph7"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			kb_col0_ap { +				nvidia,pins = "kb_col0_pq0"; +				nvidia,function = "rsvd4"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			lid_open { +				nvidia,pins = "kb_row4_pr4"; +				nvidia,function = "rsvd3"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			en_vdd_sd { +				nvidia,pins = "kb_row0_pr0"; +				nvidia,function = "rsvd4"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			ac_ok { +				nvidia,pins = "pj0"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			sensor_irq_l { +				nvidia,pins = "pi6"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			wifi_en { +				nvidia,pins = "gpio_x7_aud_px7"; +				nvidia,function = "rsvd4"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			en_vdd_bl { +				nvidia,pins = "dap3_dout_pp2"; +				nvidia,function = "i2s2"; +				nvidia,pull = <TEGRA_PIN_PULL_DOWN>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			en_vdd_hdmi { +				nvidia,pins = "spdif_in_pk6"; +				nvidia,function = "spdif"; +				nvidia,pull = <TEGRA_PIN_PULL_DOWN>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			soc_warm_reset_l { +				nvidia,pins = "pi5"; +				nvidia,function = "gmi"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_DISABLE>; +			}; +			hp_det_l { +				nvidia,pins = "pi7"; +				nvidia,function = "rsvd1"; +				nvidia,pull = <TEGRA_PIN_PULL_NONE>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +			mic_det_l { +				nvidia,pins = "kb_row7_pr7"; +				nvidia,function = "rsvd2"; +				nvidia,pull = <TEGRA_PIN_PULL_UP>; +				nvidia,tristate = <TEGRA_PIN_DISABLE>; +				nvidia,enable-input = <TEGRA_PIN_ENABLE>; +			}; +		}; +	}; + +	serial@0,70006000 { +		/* Debug connector on the bottom of the board near SD card. */ +		status = "okay"; +	}; + +	pwm@0,7000a000 { +		status = "okay"; +	}; + +	i2c@0,7000c000 { +		status = "okay"; +		clock-frequency = <100000>; + +		acodec: audio-codec@10 { +			compatible = "maxim,max98090"; +			reg = <0x10>; +			interrupt-parent = <&gpio>; +			interrupts = <TEGRA_GPIO(H, 4) GPIO_ACTIVE_HIGH>; +		}; + +		temperature-sensor@4c { +			compatible = "ti,tmp451"; +			reg = <0x4c>; +			interrupt-parent = <&gpio>; +			interrupts = <TEGRA_GPIO(I, 6) IRQ_TYPE_LEVEL_LOW>; + +			#thermal-sensor-cells = <1>; +		}; +	}; + +	i2c@0,7000c400 { +		status = "okay"; +		clock-frequency = <100000>; +	}; + +	i2c@0,7000c500 { +		status = "okay"; +		clock-frequency = <400000>; + +		tpm@20 { +			compatible = "infineon,slb9645tt"; +			reg = <0x20>; +		}; +	}; + +	hdmi_ddc: i2c@0,7000c700 { +		status = "okay"; +		clock-frequency = <100000>; +	}; + +	i2c@0,7000d000 { +		status = "okay"; +		clock-frequency = <400000>; + +		pmic: pmic@40 { +			compatible = "ams,as3722"; +			reg = <0x40>; +			interrupts = <0 86 IRQ_TYPE_LEVEL_HIGH>; + +			ams,system-power-controller; + +			#interrupt-cells = <2>; +			interrupt-controller; + +			gpio-controller; +			#gpio-cells = <2>; + +			pinctrl-names = "default"; +			pinctrl-0 = <&as3722_default>; + +			as3722_default: pinmux { +				gpio0 { +					pins = "gpio0"; +					function = "gpio"; +					bias-pull-down; +				}; + +				gpio1 { +					pins = "gpio1"; +					function = "gpio"; +					bias-pull-up; +				}; + +				gpio2_4_7 { +					pins = "gpio2", "gpio4", "gpio7"; +					function = "gpio"; +					bias-pull-up; +				}; + +				gpio3_6 { +					pins = "gpio3", "gpio6"; +					bias-high-impedance; +				}; + +				gpio5 { +					pins = "gpio5"; +					function = "clk32k-out"; +					bias-pull-down; +				}; +			}; + +			regulators { +				vsup-sd2-supply = <&vdd_5v0_sys>; +				vsup-sd3-supply = <&vdd_5v0_sys>; +				vsup-sd4-supply = <&vdd_5v0_sys>; +				vsup-sd5-supply = <&vdd_5v0_sys>; +				vin-ldo0-supply = <&vdd_1v35_lp0>; +				vin-ldo1-6-supply = <&vdd_3v3_run>; +				vin-ldo2-5-7-supply = <&vddio_1v8>; +				vin-ldo3-4-supply = <&vdd_3v3_sys>; +				vin-ldo9-10-supply = <&vdd_5v0_sys>; +				vin-ldo11-supply = <&vdd_3v3_run>; + +				sd0 { +					regulator-name = "+VDD_CPU_AP"; +					regulator-min-microvolt = <700000>; +					regulator-max-microvolt = <1350000>; +					regulator-min-microamp = <3500000>; +					regulator-max-microamp = <3500000>; +					regulator-always-on; +					regulator-boot-on; +					ams,ext-control = <2>; +				}; + +				sd1 { +					regulator-name = "+VDD_CORE"; +					regulator-min-microvolt = <700000>; +					regulator-max-microvolt = <1350000>; +					regulator-min-microamp = <2500000>; +					regulator-max-microamp = <4000000>; +					regulator-always-on; +					regulator-boot-on; +					ams,ext-control = <1>; +				}; + +				vdd_1v35_lp0: sd2 { +					regulator-name = "+1.35V_LP0(sd2)"; +					regulator-min-microvolt = <1350000>; +					regulator-max-microvolt = <1350000>; +					regulator-always-on; +					regulator-boot-on; +				}; + +				sd3 { +					regulator-name = "+1.35V_LP0(sd3)"; +					regulator-min-microvolt = <1350000>; +					regulator-max-microvolt = <1350000>; +					regulator-always-on; +					regulator-boot-on; +				}; + +				vdd_1v05_run: sd4 { +					regulator-name = "+1.05V_RUN"; +					regulator-min-microvolt = <1050000>; +					regulator-max-microvolt = <1050000>; +				}; + +				vddio_1v8: sd5 { +					regulator-name = "+1.8V_VDDIO"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <1800000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				sd6 { +					regulator-name = "+VDD_GPU_AP"; +					regulator-min-microvolt = <650000>; +					regulator-max-microvolt = <1200000>; +					regulator-min-microamp = <3500000>; +					regulator-max-microamp = <3500000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				ldo0 { +					regulator-name = "+1.05V_RUN_AVDD"; +					regulator-min-microvolt = <1050000>; +					regulator-max-microvolt = <1050000>; +					regulator-boot-on; +					regulator-always-on; +					ams,ext-control = <1>; +				}; + +				ldo1 { +					regulator-name = "+1.8V_RUN_CAM"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <1800000>; +				}; + +				ldo2 { +					regulator-name = "+1.2V_GEN_AVDD"; +					regulator-min-microvolt = <1200000>; +					regulator-max-microvolt = <1200000>; +					regulator-boot-on; +					regulator-always-on; +				}; + +				ldo3 { +					regulator-name = "+1.00V_LP0_VDD_RTC"; +					regulator-min-microvolt = <1000000>; +					regulator-max-microvolt = <1000000>; +					regulator-boot-on; +					regulator-always-on; +					ams,enable-tracking; +				}; + +				vdd_run_cam: ldo4 { +					regulator-name = "+3.3V_RUN_CAM"; +					regulator-min-microvolt = <2800000>; +					regulator-max-microvolt = <2800000>; +				}; + +				ldo5 { +					regulator-name = "+1.2V_RUN_CAM_FRONT"; +					regulator-min-microvolt = <1200000>; +					regulator-max-microvolt = <1200000>; +				}; + +				vddio_sdmmc3: ldo6 { +					regulator-name = "+VDDIO_SDMMC3"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <3300000>; +				}; + +				ldo7 { +					regulator-name = "+1.05V_RUN_CAM_REAR"; +					regulator-min-microvolt = <1050000>; +					regulator-max-microvolt = <1050000>; +				}; + +				ldo9 { +					regulator-name = "+2.8V_RUN_TOUCH"; +					regulator-min-microvolt = <2800000>; +					regulator-max-microvolt = <2800000>; +				}; + +				ldo10 { +					regulator-name = "+2.8V_RUN_CAM_AF"; +					regulator-min-microvolt = <2800000>; +					regulator-max-microvolt = <2800000>; +				}; + +				ldo11 { +					regulator-name = "+1.8V_RUN_VPP_FUSE"; +					regulator-min-microvolt = <1800000>; +					regulator-max-microvolt = <1800000>; +				}; +			}; +		}; +	}; + +	spi@0,7000d400 { +		status = "okay"; + +		cros_ec: cros-ec@0 { +			compatible = "google,cros-ec-spi"; +			spi-max-frequency = <3000000>; +			interrupt-parent = <&gpio>; +			interrupts = <TEGRA_GPIO(C, 7) IRQ_TYPE_LEVEL_LOW>; +			reg = <0>; + +			google,cros-ec-spi-msg-delay = <2000>; + +			i2c-tunnel { +				compatible = "google,cros-ec-i2c-tunnel"; +				#address-cells = <1>; +				#size-cells = <0>; + +				google,remote-bus = <0>; + +				charger: bq24735@9 { +					compatible = "ti,bq24735"; +					reg = <0x9>; +					interrupt-parent = <&gpio>; +					interrupts = <TEGRA_GPIO(J, 0) +							GPIO_ACTIVE_HIGH>; +					ti,ac-detect-gpios = <&gpio +							TEGRA_GPIO(J, 0) +							GPIO_ACTIVE_HIGH>; +				}; + +				battery: sbs-battery@b { +					compatible = "sbs,sbs-battery"; +					reg = <0xb>; +					sbs,i2c-retry-count = <2>; +					sbs,poll-retry-count = <10>; +					power-supplies = <&charger>; +				}; +			}; +		}; +	}; + +	spi@0,7000da00 { +		status = "okay"; +		spi-max-frequency = <25000000>; + +		flash@0 { +			compatible = "winbond,w25q32dw"; +			reg = <0>; +		}; +	}; + +	pmc@0,7000e400 { +		nvidia,invert-interrupt; +		nvidia,suspend-mode = <0>; +		nvidia,cpu-pwr-good-time = <500>; +		nvidia,cpu-pwr-off-time = <300>; +		nvidia,core-pwr-good-time = <641 3845>; +		nvidia,core-pwr-off-time = <61036>; +		nvidia,core-power-req-active-high; +		nvidia,sys-clock-req-active-high; +	}; + +	hda@0,70030000 { +		status = "okay"; +	}; + +	sdhci@0,700b0000 { /* WiFi/BT on this bus */ +		status = "okay"; +		power-gpios = <&gpio TEGRA_GPIO(X, 7) GPIO_ACTIVE_HIGH>; +		bus-width = <4>; +		no-1-8-v; +		non-removable; +	}; + +	sdhci@0,700b0400 { /* SD Card on this bus */ +		status = "okay"; +		cd-gpios = <&gpio TEGRA_GPIO(V, 2) GPIO_ACTIVE_LOW>; +		power-gpios = <&gpio TEGRA_GPIO(R, 0) GPIO_ACTIVE_HIGH>; +		wp-gpios = <&gpio TEGRA_GPIO(Q, 4) GPIO_ACTIVE_LOW>; +		bus-width = <4>; +		no-1-8-v; +		vqmmc-supply = <&vddio_sdmmc3>; +	}; + +	sdhci@0,700b0600 { /* eMMC on this bus */ +		status = "okay"; +		bus-width = <8>; +		no-1-8-v; +		non-removable; +	}; + +	ahub@0,70300000 { +		i2s@0,70301100 { +			status = "okay"; +		}; +	}; + +	usb@0,7d000000 { /* Rear external USB port. */ +		status = "okay"; +	}; + +	usb-phy@0,7d000000 { +		status = "okay"; +		vbus-supply = <&vdd_usb1_vbus>; +	}; + +	usb@0,7d004000 { /* Internal webcam. */ +		status = "okay"; +	}; + +	usb-phy@0,7d004000 { +		status = "okay"; +		vbus-supply = <&vdd_run_cam>; +	}; + +	usb@0,7d008000 { /* Left external USB port. */ +		status = "okay"; +	}; + +	usb-phy@0,7d008000 { +		status = "okay"; +		vbus-supply = <&vdd_usb3_vbus>; +	}; + +	backlight: backlight { +		compatible = "pwm-backlight"; + +		enable-gpios = <&gpio TEGRA_GPIO(H, 2) GPIO_ACTIVE_HIGH>; +		power-supply = <&vdd_led>; +		pwms = <&pwm 1 1000000>; + +		default-brightness-level = <224>; +		brightness-levels = +			<  0   1   2   3   4   5   6   7 +			   8   9  10  11  12  13  14  15 +			  16  17  18  19  20  21  22  23 +			  24  25  26  27  28  29  30  31 +			  32  33  34  35  36  37  38  39 +			  40  41  42  43  44  45  46  47 +			  48  49  50  51  52  53  54  55 +			  56  57  58  59  60  61  62  63 +			  64  65  66  67  68  69  70  71 +			  72  73  74  75  76  77  78  79 +			  80  81  82  83  84  85  86  87 +			  88  89  90  91  92  93  94  95 +			  96  97  98  99 100 101 102 103 +			 104 105 106 107 108 109 110 111 +			 112 113 114 115 116 117 118 119 +			 120 121 122 123 124 125 126 127 +			 128 129 130 131 132 133 134 135 +			 136 137 138 139 140 141 142 143 +			 144 145 146 147 148 149 150 151 +			 152 153 154 155 156 157 158 159 +			 160 161 162 163 164 165 166 167 +			 168 169 170 171 172 173 174 175 +			 176 177 178 179 180 181 182 183 +			 184 185 186 187 188 189 190 191 +			 192 193 194 195 196 197 198 199 +			 200 201 202 203 204 205 206 207 +			 208 209 210 211 212 213 214 215 +			 216 217 218 219 220 221 222 223 +			 224 225 226 227 228 229 230 231 +			 232 233 234 235 236 237 238 239 +			 240 241 242 243 244 245 246 247 +			 248 249 250 251 252 253 254 255 +			 256>; +	}; + +	clocks { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <0>; + +		clk32k_in: clock@0 { +			compatible = "fixed-clock"; +			reg = <0>; +			#clock-cells = <0>; +			clock-frequency = <32768>; +		}; +	}; + +	gpio-keys { +		compatible = "gpio-keys"; + +		lid { +			label = "Lid"; +			gpios = <&gpio TEGRA_GPIO(R, 4) GPIO_ACTIVE_LOW>; +			linux,input-type = <5>; +			linux,code = <KEY_RESERVED>; +			debounce-interval = <1>; +			gpio-key,wakeup; +		}; + +		power { +			label = "Power"; +			gpios = <&gpio TEGRA_GPIO(Q, 0) GPIO_ACTIVE_LOW>; +			linux,code = <KEY_POWER>; +			debounce-interval = <30>; +			gpio-key,wakeup; +		}; +	}; + +	panel: panel { +		compatible = "auo,b133xtn01"; + +		backlight = <&backlight>; +		ddc-i2c-bus = <&dpaux>; +	}; + +	regulators { +		compatible = "simple-bus"; +		#address-cells = <1>; +		#size-cells = <0>; + +		vdd_mux: regulator@0 { +			compatible = "regulator-fixed"; +			reg = <0>; +			regulator-name = "+VDD_MUX"; +			regulator-min-microvolt = <12000000>; +			regulator-max-microvolt = <12000000>; +			regulator-always-on; +			regulator-boot-on; +		}; + +		vdd_5v0_sys: regulator@1 { +			compatible = "regulator-fixed"; +			reg = <1>; +			regulator-name = "+5V_SYS"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			regulator-always-on; +			regulator-boot-on; +			vin-supply = <&vdd_mux>; +		}; + +		vdd_3v3_sys: regulator@2 { +			compatible = "regulator-fixed"; +			reg = <2>; +			regulator-name = "+3.3V_SYS"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +			regulator-boot-on; +			vin-supply = <&vdd_mux>; +		}; + +		vdd_3v3_run: regulator@3 { +			compatible = "regulator-fixed"; +			reg = <3>; +			regulator-name = "+3.3V_RUN"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			regulator-always-on; +			regulator-boot-on; +			gpio = <&pmic 1 GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_3v3_sys>; +		}; + +		vdd_3v3_hdmi: regulator@4 { +			compatible = "regulator-fixed"; +			reg = <4>; +			regulator-name = "+3.3V_AVDD_HDMI_AP_GATED"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			vin-supply = <&vdd_3v3_run>; +		}; + +		vdd_led: regulator@5 { +			compatible = "regulator-fixed"; +			reg = <5>; +			regulator-name = "+VDD_LED"; +			gpio = <&gpio TEGRA_GPIO(P, 2) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_mux>; +		}; + +		vdd_5v0_ts: regulator@6 { +			compatible = "regulator-fixed"; +			reg = <6>; +			regulator-name = "+5V_VDD_TS_SW"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			regulator-boot-on; +			gpio = <&gpio TEGRA_GPIO(K, 1) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_5v0_sys>; +		}; + +		vdd_usb1_vbus: regulator@7 { +			compatible = "regulator-fixed"; +			reg = <7>; +			regulator-name = "+5V_USB_HS"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			gpio = <&gpio TEGRA_GPIO(N, 4) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			gpio-open-drain; +			vin-supply = <&vdd_5v0_sys>; +		}; + +		vdd_usb3_vbus: regulator@8 { +			compatible = "regulator-fixed"; +			reg = <8>; +			regulator-name = "+5V_USB_SS"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			gpio = <&gpio TEGRA_GPIO(N, 5) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			gpio-open-drain; +			vin-supply = <&vdd_5v0_sys>; +		}; + +		vdd_3v3_panel: regulator@9 { +			compatible = "regulator-fixed"; +			reg = <9>; +			regulator-name = "+3.3V_PANEL"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			gpio = <&pmic 4 GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_3v3_run>; +		}; + +		vdd_3v3_lp0: regulator@10 { +			compatible = "regulator-fixed"; +			reg = <10>; +			regulator-name = "+3.3V_LP0"; +			regulator-min-microvolt = <3300000>; +			regulator-max-microvolt = <3300000>; +			/* +			 * TODO: find a way to wire this up with the USB EHCI +			 * controllers so that it can be enabled on demand. +			 */ +			regulator-always-on; +			gpio = <&pmic 2 GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_3v3_sys>; +		}; + +		vdd_hdmi_pll: regulator@11 { +			compatible = "regulator-fixed"; +			reg = <11>; +			regulator-name = "+1.05V_RUN_AVDD_HDMI_PLL"; +			regulator-min-microvolt = <1050000>; +			regulator-max-microvolt = <1050000>; +			gpio = <&gpio TEGRA_GPIO(H, 7) GPIO_ACTIVE_LOW>; +			vin-supply = <&vdd_1v05_run>; +		}; + +		vdd_5v0_hdmi: regulator@12 { +			compatible = "regulator-fixed"; +			reg = <12>; +			regulator-name = "+5V_HDMI_CON"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			gpio = <&gpio TEGRA_GPIO(K, 6) GPIO_ACTIVE_HIGH>; +			enable-active-high; +			vin-supply = <&vdd_5v0_sys>; +		}; +	}; + +	sound { +		compatible = "nvidia,tegra-audio-max98090-nyan-big", +			     "nvidia,tegra-audio-max98090"; +		nvidia,model = "Acer Chromebook 13"; + +		nvidia,audio-routing = +			"Headphones", "HPR", +			"Headphones", "HPL", +			"Speakers", "SPKR", +			"Speakers", "SPKL", +			"Mic Jack", "MICBIAS", +			"DMICL", "Int Mic", +			"DMICR", "Int Mic", +			"IN34", "Mic Jack"; + +		nvidia,i2s-controller = <&tegra_i2s1>; +		nvidia,audio-codec = <&acodec>; + +		clocks = <&tegra_car TEGRA124_CLK_PLL_A>, +			 <&tegra_car TEGRA124_CLK_PLL_A_OUT0>, +			 <&tegra_car TEGRA124_CLK_EXTERN1>; +		clock-names = "pll_a", "pll_a_out0", "mclk"; + +		nvidia,hp-det-gpios = <&gpio TEGRA_GPIO(I, 7) GPIO_ACTIVE_HIGH>; +	}; +}; + +#include "cros-ec-keyboard.dtsi" diff --git a/arch/arm/boot/dts/tegra124-venice2.dts b/arch/arm/boot/dts/tegra124-venice2.dts index 70ad91d1a20b..13008858e967 100644 --- a/arch/arm/boot/dts/tegra124-venice2.dts +++ b/arch/arm/boot/dts/tegra124-venice2.dts @@ -36,17 +36,17 @@  			nvidia,panel = <&panel>;  		}; -		dpaux: dpaux@0,545c0000 { +		dpaux@0,545c0000 {  			vdd-supply = <&vdd_3v3_panel>;  			status = "okay";  		};  	};  	pinmux: pinmux@0,70000868 { -		pinctrl-names = "default"; -		pinctrl-0 = <&pinmux_default>; +		pinctrl-names = "boot"; +		pinctrl-0 = <&pinmux_boot>; -		pinmux_default: common { +		pinmux_boot: common {  			dap_mclk1_pw4 {  				nvidia,pins = "dap_mclk1_pw4";  				nvidia,function = "extperiph1"; @@ -587,7 +587,7 @@  		status = "okay";  	}; -	pwm: pwm@0,7000a000 { +	pwm@0,7000a000 {  		status = "okay";  	}; @@ -606,6 +606,14 @@  	i2c@0,7000c400 {  		status = "okay";  		clock-frequency = <100000>; + +		trackpad@4b { +			compatible = "atmel,maxtouch"; +			reg = <0x4b>; +			interrupt-parent = <&gpio>; +			interrupts = <TEGRA_GPIO(W, 3) IRQ_TYPE_LEVEL_LOW>; +			linux,gpio-keymap = <0 0 0 BTN_LEFT>; +		};  	};  	i2c@0,7000c500 { diff --git a/arch/arm/boot/dts/tegra124.dtsi b/arch/arm/boot/dts/tegra124.dtsi index 03916efd6fa9..478c555ebd96 100644 --- a/arch/arm/boot/dts/tegra124.dtsi +++ b/arch/arm/boot/dts/tegra124.dtsi @@ -12,6 +12,72 @@  	#address-cells = <2>;  	#size-cells = <2>; +	pcie-controller@0,01003000 { +		compatible = "nvidia,tegra124-pcie"; +		device_type = "pci"; +		reg = <0x0 0x01003000 0x0 0x00000800   /* PADS registers */ +		       0x0 0x01003800 0x0 0x00000800   /* AFI registers */ +		       0x0 0x02000000 0x0 0x10000000>; /* configuration space */ +		reg-names = "pads", "afi", "cs"; +		interrupts = <GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>, /* controller interrupt */ +			     <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>; /* MSI interrupt */ +		interrupt-names = "intr", "msi"; + +		#interrupt-cells = <1>; +		interrupt-map-mask = <0 0 0 0>; +		interrupt-map = <0 0 0 0 &gic GIC_SPI 98 IRQ_TYPE_LEVEL_HIGH>; + +		bus-range = <0x00 0xff>; +		#address-cells = <3>; +		#size-cells = <2>; + +		ranges = <0x82000000 0 0x01000000 0x0 0x01000000 0 0x00001000   /* port 0 configuration space */ +			  0x82000000 0 0x01001000 0x0 0x01001000 0 0x00001000   /* port 1 configuration space */ +			  0x81000000 0 0x0        0x0 0x12000000 0 0x00010000   /* downstream I/O (64 KiB) */ +			  0x82000000 0 0x13000000 0x0 0x13000000 0 0x0d000000   /* non-prefetchable memory (208 MiB) */ +			  0xc2000000 0 0x20000000 0x0 0x20000000 0 0x20000000>; /* prefetchable memory (512 MiB) */ + +		clocks = <&tegra_car TEGRA124_CLK_PCIE>, +			 <&tegra_car TEGRA124_CLK_AFI>, +			 <&tegra_car TEGRA124_CLK_PLL_E>, +			 <&tegra_car TEGRA124_CLK_CML0>; +		clock-names = "pex", "afi", "pll_e", "cml"; +		resets = <&tegra_car 70>, +			 <&tegra_car 72>, +			 <&tegra_car 74>; +		reset-names = "pex", "afi", "pcie_x"; +		status = "disabled"; + +		phys = <&padctl TEGRA_XUSB_PADCTL_PCIE>; +		phy-names = "pcie"; + +		pci@1,0 { +			device_type = "pci"; +			assigned-addresses = <0x82000800 0 0x01000000 0 0x1000>; +			reg = <0x000800 0 0 0 0>; +			status = "disabled"; + +			#address-cells = <3>; +			#size-cells = <2>; +			ranges; + +			nvidia,num-lanes = <2>; +		}; + +		pci@2,0 { +			device_type = "pci"; +			assigned-addresses = <0x82001000 0 0x01001000 0 0x1000>; +			reg = <0x001000 0 0 0 0>; +			status = "disabled"; + +			#address-cells = <3>; +			#size-cells = <2>; +			ranges; + +			nvidia,num-lanes = <1>; +		}; +	}; +  	host1x@0,50000000 {  		compatible = "nvidia,tegra124-host1x", "simple-bus";  		reg = <0x0 0x50000000 0x0 0x00034000>; @@ -78,7 +144,7 @@  			status = "disabled";  		}; -		dpaux@0,545c0000 { +		dpaux: dpaux@0,545c0000 {  			compatible = "nvidia,tegra124-dpaux";  			reg = <0x0 0x545c0000 0x0 0x00040000>;  			interrupts = <GIC_SPI 159 IRQ_TYPE_LEVEL_HIGH>; @@ -137,6 +203,11 @@  		#reset-cells = <1>;  	}; +	flow-controller@0,60007000 { +		compatible = "nvidia,tegra124-flowctrl"; +		reg = <0x0 0x60007000 0x0 0x1000>; +	}; +  	gpio: gpio@0,6000d000 {  		compatible = "nvidia,tegra124-gpio", "nvidia,tegra30-gpio";  		reg = <0x0 0x6000d000 0x0 0x1000>; @@ -267,7 +338,7 @@  		status = "disabled";  	}; -	pwm@0,7000a000 { +	pwm: pwm@0,7000a000 {  		compatible = "nvidia,tegra124-pwm", "nvidia,tegra20-pwm";  		reg = <0x0 0x7000a000 0x0 0x100>;  		#pwm-cells = <2>; @@ -480,6 +551,31 @@  		reset-names = "fuse";  	}; +	sata@0,70020000 { +		compatible = "nvidia,tegra124-ahci"; + +		reg = <0x0 0x70027000 0x0 0x2000>, /* AHCI */ +			<0x0 0x70020000 0x0 0x7000>; /* SATA */ + +		interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; + +		clocks = <&tegra_car TEGRA124_CLK_SATA>, +			<&tegra_car TEGRA124_CLK_SATA_OOB>, +			<&tegra_car TEGRA124_CLK_CML1>, +			<&tegra_car TEGRA124_CLK_PLL_E>; +		clock-names = "sata", "sata-oob", "cml1", "pll_e"; + +		resets = <&tegra_car 124>, +			<&tegra_car 123>, +			<&tegra_car 129>; +		reset-names = "sata", "sata-oob", "sata-cold"; + +		phys = <&padctl TEGRA_XUSB_PADCTL_SATA>; +		phy-names = "sata-phy"; + +		status = "disabled"; +	}; +  	hda@0,70030000 {  		compatible = "nvidia,tegra124-hda", "nvidia,tegra30-hda";  		reg = <0x0 0x70030000 0x0 0x10000>; diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 1908f6937e53..3b374c49d04d 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi @@ -190,6 +190,11 @@  		#reset-cells = <1>;  	}; +	flow-controller@60007000 { +		compatible = "nvidia,tegra20-flowctrl"; +		reg = <0x60007000 0x1000>; +	}; +  	apbdma: dma@6000a000 {  		compatible = "nvidia,tegra20-apbdma";  		reg = <0x6000a000 0x1200>; diff --git a/arch/arm/boot/dts/tegra30-apalis.dtsi b/arch/arm/boot/dts/tegra30-apalis.dtsi index 8adaa7871dd3..a5446cba9804 100644 --- a/arch/arm/boot/dts/tegra30-apalis.dtsi +++ b/arch/arm/boot/dts/tegra30-apalis.dtsi @@ -423,7 +423,7 @@  			vcc4-supply = <&sys_3v3_reg>;  			vcc5-supply = <&sys_3v3_reg>;  			vcc6-supply = <&vio_reg>; -			vcc7-supply = <&sys_5v0_reg>; +			vcc7-supply = <&charge_pump_5v0_reg>;  			vccio-supply = <&sys_3v3_reg>;  			regulators { @@ -674,5 +674,14 @@  			regulator-max-microvolt = <3300000>;  			regulator-always-on;  		}; + +		charge_pump_5v0_reg: regulator@101 { +			compatible = "regulator-fixed"; +			reg = <101>; +			regulator-name = "5v0"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			regulator-always-on; +		};  	};  }; diff --git a/arch/arm/boot/dts/tegra30-colibri.dtsi b/arch/arm/boot/dts/tegra30-colibri.dtsi index bf16f8e65627..c4ed1bec4d92 100644 --- a/arch/arm/boot/dts/tegra30-colibri.dtsi +++ b/arch/arm/boot/dts/tegra30-colibri.dtsi @@ -201,7 +201,7 @@  			vcc4-supply = <&sys_3v3_reg>;  			vcc5-supply = <&sys_3v3_reg>;  			vcc6-supply = <&vio_reg>; -			vcc7-supply = <&sys_5v0_reg>; +			vcc7-supply = <&charge_pump_5v0_reg>;  			vccio-supply = <&sys_3v3_reg>;  			regulators { @@ -373,5 +373,14 @@  			regulator-max-microvolt = <3300000>;  			regulator-always-on;  		}; + +		charge_pump_5v0_reg: regulator@101 { +			compatible = "regulator-fixed"; +			reg = <101>; +			regulator-name = "5v0"; +			regulator-min-microvolt = <5000000>; +			regulator-max-microvolt = <5000000>; +			regulator-always-on; +		};  	};  }; diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 6b35c29278d7..aa6ccea13d30 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi @@ -272,6 +272,11 @@  		#reset-cells = <1>;  	}; +	flow-controller@60007000 { +		compatible = "nvidia,tegra30-flowctrl"; +		reg = <0x60007000 0x1000>; +	}; +  	apbdma: dma@6000a000 {  		compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma";  		reg = <0x6000a000 0x1400>; diff --git a/arch/arm/boot/dts/twl6030.dtsi b/arch/arm/boot/dts/twl6030.dtsi index 2e3bd3172b23..55eb35f068fb 100644 --- a/arch/arm/boot/dts/twl6030.dtsi +++ b/arch/arm/boot/dts/twl6030.dtsi @@ -83,10 +83,6 @@  		regulator-always-on;  	}; -	clk32kg: regulator-clk32kg { -		compatible = "ti,twl6030-clk32kg"; -	}; -  	twl_usb_comparator: usb-comparator {  		compatible = "ti,twl6030-usb";  		interrupts = <4>, <10>; diff --git a/arch/arm/boot/dts/vf610-colibri-eval-v3.dts b/arch/arm/boot/dts/vf610-colibri-eval-v3.dts new file mode 100644 index 000000000000..7fb306679341 --- /dev/null +++ b/arch/arm/boot/dts/vf610-colibri-eval-v3.dts @@ -0,0 +1,46 @@ +/* + * Copyright 2014 Toradex AG + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +/dts-v1/; +#include "vf610-colibri.dtsi" + +/ { +	model = "Toradex Colibri VF61 on Colibri Evaluation Board"; +	compatible = "toradex,vf610-colibri_vf61-on-eval", "toradex,vf610-colibri_vf61", "fsl,vf610"; + +	chosen { +		bootargs = "console=ttyLP0,115200"; +	}; +}; + +&esdhc1 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_esdhc1>; +	bus-width = <4>; +	status = "okay"; +}; + +&fec1 { +	phy-mode = "rmii"; +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_fec1>; +	status = "okay"; +}; + +&uart0 { +	status = "okay"; +}; + +&uart1 { +	status = "okay"; +}; + +&uart2 { +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/vf610-colibri.dts b/arch/arm/boot/dts/vf610-colibri.dtsi index aecc7dbc65e8..0cd83434b073 100644 --- a/arch/arm/boot/dts/vf610-colibri.dts +++ b/arch/arm/boot/dts/vf610-colibri.dtsi @@ -7,16 +7,11 @@   * (at your option) any later version.   */ -/dts-v1/;  #include "vf610.dtsi"  / {  	model = "Toradex Colibri VF61 COM"; -	compatible = "toradex,vf610-colibri", "fsl,vf610"; - -	chosen { -		bootargs = "console=ttyLP0,115200"; -	}; +	compatible = "toradex,vf610-colibri_vf61", "fsl,vf610";  	memory {  		reg = <0x80000000 0x10000000>; @@ -36,14 +31,12 @@  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_esdhc1>;  	bus-width = <4>; -	status = "okay";  };  &fec1 {  	phy-mode = "rmii";  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_fec1>; -	status = "okay";  };  &L2 { @@ -54,25 +47,32 @@  &uart0 {  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_uart0>; -	status = "okay";  };  &uart1 {  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_uart1>; -	status = "okay";  };  &uart2 {  	pinctrl-names = "default";  	pinctrl-0 = <&pinctrl_uart2>; +}; + +&usbdev0 { +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	disable-over-current;  	status = "okay";  };  &iomuxc {  	vf610-colibri {  		pinctrl_esdhc1: esdhc1grp { -			fsl,fsl,pins = < +			fsl,pins = <  				VF610_PAD_PTA24__ESDHC1_CLK	0x31ef  				VF610_PAD_PTA25__ESDHC1_CMD	0x31ef  				VF610_PAD_PTA26__ESDHC1_DAT0	0x31ef diff --git a/arch/arm/boot/dts/vf610-twr.dts b/arch/arm/boot/dts/vf610-twr.dts index 11d733406c7e..189b6975fe7d 100644 --- a/arch/arm/boot/dts/vf610-twr.dts +++ b/arch/arm/boot/dts/vf610-twr.dts @@ -76,7 +76,6 @@  		simple-audio-card,cpu {  			sound-dai = <&sai2>; -			master-clkdir-out;  			frame-master;  			bitclock-master;  		}; @@ -168,7 +167,7 @@  		};  		pinctrl_esdhc1: esdhc1grp { -			fsl,fsl,pins = < +			fsl,pins = <  				VF610_PAD_PTA24__ESDHC1_CLK	0x31ef  				VF610_PAD_PTA25__ESDHC1_CMD	0x31ef  				VF610_PAD_PTA26__ESDHC1_DAT0	0x31ef @@ -221,8 +220,6 @@  				VF610_PAD_PTB1__FTM0_CH1		0x1582  				VF610_PAD_PTB2__FTM0_CH2		0x1582  				VF610_PAD_PTB3__FTM0_CH3		0x1582 -				VF610_PAD_PTB6__FTM0_CH6		0x1582 -				VF610_PAD_PTB7__FTM0_CH7		0x1582  			>;  		}; @@ -244,6 +241,13 @@  				VF610_PAD_PTB5__UART1_RX		0x21a1  			>;  		}; + +		pinctrl_uart2: uart2grp { +			fsl,pins = < +				VF610_PAD_PTB6__UART2_TX		0x21a2 +				VF610_PAD_PTB7__UART2_RX		0x21a1 +			>; +		};  	};  }; @@ -265,3 +269,19 @@  	pinctrl-0 = <&pinctrl_uart1>;  	status = "okay";  }; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&pinctrl_uart2>; +	status = "okay"; +}; + +&usbdev0 { +	disable-over-current; +	status = "okay"; +}; + +&usbh1 { +	disable-over-current; +	status = "okay"; +}; diff --git a/arch/arm/boot/dts/vf610.dtsi b/arch/arm/boot/dts/vf610.dtsi index 583dd363c9dc..4d2ec32de96f 100644 --- a/arch/arm/boot/dts/vf610.dtsi +++ b/arch/arm/boot/dts/vf610.dtsi @@ -27,6 +27,8 @@  		gpio2 = &gpio3;  		gpio3 = &gpio4;  		gpio4 = &gpio5; +		usbphy0 = &usbphy0; +		usbphy1 = &usbphy1;  	};  	cpus { @@ -297,9 +299,25 @@  				gpio-ranges = <&iomuxc 0 128 7>;  			}; -			anatop@40050000 { -				compatible = "fsl,vf610-anatop"; -				reg = <0x40050000 0x1000>; +			anatop: anatop@40050000 { +				compatible = "fsl,vf610-anatop", "syscon"; +				reg = <0x40050000 0x400>; +			}; + +			usbphy0: usbphy@40050800 { +				compatible = "fsl,vf610-usbphy"; +				reg = <0x40050800 0x400>; +				interrupts = <0 50 IRQ_TYPE_LEVEL_HIGH>; +				clocks = <&clks VF610_CLK_USBPHY0>; +				fsl,anatop = <&anatop>; +			}; + +			usbphy1: usbphy@40050c00 { +				compatible = "fsl,vf610-usbphy"; +				reg = <0x40050c00 0x400>; +				interrupts = <0 51 IRQ_TYPE_LEVEL_HIGH>; +				clocks = <&clks VF610_CLK_USBPHY1>; +				fsl,anatop = <&anatop>;  			};  			i2c0: i2c@40066000 { @@ -321,6 +339,24 @@  				reg = <0x4006b000 0x1000>;  				#clock-cells = <1>;  			}; + +			usbdev0: usb@40034000 { +				compatible = "fsl,vf610-usb", "fsl,imx27-usb"; +				reg = <0x40034000 0x800>; +				interrupts = <0 75 IRQ_TYPE_LEVEL_HIGH>; +				clocks = <&clks VF610_CLK_USBC0>; +				fsl,usbphy = <&usbphy0>; +				fsl,usbmisc = <&usbmisc0 0>; +				dr_mode = "peripheral"; +				status = "disabled"; +			}; + +			usbmisc0: usb@40034800 { +				#index-cells = <1>; +				compatible = "fsl,vf610-usbmisc"; +				reg = <0x40034800 0x200>; +				clocks = <&clks VF610_CLK_USBC0>; +			};  		};  		aips1: aips-bus@40080000 { @@ -383,6 +419,24 @@  				status = "disabled";  			}; +			usbh1: usb@400b4000 { +				compatible = "fsl,vf610-usb", "fsl,imx27-usb"; +				reg = <0x400b4000 0x800>; +				interrupts = <0 76 IRQ_TYPE_LEVEL_HIGH>; +				clocks = <&clks VF610_CLK_USBC1>; +				fsl,usbphy = <&usbphy1>; +				fsl,usbmisc = <&usbmisc1 0>; +				dr_mode = "host"; +				status = "disabled"; +			}; + +			usbmisc1: usb@400b4800 { +				#index-cells = <1>; +				compatible = "fsl,vf610-usbmisc"; +				reg = <0x400b4800 0x200>; +				clocks = <&clks VF610_CLK_USBC1>; +			}; +  			ftm: ftm@400b8000 {  				compatible = "fsl,ftm-timer";  				reg = <0x400b8000 0x1000 0x400b9000 0x1000>; diff --git a/arch/arm/boot/dts/zynq-7000.dtsi b/arch/arm/boot/dts/zynq-7000.dtsi index 6cc83d4c6c76..5e68c241ab8b 100644 --- a/arch/arm/boot/dts/zynq-7000.dtsi +++ b/arch/arm/boot/dts/zynq-7000.dtsi @@ -195,6 +195,8 @@  			interrupts = <0 22 4>;  			clocks = <&clkc 30>, <&clkc 30>, <&clkc 13>;  			clock-names = "pclk", "hclk", "tx_clk"; +			#address-cells = <1>; +			#size-cells = <0>;  		};  		gem1: ethernet@e000c000 { @@ -204,6 +206,8 @@  			interrupts = <0 45 4>;  			clocks = <&clkc 31>, <&clkc 31>, <&clkc 14>;  			clock-names = "pclk", "hclk", "tx_clk"; +			#address-cells = <1>; +			#size-cells = <0>;  		};  		sdhci0: sdhci@e0100000 { @@ -214,7 +218,7 @@  			interrupt-parent = <&intc>;  			interrupts = <0 24 4>;  			reg = <0xe0100000 0x1000>; -		} ; +		};  		sdhci1: sdhci@e0101000 {  			compatible = "arasan,sdhci-8.9a"; @@ -224,7 +228,7 @@  			interrupt-parent = <&intc>;  			interrupts = <0 47 4>;  			reg = <0xe0101000 0x1000>; -		} ; +		};  		slcr: slcr@f8000000 {  			#address-cells = <1>; @@ -256,6 +260,8 @@  			compatible = "arm,pl330", "arm,primecell";  			reg = <0xf8003000 0x1000>;  			interrupt-parent = <&intc>; +			interrupt-names = "abort", "dma0", "dma1", "dma2", "dma3", +				"dma4", "dma5", "dma6", "dma7";  			interrupts = <0 13 4>,  			             <0 14 4>, <0 15 4>,  			             <0 16 4>, <0 17 4>, @@ -271,7 +277,7 @@  		devcfg: devcfg@f8007000 {  			compatible = "xlnx,zynq-devcfg-1.0";  			reg = <0xf8007000 0x100>; -		} ; +		};  		global_timer: timer@f8f00200 {  			compatible = "arm,cortex-a9-global-timer"; @@ -303,6 +309,6 @@  			compatible = "arm,cortex-a9-twd-timer";  			reg = <0xf8f00600 0x20>;  			clocks = <&clkc 4>; -		} ; +		};  	};  }; diff --git a/arch/arm/boot/dts/zynq-parallella.dts b/arch/arm/boot/dts/zynq-parallella.dts index 41afd9da6876..e1f51ca127fe 100644 --- a/arch/arm/boot/dts/zynq-parallella.dts +++ b/arch/arm/boot/dts/zynq-parallella.dts @@ -25,7 +25,7 @@  	memory {  		device_type = "memory"; -		reg = <0 0x40000000>; +		reg = <0x0 0x40000000>;  	};  	chosen { @@ -38,8 +38,6 @@  	status = "okay";  	phy-mode = "rgmii-id";  	phy-handle = <ðernet_phy>; -	#address-cells = <1>; -	#size-cells = <0>;  	ethernet_phy: ethernet-phy@0 {  		/* Marvell 88E1318 */ @@ -53,6 +51,29 @@  &i2c0 {  	status = "okay"; + +	isl9305: isl9305@68 { +		compatible = "isl,isl9305"; +		reg = <0x68>; + +		regulators { +			dcd1 { +				regulator-name = "VDD_DSP"; +				regulator-always-on; +			}; +			dcd2 { +				regulator-name = "1P35V"; +				regulator-always-on; +			}; +			ldo1 { +				regulator-name = "VDD_ADJ"; +			}; +			ldo2 { +				regulator-name = "VDD_GPIO"; +				regulator-always-on; +			}; +		}; +	};  };  &sdhci1 { diff --git a/arch/arm/boot/dts/zynq-zc702.dts b/arch/arm/boot/dts/zynq-zc702.dts index 835c3089c61c..94e2cda6f9b6 100644 --- a/arch/arm/boot/dts/zynq-zc702.dts +++ b/arch/arm/boot/dts/zynq-zc702.dts @@ -1,5 +1,5 @@  /* - *  Copyright (C) 2011 Xilinx + *  Copyright (C) 2011 - 2014 Xilinx   *  Copyright (C) 2012 National Instruments Corp.   *   * This software is licensed under the terms of the GNU General Public @@ -27,6 +27,15 @@  		bootargs = "console=ttyPS0,115200 earlyprintk";  	}; +	leds { +		compatible = "gpio-leds"; + +		ds23 { +			label = "ds23"; +			gpios = <&gpio0 10 0>; +			linux,default-trigger = "heartbeat"; +		}; +	};  };  &can0 { @@ -35,7 +44,12 @@  &gem0 {  	status = "okay"; -	phy-mode = "rgmii"; +	phy-mode = "rgmii-id"; +	phy-handle = <ðernet_phy>; + +	ethernet_phy: ethernet-phy@7 { +		reg = <7>; +	};  };  &i2c0 { diff --git a/arch/arm/boot/dts/zynq-zc706.dts b/arch/arm/boot/dts/zynq-zc706.dts index 4cc9913078cd..a8bbdfbc7093 100644 --- a/arch/arm/boot/dts/zynq-zc706.dts +++ b/arch/arm/boot/dts/zynq-zc706.dts @@ -1,7 +1,6 @@  /* - *  Copyright (C) 2011 Xilinx + *  Copyright (C) 2011 - 2014 Xilinx   *  Copyright (C) 2012 National Instruments Corp. - *  Copyright (C) 2013 Xilinx   *   * This software is licensed under the terms of the GNU General Public   * License version 2, as published by the Free Software Foundation, and @@ -21,7 +20,7 @@  	memory {  		device_type = "memory"; -		reg = <0 0x40000000>; +		reg = <0x0 0x40000000>;  	};  	chosen { @@ -32,7 +31,12 @@  &gem0 {  	status = "okay"; -	phy-mode = "rgmii"; +	phy-mode = "rgmii-id"; +	phy-handle = <ðernet_phy>; + +	ethernet_phy: ethernet-phy@7 { +		reg = <7>; +	};  };  &i2c0 { diff --git a/arch/arm/boot/dts/zynq-zed.dts b/arch/arm/boot/dts/zynq-zed.dts index 82d7ef1a9a9c..697779a353ed 100644 --- a/arch/arm/boot/dts/zynq-zed.dts +++ b/arch/arm/boot/dts/zynq-zed.dts @@ -1,7 +1,6 @@  /* - *  Copyright (C) 2011 Xilinx + *  Copyright (C) 2011 - 2014 Xilinx   *  Copyright (C) 2012 National Instruments Corp. - *  Copyright (C) 2013 Xilinx   *   * This software is licensed under the terms of the GNU General Public   * License version 2, as published by the Free Software Foundation, and @@ -17,11 +16,11 @@  / {  	model = "Zynq Zed Development Board"; -	compatible = "xlnx,zynq-7000"; +	compatible = "xlnx,zynq-zed", "xlnx,zynq-7000";  	memory {  		device_type = "memory"; -		reg = <0 0x20000000>; +		reg = <0x0 0x20000000>;  	};  	chosen { @@ -32,7 +31,12 @@  &gem0 {  	status = "okay"; -	phy-mode = "rgmii"; +	phy-mode = "rgmii-id"; +	phy-handle = <ðernet_phy>; + +	ethernet_phy: ethernet-phy@0 { +		reg = <0>; +	};  };  &sdhci0 { diff --git a/arch/arm/configs/imx_v4_v5_defconfig b/arch/arm/configs/imx_v4_v5_defconfig index 63bde0efc041..e688741c89aa 100644 --- a/arch/arm/configs/imx_v4_v5_defconfig +++ b/arch/arm/configs/imx_v4_v5_defconfig @@ -21,8 +21,6 @@ CONFIG_ARCH_MULTI_V4T=y  CONFIG_ARCH_MULTI_V5=y  # CONFIG_ARCH_MULTI_V7 is not set  CONFIG_ARCH_MXC=y -CONFIG_MXC_IRQ_PRIOR=y -CONFIG_ARCH_MX1ADS=y  CONFIG_MACH_SCB9328=y  CONFIG_MACH_APF9328=y  CONFIG_MACH_MX21ADS=y @@ -30,10 +28,6 @@ CONFIG_MACH_MX25_3DS=y  CONFIG_MACH_EUKREA_CPUIMX25SD=y  CONFIG_MACH_IMX25_DT=y  CONFIG_MACH_MX27ADS=y -CONFIG_MACH_PCM038=y -CONFIG_MACH_CPUIMX27=y -CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2=y -CONFIG_MACH_EUKREA_CPUIMX27_USEUART4=y  CONFIG_MACH_MX27_3DS=y  CONFIG_MACH_IMX27_VISSTRIM_M10=y  CONFIG_MACH_PCA100=y @@ -43,8 +37,6 @@ CONFIG_PREEMPT=y  CONFIG_AEABI=y  CONFIG_ZBOOT_ROM_TEXT=0x0  CONFIG_ZBOOT_ROM_BSS=0x0 -CONFIG_FPE_NWFPE=y -CONFIG_FPE_NWFPE_XP=y  CONFIG_PM_DEBUG=y  CONFIG_NET=y  CONFIG_PACKET=y @@ -63,6 +55,7 @@ CONFIG_NETFILTER=y  CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"  CONFIG_DEVTMPFS=y  CONFIG_DEVTMPFS_MOUNT=y +CONFIG_IMX_WEIM=y  CONFIG_MTD=y  CONFIG_MTD_CMDLINE_PARTS=y  CONFIG_MTD_BLOCK=y @@ -78,8 +71,8 @@ CONFIG_MTD_NAND_MXC=y  CONFIG_MTD_UBI=y  CONFIG_EEPROM_AT24=y  CONFIG_EEPROM_AT25=y -CONFIG_ATA=y  CONFIG_BLK_DEV_SD=y +CONFIG_ATA=y  CONFIG_PATA_IMX=y  CONFIG_NETDEVICES=y  CONFIG_CS89x0=y @@ -102,10 +95,8 @@ CONFIG_SERIAL_8250=m  CONFIG_SERIAL_IMX=y  CONFIG_SERIAL_IMX_CONSOLE=y  # CONFIG_HW_RANDOM is not set -CONFIG_I2C=y  CONFIG_I2C_CHARDEV=y  CONFIG_I2C_IMX=y -CONFIG_SPI=y  CONFIG_SPI_IMX=y  CONFIG_SPI_SPIDEV=y  CONFIG_GPIO_SYSFS=y @@ -132,10 +123,7 @@ CONFIG_VIDEO_CODA=y  CONFIG_SOC_CAMERA_OV2640=y  CONFIG_FB=y  CONFIG_FB_IMX=y -CONFIG_BACKLIGHT_LCD_SUPPORT=y -CONFIG_LCD_CLASS_DEVICE=y  CONFIG_LCD_L4F00242T03=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y  CONFIG_FRAMEBUFFER_CONSOLE=y  CONFIG_LOGO=y  CONFIG_SOUND=y diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig index 16cfec4385c8..8fca6e276b69 100644 --- a/arch/arm/configs/imx_v6_v7_defconfig +++ b/arch/arm/configs/imx_v6_v7_defconfig @@ -32,8 +32,8 @@ CONFIG_MACH_IMX35_DT=y  CONFIG_MACH_PCM043=y  CONFIG_MACH_MX35_3DS=y  CONFIG_MACH_VPR200=y -CONFIG_SOC_IMX51=y  CONFIG_SOC_IMX50=y +CONFIG_SOC_IMX51=y  CONFIG_SOC_IMX53=y  CONFIG_SOC_IMX6Q=y  CONFIG_SOC_IMX6SL=y @@ -105,7 +105,6 @@ CONFIG_EEPROM_AT24=y  CONFIG_EEPROM_AT25=y  # CONFIG_SCSI_PROC_FS is not set  CONFIG_BLK_DEV_SD=y -CONFIG_SCSI_MULTI_LUN=y  CONFIG_SCSI_CONSTANTS=y  CONFIG_SCSI_LOGGING=y  CONFIG_SCSI_SCAN_ASYNC=y @@ -153,14 +152,12 @@ CONFIG_SERIAL_IMX_CONSOLE=y  CONFIG_SERIAL_FSL_LPUART=y  CONFIG_SERIAL_FSL_LPUART_CONSOLE=y  CONFIG_HW_RANDOM=y -CONFIG_HW_RANDOM_MXC_RNGA=y  # CONFIG_I2C_COMPAT is not set  CONFIG_I2C_CHARDEV=y  # CONFIG_I2C_HELPER_AUTO is not set  CONFIG_I2C_ALGOPCF=m  CONFIG_I2C_ALGOPCA=m  CONFIG_I2C_IMX=y -CONFIG_SPI=y  CONFIG_SPI_IMX=y  CONFIG_GPIO_SYSFS=y  CONFIG_GPIO_MC9S08DZ60=y @@ -198,7 +195,6 @@ CONFIG_BACKLIGHT_LCD_SUPPORT=y  CONFIG_LCD_CLASS_DEVICE=y  CONFIG_LCD_L4F00242T03=y  CONFIG_LCD_PLATFORM=y -CONFIG_BACKLIGHT_CLASS_DEVICE=y  CONFIG_BACKLIGHT_PWM=y  CONFIG_BACKLIGHT_GPIO=y  CONFIG_FRAMEBUFFER_CONSOLE=y @@ -206,6 +202,7 @@ CONFIG_LOGO=y  CONFIG_SOUND=y  CONFIG_SND=y  CONFIG_SND_SOC=y +CONFIG_SND_SOC_FSL_SAI=y  CONFIG_SND_IMX_SOC=y  CONFIG_SND_SOC_PHYCORE_AC97=y  CONFIG_SND_SOC_EUKREA_TLV320=y @@ -213,6 +210,7 @@ CONFIG_SND_SOC_IMX_WM8962=y  CONFIG_SND_SOC_IMX_SGTL5000=y  CONFIG_SND_SOC_IMX_SPDIF=y  CONFIG_SND_SOC_IMX_MC13783=y +CONFIG_SND_SIMPLE_CARD=y  CONFIG_USB=y  CONFIG_USB_EHCI_HCD=y  CONFIG_USB_EHCI_MXC=y @@ -240,6 +238,7 @@ CONFIG_LEDS_TRIGGER_BACKLIGHT=y  CONFIG_LEDS_TRIGGER_GPIO=y  CONFIG_RTC_CLASS=y  CONFIG_RTC_INTF_DEV_UIE_EMUL=y +CONFIG_RTC_DRV_ISL1208=y  CONFIG_RTC_DRV_PCF8563=y  CONFIG_RTC_DRV_MC13XXX=y  CONFIG_RTC_DRV_MXC=y @@ -254,7 +253,6 @@ CONFIG_DRM_IMX_FB_HELPER=y  CONFIG_DRM_IMX_PARALLEL_DISPLAY=y  CONFIG_DRM_IMX_TVE=y  CONFIG_DRM_IMX_LDB=y -CONFIG_DRM_IMX_IPUV3_CORE=y  CONFIG_DRM_IMX_IPUV3=y  CONFIG_DRM_IMX_HDMI=y  # CONFIG_IOMMU_SUPPORT is not set diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index fd43f7f55b70..79ecb4f34ffb 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h @@ -472,7 +472,6 @@ static inline void __sync_cache_range_r(volatile void *p, size_t size)  	"mcr	p15, 0, r0, c1, c0, 0	@ set SCTLR \n\t" \  	"isb	\n\t" \  	"bl	v7_flush_dcache_"__stringify(level)" \n\t" \ -	"clrex	\n\t" \  	"mrc	p15, 0, r0, c1, c0, 1	@ get ACTLR \n\t" \  	"bic	r0, r0, #(1 << 6)	@ disable local coherency \n\t" \  	"mcr	p15, 0, r0, c1, c0, 1	@ set ACTLR \n\t" \ diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index 963a2515906d..819777d0e91f 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h @@ -74,6 +74,7 @@  #define ARM_CPU_PART_CORTEX_A12		0x4100c0d0  #define ARM_CPU_PART_CORTEX_A17		0x4100c0e0  #define ARM_CPU_PART_CORTEX_A15		0x4100c0f0 +#define ARM_CPU_PART_MASK		0xff00fff0  #define ARM_CPU_XSCALE_ARCH_MASK	0xe000  #define ARM_CPU_XSCALE_ARCH_V1		0x2000 @@ -179,7 +180,7 @@ static inline unsigned int __attribute_const__ read_cpuid_implementor(void)   */  static inline unsigned int __attribute_const__ read_cpuid_part(void)  { -	return read_cpuid_id() & 0xff00fff0; +	return read_cpuid_id() & ARM_CPU_PART_MASK;  }  static inline unsigned int __attribute_const__ __deprecated read_cpuid_part_number(void) diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h index f4b46d39b9cf..afb9cafd3786 100644 --- a/arch/arm/include/asm/elf.h +++ b/arch/arm/include/asm/elf.h @@ -50,6 +50,7 @@ typedef struct user_fp elf_fpregset_t;  #define R_ARM_ABS32		2  #define R_ARM_CALL		28  #define R_ARM_JUMP24		29 +#define R_ARM_TARGET1		38  #define R_ARM_V4BX		40  #define R_ARM_PREL31		42  #define R_ARM_MOVW_ABS_NC	43 diff --git a/arch/arm/include/asm/smp_plat.h b/arch/arm/include/asm/smp_plat.h index a252c0bfacf5..0ad7d490ee6f 100644 --- a/arch/arm/include/asm/smp_plat.h +++ b/arch/arm/include/asm/smp_plat.h @@ -8,6 +8,7 @@  #include <linux/cpumask.h>  #include <linux/err.h> +#include <asm/cpu.h>  #include <asm/cputype.h>  /* @@ -25,6 +26,20 @@ static inline bool is_smp(void)  #endif  } +/** + * smp_cpuid_part() - return part id for a given cpu + * @cpu:	logical cpu id. + * + * Return: part id of logical cpu passed as argument. + */ +static inline unsigned int smp_cpuid_part(int cpu) +{ +	struct cpuinfo_arm *cpu_info = &per_cpu(cpu_data, cpu); + +	return is_smp() ? cpu_info->cpuid & ARM_CPU_PART_MASK : +			  read_cpuid_part(); +} +  /* all SMP configurations have the extended CPUID registers */  #ifndef CONFIG_MMU  #define tlb_ops_need_broadcast()	0 diff --git a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S index 8db307d0954b..2fdf8679b46e 100644 --- a/arch/arm/kernel/entry-header.S +++ b/arch/arm/kernel/entry-header.S @@ -208,26 +208,21 @@  #endif  	.endif  	msr	spsr_cxsf, \rpsr -#if defined(CONFIG_CPU_V6) -	ldr	r0, [sp] -	strex	r1, r2, [sp]			@ clear the exclusive monitor -	ldmib	sp, {r1 - pc}^			@ load r1 - pc, cpsr -#elif defined(CONFIG_CPU_32v6K) -	clrex					@ clear the exclusive monitor -	ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr -#else -	ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr +#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_32v6K) +	@ We must avoid clrex due to Cortex-A15 erratum #830321 +	sub	r0, sp, #4			@ uninhabited address +	strex	r1, r2, [r0]			@ clear the exclusive monitor  #endif +	ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr  	.endm  	.macro	restore_user_regs, fast = 0, offset = 0  	ldr	r1, [sp, #\offset + S_PSR]	@ get calling cpsr  	ldr	lr, [sp, #\offset + S_PC]!	@ get pc  	msr	spsr_cxsf, r1			@ save in spsr_svc -#if defined(CONFIG_CPU_V6) +#if defined(CONFIG_CPU_V6) || defined(CONFIG_CPU_32v6K) +	@ We must avoid clrex due to Cortex-A15 erratum #830321  	strex	r1, r2, [sp]			@ clear the exclusive monitor -#elif defined(CONFIG_CPU_32v6K) -	clrex					@ clear the exclusive monitor  #endif  	.if	\fast  	ldmdb	sp, {r1 - lr}^			@ get calling r1 - lr @@ -261,7 +256,10 @@  	.endif  	ldr	lr, [sp, #S_SP]			@ top of the stack  	ldrd	r0, r1, [sp, #S_LR]		@ calling lr and pc -	clrex					@ clear the exclusive monitor + +	@ We must avoid clrex due to Cortex-A15 erratum #830321 +	strex	r2, r1, [sp, #S_LR]		@ clear the exclusive monitor +  	stmdb	lr!, {r0, r1, \rpsr}		@ calling lr and rfe context  	ldmia	sp, {r0 - r12}  	mov	sp, lr @@ -282,13 +280,16 @@  	.endm  #else	/* ifdef CONFIG_CPU_V7M */  	.macro	restore_user_regs, fast = 0, offset = 0 -	clrex					@ clear the exclusive monitor  	mov	r2, sp  	load_user_sp_lr r2, r3, \offset + S_SP	@ calling sp, lr  	ldr	r1, [sp, #\offset + S_PSR]	@ get calling cpsr  	ldr	lr, [sp, #\offset + S_PC]	@ get pc  	add	sp, sp, #\offset + S_SP  	msr	spsr_cxsf, r1			@ save in spsr_svc + +	@ We must avoid clrex due to Cortex-A15 erratum #830321 +	strex	r1, r2, [sp]			@ clear the exclusive monitor +  	.if	\fast  	ldmdb	sp, {r1 - r12}			@ get calling r1 - r12  	.else diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c index 45e478157278..6a4dffefd357 100644 --- a/arch/arm/kernel/module.c +++ b/arch/arm/kernel/module.c @@ -91,6 +91,7 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,  			break;  		case R_ARM_ABS32: +		case R_ARM_TARGET1:  			*(u32 *)loc += sym->st_value;  			break; diff --git a/arch/arm/mach-at91/board-dt-sama5.c b/arch/arm/mach-at91/board-dt-sama5.c index 075ec0576ada..70b2504cd6dc 100644 --- a/arch/arm/mach-at91/board-dt-sama5.c +++ b/arch/arm/mach-at91/board-dt-sama5.c @@ -46,30 +46,8 @@ static void __init at91_dt_init_irq(void)  	of_irq_init(irq_of_match);  } -static int ksz9021rn_phy_fixup(struct phy_device *phy) -{ -	int value; - -	/* Set delay values */ -	value = MICREL_KSZ9021_RGMII_CLK_CTRL_PAD_SCEW | 0x8000; -	phy_write(phy, MICREL_KSZ9021_EXTREG_CTRL, value); -	value = 0xF2F4; -	phy_write(phy, MICREL_KSZ9021_EXTREG_DATA_WRITE, value); -	value = MICREL_KSZ9021_RGMII_RX_DATA_PAD_SCEW | 0x8000; -	phy_write(phy, MICREL_KSZ9021_EXTREG_CTRL, value); -	value = 0x2222; -	phy_write(phy, MICREL_KSZ9021_EXTREG_DATA_WRITE, value); - -	return 0; -} -  static void __init sama5_dt_device_init(void)  { -	if (of_machine_is_compatible("atmel,sama5d3xcm") && -	    IS_ENABLED(CONFIG_PHYLIB)) -		phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK, -			ksz9021rn_phy_fixup); -  	of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);  } diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile index 67c492aabf4d..b19a39652545 100644 --- a/arch/arm/mach-bcm/Makefile +++ b/arch/arm/mach-bcm/Makefile @@ -36,5 +36,4 @@ obj-$(CONFIG_ARCH_BCM_5301X)	+= bcm_5301x.o  ifeq ($(CONFIG_ARCH_BRCMSTB),y)  obj-y				+= brcmstb.o -obj-$(CONFIG_SMP)		+= headsmp-brcmstb.o platsmp-brcmstb.o  endif diff --git a/arch/arm/mach-bcm/brcmstb.h b/arch/arm/mach-bcm/brcmstb.h deleted file mode 100644 index ec0c3d112b36..000000000000 --- a/arch/arm/mach-bcm/brcmstb.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2013-2014 Broadcom Corporation - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation version 2. - * - * This program is distributed "as is" WITHOUT ANY WARRANTY of any - * kind, whether express or implied; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - */ - -#ifndef __BRCMSTB_H__ -#define __BRCMSTB_H__ - -void brcmstb_secondary_startup(void); - -#endif /* __BRCMSTB_H__ */ diff --git a/arch/arm/mach-bcm/headsmp-brcmstb.S b/arch/arm/mach-bcm/headsmp-brcmstb.S deleted file mode 100644 index 199c1ea58248..000000000000 --- a/arch/arm/mach-bcm/headsmp-brcmstb.S +++ /dev/null @@ -1,33 +0,0 @@ -/* - * SMP boot code for secondary CPUs - * Based on arch/arm/mach-tegra/headsmp.S - * - * Copyright (C) 2010 NVIDIA, Inc. - * Copyright (C) 2013-2014 Broadcom Corporation - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation version 2. - * - * This program is distributed "as is" WITHOUT ANY WARRANTY of any - * kind, whether express or implied; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - */ - -#include <asm/assembler.h> -#include <linux/linkage.h> -#include <linux/init.h> - -        .section ".text.head", "ax" - -ENTRY(brcmstb_secondary_startup) -        /* -         * Ensure CPU is in a sane state by disabling all IRQs and switching -         * into SVC mode. -         */ -        setmode	PSR_I_BIT | PSR_F_BIT | SVC_MODE, r0 - -        bl      v7_invalidate_l1 -        b       secondary_startup -ENDPROC(brcmstb_secondary_startup) diff --git a/arch/arm/mach-bcm/platsmp-brcmstb.c b/arch/arm/mach-bcm/platsmp-brcmstb.c deleted file mode 100644 index af780e9c23a6..000000000000 --- a/arch/arm/mach-bcm/platsmp-brcmstb.c +++ /dev/null @@ -1,363 +0,0 @@ -/* - * Broadcom STB CPU SMP and hotplug support for ARM - * - * Copyright (C) 2013-2014 Broadcom Corporation - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation version 2. - * - * This program is distributed "as is" WITHOUT ANY WARRANTY of any - * kind, whether express or implied; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - */ - -#include <linux/delay.h> -#include <linux/errno.h> -#include <linux/init.h> -#include <linux/io.h> -#include <linux/of_address.h> -#include <linux/of_platform.h> -#include <linux/printk.h> -#include <linux/regmap.h> -#include <linux/smp.h> -#include <linux/mfd/syscon.h> -#include <linux/spinlock.h> - -#include <asm/cacheflush.h> -#include <asm/cp15.h> -#include <asm/mach-types.h> -#include <asm/smp_plat.h> - -#include "brcmstb.h" - -enum { -	ZONE_MAN_CLKEN_MASK		= BIT(0), -	ZONE_MAN_RESET_CNTL_MASK	= BIT(1), -	ZONE_MAN_MEM_PWR_MASK		= BIT(4), -	ZONE_RESERVED_1_MASK		= BIT(5), -	ZONE_MAN_ISO_CNTL_MASK		= BIT(6), -	ZONE_MANUAL_CONTROL_MASK	= BIT(7), -	ZONE_PWR_DN_REQ_MASK		= BIT(9), -	ZONE_PWR_UP_REQ_MASK		= BIT(10), -	ZONE_BLK_RST_ASSERT_MASK	= BIT(12), -	ZONE_PWR_OFF_STATE_MASK		= BIT(25), -	ZONE_PWR_ON_STATE_MASK		= BIT(26), -	ZONE_DPG_PWR_STATE_MASK		= BIT(28), -	ZONE_MEM_PWR_STATE_MASK		= BIT(29), -	ZONE_RESET_STATE_MASK		= BIT(31), -	CPU0_PWR_ZONE_CTRL_REG		= 1, -	CPU_RESET_CONFIG_REG		= 2, -}; - -static void __iomem *cpubiuctrl_block; -static void __iomem *hif_cont_block; -static u32 cpu0_pwr_zone_ctrl_reg; -static u32 cpu_rst_cfg_reg; -static u32 hif_cont_reg; - -#ifdef CONFIG_HOTPLUG_CPU -static DEFINE_PER_CPU_ALIGNED(int, per_cpu_sw_state); - -static int per_cpu_sw_state_rd(u32 cpu) -{ -	sync_cache_r(SHIFT_PERCPU_PTR(&per_cpu_sw_state, per_cpu_offset(cpu))); -	return per_cpu(per_cpu_sw_state, cpu); -} - -static void per_cpu_sw_state_wr(u32 cpu, int val) -{ -	per_cpu(per_cpu_sw_state, cpu) = val; -	dmb(); -	sync_cache_w(SHIFT_PERCPU_PTR(&per_cpu_sw_state, per_cpu_offset(cpu))); -	dsb_sev(); -} -#else -static inline void per_cpu_sw_state_wr(u32 cpu, int val) { } -#endif - -static void __iomem *pwr_ctrl_get_base(u32 cpu) -{ -	void __iomem *base = cpubiuctrl_block + cpu0_pwr_zone_ctrl_reg; -	base += (cpu_logical_map(cpu) * 4); -	return base; -} - -static u32 pwr_ctrl_rd(u32 cpu) -{ -	void __iomem *base = pwr_ctrl_get_base(cpu); -	return readl_relaxed(base); -} - -static void pwr_ctrl_wr(u32 cpu, u32 val) -{ -	void __iomem *base = pwr_ctrl_get_base(cpu); -	writel(val, base); -} - -static void cpu_rst_cfg_set(u32 cpu, int set) -{ -	u32 val; -	val = readl_relaxed(cpubiuctrl_block + cpu_rst_cfg_reg); -	if (set) -		val |= BIT(cpu_logical_map(cpu)); -	else -		val &= ~BIT(cpu_logical_map(cpu)); -	writel_relaxed(val, cpubiuctrl_block + cpu_rst_cfg_reg); -} - -static void cpu_set_boot_addr(u32 cpu, unsigned long boot_addr) -{ -	const int reg_ofs = cpu_logical_map(cpu) * 8; -	writel_relaxed(0, hif_cont_block + hif_cont_reg + reg_ofs); -	writel_relaxed(boot_addr, hif_cont_block + hif_cont_reg + 4 + reg_ofs); -} - -static void brcmstb_cpu_boot(u32 cpu) -{ -	pr_info("SMP: Booting CPU%d...\n", cpu); - -	/* -	 * set the reset vector to point to the secondary_startup -	 * routine -	 */ -	cpu_set_boot_addr(cpu, virt_to_phys(brcmstb_secondary_startup)); - -	/* unhalt the cpu */ -	cpu_rst_cfg_set(cpu, 0); -} - -static void brcmstb_cpu_power_on(u32 cpu) -{ -	/* -	 * The secondary cores power was cut, so we must go through -	 * power-on initialization. -	 */ -	u32 tmp; - -	pr_info("SMP: Powering up CPU%d...\n", cpu); - -	/* Request zone power up */ -	pwr_ctrl_wr(cpu, ZONE_PWR_UP_REQ_MASK); - -	/* Wait for the power up FSM to complete */ -	do { -		tmp = pwr_ctrl_rd(cpu); -	} while (!(tmp & ZONE_PWR_ON_STATE_MASK)); - -	per_cpu_sw_state_wr(cpu, 1); -} - -static int brcmstb_cpu_get_power_state(u32 cpu) -{ -	int tmp = pwr_ctrl_rd(cpu); -	return (tmp & ZONE_RESET_STATE_MASK) ? 0 : 1; -} - -#ifdef CONFIG_HOTPLUG_CPU - -static void brcmstb_cpu_die(u32 cpu) -{ -	v7_exit_coherency_flush(all); - -	/* Prevent all interrupts from reaching this CPU. */ -	arch_local_irq_disable(); - -	/* -	 * Final full barrier to ensure everything before this instruction has -	 * quiesced. -	 */ -	isb(); -	dsb(); - -	per_cpu_sw_state_wr(cpu, 0); - -	/* Sit and wait to die */ -	wfi(); - -	/* We should never get here... */ -	panic("Spurious interrupt on CPU %d received!\n", cpu); -} - -static int brcmstb_cpu_kill(u32 cpu) -{ -	u32 tmp; - -	pr_info("SMP: Powering down CPU%d...\n", cpu); - -	while (per_cpu_sw_state_rd(cpu)) -		; - -	/* Program zone reset */ -	pwr_ctrl_wr(cpu, ZONE_RESET_STATE_MASK | ZONE_BLK_RST_ASSERT_MASK | -			      ZONE_PWR_DN_REQ_MASK); - -	/* Verify zone reset */ -	tmp = pwr_ctrl_rd(cpu); -	if (!(tmp & ZONE_RESET_STATE_MASK)) -		pr_err("%s: Zone reset bit for CPU %d not asserted!\n", -			__func__, cpu); - -	/* Wait for power down */ -	do { -		tmp = pwr_ctrl_rd(cpu); -	} while (!(tmp & ZONE_PWR_OFF_STATE_MASK)); - -	/* Settle-time from Broadcom-internal DVT reference code */ -	udelay(7); - -	/* Assert reset on the CPU */ -	cpu_rst_cfg_set(cpu, 1); - -	return 1; -} - -#endif /* CONFIG_HOTPLUG_CPU */ - -static int __init setup_hifcpubiuctrl_regs(struct device_node *np) -{ -	int rc = 0; -	char *name; -	struct device_node *syscon_np = NULL; - -	name = "syscon-cpu"; - -	syscon_np = of_parse_phandle(np, name, 0); -	if (!syscon_np) { -		pr_err("can't find phandle %s\n", name); -		rc = -EINVAL; -		goto cleanup; -	} - -	cpubiuctrl_block = of_iomap(syscon_np, 0); -	if (!cpubiuctrl_block) { -		pr_err("iomap failed for cpubiuctrl_block\n"); -		rc = -EINVAL; -		goto cleanup; -	} - -	rc = of_property_read_u32_index(np, name, CPU0_PWR_ZONE_CTRL_REG, -					&cpu0_pwr_zone_ctrl_reg); -	if (rc) { -		pr_err("failed to read 1st entry from %s property (%d)\n", name, -			rc); -		rc = -EINVAL; -		goto cleanup; -	} - -	rc = of_property_read_u32_index(np, name, CPU_RESET_CONFIG_REG, -					&cpu_rst_cfg_reg); -	if (rc) { -		pr_err("failed to read 2nd entry from %s property (%d)\n", name, -			rc); -		rc = -EINVAL; -		goto cleanup; -	} - -cleanup: -	if (syscon_np) -		of_node_put(syscon_np); - -	return rc; -} - -static int __init setup_hifcont_regs(struct device_node *np) -{ -	int rc = 0; -	char *name; -	struct device_node *syscon_np = NULL; - -	name = "syscon-cont"; - -	syscon_np = of_parse_phandle(np, name, 0); -	if (!syscon_np) { -		pr_err("can't find phandle %s\n", name); -		rc = -EINVAL; -		goto cleanup; -	} - -	hif_cont_block = of_iomap(syscon_np, 0); -	if (!hif_cont_block) { -		pr_err("iomap failed for hif_cont_block\n"); -		rc = -EINVAL; -		goto cleanup; -	} - -	/* offset is at top of hif_cont_block */ -	hif_cont_reg = 0; - -cleanup: -	if (syscon_np) -		of_node_put(syscon_np); - -	return rc; -} - -static void __init brcmstb_cpu_ctrl_setup(unsigned int max_cpus) -{ -	int rc; -	struct device_node *np; -	char *name; - -	name = "brcm,brcmstb-smpboot"; -	np = of_find_compatible_node(NULL, NULL, name); -	if (!np) { -		pr_err("can't find compatible node %s\n", name); -		return; -	} - -	rc = setup_hifcpubiuctrl_regs(np); -	if (rc) -		return; - -	rc = setup_hifcont_regs(np); -	if (rc) -		return; -} - -static DEFINE_SPINLOCK(boot_lock); - -static void brcmstb_secondary_init(unsigned int cpu) -{ -	/* -	 * Synchronise with the boot thread. -	 */ -	spin_lock(&boot_lock); -	spin_unlock(&boot_lock); -} - -static int brcmstb_boot_secondary(unsigned int cpu, struct task_struct *idle) -{ -	/* -	 * set synchronisation state between this boot processor -	 * and the secondary one -	 */ -	spin_lock(&boot_lock); - -	/* Bring up power to the core if necessary */ -	if (brcmstb_cpu_get_power_state(cpu) == 0) -		brcmstb_cpu_power_on(cpu); - -	brcmstb_cpu_boot(cpu); - -	/* -	 * now the secondary core is starting up let it run its -	 * calibrations, then wait for it to finish -	 */ -	spin_unlock(&boot_lock); - -	return 0; -} - -static struct smp_operations brcmstb_smp_ops __initdata = { -	.smp_prepare_cpus	= brcmstb_cpu_ctrl_setup, -	.smp_secondary_init	= brcmstb_secondary_init, -	.smp_boot_secondary	= brcmstb_boot_secondary, -#ifdef CONFIG_HOTPLUG_CPU -	.cpu_kill		= brcmstb_cpu_kill, -	.cpu_die		= brcmstb_cpu_die, -#endif -}; - -CPU_METHOD_OF_DECLARE(brcmstb_smp, "brcm,brahma-b15", &brcmstb_smp_ops); diff --git a/arch/arm/mach-davinci/da8xx-dt.c b/arch/arm/mach-davinci/da8xx-dt.c index ed1928740b5f..f703d82f08a8 100644 --- a/arch/arm/mach-davinci/da8xx-dt.c +++ b/arch/arm/mach-davinci/da8xx-dt.c @@ -46,6 +46,7 @@ static struct of_dev_auxdata da850_auxdata_lookup[] __initdata = {  	OF_DEV_AUXDATA("ti,davinci_mdio", 0x01e24000, "davinci_mdio.0", NULL),  	OF_DEV_AUXDATA("ti,davinci-dm6467-emac", 0x01e20000, "davinci_emac.1",  		       NULL), +	OF_DEV_AUXDATA("ti,da830-mcasp-audio", 0x01d00000, "davinci-mcasp.0", NULL),  	{}  }; diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c index b2f8b60cf0e9..dc9a764a7c37 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c @@ -43,7 +43,6 @@  	"mcr	p15, 0, r0, c1, c0, 0	@ set SCTLR\n\t" \  	"isb\n\t"\  	"bl	v7_flush_dcache_"__stringify(level)"\n\t" \ -	"clrex\n\t"\  	"mrc	p15, 0, r0, c1, c0, 1	@ get ACTLR\n\t" \  	"bic	r0, r0, #(1 << 6)	@ disable local coherency\n\t" \  	/* Dummy Load of a device register to avoid Erratum 799270 */ \ diff --git a/arch/arm/mach-imx/Kconfig b/arch/arm/mach-imx/Kconfig index 9de84a215abd..11b2957f792b 100644 --- a/arch/arm/mach-imx/Kconfig +++ b/arch/arm/mach-imx/Kconfig @@ -69,6 +69,7 @@ config SOC_IMX1  	select CPU_ARM920T  	select IMX_HAVE_IOMUX_V1  	select MXC_AVIC +	select PINCTRL_IMX1  config SOC_IMX21  	bool @@ -85,7 +86,6 @@ config SOC_IMX25  config SOC_IMX27  	bool -	select ARCH_HAS_OPP  	select CPU_ARM926T  	select IMX_HAVE_IOMUX_V1  	select MXC_AVIC @@ -109,17 +109,6 @@ config SOC_IMX35  if ARCH_MULTI_V4T  comment "MX1 platforms:" -config MACH_MXLADS -	bool - -config ARCH_MX1ADS -	bool "MX1ADS platform" -	select IMX_HAVE_PLATFORM_IMX_I2C -	select IMX_HAVE_PLATFORM_IMX_UART -	select MACH_MXLADS -	select SOC_IMX1 -	help -	  Say Y here if you are using Motorola MX1ADS/MXLADS boards  config MACH_SCB9328  	bool "Synertronixx scb9328" @@ -136,6 +125,13 @@ config MACH_APF9328  	help  	  Say Yes here if you are using the Armadeus APF9328 development board +config MACH_IMX1_DT +	bool "Support i.MX1 platforms from device tree" +	select SOC_IMX1 +	help +	  Include support for Freescale i.MX1 based platforms +	  using the device tree for discovery. +  endif  if ARCH_MULTI_V5 @@ -224,86 +220,6 @@ config MACH_MX27ADS  	  Include support for MX27ADS platform. This includes specific  	  configurations for the board and its peripherals. -config MACH_PCM038 -	bool "Phytec phyCORE-i.MX27 CPU module (pcm038)" -	select IMX_HAVE_PLATFORM_IMX2_WDT -	select IMX_HAVE_PLATFORM_IMX_I2C -	select IMX_HAVE_PLATFORM_IMX_UART -	select IMX_HAVE_PLATFORM_MXC_EHCI -	select IMX_HAVE_PLATFORM_MXC_NAND -	select IMX_HAVE_PLATFORM_MXC_W1 -	select IMX_HAVE_PLATFORM_SPI_IMX -	select USB_ULPI_VIEWPORT if USB_ULPI -	select SOC_IMX27 -	help -	  Include support for phyCORE-i.MX27 (aka pcm038) platform. This -	  includes specific configurations for the module and its peripherals. - -choice -	prompt "Baseboard" -	depends on MACH_PCM038 -	default MACH_PCM970_BASEBOARD - -config MACH_PCM970_BASEBOARD -	bool "PHYTEC PCM970 development board" -	select IMX_HAVE_PLATFORM_IMX_FB -	select IMX_HAVE_PLATFORM_MXC_MMC -	help -	  This adds board specific devices that can be found on Phytec's -	  PCM970 evaluation board. - -endchoice - -config MACH_CPUIMX27 -	bool "Eukrea CPUIMX27 module" -	select IMX_HAVE_PLATFORM_FSL_USB2_UDC -	select IMX_HAVE_PLATFORM_IMX2_WDT -	select IMX_HAVE_PLATFORM_IMX_I2C -	select IMX_HAVE_PLATFORM_IMX_UART -	select IMX_HAVE_PLATFORM_MXC_EHCI -	select IMX_HAVE_PLATFORM_MXC_NAND -	select IMX_HAVE_PLATFORM_MXC_W1 -	select USB_ULPI_VIEWPORT if USB_ULPI -	select SOC_IMX27 -	help -	  Include support for Eukrea CPUIMX27 platform. This includes -	  specific configurations for the module and its peripherals. - -config MACH_EUKREA_CPUIMX27_USESDHC2 -	bool "CPUIMX27 integrates SDHC2 module" -	depends on MACH_CPUIMX27 -	select IMX_HAVE_PLATFORM_MXC_MMC -	help -	  This adds support for the internal SDHC2 used on CPUIMX27 -	  for wifi or eMMC. - -config MACH_EUKREA_CPUIMX27_USEUART4 -	bool "CPUIMX27 integrates UART4 module" -	depends on MACH_CPUIMX27 -	help -	  This adds support for the internal UART4 used on CPUIMX27 -	  for bluetooth. - -choice -	prompt "Baseboard" -	depends on MACH_CPUIMX27 -	default MACH_EUKREA_MBIMX27_BASEBOARD - -config MACH_EUKREA_MBIMX27_BASEBOARD -	bool "Eukrea MBIMX27 development board" -	select IMX_HAVE_PLATFORM_IMX_FB -	select IMX_HAVE_PLATFORM_IMX_KEYPAD -	select IMX_HAVE_PLATFORM_IMX_SSI -	select IMX_HAVE_PLATFORM_IMX_UART -	select IMX_HAVE_PLATFORM_MXC_MMC -	select IMX_HAVE_PLATFORM_SPI_IMX -	select LEDS_GPIO_REGISTER -	help -	  This adds board specific devices that can be found on Eukrea's -	  MBIMX27 evaluation board. - -endchoice -  config MACH_MX27_3DS  	bool "MX27PDK platform"  	select IMX_HAVE_PLATFORM_FSL_USB2_UDC @@ -360,18 +276,6 @@ config MACH_PCA100  	  Include support for phyCARD-s (aka pca100) platform. This  	  includes specific configurations for the module and its peripherals. -config MACH_MXT_TD60 -	bool "Maxtrack i-MXT TD60" -	select IMX_HAVE_PLATFORM_IMX_FB -	select IMX_HAVE_PLATFORM_IMX_I2C -	select IMX_HAVE_PLATFORM_IMX_UART -	select IMX_HAVE_PLATFORM_MXC_MMC -	select IMX_HAVE_PLATFORM_MXC_NAND -	select SOC_IMX27 -	help -	  Include support for i-MXT (aka td60) platform. This -	  includes specific configurations for the module and its peripherals. -  config MACH_IMX27_DT  	bool "Support i.MX27 platforms from device tree"  	select SOC_IMX27 @@ -659,7 +563,6 @@ comment "Device tree only"  config SOC_IMX5  	bool -	select ARCH_HAS_OPP  	select HAVE_IMX_SRC  	select MXC_TZIC diff --git a/arch/arm/mach-imx/Makefile b/arch/arm/mach-imx/Makefile index ac88599ca080..6e4fcd8339cd 100644 --- a/arch/arm/mach-imx/Makefile +++ b/arch/arm/mach-imx/Makefile @@ -16,7 +16,8 @@ obj-$(CONFIG_SOC_IMX5) += cpu-imx5.o clk-imx51-imx53.o $(imx5-pm-y)  obj-$(CONFIG_COMMON_CLK) += clk-pllv1.o clk-pllv2.o clk-pllv3.o clk-gate2.o \  			    clk-pfd.o clk-busy.o clk.o \ -			    clk-fixup-div.o clk-fixup-mux.o +			    clk-fixup-div.o clk-fixup-mux.o \ +			    clk-gate-exclusive.o  obj-$(CONFIG_IMX_HAVE_IOMUX_V1) += iomux-v1.o  obj-$(CONFIG_ARCH_MXC_IOMUX_V3) += iomux-v3.o @@ -41,9 +42,9 @@ obj-y += ssi-fiq-ksym.o  endif  # i.MX1 based machines -obj-$(CONFIG_ARCH_MX1ADS) += mach-mx1ads.o  obj-$(CONFIG_MACH_SCB9328) += mach-scb9328.o  obj-$(CONFIG_MACH_APF9328) += mach-apf9328.o +obj-$(CONFIG_MACH_IMX1_DT) += imx1-dt.o  # i.MX21 based machines  obj-$(CONFIG_MACH_MX21ADS) += mach-mx21ads.o @@ -56,14 +57,9 @@ obj-$(CONFIG_MACH_IMX25_DT) += imx25-dt.o  # i.MX27 based machines  obj-$(CONFIG_MACH_MX27ADS) += mach-mx27ads.o -obj-$(CONFIG_MACH_PCM038) += mach-pcm038.o -obj-$(CONFIG_MACH_PCM970_BASEBOARD) += pcm970-baseboard.o  obj-$(CONFIG_MACH_MX27_3DS) += mach-mx27_3ds.o  obj-$(CONFIG_MACH_IMX27_VISSTRIM_M10) += mach-imx27_visstrim_m10.o -obj-$(CONFIG_MACH_CPUIMX27) += mach-cpuimx27.o -obj-$(CONFIG_MACH_EUKREA_MBIMX27_BASEBOARD) += eukrea_mbimx27-baseboard.o  obj-$(CONFIG_MACH_PCA100) += mach-pca100.o -obj-$(CONFIG_MACH_MXT_TD60) += mach-mxt_td60.o  obj-$(CONFIG_MACH_IMX27_DT) += imx27-dt.o  # i.MX31 based machines @@ -93,9 +89,11 @@ obj-$(CONFIG_HAVE_IMX_ANATOP) += anatop.o  obj-$(CONFIG_HAVE_IMX_GPC) += gpc.o  obj-$(CONFIG_HAVE_IMX_MMDC) += mmdc.o  obj-$(CONFIG_HAVE_IMX_SRC) += src.o +ifdef CONFIG_SOC_IMX6  AFLAGS_headsmp.o :=-Wa,-march=armv7-a  obj-$(CONFIG_SMP) += headsmp.o platsmp.o  obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o +endif  obj-$(CONFIG_SOC_IMX6Q) += clk-imx6q.o mach-imx6q.o  obj-$(CONFIG_SOC_IMX6SL) += clk-imx6sl.o mach-imx6sl.o  obj-$(CONFIG_SOC_IMX6SX) += clk-imx6sx.o mach-imx6sx.o diff --git a/arch/arm/mach-imx/anatop.c b/arch/arm/mach-imx/anatop.c index 4a40bbb46183..8259a625a920 100644 --- a/arch/arm/mach-imx/anatop.c +++ b/arch/arm/mach-imx/anatop.c @@ -104,6 +104,19 @@ void __init imx_init_revision_from_anatop(void)  	case 2:  		revision = IMX_CHIP_REVISION_1_2;  		break; +	case 3: +		revision = IMX_CHIP_REVISION_1_3; +		break; +	case 4: +		revision = IMX_CHIP_REVISION_1_4; +		break; +	case 5: +		/* +		 * i.MX6DQ TO1.5 is defined as Rev 1.3 in Data Sheet, marked +		 * as 'D' in Part Number last character. +		 */ +		revision = IMX_CHIP_REVISION_1_5; +		break;  	default:  		revision = IMX_CHIP_REVISION_UNKNOWN;  	} diff --git a/arch/arm/mach-imx/board-pcm038.h b/arch/arm/mach-imx/board-pcm038.h deleted file mode 100644 index 6f371e35753d..000000000000 --- a/arch/arm/mach-imx/board-pcm038.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -#ifndef __ASM_ARCH_MXC_BOARD_PCM038_H__ -#define __ASM_ARCH_MXC_BOARD_PCM038_H__ - -#ifndef __ASSEMBLY__ -/* - * This CPU module needs a baseboard to work. After basic initializing - * its own devices, it calls the baseboard's init function. - * TODO: Add your own baseboard init function and call it from - * inside pcm038_init(). - * - * This example here is for the development board. Refer pcm970-baseboard.c - */ - -extern void pcm970_baseboard_init(void); - -#endif - -#endif /* __ASM_ARCH_MXC_BOARD_PCM038_H__ */ diff --git a/arch/arm/mach-imx/clk-gate-exclusive.c b/arch/arm/mach-imx/clk-gate-exclusive.c new file mode 100644 index 000000000000..c12f5f2e04dc --- /dev/null +++ b/arch/arm/mach-imx/clk-gate-exclusive.c @@ -0,0 +1,94 @@ +/* + * Copyright 2014 Freescale Semiconductor, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ + +#include <linux/clk-provider.h> +#include <linux/err.h> +#include <linux/io.h> +#include <linux/slab.h> +#include "clk.h" + +/** + * struct clk_gate_exclusive - i.MX specific gate clock which is mutually + * exclusive with other gate clocks + * + * @gate: the parent class + * @exclusive_mask: mask of gate bits which are mutually exclusive to this + *	gate clock + * + * The imx exclusive gate clock is a subclass of basic clk_gate + * with an addtional mask to indicate which other gate bits in the same + * register is mutually exclusive to this gate clock. + */ +struct clk_gate_exclusive { +	struct clk_gate gate; +	u32 exclusive_mask; +}; + +static int clk_gate_exclusive_enable(struct clk_hw *hw) +{ +	struct clk_gate *gate = container_of(hw, struct clk_gate, hw); +	struct clk_gate_exclusive *exgate = container_of(gate, +					struct clk_gate_exclusive, gate); +	u32 val = readl(gate->reg); + +	if (val & exgate->exclusive_mask) +		return -EBUSY; + +	return clk_gate_ops.enable(hw); +} + +static void clk_gate_exclusive_disable(struct clk_hw *hw) +{ +	clk_gate_ops.disable(hw); +} + +static int clk_gate_exclusive_is_enabled(struct clk_hw *hw) +{ +	return clk_gate_ops.is_enabled(hw); +} + +static const struct clk_ops clk_gate_exclusive_ops = { +	.enable = clk_gate_exclusive_enable, +	.disable = clk_gate_exclusive_disable, +	.is_enabled = clk_gate_exclusive_is_enabled, +}; + +struct clk *imx_clk_gate_exclusive(const char *name, const char *parent, +	 void __iomem *reg, u8 shift, u32 exclusive_mask) +{ +	struct clk_gate_exclusive *exgate; +	struct clk_gate *gate; +	struct clk *clk; +	struct clk_init_data init; + +	if (exclusive_mask == 0) +		return ERR_PTR(-EINVAL); + +	exgate = kzalloc(sizeof(*exgate), GFP_KERNEL); +	if (!exgate) +		return ERR_PTR(-ENOMEM); +	gate = &exgate->gate; + +	init.name = name; +	init.ops = &clk_gate_exclusive_ops; +	init.flags = CLK_SET_RATE_PARENT; +	init.parent_names = parent ? &parent : NULL; +	init.num_parents = parent ? 1 : 0; + +	gate->reg = reg; +	gate->bit_idx = shift; +	gate->lock = &imx_ccm_lock; +	gate->hw.init = &init; +	exgate->exclusive_mask = exclusive_mask; + +	clk = clk_register(NULL, &gate->hw); +	if (IS_ERR(clk)) +		kfree(exgate); + +	return clk; +} diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index 6cceb7765c14..1412daf4a714 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -64,7 +64,7 @@ static const char *cko2_sels[] = {  	"ipu2", "vdo_axi", "osc", "gpu2d_core",  	"gpu3d_core", "usdhc2", "ssi1", "ssi2",  	"ssi3", "gpu3d_shader", "vpu_axi", "can_root", -	"ldb_di0", "ldb_di1", "esai", "eim_slow", +	"ldb_di0", "ldb_di1", "esai_extal", "eim_slow",  	"uart_serial", "spdif", "asrc", "hsi_tx",  };  static const char *cko_sels[] = { "cko1", "cko2", }; @@ -73,6 +73,14 @@ static const char *lvds_sels[] = {  	"pll4_audio", "pll5_video", "pll8_mlb", "enet_ref",  	"pcie_ref_125m", "sata_ref_100m",  }; +static const char *pll_bypass_src_sels[] = { "osc", "lvds1_in", "lvds2_in", "dummy", }; +static const char *pll1_bypass_sels[] = { "pll1", "pll1_bypass_src", }; +static const char *pll2_bypass_sels[] = { "pll2", "pll2_bypass_src", }; +static const char *pll3_bypass_sels[] = { "pll3", "pll3_bypass_src", }; +static const char *pll4_bypass_sels[] = { "pll4", "pll4_bypass_src", }; +static const char *pll5_bypass_sels[] = { "pll5", "pll5_bypass_src", }; +static const char *pll6_bypass_sels[] = { "pll6", "pll6_bypass_src", }; +static const char *pll7_bypass_sels[] = { "pll7", "pll7_bypass_src", };  static struct clk *clk[IMX6QDL_CLK_END];  static struct clk_onecell_data clk_data; @@ -107,6 +115,10 @@ static struct clk_div_table video_div_table[] = {  };  static unsigned int share_count_esai; +static unsigned int share_count_asrc; +static unsigned int share_count_ssi1; +static unsigned int share_count_ssi2; +static unsigned int share_count_ssi3;  static void __init imx6q_clocks_init(struct device_node *ccm_node)  { @@ -119,6 +131,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	clk[IMX6QDL_CLK_CKIL] = imx_obtain_fixed_clock("ckil", 0);  	clk[IMX6QDL_CLK_CKIH] = imx_obtain_fixed_clock("ckih1", 0);  	clk[IMX6QDL_CLK_OSC] = imx_obtain_fixed_clock("osc", 0); +	/* Clock source from external clock via CLK1/2 PADs */ +	clk[IMX6QDL_CLK_ANACLK1] = imx_obtain_fixed_clock("anaclk1", 0); +	clk[IMX6QDL_CLK_ANACLK2] = imx_obtain_fixed_clock("anaclk2", 0);  	np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-anatop");  	base = of_iomap(np, 0); @@ -132,14 +147,47 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  		video_div_table[2].div = 1;  	}; -	/*                                             type             name         parent_name  base     div_mask */ -	clk[IMX6QDL_CLK_PLL1_SYS]      = imx_clk_pllv3(IMX_PLLV3_SYS,	"pll1_sys",	"osc", base,        0x7f); -	clk[IMX6QDL_CLK_PLL2_BUS]      = imx_clk_pllv3(IMX_PLLV3_GENERIC,	"pll2_bus",	"osc", base + 0x30, 0x1); -	clk[IMX6QDL_CLK_PLL3_USB_OTG]  = imx_clk_pllv3(IMX_PLLV3_USB,	"pll3_usb_otg",	"osc", base + 0x10, 0x3); -	clk[IMX6QDL_CLK_PLL4_AUDIO]    = imx_clk_pllv3(IMX_PLLV3_AV,	"pll4_audio",	"osc", base + 0x70, 0x7f); -	clk[IMX6QDL_CLK_PLL5_VIDEO]    = imx_clk_pllv3(IMX_PLLV3_AV,	"pll5_video",	"osc", base + 0xa0, 0x7f); -	clk[IMX6QDL_CLK_PLL6_ENET]     = imx_clk_pllv3(IMX_PLLV3_ENET,	"pll6_enet",	"osc", base + 0xe0, 0x3); -	clk[IMX6QDL_CLK_PLL7_USB_HOST] = imx_clk_pllv3(IMX_PLLV3_USB,	"pll7_usb_host","osc", base + 0x20, 0x3); +	clk[IMX6QDL_PLL1_BYPASS_SRC] = imx_clk_mux("pll1_bypass_src", base + 0x00, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clk[IMX6QDL_PLL2_BYPASS_SRC] = imx_clk_mux("pll2_bypass_src", base + 0x30, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clk[IMX6QDL_PLL3_BYPASS_SRC] = imx_clk_mux("pll3_bypass_src", base + 0x10, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clk[IMX6QDL_PLL4_BYPASS_SRC] = imx_clk_mux("pll4_bypass_src", base + 0x70, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clk[IMX6QDL_PLL5_BYPASS_SRC] = imx_clk_mux("pll5_bypass_src", base + 0xa0, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clk[IMX6QDL_PLL6_BYPASS_SRC] = imx_clk_mux("pll6_bypass_src", base + 0xe0, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clk[IMX6QDL_PLL7_BYPASS_SRC] = imx_clk_mux("pll7_bypass_src", base + 0x20, 14, 2, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); + +	/*                                    type               name    parent_name        base         div_mask */ +	clk[IMX6QDL_CLK_PLL1] = imx_clk_pllv3(IMX_PLLV3_SYS,     "pll1", "pll1_bypass_src", base + 0x00, 0x7f); +	clk[IMX6QDL_CLK_PLL2] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2", "pll2_bypass_src", base + 0x30, 0x1); +	clk[IMX6QDL_CLK_PLL3] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll3", "pll3_bypass_src", base + 0x10, 0x3); +	clk[IMX6QDL_CLK_PLL4] = imx_clk_pllv3(IMX_PLLV3_AV,      "pll4", "pll4_bypass_src", base + 0x70, 0x7f); +	clk[IMX6QDL_CLK_PLL5] = imx_clk_pllv3(IMX_PLLV3_AV,      "pll5", "pll5_bypass_src", base + 0xa0, 0x7f); +	clk[IMX6QDL_CLK_PLL6] = imx_clk_pllv3(IMX_PLLV3_ENET,    "pll6", "pll6_bypass_src", base + 0xe0, 0x3); +	clk[IMX6QDL_CLK_PLL7] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll7", "pll7_bypass_src", base + 0x20, 0x3); + +	clk[IMX6QDL_PLL1_BYPASS] = imx_clk_mux_flags("pll1_bypass", base + 0x00, 16, 1, pll1_bypass_sels, ARRAY_SIZE(pll1_bypass_sels), CLK_SET_RATE_PARENT); +	clk[IMX6QDL_PLL2_BYPASS] = imx_clk_mux_flags("pll2_bypass", base + 0x30, 16, 1, pll2_bypass_sels, ARRAY_SIZE(pll2_bypass_sels), CLK_SET_RATE_PARENT); +	clk[IMX6QDL_PLL3_BYPASS] = imx_clk_mux_flags("pll3_bypass", base + 0x10, 16, 1, pll3_bypass_sels, ARRAY_SIZE(pll3_bypass_sels), CLK_SET_RATE_PARENT); +	clk[IMX6QDL_PLL4_BYPASS] = imx_clk_mux_flags("pll4_bypass", base + 0x70, 16, 1, pll4_bypass_sels, ARRAY_SIZE(pll4_bypass_sels), CLK_SET_RATE_PARENT); +	clk[IMX6QDL_PLL5_BYPASS] = imx_clk_mux_flags("pll5_bypass", base + 0xa0, 16, 1, pll5_bypass_sels, ARRAY_SIZE(pll5_bypass_sels), CLK_SET_RATE_PARENT); +	clk[IMX6QDL_PLL6_BYPASS] = imx_clk_mux_flags("pll6_bypass", base + 0xe0, 16, 1, pll6_bypass_sels, ARRAY_SIZE(pll6_bypass_sels), CLK_SET_RATE_PARENT); +	clk[IMX6QDL_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", base + 0x20, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT); + +	/* Do not bypass PLLs initially */ +	clk_set_parent(clk[IMX6QDL_PLL1_BYPASS], clk[IMX6QDL_CLK_PLL1]); +	clk_set_parent(clk[IMX6QDL_PLL2_BYPASS], clk[IMX6QDL_CLK_PLL2]); +	clk_set_parent(clk[IMX6QDL_PLL3_BYPASS], clk[IMX6QDL_CLK_PLL3]); +	clk_set_parent(clk[IMX6QDL_PLL4_BYPASS], clk[IMX6QDL_CLK_PLL4]); +	clk_set_parent(clk[IMX6QDL_PLL5_BYPASS], clk[IMX6QDL_CLK_PLL5]); +	clk_set_parent(clk[IMX6QDL_PLL6_BYPASS], clk[IMX6QDL_CLK_PLL6]); +	clk_set_parent(clk[IMX6QDL_PLL7_BYPASS], clk[IMX6QDL_CLK_PLL7]); + +	clk[IMX6QDL_CLK_PLL1_SYS]      = imx_clk_gate("pll1_sys",      "pll1_bypass", base + 0x00, 13); +	clk[IMX6QDL_CLK_PLL2_BUS]      = imx_clk_gate("pll2_bus",      "pll2_bypass", base + 0x30, 13); +	clk[IMX6QDL_CLK_PLL3_USB_OTG]  = imx_clk_gate("pll3_usb_otg",  "pll3_bypass", base + 0x10, 13); +	clk[IMX6QDL_CLK_PLL4_AUDIO]    = imx_clk_gate("pll4_audio",    "pll4_bypass", base + 0x70, 13); +	clk[IMX6QDL_CLK_PLL5_VIDEO]    = imx_clk_gate("pll5_video",    "pll5_bypass", base + 0xa0, 13); +	clk[IMX6QDL_CLK_PLL6_ENET]     = imx_clk_gate("pll6_enet",     "pll6_bypass", base + 0xe0, 13); +	clk[IMX6QDL_CLK_PLL7_USB_HOST] = imx_clk_gate("pll7_usb_host", "pll7_bypass", base + 0x20, 13);  	/*  	 * Bit 20 is the reserved and read-only bit, we do this only for: @@ -176,8 +224,11 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	 * the "output_enable" bit as a gate, even though it's really just  	 * enabling clock output.  	 */ -	clk[IMX6QDL_CLK_LVDS1_GATE] = imx_clk_gate("lvds1_gate", "lvds1_sel", base + 0x160, 10); -	clk[IMX6QDL_CLK_LVDS2_GATE] = imx_clk_gate("lvds2_gate", "lvds2_sel", base + 0x160, 11); +	clk[IMX6QDL_CLK_LVDS1_GATE] = imx_clk_gate_exclusive("lvds1_gate", "lvds1_sel", base + 0x160, 10, BIT(12)); +	clk[IMX6QDL_CLK_LVDS2_GATE] = imx_clk_gate_exclusive("lvds2_gate", "lvds2_sel", base + 0x160, 11, BIT(13)); + +	clk[IMX6QDL_CLK_LVDS1_IN] = imx_clk_gate_exclusive("lvds1_in", "anaclk1", base + 0x160, 12, BIT(10)); +	clk[IMX6QDL_CLK_LVDS2_IN] = imx_clk_gate_exclusive("lvds2_in", "anaclk2", base + 0x160, 13, BIT(11));  	/*                                            name              parent_name        reg       idx */  	clk[IMX6QDL_CLK_PLL2_PFD0_352M] = imx_clk_pfd("pll2_pfd0_352m", "pll2_bus",     base + 0x100, 0); @@ -194,6 +245,11 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	clk[IMX6QDL_CLK_PLL3_80M]  = imx_clk_fixed_factor("pll3_80m",  "pll3_usb_otg",   1, 6);  	clk[IMX6QDL_CLK_PLL3_60M]  = imx_clk_fixed_factor("pll3_60m",  "pll3_usb_otg",   1, 8);  	clk[IMX6QDL_CLK_TWD]       = imx_clk_fixed_factor("twd",       "arm",            1, 2); +	clk[IMX6QDL_CLK_GPT_3M]    = imx_clk_fixed_factor("gpt_3m",    "osc",            1, 8); +	if (cpu_is_imx6dl()) { +		clk[IMX6QDL_CLK_GPU2D_AXI] = imx_clk_fixed_factor("gpu2d_axi", "mmdc_ch0_axi_podf", 1, 1); +		clk[IMX6QDL_CLK_GPU3D_AXI] = imx_clk_fixed_factor("gpu3d_axi", "mmdc_ch0_axi_podf", 1, 1); +	}  	clk[IMX6QDL_CLK_PLL4_POST_DIV] = clk_register_divider_table(NULL, "pll4_post_div", "pll4_audio", CLK_SET_RATE_PARENT, base + 0x70, 19, 2, 0, post_div_table, &imx_ccm_lock);  	clk[IMX6QDL_CLK_PLL4_AUDIO_DIV] = clk_register_divider(NULL, "pll4_audio_div", "pll4_post_div", CLK_SET_RATE_PARENT, base + 0x170, 15, 1, 0, &imx_ccm_lock); @@ -217,8 +273,10 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	clk[IMX6QDL_CLK_ESAI_SEL]         = imx_clk_mux("esai_sel",         base + 0x20, 19, 2, audio_sels,        ARRAY_SIZE(audio_sels));  	clk[IMX6QDL_CLK_ASRC_SEL]         = imx_clk_mux("asrc_sel",         base + 0x30, 7,  2, audio_sels,        ARRAY_SIZE(audio_sels));  	clk[IMX6QDL_CLK_SPDIF_SEL]        = imx_clk_mux("spdif_sel",        base + 0x30, 20, 2, audio_sels,        ARRAY_SIZE(audio_sels)); -	clk[IMX6QDL_CLK_GPU2D_AXI]        = imx_clk_mux("gpu2d_axi",        base + 0x18, 0,  1, gpu_axi_sels,      ARRAY_SIZE(gpu_axi_sels)); -	clk[IMX6QDL_CLK_GPU3D_AXI]        = imx_clk_mux("gpu3d_axi",        base + 0x18, 1,  1, gpu_axi_sels,      ARRAY_SIZE(gpu_axi_sels)); +	if (cpu_is_imx6q()) { +		clk[IMX6QDL_CLK_GPU2D_AXI]        = imx_clk_mux("gpu2d_axi",        base + 0x18, 0,  1, gpu_axi_sels,      ARRAY_SIZE(gpu_axi_sels)); +		clk[IMX6QDL_CLK_GPU3D_AXI]        = imx_clk_mux("gpu3d_axi",        base + 0x18, 1,  1, gpu_axi_sels,      ARRAY_SIZE(gpu_axi_sels)); +	}  	clk[IMX6QDL_CLK_GPU2D_CORE_SEL]   = imx_clk_mux("gpu2d_core_sel",   base + 0x18, 16, 2, gpu2d_core_sels,   ARRAY_SIZE(gpu2d_core_sels));  	clk[IMX6QDL_CLK_GPU3D_CORE_SEL]   = imx_clk_mux("gpu3d_core_sel",   base + 0x18, 4,  2, gpu3d_core_sels,   ARRAY_SIZE(gpu3d_core_sels));  	clk[IMX6QDL_CLK_GPU3D_SHADER_SEL] = imx_clk_mux("gpu3d_shader_sel", base + 0x18, 8,  2, gpu3d_shader_sels, ARRAY_SIZE(gpu3d_shader_sels)); @@ -311,7 +369,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	/*                                            name             parent_name          reg         shift */  	clk[IMX6QDL_CLK_APBH_DMA]     = imx_clk_gate2("apbh_dma",      "usdhc3",            base + 0x68, 4); -	clk[IMX6QDL_CLK_ASRC]         = imx_clk_gate2("asrc",          "asrc_podf",         base + 0x68, 6); +	clk[IMX6QDL_CLK_ASRC]         = imx_clk_gate2_shared("asrc",         "asrc_podf",   base + 0x68, 6, &share_count_asrc); +	clk[IMX6QDL_CLK_ASRC_IPG]     = imx_clk_gate2_shared("asrc_ipg",     "ahb",         base + 0x68, 6, &share_count_asrc); +	clk[IMX6QDL_CLK_ASRC_MEM]     = imx_clk_gate2_shared("asrc_mem",     "ahb",         base + 0x68, 6, &share_count_asrc);  	clk[IMX6QDL_CLK_CAN1_IPG]     = imx_clk_gate2("can1_ipg",      "ipg",               base + 0x68, 14);  	clk[IMX6QDL_CLK_CAN1_SERIAL]  = imx_clk_gate2("can1_serial",   "can_root",          base + 0x68, 16);  	clk[IMX6QDL_CLK_CAN2_IPG]     = imx_clk_gate2("can2_ipg",      "ipg",               base + 0x68, 18); @@ -325,8 +385,9 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	else  		clk[IMX6Q_CLK_ECSPI5] = imx_clk_gate2("ecspi5",        "ecspi_root",        base + 0x6c, 8);  	clk[IMX6QDL_CLK_ENET]         = imx_clk_gate2("enet",          "ipg",               base + 0x6c, 10); -	clk[IMX6QDL_CLK_ESAI]         = imx_clk_gate2_shared("esai",   "esai_podf",         base + 0x6c, 16, &share_count_esai); -	clk[IMX6QDL_CLK_ESAI_AHB]     = imx_clk_gate2_shared("esai_ahb", "ahb",             base + 0x6c, 16, &share_count_esai); +	clk[IMX6QDL_CLK_ESAI_EXTAL]   = imx_clk_gate2_shared("esai_extal",   "esai_podf",   base + 0x6c, 16, &share_count_esai); +	clk[IMX6QDL_CLK_ESAI_IPG]     = imx_clk_gate2_shared("esai_ipg",   "ipg",           base + 0x6c, 16, &share_count_esai); +	clk[IMX6QDL_CLK_ESAI_MEM]     = imx_clk_gate2_shared("esai_mem", "ahb",             base + 0x6c, 16, &share_count_esai);  	clk[IMX6QDL_CLK_GPT_IPG]      = imx_clk_gate2("gpt_ipg",       "ipg",               base + 0x6c, 20);  	clk[IMX6QDL_CLK_GPT_IPG_PER]  = imx_clk_gate2("gpt_ipg_per",   "ipg_per",           base + 0x6c, 22);  	if (cpu_is_imx6dl()) @@ -382,9 +443,12 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	clk[IMX6QDL_CLK_SDMA]         = imx_clk_gate2("sdma",          "ahb",               base + 0x7c, 6);  	clk[IMX6QDL_CLK_SPBA]         = imx_clk_gate2("spba",          "ipg",               base + 0x7c, 12);  	clk[IMX6QDL_CLK_SPDIF]        = imx_clk_gate2("spdif",         "spdif_podf",        base + 0x7c, 14); -	clk[IMX6QDL_CLK_SSI1_IPG]     = imx_clk_gate2("ssi1_ipg",      "ipg",               base + 0x7c, 18); -	clk[IMX6QDL_CLK_SSI2_IPG]     = imx_clk_gate2("ssi2_ipg",      "ipg",               base + 0x7c, 20); -	clk[IMX6QDL_CLK_SSI3_IPG]     = imx_clk_gate2("ssi3_ipg",      "ipg",               base + 0x7c, 22); +	clk[IMX6QDL_CLK_SSI1_IPG]     = imx_clk_gate2_shared("ssi1_ipg",      "ipg",        base + 0x7c, 18, &share_count_ssi1); +	clk[IMX6QDL_CLK_SSI2_IPG]     = imx_clk_gate2_shared("ssi2_ipg",      "ipg",        base + 0x7c, 20, &share_count_ssi2); +	clk[IMX6QDL_CLK_SSI3_IPG]     = imx_clk_gate2_shared("ssi3_ipg",      "ipg",        base + 0x7c, 22, &share_count_ssi3); +	clk[IMX6QDL_CLK_SSI1]         = imx_clk_gate2_shared("ssi1",          "ssi1_podf",  base + 0x7c, 18, &share_count_ssi1); +	clk[IMX6QDL_CLK_SSI2]         = imx_clk_gate2_shared("ssi2",          "ssi2_podf",  base + 0x7c, 20, &share_count_ssi2); +	clk[IMX6QDL_CLK_SSI3]         = imx_clk_gate2_shared("ssi3",          "ssi3_podf",  base + 0x7c, 22, &share_count_ssi3);  	clk[IMX6QDL_CLK_UART_IPG]     = imx_clk_gate2("uart_ipg",      "ipg",               base + 0x7c, 24);  	clk[IMX6QDL_CLK_UART_SERIAL]  = imx_clk_gate2("uart_serial",   "uart_serial_podf",  base + 0x7c, 26);  	clk[IMX6QDL_CLK_USBOH3]       = imx_clk_gate2("usboh3",        "ipg",               base + 0x80, 0); @@ -398,6 +462,13 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node)  	clk[IMX6QDL_CLK_CKO1]         = imx_clk_gate("cko1",           "cko1_podf",         base + 0x60, 7);  	clk[IMX6QDL_CLK_CKO2]         = imx_clk_gate("cko2",           "cko2_podf",         base + 0x60, 24); +	/* +	 * The gpt_3m clock is not available on i.MX6Q TO1.0.  Let's point it +	 * to clock gpt_ipg_per to ease the gpt driver code. +	 */ +	if (cpu_is_imx6q() && imx_get_soc_revision() == IMX_CHIP_REVISION_1_0) +		clk[IMX6QDL_CLK_GPT_3M] = clk[IMX6QDL_CLK_GPT_IPG_PER]; +  	imx_check_clocks(clk, ARRAY_SIZE(clk));  	clk_data.clks = clk; diff --git a/arch/arm/mach-imx/clk-imx6sl.c b/arch/arm/mach-imx/clk-imx6sl.c index fef46faf692f..e982ebe10814 100644 --- a/arch/arm/mach-imx/clk-imx6sl.c +++ b/arch/arm/mach-imx/clk-imx6sl.c @@ -43,11 +43,13 @@ static const char *periph_clk2_sels[]	= { "pll3_usb_otg", "osc", "osc", "dummy",  static const char *periph2_clk2_sels[]	= { "pll3_usb_otg", "pll2_bus", };  static const char *periph_sels[]	= { "pre_periph_sel", "periph_clk2_podf", };  static const char *periph2_sels[]	= { "pre_periph2_sel", "periph2_clk2_podf", }; -static const char *csi_lcdif_sels[]	= { "mmdc", "pll2_pfd2", "pll3_120m", "pll3_pfd1", }; +static const char *csi_sels[]		= { "osc", "pll2_pfd2", "pll3_120m", "pll3_pfd1", }; +static const char *lcdif_axi_sels[]	= { "pll2_bus", "pll2_pfd2", "pll3_usb_otg", "pll3_pfd1", };  static const char *usdhc_sels[]		= { "pll2_pfd2", "pll2_pfd0", };  static const char *ssi_sels[]		= { "pll3_pfd2", "pll3_pfd3", "pll4_audio_div", "dummy", };  static const char *perclk_sels[]	= { "ipg", "osc", }; -static const char *epdc_pxp_sels[]	= { "mmdc", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll2_pfd2", "pll3_pfd1", }; +static const char *pxp_axi_sels[]	= { "pll2_bus", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll2_pfd2", "pll3_pfd3", }; +static const char *epdc_axi_sels[]	= { "pll2_bus", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll2_pfd2", "pll3_pfd2", };  static const char *gpu2d_ovg_sels[]	= { "pll3_pfd1", "pll3_usb_otg", "pll2_bus", "pll2_pfd2", };  static const char *gpu2d_sels[]		= { "pll2_pfd2", "pll3_usb_otg", "pll3_pfd1", "pll2_bus", };  static const char *lcdif_pix_sels[]	= { "pll2_bus", "pll3_usb_otg", "pll5_video_div", "pll2_pfd0", "pll3_pfd0", "pll3_pfd1", }; @@ -55,6 +57,20 @@ static const char *epdc_pix_sels[]	= { "pll2_bus", "pll3_usb_otg", "pll5_video_d  static const char *audio_sels[]		= { "pll4_audio_div", "pll3_pfd2", "pll3_pfd3", "pll3_usb_otg", };  static const char *ecspi_sels[]		= { "pll3_60m", "osc", };  static const char *uart_sels[]		= { "pll3_80m", "osc", }; +static const char *lvds_sels[]		= { +	"pll1_sys", "pll2_bus", "pll2_pfd0", "pll2_pfd1", "pll2_pfd2", "dummy", "pll4_audio", "pll5_video", +	"dummy", "enet_ref", "dummy", "dummy", "pll3_usb_otg", "pll7_usb_host", "pll3_pfd0", "pll3_pfd1", +	"pll3_pfd2", "pll3_pfd3", "osc", "dummy", "dummy", "dummy", "dummy", "dummy", +	 "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", "dummy", +}; +static const char *pll_bypass_src_sels[] = { "osc", "lvds1_in", }; +static const char *pll1_bypass_sels[]	= { "pll1", "pll1_bypass_src", }; +static const char *pll2_bypass_sels[]	= { "pll2", "pll2_bypass_src", }; +static const char *pll3_bypass_sels[]	= { "pll3", "pll3_bypass_src", }; +static const char *pll4_bypass_sels[]	= { "pll4", "pll4_bypass_src", }; +static const char *pll5_bypass_sels[]	= { "pll5", "pll5_bypass_src", }; +static const char *pll6_bypass_sels[]	= { "pll6", "pll6_bypass_src", }; +static const char *pll7_bypass_sels[]	= { "pll7", "pll7_bypass_src", };  static struct clk_div_table clk_enet_ref_table[] = {  	{ .val = 0, .div = 20, }, @@ -79,6 +95,10 @@ static struct clk_div_table video_div_table[] = {  	{ }  }; +static unsigned int share_count_ssi1; +static unsigned int share_count_ssi2; +static unsigned int share_count_ssi3; +  static struct clk *clks[IMX6SL_CLK_END];  static struct clk_onecell_data clk_data;  static void __iomem *ccm_base; @@ -175,20 +195,59 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)  	clks[IMX6SL_CLK_DUMMY] = imx_clk_fixed("dummy", 0);  	clks[IMX6SL_CLK_CKIL] = imx_obtain_fixed_clock("ckil", 0);  	clks[IMX6SL_CLK_OSC] = imx_obtain_fixed_clock("osc", 0); +	/* Clock source from external clock via CLK1 PAD */ +	clks[IMX6SL_CLK_ANACLK1] = imx_obtain_fixed_clock("anaclk1", 0);  	np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-anatop");  	base = of_iomap(np, 0);  	WARN_ON(!base);  	anatop_base = base; -	/*                                             type               name            parent  base         div_mask */ -	clks[IMX6SL_CLK_PLL1_SYS]      = imx_clk_pllv3(IMX_PLLV3_SYS,	  "pll1_sys",	   "osc", base,        0x7f); -	clks[IMX6SL_CLK_PLL2_BUS]      = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2_bus",	   "osc", base + 0x30, 0x1); -	clks[IMX6SL_CLK_PLL3_USB_OTG]  = imx_clk_pllv3(IMX_PLLV3_USB,	  "pll3_usb_otg",  "osc", base + 0x10, 0x3); -	clks[IMX6SL_CLK_PLL4_AUDIO]    = imx_clk_pllv3(IMX_PLLV3_AV,	  "pll4_audio",	   "osc", base + 0x70, 0x7f); -	clks[IMX6SL_CLK_PLL5_VIDEO]    = imx_clk_pllv3(IMX_PLLV3_AV,	  "pll5_video",	   "osc", base + 0xa0, 0x7f); -	clks[IMX6SL_CLK_PLL6_ENET]     = imx_clk_pllv3(IMX_PLLV3_ENET,	  "pll6_enet",	   "osc", base + 0xe0, 0x3); -	clks[IMX6SL_CLK_PLL7_USB_HOST] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll7_usb_host", "osc", base + 0x20, 0x3); +	clks[IMX6SL_PLL1_BYPASS_SRC] = imx_clk_mux("pll1_bypass_src", base + 0x00, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SL_PLL2_BYPASS_SRC] = imx_clk_mux("pll2_bypass_src", base + 0x30, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SL_PLL3_BYPASS_SRC] = imx_clk_mux("pll3_bypass_src", base + 0x10, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SL_PLL4_BYPASS_SRC] = imx_clk_mux("pll4_bypass_src", base + 0x70, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SL_PLL5_BYPASS_SRC] = imx_clk_mux("pll5_bypass_src", base + 0xa0, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SL_PLL6_BYPASS_SRC] = imx_clk_mux("pll6_bypass_src", base + 0xe0, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SL_PLL7_BYPASS_SRC] = imx_clk_mux("pll7_bypass_src", base + 0x20, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); + +	/*                                    type               name    parent_name        base         div_mask */ +	clks[IMX6SL_CLK_PLL1] = imx_clk_pllv3(IMX_PLLV3_SYS,     "pll1", "pll1_bypass_src", base + 0x00, 0x7f); +	clks[IMX6SL_CLK_PLL2] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2", "pll2_bypass_src", base + 0x30, 0x1); +	clks[IMX6SL_CLK_PLL3] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll3", "pll3_bypass_src", base + 0x10, 0x3); +	clks[IMX6SL_CLK_PLL4] = imx_clk_pllv3(IMX_PLLV3_AV,      "pll4", "pll4_bypass_src", base + 0x70, 0x7f); +	clks[IMX6SL_CLK_PLL5] = imx_clk_pllv3(IMX_PLLV3_AV,      "pll5", "pll5_bypass_src", base + 0xa0, 0x7f); +	clks[IMX6SL_CLK_PLL6] = imx_clk_pllv3(IMX_PLLV3_ENET,    "pll6", "pll6_bypass_src", base + 0xe0, 0x3); +	clks[IMX6SL_CLK_PLL7] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll7", "pll7_bypass_src", base + 0x20, 0x3); + +	clks[IMX6SL_PLL1_BYPASS] = imx_clk_mux_flags("pll1_bypass", base + 0x00, 16, 1, pll1_bypass_sels, ARRAY_SIZE(pll1_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SL_PLL2_BYPASS] = imx_clk_mux_flags("pll2_bypass", base + 0x30, 16, 1, pll2_bypass_sels, ARRAY_SIZE(pll2_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SL_PLL3_BYPASS] = imx_clk_mux_flags("pll3_bypass", base + 0x10, 16, 1, pll3_bypass_sels, ARRAY_SIZE(pll3_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SL_PLL4_BYPASS] = imx_clk_mux_flags("pll4_bypass", base + 0x70, 16, 1, pll4_bypass_sels, ARRAY_SIZE(pll4_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SL_PLL5_BYPASS] = imx_clk_mux_flags("pll5_bypass", base + 0xa0, 16, 1, pll5_bypass_sels, ARRAY_SIZE(pll5_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SL_PLL6_BYPASS] = imx_clk_mux_flags("pll6_bypass", base + 0xe0, 16, 1, pll6_bypass_sels, ARRAY_SIZE(pll6_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SL_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", base + 0x20, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT); + +	/* Do not bypass PLLs initially */ +	clk_set_parent(clks[IMX6SL_PLL1_BYPASS], clks[IMX6SL_CLK_PLL1]); +	clk_set_parent(clks[IMX6SL_PLL2_BYPASS], clks[IMX6SL_CLK_PLL2]); +	clk_set_parent(clks[IMX6SL_PLL3_BYPASS], clks[IMX6SL_CLK_PLL3]); +	clk_set_parent(clks[IMX6SL_PLL4_BYPASS], clks[IMX6SL_CLK_PLL4]); +	clk_set_parent(clks[IMX6SL_PLL5_BYPASS], clks[IMX6SL_CLK_PLL5]); +	clk_set_parent(clks[IMX6SL_PLL6_BYPASS], clks[IMX6SL_CLK_PLL6]); +	clk_set_parent(clks[IMX6SL_PLL7_BYPASS], clks[IMX6SL_CLK_PLL7]); + +	clks[IMX6SL_CLK_PLL1_SYS]      = imx_clk_gate("pll1_sys",      "pll1_bypass", base + 0x00, 13); +	clks[IMX6SL_CLK_PLL2_BUS]      = imx_clk_gate("pll2_bus",      "pll2_bypass", base + 0x30, 13); +	clks[IMX6SL_CLK_PLL3_USB_OTG]  = imx_clk_gate("pll3_usb_otg",  "pll3_bypass", base + 0x10, 13); +	clks[IMX6SL_CLK_PLL4_AUDIO]    = imx_clk_gate("pll4_audio",    "pll4_bypass", base + 0x70, 13); +	clks[IMX6SL_CLK_PLL5_VIDEO]    = imx_clk_gate("pll5_video",    "pll5_bypass", base + 0xa0, 13); +	clks[IMX6SL_CLK_PLL6_ENET]     = imx_clk_gate("pll6_enet",     "pll6_bypass", base + 0xe0, 13); +	clks[IMX6SL_CLK_PLL7_USB_HOST] = imx_clk_gate("pll7_usb_host", "pll7_bypass", base + 0x20, 13); + +	clks[IMX6SL_CLK_LVDS1_SEL] = imx_clk_mux("lvds1_sel", base + 0x160, 0, 5, lvds_sels, ARRAY_SIZE(lvds_sels)); +	clks[IMX6SL_CLK_LVDS1_OUT] = imx_clk_gate_exclusive("lvds1_out", "lvds1_sel", base + 0x160, 10, BIT(12)); +	clks[IMX6SL_CLK_LVDS1_IN] = imx_clk_gate_exclusive("lvds1_in", "anaclk1", base + 0x160, 12, BIT(10));  	/*  	 * usbphy1 and usbphy2 are implemented as dummy gates using reserve @@ -241,8 +300,8 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)  	clks[IMX6SL_CLK_PRE_PERIPH_SEL]   = imx_clk_mux("pre_periph_sel",   base + 0x18, 18, 2, pre_periph_sels,   ARRAY_SIZE(pre_periph_sels));  	clks[IMX6SL_CLK_PERIPH2_CLK2_SEL] = imx_clk_mux("periph2_clk2_sel", base + 0x18, 20, 1, periph2_clk2_sels, ARRAY_SIZE(periph2_clk2_sels));  	clks[IMX6SL_CLK_PERIPH_CLK2_SEL]  = imx_clk_mux("periph_clk2_sel",  base + 0x18, 12, 2, periph_clk2_sels,  ARRAY_SIZE(periph_clk2_sels)); -	clks[IMX6SL_CLK_CSI_SEL]          = imx_clk_mux("csi_sel",          base + 0x3c, 9,  2, csi_lcdif_sels,    ARRAY_SIZE(csi_lcdif_sels)); -	clks[IMX6SL_CLK_LCDIF_AXI_SEL]    = imx_clk_mux("lcdif_axi_sel",    base + 0x3c, 14, 2, csi_lcdif_sels,    ARRAY_SIZE(csi_lcdif_sels)); +	clks[IMX6SL_CLK_CSI_SEL]          = imx_clk_mux("csi_sel",          base + 0x3c, 9,  2, csi_sels,          ARRAY_SIZE(csi_sels)); +	clks[IMX6SL_CLK_LCDIF_AXI_SEL]    = imx_clk_mux("lcdif_axi_sel",    base + 0x3c, 14, 2, lcdif_axi_sels,    ARRAY_SIZE(lcdif_axi_sels));  	clks[IMX6SL_CLK_USDHC1_SEL]       = imx_clk_fixup_mux("usdhc1_sel", base + 0x1c, 16, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);  	clks[IMX6SL_CLK_USDHC2_SEL]       = imx_clk_fixup_mux("usdhc2_sel", base + 0x1c, 17, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup);  	clks[IMX6SL_CLK_USDHC3_SEL]       = imx_clk_fixup_mux("usdhc3_sel", base + 0x1c, 18, 1, usdhc_sels,        ARRAY_SIZE(usdhc_sels),  imx_cscmr1_fixup); @@ -251,8 +310,8 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)  	clks[IMX6SL_CLK_SSI2_SEL]         = imx_clk_fixup_mux("ssi2_sel",   base + 0x1c, 12, 2, ssi_sels,          ARRAY_SIZE(ssi_sels),    imx_cscmr1_fixup);  	clks[IMX6SL_CLK_SSI3_SEL]         = imx_clk_fixup_mux("ssi3_sel",   base + 0x1c, 14, 2, ssi_sels,          ARRAY_SIZE(ssi_sels),    imx_cscmr1_fixup);  	clks[IMX6SL_CLK_PERCLK_SEL]       = imx_clk_fixup_mux("perclk_sel", base + 0x1c, 6,  1, perclk_sels,       ARRAY_SIZE(perclk_sels), imx_cscmr1_fixup); -	clks[IMX6SL_CLK_PXP_AXI_SEL]      = imx_clk_mux("pxp_axi_sel",      base + 0x34, 6,  3, epdc_pxp_sels,     ARRAY_SIZE(epdc_pxp_sels)); -	clks[IMX6SL_CLK_EPDC_AXI_SEL]     = imx_clk_mux("epdc_axi_sel",     base + 0x34, 15, 3, epdc_pxp_sels,     ARRAY_SIZE(epdc_pxp_sels)); +	clks[IMX6SL_CLK_PXP_AXI_SEL]      = imx_clk_mux("pxp_axi_sel",      base + 0x34, 6,  3, pxp_axi_sels,      ARRAY_SIZE(pxp_axi_sels)); +	clks[IMX6SL_CLK_EPDC_AXI_SEL]     = imx_clk_mux("epdc_axi_sel",     base + 0x34, 15, 3, epdc_axi_sels,     ARRAY_SIZE(epdc_axi_sels));  	clks[IMX6SL_CLK_GPU2D_OVG_SEL]    = imx_clk_mux("gpu2d_ovg_sel",    base + 0x18, 4,  2, gpu2d_ovg_sels,    ARRAY_SIZE(gpu2d_ovg_sels));  	clks[IMX6SL_CLK_GPU2D_SEL]        = imx_clk_mux("gpu2d_sel",        base + 0x18, 8,  2, gpu2d_sels,        ARRAY_SIZE(gpu2d_sels));  	clks[IMX6SL_CLK_LCDIF_PIX_SEL]    = imx_clk_mux("lcdif_pix_sel",    base + 0x38, 6,  3, lcdif_pix_sels,    ARRAY_SIZE(lcdif_pix_sels)); @@ -337,9 +396,12 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)  	clks[IMX6SL_CLK_SDMA]         = imx_clk_gate2("sdma",         "ipg",               base + 0x7c, 6);  	clks[IMX6SL_CLK_SPBA]         = imx_clk_gate2("spba",         "ipg",               base + 0x7c, 12);  	clks[IMX6SL_CLK_SPDIF]        = imx_clk_gate2("spdif",        "spdif0_podf",       base + 0x7c, 14); -	clks[IMX6SL_CLK_SSI1]         = imx_clk_gate2("ssi1",         "ssi1_podf",         base + 0x7c, 18); -	clks[IMX6SL_CLK_SSI2]         = imx_clk_gate2("ssi2",         "ssi2_podf",         base + 0x7c, 20); -	clks[IMX6SL_CLK_SSI3]         = imx_clk_gate2("ssi3",         "ssi3_podf",         base + 0x7c, 22); +	clks[IMX6SL_CLK_SSI1_IPG]     = imx_clk_gate2_shared("ssi1_ipg",     "ipg",        base + 0x7c, 18, &share_count_ssi1); +	clks[IMX6SL_CLK_SSI2_IPG]     = imx_clk_gate2_shared("ssi2_ipg",     "ipg",        base + 0x7c, 20, &share_count_ssi2); +	clks[IMX6SL_CLK_SSI3_IPG]     = imx_clk_gate2_shared("ssi3_ipg",     "ipg",        base + 0x7c, 22, &share_count_ssi3); +	clks[IMX6SL_CLK_SSI1]         = imx_clk_gate2_shared("ssi1",         "ssi1_podf",  base + 0x7c, 18, &share_count_ssi1); +	clks[IMX6SL_CLK_SSI2]         = imx_clk_gate2_shared("ssi2",         "ssi2_podf",  base + 0x7c, 20, &share_count_ssi2); +	clks[IMX6SL_CLK_SSI3]         = imx_clk_gate2_shared("ssi3",         "ssi3_podf",  base + 0x7c, 22, &share_count_ssi3);  	clks[IMX6SL_CLK_UART]         = imx_clk_gate2("uart",         "ipg",               base + 0x7c, 24);  	clks[IMX6SL_CLK_UART_SERIAL]  = imx_clk_gate2("uart_serial",  "uart_root",         base + 0x7c, 26);  	clks[IMX6SL_CLK_USBOH3]       = imx_clk_gate2("usboh3",       "ipg",               base + 0x80, 0); @@ -375,6 +437,13 @@ static void __init imx6sl_clocks_init(struct device_node *ccm_node)  	/* Audio-related clocks configuration */  	clk_set_parent(clks[IMX6SL_CLK_SPDIF0_SEL], clks[IMX6SL_CLK_PLL3_PFD3]); +	/* set PLL5 video as lcdif pix parent clock */ +	clk_set_parent(clks[IMX6SL_CLK_LCDIF_PIX_SEL], +			clks[IMX6SL_CLK_PLL5_VIDEO_DIV]); + +	clk_set_parent(clks[IMX6SL_CLK_LCDIF_AXI_SEL], +		       clks[IMX6SL_CLK_PLL2_PFD2]); +  	/* Set initial power mode */  	imx6q_set_lpm(WAIT_CLOCKED);  } diff --git a/arch/arm/mach-imx/clk-imx6sx.c b/arch/arm/mach-imx/clk-imx6sx.c index ecde72bdfe88..17354a11356f 100644 --- a/arch/arm/mach-imx/clk-imx6sx.c +++ b/arch/arm/mach-imx/clk-imx6sx.c @@ -81,6 +81,14 @@ static const char *lvds_sels[]	= {  	"arm", "pll1_sys", "dummy", "dummy", "dummy", "dummy", "dummy", "pll5_video_div",  	"dummy", "dummy", "pcie_ref_125m", "dummy", "usbphy1", "usbphy2",  }; +static const char *pll_bypass_src_sels[] = { "osc", "lvds1_in", }; +static const char *pll1_bypass_sels[] = { "pll1", "pll1_bypass_src", }; +static const char *pll2_bypass_sels[] = { "pll2", "pll2_bypass_src", }; +static const char *pll3_bypass_sels[] = { "pll3", "pll3_bypass_src", }; +static const char *pll4_bypass_sels[] = { "pll4", "pll4_bypass_src", }; +static const char *pll5_bypass_sels[] = { "pll5", "pll5_bypass_src", }; +static const char *pll6_bypass_sels[] = { "pll6", "pll6_bypass_src", }; +static const char *pll7_bypass_sels[] = { "pll7", "pll7_bypass_src", };  static struct clk *clks[IMX6SX_CLK_CLK_END];  static struct clk_onecell_data clk_data; @@ -143,18 +151,54 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)  	clks[IMX6SX_CLK_IPP_DI0] = of_clk_get_by_name(ccm_node, "ipp_di0");  	clks[IMX6SX_CLK_IPP_DI1] = of_clk_get_by_name(ccm_node, "ipp_di1"); +	/* Clock source from external clock via CLK1 PAD */ +	clks[IMX6SX_CLK_ANACLK1] = imx_obtain_fixed_clock("anaclk1", 0); +  	np = of_find_compatible_node(NULL, NULL, "fsl,imx6sx-anatop");  	base = of_iomap(np, 0);  	WARN_ON(!base); -	/*                                              type               name             parent_name   base         div_mask */ -	clks[IMX6SX_CLK_PLL1_SYS]       = imx_clk_pllv3(IMX_PLLV3_SYS,     "pll1_sys",      "osc",        base,        0x7f); -	clks[IMX6SX_CLK_PLL2_BUS]       = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2_bus",      "osc",        base + 0x30, 0x1); -	clks[IMX6SX_CLK_PLL3_USB_OTG]   = imx_clk_pllv3(IMX_PLLV3_USB,     "pll3_usb_otg",  "osc",        base + 0x10, 0x3); -	clks[IMX6SX_CLK_PLL4_AUDIO]     = imx_clk_pllv3(IMX_PLLV3_AV,      "pll4_audio",    "osc",        base + 0x70, 0x7f); -	clks[IMX6SX_CLK_PLL5_VIDEO]     = imx_clk_pllv3(IMX_PLLV3_AV,      "pll5_video",    "osc",        base + 0xa0, 0x7f); -	clks[IMX6SX_CLK_PLL6_ENET]      = imx_clk_pllv3(IMX_PLLV3_ENET,    "pll6_enet",     "osc",        base + 0xe0, 0x3); -	clks[IMX6SX_CLK_PLL7_USB_HOST]  = imx_clk_pllv3(IMX_PLLV3_USB,     "pll7_usb_host", "osc",        base + 0x20, 0x3); +	clks[IMX6SX_PLL1_BYPASS_SRC] = imx_clk_mux("pll1_bypass_src", base + 0x00, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SX_PLL2_BYPASS_SRC] = imx_clk_mux("pll2_bypass_src", base + 0x30, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SX_PLL3_BYPASS_SRC] = imx_clk_mux("pll3_bypass_src", base + 0x10, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SX_PLL4_BYPASS_SRC] = imx_clk_mux("pll4_bypass_src", base + 0x70, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SX_PLL5_BYPASS_SRC] = imx_clk_mux("pll5_bypass_src", base + 0xa0, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SX_PLL6_BYPASS_SRC] = imx_clk_mux("pll6_bypass_src", base + 0xe0, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); +	clks[IMX6SX_PLL7_BYPASS_SRC] = imx_clk_mux("pll7_bypass_src", base + 0x20, 14, 1, pll_bypass_src_sels, ARRAY_SIZE(pll_bypass_src_sels)); + +	/*                                    type               name    parent_name        base         div_mask */ +	clks[IMX6SX_CLK_PLL1] = imx_clk_pllv3(IMX_PLLV3_SYS,     "pll1", "pll1_bypass_src", base + 0x00, 0x7f); +	clks[IMX6SX_CLK_PLL2] = imx_clk_pllv3(IMX_PLLV3_GENERIC, "pll2", "pll2_bypass_src", base + 0x30, 0x1); +	clks[IMX6SX_CLK_PLL3] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll3", "pll3_bypass_src", base + 0x10, 0x3); +	clks[IMX6SX_CLK_PLL4] = imx_clk_pllv3(IMX_PLLV3_AV,      "pll4", "pll4_bypass_src", base + 0x70, 0x7f); +	clks[IMX6SX_CLK_PLL5] = imx_clk_pllv3(IMX_PLLV3_AV,      "pll5", "pll5_bypass_src", base + 0xa0, 0x7f); +	clks[IMX6SX_CLK_PLL6] = imx_clk_pllv3(IMX_PLLV3_ENET,    "pll6", "pll6_bypass_src", base + 0xe0, 0x3); +	clks[IMX6SX_CLK_PLL7] = imx_clk_pllv3(IMX_PLLV3_USB,     "pll7", "pll7_bypass_src", base + 0x20, 0x3); + +	clks[IMX6SX_PLL1_BYPASS] = imx_clk_mux_flags("pll1_bypass", base + 0x00, 16, 1, pll1_bypass_sels, ARRAY_SIZE(pll1_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SX_PLL2_BYPASS] = imx_clk_mux_flags("pll2_bypass", base + 0x30, 16, 1, pll2_bypass_sels, ARRAY_SIZE(pll2_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SX_PLL3_BYPASS] = imx_clk_mux_flags("pll3_bypass", base + 0x10, 16, 1, pll3_bypass_sels, ARRAY_SIZE(pll3_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SX_PLL4_BYPASS] = imx_clk_mux_flags("pll4_bypass", base + 0x70, 16, 1, pll4_bypass_sels, ARRAY_SIZE(pll4_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SX_PLL5_BYPASS] = imx_clk_mux_flags("pll5_bypass", base + 0xa0, 16, 1, pll5_bypass_sels, ARRAY_SIZE(pll5_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SX_PLL6_BYPASS] = imx_clk_mux_flags("pll6_bypass", base + 0xe0, 16, 1, pll6_bypass_sels, ARRAY_SIZE(pll6_bypass_sels), CLK_SET_RATE_PARENT); +	clks[IMX6SX_PLL7_BYPASS] = imx_clk_mux_flags("pll7_bypass", base + 0x20, 16, 1, pll7_bypass_sels, ARRAY_SIZE(pll7_bypass_sels), CLK_SET_RATE_PARENT); + +	/* Do not bypass PLLs initially */ +	clk_set_parent(clks[IMX6SX_PLL1_BYPASS], clks[IMX6SX_CLK_PLL1]); +	clk_set_parent(clks[IMX6SX_PLL2_BYPASS], clks[IMX6SX_CLK_PLL2]); +	clk_set_parent(clks[IMX6SX_PLL3_BYPASS], clks[IMX6SX_CLK_PLL3]); +	clk_set_parent(clks[IMX6SX_PLL4_BYPASS], clks[IMX6SX_CLK_PLL4]); +	clk_set_parent(clks[IMX6SX_PLL5_BYPASS], clks[IMX6SX_CLK_PLL5]); +	clk_set_parent(clks[IMX6SX_PLL6_BYPASS], clks[IMX6SX_CLK_PLL6]); +	clk_set_parent(clks[IMX6SX_PLL7_BYPASS], clks[IMX6SX_CLK_PLL7]); + +	clks[IMX6SX_CLK_PLL1_SYS]      = imx_clk_gate("pll1_sys",      "pll1_bypass", base + 0x00, 13); +	clks[IMX6SX_CLK_PLL2_BUS]      = imx_clk_gate("pll2_bus",      "pll2_bypass", base + 0x30, 13); +	clks[IMX6SX_CLK_PLL3_USB_OTG]  = imx_clk_gate("pll3_usb_otg",  "pll3_bypass", base + 0x10, 13); +	clks[IMX6SX_CLK_PLL4_AUDIO]    = imx_clk_gate("pll4_audio",    "pll4_bypass", base + 0x70, 13); +	clks[IMX6SX_CLK_PLL5_VIDEO]    = imx_clk_gate("pll5_video",    "pll5_bypass", base + 0xa0, 13); +	clks[IMX6SX_CLK_PLL6_ENET]     = imx_clk_gate("pll6_enet",     "pll6_bypass", base + 0xe0, 13); +	clks[IMX6SX_CLK_PLL7_USB_HOST] = imx_clk_gate("pll7_usb_host", "pll7_bypass", base + 0x20, 13);  	/*  	 * Bit 20 is the reserved and read-only bit, we do this only for: @@ -176,7 +220,8 @@ static void __init imx6sx_clocks_init(struct device_node *ccm_node)  	clks[IMX6SX_CLK_PCIE_REF] = imx_clk_fixed_factor("pcie_ref", "pll6_enet", 1, 5);  	clks[IMX6SX_CLK_PCIE_REF_125M] = imx_clk_gate("pcie_ref_125m", "pcie_ref", base + 0xe0, 19); -	clks[IMX6SX_CLK_LVDS1_OUT] = imx_clk_gate("lvds1_out", "lvds1_sel", base + 0x160, 10); +	clks[IMX6SX_CLK_LVDS1_OUT] = imx_clk_gate_exclusive("lvds1_out", "lvds1_sel", base + 0x160, 10, BIT(12)); +	clks[IMX6SX_CLK_LVDS1_IN]  = imx_clk_gate_exclusive("lvds1_in",  "anaclk1",   base + 0x160, 12, BIT(10));  	clks[IMX6SX_CLK_ENET_REF] = clk_register_divider_table(NULL, "enet_ref", "pll6_enet", 0,  			base + 0xe0, 0, 2, 0, clk_enet_ref_table, diff --git a/arch/arm/mach-imx/clk-pllv3.c b/arch/arm/mach-imx/clk-pllv3.c index 61364050fccd..57de74da0acf 100644 --- a/arch/arm/mach-imx/clk-pllv3.c +++ b/arch/arm/mach-imx/clk-pllv3.c @@ -23,8 +23,6 @@  #define PLL_DENOM_OFFSET	0x20  #define BM_PLL_POWER		(0x1 << 12) -#define BM_PLL_ENABLE		(0x1 << 13) -#define BM_PLL_BYPASS		(0x1 << 16)  #define BM_PLL_LOCK		(0x1 << 31)  /** @@ -84,10 +82,6 @@ static int clk_pllv3_prepare(struct clk_hw *hw)  	if (ret)  		return ret; -	val = readl_relaxed(pll->base); -	val &= ~BM_PLL_BYPASS; -	writel_relaxed(val, pll->base); -  	return 0;  } @@ -97,7 +91,6 @@ static void clk_pllv3_unprepare(struct clk_hw *hw)  	u32 val;  	val = readl_relaxed(pll->base); -	val |= BM_PLL_BYPASS;  	if (pll->powerup_set)  		val &= ~BM_PLL_POWER;  	else @@ -105,28 +98,6 @@ static void clk_pllv3_unprepare(struct clk_hw *hw)  	writel_relaxed(val, pll->base);  } -static int clk_pllv3_enable(struct clk_hw *hw) -{ -	struct clk_pllv3 *pll = to_clk_pllv3(hw); -	u32 val; - -	val = readl_relaxed(pll->base); -	val |= BM_PLL_ENABLE; -	writel_relaxed(val, pll->base); - -	return 0; -} - -static void clk_pllv3_disable(struct clk_hw *hw) -{ -	struct clk_pllv3 *pll = to_clk_pllv3(hw); -	u32 val; - -	val = readl_relaxed(pll->base); -	val &= ~BM_PLL_ENABLE; -	writel_relaxed(val, pll->base); -} -  static unsigned long clk_pllv3_recalc_rate(struct clk_hw *hw,  					   unsigned long parent_rate)  { @@ -169,8 +140,6 @@ static int clk_pllv3_set_rate(struct clk_hw *hw, unsigned long rate,  static const struct clk_ops clk_pllv3_ops = {  	.prepare	= clk_pllv3_prepare,  	.unprepare	= clk_pllv3_unprepare, -	.enable		= clk_pllv3_enable, -	.disable	= clk_pllv3_disable,  	.recalc_rate	= clk_pllv3_recalc_rate,  	.round_rate	= clk_pllv3_round_rate,  	.set_rate	= clk_pllv3_set_rate, @@ -225,8 +194,6 @@ static int clk_pllv3_sys_set_rate(struct clk_hw *hw, unsigned long rate,  static const struct clk_ops clk_pllv3_sys_ops = {  	.prepare	= clk_pllv3_prepare,  	.unprepare	= clk_pllv3_unprepare, -	.enable		= clk_pllv3_enable, -	.disable	= clk_pllv3_disable,  	.recalc_rate	= clk_pllv3_sys_recalc_rate,  	.round_rate	= clk_pllv3_sys_round_rate,  	.set_rate	= clk_pllv3_sys_set_rate, @@ -299,8 +266,6 @@ static int clk_pllv3_av_set_rate(struct clk_hw *hw, unsigned long rate,  static const struct clk_ops clk_pllv3_av_ops = {  	.prepare	= clk_pllv3_prepare,  	.unprepare	= clk_pllv3_unprepare, -	.enable		= clk_pllv3_enable, -	.disable	= clk_pllv3_disable,  	.recalc_rate	= clk_pllv3_av_recalc_rate,  	.round_rate	= clk_pllv3_av_round_rate,  	.set_rate	= clk_pllv3_av_set_rate, @@ -315,8 +280,6 @@ static unsigned long clk_pllv3_enet_recalc_rate(struct clk_hw *hw,  static const struct clk_ops clk_pllv3_enet_ops = {  	.prepare	= clk_pllv3_prepare,  	.unprepare	= clk_pllv3_unprepare, -	.enable		= clk_pllv3_enable, -	.disable	= clk_pllv3_disable,  	.recalc_rate	= clk_pllv3_enet_recalc_rate,  }; diff --git a/arch/arm/mach-imx/clk-vf610.c b/arch/arm/mach-imx/clk-vf610.c index f60d6d569ce3..a17818475050 100644 --- a/arch/arm/mach-imx/clk-vf610.c +++ b/arch/arm/mach-imx/clk-vf610.c @@ -58,6 +58,8 @@  #define PFD_PLL1_BASE		(anatop_base + 0x2b0)  #define PFD_PLL2_BASE		(anatop_base + 0x100)  #define PFD_PLL3_BASE		(anatop_base + 0xf0) +#define PLL3_CTRL		(anatop_base + 0x10) +#define PLL7_CTRL		(anatop_base + 0x20)  static void __iomem *anatop_base;  static void __iomem *ccm_base; @@ -98,9 +100,15 @@ static struct clk_div_table pll4_main_div_table[] = {  static struct clk *clk[VF610_CLK_END];  static struct clk_onecell_data clk_data; +static unsigned int const clks_init_on[] __initconst = { +	VF610_CLK_SYS_BUS, +	VF610_CLK_DDR_SEL, +}; +  static void __init vf610_clocks_init(struct device_node *ccm_node)  {  	struct device_node *np; +	int i;  	clk[VF610_CLK_DUMMY] = imx_clk_fixed("dummy", 0);  	clk[VF610_CLK_SIRC_128K] = imx_clk_fixed("sirc_128k", 128000); @@ -148,6 +156,9 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)  	clk[VF610_CLK_PLL5_MAIN] = imx_clk_fixed_factor("pll5_main", "fast_clk_sel", 125, 6);  	/* pll6: default 960Mhz */  	clk[VF610_CLK_PLL6_MAIN] = imx_clk_fixed_factor("pll6_main", "fast_clk_sel", 40, 1); +	/* pll7: USB1 PLL at 480MHz */ +	clk[VF610_CLK_PLL7_MAIN] = imx_clk_pllv3(IMX_PLLV3_USB,	"pll7_main", "fast_clk_sel", PLL7_CTRL, 0x2); +  	clk[VF610_CLK_PLL1_PFD_SEL] = imx_clk_mux("pll1_pfd_sel", CCM_CCSR, 16, 3, pll1_sels, 5);  	clk[VF610_CLK_PLL2_PFD_SEL] = imx_clk_mux("pll2_pfd_sel", CCM_CCSR, 19, 3, pll2_sels, 5);  	clk[VF610_CLK_SYS_SEL] = imx_clk_mux("sys_sel", CCM_CCSR, 0, 3, sys_sels, ARRAY_SIZE(sys_sels)); @@ -160,8 +171,11 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)  	clk[VF610_CLK_PLL4_MAIN_DIV] = clk_register_divider_table(NULL, "pll4_main_div", "pll4_main", 0, CCM_CACRR, 6, 3, 0, pll4_main_div_table, &imx_ccm_lock);  	clk[VF610_CLK_PLL6_MAIN_DIV] = imx_clk_divider("pll6_main_div", "pll6_main", CCM_CACRR, 21, 1); -	clk[VF610_CLK_USBC0] = imx_clk_gate2("usbc0", "pll3_main", CCM_CCGR1, CCM_CCGRx_CGn(4)); -	clk[VF610_CLK_USBC1] = imx_clk_gate2("usbc1", "pll3_main", CCM_CCGR7, CCM_CCGRx_CGn(4)); +	clk[VF610_CLK_USBPHY0] = imx_clk_gate("usbphy0", "pll3_main", PLL3_CTRL, 6); +	clk[VF610_CLK_USBPHY1] = imx_clk_gate("usbphy1", "pll7_main", PLL7_CTRL, 6); + +	clk[VF610_CLK_USBC0] = imx_clk_gate2("usbc0", "ipg_bus", CCM_CCGR1, CCM_CCGRx_CGn(4)); +	clk[VF610_CLK_USBC1] = imx_clk_gate2("usbc1", "ipg_bus", CCM_CCGR7, CCM_CCGRx_CGn(4));  	clk[VF610_CLK_QSPI0_SEL] = imx_clk_mux("qspi0_sel", CCM_CSCMR1, 22, 2, qspi_sels, 4);  	clk[VF610_CLK_QSPI0_EN] = imx_clk_gate("qspi0_en", "qspi0_sel", CCM_CSCDR3, 4); @@ -322,6 +336,9 @@ static void __init vf610_clocks_init(struct device_node *ccm_node)  	clk_set_parent(clk[VF610_CLK_SAI2_SEL], clk[VF610_CLK_AUDIO_EXT]);  	clk_set_parent(clk[VF610_CLK_SAI3_SEL], clk[VF610_CLK_AUDIO_EXT]); +	for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) +		clk_prepare_enable(clk[clks_init_on[i]]); +  	/* Add the clocks to provider list */  	clk_data.clks = clk;  	clk_data.clk_num = ARRAY_SIZE(clk); diff --git a/arch/arm/mach-imx/clk.h b/arch/arm/mach-imx/clk.h index d5ba76fee115..4cdf8b6a74e8 100644 --- a/arch/arm/mach-imx/clk.h +++ b/arch/arm/mach-imx/clk.h @@ -36,6 +36,9 @@ struct clk *clk_register_gate2(struct device *dev, const char *name,  struct clk * imx_obtain_fixed_clock(  			const char *name, unsigned long rate); +struct clk *imx_clk_gate_exclusive(const char *name, const char *parent, +	 void __iomem *reg, u8 shift, u32 exclusive_mask); +  static inline struct clk *imx_clk_gate2(const char *name, const char *parent,  		void __iomem *reg, u8 shift)  { diff --git a/arch/arm/mach-imx/common.h b/arch/arm/mach-imx/common.h index 22ba8973bcb9..1dabf435c592 100644 --- a/arch/arm/mach-imx/common.h +++ b/arch/arm/mach-imx/common.h @@ -98,11 +98,9 @@ void imx_set_cpu_arg(int cpu, u32 arg);  void v7_secondary_startup(void);  void imx_scu_map_io(void);  void imx_smp_prepare(void); -void imx_scu_standby_enable(void);  #else  static inline void imx_scu_map_io(void) {}  static inline void imx_smp_prepare(void) {} -static inline void imx_scu_standby_enable(void) {}  #endif  void imx_src_init(void);  void imx_gpc_init(void); diff --git a/arch/arm/mach-imx/cpuidle-imx6q.c b/arch/arm/mach-imx/cpuidle-imx6q.c index 10844d3bb926..aa935787b743 100644 --- a/arch/arm/mach-imx/cpuidle-imx6q.c +++ b/arch/arm/mach-imx/cpuidle-imx6q.c @@ -66,10 +66,6 @@ static struct cpuidle_driver imx6q_cpuidle_driver = {  int __init imx6q_cpuidle_init(void)  { -	/* Need to enable SCU standby for entering WAIT modes */ -	if (!cpu_is_imx6sx()) -		imx_scu_standby_enable(); -  	/* Set INT_MEM_CLK_LPM bit to get a reliable WAIT mode support */  	imx6q_set_int_mem_clk_lpm(true); diff --git a/arch/arm/mach-imx/eukrea-baseboards.h b/arch/arm/mach-imx/eukrea-baseboards.h index a21d3313f994..bb2c90d65914 100644 --- a/arch/arm/mach-imx/eukrea-baseboards.h +++ b/arch/arm/mach-imx/eukrea-baseboards.h @@ -27,23 +27,15 @@   * This CPU module needs a baseboard to work. After basic initializing   * its own devices, it calls baseboard's init function.   * TODO: Add your own baseboard init function and call it from - * inside eukrea_cpuimx25_init() eukrea_cpuimx27_init() - * eukrea_cpuimx35_init() eukrea_cpuimx51_init() - * or eukrea_cpuimx51sd_init(). + * inside eukrea_cpuimx25_init() or eukrea_cpuimx35_init()   *   * This example here is for the development board. Refer   * mach-mx25/eukrea_mbimxsd-baseboard.c for cpuimx25 - * mach-imx/eukrea_mbimx27-baseboard.c for cpuimx27   * mach-mx3/eukrea_mbimxsd-baseboard.c for cpuimx35 - * mach-mx5/eukrea_mbimx51-baseboard.c for cpuimx51 - * mach-mx5/eukrea_mbimxsd-baseboard.c for cpuimx51sd   */  extern void eukrea_mbimxsd25_baseboard_init(void); -extern void eukrea_mbimx27_baseboard_init(void);  extern void eukrea_mbimxsd35_baseboard_init(void); -extern void eukrea_mbimx51_baseboard_init(void); -extern void eukrea_mbimxsd51_baseboard_init(void);  #endif diff --git a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c b/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c deleted file mode 100644 index b2f08bfbbdd3..000000000000 --- a/arch/arm/mach-imx/eukrea_mbimx27-baseboard.c +++ /dev/null @@ -1,351 +0,0 @@ -/* - * Copyright (C) 2009-2010 Eric Benard - eric@eukrea.com - * - * Based on pcm970-baseboard.c which is : - * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -#include <linux/gpio.h> -#include <linux/irq.h> -#include <linux/platform_device.h> -#include <linux/spi/spi.h> -#include <linux/spi/ads7846.h> -#include <linux/backlight.h> -#include <video/platform_lcd.h> - -#include <asm/mach/arch.h> - -#include "common.h" -#include "devices-imx27.h" -#include "hardware.h" -#include "iomux-mx27.h" - -static const int eukrea_mbimx27_pins[] __initconst = { -	/* UART2 */ -	PE3_PF_UART2_CTS, -	PE4_PF_UART2_RTS, -	PE6_PF_UART2_TXD, -	PE7_PF_UART2_RXD, -	/* UART3 */ -	PE8_PF_UART3_TXD, -	PE9_PF_UART3_RXD, -	PE10_PF_UART3_CTS, -	PE11_PF_UART3_RTS, -	/* UART4 */ -#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4) -	PB26_AF_UART4_RTS, -	PB28_AF_UART4_TXD, -	PB29_AF_UART4_CTS, -	PB31_AF_UART4_RXD, -#endif -	/* SDHC1*/ -	PE18_PF_SD1_D0, -	PE19_PF_SD1_D1, -	PE20_PF_SD1_D2, -	PE21_PF_SD1_D3, -	PE22_PF_SD1_CMD, -	PE23_PF_SD1_CLK, -	/* display */ -	PA5_PF_LSCLK, -	PA6_PF_LD0, -	PA7_PF_LD1, -	PA8_PF_LD2, -	PA9_PF_LD3, -	PA10_PF_LD4, -	PA11_PF_LD5, -	PA12_PF_LD6, -	PA13_PF_LD7, -	PA14_PF_LD8, -	PA15_PF_LD9, -	PA16_PF_LD10, -	PA17_PF_LD11, -	PA18_PF_LD12, -	PA19_PF_LD13, -	PA20_PF_LD14, -	PA21_PF_LD15, -	PA22_PF_LD16, -	PA23_PF_LD17, -	PA28_PF_HSYNC, -	PA29_PF_VSYNC, -	PA30_PF_CONTRAST, -	PA31_PF_OE_ACD, -	/* SPI1 */ -	PD29_PF_CSPI1_SCLK, -	PD30_PF_CSPI1_MISO, -	PD31_PF_CSPI1_MOSI, -	/* SSI4 */ -#if defined(CONFIG_SND_SOC_EUKREA_TLV320) \ -	|| defined(CONFIG_SND_SOC_EUKREA_TLV320_MODULE) -	PC16_PF_SSI4_FS, -	PC17_PF_SSI4_RXD | GPIO_PUEN, -	PC18_PF_SSI4_TXD | GPIO_PUEN, -	PC19_PF_SSI4_CLK, -#endif -}; - -static const uint32_t eukrea_mbimx27_keymap[] = { -	KEY(0, 0, KEY_UP), -	KEY(0, 1, KEY_DOWN), -	KEY(1, 0, KEY_RIGHT), -	KEY(1, 1, KEY_LEFT), -}; - -static const struct matrix_keymap_data -eukrea_mbimx27_keymap_data __initconst = { -	.keymap         = eukrea_mbimx27_keymap, -	.keymap_size    = ARRAY_SIZE(eukrea_mbimx27_keymap), -}; - -static const struct gpio_led eukrea_mbimx27_gpio_leds[] __initconst = { -	{ -		.name			= "led1", -		.default_trigger	= "heartbeat", -		.active_low		= 1, -		.gpio			= GPIO_PORTF | 16, -	}, -	{ -		.name			= "led2", -		.default_trigger	= "none", -		.active_low		= 1, -		.gpio			= GPIO_PORTF | 19, -	}, -}; - -static const struct gpio_led_platform_data -		eukrea_mbimx27_gpio_led_info __initconst = { -	.leds		= eukrea_mbimx27_gpio_leds, -	.num_leds	= ARRAY_SIZE(eukrea_mbimx27_gpio_leds), -}; - -static struct imx_fb_videomode eukrea_mbimx27_modes[] = { -	{ -		.mode = { -			.name		= "CMO-QVGA", -			.refresh	= 60, -			.xres		= 320, -			.yres		= 240, -			.pixclock	= 156000, -			.hsync_len	= 30, -			.left_margin	= 38, -			.right_margin	= 20, -			.vsync_len	= 3, -			.upper_margin	= 15, -			.lower_margin	= 4, -		}, -		.pcr		= 0xFAD08B80, -		.bpp		= 16, -	}, { -		.mode = { -			.name		= "DVI-VGA", -			.refresh	= 60, -			.xres		= 640, -			.yres		= 480, -			.pixclock	= 32000, -			.hsync_len	= 1, -			.left_margin	= 35, -			.right_margin	= 0, -			.vsync_len	= 1, -			.upper_margin	= 7, -			.lower_margin	= 0, -		}, -		.pcr		= 0xFA208B80, -		.bpp		= 16, -	}, { -		.mode = { -			.name		= "DVI-SVGA", -			.refresh	= 60, -			.xres		= 800, -			.yres		= 600, -			.pixclock	= 25000, -			.hsync_len	= 1, -			.left_margin	= 35, -			.right_margin	= 0, -			.vsync_len	= 1, -			.upper_margin	= 7, -			.lower_margin	= 0, -		}, -		.pcr		= 0xFA208B80, -		.bpp		= 16, -	}, -}; - -static const struct imx_fb_platform_data eukrea_mbimx27_fb_data __initconst = { -	.mode = eukrea_mbimx27_modes, -	.num_modes = ARRAY_SIZE(eukrea_mbimx27_modes), - -	.pwmr		= 0x00A903FF, -	.lscr1		= 0x00120300, -	.dmacr		= 0x00040060, -}; - -static void eukrea_mbimx27_bl_set_intensity(int intensity) -{ -	if (intensity) -		gpio_direction_output(GPIO_PORTE | 5, 1); -	else -		gpio_direction_output(GPIO_PORTE | 5, 0); -} - -static struct generic_bl_info eukrea_mbimx27_bl_info = { -	.name			= "eukrea_mbimx27-bl", -	.max_intensity		= 0xff, -	.default_intensity	= 0xff, -	.set_bl_intensity	= eukrea_mbimx27_bl_set_intensity, -}; - -static struct platform_device eukrea_mbimx27_bl_dev = { -	.name			= "generic-bl", -	.id			= 1, -	.dev = { -		.platform_data	= &eukrea_mbimx27_bl_info, -	}, -}; - -static void eukrea_mbimx27_lcd_power_set(struct plat_lcd_data *pd, -				   unsigned int power) -{ -	if (power) -		gpio_direction_output(GPIO_PORTA | 25, 1); -	else -		gpio_direction_output(GPIO_PORTA | 25, 0); -} - -static struct plat_lcd_data eukrea_mbimx27_lcd_power_data = { -	.set_power		= eukrea_mbimx27_lcd_power_set, -}; - -static struct platform_device eukrea_mbimx27_lcd_powerdev = { -	.name			= "platform-lcd", -	.dev.platform_data	= &eukrea_mbimx27_lcd_power_data, -}; - -static const struct imxuart_platform_data uart_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -#define ADS7846_PENDOWN (GPIO_PORTD | 25) - -static void __maybe_unused ads7846_dev_init(void) -{ -	if (gpio_request(ADS7846_PENDOWN, "ADS7846 pendown") < 0) { -		printk(KERN_ERR "can't get ads7846 pen down GPIO\n"); -		return; -	} -	gpio_direction_input(ADS7846_PENDOWN); -} - -static int ads7846_get_pendown_state(void) -{ -	return !gpio_get_value(ADS7846_PENDOWN); -} - -static struct ads7846_platform_data ads7846_config __initdata = { -	.get_pendown_state	= ads7846_get_pendown_state, -	.keep_vref_on		= 1, -}; - -static struct spi_board_info __maybe_unused -		eukrea_mbimx27_spi_board_info[] __initdata = { -	[0] = { -		.modalias	= "ads7846", -		.bus_num	= 0, -		.chip_select	= 0, -		.max_speed_hz	= 1500000, -		/* irq number is run-time assigned */ -		.platform_data	= &ads7846_config, -		.mode           = SPI_MODE_2, -	}, -}; - -static int eukrea_mbimx27_spi_cs[] = {GPIO_PORTD | 28}; - -static const struct spi_imx_master eukrea_mbimx27_spi0_data __initconst = { -	.chipselect	= eukrea_mbimx27_spi_cs, -	.num_chipselect = ARRAY_SIZE(eukrea_mbimx27_spi_cs), -}; - -static struct i2c_board_info eukrea_mbimx27_i2c_devices[] = { -	{ -		I2C_BOARD_INFO("tlv320aic23", 0x1a), -	}, -}; - -static const struct imxmmc_platform_data sdhc_pdata __initconst = { -	.dat3_card_detect = 1, -}; - -static const -struct imx_ssi_platform_data eukrea_mbimx27_ssi_pdata __initconst = { -	.flags = IMX_SSI_DMA | IMX_SSI_USE_I2S_SLAVE, -}; - -/* - * system init for baseboard usage. Will be called by cpuimx27 init. - * - * Add platform devices present on this baseboard and init - * them from CPU side as far as required to use them later on - */ -void __init eukrea_mbimx27_baseboard_init(void) -{ -	mxc_gpio_setup_multiple_pins(eukrea_mbimx27_pins, -		ARRAY_SIZE(eukrea_mbimx27_pins), "MBIMX27"); - -	imx27_add_imx_uart1(&uart_pdata); -	imx27_add_imx_uart2(&uart_pdata); -#if !defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4) -	imx27_add_imx_uart3(&uart_pdata); -#endif - -	imx27_add_imx_fb(&eukrea_mbimx27_fb_data); -	imx27_add_mxc_mmc(0, &sdhc_pdata); - -	i2c_register_board_info(0, eukrea_mbimx27_i2c_devices, -				ARRAY_SIZE(eukrea_mbimx27_i2c_devices)); - -	imx27_add_imx_ssi(0, &eukrea_mbimx27_ssi_pdata); - -#if defined(CONFIG_TOUCHSCREEN_ADS7846) \ -	|| defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE) -	/* ADS7846 Touchscreen controller init */ -	mxc_gpio_mode(GPIO_PORTD | 25 | GPIO_GPIO | GPIO_IN); -	ads7846_dev_init(); -#endif - -	/* SPI_CS0 init */ -	mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT); -	imx27_add_spi_imx0(&eukrea_mbimx27_spi0_data); -	eukrea_mbimx27_spi_board_info[0].irq = gpio_to_irq(IMX_GPIO_NR(4, 25)); -	spi_register_board_info(eukrea_mbimx27_spi_board_info, -			ARRAY_SIZE(eukrea_mbimx27_spi_board_info)); - -	/* Leds configuration */ -	mxc_gpio_mode(GPIO_PORTF | 16 | GPIO_GPIO | GPIO_OUT); -	mxc_gpio_mode(GPIO_PORTF | 19 | GPIO_GPIO | GPIO_OUT); -	/* Backlight */ -	mxc_gpio_mode(GPIO_PORTE | 5 | GPIO_GPIO | GPIO_OUT); -	gpio_request(GPIO_PORTE | 5, "backlight"); -	platform_device_register(&eukrea_mbimx27_bl_dev); -	/* LCD Reset */ -	mxc_gpio_mode(GPIO_PORTA | 25 | GPIO_GPIO | GPIO_OUT); -	gpio_request(GPIO_PORTA | 25, "lcd_enable"); -	platform_device_register(&eukrea_mbimx27_lcd_powerdev); - -	imx27_add_imx_keypad(&eukrea_mbimx27_keymap_data); - -	gpio_led_register_device(-1, &eukrea_mbimx27_gpio_led_info); -	imx_add_platform_device("eukrea_tlv320", 0, NULL, 0, NULL, 0); -} diff --git a/arch/arm/mach-imx/imx1-dt.c b/arch/arm/mach-imx/imx1-dt.c new file mode 100644 index 000000000000..6f915b0961c4 --- /dev/null +++ b/arch/arm/mach-imx/imx1-dt.c @@ -0,0 +1,26 @@ +/* + *  Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#include <linux/of_platform.h> +#include <asm/mach/arch.h> + +#include "common.h" + +static const char * const imx1_dt_board_compat[] __initconst = { +	"fsl,imx1", +	NULL +}; + +DT_MACHINE_START(IMX1_DT, "Freescale i.MX1 (Device Tree Support)") +	.map_io		= mx1_map_io, +	.init_early	= imx1_init_early, +	.init_irq	= mx1_init_irq, +	.dt_compat	= imx1_dt_board_compat, +	.restart	= mxc_restart, +MACHINE_END diff --git a/arch/arm/mach-imx/iomux-imx31.c b/arch/arm/mach-imx/iomux-imx31.c index 7c66805d2cc0..1657fe64cd0f 100644 --- a/arch/arm/mach-imx/iomux-imx31.c +++ b/arch/arm/mach-imx/iomux-imx31.c @@ -64,7 +64,6 @@ int mxc_iomux_mode(unsigned int pin_mode)  	return ret;  } -EXPORT_SYMBOL(mxc_iomux_mode);  /*   * This function configures the pad value for a IOMUX pin. @@ -90,7 +89,6 @@ void mxc_iomux_set_pad(enum iomux_pins pin, u32 config)  	spin_unlock(&gpio_mux_lock);  } -EXPORT_SYMBOL(mxc_iomux_set_pad);  /*   * allocs a single pin: @@ -116,7 +114,6 @@ int mxc_iomux_alloc_pin(unsigned int pin, const char *label)  	return 0;  } -EXPORT_SYMBOL(mxc_iomux_alloc_pin);  int mxc_iomux_setup_multiple_pins(const unsigned int *pin_list, unsigned count,  		const char *label) @@ -137,7 +134,6 @@ setup_error:  	mxc_iomux_release_multiple_pins(pin_list, i);  	return ret;  } -EXPORT_SYMBOL(mxc_iomux_setup_multiple_pins);  void mxc_iomux_release_pin(unsigned int pin)  { @@ -146,7 +142,6 @@ void mxc_iomux_release_pin(unsigned int pin)  	if (pad < (PIN_MAX + 1))  		clear_bit(pad, mxc_pin_alloc_map);  } -EXPORT_SYMBOL(mxc_iomux_release_pin);  void mxc_iomux_release_multiple_pins(const unsigned int *pin_list, int count)  { @@ -158,7 +153,6 @@ void mxc_iomux_release_multiple_pins(const unsigned int *pin_list, int count)  		p++;  	}  } -EXPORT_SYMBOL(mxc_iomux_release_multiple_pins);  /*   * This function enables/disables the general purpose function for a particular @@ -178,4 +172,3 @@ void mxc_iomux_set_gpr(enum iomux_gp_func gp, bool en)  	__raw_writel(l, IOMUXGPR);  	spin_unlock(&gpio_mux_lock);  } -EXPORT_SYMBOL(mxc_iomux_set_gpr); diff --git a/arch/arm/mach-imx/iomux-v1.c b/arch/arm/mach-imx/iomux-v1.c index 2b156d1d9e21..ecd543664644 100644 --- a/arch/arm/mach-imx/iomux-v1.c +++ b/arch/arm/mach-imx/iomux-v1.c @@ -153,7 +153,6 @@ int mxc_gpio_mode(int gpio_mode)  	return 0;  } -EXPORT_SYMBOL(mxc_gpio_mode);  static int imx_iomuxv1_setup_multiple(const int *list, unsigned count)  { @@ -178,7 +177,6 @@ int mxc_gpio_setup_multiple_pins(const int *pin_list, unsigned count,  	ret = imx_iomuxv1_setup_multiple(pin_list, count);  	return ret;  } -EXPORT_SYMBOL(mxc_gpio_setup_multiple_pins);  int __init imx_iomuxv1_init(void __iomem *base, int numports)  { diff --git a/arch/arm/mach-imx/iomux-v3.c b/arch/arm/mach-imx/iomux-v3.c index 9dae74bf47fc..d61f9606fc56 100644 --- a/arch/arm/mach-imx/iomux-v3.c +++ b/arch/arm/mach-imx/iomux-v3.c @@ -55,7 +55,6 @@ int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)  	return 0;  } -EXPORT_SYMBOL(mxc_iomux_v3_setup_pad);  int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count)  { @@ -71,7 +70,6 @@ int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count)  	}  	return 0;  } -EXPORT_SYMBOL(mxc_iomux_v3_setup_multiple_pads);  void mxc_iomux_v3_init(void __iomem *iomux_v3_base)  { diff --git a/arch/arm/mach-imx/mach-armadillo5x0.c b/arch/arm/mach-imx/mach-armadillo5x0.c index a7e9bd26a552..f2060523ba48 100644 --- a/arch/arm/mach-imx/mach-armadillo5x0.c +++ b/arch/arm/mach-imx/mach-armadillo5x0.c @@ -537,7 +537,7 @@ static void __init armadillo5x0_init(void)  			gpio_free(ARMADILLO5X0_RTC_GPIO);  	}  	if (armadillo5x0_i2c_rtc.irq == 0) -		pr_warning("armadillo5x0_init: failed to get RTC IRQ\n"); +		pr_warn("armadillo5x0_init: failed to get RTC IRQ\n");  	i2c_register_board_info(1, &armadillo5x0_i2c_rtc, 1);  	/* USB */ diff --git a/arch/arm/mach-imx/mach-cpuimx27.c b/arch/arm/mach-imx/mach-cpuimx27.c deleted file mode 100644 index e6d4b9929571..000000000000 --- a/arch/arm/mach-imx/mach-cpuimx27.c +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (C) 2009 Eric Benard - eric@eukrea.com - * - * Based on pcm038.c which is : - * Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix - * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -#include <linux/i2c.h> -#include <linux/io.h> -#include <linux/mtd/plat-ram.h> -#include <linux/mtd/physmap.h> -#include <linux/platform_device.h> -#include <linux/serial_8250.h> -#include <linux/usb/otg.h> -#include <linux/usb/ulpi.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/time.h> -#include <asm/mach/map.h> - -#include "common.h" -#include "devices-imx27.h" -#include "ehci.h" -#include "eukrea-baseboards.h" -#include "hardware.h" -#include "iomux-mx27.h" -#include "ulpi.h" - -static const int eukrea_cpuimx27_pins[] __initconst = { -	/* UART1 */ -	PE12_PF_UART1_TXD, -	PE13_PF_UART1_RXD, -	PE14_PF_UART1_CTS, -	PE15_PF_UART1_RTS, -	/* UART4 */ -#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4) -	PB26_AF_UART4_RTS, -	PB28_AF_UART4_TXD, -	PB29_AF_UART4_CTS, -	PB31_AF_UART4_RXD, -#endif -	/* FEC */ -	PD0_AIN_FEC_TXD0, -	PD1_AIN_FEC_TXD1, -	PD2_AIN_FEC_TXD2, -	PD3_AIN_FEC_TXD3, -	PD4_AOUT_FEC_RX_ER, -	PD5_AOUT_FEC_RXD1, -	PD6_AOUT_FEC_RXD2, -	PD7_AOUT_FEC_RXD3, -	PD8_AF_FEC_MDIO, -	PD9_AIN_FEC_MDC, -	PD10_AOUT_FEC_CRS, -	PD11_AOUT_FEC_TX_CLK, -	PD12_AOUT_FEC_RXD0, -	PD13_AOUT_FEC_RX_DV, -	PD14_AOUT_FEC_RX_CLK, -	PD15_AOUT_FEC_COL, -	PD16_AIN_FEC_TX_ER, -	PF23_AIN_FEC_TX_EN, -	/* I2C1 */ -	PD17_PF_I2C_DATA, -	PD18_PF_I2C_CLK, -	/* SDHC2 */ -#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2) -	PB4_PF_SD2_D0, -	PB5_PF_SD2_D1, -	PB6_PF_SD2_D2, -	PB7_PF_SD2_D3, -	PB8_PF_SD2_CMD, -	PB9_PF_SD2_CLK, -#endif -#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) -	/* Quad UART's IRQ */ -	GPIO_PORTB | 22 | GPIO_GPIO | GPIO_IN, -	GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN, -	GPIO_PORTB | 27 | GPIO_GPIO | GPIO_IN, -	GPIO_PORTB | 30 | GPIO_GPIO | GPIO_IN, -#endif -	/* OTG */ -	PC7_PF_USBOTG_DATA5, -	PC8_PF_USBOTG_DATA6, -	PC9_PF_USBOTG_DATA0, -	PC10_PF_USBOTG_DATA2, -	PC11_PF_USBOTG_DATA1, -	PC12_PF_USBOTG_DATA4, -	PC13_PF_USBOTG_DATA3, -	PE0_PF_USBOTG_NXT, -	PE1_PF_USBOTG_STP, -	PE2_PF_USBOTG_DIR, -	PE24_PF_USBOTG_CLK, -	PE25_PF_USBOTG_DATA7, -	/* USBH2 */ -	PA0_PF_USBH2_CLK, -	PA1_PF_USBH2_DIR, -	PA2_PF_USBH2_DATA7, -	PA3_PF_USBH2_NXT, -	PA4_PF_USBH2_STP, -	PD19_AF_USBH2_DATA4, -	PD20_AF_USBH2_DATA3, -	PD21_AF_USBH2_DATA6, -	PD22_AF_USBH2_DATA0, -	PD23_AF_USBH2_DATA2, -	PD24_AF_USBH2_DATA1, -	PD26_AF_USBH2_DATA5, -}; - -static struct physmap_flash_data eukrea_cpuimx27_flash_data = { -	.width = 2, -}; - -static struct resource eukrea_cpuimx27_flash_resource = { -	.start = 0xc0000000, -	.end   = 0xc3ffffff, -	.flags = IORESOURCE_MEM, -}; - -static struct platform_device eukrea_cpuimx27_nor_mtd_device = { -	.name = "physmap-flash", -	.id = 0, -	.dev = { -		.platform_data = &eukrea_cpuimx27_flash_data, -	}, -	.num_resources = 1, -	.resource = &eukrea_cpuimx27_flash_resource, -}; - -static const struct imxuart_platform_data uart_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -static const struct mxc_nand_platform_data -cpuimx27_nand_board_info __initconst = { -	.width = 1, -	.hw_ecc = 1, -}; - -static struct platform_device *platform_devices[] __initdata = { -	&eukrea_cpuimx27_nor_mtd_device, -}; - -static const struct imxi2c_platform_data cpuimx27_i2c1_data __initconst = { -	.bitrate = 100000, -}; - -static struct i2c_board_info eukrea_cpuimx27_i2c_devices[] = { -	{ -		I2C_BOARD_INFO("pcf8563", 0x51), -	}, -}; - -#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) -static struct plat_serial8250_port serial_platform_data[] = { -	{ -		.mapbase = (unsigned long)(MX27_CS3_BASE_ADDR + 0x200000), -		/* irq number is run-time assigned */ -		.uartclk = 14745600, -		.regshift = 1, -		.iotype = UPIO_MEM, -		.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, -	}, { -		.mapbase = (unsigned long)(MX27_CS3_BASE_ADDR + 0x400000), -		/* irq number is run-time assigned */ -		.uartclk = 14745600, -		.regshift = 1, -		.iotype = UPIO_MEM, -		.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, -	}, { -		.mapbase = (unsigned long)(MX27_CS3_BASE_ADDR + 0x800000), -		/* irq number is run-time assigned */ -		.uartclk = 14745600, -		.regshift = 1, -		.iotype = UPIO_MEM, -		.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, -	}, { -		.mapbase = (unsigned long)(MX27_CS3_BASE_ADDR + 0x1000000), -		/* irq number is run-time assigned */ -		.uartclk = 14745600, -		.regshift = 1, -		.iotype = UPIO_MEM, -		.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST | UPF_IOREMAP, -	}, { -	} -}; - -static struct platform_device serial_device = { -	.name = "serial8250", -	.id = 0, -	.dev = { -		.platform_data = serial_platform_data, -	}, -}; -#endif - -static int eukrea_cpuimx27_otg_init(struct platform_device *pdev) -{ -	return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI); -} - -static struct mxc_usbh_platform_data otg_pdata __initdata = { -	.init	= eukrea_cpuimx27_otg_init, -	.portsc	= MXC_EHCI_MODE_ULPI, -}; - -static int eukrea_cpuimx27_usbh2_init(struct platform_device *pdev) -{ -	return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_INTERFACE_DIFF_UNI); -} - -static struct mxc_usbh_platform_data usbh2_pdata __initdata = { -	.init	= eukrea_cpuimx27_usbh2_init, -	.portsc	= MXC_EHCI_MODE_ULPI, -}; - -static const struct fsl_usb2_platform_data otg_device_pdata __initconst = { -	.operating_mode = FSL_USB2_DR_DEVICE, -	.phy_mode       = FSL_USB2_PHY_ULPI, -}; - -static bool otg_mode_host __initdata; - -static int __init eukrea_cpuimx27_otg_mode(char *options) -{ -	if (!strcmp(options, "host")) -		otg_mode_host = true; -	else if (!strcmp(options, "device")) -		otg_mode_host = false; -	else -		pr_info("otg_mode neither \"host\" nor \"device\". " -			"Defaulting to device\n"); -	return 1; -} -__setup("otg_mode=", eukrea_cpuimx27_otg_mode); - -static void __init eukrea_cpuimx27_init(void) -{ -	imx27_soc_init(); - -	mxc_gpio_setup_multiple_pins(eukrea_cpuimx27_pins, -		ARRAY_SIZE(eukrea_cpuimx27_pins), "CPUIMX27"); - -	imx27_add_imx_uart0(&uart_pdata); - -	imx27_add_mxc_nand(&cpuimx27_nand_board_info); - -	i2c_register_board_info(0, eukrea_cpuimx27_i2c_devices, -				ARRAY_SIZE(eukrea_cpuimx27_i2c_devices)); - -	imx27_add_imx_i2c(0, &cpuimx27_i2c1_data); - -	imx27_add_fec(NULL); -	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); -	imx27_add_imx2_wdt(); -	imx27_add_mxc_w1(); - -#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USESDHC2) -	/* SDHC2 can be used for Wifi */ -	imx27_add_mxc_mmc(1, NULL); -#endif -#if defined(CONFIG_MACH_EUKREA_CPUIMX27_USEUART4) -	/* in which case UART4 is also used for Bluetooth */ -	imx27_add_imx_uart3(&uart_pdata); -#endif - -#if defined(CONFIG_SERIAL_8250) || defined(CONFIG_SERIAL_8250_MODULE) -	serial_platform_data[0].irq = IMX_GPIO_NR(2, 23); -	serial_platform_data[1].irq = IMX_GPIO_NR(2, 22); -	serial_platform_data[2].irq = IMX_GPIO_NR(2, 27); -	serial_platform_data[3].irq = IMX_GPIO_NR(2, 30); -	platform_device_register(&serial_device); -#endif - -	if (otg_mode_host) { -		otg_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS | -				ULPI_OTG_DRVVBUS_EXT); -		if (otg_pdata.otg) -			imx27_add_mxc_ehci_otg(&otg_pdata); -	} else { -		imx27_add_fsl_usb2_udc(&otg_device_pdata); -	} - -	usbh2_pdata.otg = imx_otg_ulpi_create(ULPI_OTG_DRVVBUS | -			ULPI_OTG_DRVVBUS_EXT); -	if (usbh2_pdata.otg) -		imx27_add_mxc_ehci_hs(2, &usbh2_pdata); - -#ifdef CONFIG_MACH_EUKREA_MBIMX27_BASEBOARD -	eukrea_mbimx27_baseboard_init(); -#endif -} - -static void __init eukrea_cpuimx27_timer_init(void) -{ -	mx27_clocks_init(26000000); -} - -MACHINE_START(EUKREA_CPUIMX27, "EUKREA CPUIMX27") -	.atag_offset = 0x100, -	.map_io = mx27_map_io, -	.init_early = imx27_init_early, -	.init_irq = mx27_init_irq, -	.init_time	= eukrea_cpuimx27_timer_init, -	.init_machine = eukrea_cpuimx27_init, -	.restart	= mxc_restart, -MACHINE_END diff --git a/arch/arm/mach-imx/mach-imx6sx.c b/arch/arm/mach-imx/mach-imx6sx.c index 673a734165ba..3de3b7369aef 100644 --- a/arch/arm/mach-imx/mach-imx6sx.c +++ b/arch/arm/mach-imx/mach-imx6sx.c @@ -42,6 +42,9 @@ static void __init imx6sx_init_irq(void)  static void __init imx6sx_init_late(void)  {  	imx6q_cpuidle_init(); + +	if (IS_ENABLED(CONFIG_ARM_IMX6Q_CPUFREQ)) +		platform_device_register_simple("imx6q-cpufreq", -1, NULL, 0);  }  static const char * const imx6sx_dt_compat[] __initconst = { diff --git a/arch/arm/mach-imx/mach-mx1ads.c b/arch/arm/mach-imx/mach-mx1ads.c deleted file mode 100644 index 77fda3de4290..000000000000 --- a/arch/arm/mach-imx/mach-mx1ads.c +++ /dev/null @@ -1,154 +0,0 @@ -/* - * arch/arm/mach-imx/mach-mx1ads.c - * - * Initially based on: - *	linux-2.6.7-imx/arch/arm/mach-imx/scb9328.c - *	Copyright (c) 2004 Sascha Hauer <sascha@saschahauer.de> - * - * 2004 (c) MontaVista Software, Inc. - * - * This file is licensed under the terms of the GNU General Public - * License version 2. This program is licensed "as is" without any - * warranty of any kind, whether express or implied. - */ - -#include <linux/i2c.h> -#include <linux/i2c/pcf857x.h> -#include <linux/init.h> -#include <linux/kernel.h> -#include <linux/platform_device.h> -#include <linux/mtd/physmap.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/time.h> - -#include "common.h" -#include "devices-imx1.h" -#include "hardware.h" -#include "iomux-mx1.h" - -static const int mx1ads_pins[] __initconst = { -	/* UART1 */ -	PC9_PF_UART1_CTS, -	PC10_PF_UART1_RTS, -	PC11_PF_UART1_TXD, -	PC12_PF_UART1_RXD, -	/* UART2 */ -	PB28_PF_UART2_CTS, -	PB29_PF_UART2_RTS, -	PB30_PF_UART2_TXD, -	PB31_PF_UART2_RXD, -	/* I2C */ -	PA15_PF_I2C_SDA, -	PA16_PF_I2C_SCL, -	/* SPI */ -	PC13_PF_SPI1_SPI_RDY, -	PC14_PF_SPI1_SCLK, -	PC15_PF_SPI1_SS, -	PC16_PF_SPI1_MISO, -	PC17_PF_SPI1_MOSI, -}; - -/* - * UARTs platform data - */ - -static const struct imxuart_platform_data uart0_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; -        -static const struct imxuart_platform_data uart1_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -/* - * Physmap flash - */ - -static const struct physmap_flash_data mx1ads_flash_data __initconst = { -	.width		= 4,		/* bankwidth in bytes */ -}; - -static const struct resource flash_resource __initconst = { -	.start	= MX1_CS0_PHYS, -	.end	= MX1_CS0_PHYS + SZ_32M - 1, -	.flags	= IORESOURCE_MEM, -}; - -/* - * I2C - */ -static struct pcf857x_platform_data pcf857x_data[] = { -	{ -		.gpio_base = 4 * 32, -	}, { -		.gpio_base = 4 * 32 + 16, -	} -}; - -static const struct imxi2c_platform_data mx1ads_i2c_data __initconst = { -	.bitrate = 100000, -}; - -static struct i2c_board_info mx1ads_i2c_devices[] = { -	{ -		I2C_BOARD_INFO("pcf8575", 0x22), -		.platform_data = &pcf857x_data[0], -	}, { -		I2C_BOARD_INFO("pcf8575", 0x24), -		.platform_data = &pcf857x_data[1], -	}, -}; - -/* - * Board init - */ -static void __init mx1ads_init(void) -{ -	imx1_soc_init(); - -	mxc_gpio_setup_multiple_pins(mx1ads_pins, -		ARRAY_SIZE(mx1ads_pins), "mx1ads"); - -	/* UART */ -	imx1_add_imx_uart0(&uart0_pdata); -	imx1_add_imx_uart1(&uart1_pdata); - -	/* Physmap flash */ -	platform_device_register_resndata(NULL, "physmap-flash", 0, -			&flash_resource, 1, -			&mx1ads_flash_data, sizeof(mx1ads_flash_data)); - -	/* I2C */ -	i2c_register_board_info(0, mx1ads_i2c_devices, -				ARRAY_SIZE(mx1ads_i2c_devices)); - -	imx1_add_imx_i2c(&mx1ads_i2c_data); -} - -static void __init mx1ads_timer_init(void) -{ -	mx1_clocks_init(32000); -} - -MACHINE_START(MX1ADS, "Freescale MX1ADS") -	/* Maintainer: Sascha Hauer, Pengutronix */ -	.atag_offset = 0x100, -	.map_io = mx1_map_io, -	.init_early = imx1_init_early, -	.init_irq = mx1_init_irq, -	.init_time	= mx1ads_timer_init, -	.init_machine = mx1ads_init, -	.restart	= mxc_restart, -MACHINE_END - -MACHINE_START(MXLADS, "Freescale MXLADS") -	.atag_offset = 0x100, -	.map_io = mx1_map_io, -	.init_early = imx1_init_early, -	.init_irq = mx1_init_irq, -	.init_time	= mx1ads_timer_init, -	.init_machine = mx1ads_init, -	.restart	= mxc_restart, -MACHINE_END diff --git a/arch/arm/mach-imx/mach-mx31_3ds.c b/arch/arm/mach-imx/mach-mx31_3ds.c index 453f41a2c5a9..65a0dc06a97c 100644 --- a/arch/arm/mach-imx/mach-mx31_3ds.c +++ b/arch/arm/mach-imx/mach-mx31_3ds.c @@ -307,7 +307,7 @@ static int mx31_3ds_sdhc1_init(struct device *dev,  	ret = gpio_request_array(mx31_3ds_sdhc1_gpios,  				 ARRAY_SIZE(mx31_3ds_sdhc1_gpios));  	if (ret) { -		pr_warning("Unable to request the SD/MMC GPIOs.\n"); +		pr_warn("Unable to request the SD/MMC GPIOs.\n");  		return ret;  	} @@ -316,7 +316,7 @@ static int mx31_3ds_sdhc1_init(struct device *dev,  			  IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,  			  "sdhc1-detect", data);  	if (ret) { -		pr_warning("Unable to request the SD/MMC card-detect IRQ.\n"); +		pr_warn("Unable to request the SD/MMC card-detect IRQ.\n");  		goto gpio_free;  	} diff --git a/arch/arm/mach-imx/mach-mx31lite.c b/arch/arm/mach-imx/mach-mx31lite.c index 57eac6f45fab..4822a1738de4 100644 --- a/arch/arm/mach-imx/mach-mx31lite.c +++ b/arch/arm/mach-imx/mach-mx31lite.c @@ -270,7 +270,7 @@ static void __init mx31lite_init(void)  	/* SMSC9117 IRQ pin */  	ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");  	if (ret) -		pr_warning("could not get LAN irq gpio\n"); +		pr_warn("could not get LAN irq gpio\n");  	else {  		gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_SFS6));  		smsc911x_resources[1].start = diff --git a/arch/arm/mach-imx/mach-mxt_td60.c b/arch/arm/mach-imx/mach-mxt_td60.c deleted file mode 100644 index 0b5d1ca31b9f..000000000000 --- a/arch/arm/mach-imx/mach-mxt_td60.c +++ /dev/null @@ -1,273 +0,0 @@ -/* - *  Copyright (C) 2000 Deep Blue Solutions Ltd - *  Copyright (C) 2002 Shane Nay (shane@minirl.com) - *  Copyright 2006-2007 Freescale Semiconductor, Inc. All Rights Reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - */ - -#include <linux/platform_device.h> -#include <linux/mtd/mtd.h> -#include <linux/mtd/map.h> -#include <linux/mtd/partitions.h> -#include <linux/mtd/physmap.h> -#include <linux/i2c.h> -#include <linux/irq.h> -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/time.h> -#include <asm/mach/map.h> -#include <linux/gpio.h> -#include <linux/platform_data/pca953x.h> - -#include "common.h" -#include "devices-imx27.h" -#include "hardware.h" -#include "iomux-mx27.h" - -static const int mxt_td60_pins[] __initconst = { -	/* UART0 */ -	PE12_PF_UART1_TXD, -	PE13_PF_UART1_RXD, -	PE14_PF_UART1_CTS, -	PE15_PF_UART1_RTS, -	/* UART1 */ -	PE3_PF_UART2_CTS, -	PE4_PF_UART2_RTS, -	PE6_PF_UART2_TXD, -	PE7_PF_UART2_RXD, -	/* UART2 */ -	PE8_PF_UART3_TXD, -	PE9_PF_UART3_RXD, -	PE10_PF_UART3_CTS, -	PE11_PF_UART3_RTS, -	/* FEC */ -	PD0_AIN_FEC_TXD0, -	PD1_AIN_FEC_TXD1, -	PD2_AIN_FEC_TXD2, -	PD3_AIN_FEC_TXD3, -	PD4_AOUT_FEC_RX_ER, -	PD5_AOUT_FEC_RXD1, -	PD6_AOUT_FEC_RXD2, -	PD7_AOUT_FEC_RXD3, -	PD8_AF_FEC_MDIO, -	PD9_AIN_FEC_MDC, -	PD10_AOUT_FEC_CRS, -	PD11_AOUT_FEC_TX_CLK, -	PD12_AOUT_FEC_RXD0, -	PD13_AOUT_FEC_RX_DV, -	PD14_AOUT_FEC_RX_CLK, -	PD15_AOUT_FEC_COL, -	PD16_AIN_FEC_TX_ER, -	PF23_AIN_FEC_TX_EN, -	/* I2C1 */ -	PD17_PF_I2C_DATA, -	PD18_PF_I2C_CLK, -	/* I2C2 */ -	PC5_PF_I2C2_SDA, -	PC6_PF_I2C2_SCL, -	/* FB */ -	PA5_PF_LSCLK, -	PA6_PF_LD0, -	PA7_PF_LD1, -	PA8_PF_LD2, -	PA9_PF_LD3, -	PA10_PF_LD4, -	PA11_PF_LD5, -	PA12_PF_LD6, -	PA13_PF_LD7, -	PA14_PF_LD8, -	PA15_PF_LD9, -	PA16_PF_LD10, -	PA17_PF_LD11, -	PA18_PF_LD12, -	PA19_PF_LD13, -	PA20_PF_LD14, -	PA21_PF_LD15, -	PA22_PF_LD16, -	PA23_PF_LD17, -	PA25_PF_CLS, -	PA27_PF_SPL_SPR, -	PA28_PF_HSYNC, -	PA29_PF_VSYNC, -	PA30_PF_CONTRAST, -	PA31_PF_OE_ACD, -	/* OWIRE */ -	PE16_AF_OWIRE, -	/* SDHC1*/ -	PE18_PF_SD1_D0, -	PE19_PF_SD1_D1, -	PE20_PF_SD1_D2, -	PE21_PF_SD1_D3, -	PE22_PF_SD1_CMD, -	PE23_PF_SD1_CLK, -	PF8_AF_ATA_IORDY, -	/* SDHC2*/ -	PB4_PF_SD2_D0, -	PB5_PF_SD2_D1, -	PB6_PF_SD2_D2, -	PB7_PF_SD2_D3, -	PB8_PF_SD2_CMD, -	PB9_PF_SD2_CLK, -}; - -static const struct mxc_nand_platform_data -mxt_td60_nand_board_info __initconst = { -	.width = 1, -	.hw_ecc = 1, -}; - -static const struct imxi2c_platform_data mxt_td60_i2c0_data __initconst = { -	.bitrate = 100000, -}; - -/* PCA9557 */ -static int mxt_td60_pca9557_setup(struct i2c_client *client, -				unsigned gpio_base, unsigned ngpio, -				void *context) -{ -	static int mxt_td60_gpio_value[] = { -		-1, -1, -1, -1, -1, -1, -1, 1 -	}; -	int n; - -	for (n = 0; n < ARRAY_SIZE(mxt_td60_gpio_value); ++n) { -		gpio_request(gpio_base + n, "MXT_TD60 GPIO Exp"); -		if (mxt_td60_gpio_value[n] < 0) -			gpio_direction_input(gpio_base + n); -		else -			gpio_direction_output(gpio_base + n, -						mxt_td60_gpio_value[n]); -		gpio_export(gpio_base + n, 0); -	} - -	return 0; -} - -static struct pca953x_platform_data mxt_td60_pca9557_pdata = { -	.gpio_base	= 240, /* place PCA9557 after all MX27 gpio pins */ -	.invert		= 0, /* Do not invert */ -	.setup		= mxt_td60_pca9557_setup, -}; - -static struct i2c_board_info mxt_td60_i2c_devices[] = { -	{ -		I2C_BOARD_INFO("pca9557", 0x18), -		.platform_data = &mxt_td60_pca9557_pdata, -	}, -}; - -static const struct imxi2c_platform_data mxt_td60_i2c1_data __initconst = { -	.bitrate = 100000, -}; - -static struct i2c_board_info mxt_td60_i2c2_devices[] = { -}; - -static struct imx_fb_videomode mxt_td60_modes[] = { -	{ -		.mode = { -			.name		= "Chimei LW700AT9003", -			.refresh	= 60, -			.xres		= 800, -			.yres		= 480, -			.pixclock	= 30303, -			.hsync_len	= 64, -			.left_margin	= 0x67, -			.right_margin	= 0x68, -			.vsync_len	= 16, -			.upper_margin	= 0x0f, -			.lower_margin	= 0x0f, -		}, -		.bpp		= 16, -		.pcr		= 0xFA208B83, -	}, -}; - -static const struct imx_fb_platform_data mxt_td60_fb_data __initconst = { -	.mode = mxt_td60_modes, -	.num_modes = ARRAY_SIZE(mxt_td60_modes), - -	/* -	 * - HSYNC active high -	 * - VSYNC active high -	 * - clk notenabled while idle -	 * - clock inverted -	 * - data not inverted -	 * - data enable low active -	 * - enable sharp mode -	 */ -	.pwmr		= 0x00A903FF, -	.lscr1		= 0x00120300, -	.dmacr		= 0x00020010, -}; - -static int mxt_td60_sdhc1_init(struct device *dev, irq_handler_t detect_irq, -				void *data) -{ -	return request_irq(gpio_to_irq(IMX_GPIO_NR(6, 8)), detect_irq, -			   IRQF_TRIGGER_FALLING, "sdhc1-card-detect", data); -} - -static void mxt_td60_sdhc1_exit(struct device *dev, void *data) -{ -	free_irq(gpio_to_irq(IMX_GPIO_NR(6, 8)), data); -} - -static const struct imxmmc_platform_data sdhc1_pdata __initconst = { -	.init = mxt_td60_sdhc1_init, -	.exit = mxt_td60_sdhc1_exit, -}; - -static const struct imxuart_platform_data uart_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -static void __init mxt_td60_board_init(void) -{ -	imx27_soc_init(); - -	mxc_gpio_setup_multiple_pins(mxt_td60_pins, ARRAY_SIZE(mxt_td60_pins), -			"MXT_TD60"); - -	imx27_add_imx_uart0(&uart_pdata); -	imx27_add_imx_uart1(&uart_pdata); -	imx27_add_imx_uart2(&uart_pdata); -	imx27_add_mxc_nand(&mxt_td60_nand_board_info); - -	i2c_register_board_info(0, mxt_td60_i2c_devices, -				ARRAY_SIZE(mxt_td60_i2c_devices)); - -	i2c_register_board_info(1, mxt_td60_i2c2_devices, -				ARRAY_SIZE(mxt_td60_i2c2_devices)); - -	imx27_add_imx_i2c(0, &mxt_td60_i2c0_data); -	imx27_add_imx_i2c(1, &mxt_td60_i2c1_data); -	imx27_add_imx_fb(&mxt_td60_fb_data); -	imx27_add_mxc_mmc(0, &sdhc1_pdata); -	imx27_add_fec(NULL); -} - -static void __init mxt_td60_timer_init(void) -{ -	mx27_clocks_init(26000000); -} - -MACHINE_START(MXT_TD60, "Maxtrack i-MXT TD60") -	/* maintainer: Maxtrack Industrial */ -	.atag_offset = 0x100, -	.map_io = mx27_map_io, -	.init_early = imx27_init_early, -	.init_irq = mx27_init_irq, -	.init_time	= mxt_td60_timer_init, -	.init_machine = mxt_td60_board_init, -	.restart	= mxc_restart, -MACHINE_END diff --git a/arch/arm/mach-imx/mach-pcm037.c b/arch/arm/mach-imx/mach-pcm037.c index 8eb1570f7851..6d879417db49 100644 --- a/arch/arm/mach-imx/mach-pcm037.c +++ b/arch/arm/mach-imx/mach-pcm037.c @@ -58,7 +58,7 @@ static int __init pcm037_variant_setup(char *str)  	if (!strcmp("eet", str))  		pcm037_instance = PCM037_EET;  	else if (strcmp("pcm970", str)) -		pr_warning("Unknown pcm037 baseboard variant %s\n", str); +		pr_warn("Unknown pcm037 baseboard variant %s\n", str);  	return 1;  } @@ -624,7 +624,7 @@ static void __init pcm037_init(void)  	/* LAN9217 IRQ pin */  	ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1), "lan9217-irq");  	if (ret) -		pr_warning("could not get LAN irq gpio\n"); +		pr_warn("could not get LAN irq gpio\n");  	else {  		gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO3_1));  		smsc911x_resources[1].start = diff --git a/arch/arm/mach-imx/mach-pcm038.c b/arch/arm/mach-imx/mach-pcm038.c deleted file mode 100644 index ee862ad6b6fc..000000000000 --- a/arch/arm/mach-imx/mach-pcm038.c +++ /dev/null @@ -1,358 +0,0 @@ -/* - * Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix - * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -#include <linux/i2c.h> -#include <linux/platform_data/at24.h> -#include <linux/io.h> -#include <linux/mtd/plat-ram.h> -#include <linux/mtd/physmap.h> -#include <linux/platform_device.h> -#include <linux/regulator/machine.h> -#include <linux/mfd/mc13783.h> -#include <linux/spi/spi.h> -#include <linux/irq.h> -#include <linux/gpio.h> - -#include <asm/mach-types.h> -#include <asm/mach/arch.h> -#include <asm/mach/time.h> - -#include "board-pcm038.h" -#include "common.h" -#include "devices-imx27.h" -#include "ehci.h" -#include "hardware.h" -#include "iomux-mx27.h" -#include "ulpi.h" - -static const int pcm038_pins[] __initconst = { -	/* UART1 */ -	PE12_PF_UART1_TXD, -	PE13_PF_UART1_RXD, -	PE14_PF_UART1_CTS, -	PE15_PF_UART1_RTS, -	/* UART2 */ -	PE3_PF_UART2_CTS, -	PE4_PF_UART2_RTS, -	PE6_PF_UART2_TXD, -	PE7_PF_UART2_RXD, -	/* UART3 */ -	PE8_PF_UART3_TXD, -	PE9_PF_UART3_RXD, -	PE10_PF_UART3_CTS, -	PE11_PF_UART3_RTS, -	/* FEC */ -	PD0_AIN_FEC_TXD0, -	PD1_AIN_FEC_TXD1, -	PD2_AIN_FEC_TXD2, -	PD3_AIN_FEC_TXD3, -	PD4_AOUT_FEC_RX_ER, -	PD5_AOUT_FEC_RXD1, -	PD6_AOUT_FEC_RXD2, -	PD7_AOUT_FEC_RXD3, -	PD8_AF_FEC_MDIO, -	PD9_AIN_FEC_MDC, -	PD10_AOUT_FEC_CRS, -	PD11_AOUT_FEC_TX_CLK, -	PD12_AOUT_FEC_RXD0, -	PD13_AOUT_FEC_RX_DV, -	PD14_AOUT_FEC_RX_CLK, -	PD15_AOUT_FEC_COL, -	PD16_AIN_FEC_TX_ER, -	PF23_AIN_FEC_TX_EN, -	/* I2C2 */ -	PC5_PF_I2C2_SDA, -	PC6_PF_I2C2_SCL, -	/* SPI1 */ -	PD25_PF_CSPI1_RDY, -	PD29_PF_CSPI1_SCLK, -	PD30_PF_CSPI1_MISO, -	PD31_PF_CSPI1_MOSI, -	/* SSI1 */ -	PC20_PF_SSI1_FS, -	PC21_PF_SSI1_RXD, -	PC22_PF_SSI1_TXD, -	PC23_PF_SSI1_CLK, -	/* SSI4 */ -	PC16_PF_SSI4_FS, -	PC17_PF_SSI4_RXD, -	PC18_PF_SSI4_TXD, -	PC19_PF_SSI4_CLK, -	/* USB host */ -	PA0_PF_USBH2_CLK, -	PA1_PF_USBH2_DIR, -	PA2_PF_USBH2_DATA7, -	PA3_PF_USBH2_NXT, -	PA4_PF_USBH2_STP, -	PD19_AF_USBH2_DATA4, -	PD20_AF_USBH2_DATA3, -	PD21_AF_USBH2_DATA6, -	PD22_AF_USBH2_DATA0, -	PD23_AF_USBH2_DATA2, -	PD24_AF_USBH2_DATA1, -	PD26_AF_USBH2_DATA5, -}; - -/* - * Phytec's PCM038 comes with 2MiB battery buffered SRAM, - * 16 bit width - */ - -static struct platdata_mtd_ram pcm038_sram_data = { -	.bankwidth = 2, -}; - -static struct resource pcm038_sram_resource = { -	.start = MX27_CS1_BASE_ADDR, -	.end   = MX27_CS1_BASE_ADDR + 512 * 1024 - 1, -	.flags = IORESOURCE_MEM, -}; - -static struct platform_device pcm038_sram_mtd_device = { -	.name = "mtd-ram", -	.id = 0, -	.dev = { -		.platform_data = &pcm038_sram_data, -	}, -	.num_resources = 1, -	.resource = &pcm038_sram_resource, -}; - -/* - * Phytec's phyCORE-i.MX27 comes with 32MiB flash, - * 16 bit width - */ -static struct physmap_flash_data pcm038_flash_data = { -	.width = 2, -}; - -static struct resource pcm038_flash_resource = { -	.start = 0xc0000000, -	.end   = 0xc1ffffff, -	.flags = IORESOURCE_MEM, -}; - -static struct platform_device pcm038_nor_mtd_device = { -	.name = "physmap-flash", -	.id = 0, -	.dev = { -		.platform_data = &pcm038_flash_data, -	}, -	.num_resources = 1, -	.resource = &pcm038_flash_resource, -}; - -static const struct imxuart_platform_data uart_pdata __initconst = { -	.flags = IMXUART_HAVE_RTSCTS, -}; - -static const struct mxc_nand_platform_data -pcm038_nand_board_info __initconst = { -	.width = 1, -	.hw_ecc = 1, -}; - -static struct platform_device *platform_devices[] __initdata = { -	&pcm038_nor_mtd_device, -	&pcm038_sram_mtd_device, -}; - -/* On pcm038 there's a sram attached to CS1, we enable the chipselect here and - * setup other stuffs to access the sram. */ -static void __init pcm038_init_sram(void) -{ -	__raw_writel(0x0000d843, MX27_IO_ADDRESS(MX27_WEIM_CSCRxU(1))); -	__raw_writel(0x22252521, MX27_IO_ADDRESS(MX27_WEIM_CSCRxL(1))); -	__raw_writel(0x22220a00, MX27_IO_ADDRESS(MX27_WEIM_CSCRxA(1))); -} - -static const struct imxi2c_platform_data pcm038_i2c1_data __initconst = { -	.bitrate = 100000, -}; - -static struct at24_platform_data board_eeprom = { -	.byte_len = 4096, -	.page_size = 32, -	.flags = AT24_FLAG_ADDR16, -}; - -static struct i2c_board_info pcm038_i2c_devices[] = { -	{ -		I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ -		.platform_data = &board_eeprom, -	}, { -		I2C_BOARD_INFO("pcf8563", 0x51), -	}, { -		I2C_BOARD_INFO("lm75", 0x4a), -	} -}; - -static int pcm038_spi_cs[] = {GPIO_PORTD + 28}; - -static const struct spi_imx_master pcm038_spi0_data __initconst = { -	.chipselect = pcm038_spi_cs, -	.num_chipselect = ARRAY_SIZE(pcm038_spi_cs), -}; - -static struct regulator_consumer_supply sdhc1_consumers[] = { -	{ -		.dev_name = "imx21-mmc.1", -		.supply	= "sdhc_vcc", -	}, -}; - -static struct regulator_init_data sdhc1_data = { -	.constraints = { -		.min_uV = 3000000, -		.max_uV = 3400000, -		.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | -			REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -		.valid_modes_mask = REGULATOR_MODE_NORMAL | -			REGULATOR_MODE_FAST, -		.always_on = 0, -		.boot_on = 0, -	}, -	.num_consumer_supplies = ARRAY_SIZE(sdhc1_consumers), -	.consumer_supplies = sdhc1_consumers, -}; - -static struct regulator_consumer_supply cam_consumers[] = { -	{ -		.dev_name = NULL, -		.supply	= "imx_cam_vcc", -	}, -}; - -static struct regulator_init_data cam_data = { -	.constraints = { -		.min_uV = 3000000, -		.max_uV = 3400000, -		.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | -			REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, -		.valid_modes_mask = REGULATOR_MODE_NORMAL | -			REGULATOR_MODE_FAST, -		.always_on = 0, -		.boot_on = 0, -	}, -	.num_consumer_supplies = ARRAY_SIZE(cam_consumers), -	.consumer_supplies = cam_consumers, -}; - -static struct mc13xxx_regulator_init_data pcm038_regulators[] = { -	{ -		.id = MC13783_REG_VCAM, -		.init_data = &cam_data, -	}, { -		.id = MC13783_REG_VMMC1, -		.init_data = &sdhc1_data, -	}, -}; - -static struct mc13xxx_platform_data pcm038_pmic = { -	.regulators = { -		.regulators = pcm038_regulators, -		.num_regulators = ARRAY_SIZE(pcm038_regulators), -	}, -	.flags = MC13XXX_USE_ADC | MC13XXX_USE_TOUCHSCREEN, -}; - -static struct spi_board_info pcm038_spi_board_info[] __initdata = { -	{ -		.modalias = "mc13783", -		/* irq number is run-time assigned */ -		.max_speed_hz = 300000, -		.bus_num = 0, -		.chip_select = 0, -		.platform_data = &pcm038_pmic, -		.mode = SPI_CS_HIGH, -	} -}; - -static int pcm038_usbh2_init(struct platform_device *pdev) -{ -	return mx27_initialize_usb_hw(pdev->id, MXC_EHCI_POWER_PINS_ENABLED | -			MXC_EHCI_INTERFACE_DIFF_UNI); -} - -static const struct mxc_usbh_platform_data usbh2_pdata __initconst = { -	.init	= pcm038_usbh2_init, -	.portsc	= MXC_EHCI_MODE_ULPI, -}; - -static void __init pcm038_init(void) -{ -	imx27_soc_init(); - -	mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins), -			"PCM038"); - -	pcm038_init_sram(); - -	imx27_add_imx_uart0(&uart_pdata); -	imx27_add_imx_uart1(&uart_pdata); -	imx27_add_imx_uart2(&uart_pdata); - -	mxc_gpio_mode(PE16_AF_OWIRE); -	imx27_add_mxc_nand(&pcm038_nand_board_info); - -	/* only the i2c master 1 is used on this CPU card */ -	i2c_register_board_info(1, pcm038_i2c_devices, -				ARRAY_SIZE(pcm038_i2c_devices)); - -	imx27_add_imx_i2c(1, &pcm038_i2c1_data); - -	/* PE18 for user-LED D40 */ -	mxc_gpio_mode(GPIO_PORTE | 18 | GPIO_GPIO | GPIO_OUT); - -	mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT); - -	/* MC13783 IRQ */ -	mxc_gpio_mode(GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN); - -	imx27_add_spi_imx0(&pcm038_spi0_data); -	pcm038_spi_board_info[0].irq = gpio_to_irq(IMX_GPIO_NR(2, 23)); -	spi_register_board_info(pcm038_spi_board_info, -				ARRAY_SIZE(pcm038_spi_board_info)); - -	imx27_add_mxc_ehci_hs(2, &usbh2_pdata); - -	imx27_add_fec(NULL); -	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); -	imx27_add_imx2_wdt(); -	imx27_add_mxc_w1(); - -#ifdef CONFIG_MACH_PCM970_BASEBOARD -	pcm970_baseboard_init(); -#endif -} - -static void __init pcm038_timer_init(void) -{ -	mx27_clocks_init(26000000); -} - -MACHINE_START(PCM038, "phyCORE-i.MX27") -	.atag_offset = 0x100, -	.map_io = mx27_map_io, -	.init_early = imx27_init_early, -	.init_irq = mx27_init_irq, -	.init_time	= pcm038_timer_init, -	.init_machine = pcm038_init, -	.restart	= mxc_restart, -MACHINE_END diff --git a/arch/arm/mach-imx/mxc.h b/arch/arm/mach-imx/mxc.h index a39b69ef4301..17a41ca65acf 100644 --- a/arch/arm/mach-imx/mxc.h +++ b/arch/arm/mach-imx/mxc.h @@ -43,6 +43,8 @@  #define IMX_CHIP_REVISION_1_1		0x11  #define IMX_CHIP_REVISION_1_2		0x12  #define IMX_CHIP_REVISION_1_3		0x13 +#define IMX_CHIP_REVISION_1_4		0x14 +#define IMX_CHIP_REVISION_1_5		0x15  #define IMX_CHIP_REVISION_2_0		0x20  #define IMX_CHIP_REVISION_2_1		0x21  #define IMX_CHIP_REVISION_2_2		0x22 diff --git a/arch/arm/mach-imx/pcm970-baseboard.c b/arch/arm/mach-imx/pcm970-baseboard.c deleted file mode 100644 index 51c608234089..000000000000 --- a/arch/arm/mach-imx/pcm970-baseboard.c +++ /dev/null @@ -1,231 +0,0 @@ -/* - * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de) - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301, USA. - */ - -#include <linux/gpio.h> -#include <linux/irq.h> -#include <linux/platform_device.h> -#include <linux/can/platform/sja1000.h> - -#include <asm/mach/arch.h> - -#include "common.h" -#include "devices-imx27.h" -#include "hardware.h" -#include "iomux-mx27.h" - -static const int pcm970_pins[] __initconst = { -	/* SDHC */ -	PB4_PF_SD2_D0, -	PB5_PF_SD2_D1, -	PB6_PF_SD2_D2, -	PB7_PF_SD2_D3, -	PB8_PF_SD2_CMD, -	PB9_PF_SD2_CLK, -	/* display */ -	PA5_PF_LSCLK, -	PA6_PF_LD0, -	PA7_PF_LD1, -	PA8_PF_LD2, -	PA9_PF_LD3, -	PA10_PF_LD4, -	PA11_PF_LD5, -	PA12_PF_LD6, -	PA13_PF_LD7, -	PA14_PF_LD8, -	PA15_PF_LD9, -	PA16_PF_LD10, -	PA17_PF_LD11, -	PA18_PF_LD12, -	PA19_PF_LD13, -	PA20_PF_LD14, -	PA21_PF_LD15, -	PA22_PF_LD16, -	PA23_PF_LD17, -	PA24_PF_REV, -	PA25_PF_CLS, -	PA26_PF_PS, -	PA27_PF_SPL_SPR, -	PA28_PF_HSYNC, -	PA29_PF_VSYNC, -	PA30_PF_CONTRAST, -	PA31_PF_OE_ACD, -	/* -	 * it seems the data line misses a pullup, so we must enable -	 * the internal pullup as a local workaround -	 */ -	PD17_PF_I2C_DATA | GPIO_PUEN, -	PD18_PF_I2C_CLK, -	/* Camera */ -	PB10_PF_CSI_D0, -	PB11_PF_CSI_D1, -	PB12_PF_CSI_D2, -	PB13_PF_CSI_D3, -	PB14_PF_CSI_D4, -	PB15_PF_CSI_MCLK, -	PB16_PF_CSI_PIXCLK, -	PB17_PF_CSI_D5, -	PB18_PF_CSI_D6, -	PB19_PF_CSI_D7, -	PB20_PF_CSI_VSYNC, -	PB21_PF_CSI_HSYNC, -}; - -static int pcm970_sdhc2_get_ro(struct device *dev) -{ -	return gpio_get_value(GPIO_PORTC + 28); -} - -static int pcm970_sdhc2_init(struct device *dev, irq_handler_t detect_irq, void *data) -{ -	int ret; - -	ret = request_irq(gpio_to_irq(IMX_GPIO_NR(3, 29)), detect_irq, -			  IRQF_TRIGGER_FALLING, "imx-mmc-detect", data); -	if (ret) -		return ret; - -	ret = gpio_request(GPIO_PORTC + 28, "imx-mmc-ro"); -	if (ret) { -		free_irq(gpio_to_irq(IMX_GPIO_NR(3, 29)), data); -		return ret; -	} - -	gpio_direction_input(GPIO_PORTC + 28); - -	return 0; -} - -static void pcm970_sdhc2_exit(struct device *dev, void *data) -{ -	free_irq(gpio_to_irq(IMX_GPIO_NR(3, 29)), data); -	gpio_free(GPIO_PORTC + 28); -} - -static const struct imxmmc_platform_data sdhc_pdata __initconst = { -	.get_ro = pcm970_sdhc2_get_ro, -	.init = pcm970_sdhc2_init, -	.exit = pcm970_sdhc2_exit, -}; - -static struct imx_fb_videomode pcm970_modes[] = { -	{ -		.mode = { -			.name		= "Sharp-LQ035Q7", -			.refresh	= 60, -			.xres		= 240, -			.yres		= 320, -			.pixclock	= 188679, /* in ps (5.3MHz) */ -			.hsync_len	= 7, -			.left_margin	= 5, -			.right_margin	= 16, -			.vsync_len	= 1, -			.upper_margin	= 7, -			.lower_margin	= 9, -		}, -		/* -		 * - HSYNC active high -		 * - VSYNC active high -		 * - clk notenabled while idle -		 * - clock not inverted -		 * - data not inverted -		 * - data enable low active -		 * - enable sharp mode -		 */ -		.pcr		= 0xF00080C0, -		.bpp		= 16, -	}, { -		.mode = { -			.name		= "TX090", -			.refresh	= 60, -			.xres		= 240, -			.yres		= 320, -			.pixclock	= 38255, -			.left_margin	= 144, -			.right_margin	= 0, -			.upper_margin	= 7, -			.lower_margin	= 40, -			.hsync_len	= 96, -			.vsync_len	= 1, -		}, -		/* -		 * - HSYNC active low (1 << 22) -		 * - VSYNC active low (1 << 23) -		 * - clk notenabled while idle -		 * - clock not inverted -		 * - data not inverted -		 * - data enable low active -		 * - enable sharp mode -		 */ -		.pcr = 0xF0008080 | (1<<22) | (1<<23) | (1<<19), -		.bpp = 32, -	}, -}; - -static const struct imx_fb_platform_data pcm038_fb_data __initconst = { -	.mode = pcm970_modes, -	.num_modes = ARRAY_SIZE(pcm970_modes), - -	.pwmr		= 0x00A903FF, -	.lscr1		= 0x00120300, -	.dmacr		= 0x00020010, -}; - -static struct resource pcm970_sja1000_resources[] = { -	{ -		.start   = MX27_CS4_BASE_ADDR, -		.end     = MX27_CS4_BASE_ADDR + 0x100 - 1, -		.flags   = IORESOURCE_MEM, -	}, { -		/* irq number is run-time assigned */ -		.flags   = IORESOURCE_IRQ | IORESOURCE_IRQ_LOWEDGE, -	}, -}; - -static struct sja1000_platform_data pcm970_sja1000_platform_data = { -	.osc_freq	= 16000000, -	.ocr		= OCR_TX1_PULLDOWN | OCR_TX0_PUSHPULL, -	.cdr		= CDR_CBP, -}; - -static struct platform_device pcm970_sja1000 = { -	.name = "sja1000_platform", -	.dev = { -		.platform_data = &pcm970_sja1000_platform_data, -	}, -	.resource = pcm970_sja1000_resources, -	.num_resources = ARRAY_SIZE(pcm970_sja1000_resources), -}; - -/* - * system init for baseboard usage. Will be called by pcm038 init. - * - * Add platform devices present on this baseboard and init - * them from CPU side as far as required to use them later on - */ -void __init pcm970_baseboard_init(void) -{ -	mxc_gpio_setup_multiple_pins(pcm970_pins, ARRAY_SIZE(pcm970_pins), -			"PCM970"); - -	imx27_add_imx_fb(&pcm038_fb_data); -	mxc_gpio_mode(GPIO_PORTC | 28 | GPIO_GPIO | GPIO_IN); -	imx27_add_mxc_mmc(1, &sdhc_pdata); -	pcm970_sja1000_resources[1].start = gpio_to_irq(IMX_GPIO_NR(5, 19)); -	pcm970_sja1000_resources[1].end = gpio_to_irq(IMX_GPIO_NR(5, 19)); -	platform_device_register(&pcm970_sja1000); -} diff --git a/arch/arm/mach-imx/platsmp.c b/arch/arm/mach-imx/platsmp.c index 5b57c17c06bd..771bd25c1025 100644 --- a/arch/arm/mach-imx/platsmp.c +++ b/arch/arm/mach-imx/platsmp.c @@ -20,8 +20,6 @@  #include "common.h"  #include "hardware.h" -#define SCU_STANDBY_ENABLE	(1 << 5) -  u32 g_diag_reg;  static void __iomem *scu_base; @@ -45,14 +43,6 @@ void __init imx_scu_map_io(void)  	scu_base = IMX_IO_ADDRESS(base);  } -void imx_scu_standby_enable(void) -{ -	u32 val = readl_relaxed(scu_base); - -	val |= SCU_STANDBY_ENABLE; -	writel_relaxed(val, scu_base); -} -  static int imx_boot_secondary(unsigned int cpu, struct task_struct *idle)  {  	imx_set_cpu_jump(cpu, v7_secondary_startup); diff --git a/arch/arm/mach-imx/suspend-imx6.S b/arch/arm/mach-imx/suspend-imx6.S index 74b50f1982db..ca4ea2daf25b 100644 --- a/arch/arm/mach-imx/suspend-imx6.S +++ b/arch/arm/mach-imx/suspend-imx6.S @@ -173,6 +173,8 @@ ENTRY(imx6_suspend)  	ldr	r6, [r11, #0x0]  	ldr	r11, [r0, #PM_INFO_MX6Q_GPC_V_OFFSET]  	ldr	r6, [r11, #0x0] +	ldr	r11, [r0, #PM_INFO_MX6Q_IOMUXC_V_OFFSET] +	ldr	r6, [r11, #0x0]  	/* use r11 to store the IO address */  	ldr	r11, [r0, #PM_INFO_MX6Q_SRC_V_OFFSET] diff --git a/arch/arm/mach-imx/time.c b/arch/arm/mach-imx/time.c index bf92e5a351c0..15d18e198303 100644 --- a/arch/arm/mach-imx/time.c +++ b/arch/arm/mach-imx/time.c @@ -60,17 +60,22 @@  #define MX2_TSTAT_CAPT		(1 << 1)  #define MX2_TSTAT_COMP		(1 << 0) -/* MX31, MX35, MX25, MX5 */ +/* MX31, MX35, MX25, MX5, MX6 */  #define V2_TCTL_WAITEN		(1 << 3) /* Wait enable mode */  #define V2_TCTL_CLK_IPG		(1 << 6)  #define V2_TCTL_CLK_PER		(2 << 6) +#define V2_TCTL_CLK_OSC_DIV8	(5 << 6)  #define V2_TCTL_FRR		(1 << 9) +#define V2_TCTL_24MEN		(1 << 10) +#define V2_TPRER_PRE24M		12  #define V2_IR			0x0c  #define V2_TSTAT		0x08  #define V2_TSTAT_OF1		(1 << 0)  #define V2_TCN			0x24  #define V2_TCMP			0x10 +#define V2_TIMER_RATE_OSC_DIV8	3000000 +  #define timer_is_v1()	(cpu_is_mx1() || cpu_is_mx21() || cpu_is_mx27())  #define timer_is_v2()	(!timer_is_v1()) @@ -312,10 +317,22 @@ static void __init _mxc_timer_init(int irq,  	__raw_writel(0, timer_base + MXC_TCTL);  	__raw_writel(0, timer_base + MXC_TPRER); /* see datasheet note */ -	if (timer_is_v2()) -		tctl_val = V2_TCTL_CLK_PER | V2_TCTL_FRR | V2_TCTL_WAITEN | MXC_TCTL_TEN; -	else +	if (timer_is_v2()) { +		tctl_val = V2_TCTL_FRR | V2_TCTL_WAITEN | MXC_TCTL_TEN; +		if (clk_get_rate(clk_per) == V2_TIMER_RATE_OSC_DIV8) { +			tctl_val |= V2_TCTL_CLK_OSC_DIV8; +			if (cpu_is_imx6dl() || cpu_is_imx6sx()) { +				/* 24 / 8 = 3 MHz */ +				__raw_writel(7 << V2_TPRER_PRE24M, +					timer_base + MXC_TPRER); +				tctl_val |= V2_TCTL_24MEN; +			} +		} else { +			tctl_val |= V2_TCTL_CLK_PER; +		} +	} else {  		tctl_val = MX1_2_TCTL_FRR | MX1_2_TCTL_CLK_PCLK1 | MXC_TCTL_TEN; +	}  	__raw_writel(tctl_val, timer_base + MXC_TCTL); @@ -349,9 +366,13 @@ static void __init mxc_timer_init_dt(struct device_node *np)  	WARN_ON(!timer_base);  	irq = irq_of_parse_and_map(np, 0); -	clk_per = of_clk_get_by_name(np, "per");  	clk_ipg = of_clk_get_by_name(np, "ipg"); +	/* Try osc_per first, and fall back to per otherwise */ +	clk_per = of_clk_get_by_name(np, "osc_per"); +	if (IS_ERR(clk_per)) +		clk_per = of_clk_get_by_name(np, "per"); +  	_mxc_timer_init(irq, clk_per, clk_ipg);  }  CLOCKSOURCE_OF_DECLARE(mx1_timer, "fsl,imx1-gpt", mxc_timer_init_dt); diff --git a/arch/arm/mach-omap2/board-flash.c b/arch/arm/mach-omap2/board-flash.c index e87f2a83d6bf..2d245c2e641c 100644 --- a/arch/arm/mach-omap2/board-flash.c +++ b/arch/arm/mach-omap2/board-flash.c @@ -142,7 +142,7 @@ __init board_nand_init(struct mtd_partition *nand_parts, u8 nr_parts, u8 cs,  	board_nand_data.nr_parts	= nr_parts;  	board_nand_data.devsize		= nand_type; -	board_nand_data.ecc_opt = OMAP_ECC_HAM1_CODE_HW; +	board_nand_data.ecc_opt = OMAP_ECC_HAM1_CODE_SW;  	gpmc_nand_init(&board_nand_data, gpmc_t);  }  #endif /* CONFIG_MTD_NAND_OMAP2 || CONFIG_MTD_NAND_OMAP2_MODULE */ diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 9480997ba616..bdb5194147d4 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c @@ -241,6 +241,8 @@ MACHINE_END  #ifdef CONFIG_SOC_DRA7XX  static const char *dra74x_boards_compat[] __initconst = { +	"ti,am5728", +	"ti,am5726",  	"ti,dra742",  	"ti,dra7",  	NULL, @@ -260,6 +262,8 @@ DT_MACHINE_START(DRA74X_DT, "Generic DRA74X (Flattened Device Tree)")  MACHINE_END  static const char *dra72x_boards_compat[] __initconst = { +	"ti,am5718", +	"ti,am5716",  	"ti,dra722",  	NULL,  }; diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index 8897ad7035fd..cb7764314f17 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c @@ -49,7 +49,8 @@ static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt)  		return 0;  	/* legacy platforms support only HAM1 (1-bit Hamming) ECC scheme */ -	if (ecc_opt == OMAP_ECC_HAM1_CODE_HW) +	if (ecc_opt == OMAP_ECC_HAM1_CODE_HW || +	    ecc_opt == OMAP_ECC_HAM1_CODE_SW)  		return 1;  	else  		return 0; diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index 8bc13380f0a0..9f42d5437fcc 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c @@ -1403,8 +1403,11 @@ static int gpmc_probe_nand_child(struct platform_device *pdev,  		pr_err("%s: ti,nand-ecc-opt not found\n", __func__);  		return -ENODEV;  	} -	if (!strcmp(s, "ham1") || !strcmp(s, "sw") || -		!strcmp(s, "hw") || !strcmp(s, "hw-romcode")) + +	if (!strcmp(s, "sw")) +		gpmc_nand_data->ecc_opt = OMAP_ECC_HAM1_CODE_SW; +	else if (!strcmp(s, "ham1") || +		 !strcmp(s, "hw") || !strcmp(s, "hw-romcode"))  		gpmc_nand_data->ecc_opt =  				OMAP_ECC_HAM1_CODE_HW;  	else if (!strcmp(s, "bch4")) diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index d42022f2a71e..53841dea80ea 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c @@ -663,7 +663,7 @@ void __init dra7xxx_check_revision(void)  	default:  		/* Unknown default to latest silicon rev as default*/ -		pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%d)\n", +		pr_warn("%s: unknown idcode=0x%08x (hawkeye=0x%08x,rev=0x%x)\n",  			__func__, idcode, hawkeye, rev);  		omap_revision = DRA752_REV_ES1_1;  	} diff --git a/arch/arm/mach-omap2/omap_device.c b/arch/arm/mach-omap2/omap_device.c index 01ef59def44b..d22c30d3ccfa 100644 --- a/arch/arm/mach-omap2/omap_device.c +++ b/arch/arm/mach-omap2/omap_device.c @@ -56,7 +56,7 @@ static void _add_clkdev(struct omap_device *od, const char *clk_alias,  	r = clk_get_sys(dev_name(&od->pdev->dev), clk_alias);  	if (!IS_ERR(r)) { -		dev_warn(&od->pdev->dev, +		dev_dbg(&od->pdev->dev,  			 "alias %s already exists\n", clk_alias);  		clk_put(r);  		return; diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 6c074f37cdd2..8fd87a3055bf 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -2185,6 +2185,8 @@ static int _enable(struct omap_hwmod *oh)  			 oh->mux->pads_dynamic))) {  		omap_hwmod_mux(oh->mux, _HWMOD_STATE_ENABLED);  		_reconfigure_io_chain(); +	} else if (oh->flags & HWMOD_FORCE_MSTANDBY) { +		_reconfigure_io_chain();  	}  	_add_initiator_dep(oh, mpu_oh); @@ -2291,6 +2293,8 @@ static int _idle(struct omap_hwmod *oh)  	if (oh->mux && oh->mux->pads_dynamic) {  		omap_hwmod_mux(oh->mux, _HWMOD_STATE_IDLE);  		_reconfigure_io_chain(); +	} else if (oh->flags & HWMOD_FORCE_MSTANDBY) { +		_reconfigure_io_chain();  	}  	oh->_state = _HWMOD_STATE_IDLE; @@ -3345,6 +3349,9 @@ int __init omap_hwmod_register_links(struct omap_hwmod_ocp_if **ois)  	if (!ois)  		return 0; +	if (ois[0] == NULL) /* Empty list */ +		return 0; +  	if (!linkspace) {  		if (_alloc_linkspace(ois)) {  			pr_err("omap_hwmod: could not allocate link space\n"); diff --git a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c index 2757abf87fbc..5684f112654b 100644 --- a/arch/arm/mach-omap2/omap_hwmod_7xx_data.c +++ b/arch/arm/mach-omap2/omap_hwmod_7xx_data.c @@ -35,6 +35,7 @@  #include "i2c.h"  #include "mmc.h"  #include "wd_timer.h" +#include "soc.h"  /* Base offset for all DRA7XX interrupts external to MPUSS */  #define DRA7XX_IRQ_GIC_START	32 @@ -3261,7 +3262,6 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {  	&dra7xx_l4_per3__usb_otg_ss1,  	&dra7xx_l4_per3__usb_otg_ss2,  	&dra7xx_l4_per3__usb_otg_ss3, -	&dra7xx_l4_per3__usb_otg_ss4,  	&dra7xx_l3_main_1__vcp1,  	&dra7xx_l4_per2__vcp1,  	&dra7xx_l3_main_1__vcp2, @@ -3270,8 +3270,26 @@ static struct omap_hwmod_ocp_if *dra7xx_hwmod_ocp_ifs[] __initdata = {  	NULL,  }; +static struct omap_hwmod_ocp_if *dra74x_hwmod_ocp_ifs[] __initdata = { +	&dra7xx_l4_per3__usb_otg_ss4, +	NULL, +}; + +static struct omap_hwmod_ocp_if *dra72x_hwmod_ocp_ifs[] __initdata = { +	NULL, +}; +  int __init dra7xx_hwmod_init(void)  { +	int ret; +  	omap_hwmod_init(); -	return omap_hwmod_register_links(dra7xx_hwmod_ocp_ifs); +	ret = omap_hwmod_register_links(dra7xx_hwmod_ocp_ifs); + +	if (!ret && soc_is_dra74x()) +		return omap_hwmod_register_links(dra74x_hwmod_ocp_ifs); +	else if (!ret && soc_is_dra72x()) +		return omap_hwmod_register_links(dra72x_hwmod_ocp_ifs); + +	return ret;  } diff --git a/arch/arm/mach-omap2/pdata-quirks.c b/arch/arm/mach-omap2/pdata-quirks.c index 90c88d498485..b9d091b4d983 100644 --- a/arch/arm/mach-omap2/pdata-quirks.c +++ b/arch/arm/mach-omap2/pdata-quirks.c @@ -253,6 +253,11 @@ static void __init nokia_n900_legacy_init(void)  	}  } + +static void __init omap3_tao3530_legacy_init(void) +{ +	hsmmc2_internal_input_clk(); +}  #endif /* CONFIG_ARCH_OMAP3 */  #ifdef CONFIG_ARCH_OMAP4 @@ -377,6 +382,7 @@ static struct pdata_init pdata_quirks[] __initdata = {  	{ "ti,omap3-evm-37xx", omap3_evm_legacy_init, },  	{ "ti,omap3-zoom3", omap3_zoom_legacy_init, },  	{ "ti,am3517-evm", am3517_evm_legacy_init, }, +	{ "technexion,omap3-tao3530", omap3_tao3530_legacy_init, },  #endif  #ifdef CONFIG_ARCH_OMAP4  	{ "ti,omap4-sdp", omap4_sdp_legacy_init, }, diff --git a/arch/arm/mach-omap2/soc.h b/arch/arm/mach-omap2/soc.h index 01ca8086fb6c..4376f59626d1 100644 --- a/arch/arm/mach-omap2/soc.h +++ b/arch/arm/mach-omap2/soc.h @@ -245,6 +245,8 @@ IS_AM_SUBCLASS(437x, 0x437)  #define soc_is_omap54xx()		0  #define soc_is_omap543x()		0  #define soc_is_dra7xx()			0 +#define soc_is_dra74x()			0 +#define soc_is_dra72x()			0  #if defined(MULTI_OMAP2)  # if defined(CONFIG_ARCH_OMAP2) @@ -393,7 +395,11 @@ IS_OMAP_TYPE(3430, 0x3430)  #if defined(CONFIG_SOC_DRA7XX)  #undef soc_is_dra7xx +#undef soc_is_dra74x +#undef soc_is_dra72x  #define soc_is_dra7xx()	(of_machine_is_compatible("ti,dra7")) +#define soc_is_dra74x()	(of_machine_is_compatible("ti,dra74")) +#define soc_is_dra72x()	(of_machine_is_compatible("ti,dra72"))  #endif  /* Various silicon revisions for omap2 */ diff --git a/arch/arm/mach-qcom/board.c b/arch/arm/mach-qcom/board.c index c437a9941726..6d8bbf7d39d8 100644 --- a/arch/arm/mach-qcom/board.c +++ b/arch/arm/mach-qcom/board.c @@ -18,6 +18,8 @@ static const char * const qcom_dt_match[] __initconst = {  	"qcom,apq8064",  	"qcom,apq8074-dragonboard",  	"qcom,apq8084", +	"qcom,ipq8062", +	"qcom,ipq8064",  	"qcom,msm8660-surf",  	"qcom,msm8960-cdp",  	NULL diff --git a/arch/arm/mach-rockchip/Kconfig b/arch/arm/mach-rockchip/Kconfig index d1686696ca41..ac5803cac98d 100644 --- a/arch/arm/mach-rockchip/Kconfig +++ b/arch/arm/mach-rockchip/Kconfig @@ -4,6 +4,7 @@ config ARCH_ROCKCHIP  	select PINCTRL_ROCKCHIP  	select ARCH_HAS_RESET_CONTROLLER  	select ARCH_REQUIRE_GPIOLIB +	select ARM_AMBA  	select ARM_GIC  	select CACHE_L2X0  	select HAVE_ARM_ARCH_TIMER diff --git a/arch/arm/mach-shmobile/Kconfig b/arch/arm/mach-shmobile/Kconfig index e15dff790dbb..1e6c51c7c2d5 100644 --- a/arch/arm/mach-shmobile/Kconfig +++ b/arch/arm/mach-shmobile/Kconfig @@ -75,6 +75,7 @@ config ARCH_SH7372  	select ARM_CPU_SUSPEND if PM || CPU_IDLE  	select CPU_V7  	select SH_CLK_CPG +	select SH_INTC  	select SYS_SUPPORTS_SH_CMT  	select SYS_SUPPORTS_SH_TMU @@ -85,6 +86,7 @@ config ARCH_SH73A0  	select CPU_V7  	select I2C  	select SH_CLK_CPG +	select SH_INTC  	select RENESAS_INTC_IRQPIN  	select SYS_SUPPORTS_SH_CMT  	select SYS_SUPPORTS_SH_TMU diff --git a/arch/arm/mach-shmobile/clock-r8a7790.c b/arch/arm/mach-shmobile/clock-r8a7790.c index 17435c1aa2fe..126ddafad526 100644 --- a/arch/arm/mach-shmobile/clock-r8a7790.c +++ b/arch/arm/mach-shmobile/clock-r8a7790.c @@ -183,8 +183,8 @@ enum {  static struct clk div4_clks[DIV4_NR] = {  	[DIV4_SDH] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 8, 0x0dff, CLK_ENABLE_ON_INIT), -	[DIV4_SD0] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 4, 0x1de0, CLK_ENABLE_ON_INIT), -	[DIV4_SD1] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 0, 0x1de0, CLK_ENABLE_ON_INIT), +	[DIV4_SD0] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 4, 0x1df0, CLK_ENABLE_ON_INIT), +	[DIV4_SD1] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 0, 0x1df0, CLK_ENABLE_ON_INIT),  };  /* DIV6 clocks */ diff --git a/arch/arm/mach-shmobile/clock-r8a7791.c b/arch/arm/mach-shmobile/clock-r8a7791.c index 10e193d707f5..453b23129cfa 100644 --- a/arch/arm/mach-shmobile/clock-r8a7791.c +++ b/arch/arm/mach-shmobile/clock-r8a7791.c @@ -152,7 +152,7 @@ enum {  static struct clk div4_clks[DIV4_NR] = {  	[DIV4_SDH] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 8, 0x0dff, CLK_ENABLE_ON_INIT), -	[DIV4_SD0] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 4, 0x1de0, CLK_ENABLE_ON_INIT), +	[DIV4_SD0] = SH_CLK_DIV4(&pll1_clk, SDCKCR, 4, 0x1df0, CLK_ENABLE_ON_INIT),  };  /* DIV6 clocks */ diff --git a/arch/arm/mach-shmobile/clock-sh73a0.c b/arch/arm/mach-shmobile/clock-sh73a0.c index d8c4048b9e33..02a6f45a0b9e 100644 --- a/arch/arm/mach-shmobile/clock-sh73a0.c +++ b/arch/arm/mach-shmobile/clock-sh73a0.c @@ -644,7 +644,7 @@ static struct clk_lookup lookups[] = {  	CLKDEV_DEV_ID("sh-sci.5", &mstp_clks[MSTP207]), /* SCIFA5 */  	CLKDEV_DEV_ID("e6cb0000.serial", &mstp_clks[MSTP207]), /* SCIFA5 */  	CLKDEV_DEV_ID("sh-sci.8", &mstp_clks[MSTP206]), /* SCIFB */ -	CLKDEV_DEV_ID("0xe6c3000.serial", &mstp_clks[MSTP206]), /* SCIFB */ +	CLKDEV_DEV_ID("e6c3000.serial", &mstp_clks[MSTP206]), /* SCIFB */  	CLKDEV_DEV_ID("sh-sci.0", &mstp_clks[MSTP204]), /* SCIFA0 */  	CLKDEV_DEV_ID("e6c40000.serial", &mstp_clks[MSTP204]), /* SCIFA0 */  	CLKDEV_DEV_ID("sh-sci.1", &mstp_clks[MSTP203]), /* SCIFA1 */ diff --git a/arch/arm/mach-vexpress/spc.c b/arch/arm/mach-vexpress/spc.c index 2c2754e79cb3..f61158c6ce71 100644 --- a/arch/arm/mach-vexpress/spc.c +++ b/arch/arm/mach-vexpress/spc.c @@ -426,9 +426,15 @@ static int ve_spc_populate_opps(uint32_t cluster)  static int ve_init_opp_table(struct device *cpu_dev)  { -	int cluster = topology_physical_package_id(cpu_dev->id); -	int idx, ret = 0, max_opp = info->num_opps[cluster]; -	struct ve_spc_opp *opps = info->opps[cluster]; +	int cluster; +	int idx, ret = 0, max_opp; +	struct ve_spc_opp *opps; + +	cluster = topology_physical_package_id(cpu_dev->id); +	cluster = cluster < 0 ? 0 : cluster; + +	max_opp = info->num_opps[cluster]; +	opps = info->opps[cluster];  	for (idx = 0; idx < max_opp; idx++, opps++) {  		ret = dev_pm_opp_add(cpu_dev, opps->freq * 1000, opps->u_volt); @@ -537,6 +543,8 @@ static struct clk *ve_spc_clk_register(struct device *cpu_dev)  	spc->hw.init = &init;  	spc->cluster = topology_physical_package_id(cpu_dev->id); +	spc->cluster = spc->cluster < 0 ? 0 : spc->cluster; +  	init.name = dev_name(cpu_dev);  	init.ops = &clk_spc_ops;  	init.flags = CLK_IS_ROOT | CLK_GET_RATE_NOCACHE; diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S index 3815a8262af0..8c48c5c22a33 100644 --- a/arch/arm/mm/abort-ev6.S +++ b/arch/arm/mm/abort-ev6.S @@ -17,12 +17,6 @@   */  	.align	5  ENTRY(v6_early_abort) -#ifdef CONFIG_CPU_V6 -	sub	r1, sp, #4			@ Get unused stack location -	strex	r0, r1, [r1]			@ Clear the exclusive monitor -#elif defined(CONFIG_CPU_32v6K) -	clrex -#endif  	mrc	p15, 0, r1, c5, c0, 0		@ get FSR  	mrc	p15, 0, r0, c6, c0, 0		@ get FAR  /* diff --git a/arch/arm/mm/abort-ev7.S b/arch/arm/mm/abort-ev7.S index 703375277ba6..4812ad054214 100644 --- a/arch/arm/mm/abort-ev7.S +++ b/arch/arm/mm/abort-ev7.S @@ -13,12 +13,6 @@   */  	.align	5  ENTRY(v7_early_abort) -	/* -	 * The effect of data aborts on on the exclusive access monitor are -	 * UNPREDICTABLE. Do a CLREX to clear the state -	 */ -	clrex -  	mrc	p15, 0, r1, c5, c0, 0		@ get FSR  	mrc	p15, 0, r0, c6, c0, 0		@ get FAR  | 

