diff options
37 files changed, 1729 insertions, 107 deletions
diff --git a/Documentation/devicetree/bindings/arm/omap/omap.txt b/Documentation/devicetree/bindings/arm/omap/omap.txt index ccdd0e53451..d0051a75058 100644 --- a/Documentation/devicetree/bindings/arm/omap/omap.txt +++ b/Documentation/devicetree/bindings/arm/omap/omap.txt @@ -36,6 +36,9 @@ Boards:  - OMAP3 BeagleBoard : Low cost community board    compatible = "ti,omap3-beagle", "ti,omap3" +- OMAP3 Tobi with Overo : Commercial expansion board with daughter board +  compatible = "ti,omap3-tobi", "ti,omap3-overo", "ti,omap3" +  - OMAP4 SDP : Software Developement Board    compatible = "ti,omap4-sdp", "ti,omap4430" diff --git a/Documentation/devicetree/bindings/gpio/gpio-twl4030.txt b/Documentation/devicetree/bindings/gpio/gpio-twl4030.txt index 16695d9cf1e..66788fda1db 100644 --- a/Documentation/devicetree/bindings/gpio/gpio-twl4030.txt +++ b/Documentation/devicetree/bindings/gpio/gpio-twl4030.txt @@ -11,6 +11,11 @@ Required properties:  - interrupt-controller: Mark the device node as an interrupt controller    The first cell is the GPIO number.    The second cell is not used. +- ti,use-leds : Enables LEDA and LEDB outputs if set +- ti,debounce : if n-th bit is set, debounces GPIO-n +- ti,mmc-cd : if n-th bit is set, GPIO-n controls VMMC(n+1) +- ti,pullups : if n-th bit is set, set a pullup on GPIO-n +- ti,pulldowns : if n-th bit is set, set a pulldown on GPIO-n  Example: @@ -20,4 +25,5 @@ twl_gpio: gpio {      gpio-controller;      #interrupt-cells = <2>;      interrupt-controller; +    ti,use-leds;  }; diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt index 1a85f986961..2f5322b119e 100644 --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt @@ -56,3 +56,4 @@ stm,m41t00		Serial Access TIMEKEEPER  stm,m41t62		Serial real-time clock (RTC) with alarm  stm,m41t80		M41T80 - SERIAL ACCESS RTC WITH ALARMS  ti,tsc2003		I2C Touch-Screen Controller +ti,tmp102		Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface diff --git a/Documentation/devicetree/bindings/lpddr2/lpddr2-timings.txt b/Documentation/devicetree/bindings/lpddr2/lpddr2-timings.txt new file mode 100644 index 00000000000..9ceb19e0c7f --- /dev/null +++ b/Documentation/devicetree/bindings/lpddr2/lpddr2-timings.txt @@ -0,0 +1,52 @@ +* AC timing parameters of LPDDR2(JESD209-2) memories for a given speed-bin + +Required properties: +- compatible : Should be "jedec,lpddr2-timings" +- min-freq : minimum DDR clock frequency for the speed-bin. Type is <u32> +- max-freq : maximum DDR clock frequency for the speed-bin. Type is <u32> + +Optional properties: + +The following properties represent AC timing parameters from the memory +data-sheet of the device for a given speed-bin. All these properties are +of type <u32> and the default unit is ps (pico seconds). Parameters with +a different unit have a suffix indicating the unit such as 'tRAS-max-ns' +- tRCD +- tWR +- tRAS-min +- tRRD +- tWTR +- tXP +- tRTP +- tDQSCK-max +- tFAW +- tZQCS +- tZQinit +- tRPab +- tZQCL +- tCKESR +- tRAS-max-ns +- tDQSCK-max-derated + +Example: + +timings_elpida_ECB240ABACN_400mhz: lpddr2-timings@0 { +	compatible	= "jedec,lpddr2-timings"; +	min-freq	= <10000000>; +	max-freq	= <400000000>; +	tRPab		= <21000>; +	tRCD		= <18000>; +	tWR		= <15000>; +	tRAS-min	= <42000>; +	tRRD		= <10000>; +	tWTR		= <7500>; +	tXP		= <7500>; +	tRTP		= <7500>; +	tCKESR		= <15000>; +	tDQSCK-max	= <5500>; +	tFAW		= <50000>; +	tZQCS		= <90000>; +	tZQCL		= <360000>; +	tZQinit		= <1000000>; +	tRAS-max-ns	= <70000>; +}; diff --git a/Documentation/devicetree/bindings/lpddr2/lpddr2.txt b/Documentation/devicetree/bindings/lpddr2/lpddr2.txt new file mode 100644 index 00000000000..58354a075e1 --- /dev/null +++ b/Documentation/devicetree/bindings/lpddr2/lpddr2.txt @@ -0,0 +1,102 @@ +* LPDDR2 SDRAM memories compliant to JEDEC JESD209-2 + +Required properties: +- compatible : Should be one of - "jedec,lpddr2-nvm", "jedec,lpddr2-s2", +  "jedec,lpddr2-s4" + +  "ti,jedec-lpddr2-s2" should be listed if the memory part is LPDDR2-S2 type + +  "ti,jedec-lpddr2-s4" should be listed if the memory part is LPDDR2-S4 type + +  "ti,jedec-lpddr2-nvm" should be listed if the memory part is LPDDR2-NVM type + +- density  : <u32> representing density in Mb (Mega bits) + +- io-width : <u32> representing bus width. Possible values are 8, 16, and 32 + +Optional properties: + +The following optional properties represent the minimum value of some AC +timing parameters of the DDR device in terms of number of clock cycles. +These values shall be obtained from the device data-sheet. +- tRRD-min-tck +- tWTR-min-tck +- tXP-min-tck +- tRTP-min-tck +- tCKE-min-tck +- tRPab-min-tck +- tRCD-min-tck +- tWR-min-tck +- tRASmin-min-tck +- tCKESR-min-tck +- tFAW-min-tck + +Child nodes: +- The lpddr2 node may have one or more child nodes of type "lpddr2-timings". +  "lpddr2-timings" provides AC timing parameters of the device for +  a given speed-bin. The user may provide the timings for as many +  speed-bins as is required. Please see Documentation/devicetree/ +  bindings/lpddr2/lpddr2-timings.txt for more information on "lpddr2-timings" + +Example: + +elpida_ECB240ABACN : lpddr2 { +	compatible	= "Elpida,ECB240ABACN","jedec,lpddr2-s4"; +	density		= <2048>; +	io-width	= <32>; + +	tRPab-min-tck	= <3>; +	tRCD-min-tck	= <3>; +	tWR-min-tck	= <3>; +	tRASmin-min-tck	= <3>; +	tRRD-min-tck	= <2>; +	tWTR-min-tck	= <2>; +	tXP-min-tck	= <2>; +	tRTP-min-tck	= <2>; +	tCKE-min-tck	= <3>; +	tCKESR-min-tck	= <3>; +	tFAW-min-tck	= <8>; + +	timings_elpida_ECB240ABACN_400mhz: lpddr2-timings@0 { +		compatible	= "jedec,lpddr2-timings"; +		min-freq	= <10000000>; +		max-freq	= <400000000>; +		tRPab		= <21000>; +		tRCD		= <18000>; +		tWR		= <15000>; +		tRAS-min	= <42000>; +		tRRD		= <10000>; +		tWTR		= <7500>; +		tXP		= <7500>; +		tRTP		= <7500>; +		tCKESR		= <15000>; +		tDQSCK-max	= <5500>; +		tFAW		= <50000>; +		tZQCS		= <90000>; +		tZQCL		= <360000>; +		tZQinit		= <1000000>; +		tRAS-max-ns	= <70000>; +	}; + +	timings_elpida_ECB240ABACN_200mhz: lpddr2-timings@1 { +		compatible	= "jedec,lpddr2-timings"; +		min-freq	= <10000000>; +		max-freq	= <200000000>; +		tRPab		= <21000>; +		tRCD		= <18000>; +		tWR		= <15000>; +		tRAS-min	= <42000>; +		tRRD		= <10000>; +		tWTR		= <10000>; +		tXP		= <7500>; +		tRTP		= <7500>; +		tCKESR		= <15000>; +		tDQSCK-max	= <5500>; +		tFAW		= <50000>; +		tZQCS		= <90000>; +		tZQCL		= <360000>; +		tZQinit		= <1000000>; +		tRAS-max-ns	= <70000>; +	}; + +} diff --git a/Documentation/devicetree/bindings/memory-controllers/ti/emif.txt b/Documentation/devicetree/bindings/memory-controllers/ti/emif.txt new file mode 100644 index 00000000000..938f8e1ba20 --- /dev/null +++ b/Documentation/devicetree/bindings/memory-controllers/ti/emif.txt @@ -0,0 +1,55 @@ +* EMIF family of TI SDRAM controllers + +EMIF - External Memory Interface - is an SDRAM controller used in +TI SoCs. EMIF supports, based on the IP revision, one or more of +DDR2/DDR3/LPDDR2 protocols. This binding describes a given instance +of the EMIF IP and memory parts attached to it. + +Required properties: +- compatible	: Should be of the form "ti,emif-<ip-rev>" where <ip-rev> +  is the IP revision of the specific EMIF instance. + +- phy-type	: <u32> indicating the DDR phy type. Following are the +  allowed values +  <1>	: Attila PHY +  <2>	: Intelli PHY + +- device-handle	: phandle to a "lpddr2" node representing the memory part + +- ti,hwmods	: For TI hwmods processing and omap device creation +  the value shall be "emif<n>" where <n> is the number of the EMIF +  instance with base 1. + +Optional properties: +- cs1-used		: Have this property if CS1 of this EMIF +  instance has a memory part attached to it. If there is a memory +  part attached to CS1, it should be the same type as the one on CS0, +  so there is no need to give the details of this memory part. + +- cal-resistor-per-cs	: Have this property if the board has one +  calibration resistor per chip-select. + +- hw-caps-read-idle-ctrl: Have this property if the controller +  supports read idle window programming + +- hw-caps-dll-calib-ctrl: Have this property if the controller +  supports dll calibration control + +- hw-caps-ll-interface	: Have this property if the controller +  has a low latency interface and corresponding interrupt events + +- hw-caps-temp-alert	: Have this property if the controller +  has capability for generating SDRAM temperature alerts + +Example: + +emif1: emif@0x4c000000 { +	compatible	= "ti,emif-4d"; +	ti,hwmods	= "emif2"; +	phy-type	= <1>; +	device-handle	= <&elpida_ECB240ABACN>; +	cs1-used; +	hw-caps-read-idle-ctrl; +	hw-caps-ll-interface; +	hw-caps-temp-alert; +}; diff --git a/arch/arm/boot/dts/am335x-bone.dts b/arch/arm/boot/dts/am335x-bone.dts index a9af4db7234..c634f87e230 100644 --- a/arch/arm/boot/dts/am335x-bone.dts +++ b/arch/arm/boot/dts/am335x-bone.dts @@ -17,4 +17,64 @@  		device_type = "memory";  		reg = <0x80000000 0x10000000>; /* 256 MB */  	}; + +	ocp { +		uart1: serial@44e09000 { +			status = "okay"; +		}; + +		i2c1: i2c@44e0b000 { +			status = "okay"; +			clock-frequency = <400000>; + +			tps: tps@24 { +				reg = <0x24>; +			}; + +		}; +	}; +}; + +/include/ "tps65217.dtsi" + +&tps { +	regulators { +		dcdc1_reg: regulator@0 { +			regulator-always-on; +		}; + +		dcdc2_reg: regulator@1 { +			/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */ +			regulator-name = "vdd_mpu"; +			regulator-min-microvolt = <925000>; +			regulator-max-microvolt = <1325000>; +			regulator-boot-on; +			regulator-always-on; +		}; + +		dcdc3_reg: regulator@2 { +			/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */ +			regulator-name = "vdd_core"; +			regulator-min-microvolt = <925000>; +			regulator-max-microvolt = <1150000>; +			regulator-boot-on; +			regulator-always-on; +		}; + +		ldo1_reg: regulator@3 { +			regulator-always-on; +		}; + +		ldo2_reg: regulator@4 { +			regulator-always-on; +		}; + +		ldo3_reg: regulator@5 { +			regulator-always-on; +		}; + +		ldo4_reg: regulator@6 { +			regulator-always-on; +		}; +	};  }; diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts index d6a97d9eff7..185d6325a45 100644 --- a/arch/arm/boot/dts/am335x-evm.dts +++ b/arch/arm/boot/dts/am335x-evm.dts @@ -17,4 +17,104 @@  		device_type = "memory";  		reg = <0x80000000 0x10000000>; /* 256 MB */  	}; + +	ocp { +		uart1: serial@44e09000 { +			status = "okay"; +		}; + +		i2c1: i2c@44e0b000 { +			status = "okay"; +			clock-frequency = <400000>; + +			tps: tps@2d { +				reg = <0x2d>; +			}; +		}; +	}; + +	vbat: fixedregulator@0 { +		compatible = "regulator-fixed"; +		regulator-name = "vbat"; +		regulator-min-microvolt = <5000000>; +		regulator-max-microvolt = <5000000>; +		regulator-boot-on; +	}; +}; + +/include/ "tps65910.dtsi" + +&tps { +	vcc1-supply = <&vbat>; +	vcc2-supply = <&vbat>; +	vcc3-supply = <&vbat>; +	vcc4-supply = <&vbat>; +	vcc5-supply = <&vbat>; +	vcc6-supply = <&vbat>; +	vcc7-supply = <&vbat>; +	vccio-supply = <&vbat>; + +	regulators { +		vrtc_reg: regulator@0 { +			regulator-always-on; +		}; + +		vio_reg: regulator@1 { +			regulator-always-on; +		}; + +		vdd1_reg: regulator@2 { +			/* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */ +			regulator-name = "vdd_mpu"; +			regulator-min-microvolt = <912500>; +			regulator-max-microvolt = <1312500>; +			regulator-boot-on; +			regulator-always-on; +		}; + +		vdd2_reg: regulator@3 { +			/* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */ +			regulator-name = "vdd_core"; +			regulator-min-microvolt = <912500>; +			regulator-max-microvolt = <1150000>; +			regulator-boot-on; +			regulator-always-on; +		}; + +		vdd3_reg: regulator@4 { +			regulator-always-on; +		}; + +		vdig1_reg: regulator@5 { +			regulator-always-on; +		}; + +		vdig2_reg: regulator@6 { +			regulator-always-on; +		}; + +		vpll_reg: regulator@7 { +			regulator-always-on; +		}; + +		vdac_reg: regulator@8 { +			regulator-always-on; +		}; + +		vaux1_reg: regulator@9 { +			regulator-always-on; +		}; + +		vaux2_reg: regulator@10 { +			regulator-always-on; +		}; + +		vaux33_reg: regulator@11 { +			regulator-always-on; +		}; + +		vmmc_reg: regulator@12 { +			regulator-always-on; +		}; +	};  }; diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index bd0cff3f808..bb31bff0199 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi @@ -69,95 +69,146 @@  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <1>; +			reg = <0x44e07000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <96>;  		}; -		gpio2: gpio@4804C000 { +		gpio2: gpio@4804c000 {  			compatible = "ti,omap4-gpio";  			ti,hwmods = "gpio2";  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <1>; +			reg = <0x4804c000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <98>;  		}; -		gpio3: gpio@481AC000 { +		gpio3: gpio@481ac000 {  			compatible = "ti,omap4-gpio";  			ti,hwmods = "gpio3";  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <1>; +			reg = <0x481ac000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <32>;  		}; -		gpio4: gpio@481AE000 { +		gpio4: gpio@481ae000 {  			compatible = "ti,omap4-gpio";  			ti,hwmods = "gpio4";  			gpio-controller;  			#gpio-cells = <2>;  			interrupt-controller;  			#interrupt-cells = <1>; +			reg = <0x481ae000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <62>;  		}; -		uart1: serial@44E09000 { +		uart1: serial@44e09000 {  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart1";  			clock-frequency = <48000000>; +			reg = <0x44e09000 0x2000>; +			interrupt-parent = <&intc>; +			interrupts = <72>; +			status = "disabled";  		};  		uart2: serial@48022000 {  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart2";  			clock-frequency = <48000000>; +			reg = <0x48022000 0x2000>; +			interrupt-parent = <&intc>; +			interrupts = <73>; +			status = "disabled";  		};  		uart3: serial@48024000 {  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart3";  			clock-frequency = <48000000>; +			reg = <0x48024000 0x2000>; +			interrupt-parent = <&intc>; +			interrupts = <74>; +			status = "disabled";  		}; -		uart4: serial@481A6000 { +		uart4: serial@481a6000 {  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart4";  			clock-frequency = <48000000>; +			reg = <0x481a6000 0x2000>; +			interrupt-parent = <&intc>; +			interrupts = <44>; +			status = "disabled";  		}; -		uart5: serial@481A8000 { +		uart5: serial@481a8000 {  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart5";  			clock-frequency = <48000000>; +			reg = <0x481a8000 0x2000>; +			interrupt-parent = <&intc>; +			interrupts = <45>; +			status = "disabled";  		}; -		uart6: serial@481AA000 { +		uart6: serial@481aa000 {  			compatible = "ti,omap3-uart";  			ti,hwmods = "uart6";  			clock-frequency = <48000000>; +			reg = <0x481aa000 0x2000>; +			interrupt-parent = <&intc>; +			interrupts = <46>; +			status = "disabled";  		}; -		i2c1: i2c@44E0B000 { +		i2c1: i2c@44e0b000 {  			compatible = "ti,omap4-i2c";  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c1"; +			reg = <0x44e0b000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <70>; +			status = "disabled";  		}; -		i2c2: i2c@4802A000 { +		i2c2: i2c@4802a000 {  			compatible = "ti,omap4-i2c";  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c2"; +			reg = <0x4802a000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <71>; +			status = "disabled";  		}; -		i2c3: i2c@4819C000 { +		i2c3: i2c@4819c000 {  			compatible = "ti,omap4-i2c";  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c3"; +			reg = <0x4819c000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <30>; +			status = "disabled";  		};  		wdt2: wdt@44e35000 {  			compatible = "ti,omap3-wdt";  			ti,hwmods = "wd_timer2"; +			reg = <0x44e35000 0x1000>; +			interrupt-parent = <&intc>; +			interrupts = <91>;  		};  	};  }; diff --git a/arch/arm/boot/dts/elpida_ecb240abacn.dtsi b/arch/arm/boot/dts/elpida_ecb240abacn.dtsi new file mode 100644 index 00000000000..f97f70f8337 --- /dev/null +++ b/arch/arm/boot/dts/elpida_ecb240abacn.dtsi @@ -0,0 +1,67 @@ +/* + * Common devices used in different OMAP boards + */ + +/ { +	elpida_ECB240ABACN: lpddr2 { +		compatible	= "Elpida,ECB240ABACN","jedec,lpddr2-s4"; +		density		= <2048>; +		io-width	= <32>; + +		tRPab-min-tck	= <3>; +		tRCD-min-tck	= <3>; +		tWR-min-tck	= <3>; +		tRASmin-min-tck	= <3>; +		tRRD-min-tck	= <2>; +		tWTR-min-tck	= <2>; +		tXP-min-tck	= <2>; +		tRTP-min-tck	= <2>; +		tCKE-min-tck	= <3>; +		tCKESR-min-tck	= <3>; +		tFAW-min-tck	= <8>; + +		timings_elpida_ECB240ABACN_400mhz: lpddr2-timings@0 { +			compatible	= "jedec,lpddr2-timings"; +			min-freq	= <10000000>; +			max-freq	= <400000000>; +			tRPab		= <21000>; +			tRCD		= <18000>; +			tWR		= <15000>; +			tRAS-min	= <42000>; +			tRRD		= <10000>; +			tWTR		= <7500>; +			tXP		= <7500>; +			tRTP		= <7500>; +			tCKESR		= <15000>; +			tDQSCK-max	= <5500>; +			tFAW		= <50000>; +			tZQCS		= <90000>; +			tZQCL		= <360000>; +			tZQinit		= <1000000>; +			tRAS-max-ns	= <70000>; +			tDQSCK-max-derated = <6000>; +		}; + +		timings_elpida_ECB240ABACN_200mhz: lpddr2-timings@1 { +			compatible	= "jedec,lpddr2-timings"; +			min-freq	= <10000000>; +			max-freq	= <200000000>; +			tRPab		= <21000>; +			tRCD		= <18000>; +			tWR		= <15000>; +			tRAS-min	= <42000>; +			tRRD		= <10000>; +			tWTR		= <10000>; +			tXP		= <7500>; +			tRTP		= <7500>; +			tCKESR		= <15000>; +			tDQSCK-max	= <5500>; +			tFAW		= <50000>; +			tZQCS		= <90000>; +			tZQCL		= <360000>; +			tZQinit		= <1000000>; +			tRAS-max-ns	= <70000>; +			tDQSCK-max-derated = <6000>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/omap2420-h4.dts b/arch/arm/boot/dts/omap2420-h4.dts index 25b50b759de..77b84e17c47 100644 --- a/arch/arm/boot/dts/omap2420-h4.dts +++ b/arch/arm/boot/dts/omap2420-h4.dts @@ -7,7 +7,7 @@   */  /dts-v1/; -/include/ "omap2.dtsi" +/include/ "omap2420.dtsi"  / {  	model = "TI OMAP2420 H4 board"; diff --git a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi new file mode 100644 index 00000000000..bfd76b4a0dd --- /dev/null +++ b/arch/arm/boot/dts/omap2420.dtsi @@ -0,0 +1,48 @@ +/* + * Device Tree Source for OMAP2420 SoC + * + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * + * 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/ "omap2.dtsi" + +/ { +	compatible = "ti,omap2420", "ti,omap2"; + +	ocp { +		omap2420_pmx: pinmux@48000030 { +			compatible = "ti,omap2420-padconf", "pinctrl-single"; +			reg = <0x48000030 0x0113>; +			#address-cells = <1>; +			#size-cells = <0>; +			pinctrl-single,register-width = <8>; +			pinctrl-single,function-mask = <0x3f>; +		}; + +		mcbsp1: mcbsp@48074000 { +			compatible = "ti,omap2420-mcbsp"; +			reg = <0x48074000 0xff>; +			reg-names = "mpu"; +			interrupts = <59>, /* TX interrupt */ +				     <60>; /* RX interrupt */ +			interrupt-names = "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,hwmods = "mcbsp1"; +		}; + +		mcbsp2: mcbsp@48076000 { +			compatible = "ti,omap2420-mcbsp"; +			reg = <0x48076000 0xff>; +			reg-names = "mpu"; +			interrupts = <62>, /* TX interrupt */ +				     <63>; /* RX interrupt */ +			interrupt-names = "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,hwmods = "mcbsp2"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi new file mode 100644 index 00000000000..4565d9750f4 --- /dev/null +++ b/arch/arm/boot/dts/omap2430.dtsi @@ -0,0 +1,92 @@ +/* + * Device Tree Source for OMAP243x SoC + * + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * + * 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/ "omap2.dtsi" + +/ { +	compatible = "ti,omap2430", "ti,omap2"; + +	ocp { +		omap2430_pmx: pinmux@49002030 { +			compatible = "ti,omap2430-padconf", "pinctrl-single"; +			reg = <0x49002030 0x0154>; +			#address-cells = <1>; +			#size-cells = <0>; +			pinctrl-single,register-width = <8>; +			pinctrl-single,function-mask = <0x3f>; +		}; + +		mcbsp1: mcbsp@48074000 { +			compatible = "ti,omap2430-mcbsp"; +			reg = <0x48074000 0xff>; +			reg-names = "mpu"; +			interrupts = <64>, /* OCP compliant interrupt */ +				     <59>, /* TX interrupt */ +				     <60>, /* RX interrupt */ +				     <61>; /* RX overflow interrupt */ +			interrupt-names = "common", "tx", "rx", "rx_overflow"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp1"; +		}; + +		mcbsp2: mcbsp@48076000 { +			compatible = "ti,omap2430-mcbsp"; +			reg = <0x48076000 0xff>; +			reg-names = "mpu"; +			interrupts = <16>, /* OCP compliant interrupt */ +				     <62>, /* TX interrupt */ +				     <63>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp2"; +		}; + +		mcbsp3: mcbsp@4808c000 { +			compatible = "ti,omap2430-mcbsp"; +			reg = <0x4808c000 0xff>; +			reg-names = "mpu"; +			interrupts = <17>, /* OCP compliant interrupt */ +				     <89>, /* TX interrupt */ +				     <90>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp3"; +		}; + +		mcbsp4: mcbsp@4808e000 { +			compatible = "ti,omap2430-mcbsp"; +			reg = <0x4808e000 0xff>; +			reg-names = "mpu"; +			interrupts = <18>, /* OCP compliant interrupt */ +				     <54>, /* TX interrupt */ +				     <55>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp4"; +		}; + +		mcbsp5: mcbsp@48096000 { +			compatible = "ti,omap2430-mcbsp"; +			reg = <0x48096000 0xff>; +			reg-names = "mpu"; +			interrupts = <19>, /* OCP compliant interrupt */ +				     <81>, /* TX interrupt */ +				     <82>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp5"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle-xm.dts index cdcb98c7e07..c38cf76df81 100644 --- a/arch/arm/boot/dts/omap3-beagle.dts +++ b/arch/arm/boot/dts/omap3-beagle-xm.dts @@ -7,16 +7,44 @@   */  /dts-v1/; -/include/ "omap3.dtsi" +/include/ "omap36xx.dtsi"  / { -	model = "TI OMAP3 BeagleBoard"; -	compatible = "ti,omap3-beagle", "ti,omap3"; +	model = "TI OMAP3 BeagleBoard xM"; +	compatible = "ti,omap3-beagle-xm, ti,omap3-beagle", "ti,omap3";  	memory {  		device_type = "memory";  		reg = <0x80000000 0x20000000>; /* 512 MB */  	}; + +	leds { +		compatible = "gpio-leds"; +		pmu_stat { +			label = "beagleboard::pmu_stat"; +			gpios = <&twl_gpio 19 0>; /* LEDB */ +		}; + +		heartbeat { +			label = "beagleboard::usr0"; +			gpios = <&gpio5 22 0>; /* 150 -> D6 LED */ +			linux,default-trigger = "heartbeat"; +		}; + +		mmc { +			label = "beagleboard::usr1"; +			gpios = <&gpio5 21 0>; /* 149 -> D7 LED */ +			linux,default-trigger = "mmc0"; +		}; +	}; + +	sound { +		compatible = "ti,omap-twl4030"; +		ti,model = "omap3beagle"; + +		ti,mcbsp = <&mcbsp2>; +		ti,codec = <&twl_audio>; +	};  };  &i2c1 { @@ -27,11 +55,17 @@  		interrupts = <7>; /* SYS_NIRQ cascaded to intc */  		interrupt-parent = <&intc>; -		vsim: regulator@10 { +		vsim: regulator-vsim {  			compatible = "ti,twl4030-vsim";  			regulator-min-microvolt = <1800000>;  			regulator-max-microvolt = <3000000>;  		}; + +		twl_audio: audio { +			compatible = "ti,twl4030-audio"; +			codec { +			}; +		};  	};  }; @@ -67,3 +101,15 @@  &mmc3 {  	status = "disabled";  }; + +&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>; +}; diff --git a/arch/arm/boot/dts/omap3-evm.dts b/arch/arm/boot/dts/omap3-evm.dts index f349ee9182c..e8ba1c247a3 100644 --- a/arch/arm/boot/dts/omap3-evm.dts +++ b/arch/arm/boot/dts/omap3-evm.dts @@ -17,6 +17,15 @@  		device_type = "memory";  		reg = <0x80000000 0x10000000>; /* 256 MB */  	}; + +	leds { +		compatible = "gpio-leds"; +		ledb { +			label = "omap3evm::ledb"; +			gpios = <&twl_gpio 19 0>; /* LEDB */ +			linux,default-trigger = "default-on"; +		}; +	};  };  &i2c1 { @@ -46,3 +55,7 @@  		reg = <0x5c>;  	};  }; + +&twl_gpio { +	ti,use-leds; +}; diff --git a/arch/arm/boot/dts/omap3-overo.dtsi b/arch/arm/boot/dts/omap3-overo.dtsi new file mode 100644 index 00000000000..89808ce0167 --- /dev/null +++ b/arch/arm/boot/dts/omap3-overo.dtsi @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2012 Florian Vaussard, EPFL Mobots group + * + * 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. + */ + +/* + * The Gumstix Overo must be combined with an expansion board. + */ +/dts-v1/; + +/include/ "omap3.dtsi" + +/ { +	leds { +		compatible = "gpio-leds"; +		overo { +			label = "overo:blue:COM"; +			gpios = <&twl_gpio 19 0>; +			linux,default-trigger = "mmc0"; +		}; +	}; +}; + +&i2c1 { +	clock-frequency = <2600000>; + +	twl: twl@48 { +		reg = <0x48>; +		interrupts = <7>; /* SYS_NIRQ cascaded to intc */ +		interrupt-parent = <&intc>; +	}; +}; + +/include/ "twl4030.dtsi" + +/* i2c2 pins are used for gpio */ +&i2c2 { +	status = "disabled"; +}; + +/* on board microSD slot */ +&mmc1 { +	vmmc-supply = <&vmmc1>; +	bus-width = <4>; +}; + +/* optional on board WiFi */ +&mmc2 { +	bus-width = <4>; +}; + +&twl_gpio { +	ti,use-leds; +}; diff --git a/arch/arm/boot/dts/omap3-tobi.dts b/arch/arm/boot/dts/omap3-tobi.dts new file mode 100644 index 00000000000..a13d12de77f --- /dev/null +++ b/arch/arm/boot/dts/omap3-tobi.dts @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2012 Florian Vaussard, EPFL Mobots group + * + * 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. + */ + +/* + * Tobi expansion board is manufactured by Gumstix Inc. + */ + +/include/ "omap3-overo.dtsi" + +/ { +	model = "TI OMAP3 Gumstix Overo on Tobi"; +	compatible = "ti,omap3-tobi", "ti,omap3-overo", "ti,omap3"; + +	leds { +		compatible = "gpio-leds"; +		heartbeat { +			label = "overo:red:gpio21"; +			gpios = <&gpio1 21 0>; +			linux,default-trigger = "heartbeat"; +		}; +	}; +}; + +&i2c3 { +	clock-frequency = <100000>; +}; + +&mmc3 { +	status = "disabled"; +}; diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 81094719820..f38ea8771b4 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi @@ -17,7 +17,6 @@  		serial0 = &uart1;  		serial1 = &uart2;  		serial2 = &uart3; -		serial3 = &uart4;  	};  	cpus { @@ -69,6 +68,24 @@  			reg = <0x48200000 0x1000>;  		}; +		omap3_pmx_core: pinmux@48002030 { +			compatible = "ti,omap3-padconf", "pinctrl-single"; +			reg = <0x48002030 0x05cc>; +			#address-cells = <1>; +			#size-cells = <0>; +			pinctrl-single,register-width = <16>; +			pinctrl-single,function-mask = <0x7fff>; +		}; + +		omap3_pmx_wkup: pinmux@0x48002a58 { +			compatible = "ti,omap3-padconf", "pinctrl-single"; +			reg = <0x48002a58 0x5c>; +			#address-cells = <1>; +			#size-cells = <0>; +			pinctrl-single,register-width = <16>; +			pinctrl-single,function-mask = <0x7fff>; +		}; +  		gpio1: gpio@48310000 {  			compatible = "ti,omap3-gpio";  			ti,hwmods = "gpio1"; @@ -141,12 +158,6 @@  			clock-frequency = <48000000>;  		}; -		uart4: serial@49042000 { -			compatible = "ti,omap3-uart"; -			ti,hwmods = "uart4"; -			clock-frequency = <48000000>; -		}; -  		i2c1: i2c@48070000 {  			compatible = "ti,omap3-i2c";  			#address-cells = <1>; @@ -220,5 +231,74 @@  			compatible = "ti,omap3-wdt";  			ti,hwmods = "wd_timer2";  		}; + +		mcbsp1: mcbsp@48074000 { +			compatible = "ti,omap3-mcbsp"; +			reg = <0x48074000 0xff>; +			reg-names = "mpu"; +			interrupts = <16>, /* OCP compliant interrupt */ +				     <59>, /* TX interrupt */ +				     <60>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp1"; +		}; + +		mcbsp2: mcbsp@49022000 { +			compatible = "ti,omap3-mcbsp"; +			reg = <0x49022000 0xff>, +			      <0x49028000 0xff>; +			reg-names = "mpu", "sidetone"; +			interrupts = <17>, /* OCP compliant interrupt */ +				     <62>, /* TX interrupt */ +				     <63>, /* RX interrupt */ +				     <4>;  /* Sidetone */ +			interrupt-names = "common", "tx", "rx", "sidetone"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <1280>; +			ti,hwmods = "mcbsp2"; +		}; + +		mcbsp3: mcbsp@49024000 { +			compatible = "ti,omap3-mcbsp"; +			reg = <0x49024000 0xff>, +			      <0x4902a000 0xff>; +			reg-names = "mpu", "sidetone"; +			interrupts = <22>, /* OCP compliant interrupt */ +				     <89>, /* TX interrupt */ +				     <90>, /* RX interrupt */ +				     <5>;  /* Sidetone */ +			interrupt-names = "common", "tx", "rx", "sidetone"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp3"; +		}; + +		mcbsp4: mcbsp@49026000 { +			compatible = "ti,omap3-mcbsp"; +			reg = <0x49026000 0xff>; +			reg-names = "mpu"; +			interrupts = <23>, /* OCP compliant interrupt */ +				     <54>, /* TX interrupt */ +				     <55>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp4"; +		}; + +		mcbsp5: mcbsp@48096000 { +			compatible = "ti,omap3-mcbsp"; +			reg = <0x48096000 0xff>; +			reg-names = "mpu"; +			interrupts = <27>, /* OCP compliant interrupt */ +				     <81>, /* TX interrupt */ +				     <82>; /* RX interrupt */ +			interrupt-names = "common", "tx", "rx"; +			interrupt-parent = <&intc>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp5"; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap36xx.dtsi b/arch/arm/boot/dts/omap36xx.dtsi new file mode 100644 index 00000000000..96bf0287cb9 --- /dev/null +++ b/arch/arm/boot/dts/omap36xx.dtsi @@ -0,0 +1,25 @@ +/* + * Device Tree Source for OMAP3 SoC + * + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ + * + * 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/ "omap3.dtsi" + +/ { +	aliases { +		serial3 = &uart4; +	}; + +	ocp { +		uart4: serial@49042000 { +			compatible = "ti,omap3-uart"; +			ti,hwmods = "uart4"; +			clock-frequency = <48000000>; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts index 9880c12877b..20b966ee1bb 100644 --- a/arch/arm/boot/dts/omap4-panda.dts +++ b/arch/arm/boot/dts/omap4-panda.dts @@ -8,6 +8,7 @@  /dts-v1/;  /include/ "omap4.dtsi" +/include/ "elpida_ecb240abacn.dtsi"  / {  	model = "TI OMAP4 PandaBoard"; @@ -126,3 +127,13 @@  	ti,non-removable;  	bus-width = <4>;  }; + +&emif1 { +	cs1-used; +	device-handle = <&elpida_ECB240ABACN>; +}; + +&emif2 { +	cs1-used; +	device-handle = <&elpida_ECB240ABACN>; +}; diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index 72216e932fc..94a23b39033 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts @@ -8,6 +8,7 @@  /dts-v1/;  /include/ "omap4.dtsi" +/include/ "elpida_ecb240abacn.dtsi"  / {  	model = "TI OMAP4 SDP board"; @@ -18,7 +19,7 @@  		reg = <0x80000000 0x40000000>; /* 1 GB */  	}; -	vdd_eth: fixedregulator@0 { +	vdd_eth: fixedregulator-vdd-eth {  		compatible = "regulator-fixed";  		regulator-name = "VDD_ETH";  		regulator-min-microvolt = <3300000>; @@ -28,7 +29,7 @@  		regulator-boot-on;  	}; -	vbat: fixedregulator@2 { +	vbat: fixedregulator-vbat {  		compatible = "regulator-fixed";  		regulator-name = "VBAT";  		regulator-min-microvolt = <3750000>; @@ -115,6 +116,33 @@  	};  }; +&omap4_pmx_core { +	uart2_pins: pinmux_uart2_pins { +		pinctrl-single,pins = < +			0xd8 0x118	/* uart2_cts.uart2_cts INPUT_PULLUP | MODE0 */ +			0xda 0		/* uart2_rts.uart2_rts OUTPUT | MODE0 */ +			0xdc 0x118	/* uart2_rx.uart2_rx INPUT_PULLUP | MODE0 */ +			0xde 0		/* uart2_tx.uart2_tx OUTPUT | MODE0 */ +		>; +	}; + +	uart3_pins: pinmux_uart3_pins { +		pinctrl-single,pins = < +			0x100 0x118	/* uart3_cts_rctx.uart3_cts_rctx INPUT_PULLUP | MODE0 */ +			0x102 0		/* uart3_rts_sd.uart3_rts_sd OUTPUT | MODE0 */ +			0x104 0x100	/* uart3_rx_irrx.uart3_rx_irrx INPUT | MODE0 */ +			0x106 0		/* uart3_tx_irtx.uart3_tx_irtx OUTPUT | MODE0 */ +		>; +	}; + +	uart4_pins: pinmux_uart4_pins { +		pinctrl-single,pins = < +			0x11c 0x100	/* uart4_rx.uart4_rx INPUT | MODE0 */ +			0x11e 0		/* uart4_tx.uart4_tx OUTPUT | MODE0 */ +		>; +	}; +}; +  &i2c1 {  	clock-frequency = <400000>; @@ -226,3 +254,98 @@  	bus-width = <4>;  	ti,non-removable;  }; + +&emif1 { +	cs1-used; +	device-handle = <&elpida_ECB240ABACN>; +}; + +&emif2 { +	cs1-used; +	device-handle = <&elpida_ECB240ABACN>; +}; + +&keypad { +	keypad,num-rows = <8>; +	keypad,num-columns = <8>; +	linux,keymap = <0x00000012	/* KEY_E */ +			0x00010013	/* KEY_R */ +			0x00020014	/* KEY_T */ +			0x00030066	/* KEY_HOME */ +			0x0004003f	/* KEY_F5 */ +			0x000500f0	/* KEY_UNKNOWN */ +			0x00060017	/* KEY_I */ +			0x0007002a	/* KEY_LEFTSHIFT */ +			0x01000020	/* KEY_D*/ +			0x01010021	/* KEY_F */ +			0x01020022	/* KEY_G */ +			0x010300e7	/* KEY_SEND */ +			0x01040040	/* KEY_F6 */ +			0x010500f0	/* KEY_UNKNOWN */ +			0x01060025	/* KEY_K */ +			0x0107001c	/* KEY_ENTER */ +			0x0200002d	/* KEY_X */ +			0x0201002e	/* KEY_C */ +			0x0202002f	/* KEY_V */ +			0x0203006b	/* KEY_END */ +			0x02040041	/* KEY_F7 */ +			0x020500f0	/* KEY_UNKNOWN */ +			0x02060034	/* KEY_DOT */ +			0x0207003a	/* KEY_CAPSLOCK */ +			0x0300002c	/* KEY_Z */ +			0x0301004e	/* KEY_KPLUS */ +			0x03020030	/* KEY_B */ +			0x0303003b	/* KEY_F1 */ +			0x03040042	/* KEY_F8 */ +			0x030500f0	/* KEY_UNKNOWN */ +			0x03060018	/* KEY_O */ +			0x03070039	/* KEY_SPACE */ +			0x04000011	/* KEY_W */ +			0x04010015	/* KEY_Y */ +			0x04020016	/* KEY_U */ +			0x0403003c	/* KEY_F2 */ +			0x04040073	/* KEY_VOLUMEUP */ +			0x040500f0	/* KEY_UNKNOWN */ +			0x04060026	/* KEY_L */ +			0x04070069	/* KEY_LEFT */ +			0x0500001f	/* KEY_S */ +			0x05010023	/* KEY_H */ +			0x05020024	/* KEY_J */ +			0x0503003d	/* KEY_F3 */ +			0x05040043	/* KEY_F9 */ +			0x05050072	/* KEY_VOLUMEDOWN */ +			0x05060032	/* KEY_M */ +			0x0507006a	/* KEY_RIGHT */ +			0x06000010	/* KEY_Q */ +			0x0601001e	/* KEY_A */ +			0x06020031	/* KEY_N */ +			0x0603009e	/* KEY_BACK */ +			0x0604000e	/* KEY_BACKSPACE */ +			0x060500f0	/* KEY_UNKNOWN */ +			0x06060019	/* KEY_P */ +			0x06070067	/* KEY_UP */ +			0x07000094	/* KEY_PROG1 */ +			0x07010095	/* KEY_PROG2 */ +			0x070200ca	/* KEY_PROG3 */ +			0x070300cb	/* KEY_PROG4 */ +			0x0704003e	/* KEY_F4 */ +			0x070500f0	/* KEY_UNKNOWN */ +			0x07060160	/* KEY_OK */ +			0x0707006c>;	/* KEY_DOWN */ +	linux,input-no-autorepeat; +}; + +&uart2 { +	pinctrl-names = "default"; +	pinctrl-0 = <&uart2_pins>; +}; + +&uart3 { +	pinctrl-names = "default"; +	pinctrl-0 = <&uart3_pins>; +}; + +&uart4 { +	pinctrl-names = "default"; +	pinctrl-0 = <&uart4_pins>; +}; diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 04cbbcb6ff9..5d1c48459e6 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi @@ -30,12 +30,35 @@  	cpus {  		cpu@0 {  			compatible = "arm,cortex-a9"; +			next-level-cache = <&L2>;  		};  		cpu@1 {  			compatible = "arm,cortex-a9"; +			next-level-cache = <&L2>;  		};  	}; +	gic: interrupt-controller@48241000 { +		compatible = "arm,cortex-a9-gic"; +		interrupt-controller; +		#interrupt-cells = <3>; +		reg = <0x48241000 0x1000>, +		      <0x48240100 0x0100>; +	}; + +	L2: l2-cache-controller@48242000 { +		compatible = "arm,pl310-cache"; +		reg = <0x48242000 0x1000>; +		cache-unified; +		cache-level = <2>; +	}; + +	local-timer@0x48240600 { +		compatible = "arm,cortex-a9-twd-timer"; +		reg = <0x48240600 0x20>; +		interrupts = <1 13 0x304>; +	}; +  	/*  	 * The soc node represents the soc top level view. It is uses for IPs  	 * that are not memory mapped in the MPU view or for the MPU itself. @@ -61,30 +84,6 @@  	/*  	 * XXX: Use a flat representation of the OMAP4 interconnect.  	 * The real OMAP interconnect network is quite complex. -	 * -	 * MPU -+-- MPU_PRIVATE - GIC, L2 -	 *      | -	 *      +----------------+----------+ -	 *      |                |          | -	 *      +            +- EMIF - DDR  | -	 *      |            |              | -	 *      |            +     +--------+ -	 *      |            |     | -	 *      |            +- L4_ABE - AESS, MCBSP, TIMERs... -	 *      |            | -	 *      +- L3_MAIN --+- L4_CORE - IPs... -	 *                   | -	 *                   +- L4_PER - IPs... -	 *                   | -	 *                   +- L4_CFG -+- L4_WKUP - IPs... -	 *                   |          | -	 *                   |          +- IPs... -	 *                   +- IPU ----+ -	 *                   |          | -	 *                   +- DSP ----+ -	 *                   |          | -	 *                   +- DSS ----+ -	 *  	 * Since that will not bring real advantage to represent that in DT for  	 * the moment, just use a fake OCP bus entry to represent the whole bus  	 * hierarchy. @@ -96,16 +95,27 @@  		ranges;  		ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; -		gic: interrupt-controller@48241000 { -			compatible = "arm,cortex-a9-gic"; -			interrupt-controller; -			#interrupt-cells = <3>; -			reg = <0x48241000 0x1000>, -			      <0x48240100 0x0100>; +		omap4_pmx_core: pinmux@4a100040 { +			compatible = "ti,omap4-padconf", "pinctrl-single"; +			reg = <0x4a100040 0x0196>; +			#address-cells = <1>; +			#size-cells = <0>; +			pinctrl-single,register-width = <16>; +			pinctrl-single,function-mask = <0x7fff>; +		}; +		omap4_pmx_wkup: pinmux@4a31e040 { +			compatible = "ti,omap4-padconf", "pinctrl-single"; +			reg = <0x4a31e040 0x0038>; +			#address-cells = <1>; +			#size-cells = <0>; +			pinctrl-single,register-width = <16>; +			pinctrl-single,function-mask = <0x7fff>;  		};  		gpio1: gpio@4a310000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x4a310000 0x200>; +			interrupts = <0 29 0x4>;  			ti,hwmods = "gpio1";  			gpio-controller;  			#gpio-cells = <2>; @@ -115,6 +125,8 @@  		gpio2: gpio@48055000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48055000 0x200>; +			interrupts = <0 30 0x4>;  			ti,hwmods = "gpio2";  			gpio-controller;  			#gpio-cells = <2>; @@ -124,6 +136,8 @@  		gpio3: gpio@48057000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48057000 0x200>; +			interrupts = <0 31 0x4>;  			ti,hwmods = "gpio3";  			gpio-controller;  			#gpio-cells = <2>; @@ -133,6 +147,8 @@  		gpio4: gpio@48059000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x48059000 0x200>; +			interrupts = <0 32 0x4>;  			ti,hwmods = "gpio4";  			gpio-controller;  			#gpio-cells = <2>; @@ -142,6 +158,8 @@  		gpio5: gpio@4805b000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x4805b000 0x200>; +			interrupts = <0 33 0x4>;  			ti,hwmods = "gpio5";  			gpio-controller;  			#gpio-cells = <2>; @@ -151,6 +169,8 @@  		gpio6: gpio@4805d000 {  			compatible = "ti,omap4-gpio"; +			reg = <0x4805d000 0x200>; +			interrupts = <0 34 0x4>;  			ti,hwmods = "gpio6";  			gpio-controller;  			#gpio-cells = <2>; @@ -160,30 +180,40 @@  		uart1: serial@4806a000 {  			compatible = "ti,omap4-uart"; +			reg = <0x4806a000 0x100>; +			interrupts = <0 72 0x4>;  			ti,hwmods = "uart1";  			clock-frequency = <48000000>;  		};  		uart2: serial@4806c000 {  			compatible = "ti,omap4-uart"; +			reg = <0x4806c000 0x100>; +			interrupts = <0 73 0x4>;  			ti,hwmods = "uart2";  			clock-frequency = <48000000>;  		};  		uart3: serial@48020000 {  			compatible = "ti,omap4-uart"; +			reg = <0x48020000 0x100>; +			interrupts = <0 74 0x4>;  			ti,hwmods = "uart3";  			clock-frequency = <48000000>;  		};  		uart4: serial@4806e000 {  			compatible = "ti,omap4-uart"; +			reg = <0x4806e000 0x100>; +			interrupts = <0 70 0x4>;  			ti,hwmods = "uart4";  			clock-frequency = <48000000>;  		};  		i2c1: i2c@48070000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48070000 0x100>; +			interrupts = <0 56 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c1"; @@ -191,6 +221,8 @@  		i2c2: i2c@48072000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48072000 0x100>; +			interrupts = <0 57 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c2"; @@ -198,6 +230,8 @@  		i2c3: i2c@48060000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48060000 0x100>; +			interrupts = <0 61 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c3"; @@ -205,6 +239,8 @@  		i2c4: i2c@48350000 {  			compatible = "ti,omap4-i2c"; +			reg = <0x48350000 0x100>; +			interrupts = <0 62 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "i2c4"; @@ -212,6 +248,8 @@  		mcspi1: spi@48098000 {  			compatible = "ti,omap4-mcspi"; +			reg = <0x48098000 0x200>; +			interrupts = <0 65 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "mcspi1"; @@ -220,6 +258,8 @@  		mcspi2: spi@4809a000 {  			compatible = "ti,omap4-mcspi"; +			reg = <0x4809a000 0x200>; +			interrupts = <0 66 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "mcspi2"; @@ -228,6 +268,8 @@  		mcspi3: spi@480b8000 {  			compatible = "ti,omap4-mcspi"; +			reg = <0x480b8000 0x200>; +			interrupts = <0 91 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "mcspi3"; @@ -236,6 +278,8 @@  		mcspi4: spi@480ba000 {  			compatible = "ti,omap4-mcspi"; +			reg = <0x480ba000 0x200>; +			interrupts = <0 48 0x4>;  			#address-cells = <1>;  			#size-cells = <0>;  			ti,hwmods = "mcspi4"; @@ -244,6 +288,8 @@  		mmc1: mmc@4809c000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x4809c000 0x400>; +			interrupts = <0 83 0x4>;  			ti,hwmods = "mmc1";  			ti,dual-volt;  			ti,needs-special-reset; @@ -251,30 +297,40 @@  		mmc2: mmc@480b4000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480b4000 0x400>; +			interrupts = <0 86 0x4>;  			ti,hwmods = "mmc2";  			ti,needs-special-reset;  		};  		mmc3: mmc@480ad000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480ad000 0x400>; +			interrupts = <0 94 0x4>;  			ti,hwmods = "mmc3";  			ti,needs-special-reset;  		};  		mmc4: mmc@480d1000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480d1000 0x400>; +			interrupts = <0 96 0x4>;  			ti,hwmods = "mmc4";  			ti,needs-special-reset;  		};  		mmc5: mmc@480d5000 {  			compatible = "ti,omap4-hsmmc"; +			reg = <0x480d5000 0x400>; +			interrupts = <0 59 0x4>;  			ti,hwmods = "mmc5";  			ti,needs-special-reset;  		};  		wdt2: wdt@4a314000 {  			compatible = "ti,omap4-wdt", "ti,omap3-wdt"; +			reg = <0x4a314000 0x80>; +			interrupts = <0 80 0x4>;  			ti,hwmods = "wd_timer2";  		}; @@ -282,6 +338,7 @@  			compatible = "ti,omap4-mcpdm";  			reg = <0x40132000 0x7f>, /* MPU private access */  			      <0x49032000 0x7f>; /* L3 Interconnect */ +			reg-names = "mpu", "dma";  			interrupts = <0 112 0x4>;  			interrupt-parent = <&gic>;  			ti,hwmods = "mcpdm"; @@ -291,9 +348,87 @@  			compatible = "ti,omap4-dmic";  			reg = <0x4012e000 0x7f>, /* MPU private access */  			      <0x4902e000 0x7f>; /* L3 Interconnect */ +			reg-names = "mpu", "dma";  			interrupts = <0 114 0x4>;  			interrupt-parent = <&gic>;  			ti,hwmods = "dmic";  		}; + +		mcbsp1: mcbsp@40122000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x40122000 0xff>, /* MPU private access */ +			      <0x49022000 0xff>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 17 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp1"; +		}; + +		mcbsp2: mcbsp@40124000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x40124000 0xff>, /* MPU private access */ +			      <0x49024000 0xff>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 22 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp2"; +		}; + +		mcbsp3: mcbsp@40126000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x40126000 0xff>, /* MPU private access */ +			      <0x49026000 0xff>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 23 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp3"; +		}; + +		mcbsp4: mcbsp@48096000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x48096000 0xff>; /* L4 Interconnect */ +			reg-names = "mpu"; +			interrupts = <0 16 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp4"; +		}; + +		keypad: keypad@4a31c000 { +			compatible = "ti,omap4-keypad"; +			reg = <0x4a31c000 0x80>; +			interrupts = <0 120 0x4>; +			reg-names = "mpu"; +			ti,hwmods = "kbd"; +		}; + +		emif1: emif@4c000000 { +			compatible = "ti,emif-4d"; +			reg = <0x4c000000 0x100>; +			interrupts = <0 110 0x4>; +			ti,hwmods = "emif1"; +			phy-type = <1>; +			hw-caps-read-idle-ctrl; +			hw-caps-ll-interface; +			hw-caps-temp-alert; +		}; + +		emif2: emif@4d000000 { +			compatible = "ti,emif-4d"; +			reg = <0x4d000000 0x100>; +			interrupts = <0 111 0x4>; +			ti,hwmods = "emif2"; +			phy-type = <1>; +			hw-caps-read-idle-ctrl; +			hw-caps-ll-interface; +			hw-caps-temp-alert; +		};  	};  }; diff --git a/arch/arm/boot/dts/omap5-evm.dts b/arch/arm/boot/dts/omap5-evm.dts index 200c39ad1c8..9c41a3f311a 100644 --- a/arch/arm/boot/dts/omap5-evm.dts +++ b/arch/arm/boot/dts/omap5-evm.dts @@ -17,4 +17,68 @@  		device_type = "memory";  		reg = <0x80000000 0x40000000>; /* 1 GB */  	}; + +	vmmcsd_fixed: fixedregulator-mmcsd { +		compatible = "regulator-fixed"; +		regulator-name = "vmmcsd_fixed"; +		regulator-min-microvolt = <3000000>; +		regulator-max-microvolt = <3000000>; +	}; + +}; + +&mmc1 { +	vmmc-supply = <&vmmcsd_fixed>; +	bus-width = <4>; +}; + +&mmc2 { +	vmmc-supply = <&vmmcsd_fixed>; +	bus-width = <8>; +	ti,non-removable; +}; + +&mmc3 { +	bus-width = <4>; +	ti,non-removable; +}; + +&mmc4 { +	status = "disabled"; +}; + +&mmc5 { +	status = "disabled"; +}; + +&i2c2 { +	clock-frequency = <400000>; + +	/* Pressure Sensor */ +	bmp085@77 { +		compatible = "bosch,bmp085"; +		reg = <0x77>; +	}; +}; + +&i2c4 { +	clock-frequency = <400000>; + +	/* Temperature Sensor */ +	tmp102@48{ +		compatible = "ti,tmp102"; +		reg = <0x48>; +	}; +}; + +&keypad { +	keypad,num-rows = <8>; +	keypad,num-columns = <8>; +	linux,keymap = <0x02020073	/* VOLUP */ +			0x02030072	/* VOLDOWM */ +			0x020400e7	/* SEND */ +			0x02050066	/* HOME */ +			0x0206006b	/* END */ +			0x020700d9>;	/* SEARCH */ +	linux,input-no-autorepeat;  }; diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index 57e52708374..9ac75b37c99 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi @@ -145,6 +145,41 @@  			#interrupt-cells = <1>;  		}; +		i2c1: i2c@48070000 { +			compatible = "ti,omap4-i2c"; +			#address-cells = <1>; +			#size-cells = <0>; +			ti,hwmods = "i2c1"; +		}; + +		i2c2: i2c@48072000 { +			compatible = "ti,omap4-i2c"; +			#address-cells = <1>; +			#size-cells = <0>; +			ti,hwmods = "i2c2"; +		}; + +		i2c3: i2c@48060000 { +			compatible = "ti,omap4-i2c"; +			#address-cells = <1>; +			#size-cells = <0>; +			ti,hwmods = "i2c3"; +		}; + +		i2c4: i2c@4807A000 { +			compatible = "ti,omap4-i2c"; +			#address-cells = <1>; +			#size-cells = <0>; +			ti,hwmods = "i2c4"; +		}; + +		i2c5: i2c@4807C000 { +			compatible = "ti,omap4-i2c"; +			#address-cells = <1>; +			#size-cells = <0>; +			ti,hwmods = "i2c5"; +		}; +  		uart1: serial@4806a000 {  			compatible = "ti,omap4-uart";  			ti,hwmods = "uart1"; @@ -180,5 +215,97 @@  			ti,hwmods = "uart6";  			clock-frequency = <48000000>;  		}; + +		mmc1: mmc@4809c000 { +			compatible = "ti,omap4-hsmmc"; +			ti,hwmods = "mmc1"; +			ti,dual-volt; +			ti,needs-special-reset; +		}; + +		mmc2: mmc@480b4000 { +			compatible = "ti,omap4-hsmmc"; +			ti,hwmods = "mmc2"; +			ti,needs-special-reset; +		}; + +		mmc3: mmc@480ad000 { +			compatible = "ti,omap4-hsmmc"; +			ti,hwmods = "mmc3"; +			ti,needs-special-reset; +		}; + +		mmc4: mmc@480d1000 { +			compatible = "ti,omap4-hsmmc"; +			ti,hwmods = "mmc4"; +			ti,needs-special-reset; +		}; + +		mmc5: mmc@480d5000 { +			compatible = "ti,omap4-hsmmc"; +			ti,hwmods = "mmc5"; +			ti,needs-special-reset; +		}; + +		keypad: keypad@4ae1c000 { +			compatible = "ti,omap4-keypad"; +			ti,hwmods = "kbd"; +		}; + +		mcpdm: mcpdm@40132000 { +			compatible = "ti,omap4-mcpdm"; +			reg = <0x40132000 0x7f>, /* MPU private access */ +			      <0x49032000 0x7f>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 112 0x4>; +			interrupt-parent = <&gic>; +			ti,hwmods = "mcpdm"; +		}; + +		dmic: dmic@4012e000 { +			compatible = "ti,omap4-dmic"; +			reg = <0x4012e000 0x7f>, /* MPU private access */ +			      <0x4902e000 0x7f>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 114 0x4>; +			interrupt-parent = <&gic>; +			ti,hwmods = "dmic"; +		}; + +		mcbsp1: mcbsp@40122000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x40122000 0xff>, /* MPU private access */ +			      <0x49022000 0xff>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 17 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp1"; +		}; + +		mcbsp2: mcbsp@40124000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x40124000 0xff>, /* MPU private access */ +			      <0x49024000 0xff>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 22 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp2"; +		}; + +		mcbsp3: mcbsp@40126000 { +			compatible = "ti,omap4-mcbsp"; +			reg = <0x40126000 0xff>, /* MPU private access */ +			      <0x49026000 0xff>; /* L3 Interconnect */ +			reg-names = "mpu", "dma"; +			interrupts = <0 23 0x4>; +			interrupt-names = "common"; +			interrupt-parent = <&gic>; +			ti,buffer-size = <128>; +			ti,hwmods = "mcbsp3"; +		};  	};  }; diff --git a/arch/arm/boot/dts/tps65217.dtsi b/arch/arm/boot/dts/tps65217.dtsi new file mode 100644 index 00000000000..a63272422d7 --- /dev/null +++ b/arch/arm/boot/dts/tps65217.dtsi @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.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. + */ + +/* + * Integrated Power Management Chip + * http://www.ti.com/lit/ds/symlink/tps65217.pdf + */ + +&tps { +	compatible = "ti,tps65217"; + +	regulators { +		#address-cells = <1>; +		#size-cells = <0>; + +		dcdc1_reg: regulator@0 { +			reg = <0>; +			regulator-compatible = "dcdc1"; +		}; + +		dcdc2_reg: regulator@1 { +			reg = <1>; +			regulator-compatible = "dcdc2"; +		}; + +		dcdc3_reg: regulator@2 { +			reg = <2>; +			regulator-compatible = "dcdc3"; +		}; + +		ldo1_reg: regulator@3 { +			reg = <3>; +			regulator-compatible = "ldo1"; +		}; + +		ldo2_reg: regulator@4 { +			reg = <4>; +			regulator-compatible = "ldo2"; +		}; + +		ldo3_reg: regulator@5 { +			reg = <5>; +			regulator-compatible = "ldo3"; +		}; + +		ldo4_reg: regulator@6 { +			reg = <6>; +			regulator-compatible = "ldo4"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/tps65910.dtsi b/arch/arm/boot/dts/tps65910.dtsi new file mode 100644 index 00000000000..92693a89160 --- /dev/null +++ b/arch/arm/boot/dts/tps65910.dtsi @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.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. + */ + +/* + * Integrated Power Management Chip + * http://www.ti.com/lit/ds/symlink/tps65910.pdf + */ + +&tps { +	compatible = "ti,tps65910"; + +	regulators { +		#address-cells = <1>; +		#size-cells = <0>; + +		vrtc_reg: regulator@0 { +			reg = <0>; +			regulator-compatible = "vrtc"; +		}; + +		vio_reg: regulator@1 { +			reg = <1>; +			regulator-compatible = "vio"; +		}; + +		vdd1_reg: regulator@2 { +			reg = <2>; +			regulator-compatible = "vdd1"; +		}; + +		vdd2_reg: regulator@3 { +			reg = <3>; +			regulator-compatible = "vdd2"; +		}; + +		vdd3_reg: regulator@4 { +			reg = <4>; +			regulator-compatible = "vdd3"; +		}; + +		vdig1_reg: regulator@5 { +			reg = <5>; +			regulator-compatible = "vdig1"; +		}; + +		vdig2_reg: regulator@6 { +			reg = <6>; +			regulator-compatible = "vdig2"; +		}; + +		vpll_reg: regulator@7 { +			reg = <7>; +			regulator-compatible = "vpll"; +		}; + +		vdac_reg: regulator@8 { +			reg = <8>; +			regulator-compatible = "vdac"; +		}; + +		vaux1_reg: regulator@9 { +			reg = <9>; +			regulator-compatible = "vaux1"; +		}; + +		vaux2_reg: regulator@10 { +			reg = <10>; +			regulator-compatible = "vaux2"; +		}; + +		vaux33_reg: regulator@11 { +			reg = <11>; +			regulator-compatible = "vaux33"; +		}; + +		vmmc_reg: regulator@12 { +			reg = <12>; +			regulator-compatible = "vmmc"; +		}; +	}; +}; diff --git a/arch/arm/boot/dts/twl4030.dtsi b/arch/arm/boot/dts/twl4030.dtsi index 22f4d1394ed..ff000172c93 100644 --- a/arch/arm/boot/dts/twl4030.dtsi +++ b/arch/arm/boot/dts/twl4030.dtsi @@ -19,19 +19,19 @@  		interrupts = <11>;  	}; -	vdac: regulator@0 { +	vdac: regulator-vdac {  		compatible = "ti,twl4030-vdac";  		regulator-min-microvolt = <1800000>;  		regulator-max-microvolt = <1800000>;  	}; -	vpll2: regulator@1 { +	vpll2: regulator-vpll2 {  		compatible = "ti,twl4030-vpll2";  		regulator-min-microvolt = <1800000>;  		regulator-max-microvolt = <1800000>;  	}; -	vmmc1: regulator@2 { +	vmmc1: regulator-vmmc1 {  		compatible = "ti,twl4030-vmmc1";  		regulator-min-microvolt = <1850000>;  		regulator-max-microvolt = <3150000>; diff --git a/arch/arm/boot/dts/twl6030.dtsi b/arch/arm/boot/dts/twl6030.dtsi index d351b27d721..123e2c40218 100644 --- a/arch/arm/boot/dts/twl6030.dtsi +++ b/arch/arm/boot/dts/twl6030.dtsi @@ -20,70 +20,70 @@  		interrupts = <11>;  	}; -	vaux1: regulator@0 { +	vaux1: regulator-vaux1 {  		compatible = "ti,twl6030-vaux1";  		regulator-min-microvolt = <1000000>;  		regulator-max-microvolt = <3000000>;  	}; -	vaux2: regulator@1 { +	vaux2: regulator-vaux2 {  		compatible = "ti,twl6030-vaux2";  		regulator-min-microvolt = <1200000>;  		regulator-max-microvolt = <2800000>;  	}; -	vaux3: regulator@2 { +	vaux3: regulator-vaux3 {  		compatible = "ti,twl6030-vaux3";  		regulator-min-microvolt = <1000000>;  		regulator-max-microvolt = <3000000>;  	}; -	vmmc: regulator@3 { +	vmmc: regulator-vmmc {  		compatible = "ti,twl6030-vmmc";  		regulator-min-microvolt = <1200000>;  		regulator-max-microvolt = <3000000>;  	}; -	vpp: regulator@4 { +	vpp: regulator-vpp {  		compatible = "ti,twl6030-vpp";  		regulator-min-microvolt = <1800000>;  		regulator-max-microvolt = <2500000>;  	}; -	vusim: regulator@5 { +	vusim: regulator-vusim {  		compatible = "ti,twl6030-vusim";  		regulator-min-microvolt = <1200000>;  		regulator-max-microvolt = <2900000>;  	}; -	vdac: regulator@6 { +	vdac: regulator-vdac {  		compatible = "ti,twl6030-vdac";  	}; -	vana: regulator@7 { +	vana: regulator-vana {  		compatible = "ti,twl6030-vana";  	}; -	vcxio: regulator@8 { +	vcxio: regulator-vcxio {  		compatible = "ti,twl6030-vcxio";  		regulator-always-on;  	}; -	vusb: regulator@9 { +	vusb: regulator-vusb {  		compatible = "ti,twl6030-vusb";  	}; -	v1v8: regulator@10 { +	v1v8: regulator-v1v8 {  		compatible = "ti,twl6030-v1v8";  		regulator-always-on;  	}; -	v2v1: regulator@11 { +	v2v1: regulator-v2v1 {  		compatible = "ti,twl6030-v2v1";  		regulator-always-on;  	}; -	clk32kg: regulator@12 { +	clk32kg: regulator-clk32kg {  		compatible = "ti,twl6030-clk32kg";  	};  }; diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index e58edc36b40..62303043db9 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig @@ -123,6 +123,7 @@ CONFIG_HW_RANDOM=y  CONFIG_I2C_CHARDEV=y  CONFIG_SPI=y  CONFIG_SPI_OMAP24XX=y +CONFIG_PINCTRL_SINGLE=y  CONFIG_DEBUG_GPIO=y  CONFIG_GPIO_SYSFS=y  CONFIG_GPIO_TWL4030=y diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig index fcd4e85c4dd..c1309495eeb 100644 --- a/arch/arm/mach-omap2/Kconfig +++ b/arch/arm/mach-omap2/Kconfig @@ -18,6 +18,7 @@ config ARCH_OMAP2PLUS_TYPICAL  	select TWL4030_CORE if ARCH_OMAP3 || ARCH_OMAP4  	select TWL4030_POWER if ARCH_OMAP3 || ARCH_OMAP4  	select HIGHMEM +	select PINCTRL  	help  	  Compile a kernel suitable for booting most boards diff --git a/arch/arm/mach-omap2/Makefile.boot b/arch/arm/mach-omap2/Makefile.boot index b03e562acc6..be0fe9226d6 100644 --- a/arch/arm/mach-omap2/Makefile.boot +++ b/arch/arm/mach-omap2/Makefile.boot @@ -1,3 +1,9 @@    zreladdr-y		+= 0x80008000  params_phys-y		:= 0x80000100  initrd_phys-y		:= 0x80800000 + +dtb-$(CONFIG_SOC_OMAP2420)	+= omap2420-h4.dtb +dtb-$(CONFIG_ARCH_OMAP3)	+= omap3-beagle-xm.dtb omap3-evm.dtb omap3-tobi.dtb +dtb-$(CONFIG_ARCH_OMAP4)	+= omap4-panda.dtb omap4-pandaES.dtb +dtb-$(CONFIG_ARCH_OMAP4)	+= omap4-var_som.dtb omap4-sdp.dtb +dtb-$(CONFIG_SOC_OMAP5)		+= omap5-evm.dtb diff --git a/arch/arm/mach-omap2/omap4-common.c b/arch/arm/mach-omap2/omap4-common.c index 73c1440a825..3cd2564ed5c 100644 --- a/arch/arm/mach-omap2/omap4-common.c +++ b/arch/arm/mach-omap2/omap4-common.c @@ -170,7 +170,10 @@ static int __init omap_l2_cache_init(void)  	/* Enable PL310 L2 Cache controller */  	omap_smc1(0x102, 0x1); -	l2x0_init(l2cache_base, aux_ctrl, L2X0_AUX_CTRL_MASK); +	if (of_have_populated_dt()) +		l2x0_of_init(aux_ctrl, L2X0_AUX_CTRL_MASK); +	else +		l2x0_init(l2cache_base, aux_ctrl, L2X0_AUX_CTRL_MASK);  	/*  	 * Override default outer_cache.disable with a OMAP4 diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 9db1684df69..4c6b5a77405 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -3158,6 +3158,33 @@ int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res)  }  /** + * omap_hwmod_fill_dma_resources - fill struct resource array with dma data + * @oh: struct omap_hwmod * + * @res: pointer to the array of struct resource to fill + * + * Fill the struct resource array @res with dma resource data from the + * omap_hwmod @oh.  Intended to be called by code that registers + * omap_devices.  See also omap_hwmod_count_resources().  Returns the + * number of array elements filled. + */ +int omap_hwmod_fill_dma_resources(struct omap_hwmod *oh, struct resource *res) +{ +	int i, sdma_reqs_cnt; +	int r = 0; + +	sdma_reqs_cnt = _count_sdma_reqs(oh); +	for (i = 0; i < sdma_reqs_cnt; i++) { +		(res + r)->name = (oh->sdma_reqs + i)->name; +		(res + r)->start = (oh->sdma_reqs + i)->dma_req; +		(res + r)->end = (oh->sdma_reqs + i)->dma_req; +		(res + r)->flags = IORESOURCE_DMA; +		r++; +	} + +	return r; +} + +/**   * omap_hwmod_get_resource_byname - fetch IP block integration data by name   * @oh: struct omap_hwmod * to operate on   * @type: one of the IORESOURCE_* constants from include/linux/ioport.h diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index 25cbe73b0cd..e2084facca5 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c @@ -36,6 +36,7 @@  #include <linux/clocksource.h>  #include <linux/clockchips.h>  #include <linux/slab.h> +#include <linux/of.h>  #include <asm/mach/time.h>  #include <asm/smp_twd.h> @@ -387,6 +388,11 @@ static void __init omap4_timer_init(void)  	if (omap_rev() != OMAP4430_REV_ES1_0) {  		int err; +		if (of_have_populated_dt()) { +			twd_local_timer_of_register(); +			return; +		} +  		err = twd_local_timer_register(&twd_local_timer);  		if (err)  			pr_err("twd_local_timer_register failed %d\n", err); diff --git a/arch/arm/plat-omap/include/plat/omap_hwmod.h b/arch/arm/plat-omap/include/plat/omap_hwmod.h index 6132972aff3..5857b9cd6eb 100644 --- a/arch/arm/plat-omap/include/plat/omap_hwmod.h +++ b/arch/arm/plat-omap/include/plat/omap_hwmod.h @@ -615,6 +615,7 @@ int omap_hwmod_softreset(struct omap_hwmod *oh);  int omap_hwmod_count_resources(struct omap_hwmod *oh);  int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res); +int omap_hwmod_fill_dma_resources(struct omap_hwmod *oh, struct resource *res);  int omap_hwmod_get_resource_byname(struct omap_hwmod *oh, unsigned int type,  				   const char *name, struct resource *res); diff --git a/arch/arm/plat-omap/omap_device.c b/arch/arm/plat-omap/omap_device.c index c490240bb82..6f5c5809681 100644 --- a/arch/arm/plat-omap/omap_device.c +++ b/arch/arm/plat-omap/omap_device.c @@ -370,6 +370,14 @@ static int omap_device_build_from_dt(struct platform_device *pdev)  		goto odbfd_exit1;  	} +	/* Fix up missing resource names */ +	for (i = 0; i < pdev->num_resources; i++) { +		struct resource *r = &pdev->resource[i]; + +		if (r->name == NULL) +			r->name = dev_name(&pdev->dev); +	} +  	if (of_get_property(node, "ti,no_idle_on_suspend", NULL))  		omap_device_disable_idle_on_suspend(pdev); @@ -486,6 +494,33 @@ static int omap_device_fill_resources(struct omap_device *od,  }  /** + * _od_fill_dma_resources - fill in array of struct resource with dma resources + * @od: struct omap_device * + * @res: pointer to an array of struct resource to be filled in + * + * Populate one or more empty struct resource pointed to by @res with + * the dma resource data for this omap_device @od.  Used by + * omap_device_alloc() after calling omap_device_count_resources(). + * + * Ideally this function would not be needed at all.  If we have + * mechanism to get dma resources from DT. + * + * Returns 0. + */ +static int _od_fill_dma_resources(struct omap_device *od, +				      struct resource *res) +{ +	int i, r; + +	for (i = 0; i < od->hwmods_cnt; i++) { +		r = omap_hwmod_fill_dma_resources(od->hwmods[i], res); +		res += r; +	} + +	return 0; +} + +/**   * omap_device_alloc - allocate an omap_device   * @pdev: platform_device that will be included in this omap_device   * @oh: ptr to the single omap_hwmod that backs this omap_device @@ -524,24 +559,44 @@ struct omap_device *omap_device_alloc(struct platform_device *pdev,  	od->hwmods = hwmods;  	od->pdev = pdev; +	res_count = omap_device_count_resources(od);  	/* -	 * HACK: Ideally the resources from DT should match, and hwmod -	 * should just add the missing ones. Since the name is not -	 * properly populated by DT, stick to hwmod resources only. +	 * DT Boot: +	 *   OF framework will construct the resource structure (currently +	 *   does for MEM & IRQ resource) and we should respect/use these +	 *   resources, killing hwmod dependency. +	 *   If pdev->num_resources > 0, we assume that MEM & IRQ resources +	 *   have been allocated by OF layer already (through DTB). +	 * +	 * Non-DT Boot: +	 *   Here, pdev->num_resources = 0, and we should get all the +	 *   resources from hwmod. +	 * +	 * TODO: Once DMA resource is available from OF layer, we should +	 *   kill filling any resources from hwmod.  	 */ -	if (pdev->num_resources && pdev->resource) -		dev_warn(&pdev->dev, "%s(): resources already allocated %d\n", -			__func__, pdev->num_resources); - -	res_count = omap_device_count_resources(od); -	if (res_count > 0) { -		dev_dbg(&pdev->dev, "%s(): resources allocated from hwmod %d\n", -			__func__, res_count); +	if (res_count > pdev->num_resources) { +		/* Allocate resources memory to account for new resources */  		res = kzalloc(sizeof(struct resource) * res_count, GFP_KERNEL);  		if (!res)  			goto oda_exit3; -		omap_device_fill_resources(od, res); +		/* +		 * If pdev->num_resources > 0, then assume that, +		 * MEM and IRQ resources will only come from DT and only +		 * fill DMA resource from hwmod layer. +		 */ +		if (pdev->num_resources && pdev->resource) { +			dev_dbg(&pdev->dev, "%s(): resources already allocated %d\n", +				__func__, res_count); +			memcpy(res, pdev->resource, +			       sizeof(struct resource) * pdev->num_resources); +			_od_fill_dma_resources(od, &res[pdev->num_resources]); +		} else { +			dev_dbg(&pdev->dev, "%s(): using resources from hwmod %d\n", +				__func__, res_count); +			omap_device_fill_resources(od, res); +		}  		ret = platform_device_add_resources(pdev, res, res_count);  		kfree(res); diff --git a/drivers/gpio/gpio-twl4030.c b/drivers/gpio/gpio-twl4030.c index f030880bc9b..c5f8ca233e1 100644 --- a/drivers/gpio/gpio-twl4030.c +++ b/drivers/gpio/gpio-twl4030.c @@ -396,6 +396,29 @@ static int __devinit gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)  static int gpio_twl4030_remove(struct platform_device *pdev); +static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev) +{ +	struct twl4030_gpio_platform_data *omap_twl_info; + +	omap_twl_info = devm_kzalloc(dev, sizeof(*omap_twl_info), GFP_KERNEL); +	if (!omap_twl_info) +		return NULL; + +	omap_twl_info->use_leds = of_property_read_bool(dev->of_node, +			"ti,use-leds"); + +	of_property_read_u32(dev->of_node, "ti,debounce", +			     &omap_twl_info->debounce); +	of_property_read_u32(dev->of_node, "ti,mmc-cd", +			     (u32 *)&omap_twl_info->mmc_cd); +	of_property_read_u32(dev->of_node, "ti,pullups", +			     &omap_twl_info->pullups); +	of_property_read_u32(dev->of_node, "ti,pulldowns", +			     &omap_twl_info->pulldowns); + +	return omap_twl_info; +} +  static int __devinit gpio_twl4030_probe(struct platform_device *pdev)  {  	struct twl4030_gpio_platform_data *pdata = pdev->dev.platform_data; @@ -428,33 +451,37 @@ no_irqs:  	twl_gpiochip.ngpio = TWL4030_GPIO_MAX;  	twl_gpiochip.dev = &pdev->dev; -	if (pdata) { -		/* -		 * NOTE:  boards may waste power if they don't set pullups -		 * and pulldowns correctly ... default for non-ULPI pins is -		 * pulldown, and some other pins may have external pullups -		 * or pulldowns.  Careful! -		 */ -		ret = gpio_twl4030_pulls(pdata->pullups, pdata->pulldowns); -		if (ret) -			dev_dbg(&pdev->dev, "pullups %.05x %.05x --> %d\n", -					pdata->pullups, pdata->pulldowns, -					ret); +	if (node) +		pdata = of_gpio_twl4030(&pdev->dev); -		ret = gpio_twl4030_debounce(pdata->debounce, pdata->mmc_cd); -		if (ret) -			dev_dbg(&pdev->dev, "debounce %.03x %.01x --> %d\n", -					pdata->debounce, pdata->mmc_cd, -					ret); - -		/* -		 * NOTE: we assume VIBRA_CTL.VIBRA_EN, in MODULE_AUDIO_VOICE, -		 * is (still) clear if use_leds is set. -		 */ -		if (pdata->use_leds) -			twl_gpiochip.ngpio += 2; +	if (pdata == NULL) { +		dev_err(&pdev->dev, "Platform data is missing\n"); +		return -ENXIO;  	} +	/* +	 * NOTE:  boards may waste power if they don't set pullups +	 * and pulldowns correctly ... default for non-ULPI pins is +	 * pulldown, and some other pins may have external pullups +	 * or pulldowns.  Careful! +	 */ +	ret = gpio_twl4030_pulls(pdata->pullups, pdata->pulldowns); +	if (ret) +		dev_dbg(&pdev->dev, "pullups %.05x %.05x --> %d\n", +			pdata->pullups, pdata->pulldowns, ret); + +	ret = gpio_twl4030_debounce(pdata->debounce, pdata->mmc_cd); +	if (ret) +		dev_dbg(&pdev->dev, "debounce %.03x %.01x --> %d\n", +			pdata->debounce, pdata->mmc_cd, ret); + +	/* +	 * NOTE: we assume VIBRA_CTL.VIBRA_EN, in MODULE_AUDIO_VOICE, +	 * is (still) clear if use_leds is set. +	 */ +	if (pdata->use_leds) +		twl_gpiochip.ngpio += 2; +  	ret = gpiochip_add(&twl_gpiochip);  	if (ret < 0) {  		dev_err(&pdev->dev, "could not register gpiochip, %d\n", ret);  |