diff options
author | Arnd Bergmann <arnd@arndb.de> | 2012-11-15 11:10:24 -0500 |
---|---|---|
committer | Arnd Bergmann <arnd@arndb.de> | 2012-11-15 11:10:24 -0500 |
commit | b599dc078a7fd423c97217756d09400403a90a7f (patch) | |
tree | afd2782879f63d63cd8503e4c76e1ff8af554386 | |
parent | b1f71bd0328a8c928258d3c8be689ddbc13a8a3b (diff) | |
parent | d308ba50a1234b299a00e63a95e61fdeb2f1a2df (diff) |
Merge tag 'omap-for-v3.8/dt-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/dt
From Tony Lindgren <tony@atomide.com>:
Device tree related changes for omaps updating the
various .dts files, and timer related changes to allow
configuring the timer via device tree.
* tag 'omap-for-v3.8/dt-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: (48 commits)
usb: musb: dsps: dt binding - add resources, example
ARM: dts: omap4-sdp: Add pinmux configuration for HDMI
ARM: dts: omap4-panda: Add pinmux configuration for HDMI
ARM: dts: Makefile: Add the am335x-evmsk target in dtbs list
ARM: dts: AM33XX: Add usbss node
ARM: dts: AM33XX: Add push-buttons device tree data to am335x-evmsk
ARM: dts: AM33XX: Add pinmux configuration for gpio-keys to EVMSK
ARM: dts: AM33XX: Add user-leds device tree data to am335x-evmsk
ARM: dts: AM33XX: Add pinmux configuration for gpio-leds to EVMSK
ARM: dts: AM33XX: Add user-leds device tree data to am335x-bone
ARM: dts: AM33XX: Add pinmux configuration for user-leds to BONE
ARM: dts: AM33XX: Add volume-keys device tree data to am335x-evm
ARM: dts: AM33XX: Add pinmux configuration for volume-keys to EVM
ARM: dts: AM33XX: Add matrix keypad device tree data to am335x-evm
ARM: dts: AM33XX: Add pinmux configuration for matrix keypad to EVM
ARM: dts: omap5-evm: LPDDR2 memory device details for EVM
ARM: dts: omap5: EMIF device tree data for OMAP5 boards
ARM: dts: omap5-evm: Fix size of memory defined for EVM
ARM: OMAP2+: Add device-tree support for 32kHz counter
ARM: OMAP: Add DT support for timer driver
...
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
32 files changed, 1675 insertions, 91 deletions
diff --git a/Documentation/devicetree/bindings/arm/omap/counter.txt b/Documentation/devicetree/bindings/arm/omap/counter.txt new file mode 100644 index 000000000000..5bd8aa091315 --- /dev/null +++ b/Documentation/devicetree/bindings/arm/omap/counter.txt | |||
@@ -0,0 +1,15 @@ | |||
1 | OMAP Counter-32K bindings | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: Must be "ti,omap-counter32k" for OMAP controllers | ||
5 | - reg: Contains timer register address range (base address and length) | ||
6 | - ti,hwmods: Name of the hwmod associated to the counter, which is typically | ||
7 | "counter_32k" | ||
8 | |||
9 | Example: | ||
10 | |||
11 | counter32k: counter@4a304000 { | ||
12 | compatible = "ti,omap-counter32k"; | ||
13 | reg = <0x4a304000 0x20>; | ||
14 | ti,hwmods = "counter_32k"; | ||
15 | }; | ||
diff --git a/Documentation/devicetree/bindings/arm/omap/timer.txt b/Documentation/devicetree/bindings/arm/omap/timer.txt new file mode 100644 index 000000000000..8732d4d41f8b --- /dev/null +++ b/Documentation/devicetree/bindings/arm/omap/timer.txt | |||
@@ -0,0 +1,31 @@ | |||
1 | OMAP Timer bindings | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: Must be "ti,omap2-timer" for OMAP2+ controllers. | ||
5 | - reg: Contains timer register address range (base address and | ||
6 | length). | ||
7 | - interrupts: Contains the interrupt information for the timer. The | ||
8 | format is being dependent on which interrupt controller | ||
9 | the OMAP device uses. | ||
10 | - ti,hwmods: Name of the hwmod associated to the timer, "timer<X>", | ||
11 | where <X> is the instance number of the timer from the | ||
12 | HW spec. | ||
13 | |||
14 | Optional properties: | ||
15 | - ti,timer-alwon: Indicates the timer is in an alway-on power domain. | ||
16 | - ti,timer-dsp: Indicates the timer can interrupt the on-chip DSP in | ||
17 | addition to the ARM CPU. | ||
18 | - ti,timer-pwm: Indicates the timer can generate a PWM output. | ||
19 | - ti,timer-secure: Indicates the timer is reserved on a secure OMAP device | ||
20 | and therefore cannot be used by the kernel. | ||
21 | |||
22 | Example: | ||
23 | |||
24 | timer12: timer@48304000 { | ||
25 | compatible = "ti,omap2-timer"; | ||
26 | reg = <0x48304000 0x400>; | ||
27 | interrupts = <95>; | ||
28 | ti,hwmods = "timer12" | ||
29 | ti,timer-alwon; | ||
30 | ti,timer-secure; | ||
31 | }; | ||
diff --git a/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt b/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt index d2fe064a828b..63dd8051521c 100644 --- a/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt +++ b/Documentation/devicetree/bindings/bus/omap-ocp2scp.txt | |||
@@ -2,9 +2,27 @@ | |||
2 | 2 | ||
3 | properties: | 3 | properties: |
4 | - compatible : Should be "ti,omap-ocp2scp" | 4 | - compatible : Should be "ti,omap-ocp2scp" |
5 | - reg : Address and length of the register set for the device | ||
5 | - #address-cells, #size-cells : Must be present if the device has sub-nodes | 6 | - #address-cells, #size-cells : Must be present if the device has sub-nodes |
6 | - ranges : the child address space are mapped 1:1 onto the parent address space | 7 | - ranges : the child address space are mapped 1:1 onto the parent address space |
7 | - ti,hwmods : must be "ocp2scp_usb_phy" | 8 | - ti,hwmods : must be "ocp2scp_usb_phy" |
8 | 9 | ||
9 | Sub-nodes: | 10 | Sub-nodes: |
10 | All the devices connected to ocp2scp are described using sub-node to ocp2scp | 11 | All the devices connected to ocp2scp are described using sub-node to ocp2scp |
12 | |||
13 | ocp2scp@4a0ad000 { | ||
14 | compatible = "ti,omap-ocp2scp"; | ||
15 | reg = <0x4a0ad000 0x1f>; | ||
16 | #address-cells = <1>; | ||
17 | #size-cells = <1>; | ||
18 | ranges; | ||
19 | ti,hwmods = "ocp2scp_usb_phy"; | ||
20 | |||
21 | subnode1 { | ||
22 | ... | ||
23 | }; | ||
24 | |||
25 | subnode2 { | ||
26 | ... | ||
27 | }; | ||
28 | }; | ||
diff --git a/Documentation/devicetree/bindings/i2c/trivial-devices.txt b/Documentation/devicetree/bindings/i2c/trivial-devices.txt index 2f5322b119eb..446859fcdca4 100644 --- a/Documentation/devicetree/bindings/i2c/trivial-devices.txt +++ b/Documentation/devicetree/bindings/i2c/trivial-devices.txt | |||
@@ -55,5 +55,7 @@ st-micro,24c256 i2c serial eeprom (24cxx) | |||
55 | stm,m41t00 Serial Access TIMEKEEPER | 55 | stm,m41t00 Serial Access TIMEKEEPER |
56 | stm,m41t62 Serial real-time clock (RTC) with alarm | 56 | stm,m41t62 Serial real-time clock (RTC) with alarm |
57 | stm,m41t80 M41T80 - SERIAL ACCESS RTC WITH ALARMS | 57 | stm,m41t80 M41T80 - SERIAL ACCESS RTC WITH ALARMS |
58 | taos,tsl2550 Ambient Light Sensor with SMBUS/Two Wire Serial Interface | ||
58 | ti,tsc2003 I2C Touch-Screen Controller | 59 | ti,tsc2003 I2C Touch-Screen Controller |
59 | ti,tmp102 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface | 60 | ti,tmp102 Low Power Digital Temperature Sensor with SMBUS/Two Wire Serial Interface |
61 | ti,tmp275 Digital Temperature Sensor | ||
diff --git a/Documentation/devicetree/bindings/usb/am33xx-usb.txt b/Documentation/devicetree/bindings/usb/am33xx-usb.txt index ca8fa56e9f03..707c1a2dae06 100644 --- a/Documentation/devicetree/bindings/usb/am33xx-usb.txt +++ b/Documentation/devicetree/bindings/usb/am33xx-usb.txt | |||
@@ -1,5 +1,7 @@ | |||
1 | AM33XX MUSB GLUE | 1 | AM33XX MUSB GLUE |
2 | - compatible : Should be "ti,musb-am33xx" | 2 | - compatible : Should be "ti,musb-am33xx" |
3 | - reg : offset and length of register sets, first usbss, then for musb instances | ||
4 | - interrupts : usbss, musb instance interrupts in order | ||
3 | - ti,hwmods : must be "usb_otg_hs" | 5 | - ti,hwmods : must be "usb_otg_hs" |
4 | - multipoint : Should be "1" indicating the musb controller supports | 6 | - multipoint : Should be "1" indicating the musb controller supports |
5 | multipoint. This is a MUSB configuration-specific setting. | 7 | multipoint. This is a MUSB configuration-specific setting. |
@@ -12,3 +14,22 @@ AM33XX MUSB GLUE | |||
12 | represents PERIPHERAL. | 14 | represents PERIPHERAL. |
13 | - power : Should be "250". This signifies the controller can supply upto | 15 | - power : Should be "250". This signifies the controller can supply upto |
14 | 500mA when operating in host mode. | 16 | 500mA when operating in host mode. |
17 | |||
18 | Example: | ||
19 | |||
20 | usb@47400000 { | ||
21 | compatible = "ti,musb-am33xx"; | ||
22 | reg = <0x47400000 0x1000 /* usbss */ | ||
23 | 0x47401000 0x800 /* musb instance 0 */ | ||
24 | 0x47401800 0x800>; /* musb instance 1 */ | ||
25 | interrupts = <17 /* usbss */ | ||
26 | 18 /* musb instance 0 */ | ||
27 | 19>; /* musb instance 1 */ | ||
28 | multipoint = <1>; | ||
29 | num-eps = <16>; | ||
30 | ram-bits = <12>; | ||
31 | port0-mode = <3>; | ||
32 | port1-mode = <3>; | ||
33 | power = <250>; | ||
34 | ti,hwmods = "usb_otg_hs"; | ||
35 | }; | ||
diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index f37cf9fa5fa0..2458b69e2be6 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile | |||
@@ -63,15 +63,17 @@ dtb-$(CONFIG_ARCH_MXS) += imx23-evk.dtb \ | |||
63 | imx28-m28evk.dtb \ | 63 | imx28-m28evk.dtb \ |
64 | imx28-tx28.dtb | 64 | imx28-tx28.dtb |
65 | dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ | 65 | dtb-$(CONFIG_ARCH_OMAP2PLUS) += omap2420-h4.dtb \ |
66 | omap3-beagle.dtb \ | ||
66 | omap3-beagle-xm.dtb \ | 67 | omap3-beagle-xm.dtb \ |
67 | omap3-evm.dtb \ | 68 | omap3-evm.dtb \ |
68 | omap3-tobi.dtb \ | 69 | omap3-tobi.dtb \ |
69 | omap4-panda.dtb \ | 70 | omap4-panda.dtb \ |
70 | omap4-pandaES.dtb \ | 71 | omap4-panda-es.dtb \ |
71 | omap4-var_som.dtb \ | 72 | omap4-var-som.dtb \ |
72 | omap4-sdp.dtb \ | 73 | omap4-sdp.dtb \ |
73 | omap5-evm.dtb \ | 74 | omap5-evm.dtb \ |
74 | am335x-evm.dtb \ | 75 | am335x-evm.dtb \ |
76 | am335x-evmsk.dtb \ | ||
75 | am335x-bone.dtb | 77 | am335x-bone.dtb |
76 | dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb | 78 | dtb-$(CONFIG_ARCH_PRIMA2) += prima2-evb.dtb |
77 | dtb-$(CONFIG_ARCH_U8500) += snowball.dtb | 79 | dtb-$(CONFIG_ARCH_U8500) += snowball.dtb |
diff --git a/arch/arm/boot/dts/am335x-bone.dts b/arch/arm/boot/dts/am335x-bone.dts index c634f87e230e..2c338889df1b 100644 --- a/arch/arm/boot/dts/am335x-bone.dts +++ b/arch/arm/boot/dts/am335x-bone.dts | |||
@@ -13,11 +13,31 @@ | |||
13 | model = "TI AM335x BeagleBone"; | 13 | model = "TI AM335x BeagleBone"; |
14 | compatible = "ti,am335x-bone", "ti,am33xx"; | 14 | compatible = "ti,am335x-bone", "ti,am33xx"; |
15 | 15 | ||
16 | cpus { | ||
17 | cpu@0 { | ||
18 | cpu0-supply = <&dcdc2_reg>; | ||
19 | }; | ||
20 | }; | ||
21 | |||
16 | memory { | 22 | memory { |
17 | device_type = "memory"; | 23 | device_type = "memory"; |
18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | 24 | reg = <0x80000000 0x10000000>; /* 256 MB */ |
19 | }; | 25 | }; |
20 | 26 | ||
27 | am33xx_pinmux: pinmux@44e10800 { | ||
28 | pinctrl-names = "default"; | ||
29 | pinctrl-0 = <&user_leds_s0>; | ||
30 | |||
31 | user_leds_s0: user_leds_s0 { | ||
32 | pinctrl-single,pins = < | ||
33 | 0x54 0x7 /* gpmc_a5.gpio1_21, OUTPUT | MODE7 */ | ||
34 | 0x58 0x17 /* gpmc_a6.gpio1_22, OUTPUT_PULLUP | MODE7 */ | ||
35 | 0x5c 0x7 /* gpmc_a7.gpio1_23, OUTPUT | MODE7 */ | ||
36 | 0x60 0x17 /* gpmc_a8.gpio1_24, OUTPUT_PULLUP | MODE7 */ | ||
37 | >; | ||
38 | }; | ||
39 | }; | ||
40 | |||
21 | ocp { | 41 | ocp { |
22 | uart1: serial@44e09000 { | 42 | uart1: serial@44e09000 { |
23 | status = "okay"; | 43 | status = "okay"; |
@@ -33,6 +53,36 @@ | |||
33 | 53 | ||
34 | }; | 54 | }; |
35 | }; | 55 | }; |
56 | |||
57 | leds { | ||
58 | compatible = "gpio-leds"; | ||
59 | |||
60 | led@2 { | ||
61 | label = "beaglebone:green:heartbeat"; | ||
62 | gpios = <&gpio2 21 0>; | ||
63 | linux,default-trigger = "heartbeat"; | ||
64 | default-state = "off"; | ||
65 | }; | ||
66 | |||
67 | led@3 { | ||
68 | label = "beaglebone:green:mmc0"; | ||
69 | gpios = <&gpio2 22 0>; | ||
70 | linux,default-trigger = "mmc0"; | ||
71 | default-state = "off"; | ||
72 | }; | ||
73 | |||
74 | led@4 { | ||
75 | label = "beaglebone:green:usr2"; | ||
76 | gpios = <&gpio2 23 0>; | ||
77 | default-state = "off"; | ||
78 | }; | ||
79 | |||
80 | led@5 { | ||
81 | label = "beaglebone:green:usr3"; | ||
82 | gpios = <&gpio2 24 0>; | ||
83 | default-state = "off"; | ||
84 | }; | ||
85 | }; | ||
36 | }; | 86 | }; |
37 | 87 | ||
38 | /include/ "tps65217.dtsi" | 88 | /include/ "tps65217.dtsi" |
diff --git a/arch/arm/boot/dts/am335x-evm.dts b/arch/arm/boot/dts/am335x-evm.dts index 185d6325a458..9f65f17ebdf8 100644 --- a/arch/arm/boot/dts/am335x-evm.dts +++ b/arch/arm/boot/dts/am335x-evm.dts | |||
@@ -13,11 +13,39 @@ | |||
13 | model = "TI AM335x EVM"; | 13 | model = "TI AM335x EVM"; |
14 | compatible = "ti,am335x-evm", "ti,am33xx"; | 14 | compatible = "ti,am335x-evm", "ti,am33xx"; |
15 | 15 | ||
16 | cpus { | ||
17 | cpu@0 { | ||
18 | cpu0-supply = <&vdd1_reg>; | ||
19 | }; | ||
20 | }; | ||
21 | |||
16 | memory { | 22 | memory { |
17 | device_type = "memory"; | 23 | device_type = "memory"; |
18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | 24 | reg = <0x80000000 0x10000000>; /* 256 MB */ |
19 | }; | 25 | }; |
20 | 26 | ||
27 | am33xx_pinmux: pinmux@44e10800 { | ||
28 | pinctrl-names = "default"; | ||
29 | pinctrl-0 = <&matrix_keypad_s0 &volume_keys_s0>; | ||
30 | |||
31 | matrix_keypad_s0: matrix_keypad_s0 { | ||
32 | pinctrl-single,pins = < | ||
33 | 0x54 0x7 /* gpmc_a5.gpio1_21, OUTPUT | MODE7 */ | ||
34 | 0x58 0x7 /* gpmc_a6.gpio1_22, OUTPUT | MODE7 */ | ||
35 | 0x64 0x27 /* gpmc_a9.gpio1_25, INPUT | MODE7 */ | ||
36 | 0x68 0x27 /* gpmc_a10.gpio1_26, INPUT | MODE7 */ | ||
37 | 0x6c 0x27 /* gpmc_a11.gpio1_27, INPUT | MODE7 */ | ||
38 | >; | ||
39 | }; | ||
40 | |||
41 | volume_keys_s0: volume_keys_s0 { | ||
42 | pinctrl-single,pins = < | ||
43 | 0x150 0x27 /* spi0_sclk.gpio0_2, INPUT | MODE7 */ | ||
44 | 0x154 0x27 /* spi0_d0.gpio0_3, INPUT | MODE7 */ | ||
45 | >; | ||
46 | }; | ||
47 | }; | ||
48 | |||
21 | ocp { | 49 | ocp { |
22 | uart1: serial@44e09000 { | 50 | uart1: serial@44e09000 { |
23 | status = "okay"; | 51 | status = "okay"; |
@@ -31,6 +59,49 @@ | |||
31 | reg = <0x2d>; | 59 | reg = <0x2d>; |
32 | }; | 60 | }; |
33 | }; | 61 | }; |
62 | |||
63 | i2c2: i2c@4802a000 { | ||
64 | status = "okay"; | ||
65 | clock-frequency = <100000>; | ||
66 | |||
67 | lis331dlh: lis331dlh@18 { | ||
68 | compatible = "st,lis331dlh", "st,lis3lv02d"; | ||
69 | reg = <0x18>; | ||
70 | Vdd-supply = <&lis3_reg>; | ||
71 | Vdd_IO-supply = <&lis3_reg>; | ||
72 | |||
73 | st,click-single-x; | ||
74 | st,click-single-y; | ||
75 | st,click-single-z; | ||
76 | st,click-thresh-x = <10>; | ||
77 | st,click-thresh-y = <10>; | ||
78 | st,click-thresh-z = <10>; | ||
79 | st,irq1-click; | ||
80 | st,irq2-click; | ||
81 | st,wakeup-x-lo; | ||
82 | st,wakeup-x-hi; | ||
83 | st,wakeup-y-lo; | ||
84 | st,wakeup-y-hi; | ||
85 | st,wakeup-z-lo; | ||
86 | st,wakeup-z-hi; | ||
87 | st,min-limit-x = <120>; | ||
88 | st,min-limit-y = <120>; | ||
89 | st,min-limit-z = <140>; | ||
90 | st,max-limit-x = <550>; | ||
91 | st,max-limit-y = <550>; | ||
92 | st,max-limit-z = <750>; | ||
93 | }; | ||
94 | |||
95 | tsl2550: tsl2550@39 { | ||
96 | compatible = "taos,tsl2550"; | ||
97 | reg = <0x39>; | ||
98 | }; | ||
99 | |||
100 | tmp275: tmp275@48 { | ||
101 | compatible = "ti,tmp275"; | ||
102 | reg = <0x48>; | ||
103 | }; | ||
104 | }; | ||
34 | }; | 105 | }; |
35 | 106 | ||
36 | vbat: fixedregulator@0 { | 107 | vbat: fixedregulator@0 { |
@@ -40,6 +111,53 @@ | |||
40 | regulator-max-microvolt = <5000000>; | 111 | regulator-max-microvolt = <5000000>; |
41 | regulator-boot-on; | 112 | regulator-boot-on; |
42 | }; | 113 | }; |
114 | |||
115 | lis3_reg: fixedregulator@1 { | ||
116 | compatible = "regulator-fixed"; | ||
117 | regulator-name = "lis3_reg"; | ||
118 | regulator-boot-on; | ||
119 | }; | ||
120 | |||
121 | matrix_keypad: matrix_keypad@0 { | ||
122 | compatible = "gpio-matrix-keypad"; | ||
123 | debounce-delay-ms = <5>; | ||
124 | col-scan-delay-us = <2>; | ||
125 | |||
126 | row-gpios = <&gpio2 25 0 /* Bank1, pin25 */ | ||
127 | &gpio2 26 0 /* Bank1, pin26 */ | ||
128 | &gpio2 27 0>; /* Bank1, pin27 */ | ||
129 | |||
130 | col-gpios = <&gpio2 21 0 /* Bank1, pin21 */ | ||
131 | &gpio2 22 0>; /* Bank1, pin22 */ | ||
132 | |||
133 | linux,keymap = <0x0000008b /* MENU */ | ||
134 | 0x0100009e /* BACK */ | ||
135 | 0x02000069 /* LEFT */ | ||
136 | 0x0001006a /* RIGHT */ | ||
137 | 0x0101001c /* ENTER */ | ||
138 | 0x0201006c>; /* DOWN */ | ||
139 | }; | ||
140 | |||
141 | gpio_keys: volume_keys@0 { | ||
142 | compatible = "gpio-keys"; | ||
143 | #address-cells = <1>; | ||
144 | #size-cells = <0>; | ||
145 | autorepeat; | ||
146 | |||
147 | switch@9 { | ||
148 | label = "volume-up"; | ||
149 | linux,code = <115>; | ||
150 | gpios = <&gpio1 2 1>; | ||
151 | gpio-key,wakeup; | ||
152 | }; | ||
153 | |||
154 | switch@10 { | ||
155 | label = "volume-down"; | ||
156 | linux,code = <114>; | ||
157 | gpios = <&gpio1 3 1>; | ||
158 | gpio-key,wakeup; | ||
159 | }; | ||
160 | }; | ||
43 | }; | 161 | }; |
44 | 162 | ||
45 | /include/ "tps65910.dtsi" | 163 | /include/ "tps65910.dtsi" |
diff --git a/arch/arm/boot/dts/am335x-evmsk.dts b/arch/arm/boot/dts/am335x-evmsk.dts new file mode 100644 index 000000000000..f5a6162a4ff2 --- /dev/null +++ b/arch/arm/boot/dts/am335x-evmsk.dts | |||
@@ -0,0 +1,250 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * AM335x Starter Kit | ||
11 | * http://www.ti.com/tool/tmdssk3358 | ||
12 | */ | ||
13 | |||
14 | /dts-v1/; | ||
15 | |||
16 | /include/ "am33xx.dtsi" | ||
17 | |||
18 | / { | ||
19 | model = "TI AM335x EVM-SK"; | ||
20 | compatible = "ti,am335x-evmsk", "ti,am33xx"; | ||
21 | |||
22 | cpus { | ||
23 | cpu@0 { | ||
24 | cpu0-supply = <&vdd1_reg>; | ||
25 | }; | ||
26 | }; | ||
27 | |||
28 | memory { | ||
29 | device_type = "memory"; | ||
30 | reg = <0x80000000 0x10000000>; /* 256 MB */ | ||
31 | }; | ||
32 | |||
33 | am33xx_pinmux: pinmux@44e10800 { | ||
34 | pinctrl-names = "default"; | ||
35 | pinctrl-0 = <&user_leds_s0 &gpio_keys_s0>; | ||
36 | |||
37 | user_leds_s0: user_leds_s0 { | ||
38 | pinctrl-single,pins = < | ||
39 | 0x10 0x7 /* gpmc_ad4.gpio1_4, OUTPUT | MODE7 */ | ||
40 | 0x14 0x7 /* gpmc_ad5.gpio1_5, OUTPUT | MODE7 */ | ||
41 | 0x18 0x7 /* gpmc_ad6.gpio1_6, OUTPUT | MODE7 */ | ||
42 | 0x1c 0x7 /* gpmc_ad7.gpio1_7, OUTPUT | MODE7 */ | ||
43 | >; | ||
44 | }; | ||
45 | |||
46 | gpio_keys_s0: gpio_keys_s0 { | ||
47 | pinctrl-single,pins = < | ||
48 | 0x94 0x27 /* gpmc_oen_ren.gpio2_3, INPUT | MODE7 */ | ||
49 | 0x90 0x27 /* gpmc_advn_ale.gpio2_2, INPUT | MODE7 */ | ||
50 | 0x70 0x27 /* gpmc_wait0.gpio0_30, INPUT | MODE7 */ | ||
51 | 0x9c 0x27 /* gpmc_ben0_cle.gpio2_5, INPUT | MODE7 */ | ||
52 | >; | ||
53 | }; | ||
54 | }; | ||
55 | |||
56 | ocp { | ||
57 | uart1: serial@44e09000 { | ||
58 | status = "okay"; | ||
59 | }; | ||
60 | |||
61 | i2c1: i2c@44e0b000 { | ||
62 | status = "okay"; | ||
63 | clock-frequency = <400000>; | ||
64 | |||
65 | tps: tps@2d { | ||
66 | reg = <0x2d>; | ||
67 | }; | ||
68 | |||
69 | lis331dlh: lis331dlh@18 { | ||
70 | compatible = "st,lis331dlh", "st,lis3lv02d"; | ||
71 | reg = <0x18>; | ||
72 | Vdd-supply = <&lis3_reg>; | ||
73 | Vdd_IO-supply = <&lis3_reg>; | ||
74 | |||
75 | st,click-single-x; | ||
76 | st,click-single-y; | ||
77 | st,click-single-z; | ||
78 | st,click-thresh-x = <10>; | ||
79 | st,click-thresh-y = <10>; | ||
80 | st,click-thresh-z = <10>; | ||
81 | st,irq1-click; | ||
82 | st,irq2-click; | ||
83 | st,wakeup-x-lo; | ||
84 | st,wakeup-x-hi; | ||
85 | st,wakeup-y-lo; | ||
86 | st,wakeup-y-hi; | ||
87 | st,wakeup-z-lo; | ||
88 | st,wakeup-z-hi; | ||
89 | st,min-limit-x = <120>; | ||
90 | st,min-limit-y = <120>; | ||
91 | st,min-limit-z = <140>; | ||
92 | st,max-limit-x = <550>; | ||
93 | st,max-limit-y = <550>; | ||
94 | st,max-limit-z = <750>; | ||
95 | }; | ||
96 | }; | ||
97 | }; | ||
98 | |||
99 | vbat: fixedregulator@0 { | ||
100 | compatible = "regulator-fixed"; | ||
101 | regulator-name = "vbat"; | ||
102 | regulator-min-microvolt = <5000000>; | ||
103 | regulator-max-microvolt = <5000000>; | ||
104 | regulator-boot-on; | ||
105 | }; | ||
106 | |||
107 | lis3_reg: fixedregulator@1 { | ||
108 | compatible = "regulator-fixed"; | ||
109 | regulator-name = "lis3_reg"; | ||
110 | regulator-boot-on; | ||
111 | }; | ||
112 | |||
113 | leds { | ||
114 | compatible = "gpio-leds"; | ||
115 | |||
116 | led@1 { | ||
117 | label = "evmsk:green:usr0"; | ||
118 | gpios = <&gpio2 4 0>; | ||
119 | default-state = "off"; | ||
120 | }; | ||
121 | |||
122 | led@2 { | ||
123 | label = "evmsk:green:usr1"; | ||
124 | gpios = <&gpio2 5 0>; | ||
125 | default-state = "off"; | ||
126 | }; | ||
127 | |||
128 | led@3 { | ||
129 | label = "evmsk:green:mmc0"; | ||
130 | gpios = <&gpio2 6 0>; | ||
131 | linux,default-trigger = "mmc0"; | ||
132 | default-state = "off"; | ||
133 | }; | ||
134 | |||
135 | led@4 { | ||
136 | label = "evmsk:green:heartbeat"; | ||
137 | gpios = <&gpio2 7 0>; | ||
138 | linux,default-trigger = "heartbeat"; | ||
139 | default-state = "off"; | ||
140 | }; | ||
141 | }; | ||
142 | |||
143 | gpio_buttons: gpio_buttons@0 { | ||
144 | compatible = "gpio-keys"; | ||
145 | #address-cells = <1>; | ||
146 | #size-cells = <0>; | ||
147 | |||
148 | switch@1 { | ||
149 | label = "button0"; | ||
150 | linux,code = <0x100>; | ||
151 | gpios = <&gpio3 3 0>; | ||
152 | }; | ||
153 | |||
154 | switch@2 { | ||
155 | label = "button1"; | ||
156 | linux,code = <0x101>; | ||
157 | gpios = <&gpio3 2 0>; | ||
158 | }; | ||
159 | |||
160 | switch@3 { | ||
161 | label = "button2"; | ||
162 | linux,code = <0x102>; | ||
163 | gpios = <&gpio1 30 0>; | ||
164 | gpio-key,wakeup; | ||
165 | }; | ||
166 | |||
167 | switch@4 { | ||
168 | label = "button3"; | ||
169 | linux,code = <0x103>; | ||
170 | gpios = <&gpio3 5 0>; | ||
171 | }; | ||
172 | }; | ||
173 | }; | ||
174 | |||
175 | /include/ "tps65910.dtsi" | ||
176 | |||
177 | &tps { | ||
178 | vcc1-supply = <&vbat>; | ||
179 | vcc2-supply = <&vbat>; | ||
180 | vcc3-supply = <&vbat>; | ||
181 | vcc4-supply = <&vbat>; | ||
182 | vcc5-supply = <&vbat>; | ||
183 | vcc6-supply = <&vbat>; | ||
184 | vcc7-supply = <&vbat>; | ||
185 | vccio-supply = <&vbat>; | ||
186 | |||
187 | regulators { | ||
188 | vrtc_reg: regulator@0 { | ||
189 | regulator-always-on; | ||
190 | }; | ||
191 | |||
192 | vio_reg: regulator@1 { | ||
193 | regulator-always-on; | ||
194 | }; | ||
195 | |||
196 | vdd1_reg: regulator@2 { | ||
197 | /* VDD_MPU voltage limits 0.95V - 1.26V with +/-4% tolerance */ | ||
198 | regulator-name = "vdd_mpu"; | ||
199 | regulator-min-microvolt = <912500>; | ||
200 | regulator-max-microvolt = <1312500>; | ||
201 | regulator-boot-on; | ||
202 | regulator-always-on; | ||
203 | }; | ||
204 | |||
205 | vdd2_reg: regulator@3 { | ||
206 | /* VDD_CORE voltage limits 0.95V - 1.1V with +/-4% tolerance */ | ||
207 | regulator-name = "vdd_core"; | ||
208 | regulator-min-microvolt = <912500>; | ||
209 | regulator-max-microvolt = <1150000>; | ||
210 | regulator-boot-on; | ||
211 | regulator-always-on; | ||
212 | }; | ||
213 | |||
214 | vdd3_reg: regulator@4 { | ||
215 | regulator-always-on; | ||
216 | }; | ||
217 | |||
218 | vdig1_reg: regulator@5 { | ||
219 | regulator-always-on; | ||
220 | }; | ||
221 | |||
222 | vdig2_reg: regulator@6 { | ||
223 | regulator-always-on; | ||
224 | }; | ||
225 | |||
226 | vpll_reg: regulator@7 { | ||
227 | regulator-always-on; | ||
228 | }; | ||
229 | |||
230 | vdac_reg: regulator@8 { | ||
231 | regulator-always-on; | ||
232 | }; | ||
233 | |||
234 | vaux1_reg: regulator@9 { | ||
235 | regulator-always-on; | ||
236 | }; | ||
237 | |||
238 | vaux2_reg: regulator@10 { | ||
239 | regulator-always-on; | ||
240 | }; | ||
241 | |||
242 | vaux33_reg: regulator@11 { | ||
243 | regulator-always-on; | ||
244 | }; | ||
245 | |||
246 | vmmc_reg: regulator@12 { | ||
247 | regulator-always-on; | ||
248 | }; | ||
249 | }; | ||
250 | }; | ||
diff --git a/arch/arm/boot/dts/am33xx.dtsi b/arch/arm/boot/dts/am33xx.dtsi index bb31bff01998..20a3f29a6bfe 100644 --- a/arch/arm/boot/dts/am33xx.dtsi +++ b/arch/arm/boot/dts/am33xx.dtsi | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | / { | 13 | / { |
14 | compatible = "ti,am33xx"; | 14 | compatible = "ti,am33xx"; |
15 | interrupt-parent = <&intc>; | ||
15 | 16 | ||
16 | aliases { | 17 | aliases { |
17 | serial0 = &uart1; | 18 | serial0 = &uart1; |
@@ -25,6 +26,21 @@ | |||
25 | cpus { | 26 | cpus { |
26 | cpu@0 { | 27 | cpu@0 { |
27 | compatible = "arm,cortex-a8"; | 28 | compatible = "arm,cortex-a8"; |
29 | |||
30 | /* | ||
31 | * To consider voltage drop between PMIC and SoC, | ||
32 | * tolerance value is reduced to 2% from 4% and | ||
33 | * voltage value is increased as a precaution. | ||
34 | */ | ||
35 | operating-points = < | ||
36 | /* kHz uV */ | ||
37 | 720000 1285000 | ||
38 | 600000 1225000 | ||
39 | 500000 1125000 | ||
40 | 275000 1125000 | ||
41 | >; | ||
42 | voltage-tolerance = <2>; /* 2 percentage */ | ||
43 | clock-latency = <300000>; /* From omap-cpufreq driver */ | ||
28 | }; | 44 | }; |
29 | }; | 45 | }; |
30 | 46 | ||
@@ -40,6 +56,15 @@ | |||
40 | }; | 56 | }; |
41 | }; | 57 | }; |
42 | 58 | ||
59 | am33xx_pinmux: pinmux@44e10800 { | ||
60 | compatible = "pinctrl-single"; | ||
61 | reg = <0x44e10800 0x0238>; | ||
62 | #address-cells = <1>; | ||
63 | #size-cells = <0>; | ||
64 | pinctrl-single,register-width = <32>; | ||
65 | pinctrl-single,function-mask = <0x7f>; | ||
66 | }; | ||
67 | |||
43 | /* | 68 | /* |
44 | * XXX: Use a flat representation of the AM33XX interconnect. | 69 | * XXX: Use a flat representation of the AM33XX interconnect. |
45 | * The real AM33XX interconnect network is quite complex.Since | 70 | * The real AM33XX interconnect network is quite complex.Since |
@@ -70,7 +95,6 @@ | |||
70 | interrupt-controller; | 95 | interrupt-controller; |
71 | #interrupt-cells = <1>; | 96 | #interrupt-cells = <1>; |
72 | reg = <0x44e07000 0x1000>; | 97 | reg = <0x44e07000 0x1000>; |
73 | interrupt-parent = <&intc>; | ||
74 | interrupts = <96>; | 98 | interrupts = <96>; |
75 | }; | 99 | }; |
76 | 100 | ||
@@ -82,7 +106,6 @@ | |||
82 | interrupt-controller; | 106 | interrupt-controller; |
83 | #interrupt-cells = <1>; | 107 | #interrupt-cells = <1>; |
84 | reg = <0x4804c000 0x1000>; | 108 | reg = <0x4804c000 0x1000>; |
85 | interrupt-parent = <&intc>; | ||
86 | interrupts = <98>; | 109 | interrupts = <98>; |
87 | }; | 110 | }; |
88 | 111 | ||
@@ -94,7 +117,6 @@ | |||
94 | interrupt-controller; | 117 | interrupt-controller; |
95 | #interrupt-cells = <1>; | 118 | #interrupt-cells = <1>; |
96 | reg = <0x481ac000 0x1000>; | 119 | reg = <0x481ac000 0x1000>; |
97 | interrupt-parent = <&intc>; | ||
98 | interrupts = <32>; | 120 | interrupts = <32>; |
99 | }; | 121 | }; |
100 | 122 | ||
@@ -106,7 +128,6 @@ | |||
106 | interrupt-controller; | 128 | interrupt-controller; |
107 | #interrupt-cells = <1>; | 129 | #interrupt-cells = <1>; |
108 | reg = <0x481ae000 0x1000>; | 130 | reg = <0x481ae000 0x1000>; |
109 | interrupt-parent = <&intc>; | ||
110 | interrupts = <62>; | 131 | interrupts = <62>; |
111 | }; | 132 | }; |
112 | 133 | ||
@@ -115,7 +136,6 @@ | |||
115 | ti,hwmods = "uart1"; | 136 | ti,hwmods = "uart1"; |
116 | clock-frequency = <48000000>; | 137 | clock-frequency = <48000000>; |
117 | reg = <0x44e09000 0x2000>; | 138 | reg = <0x44e09000 0x2000>; |
118 | interrupt-parent = <&intc>; | ||
119 | interrupts = <72>; | 139 | interrupts = <72>; |
120 | status = "disabled"; | 140 | status = "disabled"; |
121 | }; | 141 | }; |
@@ -125,7 +145,6 @@ | |||
125 | ti,hwmods = "uart2"; | 145 | ti,hwmods = "uart2"; |
126 | clock-frequency = <48000000>; | 146 | clock-frequency = <48000000>; |
127 | reg = <0x48022000 0x2000>; | 147 | reg = <0x48022000 0x2000>; |
128 | interrupt-parent = <&intc>; | ||
129 | interrupts = <73>; | 148 | interrupts = <73>; |
130 | status = "disabled"; | 149 | status = "disabled"; |
131 | }; | 150 | }; |
@@ -135,7 +154,6 @@ | |||
135 | ti,hwmods = "uart3"; | 154 | ti,hwmods = "uart3"; |
136 | clock-frequency = <48000000>; | 155 | clock-frequency = <48000000>; |
137 | reg = <0x48024000 0x2000>; | 156 | reg = <0x48024000 0x2000>; |
138 | interrupt-parent = <&intc>; | ||
139 | interrupts = <74>; | 157 | interrupts = <74>; |
140 | status = "disabled"; | 158 | status = "disabled"; |
141 | }; | 159 | }; |
@@ -145,7 +163,6 @@ | |||
145 | ti,hwmods = "uart4"; | 163 | ti,hwmods = "uart4"; |
146 | clock-frequency = <48000000>; | 164 | clock-frequency = <48000000>; |
147 | reg = <0x481a6000 0x2000>; | 165 | reg = <0x481a6000 0x2000>; |
148 | interrupt-parent = <&intc>; | ||
149 | interrupts = <44>; | 166 | interrupts = <44>; |
150 | status = "disabled"; | 167 | status = "disabled"; |
151 | }; | 168 | }; |
@@ -155,7 +172,6 @@ | |||
155 | ti,hwmods = "uart5"; | 172 | ti,hwmods = "uart5"; |
156 | clock-frequency = <48000000>; | 173 | clock-frequency = <48000000>; |
157 | reg = <0x481a8000 0x2000>; | 174 | reg = <0x481a8000 0x2000>; |
158 | interrupt-parent = <&intc>; | ||
159 | interrupts = <45>; | 175 | interrupts = <45>; |
160 | status = "disabled"; | 176 | status = "disabled"; |
161 | }; | 177 | }; |
@@ -165,7 +181,6 @@ | |||
165 | ti,hwmods = "uart6"; | 181 | ti,hwmods = "uart6"; |
166 | clock-frequency = <48000000>; | 182 | clock-frequency = <48000000>; |
167 | reg = <0x481aa000 0x2000>; | 183 | reg = <0x481aa000 0x2000>; |
168 | interrupt-parent = <&intc>; | ||
169 | interrupts = <46>; | 184 | interrupts = <46>; |
170 | status = "disabled"; | 185 | status = "disabled"; |
171 | }; | 186 | }; |
@@ -176,7 +191,6 @@ | |||
176 | #size-cells = <0>; | 191 | #size-cells = <0>; |
177 | ti,hwmods = "i2c1"; | 192 | ti,hwmods = "i2c1"; |
178 | reg = <0x44e0b000 0x1000>; | 193 | reg = <0x44e0b000 0x1000>; |
179 | interrupt-parent = <&intc>; | ||
180 | interrupts = <70>; | 194 | interrupts = <70>; |
181 | status = "disabled"; | 195 | status = "disabled"; |
182 | }; | 196 | }; |
@@ -187,7 +201,6 @@ | |||
187 | #size-cells = <0>; | 201 | #size-cells = <0>; |
188 | ti,hwmods = "i2c2"; | 202 | ti,hwmods = "i2c2"; |
189 | reg = <0x4802a000 0x1000>; | 203 | reg = <0x4802a000 0x1000>; |
190 | interrupt-parent = <&intc>; | ||
191 | interrupts = <71>; | 204 | interrupts = <71>; |
192 | status = "disabled"; | 205 | status = "disabled"; |
193 | }; | 206 | }; |
@@ -198,7 +211,6 @@ | |||
198 | #size-cells = <0>; | 211 | #size-cells = <0>; |
199 | ti,hwmods = "i2c3"; | 212 | ti,hwmods = "i2c3"; |
200 | reg = <0x4819c000 0x1000>; | 213 | reg = <0x4819c000 0x1000>; |
201 | interrupt-parent = <&intc>; | ||
202 | interrupts = <30>; | 214 | interrupts = <30>; |
203 | status = "disabled"; | 215 | status = "disabled"; |
204 | }; | 216 | }; |
@@ -207,8 +219,124 @@ | |||
207 | compatible = "ti,omap3-wdt"; | 219 | compatible = "ti,omap3-wdt"; |
208 | ti,hwmods = "wd_timer2"; | 220 | ti,hwmods = "wd_timer2"; |
209 | reg = <0x44e35000 0x1000>; | 221 | reg = <0x44e35000 0x1000>; |
210 | interrupt-parent = <&intc>; | ||
211 | interrupts = <91>; | 222 | interrupts = <91>; |
212 | }; | 223 | }; |
224 | |||
225 | dcan0: d_can@481cc000 { | ||
226 | compatible = "bosch,d_can"; | ||
227 | ti,hwmods = "d_can0"; | ||
228 | reg = <0x481cc000 0x2000>; | ||
229 | interrupts = <52>; | ||
230 | status = "disabled"; | ||
231 | }; | ||
232 | |||
233 | dcan1: d_can@481d0000 { | ||
234 | compatible = "bosch,d_can"; | ||
235 | ti,hwmods = "d_can1"; | ||
236 | reg = <0x481d0000 0x2000>; | ||
237 | interrupts = <55>; | ||
238 | status = "disabled"; | ||
239 | }; | ||
240 | |||
241 | timer1: timer@44e31000 { | ||
242 | compatible = "ti,omap2-timer"; | ||
243 | reg = <0x44e31000 0x400>; | ||
244 | interrupts = <67>; | ||
245 | ti,hwmods = "timer1"; | ||
246 | ti,timer-alwon; | ||
247 | }; | ||
248 | |||
249 | timer2: timer@48040000 { | ||
250 | compatible = "ti,omap2-timer"; | ||
251 | reg = <0x48040000 0x400>; | ||
252 | interrupts = <68>; | ||
253 | ti,hwmods = "timer2"; | ||
254 | }; | ||
255 | |||
256 | timer3: timer@48042000 { | ||
257 | compatible = "ti,omap2-timer"; | ||
258 | reg = <0x48042000 0x400>; | ||
259 | interrupts = <69>; | ||
260 | ti,hwmods = "timer3"; | ||
261 | }; | ||
262 | |||
263 | timer4: timer@48044000 { | ||
264 | compatible = "ti,omap2-timer"; | ||
265 | reg = <0x48044000 0x400>; | ||
266 | interrupts = <92>; | ||
267 | ti,hwmods = "timer4"; | ||
268 | ti,timer-pwm; | ||
269 | }; | ||
270 | |||
271 | timer5: timer@48046000 { | ||
272 | compatible = "ti,omap2-timer"; | ||
273 | reg = <0x48046000 0x400>; | ||
274 | interrupts = <93>; | ||
275 | ti,hwmods = "timer5"; | ||
276 | ti,timer-pwm; | ||
277 | }; | ||
278 | |||
279 | timer6: timer@48048000 { | ||
280 | compatible = "ti,omap2-timer"; | ||
281 | reg = <0x48048000 0x400>; | ||
282 | interrupts = <94>; | ||
283 | ti,hwmods = "timer6"; | ||
284 | ti,timer-pwm; | ||
285 | }; | ||
286 | |||
287 | timer7: timer@4804a000 { | ||
288 | compatible = "ti,omap2-timer"; | ||
289 | reg = <0x4804a000 0x400>; | ||
290 | interrupts = <95>; | ||
291 | ti,hwmods = "timer7"; | ||
292 | ti,timer-pwm; | ||
293 | }; | ||
294 | |||
295 | rtc@44e3e000 { | ||
296 | compatible = "ti,da830-rtc"; | ||
297 | reg = <0x44e3e000 0x1000>; | ||
298 | interrupts = <75 | ||
299 | 76>; | ||
300 | ti,hwmods = "rtc"; | ||
301 | }; | ||
302 | |||
303 | spi0: spi@48030000 { | ||
304 | compatible = "ti,omap4-mcspi"; | ||
305 | #address-cells = <1>; | ||
306 | #size-cells = <0>; | ||
307 | reg = <0x48030000 0x400>; | ||
308 | interrupt = <65>; | ||
309 | ti,spi-num-cs = <2>; | ||
310 | ti,hwmods = "spi0"; | ||
311 | status = "disabled"; | ||
312 | }; | ||
313 | |||
314 | spi1: spi@481a0000 { | ||
315 | compatible = "ti,omap4-mcspi"; | ||
316 | #address-cells = <1>; | ||
317 | #size-cells = <0>; | ||
318 | reg = <0x481a0000 0x400>; | ||
319 | interrupt = <125>; | ||
320 | ti,spi-num-cs = <2>; | ||
321 | ti,hwmods = "spi1"; | ||
322 | status = "disabled"; | ||
323 | }; | ||
324 | |||
325 | usb@47400000 { | ||
326 | compatible = "ti,musb-am33xx"; | ||
327 | reg = <0x47400000 0x1000 /* usbss */ | ||
328 | 0x47401000 0x800 /* musb instance 0 */ | ||
329 | 0x47401800 0x800>; /* musb instance 1 */ | ||
330 | interrupts = <17 /* usbss */ | ||
331 | 18 /* musb instance 0 */ | ||
332 | 19>; /* musb instance 1 */ | ||
333 | multipoint = <1>; | ||
334 | num-eps = <16>; | ||
335 | ram-bits = <12>; | ||
336 | port0-mode = <3>; | ||
337 | port1-mode = <3>; | ||
338 | power = <250>; | ||
339 | ti,hwmods = "usb_otg_hs"; | ||
340 | }; | ||
213 | }; | 341 | }; |
214 | }; | 342 | }; |
diff --git a/arch/arm/boot/dts/omap2.dtsi b/arch/arm/boot/dts/omap2.dtsi index 581cb081cb0f..761c4b69b25b 100644 --- a/arch/arm/boot/dts/omap2.dtsi +++ b/arch/arm/boot/dts/omap2.dtsi | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | / { | 13 | / { |
14 | compatible = "ti,omap2430", "ti,omap2420", "ti,omap2"; | 14 | compatible = "ti,omap2430", "ti,omap2420", "ti,omap2"; |
15 | interrupt-parent = <&intc>; | ||
15 | 16 | ||
16 | aliases { | 17 | aliases { |
17 | serial0 = &uart1; | 18 | serial0 = &uart1; |
@@ -65,5 +66,90 @@ | |||
65 | ti,hwmods = "uart3"; | 66 | ti,hwmods = "uart3"; |
66 | clock-frequency = <48000000>; | 67 | clock-frequency = <48000000>; |
67 | }; | 68 | }; |
69 | |||
70 | timer2: timer@4802a000 { | ||
71 | compatible = "ti,omap2-timer"; | ||
72 | reg = <0x4802a000 0x400>; | ||
73 | interrupts = <38>; | ||
74 | ti,hwmods = "timer2"; | ||
75 | }; | ||
76 | |||
77 | timer3: timer@48078000 { | ||
78 | compatible = "ti,omap2-timer"; | ||
79 | reg = <0x48078000 0x400>; | ||
80 | interrupts = <39>; | ||
81 | ti,hwmods = "timer3"; | ||
82 | }; | ||
83 | |||
84 | timer4: timer@4807a000 { | ||
85 | compatible = "ti,omap2-timer"; | ||
86 | reg = <0x4807a000 0x400>; | ||
87 | interrupts = <40>; | ||
88 | ti,hwmods = "timer4"; | ||
89 | }; | ||
90 | |||
91 | timer5: timer@4807c000 { | ||
92 | compatible = "ti,omap2-timer"; | ||
93 | reg = <0x4807c000 0x400>; | ||
94 | interrupts = <41>; | ||
95 | ti,hwmods = "timer5"; | ||
96 | ti,timer-dsp; | ||
97 | }; | ||
98 | |||
99 | timer6: timer@4807e000 { | ||
100 | compatible = "ti,omap2-timer"; | ||
101 | reg = <0x4807e000 0x400>; | ||
102 | interrupts = <42>; | ||
103 | ti,hwmods = "timer6"; | ||
104 | ti,timer-dsp; | ||
105 | }; | ||
106 | |||
107 | timer7: timer@48080000 { | ||
108 | compatible = "ti,omap2-timer"; | ||
109 | reg = <0x48080000 0x400>; | ||
110 | interrupts = <43>; | ||
111 | ti,hwmods = "timer7"; | ||
112 | ti,timer-dsp; | ||
113 | }; | ||
114 | |||
115 | timer8: timer@48082000 { | ||
116 | compatible = "ti,omap2-timer"; | ||
117 | reg = <0x48082000 0x400>; | ||
118 | interrupts = <44>; | ||
119 | ti,hwmods = "timer8"; | ||
120 | ti,timer-dsp; | ||
121 | }; | ||
122 | |||
123 | timer9: timer@48084000 { | ||
124 | compatible = "ti,omap2-timer"; | ||
125 | reg = <0x48084000 0x400>; | ||
126 | interrupts = <45>; | ||
127 | ti,hwmods = "timer9"; | ||
128 | ti,timer-pwm; | ||
129 | }; | ||
130 | |||
131 | timer10: timer@48086000 { | ||
132 | compatible = "ti,omap2-timer"; | ||
133 | reg = <0x48086000 0x400>; | ||
134 | interrupts = <46>; | ||
135 | ti,hwmods = "timer10"; | ||
136 | ti,timer-pwm; | ||
137 | }; | ||
138 | |||
139 | timer11: timer@48088000 { | ||
140 | compatible = "ti,omap2-timer"; | ||
141 | reg = <0x48088000 0x400>; | ||
142 | interrupts = <47>; | ||
143 | ti,hwmods = "timer11"; | ||
144 | ti,timer-pwm; | ||
145 | }; | ||
146 | |||
147 | timer12: timer@4808a000 { | ||
148 | compatible = "ti,omap2-timer"; | ||
149 | reg = <0x4808a000 0x400>; | ||
150 | interrupts = <48>; | ||
151 | ti,hwmods = "timer12"; | ||
152 | ti,timer-pwm; | ||
153 | }; | ||
68 | }; | 154 | }; |
69 | }; | 155 | }; |
diff --git a/arch/arm/boot/dts/omap2420.dtsi b/arch/arm/boot/dts/omap2420.dtsi index bfd76b4a0ddc..af6560908905 100644 --- a/arch/arm/boot/dts/omap2420.dtsi +++ b/arch/arm/boot/dts/omap2420.dtsi | |||
@@ -14,6 +14,12 @@ | |||
14 | compatible = "ti,omap2420", "ti,omap2"; | 14 | compatible = "ti,omap2420", "ti,omap2"; |
15 | 15 | ||
16 | ocp { | 16 | ocp { |
17 | counter32k: counter@48004000 { | ||
18 | compatible = "ti,omap-counter32k"; | ||
19 | reg = <0x48004000 0x20>; | ||
20 | ti,hwmods = "counter_32k"; | ||
21 | }; | ||
22 | |||
17 | omap2420_pmx: pinmux@48000030 { | 23 | omap2420_pmx: pinmux@48000030 { |
18 | compatible = "ti,omap2420-padconf", "pinctrl-single"; | 24 | compatible = "ti,omap2420-padconf", "pinctrl-single"; |
19 | reg = <0x48000030 0x0113>; | 25 | reg = <0x48000030 0x0113>; |
@@ -30,7 +36,6 @@ | |||
30 | interrupts = <59>, /* TX interrupt */ | 36 | interrupts = <59>, /* TX interrupt */ |
31 | <60>; /* RX interrupt */ | 37 | <60>; /* RX interrupt */ |
32 | interrupt-names = "tx", "rx"; | 38 | interrupt-names = "tx", "rx"; |
33 | interrupt-parent = <&intc>; | ||
34 | ti,hwmods = "mcbsp1"; | 39 | ti,hwmods = "mcbsp1"; |
35 | }; | 40 | }; |
36 | 41 | ||
@@ -41,8 +46,15 @@ | |||
41 | interrupts = <62>, /* TX interrupt */ | 46 | interrupts = <62>, /* TX interrupt */ |
42 | <63>; /* RX interrupt */ | 47 | <63>; /* RX interrupt */ |
43 | interrupt-names = "tx", "rx"; | 48 | interrupt-names = "tx", "rx"; |
44 | interrupt-parent = <&intc>; | ||
45 | ti,hwmods = "mcbsp2"; | 49 | ti,hwmods = "mcbsp2"; |
46 | }; | 50 | }; |
51 | |||
52 | timer1: timer@48028000 { | ||
53 | compatible = "ti,omap2-timer"; | ||
54 | reg = <0x48028000 0x400>; | ||
55 | interrupts = <37>; | ||
56 | ti,hwmods = "timer1"; | ||
57 | ti,timer-alwon; | ||
58 | }; | ||
47 | }; | 59 | }; |
48 | }; | 60 | }; |
diff --git a/arch/arm/boot/dts/omap2430.dtsi b/arch/arm/boot/dts/omap2430.dtsi index 4565d9750f4d..c3924457c9b6 100644 --- a/arch/arm/boot/dts/omap2430.dtsi +++ b/arch/arm/boot/dts/omap2430.dtsi | |||
@@ -14,6 +14,12 @@ | |||
14 | compatible = "ti,omap2430", "ti,omap2"; | 14 | compatible = "ti,omap2430", "ti,omap2"; |
15 | 15 | ||
16 | ocp { | 16 | ocp { |
17 | counter32k: counter@49020000 { | ||
18 | compatible = "ti,omap-counter32k"; | ||
19 | reg = <0x49020000 0x20>; | ||
20 | ti,hwmods = "counter_32k"; | ||
21 | }; | ||
22 | |||
17 | omap2430_pmx: pinmux@49002030 { | 23 | omap2430_pmx: pinmux@49002030 { |
18 | compatible = "ti,omap2430-padconf", "pinctrl-single"; | 24 | compatible = "ti,omap2430-padconf", "pinctrl-single"; |
19 | reg = <0x49002030 0x0154>; | 25 | reg = <0x49002030 0x0154>; |
@@ -32,7 +38,6 @@ | |||
32 | <60>, /* RX interrupt */ | 38 | <60>, /* RX interrupt */ |
33 | <61>; /* RX overflow interrupt */ | 39 | <61>; /* RX overflow interrupt */ |
34 | interrupt-names = "common", "tx", "rx", "rx_overflow"; | 40 | interrupt-names = "common", "tx", "rx", "rx_overflow"; |
35 | interrupt-parent = <&intc>; | ||
36 | ti,buffer-size = <128>; | 41 | ti,buffer-size = <128>; |
37 | ti,hwmods = "mcbsp1"; | 42 | ti,hwmods = "mcbsp1"; |
38 | }; | 43 | }; |
@@ -45,7 +50,6 @@ | |||
45 | <62>, /* TX interrupt */ | 50 | <62>, /* TX interrupt */ |
46 | <63>; /* RX interrupt */ | 51 | <63>; /* RX interrupt */ |
47 | interrupt-names = "common", "tx", "rx"; | 52 | interrupt-names = "common", "tx", "rx"; |
48 | interrupt-parent = <&intc>; | ||
49 | ti,buffer-size = <128>; | 53 | ti,buffer-size = <128>; |
50 | ti,hwmods = "mcbsp2"; | 54 | ti,hwmods = "mcbsp2"; |
51 | }; | 55 | }; |
@@ -58,7 +62,6 @@ | |||
58 | <89>, /* TX interrupt */ | 62 | <89>, /* TX interrupt */ |
59 | <90>; /* RX interrupt */ | 63 | <90>; /* RX interrupt */ |
60 | interrupt-names = "common", "tx", "rx"; | 64 | interrupt-names = "common", "tx", "rx"; |
61 | interrupt-parent = <&intc>; | ||
62 | ti,buffer-size = <128>; | 65 | ti,buffer-size = <128>; |
63 | ti,hwmods = "mcbsp3"; | 66 | ti,hwmods = "mcbsp3"; |
64 | }; | 67 | }; |
@@ -71,7 +74,6 @@ | |||
71 | <54>, /* TX interrupt */ | 74 | <54>, /* TX interrupt */ |
72 | <55>; /* RX interrupt */ | 75 | <55>; /* RX interrupt */ |
73 | interrupt-names = "common", "tx", "rx"; | 76 | interrupt-names = "common", "tx", "rx"; |
74 | interrupt-parent = <&intc>; | ||
75 | ti,buffer-size = <128>; | 77 | ti,buffer-size = <128>; |
76 | ti,hwmods = "mcbsp4"; | 78 | ti,hwmods = "mcbsp4"; |
77 | }; | 79 | }; |
@@ -84,9 +86,16 @@ | |||
84 | <81>, /* TX interrupt */ | 86 | <81>, /* TX interrupt */ |
85 | <82>; /* RX interrupt */ | 87 | <82>; /* RX interrupt */ |
86 | interrupt-names = "common", "tx", "rx"; | 88 | interrupt-names = "common", "tx", "rx"; |
87 | interrupt-parent = <&intc>; | ||
88 | ti,buffer-size = <128>; | 89 | ti,buffer-size = <128>; |
89 | ti,hwmods = "mcbsp5"; | 90 | ti,hwmods = "mcbsp5"; |
90 | }; | 91 | }; |
92 | |||
93 | timer1: timer@49018000 { | ||
94 | compatible = "ti,omap2-timer"; | ||
95 | reg = <0x49018000 0x400>; | ||
96 | interrupts = <37>; | ||
97 | ti,hwmods = "timer1"; | ||
98 | ti,timer-alwon; | ||
99 | }; | ||
91 | }; | 100 | }; |
92 | }; | 101 | }; |
diff --git a/arch/arm/boot/dts/omap3-beagle-xm.dts b/arch/arm/boot/dts/omap3-beagle-xm.dts index c38cf76df81f..3705a81c1fc2 100644 --- a/arch/arm/boot/dts/omap3-beagle-xm.dts +++ b/arch/arm/boot/dts/omap3-beagle-xm.dts | |||
@@ -55,12 +55,6 @@ | |||
55 | interrupts = <7>; /* SYS_NIRQ cascaded to intc */ | 55 | interrupts = <7>; /* SYS_NIRQ cascaded to intc */ |
56 | interrupt-parent = <&intc>; | 56 | interrupt-parent = <&intc>; |
57 | 57 | ||
58 | vsim: regulator-vsim { | ||
59 | compatible = "ti,twl4030-vsim"; | ||
60 | regulator-min-microvolt = <1800000>; | ||
61 | regulator-max-microvolt = <3000000>; | ||
62 | }; | ||
63 | |||
64 | twl_audio: audio { | 58 | twl_audio: audio { |
65 | compatible = "ti,twl4030-audio"; | 59 | compatible = "ti,twl4030-audio"; |
66 | codec { | 60 | codec { |
diff --git a/arch/arm/boot/dts/omap3-beagle.dts b/arch/arm/boot/dts/omap3-beagle.dts new file mode 100644 index 000000000000..f624dc85d441 --- /dev/null +++ b/arch/arm/boot/dts/omap3-beagle.dts | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | /dts-v1/; | ||
9 | |||
10 | /include/ "omap3.dtsi" | ||
11 | |||
12 | / { | ||
13 | model = "TI OMAP3 BeagleBoard"; | ||
14 | compatible = "ti,omap3-beagle", "ti,omap3"; | ||
15 | |||
16 | memory { | ||
17 | device_type = "memory"; | ||
18 | reg = <0x80000000 0x10000000>; /* 256 MB */ | ||
19 | }; | ||
20 | |||
21 | leds { | ||
22 | compatible = "gpio-leds"; | ||
23 | pmu_stat { | ||
24 | label = "beagleboard::pmu_stat"; | ||
25 | gpios = <&twl_gpio 19 0>; /* LEDB */ | ||
26 | }; | ||
27 | |||
28 | heartbeat { | ||
29 | label = "beagleboard::usr0"; | ||
30 | gpios = <&gpio5 22 0>; /* 150 -> D6 LED */ | ||
31 | linux,default-trigger = "heartbeat"; | ||
32 | }; | ||
33 | |||
34 | mmc { | ||
35 | label = "beagleboard::usr1"; | ||
36 | gpios = <&gpio5 21 0>; /* 149 -> D7 LED */ | ||
37 | linux,default-trigger = "mmc0"; | ||
38 | }; | ||
39 | }; | ||
40 | |||
41 | }; | ||
42 | |||
43 | &i2c1 { | ||
44 | clock-frequency = <2600000>; | ||
45 | |||
46 | twl: twl@48 { | ||
47 | reg = <0x48>; | ||
48 | interrupts = <7>; /* SYS_NIRQ cascaded to intc */ | ||
49 | interrupt-parent = <&intc>; | ||
50 | }; | ||
51 | }; | ||
52 | |||
53 | /include/ "twl4030.dtsi" | ||
54 | |||
55 | &mmc1 { | ||
56 | vmmc-supply = <&vmmc1>; | ||
57 | vmmc_aux-supply = <&vsim>; | ||
58 | bus-width = <8>; | ||
59 | }; | ||
60 | |||
61 | &mmc2 { | ||
62 | status = "disabled"; | ||
63 | }; | ||
64 | |||
65 | &mmc3 { | ||
66 | status = "disabled"; | ||
67 | }; | ||
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi index 696e929d0304..1acc26148ffc 100644 --- a/arch/arm/boot/dts/omap3.dtsi +++ b/arch/arm/boot/dts/omap3.dtsi | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | / { | 13 | / { |
14 | compatible = "ti,omap3430", "ti,omap3"; | 14 | compatible = "ti,omap3430", "ti,omap3"; |
15 | interrupt-parent = <&intc>; | ||
15 | 16 | ||
16 | aliases { | 17 | aliases { |
17 | serial0 = &uart1; | 18 | serial0 = &uart1; |
@@ -60,6 +61,12 @@ | |||
60 | ranges; | 61 | ranges; |
61 | ti,hwmods = "l3_main"; | 62 | ti,hwmods = "l3_main"; |
62 | 63 | ||
64 | counter32k: counter@48320000 { | ||
65 | compatible = "ti,omap-counter32k"; | ||
66 | reg = <0x48320000 0x20>; | ||
67 | ti,hwmods = "counter_32k"; | ||
68 | }; | ||
69 | |||
63 | intc: interrupt-controller@48200000 { | 70 | intc: interrupt-controller@48200000 { |
64 | compatible = "ti,omap2-intc"; | 71 | compatible = "ti,omap2-intc"; |
65 | interrupt-controller; | 72 | interrupt-controller; |
@@ -240,7 +247,6 @@ | |||
240 | <59>, /* TX interrupt */ | 247 | <59>, /* TX interrupt */ |
241 | <60>; /* RX interrupt */ | 248 | <60>; /* RX interrupt */ |
242 | interrupt-names = "common", "tx", "rx"; | 249 | interrupt-names = "common", "tx", "rx"; |
243 | interrupt-parent = <&intc>; | ||
244 | ti,buffer-size = <128>; | 250 | ti,buffer-size = <128>; |
245 | ti,hwmods = "mcbsp1"; | 251 | ti,hwmods = "mcbsp1"; |
246 | }; | 252 | }; |
@@ -255,7 +261,6 @@ | |||
255 | <63>, /* RX interrupt */ | 261 | <63>, /* RX interrupt */ |
256 | <4>; /* Sidetone */ | 262 | <4>; /* Sidetone */ |
257 | interrupt-names = "common", "tx", "rx", "sidetone"; | 263 | interrupt-names = "common", "tx", "rx", "sidetone"; |
258 | interrupt-parent = <&intc>; | ||
259 | ti,buffer-size = <1280>; | 264 | ti,buffer-size = <1280>; |
260 | ti,hwmods = "mcbsp2", "mcbsp2_sidetone"; | 265 | ti,hwmods = "mcbsp2", "mcbsp2_sidetone"; |
261 | }; | 266 | }; |
@@ -270,7 +275,6 @@ | |||
270 | <90>, /* RX interrupt */ | 275 | <90>, /* RX interrupt */ |
271 | <5>; /* Sidetone */ | 276 | <5>; /* Sidetone */ |
272 | interrupt-names = "common", "tx", "rx", "sidetone"; | 277 | interrupt-names = "common", "tx", "rx", "sidetone"; |
273 | interrupt-parent = <&intc>; | ||
274 | ti,buffer-size = <128>; | 278 | ti,buffer-size = <128>; |
275 | ti,hwmods = "mcbsp3", "mcbsp3_sidetone"; | 279 | ti,hwmods = "mcbsp3", "mcbsp3_sidetone"; |
276 | }; | 280 | }; |
@@ -283,7 +287,6 @@ | |||
283 | <54>, /* TX interrupt */ | 287 | <54>, /* TX interrupt */ |
284 | <55>; /* RX interrupt */ | 288 | <55>; /* RX interrupt */ |
285 | interrupt-names = "common", "tx", "rx"; | 289 | interrupt-names = "common", "tx", "rx"; |
286 | interrupt-parent = <&intc>; | ||
287 | ti,buffer-size = <128>; | 290 | ti,buffer-size = <128>; |
288 | ti,hwmods = "mcbsp4"; | 291 | ti,hwmods = "mcbsp4"; |
289 | }; | 292 | }; |
@@ -296,9 +299,103 @@ | |||
296 | <81>, /* TX interrupt */ | 299 | <81>, /* TX interrupt */ |
297 | <82>; /* RX interrupt */ | 300 | <82>; /* RX interrupt */ |
298 | interrupt-names = "common", "tx", "rx"; | 301 | interrupt-names = "common", "tx", "rx"; |
299 | interrupt-parent = <&intc>; | ||
300 | ti,buffer-size = <128>; | 302 | ti,buffer-size = <128>; |
301 | ti,hwmods = "mcbsp5"; | 303 | ti,hwmods = "mcbsp5"; |
302 | }; | 304 | }; |
305 | |||
306 | timer1: timer@48318000 { | ||
307 | compatible = "ti,omap2-timer"; | ||
308 | reg = <0x48318000 0x400>; | ||
309 | interrupts = <37>; | ||
310 | ti,hwmods = "timer1"; | ||
311 | ti,timer-alwon; | ||
312 | }; | ||
313 | |||
314 | timer2: timer@49032000 { | ||
315 | compatible = "ti,omap2-timer"; | ||
316 | reg = <0x49032000 0x400>; | ||
317 | interrupts = <38>; | ||
318 | ti,hwmods = "timer2"; | ||
319 | }; | ||
320 | |||
321 | timer3: timer@49034000 { | ||
322 | compatible = "ti,omap2-timer"; | ||
323 | reg = <0x49034000 0x400>; | ||
324 | interrupts = <39>; | ||
325 | ti,hwmods = "timer3"; | ||
326 | }; | ||
327 | |||
328 | timer4: timer@49036000 { | ||
329 | compatible = "ti,omap2-timer"; | ||
330 | reg = <0x49036000 0x400>; | ||
331 | interrupts = <40>; | ||
332 | ti,hwmods = "timer4"; | ||
333 | }; | ||
334 | |||
335 | timer5: timer@49038000 { | ||
336 | compatible = "ti,omap2-timer"; | ||
337 | reg = <0x49038000 0x400>; | ||
338 | interrupts = <41>; | ||
339 | ti,hwmods = "timer5"; | ||
340 | ti,timer-dsp; | ||
341 | }; | ||
342 | |||
343 | timer6: timer@4903a000 { | ||
344 | compatible = "ti,omap2-timer"; | ||
345 | reg = <0x4903a000 0x400>; | ||
346 | interrupts = <42>; | ||
347 | ti,hwmods = "timer6"; | ||
348 | ti,timer-dsp; | ||
349 | }; | ||
350 | |||
351 | timer7: timer@4903c000 { | ||
352 | compatible = "ti,omap2-timer"; | ||
353 | reg = <0x4903c000 0x400>; | ||
354 | interrupts = <43>; | ||
355 | ti,hwmods = "timer7"; | ||
356 | ti,timer-dsp; | ||
357 | }; | ||
358 | |||
359 | timer8: timer@4903e000 { | ||
360 | compatible = "ti,omap2-timer"; | ||
361 | reg = <0x4903e000 0x400>; | ||
362 | interrupts = <44>; | ||
363 | ti,hwmods = "timer8"; | ||
364 | ti,timer-pwm; | ||
365 | ti,timer-dsp; | ||
366 | }; | ||
367 | |||
368 | timer9: timer@49040000 { | ||
369 | compatible = "ti,omap2-timer"; | ||
370 | reg = <0x49040000 0x400>; | ||
371 | interrupts = <45>; | ||
372 | ti,hwmods = "timer9"; | ||
373 | ti,timer-pwm; | ||
374 | }; | ||
375 | |||
376 | timer10: timer@48086000 { | ||
377 | compatible = "ti,omap2-timer"; | ||
378 | reg = <0x48086000 0x400>; | ||
379 | interrupts = <46>; | ||
380 | ti,hwmods = "timer10"; | ||
381 | ti,timer-pwm; | ||
382 | }; | ||
383 | |||
384 | timer11: timer@48088000 { | ||
385 | compatible = "ti,omap2-timer"; | ||
386 | reg = <0x48088000 0x400>; | ||
387 | interrupts = <47>; | ||
388 | ti,hwmods = "timer11"; | ||
389 | ti,timer-pwm; | ||
390 | }; | ||
391 | |||
392 | timer12: timer@48304000 { | ||
393 | compatible = "ti,omap2-timer"; | ||
394 | reg = <0x48304000 0x400>; | ||
395 | interrupts = <95>; | ||
396 | ti,hwmods = "timer12"; | ||
397 | ti,timer-alwon; | ||
398 | ti,timer-secure; | ||
399 | }; | ||
303 | }; | 400 | }; |
304 | }; | 401 | }; |
diff --git a/arch/arm/boot/dts/omap4-panda-a4.dts b/arch/arm/boot/dts/omap4-panda-a4.dts new file mode 100644 index 000000000000..75466d2abfb5 --- /dev/null +++ b/arch/arm/boot/dts/omap4-panda-a4.dts | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | /include/ "omap4-panda.dts" | ||
9 | |||
10 | /* Pandaboard Rev A4+ have external pullups on SCL & SDA */ | ||
11 | &dss_hdmi_pins { | ||
12 | pinctrl-single,pins = < | ||
13 | 0x5a 0x118 /* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ | ||
14 | 0x5c 0x100 /* hdmi_scl.hdmi_scl INPUT | MODE 0 */ | ||
15 | 0x5e 0x100 /* hdmi_sda.hdmi_sda INPUT | MODE 0 */ | ||
16 | >; | ||
17 | }; | ||
diff --git a/arch/arm/boot/dts/omap4-pandaES.dts b/arch/arm/boot/dts/omap4-panda-es.dts index d4ba43a48d9b..73bc1a67e444 100644 --- a/arch/arm/boot/dts/omap4-pandaES.dts +++ b/arch/arm/boot/dts/omap4-panda-es.dts | |||
@@ -22,3 +22,12 @@ | |||
22 | "AFML", "Line In", | 22 | "AFML", "Line In", |
23 | "AFMR", "Line In"; | 23 | "AFMR", "Line In"; |
24 | }; | 24 | }; |
25 | |||
26 | /* PandaboardES has external pullups on SCL & SDA */ | ||
27 | &dss_hdmi_pins { | ||
28 | pinctrl-single,pins = < | ||
29 | 0x5a 0x118 /* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ | ||
30 | 0x5c 0x100 /* hdmi_scl.hdmi_scl INPUT | MODE 0 */ | ||
31 | 0x5e 0x100 /* hdmi_sda.hdmi_sda INPUT | MODE 0 */ | ||
32 | >; | ||
33 | }; | ||
diff --git a/arch/arm/boot/dts/omap4-panda.dts b/arch/arm/boot/dts/omap4-panda.dts index e8f927cbb376..4122efe31cfd 100644 --- a/arch/arm/boot/dts/omap4-panda.dts +++ b/arch/arm/boot/dts/omap4-panda.dts | |||
@@ -65,6 +65,8 @@ | |||
65 | &twl6040_pins | 65 | &twl6040_pins |
66 | &mcpdm_pins | 66 | &mcpdm_pins |
67 | &mcbsp1_pins | 67 | &mcbsp1_pins |
68 | &dss_hdmi_pins | ||
69 | &tpd12s015_pins | ||
68 | >; | 70 | >; |
69 | 71 | ||
70 | twl6040_pins: pinmux_twl6040_pins { | 72 | twl6040_pins: pinmux_twl6040_pins { |
@@ -92,6 +94,22 @@ | |||
92 | 0xc4 0x100 /* abe_mcbsp1_fsx.abe_mcbsp1_fsx INPUT | MODE0 */ | 94 | 0xc4 0x100 /* abe_mcbsp1_fsx.abe_mcbsp1_fsx INPUT | MODE0 */ |
93 | >; | 95 | >; |
94 | }; | 96 | }; |
97 | |||
98 | dss_hdmi_pins: pinmux_dss_hdmi_pins { | ||
99 | pinctrl-single,pins = < | ||
100 | 0x5a 0x118 /* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ | ||
101 | 0x5c 0x118 /* hdmi_scl.hdmi_scl INPUT PULLUP | MODE 0 */ | ||
102 | 0x5e 0x118 /* hdmi_sda.hdmi_sda INPUT PULLUP | MODE 0 */ | ||
103 | >; | ||
104 | }; | ||
105 | |||
106 | tpd12s015_pins: pinmux_tpd12s015_pins { | ||
107 | pinctrl-single,pins = < | ||
108 | 0x22 0x3 /* gpmc_a17.gpio_41 OUTPUT | MODE3 */ | ||
109 | 0x48 0x3 /* gpmc_nbe1.gpio_60 OUTPUT | MODE3 */ | ||
110 | 0x58 0x10b /* hdmi_hpd.gpio_63 INPUT PULLDOWN | MODE3 */ | ||
111 | >; | ||
112 | }; | ||
95 | }; | 113 | }; |
96 | 114 | ||
97 | &i2c1 { | 115 | &i2c1 { |
@@ -184,3 +202,7 @@ | |||
184 | &dmic { | 202 | &dmic { |
185 | status = "disabled"; | 203 | status = "disabled"; |
186 | }; | 204 | }; |
205 | |||
206 | &twl_usb_comparator { | ||
207 | usb-supply = <&vusb>; | ||
208 | }; | ||
diff --git a/arch/arm/boot/dts/omap4-sdp-es23plus.dts b/arch/arm/boot/dts/omap4-sdp-es23plus.dts new file mode 100644 index 000000000000..b4a40ffbce31 --- /dev/null +++ b/arch/arm/boot/dts/omap4-sdp-es23plus.dts | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ | ||
3 | * | ||
4 | * This program is free software; you can redistribute it and/or modify | ||
5 | * it under the terms of the GNU General Public License version 2 as | ||
6 | * published by the Free Software Foundation. | ||
7 | */ | ||
8 | /include/ "omap4-sdp.dts" | ||
9 | |||
10 | /* SDP boards with 4430 ES2.3+ or 4460 have external pullups on SCL & SDA */ | ||
11 | &dss_hdmi_pins { | ||
12 | pinctrl-single,pins = < | ||
13 | 0x5a 0x118 /* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ | ||
14 | 0x5c 0x100 /* hdmi_scl.hdmi_scl INPUT | MODE 0 */ | ||
15 | 0x5e 0x100 /* hdmi_sda.hdmi_sda INPUT | MODE 0 */ | ||
16 | >; | ||
17 | }; | ||
diff --git a/arch/arm/boot/dts/omap4-sdp.dts b/arch/arm/boot/dts/omap4-sdp.dts index 5b7e04fbff50..43e5258a9372 100644 --- a/arch/arm/boot/dts/omap4-sdp.dts +++ b/arch/arm/boot/dts/omap4-sdp.dts | |||
@@ -124,6 +124,8 @@ | |||
124 | &dmic_pins | 124 | &dmic_pins |
125 | &mcbsp1_pins | 125 | &mcbsp1_pins |
126 | &mcbsp2_pins | 126 | &mcbsp2_pins |
127 | &dss_hdmi_pins | ||
128 | &tpd12s015_pins | ||
127 | >; | 129 | >; |
128 | 130 | ||
129 | uart2_pins: pinmux_uart2_pins { | 131 | uart2_pins: pinmux_uart2_pins { |
@@ -194,6 +196,22 @@ | |||
194 | 0xbc 0x100 /* abe_mcbsp2_fsx.abe_mcbsp2_fsx INPUT | MODE0 */ | 196 | 0xbc 0x100 /* abe_mcbsp2_fsx.abe_mcbsp2_fsx INPUT | MODE0 */ |
195 | >; | 197 | >; |
196 | }; | 198 | }; |
199 | |||
200 | dss_hdmi_pins: pinmux_dss_hdmi_pins { | ||
201 | pinctrl-single,pins = < | ||
202 | 0x5a 0x118 /* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */ | ||
203 | 0x5c 0x118 /* hdmi_scl.hdmi_scl INPUT PULLUP | MODE 0 */ | ||
204 | 0x5e 0x118 /* hdmi_sda.hdmi_sda INPUT PULLUP | MODE 0 */ | ||
205 | >; | ||
206 | }; | ||
207 | |||
208 | tpd12s015_pins: pinmux_tpd12s015_pins { | ||
209 | pinctrl-single,pins = < | ||
210 | 0x22 0x3 /* gpmc_a17.gpio_41 OUTPUT | MODE3 */ | ||
211 | 0x48 0x3 /* gpmc_nbe1.gpio_60 OUTPUT | MODE3 */ | ||
212 | 0x58 0x10b /* hdmi_hpd.gpio_63 INPUT PULLDOWN | MODE3 */ | ||
213 | >; | ||
214 | }; | ||
197 | }; | 215 | }; |
198 | 216 | ||
199 | &i2c1 { | 217 | &i2c1 { |
@@ -406,3 +424,7 @@ | |||
406 | &mcbsp3 { | 424 | &mcbsp3 { |
407 | status = "disabled"; | 425 | status = "disabled"; |
408 | }; | 426 | }; |
427 | |||
428 | &twl_usb_comparator { | ||
429 | usb-supply = <&vusb>; | ||
430 | }; | ||
diff --git a/arch/arm/boot/dts/omap4-var_som.dts b/arch/arm/boot/dts/omap4-var-som.dts index 6601e6af6092..6601e6af6092 100644 --- a/arch/arm/boot/dts/omap4-var_som.dts +++ b/arch/arm/boot/dts/omap4-var-som.dts | |||
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi index 3883f94fdbd0..739bb79e410e 100644 --- a/arch/arm/boot/dts/omap4.dtsi +++ b/arch/arm/boot/dts/omap4.dtsi | |||
@@ -95,6 +95,12 @@ | |||
95 | ranges; | 95 | ranges; |
96 | ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; | 96 | ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; |
97 | 97 | ||
98 | counter32k: counter@4a304000 { | ||
99 | compatible = "ti,omap-counter32k"; | ||
100 | reg = <0x4a304000 0x20>; | ||
101 | ti,hwmods = "counter_32k"; | ||
102 | }; | ||
103 | |||
98 | omap4_pmx_core: pinmux@4a100040 { | 104 | omap4_pmx_core: pinmux@4a100040 { |
99 | compatible = "ti,omap4-padconf", "pinctrl-single"; | 105 | compatible = "ti,omap4-padconf", "pinctrl-single"; |
100 | reg = <0x4a100040 0x0196>; | 106 | reg = <0x4a100040 0x0196>; |
@@ -340,7 +346,6 @@ | |||
340 | <0x49032000 0x7f>; /* L3 Interconnect */ | 346 | <0x49032000 0x7f>; /* L3 Interconnect */ |
341 | reg-names = "mpu", "dma"; | 347 | reg-names = "mpu", "dma"; |
342 | interrupts = <0 112 0x4>; | 348 | interrupts = <0 112 0x4>; |
343 | interrupt-parent = <&gic>; | ||
344 | ti,hwmods = "mcpdm"; | 349 | ti,hwmods = "mcpdm"; |
345 | }; | 350 | }; |
346 | 351 | ||
@@ -350,7 +355,6 @@ | |||
350 | <0x4902e000 0x7f>; /* L3 Interconnect */ | 355 | <0x4902e000 0x7f>; /* L3 Interconnect */ |
351 | reg-names = "mpu", "dma"; | 356 | reg-names = "mpu", "dma"; |
352 | interrupts = <0 114 0x4>; | 357 | interrupts = <0 114 0x4>; |
353 | interrupt-parent = <&gic>; | ||
354 | ti,hwmods = "dmic"; | 358 | ti,hwmods = "dmic"; |
355 | }; | 359 | }; |
356 | 360 | ||
@@ -361,7 +365,6 @@ | |||
361 | reg-names = "mpu", "dma"; | 365 | reg-names = "mpu", "dma"; |
362 | interrupts = <0 17 0x4>; | 366 | interrupts = <0 17 0x4>; |
363 | interrupt-names = "common"; | 367 | interrupt-names = "common"; |
364 | interrupt-parent = <&gic>; | ||
365 | ti,buffer-size = <128>; | 368 | ti,buffer-size = <128>; |
366 | ti,hwmods = "mcbsp1"; | 369 | ti,hwmods = "mcbsp1"; |
367 | }; | 370 | }; |
@@ -373,7 +376,6 @@ | |||
373 | reg-names = "mpu", "dma"; | 376 | reg-names = "mpu", "dma"; |
374 | interrupts = <0 22 0x4>; | 377 | interrupts = <0 22 0x4>; |
375 | interrupt-names = "common"; | 378 | interrupt-names = "common"; |
376 | interrupt-parent = <&gic>; | ||
377 | ti,buffer-size = <128>; | 379 | ti,buffer-size = <128>; |
378 | ti,hwmods = "mcbsp2"; | 380 | ti,hwmods = "mcbsp2"; |
379 | }; | 381 | }; |
@@ -385,7 +387,6 @@ | |||
385 | reg-names = "mpu", "dma"; | 387 | reg-names = "mpu", "dma"; |
386 | interrupts = <0 23 0x4>; | 388 | interrupts = <0 23 0x4>; |
387 | interrupt-names = "common"; | 389 | interrupt-names = "common"; |
388 | interrupt-parent = <&gic>; | ||
389 | ti,buffer-size = <128>; | 390 | ti,buffer-size = <128>; |
390 | ti,hwmods = "mcbsp3"; | 391 | ti,hwmods = "mcbsp3"; |
391 | }; | 392 | }; |
@@ -396,7 +397,6 @@ | |||
396 | reg-names = "mpu"; | 397 | reg-names = "mpu"; |
397 | interrupts = <0 16 0x4>; | 398 | interrupts = <0 16 0x4>; |
398 | interrupt-names = "common"; | 399 | interrupt-names = "common"; |
399 | interrupt-parent = <&gic>; | ||
400 | ti,buffer-size = <128>; | 400 | ti,buffer-size = <128>; |
401 | ti,hwmods = "mcbsp4"; | 401 | ti,hwmods = "mcbsp4"; |
402 | }; | 402 | }; |
@@ -431,12 +431,103 @@ | |||
431 | hw-caps-temp-alert; | 431 | hw-caps-temp-alert; |
432 | }; | 432 | }; |
433 | 433 | ||
434 | ocp2scp { | 434 | ocp2scp@4a0ad000 { |
435 | compatible = "ti,omap-ocp2scp"; | 435 | compatible = "ti,omap-ocp2scp"; |
436 | reg = <0x4a0ad000 0x1f>; | ||
436 | #address-cells = <1>; | 437 | #address-cells = <1>; |
437 | #size-cells = <1>; | 438 | #size-cells = <1>; |
438 | ranges; | 439 | ranges; |
439 | ti,hwmods = "ocp2scp_usb_phy"; | 440 | ti,hwmods = "ocp2scp_usb_phy"; |
440 | }; | 441 | }; |
442 | |||
443 | timer1: timer@4a318000 { | ||
444 | compatible = "ti,omap2-timer"; | ||
445 | reg = <0x4a318000 0x80>; | ||
446 | interrupts = <0 37 0x4>; | ||
447 | ti,hwmods = "timer1"; | ||
448 | ti,timer-alwon; | ||
449 | }; | ||
450 | |||
451 | timer2: timer@48032000 { | ||
452 | compatible = "ti,omap2-timer"; | ||
453 | reg = <0x48032000 0x80>; | ||
454 | interrupts = <0 38 0x4>; | ||
455 | ti,hwmods = "timer2"; | ||
456 | }; | ||
457 | |||
458 | timer3: timer@48034000 { | ||
459 | compatible = "ti,omap2-timer"; | ||
460 | reg = <0x48034000 0x80>; | ||
461 | interrupts = <0 39 0x4>; | ||
462 | ti,hwmods = "timer3"; | ||
463 | }; | ||
464 | |||
465 | timer4: timer@48036000 { | ||
466 | compatible = "ti,omap2-timer"; | ||
467 | reg = <0x48036000 0x80>; | ||
468 | interrupts = <0 40 0x4>; | ||
469 | ti,hwmods = "timer4"; | ||
470 | }; | ||
471 | |||
472 | timer5: timer@40138000 { | ||
473 | compatible = "ti,omap2-timer"; | ||
474 | reg = <0x40138000 0x80>, | ||
475 | <0x49038000 0x80>; | ||
476 | interrupts = <0 41 0x4>; | ||
477 | ti,hwmods = "timer5"; | ||
478 | ti,timer-dsp; | ||
479 | }; | ||
480 | |||
481 | timer6: timer@4013a000 { | ||
482 | compatible = "ti,omap2-timer"; | ||
483 | reg = <0x4013a000 0x80>, | ||
484 | <0x4903a000 0x80>; | ||
485 | interrupts = <0 42 0x4>; | ||
486 | ti,hwmods = "timer6"; | ||
487 | ti,timer-dsp; | ||
488 | }; | ||
489 | |||
490 | timer7: timer@4013c000 { | ||
491 | compatible = "ti,omap2-timer"; | ||
492 | reg = <0x4013c000 0x80>, | ||
493 | <0x4903c000 0x80>; | ||
494 | interrupts = <0 43 0x4>; | ||
495 | ti,hwmods = "timer7"; | ||
496 | ti,timer-dsp; | ||
497 | }; | ||
498 | |||
499 | timer8: timer@4013e000 { | ||
500 | compatible = "ti,omap2-timer"; | ||
501 | reg = <0x4013e000 0x80>, | ||
502 | <0x4903e000 0x80>; | ||
503 | interrupts = <0 44 0x4>; | ||
504 | ti,hwmods = "timer8"; | ||
505 | ti,timer-pwm; | ||
506 | ti,timer-dsp; | ||
507 | }; | ||
508 | |||
509 | timer9: timer@4803e000 { | ||
510 | compatible = "ti,omap2-timer"; | ||
511 | reg = <0x4803e000 0x80>; | ||
512 | interrupts = <0 45 0x4>; | ||
513 | ti,hwmods = "timer9"; | ||
514 | ti,timer-pwm; | ||
515 | }; | ||
516 | |||
517 | timer10: timer@48086000 { | ||
518 | compatible = "ti,omap2-timer"; | ||
519 | reg = <0x48086000 0x80>; | ||
520 | interrupts = <0 46 0x4>; | ||
521 | ti,hwmods = "timer10"; | ||
522 | ti,timer-pwm; | ||
523 | }; | ||
524 | |||
525 | timer11: timer@48088000 { | ||
526 | compatible = "ti,omap2-timer"; | ||
527 | reg = <0x48088000 0x80>; | ||
528 | interrupts = <0 47 0x4>; | ||
529 | ti,hwmods = "timer11"; | ||
530 | ti,timer-pwm; | ||
531 | }; | ||
441 | }; | 532 | }; |
442 | }; | 533 | }; |
diff --git a/arch/arm/boot/dts/omap5-evm.dts b/arch/arm/boot/dts/omap5-evm.dts index c663eba73168..8722c15bbba2 100644 --- a/arch/arm/boot/dts/omap5-evm.dts +++ b/arch/arm/boot/dts/omap5-evm.dts | |||
@@ -8,6 +8,7 @@ | |||
8 | /dts-v1/; | 8 | /dts-v1/; |
9 | 9 | ||
10 | /include/ "omap5.dtsi" | 10 | /include/ "omap5.dtsi" |
11 | /include/ "samsung_k3pe0e000b.dtsi" | ||
11 | 12 | ||
12 | / { | 13 | / { |
13 | model = "TI OMAP5 EVM board"; | 14 | model = "TI OMAP5 EVM board"; |
@@ -15,7 +16,7 @@ | |||
15 | 16 | ||
16 | memory { | 17 | memory { |
17 | device_type = "memory"; | 18 | device_type = "memory"; |
18 | reg = <0x80000000 0x40000000>; /* 1 GB */ | 19 | reg = <0x80000000 0x80000000>; /* 2 GB */ |
19 | }; | 20 | }; |
20 | 21 | ||
21 | vmmcsd_fixed: fixedregulator-mmcsd { | 22 | vmmcsd_fixed: fixedregulator-mmcsd { |
@@ -140,3 +141,13 @@ | |||
140 | &mcbsp3 { | 141 | &mcbsp3 { |
141 | status = "disabled"; | 142 | status = "disabled"; |
142 | }; | 143 | }; |
144 | |||
145 | &emif1 { | ||
146 | cs1-used; | ||
147 | device-handle = <&samsung_K3PE0E000B>; | ||
148 | }; | ||
149 | |||
150 | &emif2 { | ||
151 | cs1-used; | ||
152 | device-handle = <&samsung_K3PE0E000B>; | ||
153 | }; | ||
diff --git a/arch/arm/boot/dts/omap5.dtsi b/arch/arm/boot/dts/omap5.dtsi index 42c78beb4fdc..790bb2a4b343 100644 --- a/arch/arm/boot/dts/omap5.dtsi +++ b/arch/arm/boot/dts/omap5.dtsi | |||
@@ -77,6 +77,12 @@ | |||
77 | ranges; | 77 | ranges; |
78 | ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; | 78 | ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3"; |
79 | 79 | ||
80 | counter32k: counter@4ae04000 { | ||
81 | compatible = "ti,omap-counter32k"; | ||
82 | reg = <0x4ae04000 0x40>; | ||
83 | ti,hwmods = "counter_32k"; | ||
84 | }; | ||
85 | |||
80 | omap5_pmx_core: pinmux@4a002840 { | 86 | omap5_pmx_core: pinmux@4a002840 { |
81 | compatible = "ti,omap4-padconf", "pinctrl-single"; | 87 | compatible = "ti,omap4-padconf", "pinctrl-single"; |
82 | reg = <0x4a002840 0x01b6>; | 88 | reg = <0x4a002840 0x01b6>; |
@@ -104,6 +110,8 @@ | |||
104 | 110 | ||
105 | gpio1: gpio@4ae10000 { | 111 | gpio1: gpio@4ae10000 { |
106 | compatible = "ti,omap4-gpio"; | 112 | compatible = "ti,omap4-gpio"; |
113 | reg = <0x4ae10000 0x200>; | ||
114 | interrupts = <0 29 0x4>; | ||
107 | ti,hwmods = "gpio1"; | 115 | ti,hwmods = "gpio1"; |
108 | gpio-controller; | 116 | gpio-controller; |
109 | #gpio-cells = <2>; | 117 | #gpio-cells = <2>; |
@@ -113,6 +121,8 @@ | |||
113 | 121 | ||
114 | gpio2: gpio@48055000 { | 122 | gpio2: gpio@48055000 { |
115 | compatible = "ti,omap4-gpio"; | 123 | compatible = "ti,omap4-gpio"; |
124 | reg = <0x48055000 0x200>; | ||
125 | interrupts = <0 30 0x4>; | ||
116 | ti,hwmods = "gpio2"; | 126 | ti,hwmods = "gpio2"; |
117 | gpio-controller; | 127 | gpio-controller; |
118 | #gpio-cells = <2>; | 128 | #gpio-cells = <2>; |
@@ -122,6 +132,8 @@ | |||
122 | 132 | ||
123 | gpio3: gpio@48057000 { | 133 | gpio3: gpio@48057000 { |
124 | compatible = "ti,omap4-gpio"; | 134 | compatible = "ti,omap4-gpio"; |
135 | reg = <0x48057000 0x200>; | ||
136 | interrupts = <0 31 0x4>; | ||
125 | ti,hwmods = "gpio3"; | 137 | ti,hwmods = "gpio3"; |
126 | gpio-controller; | 138 | gpio-controller; |
127 | #gpio-cells = <2>; | 139 | #gpio-cells = <2>; |
@@ -131,6 +143,8 @@ | |||
131 | 143 | ||
132 | gpio4: gpio@48059000 { | 144 | gpio4: gpio@48059000 { |
133 | compatible = "ti,omap4-gpio"; | 145 | compatible = "ti,omap4-gpio"; |
146 | reg = <0x48059000 0x200>; | ||
147 | interrupts = <0 32 0x4>; | ||
134 | ti,hwmods = "gpio4"; | 148 | ti,hwmods = "gpio4"; |
135 | gpio-controller; | 149 | gpio-controller; |
136 | #gpio-cells = <2>; | 150 | #gpio-cells = <2>; |
@@ -140,6 +154,8 @@ | |||
140 | 154 | ||
141 | gpio5: gpio@4805b000 { | 155 | gpio5: gpio@4805b000 { |
142 | compatible = "ti,omap4-gpio"; | 156 | compatible = "ti,omap4-gpio"; |
157 | reg = <0x4805b000 0x200>; | ||
158 | interrupts = <0 33 0x4>; | ||
143 | ti,hwmods = "gpio5"; | 159 | ti,hwmods = "gpio5"; |
144 | gpio-controller; | 160 | gpio-controller; |
145 | #gpio-cells = <2>; | 161 | #gpio-cells = <2>; |
@@ -149,6 +165,8 @@ | |||
149 | 165 | ||
150 | gpio6: gpio@4805d000 { | 166 | gpio6: gpio@4805d000 { |
151 | compatible = "ti,omap4-gpio"; | 167 | compatible = "ti,omap4-gpio"; |
168 | reg = <0x4805d000 0x200>; | ||
169 | interrupts = <0 34 0x4>; | ||
152 | ti,hwmods = "gpio6"; | 170 | ti,hwmods = "gpio6"; |
153 | gpio-controller; | 171 | gpio-controller; |
154 | #gpio-cells = <2>; | 172 | #gpio-cells = <2>; |
@@ -158,6 +176,8 @@ | |||
158 | 176 | ||
159 | gpio7: gpio@48051000 { | 177 | gpio7: gpio@48051000 { |
160 | compatible = "ti,omap4-gpio"; | 178 | compatible = "ti,omap4-gpio"; |
179 | reg = <0x48051000 0x200>; | ||
180 | interrupts = <0 35 0x4>; | ||
161 | ti,hwmods = "gpio7"; | 181 | ti,hwmods = "gpio7"; |
162 | gpio-controller; | 182 | gpio-controller; |
163 | #gpio-cells = <2>; | 183 | #gpio-cells = <2>; |
@@ -167,6 +187,8 @@ | |||
167 | 187 | ||
168 | gpio8: gpio@48053000 { | 188 | gpio8: gpio@48053000 { |
169 | compatible = "ti,omap4-gpio"; | 189 | compatible = "ti,omap4-gpio"; |
190 | reg = <0x48053000 0x200>; | ||
191 | interrupts = <0 121 0x4>; | ||
170 | ti,hwmods = "gpio8"; | 192 | ti,hwmods = "gpio8"; |
171 | gpio-controller; | 193 | gpio-controller; |
172 | #gpio-cells = <2>; | 194 | #gpio-cells = <2>; |
@@ -176,6 +198,8 @@ | |||
176 | 198 | ||
177 | i2c1: i2c@48070000 { | 199 | i2c1: i2c@48070000 { |
178 | compatible = "ti,omap4-i2c"; | 200 | compatible = "ti,omap4-i2c"; |
201 | reg = <0x48070000 0x100>; | ||
202 | interrupts = <0 56 0x4>; | ||
179 | #address-cells = <1>; | 203 | #address-cells = <1>; |
180 | #size-cells = <0>; | 204 | #size-cells = <0>; |
181 | ti,hwmods = "i2c1"; | 205 | ti,hwmods = "i2c1"; |
@@ -183,6 +207,8 @@ | |||
183 | 207 | ||
184 | i2c2: i2c@48072000 { | 208 | i2c2: i2c@48072000 { |
185 | compatible = "ti,omap4-i2c"; | 209 | compatible = "ti,omap4-i2c"; |
210 | reg = <0x48072000 0x100>; | ||
211 | interrupts = <0 57 0x4>; | ||
186 | #address-cells = <1>; | 212 | #address-cells = <1>; |
187 | #size-cells = <0>; | 213 | #size-cells = <0>; |
188 | ti,hwmods = "i2c2"; | 214 | ti,hwmods = "i2c2"; |
@@ -190,20 +216,26 @@ | |||
190 | 216 | ||
191 | i2c3: i2c@48060000 { | 217 | i2c3: i2c@48060000 { |
192 | compatible = "ti,omap4-i2c"; | 218 | compatible = "ti,omap4-i2c"; |
219 | reg = <0x48060000 0x100>; | ||
220 | interrupts = <0 61 0x4>; | ||
193 | #address-cells = <1>; | 221 | #address-cells = <1>; |
194 | #size-cells = <0>; | 222 | #size-cells = <0>; |
195 | ti,hwmods = "i2c3"; | 223 | ti,hwmods = "i2c3"; |
196 | }; | 224 | }; |
197 | 225 | ||
198 | i2c4: i2c@4807A000 { | 226 | i2c4: i2c@4807a000 { |
199 | compatible = "ti,omap4-i2c"; | 227 | compatible = "ti,omap4-i2c"; |
228 | reg = <0x4807a000 0x100>; | ||
229 | interrupts = <0 62 0x4>; | ||
200 | #address-cells = <1>; | 230 | #address-cells = <1>; |
201 | #size-cells = <0>; | 231 | #size-cells = <0>; |
202 | ti,hwmods = "i2c4"; | 232 | ti,hwmods = "i2c4"; |
203 | }; | 233 | }; |
204 | 234 | ||
205 | i2c5: i2c@4807C000 { | 235 | i2c5: i2c@4807c000 { |
206 | compatible = "ti,omap4-i2c"; | 236 | compatible = "ti,omap4-i2c"; |
237 | reg = <0x4807c000 0x100>; | ||
238 | interrupts = <0 60 0x4>; | ||
207 | #address-cells = <1>; | 239 | #address-cells = <1>; |
208 | #size-cells = <0>; | 240 | #size-cells = <0>; |
209 | ti,hwmods = "i2c5"; | 241 | ti,hwmods = "i2c5"; |
@@ -211,42 +243,56 @@ | |||
211 | 243 | ||
212 | uart1: serial@4806a000 { | 244 | uart1: serial@4806a000 { |
213 | compatible = "ti,omap4-uart"; | 245 | compatible = "ti,omap4-uart"; |
246 | reg = <0x4806a000 0x100>; | ||
247 | interrupts = <0 72 0x4>; | ||
214 | ti,hwmods = "uart1"; | 248 | ti,hwmods = "uart1"; |
215 | clock-frequency = <48000000>; | 249 | clock-frequency = <48000000>; |
216 | }; | 250 | }; |
217 | 251 | ||
218 | uart2: serial@4806c000 { | 252 | uart2: serial@4806c000 { |
219 | compatible = "ti,omap4-uart"; | 253 | compatible = "ti,omap4-uart"; |
254 | reg = <0x4806c000 0x100>; | ||
255 | interrupts = <0 73 0x4>; | ||
220 | ti,hwmods = "uart2"; | 256 | ti,hwmods = "uart2"; |
221 | clock-frequency = <48000000>; | 257 | clock-frequency = <48000000>; |
222 | }; | 258 | }; |
223 | 259 | ||
224 | uart3: serial@48020000 { | 260 | uart3: serial@48020000 { |
225 | compatible = "ti,omap4-uart"; | 261 | compatible = "ti,omap4-uart"; |
262 | reg = <0x48020000 0x100>; | ||
263 | interrupts = <0 74 0x4>; | ||
226 | ti,hwmods = "uart3"; | 264 | ti,hwmods = "uart3"; |
227 | clock-frequency = <48000000>; | 265 | clock-frequency = <48000000>; |
228 | }; | 266 | }; |
229 | 267 | ||
230 | uart4: serial@4806e000 { | 268 | uart4: serial@4806e000 { |
231 | compatible = "ti,omap4-uart"; | 269 | compatible = "ti,omap4-uart"; |
270 | reg = <0x4806e000 0x100>; | ||
271 | interrupts = <0 70 0x4>; | ||
232 | ti,hwmods = "uart4"; | 272 | ti,hwmods = "uart4"; |
233 | clock-frequency = <48000000>; | 273 | clock-frequency = <48000000>; |
234 | }; | 274 | }; |
235 | 275 | ||
236 | uart5: serial@48066000 { | 276 | uart5: serial@48066000 { |
237 | compatible = "ti,omap5-uart"; | 277 | compatible = "ti,omap4-uart"; |
278 | reg = <0x48066000 0x100>; | ||
279 | interrupts = <0 105 0x4>; | ||
238 | ti,hwmods = "uart5"; | 280 | ti,hwmods = "uart5"; |
239 | clock-frequency = <48000000>; | 281 | clock-frequency = <48000000>; |
240 | }; | 282 | }; |
241 | 283 | ||
242 | uart6: serial@48068000 { | 284 | uart6: serial@48068000 { |
243 | compatible = "ti,omap6-uart"; | 285 | compatible = "ti,omap4-uart"; |
286 | reg = <0x48068000 0x100>; | ||
287 | interrupts = <0 106 0x4>; | ||
244 | ti,hwmods = "uart6"; | 288 | ti,hwmods = "uart6"; |
245 | clock-frequency = <48000000>; | 289 | clock-frequency = <48000000>; |
246 | }; | 290 | }; |
247 | 291 | ||
248 | mmc1: mmc@4809c000 { | 292 | mmc1: mmc@4809c000 { |
249 | compatible = "ti,omap4-hsmmc"; | 293 | compatible = "ti,omap4-hsmmc"; |
294 | reg = <0x4809c000 0x400>; | ||
295 | interrupts = <0 83 0x4>; | ||
250 | ti,hwmods = "mmc1"; | 296 | ti,hwmods = "mmc1"; |
251 | ti,dual-volt; | 297 | ti,dual-volt; |
252 | ti,needs-special-reset; | 298 | ti,needs-special-reset; |
@@ -254,24 +300,32 @@ | |||
254 | 300 | ||
255 | mmc2: mmc@480b4000 { | 301 | mmc2: mmc@480b4000 { |
256 | compatible = "ti,omap4-hsmmc"; | 302 | compatible = "ti,omap4-hsmmc"; |
303 | reg = <0x480b4000 0x400>; | ||
304 | interrupts = <0 86 0x4>; | ||
257 | ti,hwmods = "mmc2"; | 305 | ti,hwmods = "mmc2"; |
258 | ti,needs-special-reset; | 306 | ti,needs-special-reset; |
259 | }; | 307 | }; |
260 | 308 | ||
261 | mmc3: mmc@480ad000 { | 309 | mmc3: mmc@480ad000 { |
262 | compatible = "ti,omap4-hsmmc"; | 310 | compatible = "ti,omap4-hsmmc"; |
311 | reg = <0x480ad000 0x400>; | ||
312 | interrupts = <0 94 0x4>; | ||
263 | ti,hwmods = "mmc3"; | 313 | ti,hwmods = "mmc3"; |
264 | ti,needs-special-reset; | 314 | ti,needs-special-reset; |
265 | }; | 315 | }; |
266 | 316 | ||
267 | mmc4: mmc@480d1000 { | 317 | mmc4: mmc@480d1000 { |
268 | compatible = "ti,omap4-hsmmc"; | 318 | compatible = "ti,omap4-hsmmc"; |
319 | reg = <0x480d1000 0x400>; | ||
320 | interrupts = <0 96 0x4>; | ||
269 | ti,hwmods = "mmc4"; | 321 | ti,hwmods = "mmc4"; |
270 | ti,needs-special-reset; | 322 | ti,needs-special-reset; |
271 | }; | 323 | }; |
272 | 324 | ||
273 | mmc5: mmc@480d5000 { | 325 | mmc5: mmc@480d5000 { |
274 | compatible = "ti,omap4-hsmmc"; | 326 | compatible = "ti,omap4-hsmmc"; |
327 | reg = <0x480d5000 0x400>; | ||
328 | interrupts = <0 59 0x4>; | ||
275 | ti,hwmods = "mmc5"; | 329 | ti,hwmods = "mmc5"; |
276 | ti,needs-special-reset; | 330 | ti,needs-special-reset; |
277 | }; | 331 | }; |
@@ -287,7 +341,6 @@ | |||
287 | <0x49032000 0x7f>; /* L3 Interconnect */ | 341 | <0x49032000 0x7f>; /* L3 Interconnect */ |
288 | reg-names = "mpu", "dma"; | 342 | reg-names = "mpu", "dma"; |
289 | interrupts = <0 112 0x4>; | 343 | interrupts = <0 112 0x4>; |
290 | interrupt-parent = <&gic>; | ||
291 | ti,hwmods = "mcpdm"; | 344 | ti,hwmods = "mcpdm"; |
292 | }; | 345 | }; |
293 | 346 | ||
@@ -297,7 +350,6 @@ | |||
297 | <0x4902e000 0x7f>; /* L3 Interconnect */ | 350 | <0x4902e000 0x7f>; /* L3 Interconnect */ |
298 | reg-names = "mpu", "dma"; | 351 | reg-names = "mpu", "dma"; |
299 | interrupts = <0 114 0x4>; | 352 | interrupts = <0 114 0x4>; |
300 | interrupt-parent = <&gic>; | ||
301 | ti,hwmods = "dmic"; | 353 | ti,hwmods = "dmic"; |
302 | }; | 354 | }; |
303 | 355 | ||
@@ -308,7 +360,6 @@ | |||
308 | reg-names = "mpu", "dma"; | 360 | reg-names = "mpu", "dma"; |
309 | interrupts = <0 17 0x4>; | 361 | interrupts = <0 17 0x4>; |
310 | interrupt-names = "common"; | 362 | interrupt-names = "common"; |
311 | interrupt-parent = <&gic>; | ||
312 | ti,buffer-size = <128>; | 363 | ti,buffer-size = <128>; |
313 | ti,hwmods = "mcbsp1"; | 364 | ti,hwmods = "mcbsp1"; |
314 | }; | 365 | }; |
@@ -320,7 +371,6 @@ | |||
320 | reg-names = "mpu", "dma"; | 371 | reg-names = "mpu", "dma"; |
321 | interrupts = <0 22 0x4>; | 372 | interrupts = <0 22 0x4>; |
322 | interrupt-names = "common"; | 373 | interrupt-names = "common"; |
323 | interrupt-parent = <&gic>; | ||
324 | ti,buffer-size = <128>; | 374 | ti,buffer-size = <128>; |
325 | ti,hwmods = "mcbsp2"; | 375 | ti,hwmods = "mcbsp2"; |
326 | }; | 376 | }; |
@@ -332,9 +382,119 @@ | |||
332 | reg-names = "mpu", "dma"; | 382 | reg-names = "mpu", "dma"; |
333 | interrupts = <0 23 0x4>; | 383 | interrupts = <0 23 0x4>; |
334 | interrupt-names = "common"; | 384 | interrupt-names = "common"; |
335 | interrupt-parent = <&gic>; | ||
336 | ti,buffer-size = <128>; | 385 | ti,buffer-size = <128>; |
337 | ti,hwmods = "mcbsp3"; | 386 | ti,hwmods = "mcbsp3"; |
338 | }; | 387 | }; |
388 | |||
389 | timer1: timer@4ae18000 { | ||
390 | compatible = "ti,omap2-timer"; | ||
391 | reg = <0x4ae18000 0x80>; | ||
392 | interrupts = <0 37 0x4>; | ||
393 | ti,hwmods = "timer1"; | ||
394 | ti,timer-alwon; | ||
395 | }; | ||
396 | |||
397 | timer2: timer@48032000 { | ||
398 | compatible = "ti,omap2-timer"; | ||
399 | reg = <0x48032000 0x80>; | ||
400 | interrupts = <0 38 0x4>; | ||
401 | ti,hwmods = "timer2"; | ||
402 | }; | ||
403 | |||
404 | timer3: timer@48034000 { | ||
405 | compatible = "ti,omap2-timer"; | ||
406 | reg = <0x48034000 0x80>; | ||
407 | interrupts = <0 39 0x4>; | ||
408 | ti,hwmods = "timer3"; | ||
409 | }; | ||
410 | |||
411 | timer4: timer@48036000 { | ||
412 | compatible = "ti,omap2-timer"; | ||
413 | reg = <0x48036000 0x80>; | ||
414 | interrupts = <0 40 0x4>; | ||
415 | ti,hwmods = "timer4"; | ||
416 | }; | ||
417 | |||
418 | timer5: timer@40138000 { | ||
419 | compatible = "ti,omap2-timer"; | ||
420 | reg = <0x40138000 0x80>, | ||
421 | <0x49038000 0x80>; | ||
422 | interrupts = <0 41 0x4>; | ||
423 | ti,hwmods = "timer5"; | ||
424 | ti,timer-dsp; | ||
425 | }; | ||
426 | |||
427 | timer6: timer@4013a000 { | ||
428 | compatible = "ti,omap2-timer"; | ||
429 | reg = <0x4013a000 0x80>, | ||
430 | <0x4903a000 0x80>; | ||
431 | interrupts = <0 42 0x4>; | ||
432 | ti,hwmods = "timer6"; | ||
433 | ti,timer-dsp; | ||
434 | ti,timer-pwm; | ||
435 | }; | ||
436 | |||
437 | timer7: timer@4013c000 { | ||
438 | compatible = "ti,omap2-timer"; | ||
439 | reg = <0x4013c000 0x80>, | ||
440 | <0x4903c000 0x80>; | ||
441 | interrupts = <0 43 0x4>; | ||
442 | ti,hwmods = "timer7"; | ||
443 | ti,timer-dsp; | ||
444 | }; | ||
445 | |||
446 | timer8: timer@4013e000 { | ||
447 | compatible = "ti,omap2-timer"; | ||
448 | reg = <0x4013e000 0x80>, | ||
449 | <0x4903e000 0x80>; | ||
450 | interrupts = <0 44 0x4>; | ||
451 | ti,hwmods = "timer8"; | ||
452 | ti,timer-dsp; | ||
453 | ti,timer-pwm; | ||
454 | }; | ||
455 | |||
456 | timer9: timer@4803e000 { | ||
457 | compatible = "ti,omap2-timer"; | ||
458 | reg = <0x4803e000 0x80>; | ||
459 | interrupts = <0 45 0x4>; | ||
460 | ti,hwmods = "timer9"; | ||
461 | }; | ||
462 | |||
463 | timer10: timer@48086000 { | ||
464 | compatible = "ti,omap2-timer"; | ||
465 | reg = <0x48086000 0x80>; | ||
466 | interrupts = <0 46 0x4>; | ||
467 | ti,hwmods = "timer10"; | ||
468 | }; | ||
469 | |||
470 | timer11: timer@48088000 { | ||
471 | compatible = "ti,omap2-timer"; | ||
472 | reg = <0x48088000 0x80>; | ||
473 | interrupts = <0 47 0x4>; | ||
474 | ti,hwmods = "timer11"; | ||
475 | ti,timer-pwm; | ||
476 | }; | ||
477 | |||
478 | emif1: emif@0x4c000000 { | ||
479 | compatible = "ti,emif-4d5"; | ||
480 | ti,hwmods = "emif1"; | ||
481 | phy-type = <2>; /* DDR PHY type: Intelli PHY */ | ||
482 | reg = <0x4c000000 0x400>; | ||
483 | interrupts = <0 110 0x4>; | ||
484 | hw-caps-read-idle-ctrl; | ||
485 | hw-caps-ll-interface; | ||
486 | hw-caps-temp-alert; | ||
487 | }; | ||
488 | |||
489 | emif2: emif@0x4d000000 { | ||
490 | compatible = "ti,emif-4d5"; | ||
491 | ti,hwmods = "emif2"; | ||
492 | phy-type = <2>; /* DDR PHY type: Intelli PHY */ | ||
493 | reg = <0x4d000000 0x400>; | ||
494 | interrupts = <0 111 0x4>; | ||
495 | hw-caps-read-idle-ctrl; | ||
496 | hw-caps-ll-interface; | ||
497 | hw-caps-temp-alert; | ||
498 | }; | ||
339 | }; | 499 | }; |
340 | }; | 500 | }; |
diff --git a/arch/arm/boot/dts/samsung_k3pe0e000b.dtsi b/arch/arm/boot/dts/samsung_k3pe0e000b.dtsi new file mode 100644 index 000000000000..9657a5cbc3ad --- /dev/null +++ b/arch/arm/boot/dts/samsung_k3pe0e000b.dtsi | |||
@@ -0,0 +1,67 @@ | |||
1 | /* | ||
2 | * Timings and Geometry for Samsung K3PE0E000B memory part | ||
3 | */ | ||
4 | |||
5 | / { | ||
6 | samsung_K3PE0E000B: lpddr2 { | ||
7 | compatible = "Samsung,K3PE0E000B","jedec,lpddr2-s4"; | ||
8 | density = <4096>; | ||
9 | io-width = <32>; | ||
10 | |||
11 | tRPab-min-tck = <3>; | ||
12 | tRCD-min-tck = <3>; | ||
13 | tWR-min-tck = <3>; | ||
14 | tRASmin-min-tck = <3>; | ||
15 | tRRD-min-tck = <2>; | ||
16 | tWTR-min-tck = <2>; | ||
17 | tXP-min-tck = <2>; | ||
18 | tRTP-min-tck = <2>; | ||
19 | tCKE-min-tck = <3>; | ||
20 | tCKESR-min-tck = <3>; | ||
21 | tFAW-min-tck = <8>; | ||
22 | |||
23 | timings_samsung_K3PE0E000B_533MHz: lpddr2-timings@0 { | ||
24 | compatible = "jedec,lpddr2-timings"; | ||
25 | min-freq = <10000000>; | ||
26 | max-freq = <533333333>; | ||
27 | tRPab = <21000>; | ||
28 | tRCD = <18000>; | ||
29 | tWR = <15000>; | ||
30 | tRAS-min = <42000>; | ||
31 | tRRD = <10000>; | ||
32 | tWTR = <7500>; | ||
33 | tXP = <7500>; | ||
34 | tRTP = <7500>; | ||
35 | tCKESR = <15000>; | ||
36 | tDQSCK-max = <5500>; | ||
37 | tFAW = <50000>; | ||
38 | tZQCS = <90000>; | ||
39 | tZQCL = <360000>; | ||
40 | tZQinit = <1000000>; | ||
41 | tRAS-max-ns = <70000>; | ||
42 | tDQSCK-max-derated = <6000>; | ||
43 | }; | ||
44 | |||
45 | timings_samsung_K3PE0E000B_266MHz: lpddr2-timings@1 { | ||
46 | compatible = "jedec,lpddr2-timings"; | ||
47 | min-freq = <10000000>; | ||
48 | max-freq = <266666666>; | ||
49 | tRPab = <21000>; | ||
50 | tRCD = <18000>; | ||
51 | tWR = <15000>; | ||
52 | tRAS-min = <42000>; | ||
53 | tRRD = <10000>; | ||
54 | tWTR = <7500>; | ||
55 | tXP = <7500>; | ||
56 | tRTP = <7500>; | ||
57 | tCKESR = <15000>; | ||
58 | tDQSCK-max = <5500>; | ||
59 | tFAW = <50000>; | ||
60 | tZQCS = <90000>; | ||
61 | tZQCL = <360000>; | ||
62 | tZQinit = <1000000>; | ||
63 | tRAS-max-ns = <70000>; | ||
64 | tDQSCK-max-derated = <6000>; | ||
65 | }; | ||
66 | }; | ||
67 | }; | ||
diff --git a/arch/arm/boot/dts/twl4030.dtsi b/arch/arm/boot/dts/twl4030.dtsi index ff000172c93c..63411b036932 100644 --- a/arch/arm/boot/dts/twl4030.dtsi +++ b/arch/arm/boot/dts/twl4030.dtsi | |||
@@ -37,6 +37,24 @@ | |||
37 | regulator-max-microvolt = <3150000>; | 37 | regulator-max-microvolt = <3150000>; |
38 | }; | 38 | }; |
39 | 39 | ||
40 | vusb1v5: regulator-vusb1v5 { | ||
41 | compatible = "ti,twl4030-vusb1v5"; | ||
42 | }; | ||
43 | |||
44 | vusb1v8: regulator-vusb1v8 { | ||
45 | compatible = "ti,twl4030-vusb1v8"; | ||
46 | }; | ||
47 | |||
48 | vusb3v1: regulator-vusb3v1 { | ||
49 | compatible = "ti,twl4030-vusb3v1"; | ||
50 | }; | ||
51 | |||
52 | vsim: regulator-vsim { | ||
53 | compatible = "ti,twl4030-vsim"; | ||
54 | regulator-min-microvolt = <1800000>; | ||
55 | regulator-max-microvolt = <3000000>; | ||
56 | }; | ||
57 | |||
40 | twl_gpio: gpio { | 58 | twl_gpio: gpio { |
41 | compatible = "ti,twl4030-gpio"; | 59 | compatible = "ti,twl4030-gpio"; |
42 | gpio-controller; | 60 | gpio-controller; |
@@ -44,4 +62,13 @@ | |||
44 | interrupt-controller; | 62 | interrupt-controller; |
45 | #interrupt-cells = <1>; | 63 | #interrupt-cells = <1>; |
46 | }; | 64 | }; |
65 | |||
66 | twl4030-usb { | ||
67 | compatible = "ti,twl4030-usb"; | ||
68 | interrupts = <10>, <4>; | ||
69 | usb1v5-supply = <&vusb1v5>; | ||
70 | usb1v8-supply = <&vusb1v8>; | ||
71 | usb3v1-supply = <&vusb3v1>; | ||
72 | usb_mode = <1>; | ||
73 | }; | ||
47 | }; | 74 | }; |
diff --git a/arch/arm/boot/dts/twl6030.dtsi b/arch/arm/boot/dts/twl6030.dtsi index 123e2c40218a..9996cfc5ee80 100644 --- a/arch/arm/boot/dts/twl6030.dtsi +++ b/arch/arm/boot/dts/twl6030.dtsi | |||
@@ -86,4 +86,9 @@ | |||
86 | clk32kg: regulator-clk32kg { | 86 | clk32kg: regulator-clk32kg { |
87 | compatible = "ti,twl6030-clk32kg"; | 87 | compatible = "ti,twl6030-clk32kg"; |
88 | }; | 88 | }; |
89 | |||
90 | twl_usb_comparator: usb-comparator { | ||
91 | compatible = "ti,twl6030-usb"; | ||
92 | interrupts = <4>, <10>; | ||
93 | }; | ||
89 | }; | 94 | }; |
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 601ecdfb1cf9..d69018028d96 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -97,6 +97,23 @@ DT_MACHINE_START(OMAP3_DT, "Generic OMAP3 (Flattened Device Tree)") | |||
97 | .dt_compat = omap3_boards_compat, | 97 | .dt_compat = omap3_boards_compat, |
98 | .restart = omap_prcm_restart, | 98 | .restart = omap_prcm_restart, |
99 | MACHINE_END | 99 | MACHINE_END |
100 | |||
101 | static const char *omap3_gp_boards_compat[] __initdata = { | ||
102 | "ti,omap3-beagle", | ||
103 | NULL, | ||
104 | }; | ||
105 | |||
106 | DT_MACHINE_START(OMAP3_GP_DT, "Generic OMAP3-GP (Flattened Device Tree)") | ||
107 | .reserve = omap_reserve, | ||
108 | .map_io = omap3_map_io, | ||
109 | .init_early = omap3430_init_early, | ||
110 | .init_irq = omap_intc_of_init, | ||
111 | .handle_irq = omap3_intc_handle_irq, | ||
112 | .init_machine = omap_generic_init, | ||
113 | .timer = &omap3_secure_timer, | ||
114 | .dt_compat = omap3_gp_boards_compat, | ||
115 | .restart = omap_prcm_restart, | ||
116 | MACHINE_END | ||
100 | #endif | 117 | #endif |
101 | 118 | ||
102 | #ifdef CONFIG_SOC_AM33XX | 119 | #ifdef CONFIG_SOC_AM33XX |
diff --git a/arch/arm/mach-omap2/timer.c b/arch/arm/mach-omap2/timer.c index c5bc2cb4d8d3..684d2fc3d485 100644 --- a/arch/arm/mach-omap2/timer.c +++ b/arch/arm/mach-omap2/timer.c | |||
@@ -37,6 +37,8 @@ | |||
37 | #include <linux/clockchips.h> | 37 | #include <linux/clockchips.h> |
38 | #include <linux/slab.h> | 38 | #include <linux/slab.h> |
39 | #include <linux/of.h> | 39 | #include <linux/of.h> |
40 | #include <linux/of_address.h> | ||
41 | #include <linux/of_irq.h> | ||
40 | 42 | ||
41 | #include <asm/mach/time.h> | 43 | #include <asm/mach/time.h> |
42 | #include <asm/smp_twd.h> | 44 | #include <asm/smp_twd.h> |
@@ -67,11 +69,13 @@ | |||
67 | #define OMAP3_CLKEV_SOURCE OMAP3_32K_SOURCE | 69 | #define OMAP3_CLKEV_SOURCE OMAP3_32K_SOURCE |
68 | #define OMAP4_CLKEV_SOURCE OMAP4_32K_SOURCE | 70 | #define OMAP4_CLKEV_SOURCE OMAP4_32K_SOURCE |
69 | #define OMAP3_SECURE_TIMER 12 | 71 | #define OMAP3_SECURE_TIMER 12 |
72 | #define TIMER_PROP_SECURE "ti,timer-secure" | ||
70 | #else | 73 | #else |
71 | #define OMAP2_CLKEV_SOURCE OMAP2_MPU_SOURCE | 74 | #define OMAP2_CLKEV_SOURCE OMAP2_MPU_SOURCE |
72 | #define OMAP3_CLKEV_SOURCE OMAP3_MPU_SOURCE | 75 | #define OMAP3_CLKEV_SOURCE OMAP3_MPU_SOURCE |
73 | #define OMAP4_CLKEV_SOURCE OMAP4_MPU_SOURCE | 76 | #define OMAP4_CLKEV_SOURCE OMAP4_MPU_SOURCE |
74 | #define OMAP3_SECURE_TIMER 1 | 77 | #define OMAP3_SECURE_TIMER 1 |
78 | #define TIMER_PROP_SECURE "ti,timer-alwon" | ||
75 | #endif | 79 | #endif |
76 | 80 | ||
77 | #define REALTIME_COUNTER_BASE 0x48243200 | 81 | #define REALTIME_COUNTER_BASE 0x48243200 |
@@ -145,36 +149,141 @@ static struct clock_event_device clockevent_gpt = { | |||
145 | .set_mode = omap2_gp_timer_set_mode, | 149 | .set_mode = omap2_gp_timer_set_mode, |
146 | }; | 150 | }; |
147 | 151 | ||
152 | static struct property device_disabled = { | ||
153 | .name = "status", | ||
154 | .length = sizeof("disabled"), | ||
155 | .value = "disabled", | ||
156 | }; | ||
157 | |||
158 | static struct of_device_id omap_timer_match[] __initdata = { | ||
159 | { .compatible = "ti,omap2-timer", }, | ||
160 | { } | ||
161 | }; | ||
162 | |||
163 | static struct of_device_id omap_counter_match[] __initdata = { | ||
164 | { .compatible = "ti,omap-counter32k", }, | ||
165 | { } | ||
166 | }; | ||
167 | |||
168 | /** | ||
169 | * omap_get_timer_dt - get a timer using device-tree | ||
170 | * @match - device-tree match structure for matching a device type | ||
171 | * @property - optional timer property to match | ||
172 | * | ||
173 | * Helper function to get a timer during early boot using device-tree for use | ||
174 | * as kernel system timer. Optionally, the property argument can be used to | ||
175 | * select a timer with a specific property. Once a timer is found then mark | ||
176 | * the timer node in device-tree as disabled, to prevent the kernel from | ||
177 | * registering this timer as a platform device and so no one else can use it. | ||
178 | */ | ||
179 | static struct device_node * __init omap_get_timer_dt(struct of_device_id *match, | ||
180 | const char *property) | ||
181 | { | ||
182 | struct device_node *np; | ||
183 | |||
184 | for_each_matching_node(np, match) { | ||
185 | if (!of_device_is_available(np)) { | ||
186 | of_node_put(np); | ||
187 | continue; | ||
188 | } | ||
189 | |||
190 | if (property && !of_get_property(np, property, NULL)) { | ||
191 | of_node_put(np); | ||
192 | continue; | ||
193 | } | ||
194 | |||
195 | prom_add_property(np, &device_disabled); | ||
196 | return np; | ||
197 | } | ||
198 | |||
199 | return NULL; | ||
200 | } | ||
201 | |||
202 | /** | ||
203 | * omap_dmtimer_init - initialisation function when device tree is used | ||
204 | * | ||
205 | * For secure OMAP3 devices, timers with device type "timer-secure" cannot | ||
206 | * be used by the kernel as they are reserved. Therefore, to prevent the | ||
207 | * kernel registering these devices remove them dynamically from the device | ||
208 | * tree on boot. | ||
209 | */ | ||
210 | void __init omap_dmtimer_init(void) | ||
211 | { | ||
212 | struct device_node *np; | ||
213 | |||
214 | if (!cpu_is_omap34xx()) | ||
215 | return; | ||
216 | |||
217 | /* If we are a secure device, remove any secure timer nodes */ | ||
218 | if ((omap_type() != OMAP2_DEVICE_TYPE_GP)) { | ||
219 | np = omap_get_timer_dt(omap_timer_match, "ti,timer-secure"); | ||
220 | if (np) | ||
221 | of_node_put(np); | ||
222 | } | ||
223 | } | ||
224 | |||
148 | static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, | 225 | static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, |
149 | int gptimer_id, | 226 | int gptimer_id, |
150 | const char *fck_source) | 227 | const char *fck_source, |
228 | const char *property) | ||
151 | { | 229 | { |
152 | char name[10]; /* 10 = sizeof("gptXX_Xck0") */ | 230 | char name[10]; /* 10 = sizeof("gptXX_Xck0") */ |
231 | const char *oh_name; | ||
232 | struct device_node *np; | ||
153 | struct omap_hwmod *oh; | 233 | struct omap_hwmod *oh; |
154 | struct resource irq_rsrc, mem_rsrc; | 234 | struct resource irq_rsrc, mem_rsrc; |
155 | size_t size; | 235 | size_t size; |
156 | int res = 0; | 236 | int res = 0; |
157 | int r; | 237 | int r; |
158 | 238 | ||
159 | sprintf(name, "timer%d", gptimer_id); | 239 | if (of_have_populated_dt()) { |
160 | omap_hwmod_setup_one(name); | 240 | np = omap_get_timer_dt(omap_timer_match, NULL); |
161 | oh = omap_hwmod_lookup(name); | 241 | if (!np) |
242 | return -ENODEV; | ||
243 | |||
244 | of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); | ||
245 | if (!oh_name) | ||
246 | return -ENODEV; | ||
247 | |||
248 | timer->irq = irq_of_parse_and_map(np, 0); | ||
249 | if (!timer->irq) | ||
250 | return -ENXIO; | ||
251 | |||
252 | timer->io_base = of_iomap(np, 0); | ||
253 | |||
254 | of_node_put(np); | ||
255 | } else { | ||
256 | if (omap_dm_timer_reserve_systimer(gptimer_id)) | ||
257 | return -ENODEV; | ||
258 | |||
259 | sprintf(name, "timer%d", gptimer_id); | ||
260 | oh_name = name; | ||
261 | } | ||
262 | |||
263 | omap_hwmod_setup_one(oh_name); | ||
264 | oh = omap_hwmod_lookup(oh_name); | ||
265 | |||
162 | if (!oh) | 266 | if (!oh) |
163 | return -ENODEV; | 267 | return -ENODEV; |
164 | 268 | ||
165 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL, &irq_rsrc); | 269 | if (!of_have_populated_dt()) { |
166 | if (r) | 270 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_IRQ, NULL, |
167 | return -ENXIO; | 271 | &irq_rsrc); |
168 | timer->irq = irq_rsrc.start; | 272 | if (r) |
169 | 273 | return -ENXIO; | |
170 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_MEM, NULL, &mem_rsrc); | 274 | timer->irq = irq_rsrc.start; |
171 | if (r) | 275 | |
172 | return -ENXIO; | 276 | r = omap_hwmod_get_resource_byname(oh, IORESOURCE_MEM, NULL, |
173 | timer->phys_base = mem_rsrc.start; | 277 | &mem_rsrc); |
174 | size = mem_rsrc.end - mem_rsrc.start; | 278 | if (r) |
279 | return -ENXIO; | ||
280 | timer->phys_base = mem_rsrc.start; | ||
281 | size = mem_rsrc.end - mem_rsrc.start; | ||
282 | |||
283 | /* Static mapping, never released */ | ||
284 | timer->io_base = ioremap(timer->phys_base, size); | ||
285 | } | ||
175 | 286 | ||
176 | /* Static mapping, never released */ | ||
177 | timer->io_base = ioremap(timer->phys_base, size); | ||
178 | if (!timer->io_base) | 287 | if (!timer->io_base) |
179 | return -ENXIO; | 288 | return -ENXIO; |
180 | 289 | ||
@@ -185,9 +294,7 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, | |||
185 | 294 | ||
186 | omap_hwmod_enable(oh); | 295 | omap_hwmod_enable(oh); |
187 | 296 | ||
188 | if (omap_dm_timer_reserve_systimer(gptimer_id)) | 297 | /* FIXME: Need to remove hard-coded test on timer ID */ |
189 | return -ENODEV; | ||
190 | |||
191 | if (gptimer_id != 12) { | 298 | if (gptimer_id != 12) { |
192 | struct clk *src; | 299 | struct clk *src; |
193 | 300 | ||
@@ -197,8 +304,8 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, | |||
197 | } else { | 304 | } else { |
198 | res = __omap_dm_timer_set_source(timer->fclk, src); | 305 | res = __omap_dm_timer_set_source(timer->fclk, src); |
199 | if (IS_ERR_VALUE(res)) | 306 | if (IS_ERR_VALUE(res)) |
200 | pr_warning("%s: timer%i cannot set source\n", | 307 | pr_warn("%s: %s cannot set source\n", |
201 | __func__, gptimer_id); | 308 | __func__, oh->name); |
202 | clk_put(src); | 309 | clk_put(src); |
203 | } | 310 | } |
204 | } | 311 | } |
@@ -214,11 +321,12 @@ static int __init omap_dm_timer_init_one(struct omap_dm_timer *timer, | |||
214 | } | 321 | } |
215 | 322 | ||
216 | static void __init omap2_gp_clockevent_init(int gptimer_id, | 323 | static void __init omap2_gp_clockevent_init(int gptimer_id, |
217 | const char *fck_source) | 324 | const char *fck_source, |
325 | const char *property) | ||
218 | { | 326 | { |
219 | int res; | 327 | int res; |
220 | 328 | ||
221 | res = omap_dm_timer_init_one(&clkev, gptimer_id, fck_source); | 329 | res = omap_dm_timer_init_one(&clkev, gptimer_id, fck_source, property); |
222 | BUG_ON(res); | 330 | BUG_ON(res); |
223 | 331 | ||
224 | omap2_gp_timer_irq.dev_id = &clkev; | 332 | omap2_gp_timer_irq.dev_id = &clkev; |
@@ -275,11 +383,26 @@ static u32 notrace dmtimer_read_sched_clock(void) | |||
275 | static int __init omap2_sync32k_clocksource_init(void) | 383 | static int __init omap2_sync32k_clocksource_init(void) |
276 | { | 384 | { |
277 | int ret; | 385 | int ret; |
386 | struct device_node *np = NULL; | ||
278 | struct omap_hwmod *oh; | 387 | struct omap_hwmod *oh; |
279 | void __iomem *vbase; | 388 | void __iomem *vbase; |
280 | const char *oh_name = "counter_32k"; | 389 | const char *oh_name = "counter_32k"; |
281 | 390 | ||
282 | /* | 391 | /* |
392 | * If device-tree is present, then search the DT blob | ||
393 | * to see if the 32kHz counter is supported. | ||
394 | */ | ||
395 | if (of_have_populated_dt()) { | ||
396 | np = omap_get_timer_dt(omap_counter_match, NULL); | ||
397 | if (!np) | ||
398 | return -ENODEV; | ||
399 | |||
400 | of_property_read_string_index(np, "ti,hwmods", 0, &oh_name); | ||
401 | if (!oh_name) | ||
402 | return -ENODEV; | ||
403 | } | ||
404 | |||
405 | /* | ||
283 | * First check hwmod data is available for sync32k counter | 406 | * First check hwmod data is available for sync32k counter |
284 | */ | 407 | */ |
285 | oh = omap_hwmod_lookup(oh_name); | 408 | oh = omap_hwmod_lookup(oh_name); |
@@ -288,7 +411,13 @@ static int __init omap2_sync32k_clocksource_init(void) | |||
288 | 411 | ||
289 | omap_hwmod_setup_one(oh_name); | 412 | omap_hwmod_setup_one(oh_name); |
290 | 413 | ||
291 | vbase = omap_hwmod_get_mpu_rt_va(oh); | 414 | if (np) { |
415 | vbase = of_iomap(np, 0); | ||
416 | of_node_put(np); | ||
417 | } else { | ||
418 | vbase = omap_hwmod_get_mpu_rt_va(oh); | ||
419 | } | ||
420 | |||
292 | if (!vbase) { | 421 | if (!vbase) { |
293 | pr_warn("%s: failed to get counter_32k resource\n", __func__); | 422 | pr_warn("%s: failed to get counter_32k resource\n", __func__); |
294 | return -ENXIO; | 423 | return -ENXIO; |
@@ -322,7 +451,7 @@ static void __init omap2_gptimer_clocksource_init(int gptimer_id, | |||
322 | { | 451 | { |
323 | int res; | 452 | int res; |
324 | 453 | ||
325 | res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source); | 454 | res = omap_dm_timer_init_one(&clksrc, gptimer_id, fck_source, NULL); |
326 | BUG_ON(res); | 455 | BUG_ON(res); |
327 | 456 | ||
328 | __omap_dm_timer_load_start(&clksrc, | 457 | __omap_dm_timer_load_start(&clksrc, |
@@ -434,11 +563,12 @@ static inline void __init realtime_counter_init(void) | |||
434 | {} | 563 | {} |
435 | #endif | 564 | #endif |
436 | 565 | ||
437 | #define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src, \ | 566 | #define OMAP_SYS_TIMER_INIT(name, clkev_nr, clkev_src, clkev_prop, \ |
438 | clksrc_nr, clksrc_src) \ | 567 | clksrc_nr, clksrc_src) \ |
439 | static void __init omap##name##_timer_init(void) \ | 568 | static void __init omap##name##_timer_init(void) \ |
440 | { \ | 569 | { \ |
441 | omap2_gp_clockevent_init((clkev_nr), clkev_src); \ | 570 | omap_dmtimer_init(); \ |
571 | omap2_gp_clockevent_init((clkev_nr), clkev_src, clkev_prop); \ | ||
442 | omap2_clocksource_init((clksrc_nr), clksrc_src); \ | 572 | omap2_clocksource_init((clksrc_nr), clksrc_src); \ |
443 | } | 573 | } |
444 | 574 | ||
@@ -448,20 +578,23 @@ struct sys_timer omap##name##_timer = { \ | |||
448 | }; | 578 | }; |
449 | 579 | ||
450 | #ifdef CONFIG_ARCH_OMAP2 | 580 | #ifdef CONFIG_ARCH_OMAP2 |
451 | OMAP_SYS_TIMER_INIT(2, 1, OMAP2_CLKEV_SOURCE, 2, OMAP2_MPU_SOURCE) | 581 | OMAP_SYS_TIMER_INIT(2, 1, OMAP2_CLKEV_SOURCE, "ti,timer-alwon", |
582 | 2, OMAP2_MPU_SOURCE) | ||
452 | OMAP_SYS_TIMER(2) | 583 | OMAP_SYS_TIMER(2) |
453 | #endif | 584 | #endif |
454 | 585 | ||
455 | #ifdef CONFIG_ARCH_OMAP3 | 586 | #ifdef CONFIG_ARCH_OMAP3 |
456 | OMAP_SYS_TIMER_INIT(3, 1, OMAP3_CLKEV_SOURCE, 2, OMAP3_MPU_SOURCE) | 587 | OMAP_SYS_TIMER_INIT(3, 1, OMAP3_CLKEV_SOURCE, "ti,timer-alwon", |
588 | 2, OMAP3_MPU_SOURCE) | ||
457 | OMAP_SYS_TIMER(3) | 589 | OMAP_SYS_TIMER(3) |
458 | OMAP_SYS_TIMER_INIT(3_secure, OMAP3_SECURE_TIMER, OMAP3_CLKEV_SOURCE, | 590 | OMAP_SYS_TIMER_INIT(3_secure, OMAP3_SECURE_TIMER, OMAP3_CLKEV_SOURCE, |
459 | 2, OMAP3_MPU_SOURCE) | 591 | TIMER_PROP_SECURE, 2, OMAP3_MPU_SOURCE) |
460 | OMAP_SYS_TIMER(3_secure) | 592 | OMAP_SYS_TIMER(3_secure) |
461 | #endif | 593 | #endif |
462 | 594 | ||
463 | #ifdef CONFIG_SOC_AM33XX | 595 | #ifdef CONFIG_SOC_AM33XX |
464 | OMAP_SYS_TIMER_INIT(3_am33xx, 1, OMAP4_MPU_SOURCE, 2, OMAP4_MPU_SOURCE) | 596 | OMAP_SYS_TIMER_INIT(3_am33xx, 1, OMAP4_MPU_SOURCE, "ti,timer-alwon", |
597 | 2, OMAP4_MPU_SOURCE) | ||
465 | OMAP_SYS_TIMER(3_am33xx) | 598 | OMAP_SYS_TIMER(3_am33xx) |
466 | #endif | 599 | #endif |
467 | 600 | ||
@@ -473,7 +606,7 @@ static DEFINE_TWD_LOCAL_TIMER(twd_local_timer, | |||
473 | 606 | ||
474 | static void __init omap4_timer_init(void) | 607 | static void __init omap4_timer_init(void) |
475 | { | 608 | { |
476 | omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE); | 609 | omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE, "ti,timer-alwon"); |
477 | omap2_clocksource_init(2, OMAP4_MPU_SOURCE); | 610 | omap2_clocksource_init(2, OMAP4_MPU_SOURCE); |
478 | #ifdef CONFIG_LOCAL_TIMERS | 611 | #ifdef CONFIG_LOCAL_TIMERS |
479 | /* Local timers are not supprted on OMAP4430 ES1.0 */ | 612 | /* Local timers are not supprted on OMAP4430 ES1.0 */ |
@@ -499,7 +632,7 @@ static void __init omap5_timer_init(void) | |||
499 | { | 632 | { |
500 | int err; | 633 | int err; |
501 | 634 | ||
502 | omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE); | 635 | omap2_gp_clockevent_init(1, OMAP4_CLKEV_SOURCE, "ti,timer-alwon"); |
503 | omap2_clocksource_init(2, OMAP4_MPU_SOURCE); | 636 | omap2_clocksource_init(2, OMAP4_MPU_SOURCE); |
504 | realtime_counter_init(); | 637 | realtime_counter_init(); |
505 | 638 | ||
@@ -586,6 +719,10 @@ static int __init omap2_dm_timer_init(void) | |||
586 | { | 719 | { |
587 | int ret; | 720 | int ret; |
588 | 721 | ||
722 | /* If dtb is there, the devices will be created dynamically */ | ||
723 | if (of_have_populated_dt()) | ||
724 | return -ENODEV; | ||
725 | |||
589 | ret = omap_hwmod_for_each_by_class("timer", omap_timer_init, NULL); | 726 | ret = omap_hwmod_for_each_by_class("timer", omap_timer_init, NULL); |
590 | if (unlikely(ret)) { | 727 | if (unlikely(ret)) { |
591 | pr_err("%s: device registration failed.\n", __func__); | 728 | pr_err("%s: device registration failed.\n", __func__); |
diff --git a/arch/arm/plat-omap/dmtimer.c b/arch/arm/plat-omap/dmtimer.c index 82231a75abd6..9dca23e4d6b0 100644 --- a/arch/arm/plat-omap/dmtimer.c +++ b/arch/arm/plat-omap/dmtimer.c | |||
@@ -40,6 +40,8 @@ | |||
40 | #include <linux/device.h> | 40 | #include <linux/device.h> |
41 | #include <linux/err.h> | 41 | #include <linux/err.h> |
42 | #include <linux/pm_runtime.h> | 42 | #include <linux/pm_runtime.h> |
43 | #include <linux/of.h> | ||
44 | #include <linux/of_device.h> | ||
43 | 45 | ||
44 | #include <plat/dmtimer.h> | 46 | #include <plat/dmtimer.h> |
45 | 47 | ||
@@ -209,6 +211,13 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id) | |||
209 | unsigned long flags; | 211 | unsigned long flags; |
210 | int ret = 0; | 212 | int ret = 0; |
211 | 213 | ||
214 | /* Requesting timer by ID is not supported when device tree is used */ | ||
215 | if (of_have_populated_dt()) { | ||
216 | pr_warn("%s: Please use omap_dm_timer_request_by_cap()\n", | ||
217 | __func__); | ||
218 | return NULL; | ||
219 | } | ||
220 | |||
212 | spin_lock_irqsave(&dm_timer_lock, flags); | 221 | spin_lock_irqsave(&dm_timer_lock, flags); |
213 | list_for_each_entry(t, &omap_timer_list, node) { | 222 | list_for_each_entry(t, &omap_timer_list, node) { |
214 | if (t->pdev->id == id && !t->reserved) { | 223 | if (t->pdev->id == id && !t->reserved) { |
@@ -234,6 +243,58 @@ struct omap_dm_timer *omap_dm_timer_request_specific(int id) | |||
234 | } | 243 | } |
235 | EXPORT_SYMBOL_GPL(omap_dm_timer_request_specific); | 244 | EXPORT_SYMBOL_GPL(omap_dm_timer_request_specific); |
236 | 245 | ||
246 | /** | ||
247 | * omap_dm_timer_request_by_cap - Request a timer by capability | ||
248 | * @cap: Bit mask of capabilities to match | ||
249 | * | ||
250 | * Find a timer based upon capabilities bit mask. Callers of this function | ||
251 | * should use the definitions found in the plat/dmtimer.h file under the | ||
252 | * comment "timer capabilities used in hwmod database". Returns pointer to | ||
253 | * timer handle on success and a NULL pointer on failure. | ||
254 | */ | ||
255 | struct omap_dm_timer *omap_dm_timer_request_by_cap(u32 cap) | ||
256 | { | ||
257 | struct omap_dm_timer *timer = NULL, *t; | ||
258 | unsigned long flags; | ||
259 | |||
260 | if (!cap) | ||
261 | return NULL; | ||
262 | |||
263 | spin_lock_irqsave(&dm_timer_lock, flags); | ||
264 | list_for_each_entry(t, &omap_timer_list, node) { | ||
265 | if ((!t->reserved) && ((t->capability & cap) == cap)) { | ||
266 | /* | ||
267 | * If timer is not NULL, we have already found one timer | ||
268 | * but it was not an exact match because it had more | ||
269 | * capabilites that what was required. Therefore, | ||
270 | * unreserve the last timer found and see if this one | ||
271 | * is a better match. | ||
272 | */ | ||
273 | if (timer) | ||
274 | timer->reserved = 0; | ||
275 | |||
276 | timer = t; | ||
277 | timer->reserved = 1; | ||
278 | |||
279 | /* Exit loop early if we find an exact match */ | ||
280 | if (t->capability == cap) | ||
281 | break; | ||
282 | } | ||
283 | } | ||
284 | spin_unlock_irqrestore(&dm_timer_lock, flags); | ||
285 | |||
286 | if (timer && omap_dm_timer_prepare(timer)) { | ||
287 | timer->reserved = 0; | ||
288 | timer = NULL; | ||
289 | } | ||
290 | |||
291 | if (!timer) | ||
292 | pr_debug("%s: timer request failed!\n", __func__); | ||
293 | |||
294 | return timer; | ||
295 | } | ||
296 | EXPORT_SYMBOL_GPL(omap_dm_timer_request_by_cap); | ||
297 | |||
237 | int omap_dm_timer_free(struct omap_dm_timer *timer) | 298 | int omap_dm_timer_free(struct omap_dm_timer *timer) |
238 | { | 299 | { |
239 | if (unlikely(!timer)) | 300 | if (unlikely(!timer)) |
@@ -414,7 +475,7 @@ int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source) | |||
414 | * use the clock framework to set the parent clock. To be removed | 475 | * use the clock framework to set the parent clock. To be removed |
415 | * once OMAP1 migrated to using clock framework for dmtimers | 476 | * once OMAP1 migrated to using clock framework for dmtimers |
416 | */ | 477 | */ |
417 | if (pdata->set_timer_src) | 478 | if (pdata && pdata->set_timer_src) |
418 | return pdata->set_timer_src(timer->pdev, source); | 479 | return pdata->set_timer_src(timer->pdev, source); |
419 | 480 | ||
420 | fclk = clk_get(&timer->pdev->dev, "fck"); | 481 | fclk = clk_get(&timer->pdev->dev, "fck"); |
@@ -696,7 +757,7 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev) | |||
696 | struct device *dev = &pdev->dev; | 757 | struct device *dev = &pdev->dev; |
697 | struct dmtimer_platform_data *pdata = pdev->dev.platform_data; | 758 | struct dmtimer_platform_data *pdata = pdev->dev.platform_data; |
698 | 759 | ||
699 | if (!pdata) { | 760 | if (!pdata && !dev->of_node) { |
700 | dev_err(dev, "%s: no platform data.\n", __func__); | 761 | dev_err(dev, "%s: no platform data.\n", __func__); |
701 | return -ENODEV; | 762 | return -ENODEV; |
702 | } | 763 | } |
@@ -725,12 +786,24 @@ static int __devinit omap_dm_timer_probe(struct platform_device *pdev) | |||
725 | return -ENOMEM; | 786 | return -ENOMEM; |
726 | } | 787 | } |
727 | 788 | ||
728 | timer->id = pdev->id; | 789 | if (dev->of_node) { |
790 | if (of_find_property(dev->of_node, "ti,timer-alwon", NULL)) | ||
791 | timer->capability |= OMAP_TIMER_ALWON; | ||
792 | if (of_find_property(dev->of_node, "ti,timer-dsp", NULL)) | ||
793 | timer->capability |= OMAP_TIMER_HAS_DSP_IRQ; | ||
794 | if (of_find_property(dev->of_node, "ti,timer-pwm", NULL)) | ||
795 | timer->capability |= OMAP_TIMER_HAS_PWM; | ||
796 | if (of_find_property(dev->of_node, "ti,timer-secure", NULL)) | ||
797 | timer->capability |= OMAP_TIMER_SECURE; | ||
798 | } else { | ||
799 | timer->id = pdev->id; | ||
800 | timer->capability = pdata->timer_capability; | ||
801 | timer->reserved = omap_dm_timer_reserved_systimer(timer->id); | ||
802 | timer->get_context_loss_count = pdata->get_context_loss_count; | ||
803 | } | ||
804 | |||
729 | timer->irq = irq->start; | 805 | timer->irq = irq->start; |
730 | timer->reserved = omap_dm_timer_reserved_systimer(timer->id); | ||
731 | timer->pdev = pdev; | 806 | timer->pdev = pdev; |
732 | timer->capability = pdata->timer_capability; | ||
733 | timer->get_context_loss_count = pdata->get_context_loss_count; | ||
734 | 807 | ||
735 | /* Skip pm_runtime_enable for OMAP1 */ | 808 | /* Skip pm_runtime_enable for OMAP1 */ |
736 | if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) { | 809 | if (!(timer->capability & OMAP_TIMER_NEEDS_RESET)) { |
@@ -770,7 +843,8 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev) | |||
770 | 843 | ||
771 | spin_lock_irqsave(&dm_timer_lock, flags); | 844 | spin_lock_irqsave(&dm_timer_lock, flags); |
772 | list_for_each_entry(timer, &omap_timer_list, node) | 845 | list_for_each_entry(timer, &omap_timer_list, node) |
773 | if (timer->pdev->id == pdev->id) { | 846 | if (!strcmp(dev_name(&timer->pdev->dev), |
847 | dev_name(&pdev->dev))) { | ||
774 | list_del(&timer->node); | 848 | list_del(&timer->node); |
775 | ret = 0; | 849 | ret = 0; |
776 | break; | 850 | break; |
@@ -780,11 +854,18 @@ static int __devexit omap_dm_timer_remove(struct platform_device *pdev) | |||
780 | return ret; | 854 | return ret; |
781 | } | 855 | } |
782 | 856 | ||
857 | static const struct of_device_id omap_timer_match[] = { | ||
858 | { .compatible = "ti,omap2-timer", }, | ||
859 | {}, | ||
860 | }; | ||
861 | MODULE_DEVICE_TABLE(of, omap_timer_match); | ||
862 | |||
783 | static struct platform_driver omap_dm_timer_driver = { | 863 | static struct platform_driver omap_dm_timer_driver = { |
784 | .probe = omap_dm_timer_probe, | 864 | .probe = omap_dm_timer_probe, |
785 | .remove = __devexit_p(omap_dm_timer_remove), | 865 | .remove = __devexit_p(omap_dm_timer_remove), |
786 | .driver = { | 866 | .driver = { |
787 | .name = "omap_timer", | 867 | .name = "omap_timer", |
868 | .of_match_table = of_match_ptr(omap_timer_match), | ||
788 | }, | 869 | }, |
789 | }; | 870 | }; |
790 | 871 | ||
diff --git a/arch/arm/plat-omap/include/plat/dmtimer.h b/arch/arm/plat-omap/include/plat/dmtimer.h index 3f5b9cfd9c0b..f8943c8f9dbf 100644 --- a/arch/arm/plat-omap/include/plat/dmtimer.h +++ b/arch/arm/plat-omap/include/plat/dmtimer.h | |||
@@ -100,6 +100,7 @@ struct dmtimer_platform_data { | |||
100 | int omap_dm_timer_reserve_systimer(int id); | 100 | int omap_dm_timer_reserve_systimer(int id); |
101 | struct omap_dm_timer *omap_dm_timer_request(void); | 101 | struct omap_dm_timer *omap_dm_timer_request(void); |
102 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); | 102 | struct omap_dm_timer *omap_dm_timer_request_specific(int timer_id); |
103 | struct omap_dm_timer *omap_dm_timer_request_by_cap(u32 cap); | ||
103 | int omap_dm_timer_free(struct omap_dm_timer *timer); | 104 | int omap_dm_timer_free(struct omap_dm_timer *timer); |
104 | void omap_dm_timer_enable(struct omap_dm_timer *timer); | 105 | void omap_dm_timer_enable(struct omap_dm_timer *timer); |
105 | void omap_dm_timer_disable(struct omap_dm_timer *timer); | 106 | void omap_dm_timer_disable(struct omap_dm_timer *timer); |