diff options
63 files changed, 2972 insertions, 987 deletions
diff --git a/Documentation/devicetree/bindings/arm/fsl.txt b/Documentation/devicetree/bindings/arm/fsl.txt index bfbc771a65f8..ac9e7516756e 100644 --- a/Documentation/devicetree/bindings/arm/fsl.txt +++ b/Documentation/devicetree/bindings/arm/fsl.txt | |||
@@ -1,6 +1,14 @@ | |||
1 | Freescale i.MX Platforms Device Tree Bindings | 1 | Freescale i.MX Platforms Device Tree Bindings |
2 | ----------------------------------------------- | 2 | ----------------------------------------------- |
3 | 3 | ||
4 | i.MX23 Evaluation Kit | ||
5 | Required root node properties: | ||
6 | - compatible = "fsl,imx23-evk", "fsl,imx23"; | ||
7 | |||
8 | i.MX28 Evaluation Kit | ||
9 | Required root node properties: | ||
10 | - compatible = "fsl,imx28-evk", "fsl,imx28"; | ||
11 | |||
4 | i.MX51 Babbage Board | 12 | i.MX51 Babbage Board |
5 | Required root node properties: | 13 | Required root node properties: |
6 | - compatible = "fsl,imx51-babbage", "fsl,imx51"; | 14 | - compatible = "fsl,imx51-babbage", "fsl,imx51"; |
@@ -29,6 +37,10 @@ i.MX6 Quad SABRE Lite Board | |||
29 | Required root node properties: | 37 | Required root node properties: |
30 | - compatible = "fsl,imx6q-sabrelite", "fsl,imx6q"; | 38 | - compatible = "fsl,imx6q-sabrelite", "fsl,imx6q"; |
31 | 39 | ||
40 | i.MX6 Quad SABRE Smart Device Board | ||
41 | Required root node properties: | ||
42 | - compatible = "fsl,imx6q-sabresd", "fsl,imx6q"; | ||
43 | |||
32 | Generic i.MX boards | 44 | Generic i.MX boards |
33 | ------------------- | 45 | ------------------- |
34 | 46 | ||
diff --git a/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt new file mode 100644 index 000000000000..ded0398d3bdc --- /dev/null +++ b/Documentation/devicetree/bindings/dma/fsl-mxs-dma.txt | |||
@@ -0,0 +1,19 @@ | |||
1 | * Freescale MXS DMA | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : Should be "fsl,<chip>-dma-apbh" or "fsl,<chip>-dma-apbx" | ||
5 | - reg : Should contain registers location and length | ||
6 | |||
7 | Supported chips: | ||
8 | imx23, imx28. | ||
9 | |||
10 | Examples: | ||
11 | dma-apbh@80004000 { | ||
12 | compatible = "fsl,imx28-dma-apbh"; | ||
13 | reg = <0x80004000 2000>; | ||
14 | }; | ||
15 | |||
16 | dma-apbx@80024000 { | ||
17 | compatible = "fsl,imx28-dma-apbx"; | ||
18 | reg = <0x80024000 2000>; | ||
19 | }; | ||
diff --git a/Documentation/devicetree/bindings/gpio/gpio-mxs.txt b/Documentation/devicetree/bindings/gpio/gpio-mxs.txt new file mode 100644 index 000000000000..0c35673f7a3e --- /dev/null +++ b/Documentation/devicetree/bindings/gpio/gpio-mxs.txt | |||
@@ -0,0 +1,87 @@ | |||
1 | * Freescale MXS GPIO controller | ||
2 | |||
3 | The Freescale MXS GPIO controller is part of MXS PIN controller. The | ||
4 | GPIOs are organized in port/bank. Each port consists of 32 GPIOs. | ||
5 | |||
6 | As the GPIO controller is embedded in the PIN controller and all the | ||
7 | GPIO ports share the same IO space with PIN controller, the GPIO node | ||
8 | will be represented as sub-nodes of MXS pinctrl node. | ||
9 | |||
10 | Required properties for GPIO node: | ||
11 | - compatible : Should be "fsl,<soc>-gpio". The supported SoCs include | ||
12 | imx23 and imx28. | ||
13 | - interrupts : Should be the port interrupt shared by all 32 pins. | ||
14 | - gpio-controller : Marks the device node as a gpio controller. | ||
15 | - #gpio-cells : Should be two. The first cell is the pin number and | ||
16 | the second cell is used to specify optional parameters (currently | ||
17 | unused). | ||
18 | - interrupt-controller: Marks the device node as an interrupt controller. | ||
19 | - #interrupt-cells : Should be 2. The first cell is the GPIO number. | ||
20 | The second cell bits[3:0] is used to specify trigger type and level flags: | ||
21 | 1 = low-to-high edge triggered. | ||
22 | 2 = high-to-low edge triggered. | ||
23 | 4 = active high level-sensitive. | ||
24 | 8 = active low level-sensitive. | ||
25 | |||
26 | Note: Each GPIO port should have an alias correctly numbered in "aliases" | ||
27 | node. | ||
28 | |||
29 | Examples: | ||
30 | |||
31 | aliases { | ||
32 | gpio0 = &gpio0; | ||
33 | gpio1 = &gpio1; | ||
34 | gpio2 = &gpio2; | ||
35 | gpio3 = &gpio3; | ||
36 | gpio4 = &gpio4; | ||
37 | }; | ||
38 | |||
39 | pinctrl@80018000 { | ||
40 | compatible = "fsl,imx28-pinctrl", "simple-bus"; | ||
41 | reg = <0x80018000 2000>; | ||
42 | |||
43 | gpio0: gpio@0 { | ||
44 | compatible = "fsl,imx28-gpio"; | ||
45 | interrupts = <127>; | ||
46 | gpio-controller; | ||
47 | #gpio-cells = <2>; | ||
48 | interrupt-controller; | ||
49 | #interrupt-cells = <2>; | ||
50 | }; | ||
51 | |||
52 | gpio1: gpio@1 { | ||
53 | compatible = "fsl,imx28-gpio"; | ||
54 | interrupts = <126>; | ||
55 | gpio-controller; | ||
56 | #gpio-cells = <2>; | ||
57 | interrupt-controller; | ||
58 | #interrupt-cells = <2>; | ||
59 | }; | ||
60 | |||
61 | gpio2: gpio@2 { | ||
62 | compatible = "fsl,imx28-gpio"; | ||
63 | interrupts = <125>; | ||
64 | gpio-controller; | ||
65 | #gpio-cells = <2>; | ||
66 | interrupt-controller; | ||
67 | #interrupt-cells = <2>; | ||
68 | }; | ||
69 | |||
70 | gpio3: gpio@3 { | ||
71 | compatible = "fsl,imx28-gpio"; | ||
72 | interrupts = <124>; | ||
73 | gpio-controller; | ||
74 | #gpio-cells = <2>; | ||
75 | interrupt-controller; | ||
76 | #interrupt-cells = <2>; | ||
77 | }; | ||
78 | |||
79 | gpio4: gpio@4 { | ||
80 | compatible = "fsl,imx28-gpio"; | ||
81 | interrupts = <123>; | ||
82 | gpio-controller; | ||
83 | #gpio-cells = <2>; | ||
84 | interrupt-controller; | ||
85 | #interrupt-cells = <2>; | ||
86 | }; | ||
87 | }; | ||
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mxs.txt b/Documentation/devicetree/bindings/i2c/i2c-mxs.txt new file mode 100644 index 000000000000..1bfc02de1b0c --- /dev/null +++ b/Documentation/devicetree/bindings/i2c/i2c-mxs.txt | |||
@@ -0,0 +1,16 @@ | |||
1 | * Freescale MXS Inter IC (I2C) Controller | ||
2 | |||
3 | Required properties: | ||
4 | - compatible: Should be "fsl,<chip>-i2c" | ||
5 | - reg: Should contain registers location and length | ||
6 | - interrupts: Should contain ERROR and DMA interrupts | ||
7 | |||
8 | Examples: | ||
9 | |||
10 | i2c0: i2c@80058000 { | ||
11 | #address-cells = <1>; | ||
12 | #size-cells = <0>; | ||
13 | compatible = "fsl,imx28-i2c"; | ||
14 | reg = <0x80058000 2000>; | ||
15 | interrupts = <111 68>; | ||
16 | }; | ||
diff --git a/Documentation/devicetree/bindings/mmc/mxs-mmc.txt b/Documentation/devicetree/bindings/mmc/mxs-mmc.txt new file mode 100644 index 000000000000..14d870a9e3db --- /dev/null +++ b/Documentation/devicetree/bindings/mmc/mxs-mmc.txt | |||
@@ -0,0 +1,25 @@ | |||
1 | * Freescale MXS MMC controller | ||
2 | |||
3 | The Freescale MXS Synchronous Serial Ports (SSP) can act as a MMC controller | ||
4 | to support MMC, SD, and SDIO types of memory cards. | ||
5 | |||
6 | Required properties: | ||
7 | - compatible: Should be "fsl,<chip>-mmc". The supported chips include | ||
8 | imx23 and imx28. | ||
9 | - reg: Should contain registers location and length | ||
10 | - interrupts: Should contain ERROR and DMA interrupts | ||
11 | - fsl,ssp-dma-channel: APBH DMA channel for the SSP | ||
12 | - bus-width: Number of data lines, can be <1>, <4>, or <8> | ||
13 | |||
14 | Optional properties: | ||
15 | - wp-gpios: Specify GPIOs for write protection | ||
16 | |||
17 | Examples: | ||
18 | |||
19 | ssp0: ssp@80010000 { | ||
20 | compatible = "fsl,imx28-mmc"; | ||
21 | reg = <0x80010000 2000>; | ||
22 | interrupts = <96 82>; | ||
23 | fsl,ssp-dma-channel = <0>; | ||
24 | bus-width = <8>; | ||
25 | }; | ||
diff --git a/Documentation/devicetree/bindings/net/fsl-fec.txt b/Documentation/devicetree/bindings/net/fsl-fec.txt index de439517dff0..7ab9e1a2d8be 100644 --- a/Documentation/devicetree/bindings/net/fsl-fec.txt +++ b/Documentation/devicetree/bindings/net/fsl-fec.txt | |||
@@ -14,7 +14,7 @@ Optional properties: | |||
14 | 14 | ||
15 | Example: | 15 | Example: |
16 | 16 | ||
17 | fec@83fec000 { | 17 | ethernet@83fec000 { |
18 | compatible = "fsl,imx51-fec", "fsl,imx27-fec"; | 18 | compatible = "fsl,imx51-fec", "fsl,imx27-fec"; |
19 | reg = <0x83fec000 0x4000>; | 19 | reg = <0x83fec000 0x4000>; |
20 | interrupts = <87>; | 20 | interrupts = <87>; |
diff --git a/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt b/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt index a9c0406280e8..b462d0c54823 100644 --- a/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt +++ b/Documentation/devicetree/bindings/tty/serial/fsl-imx-uart.txt | |||
@@ -11,7 +11,7 @@ Optional properties: | |||
11 | 11 | ||
12 | Example: | 12 | Example: |
13 | 13 | ||
14 | uart@73fbc000 { | 14 | serial@73fbc000 { |
15 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; | 15 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; |
16 | reg = <0x73fbc000 0x4000>; | 16 | reg = <0x73fbc000 0x4000>; |
17 | interrupts = <31>; | 17 | interrupts = <31>; |
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 515c8c85cbbb..5e7601301b41 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -459,6 +459,7 @@ config ARCH_MXS | |||
459 | select COMMON_CLK | 459 | select COMMON_CLK |
460 | select HAVE_CLK_PREPARE | 460 | select HAVE_CLK_PREPARE |
461 | select PINCTRL | 461 | select PINCTRL |
462 | select USE_OF | ||
462 | help | 463 | help |
463 | Support for Freescale MXS-based family of processors | 464 | Support for Freescale MXS-based family of processors |
464 | 465 | ||
diff --git a/arch/arm/Kconfig.debug b/arch/arm/Kconfig.debug index e561adc1db0c..01a134141216 100644 --- a/arch/arm/Kconfig.debug +++ b/arch/arm/Kconfig.debug | |||
@@ -209,6 +209,14 @@ choice | |||
209 | Say Y here if you want kernel low-level debugging support | 209 | Say Y here if you want kernel low-level debugging support |
210 | on i.MX50 or i.MX53. | 210 | on i.MX50 or i.MX53. |
211 | 211 | ||
212 | config DEBUG_IMX6Q_UART2 | ||
213 | bool "i.MX6Q Debug UART2" | ||
214 | depends on SOC_IMX6Q | ||
215 | help | ||
216 | Say Y here if you want kernel low-level debugging support | ||
217 | on i.MX6Q UART2. This is correct for e.g. the SabreLite | ||
218 | board. | ||
219 | |||
212 | config DEBUG_IMX6Q_UART4 | 220 | config DEBUG_IMX6Q_UART4 |
213 | bool "i.MX6Q Debug UART4" | 221 | bool "i.MX6Q Debug UART4" |
214 | depends on SOC_IMX6Q | 222 | depends on SOC_IMX6Q |
diff --git a/arch/arm/boot/dts/imx23-evk.dts b/arch/arm/boot/dts/imx23-evk.dts new file mode 100644 index 000000000000..70bffa929b65 --- /dev/null +++ b/arch/arm/boot/dts/imx23-evk.dts | |||
@@ -0,0 +1,43 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Freescale Semiconductor, Inc. | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /dts-v1/; | ||
13 | /include/ "imx23.dtsi" | ||
14 | |||
15 | / { | ||
16 | model = "Freescale i.MX23 Evaluation Kit"; | ||
17 | compatible = "fsl,imx23-evk", "fsl,imx23"; | ||
18 | |||
19 | memory { | ||
20 | reg = <0x40000000 0x08000000>; | ||
21 | }; | ||
22 | |||
23 | apb@80000000 { | ||
24 | apbh@80000000 { | ||
25 | ssp0: ssp@80010000 { | ||
26 | compatible = "fsl,imx23-mmc"; | ||
27 | pinctrl-names = "default"; | ||
28 | pinctrl-0 = <&mmc0_8bit_pins_a &mmc0_pins_fixup>; | ||
29 | bus-width = <8>; | ||
30 | wp-gpios = <&gpio1 30 0>; | ||
31 | status = "okay"; | ||
32 | }; | ||
33 | }; | ||
34 | |||
35 | apbx@80040000 { | ||
36 | duart: serial@80070000 { | ||
37 | pinctrl-names = "default"; | ||
38 | pinctrl-0 = <&duart_pins_a>; | ||
39 | status = "okay"; | ||
40 | }; | ||
41 | }; | ||
42 | }; | ||
43 | }; | ||
diff --git a/arch/arm/boot/dts/imx23.dtsi b/arch/arm/boot/dts/imx23.dtsi new file mode 100644 index 000000000000..8c5f9994f3fc --- /dev/null +++ b/arch/arm/boot/dts/imx23.dtsi | |||
@@ -0,0 +1,295 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Freescale Semiconductor, Inc. | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /include/ "skeleton.dtsi" | ||
13 | |||
14 | / { | ||
15 | interrupt-parent = <&icoll>; | ||
16 | |||
17 | aliases { | ||
18 | gpio0 = &gpio0; | ||
19 | gpio1 = &gpio1; | ||
20 | gpio2 = &gpio2; | ||
21 | }; | ||
22 | |||
23 | cpus { | ||
24 | cpu@0 { | ||
25 | compatible = "arm,arm926ejs"; | ||
26 | }; | ||
27 | }; | ||
28 | |||
29 | apb@80000000 { | ||
30 | compatible = "simple-bus"; | ||
31 | #address-cells = <1>; | ||
32 | #size-cells = <1>; | ||
33 | reg = <0x80000000 0x80000>; | ||
34 | ranges; | ||
35 | |||
36 | apbh@80000000 { | ||
37 | compatible = "simple-bus"; | ||
38 | #address-cells = <1>; | ||
39 | #size-cells = <1>; | ||
40 | reg = <0x80000000 0x40000>; | ||
41 | ranges; | ||
42 | |||
43 | icoll: interrupt-controller@80000000 { | ||
44 | compatible = "fsl,imx23-icoll", "fsl,mxs-icoll"; | ||
45 | interrupt-controller; | ||
46 | #interrupt-cells = <1>; | ||
47 | reg = <0x80000000 0x2000>; | ||
48 | }; | ||
49 | |||
50 | dma-apbh@80004000 { | ||
51 | compatible = "fsl,imx23-dma-apbh"; | ||
52 | reg = <0x80004000 2000>; | ||
53 | }; | ||
54 | |||
55 | ecc@80008000 { | ||
56 | reg = <0x80008000 2000>; | ||
57 | status = "disabled"; | ||
58 | }; | ||
59 | |||
60 | bch@8000a000 { | ||
61 | reg = <0x8000a000 2000>; | ||
62 | status = "disabled"; | ||
63 | }; | ||
64 | |||
65 | gpmi@8000c000 { | ||
66 | reg = <0x8000c000 2000>; | ||
67 | status = "disabled"; | ||
68 | }; | ||
69 | |||
70 | ssp0: ssp@80010000 { | ||
71 | reg = <0x80010000 2000>; | ||
72 | interrupts = <15 14>; | ||
73 | fsl,ssp-dma-channel = <1>; | ||
74 | status = "disabled"; | ||
75 | }; | ||
76 | |||
77 | etm@80014000 { | ||
78 | reg = <0x80014000 2000>; | ||
79 | status = "disabled"; | ||
80 | }; | ||
81 | |||
82 | pinctrl@80018000 { | ||
83 | #address-cells = <1>; | ||
84 | #size-cells = <0>; | ||
85 | compatible = "fsl,imx23-pinctrl", "simple-bus"; | ||
86 | reg = <0x80018000 2000>; | ||
87 | |||
88 | gpio0: gpio@0 { | ||
89 | compatible = "fsl,imx23-gpio", "fsl,mxs-gpio"; | ||
90 | interrupts = <16>; | ||
91 | gpio-controller; | ||
92 | #gpio-cells = <2>; | ||
93 | interrupt-controller; | ||
94 | #interrupt-cells = <2>; | ||
95 | }; | ||
96 | |||
97 | gpio1: gpio@1 { | ||
98 | compatible = "fsl,imx23-gpio", "fsl,mxs-gpio"; | ||
99 | interrupts = <17>; | ||
100 | gpio-controller; | ||
101 | #gpio-cells = <2>; | ||
102 | interrupt-controller; | ||
103 | #interrupt-cells = <2>; | ||
104 | }; | ||
105 | |||
106 | gpio2: gpio@2 { | ||
107 | compatible = "fsl,imx23-gpio", "fsl,mxs-gpio"; | ||
108 | interrupts = <18>; | ||
109 | gpio-controller; | ||
110 | #gpio-cells = <2>; | ||
111 | interrupt-controller; | ||
112 | #interrupt-cells = <2>; | ||
113 | }; | ||
114 | |||
115 | duart_pins_a: duart@0 { | ||
116 | reg = <0>; | ||
117 | fsl,pinmux-ids = <0x11a2 0x11b2>; | ||
118 | fsl,drive-strength = <0>; | ||
119 | fsl,voltage = <1>; | ||
120 | fsl,pull-up = <0>; | ||
121 | }; | ||
122 | |||
123 | mmc0_8bit_pins_a: mmc0-8bit@0 { | ||
124 | reg = <0>; | ||
125 | fsl,pinmux-ids = <0x2020 0x2030 0x2040 | ||
126 | 0x2050 0x0082 0x0092 0x00a2 | ||
127 | 0x00b2 0x2000 0x2010 0x2060>; | ||
128 | fsl,drive-strength = <1>; | ||
129 | fsl,voltage = <1>; | ||
130 | fsl,pull-up = <1>; | ||
131 | }; | ||
132 | |||
133 | mmc0_pins_fixup: mmc0-pins-fixup { | ||
134 | fsl,pinmux-ids = <0x2010 0x2060>; | ||
135 | fsl,pull-up = <0>; | ||
136 | }; | ||
137 | }; | ||
138 | |||
139 | digctl@8001c000 { | ||
140 | reg = <0x8001c000 2000>; | ||
141 | status = "disabled"; | ||
142 | }; | ||
143 | |||
144 | emi@80020000 { | ||
145 | reg = <0x80020000 2000>; | ||
146 | status = "disabled"; | ||
147 | }; | ||
148 | |||
149 | dma-apbx@80024000 { | ||
150 | compatible = "fsl,imx23-dma-apbx"; | ||
151 | reg = <0x80024000 2000>; | ||
152 | }; | ||
153 | |||
154 | dcp@80028000 { | ||
155 | reg = <0x80028000 2000>; | ||
156 | status = "disabled"; | ||
157 | }; | ||
158 | |||
159 | pxp@8002a000 { | ||
160 | reg = <0x8002a000 2000>; | ||
161 | status = "disabled"; | ||
162 | }; | ||
163 | |||
164 | ocotp@8002c000 { | ||
165 | reg = <0x8002c000 2000>; | ||
166 | status = "disabled"; | ||
167 | }; | ||
168 | |||
169 | axi-ahb@8002e000 { | ||
170 | reg = <0x8002e000 2000>; | ||
171 | status = "disabled"; | ||
172 | }; | ||
173 | |||
174 | lcdif@80030000 { | ||
175 | reg = <0x80030000 2000>; | ||
176 | status = "disabled"; | ||
177 | }; | ||
178 | |||
179 | ssp1: ssp@80034000 { | ||
180 | reg = <0x80034000 2000>; | ||
181 | interrupts = <2 20>; | ||
182 | fsl,ssp-dma-channel = <2>; | ||
183 | status = "disabled"; | ||
184 | }; | ||
185 | |||
186 | tvenc@80038000 { | ||
187 | reg = <0x80038000 2000>; | ||
188 | status = "disabled"; | ||
189 | }; | ||
190 | }; | ||
191 | |||
192 | apbx@80040000 { | ||
193 | compatible = "simple-bus"; | ||
194 | #address-cells = <1>; | ||
195 | #size-cells = <1>; | ||
196 | reg = <0x80040000 0x40000>; | ||
197 | ranges; | ||
198 | |||
199 | clkctl@80040000 { | ||
200 | reg = <0x80040000 2000>; | ||
201 | status = "disabled"; | ||
202 | }; | ||
203 | |||
204 | saif0: saif@80042000 { | ||
205 | reg = <0x80042000 2000>; | ||
206 | status = "disabled"; | ||
207 | }; | ||
208 | |||
209 | power@80044000 { | ||
210 | reg = <0x80044000 2000>; | ||
211 | status = "disabled"; | ||
212 | }; | ||
213 | |||
214 | saif1: saif@80046000 { | ||
215 | reg = <0x80046000 2000>; | ||
216 | status = "disabled"; | ||
217 | }; | ||
218 | |||
219 | audio-out@80048000 { | ||
220 | reg = <0x80048000 2000>; | ||
221 | status = "disabled"; | ||
222 | }; | ||
223 | |||
224 | audio-in@8004c000 { | ||
225 | reg = <0x8004c000 2000>; | ||
226 | status = "disabled"; | ||
227 | }; | ||
228 | |||
229 | lradc@80050000 { | ||
230 | reg = <0x80050000 2000>; | ||
231 | status = "disabled"; | ||
232 | }; | ||
233 | |||
234 | spdif@80054000 { | ||
235 | reg = <0x80054000 2000>; | ||
236 | status = "disabled"; | ||
237 | }; | ||
238 | |||
239 | i2c@80058000 { | ||
240 | reg = <0x80058000 2000>; | ||
241 | status = "disabled"; | ||
242 | }; | ||
243 | |||
244 | rtc@8005c000 { | ||
245 | reg = <0x8005c000 2000>; | ||
246 | status = "disabled"; | ||
247 | }; | ||
248 | |||
249 | pwm@80064000 { | ||
250 | reg = <0x80064000 2000>; | ||
251 | status = "disabled"; | ||
252 | }; | ||
253 | |||
254 | timrot@80068000 { | ||
255 | reg = <0x80068000 2000>; | ||
256 | status = "disabled"; | ||
257 | }; | ||
258 | |||
259 | auart0: serial@8006c000 { | ||
260 | reg = <0x8006c000 0x2000>; | ||
261 | status = "disabled"; | ||
262 | }; | ||
263 | |||
264 | auart1: serial@8006e000 { | ||
265 | reg = <0x8006e000 0x2000>; | ||
266 | status = "disabled"; | ||
267 | }; | ||
268 | |||
269 | duart: serial@80070000 { | ||
270 | compatible = "arm,pl011", "arm,primecell"; | ||
271 | reg = <0x80070000 0x2000>; | ||
272 | interrupts = <0>; | ||
273 | status = "disabled"; | ||
274 | }; | ||
275 | |||
276 | usbphy@8007c000 { | ||
277 | reg = <0x8007c000 0x2000>; | ||
278 | status = "disabled"; | ||
279 | }; | ||
280 | }; | ||
281 | }; | ||
282 | |||
283 | ahb@80080000 { | ||
284 | compatible = "simple-bus"; | ||
285 | #address-cells = <1>; | ||
286 | #size-cells = <1>; | ||
287 | reg = <0x80080000 0x80000>; | ||
288 | ranges; | ||
289 | |||
290 | usbctrl@80080000 { | ||
291 | reg = <0x80080000 0x10000>; | ||
292 | status = "disabled"; | ||
293 | }; | ||
294 | }; | ||
295 | }; | ||
diff --git a/arch/arm/boot/dts/imx27-phytec-phycore.dts b/arch/arm/boot/dts/imx27-phytec-phycore.dts index a51a08fc2af9..2b0ff60247a4 100644 --- a/arch/arm/boot/dts/imx27-phytec-phycore.dts +++ b/arch/arm/boot/dts/imx27-phytec-phycore.dts | |||
@@ -27,22 +27,22 @@ | |||
27 | status = "okay"; | 27 | status = "okay"; |
28 | }; | 28 | }; |
29 | 29 | ||
30 | uart@1000a000 { | 30 | serial@1000a000 { |
31 | fsl,uart-has-rtscts; | 31 | fsl,uart-has-rtscts; |
32 | status = "okay"; | 32 | status = "okay"; |
33 | }; | 33 | }; |
34 | 34 | ||
35 | uart@1000b000 { | 35 | serial@1000b000 { |
36 | fsl,uart-has-rtscts; | 36 | fsl,uart-has-rtscts; |
37 | status = "okay"; | 37 | status = "okay"; |
38 | }; | 38 | }; |
39 | 39 | ||
40 | uart@1000c000 { | 40 | serial@1000c000 { |
41 | fsl,uart-has-rtscts; | 41 | fsl,uart-has-rtscts; |
42 | status = "okay"; | 42 | status = "okay"; |
43 | }; | 43 | }; |
44 | 44 | ||
45 | fec@1002b000 { | 45 | ethernet@1002b000 { |
46 | status = "okay"; | 46 | status = "okay"; |
47 | }; | 47 | }; |
48 | 48 | ||
diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi index bc5e7d5ddd54..2b1a166d41f9 100644 --- a/arch/arm/boot/dts/imx27.dtsi +++ b/arch/arm/boot/dts/imx27.dtsi | |||
@@ -59,28 +59,28 @@ | |||
59 | status = "disabled"; | 59 | status = "disabled"; |
60 | }; | 60 | }; |
61 | 61 | ||
62 | uart1: uart@1000a000 { | 62 | uart1: serial@1000a000 { |
63 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | 63 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; |
64 | reg = <0x1000a000 0x1000>; | 64 | reg = <0x1000a000 0x1000>; |
65 | interrupts = <20>; | 65 | interrupts = <20>; |
66 | status = "disabled"; | 66 | status = "disabled"; |
67 | }; | 67 | }; |
68 | 68 | ||
69 | uart2: uart@1000b000 { | 69 | uart2: serial@1000b000 { |
70 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | 70 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; |
71 | reg = <0x1000b000 0x1000>; | 71 | reg = <0x1000b000 0x1000>; |
72 | interrupts = <19>; | 72 | interrupts = <19>; |
73 | status = "disabled"; | 73 | status = "disabled"; |
74 | }; | 74 | }; |
75 | 75 | ||
76 | uart3: uart@1000c000 { | 76 | uart3: serial@1000c000 { |
77 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | 77 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; |
78 | reg = <0x1000c000 0x1000>; | 78 | reg = <0x1000c000 0x1000>; |
79 | interrupts = <18>; | 79 | interrupts = <18>; |
80 | status = "disabled"; | 80 | status = "disabled"; |
81 | }; | 81 | }; |
82 | 82 | ||
83 | uart4: uart@1000d000 { | 83 | uart4: serial@1000d000 { |
84 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | 84 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; |
85 | reg = <0x1000d000 0x1000>; | 85 | reg = <0x1000d000 0x1000>; |
86 | interrupts = <17>; | 86 | interrupts = <17>; |
@@ -183,14 +183,14 @@ | |||
183 | status = "disabled"; | 183 | status = "disabled"; |
184 | }; | 184 | }; |
185 | 185 | ||
186 | uart5: uart@1001b000 { | 186 | uart5: serial@1001b000 { |
187 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | 187 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; |
188 | reg = <0x1001b000 0x1000>; | 188 | reg = <0x1001b000 0x1000>; |
189 | interrupts = <49>; | 189 | interrupts = <49>; |
190 | status = "disabled"; | 190 | status = "disabled"; |
191 | }; | 191 | }; |
192 | 192 | ||
193 | uart6: uart@1001c000 { | 193 | uart6: serial@1001c000 { |
194 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; | 194 | compatible = "fsl,imx27-uart", "fsl,imx21-uart"; |
195 | reg = <0x1001c000 0x1000>; | 195 | reg = <0x1001c000 0x1000>; |
196 | interrupts = <48>; | 196 | interrupts = <48>; |
@@ -206,7 +206,7 @@ | |||
206 | status = "disabled"; | 206 | status = "disabled"; |
207 | }; | 207 | }; |
208 | 208 | ||
209 | fec: fec@1002b000 { | 209 | fec: ethernet@1002b000 { |
210 | compatible = "fsl,imx27-fec"; | 210 | compatible = "fsl,imx27-fec"; |
211 | reg = <0x1002b000 0x4000>; | 211 | reg = <0x1002b000 0x4000>; |
212 | interrupts = <50>; | 212 | interrupts = <50>; |
diff --git a/arch/arm/boot/dts/imx28-evk.dts b/arch/arm/boot/dts/imx28-evk.dts new file mode 100644 index 000000000000..ee520a529cb4 --- /dev/null +++ b/arch/arm/boot/dts/imx28-evk.dts | |||
@@ -0,0 +1,114 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Freescale Semiconductor, Inc. | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /dts-v1/; | ||
13 | /include/ "imx28.dtsi" | ||
14 | |||
15 | / { | ||
16 | model = "Freescale i.MX28 Evaluation Kit"; | ||
17 | compatible = "fsl,imx28-evk", "fsl,imx28"; | ||
18 | |||
19 | memory { | ||
20 | reg = <0x40000000 0x08000000>; | ||
21 | }; | ||
22 | |||
23 | apb@80000000 { | ||
24 | apbh@80000000 { | ||
25 | ssp0: ssp@80010000 { | ||
26 | compatible = "fsl,imx28-mmc"; | ||
27 | pinctrl-names = "default"; | ||
28 | pinctrl-0 = <&mmc0_8bit_pins_a | ||
29 | &mmc0_cd_cfg &mmc0_sck_cfg>; | ||
30 | bus-width = <8>; | ||
31 | wp-gpios = <&gpio2 12 0>; | ||
32 | status = "okay"; | ||
33 | }; | ||
34 | |||
35 | ssp1: ssp@80012000 { | ||
36 | compatible = "fsl,imx28-mmc"; | ||
37 | bus-width = <8>; | ||
38 | wp-gpios = <&gpio0 28 0>; | ||
39 | status = "okay"; | ||
40 | }; | ||
41 | }; | ||
42 | |||
43 | apbx@80040000 { | ||
44 | saif0: saif@80042000 { | ||
45 | pinctrl-names = "default"; | ||
46 | pinctrl-0 = <&saif0_pins_a>; | ||
47 | status = "okay"; | ||
48 | }; | ||
49 | |||
50 | saif1: saif@80046000 { | ||
51 | pinctrl-names = "default"; | ||
52 | pinctrl-0 = <&saif1_pins_a>; | ||
53 | fsl,saif-master = <&saif0>; | ||
54 | status = "okay"; | ||
55 | }; | ||
56 | |||
57 | i2c0: i2c@80058000 { | ||
58 | pinctrl-names = "default"; | ||
59 | pinctrl-0 = <&i2c0_pins_a>; | ||
60 | status = "okay"; | ||
61 | |||
62 | sgtl5000: codec@0a { | ||
63 | compatible = "fsl,sgtl5000"; | ||
64 | reg = <0x0a>; | ||
65 | VDDA-supply = <®_3p3v>; | ||
66 | VDDIO-supply = <®_3p3v>; | ||
67 | |||
68 | }; | ||
69 | }; | ||
70 | |||
71 | duart: serial@80074000 { | ||
72 | pinctrl-names = "default"; | ||
73 | pinctrl-0 = <&duart_pins_a>; | ||
74 | status = "okay"; | ||
75 | }; | ||
76 | }; | ||
77 | }; | ||
78 | |||
79 | ahb@80080000 { | ||
80 | mac0: ethernet@800f0000 { | ||
81 | phy-mode = "rmii"; | ||
82 | pinctrl-names = "default"; | ||
83 | pinctrl-0 = <&mac0_pins_a>; | ||
84 | status = "okay"; | ||
85 | }; | ||
86 | |||
87 | mac1: ethernet@800f4000 { | ||
88 | phy-mode = "rmii"; | ||
89 | pinctrl-names = "default"; | ||
90 | pinctrl-0 = <&mac1_pins_a>; | ||
91 | status = "okay"; | ||
92 | }; | ||
93 | }; | ||
94 | |||
95 | regulators { | ||
96 | compatible = "simple-bus"; | ||
97 | |||
98 | reg_3p3v: 3p3v { | ||
99 | compatible = "regulator-fixed"; | ||
100 | regulator-name = "3P3V"; | ||
101 | regulator-min-microvolt = <3300000>; | ||
102 | regulator-max-microvolt = <3300000>; | ||
103 | regulator-always-on; | ||
104 | }; | ||
105 | }; | ||
106 | |||
107 | sound { | ||
108 | compatible = "fsl,imx28-evk-sgtl5000", | ||
109 | "fsl,mxs-audio-sgtl5000"; | ||
110 | model = "imx28-evk-sgtl5000"; | ||
111 | saif-controllers = <&saif0 &saif1>; | ||
112 | audio-codec = <&sgtl5000>; | ||
113 | }; | ||
114 | }; | ||
diff --git a/arch/arm/boot/dts/imx28.dtsi b/arch/arm/boot/dts/imx28.dtsi new file mode 100644 index 000000000000..4634cb861a59 --- /dev/null +++ b/arch/arm/boot/dts/imx28.dtsi | |||
@@ -0,0 +1,497 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Freescale Semiconductor, Inc. | ||
3 | * | ||
4 | * The code contained herein is licensed under the GNU General Public | ||
5 | * License. You may obtain a copy of the GNU General Public License | ||
6 | * Version 2 or later at the following locations: | ||
7 | * | ||
8 | * http://www.opensource.org/licenses/gpl-license.html | ||
9 | * http://www.gnu.org/copyleft/gpl.html | ||
10 | */ | ||
11 | |||
12 | /include/ "skeleton.dtsi" | ||
13 | |||
14 | / { | ||
15 | interrupt-parent = <&icoll>; | ||
16 | |||
17 | aliases { | ||
18 | gpio0 = &gpio0; | ||
19 | gpio1 = &gpio1; | ||
20 | gpio2 = &gpio2; | ||
21 | gpio3 = &gpio3; | ||
22 | gpio4 = &gpio4; | ||
23 | saif0 = &saif0; | ||
24 | saif1 = &saif1; | ||
25 | }; | ||
26 | |||
27 | cpus { | ||
28 | cpu@0 { | ||
29 | compatible = "arm,arm926ejs"; | ||
30 | }; | ||
31 | }; | ||
32 | |||
33 | apb@80000000 { | ||
34 | compatible = "simple-bus"; | ||
35 | #address-cells = <1>; | ||
36 | #size-cells = <1>; | ||
37 | reg = <0x80000000 0x80000>; | ||
38 | ranges; | ||
39 | |||
40 | apbh@80000000 { | ||
41 | compatible = "simple-bus"; | ||
42 | #address-cells = <1>; | ||
43 | #size-cells = <1>; | ||
44 | reg = <0x80000000 0x3c900>; | ||
45 | ranges; | ||
46 | |||
47 | icoll: interrupt-controller@80000000 { | ||
48 | compatible = "fsl,imx28-icoll", "fsl,mxs-icoll"; | ||
49 | interrupt-controller; | ||
50 | #interrupt-cells = <1>; | ||
51 | reg = <0x80000000 0x2000>; | ||
52 | }; | ||
53 | |||
54 | hsadc@80002000 { | ||
55 | reg = <0x80002000 2000>; | ||
56 | interrupts = <13 87>; | ||
57 | status = "disabled"; | ||
58 | }; | ||
59 | |||
60 | dma-apbh@80004000 { | ||
61 | compatible = "fsl,imx28-dma-apbh"; | ||
62 | reg = <0x80004000 2000>; | ||
63 | }; | ||
64 | |||
65 | perfmon@80006000 { | ||
66 | reg = <0x80006000 800>; | ||
67 | interrupts = <27>; | ||
68 | status = "disabled"; | ||
69 | }; | ||
70 | |||
71 | bch@8000a000 { | ||
72 | reg = <0x8000a000 2000>; | ||
73 | interrupts = <41>; | ||
74 | status = "disabled"; | ||
75 | }; | ||
76 | |||
77 | gpmi@8000c000 { | ||
78 | reg = <0x8000c000 2000>; | ||
79 | interrupts = <42 88>; | ||
80 | status = "disabled"; | ||
81 | }; | ||
82 | |||
83 | ssp0: ssp@80010000 { | ||
84 | reg = <0x80010000 2000>; | ||
85 | interrupts = <96 82>; | ||
86 | fsl,ssp-dma-channel = <0>; | ||
87 | status = "disabled"; | ||
88 | }; | ||
89 | |||
90 | ssp1: ssp@80012000 { | ||
91 | reg = <0x80012000 2000>; | ||
92 | interrupts = <97 83>; | ||
93 | fsl,ssp-dma-channel = <1>; | ||
94 | status = "disabled"; | ||
95 | }; | ||
96 | |||
97 | ssp2: ssp@80014000 { | ||
98 | reg = <0x80014000 2000>; | ||
99 | interrupts = <98 84>; | ||
100 | fsl,ssp-dma-channel = <2>; | ||
101 | status = "disabled"; | ||
102 | }; | ||
103 | |||
104 | ssp3: ssp@80016000 { | ||
105 | reg = <0x80016000 2000>; | ||
106 | interrupts = <99 85>; | ||
107 | fsl,ssp-dma-channel = <3>; | ||
108 | status = "disabled"; | ||
109 | }; | ||
110 | |||
111 | pinctrl@80018000 { | ||
112 | #address-cells = <1>; | ||
113 | #size-cells = <0>; | ||
114 | compatible = "fsl,imx28-pinctrl", "simple-bus"; | ||
115 | reg = <0x80018000 2000>; | ||
116 | |||
117 | gpio0: gpio@0 { | ||
118 | compatible = "fsl,imx28-gpio", "fsl,mxs-gpio"; | ||
119 | interrupts = <127>; | ||
120 | gpio-controller; | ||
121 | #gpio-cells = <2>; | ||
122 | interrupt-controller; | ||
123 | #interrupt-cells = <2>; | ||
124 | }; | ||
125 | |||
126 | gpio1: gpio@1 { | ||
127 | compatible = "fsl,imx28-gpio", "fsl,mxs-gpio"; | ||
128 | interrupts = <126>; | ||
129 | gpio-controller; | ||
130 | #gpio-cells = <2>; | ||
131 | interrupt-controller; | ||
132 | #interrupt-cells = <2>; | ||
133 | }; | ||
134 | |||
135 | gpio2: gpio@2 { | ||
136 | compatible = "fsl,imx28-gpio", "fsl,mxs-gpio"; | ||
137 | interrupts = <125>; | ||
138 | gpio-controller; | ||
139 | #gpio-cells = <2>; | ||
140 | interrupt-controller; | ||
141 | #interrupt-cells = <2>; | ||
142 | }; | ||
143 | |||
144 | gpio3: gpio@3 { | ||
145 | compatible = "fsl,imx28-gpio", "fsl,mxs-gpio"; | ||
146 | interrupts = <124>; | ||
147 | gpio-controller; | ||
148 | #gpio-cells = <2>; | ||
149 | interrupt-controller; | ||
150 | #interrupt-cells = <2>; | ||
151 | }; | ||
152 | |||
153 | gpio4: gpio@4 { | ||
154 | compatible = "fsl,imx28-gpio", "fsl,mxs-gpio"; | ||
155 | interrupts = <123>; | ||
156 | gpio-controller; | ||
157 | #gpio-cells = <2>; | ||
158 | interrupt-controller; | ||
159 | #interrupt-cells = <2>; | ||
160 | }; | ||
161 | |||
162 | duart_pins_a: duart@0 { | ||
163 | reg = <0>; | ||
164 | fsl,pinmux-ids = <0x3102 0x3112>; | ||
165 | fsl,drive-strength = <0>; | ||
166 | fsl,voltage = <1>; | ||
167 | fsl,pull-up = <0>; | ||
168 | }; | ||
169 | |||
170 | mac0_pins_a: mac0@0 { | ||
171 | reg = <0>; | ||
172 | fsl,pinmux-ids = <0x4000 0x4010 0x4020 | ||
173 | 0x4030 0x4040 0x4060 0x4070 | ||
174 | 0x4080 0x4100>; | ||
175 | fsl,drive-strength = <1>; | ||
176 | fsl,voltage = <1>; | ||
177 | fsl,pull-up = <1>; | ||
178 | }; | ||
179 | |||
180 | mac1_pins_a: mac1@0 { | ||
181 | reg = <0>; | ||
182 | fsl,pinmux-ids = <0x40f1 0x4091 0x40a1 | ||
183 | 0x40e1 0x40b1 0x40c1>; | ||
184 | fsl,drive-strength = <1>; | ||
185 | fsl,voltage = <1>; | ||
186 | fsl,pull-up = <1>; | ||
187 | }; | ||
188 | |||
189 | mmc0_8bit_pins_a: mmc0-8bit@0 { | ||
190 | reg = <0>; | ||
191 | fsl,pinmux-ids = <0x2000 0x2010 0x2020 | ||
192 | 0x2030 0x2040 0x2050 0x2060 | ||
193 | 0x2070 0x2080 0x2090 0x20a0>; | ||
194 | fsl,drive-strength = <1>; | ||
195 | fsl,voltage = <1>; | ||
196 | fsl,pull-up = <1>; | ||
197 | }; | ||
198 | |||
199 | mmc0_cd_cfg: mmc0-cd-cfg { | ||
200 | fsl,pinmux-ids = <0x2090>; | ||
201 | fsl,pull-up = <0>; | ||
202 | }; | ||
203 | |||
204 | mmc0_sck_cfg: mmc0-sck-cfg { | ||
205 | fsl,pinmux-ids = <0x20a0>; | ||
206 | fsl,drive-strength = <2>; | ||
207 | fsl,pull-up = <0>; | ||
208 | }; | ||
209 | |||
210 | i2c0_pins_a: i2c0@0 { | ||
211 | reg = <0>; | ||
212 | fsl,pinmux-ids = <0x3180 0x3190>; | ||
213 | fsl,drive-strength = <1>; | ||
214 | fsl,voltage = <1>; | ||
215 | fsl,pull-up = <1>; | ||
216 | }; | ||
217 | |||
218 | saif0_pins_a: saif0@0 { | ||
219 | reg = <0>; | ||
220 | fsl,pinmux-ids = | ||
221 | <0x3140 0x3150 0x3160 0x3170>; | ||
222 | fsl,drive-strength = <2>; | ||
223 | fsl,voltage = <1>; | ||
224 | fsl,pull-up = <1>; | ||
225 | }; | ||
226 | |||
227 | saif1_pins_a: saif1@0 { | ||
228 | reg = <0>; | ||
229 | fsl,pinmux-ids = <0x31a0>; | ||
230 | fsl,drive-strength = <2>; | ||
231 | fsl,voltage = <1>; | ||
232 | fsl,pull-up = <1>; | ||
233 | }; | ||
234 | }; | ||
235 | |||
236 | digctl@8001c000 { | ||
237 | reg = <0x8001c000 2000>; | ||
238 | interrupts = <89>; | ||
239 | status = "disabled"; | ||
240 | }; | ||
241 | |||
242 | etm@80022000 { | ||
243 | reg = <0x80022000 2000>; | ||
244 | status = "disabled"; | ||
245 | }; | ||
246 | |||
247 | dma-apbx@80024000 { | ||
248 | compatible = "fsl,imx28-dma-apbx"; | ||
249 | reg = <0x80024000 2000>; | ||
250 | }; | ||
251 | |||
252 | dcp@80028000 { | ||
253 | reg = <0x80028000 2000>; | ||
254 | interrupts = <52 53 54>; | ||
255 | status = "disabled"; | ||
256 | }; | ||
257 | |||
258 | pxp@8002a000 { | ||
259 | reg = <0x8002a000 2000>; | ||
260 | interrupts = <39>; | ||
261 | status = "disabled"; | ||
262 | }; | ||
263 | |||
264 | ocotp@8002c000 { | ||
265 | reg = <0x8002c000 2000>; | ||
266 | status = "disabled"; | ||
267 | }; | ||
268 | |||
269 | axi-ahb@8002e000 { | ||
270 | reg = <0x8002e000 2000>; | ||
271 | status = "disabled"; | ||
272 | }; | ||
273 | |||
274 | lcdif@80030000 { | ||
275 | reg = <0x80030000 2000>; | ||
276 | interrupts = <38 86>; | ||
277 | status = "disabled"; | ||
278 | }; | ||
279 | |||
280 | can0: can@80032000 { | ||
281 | reg = <0x80032000 2000>; | ||
282 | interrupts = <8>; | ||
283 | status = "disabled"; | ||
284 | }; | ||
285 | |||
286 | can1: can@80034000 { | ||
287 | reg = <0x80034000 2000>; | ||
288 | interrupts = <9>; | ||
289 | status = "disabled"; | ||
290 | }; | ||
291 | |||
292 | simdbg@8003c000 { | ||
293 | reg = <0x8003c000 200>; | ||
294 | status = "disabled"; | ||
295 | }; | ||
296 | |||
297 | simgpmisel@8003c200 { | ||
298 | reg = <0x8003c200 100>; | ||
299 | status = "disabled"; | ||
300 | }; | ||
301 | |||
302 | simsspsel@8003c300 { | ||
303 | reg = <0x8003c300 100>; | ||
304 | status = "disabled"; | ||
305 | }; | ||
306 | |||
307 | simmemsel@8003c400 { | ||
308 | reg = <0x8003c400 100>; | ||
309 | status = "disabled"; | ||
310 | }; | ||
311 | |||
312 | gpiomon@8003c500 { | ||
313 | reg = <0x8003c500 100>; | ||
314 | status = "disabled"; | ||
315 | }; | ||
316 | |||
317 | simenet@8003c700 { | ||
318 | reg = <0x8003c700 100>; | ||
319 | status = "disabled"; | ||
320 | }; | ||
321 | |||
322 | armjtag@8003c800 { | ||
323 | reg = <0x8003c800 100>; | ||
324 | status = "disabled"; | ||
325 | }; | ||
326 | }; | ||
327 | |||
328 | apbx@80040000 { | ||
329 | compatible = "simple-bus"; | ||
330 | #address-cells = <1>; | ||
331 | #size-cells = <1>; | ||
332 | reg = <0x80040000 0x40000>; | ||
333 | ranges; | ||
334 | |||
335 | clkctl@80040000 { | ||
336 | reg = <0x80040000 2000>; | ||
337 | status = "disabled"; | ||
338 | }; | ||
339 | |||
340 | saif0: saif@80042000 { | ||
341 | compatible = "fsl,imx28-saif"; | ||
342 | reg = <0x80042000 2000>; | ||
343 | interrupts = <59 80>; | ||
344 | fsl,saif-dma-channel = <4>; | ||
345 | status = "disabled"; | ||
346 | }; | ||
347 | |||
348 | power@80044000 { | ||
349 | reg = <0x80044000 2000>; | ||
350 | status = "disabled"; | ||
351 | }; | ||
352 | |||
353 | saif1: saif@80046000 { | ||
354 | compatible = "fsl,imx28-saif"; | ||
355 | reg = <0x80046000 2000>; | ||
356 | interrupts = <58 81>; | ||
357 | fsl,saif-dma-channel = <5>; | ||
358 | status = "disabled"; | ||
359 | }; | ||
360 | |||
361 | lradc@80050000 { | ||
362 | reg = <0x80050000 2000>; | ||
363 | status = "disabled"; | ||
364 | }; | ||
365 | |||
366 | spdif@80054000 { | ||
367 | reg = <0x80054000 2000>; | ||
368 | interrupts = <45 66>; | ||
369 | status = "disabled"; | ||
370 | }; | ||
371 | |||
372 | rtc@80056000 { | ||
373 | reg = <0x80056000 2000>; | ||
374 | interrupts = <28 29>; | ||
375 | status = "disabled"; | ||
376 | }; | ||
377 | |||
378 | i2c0: i2c@80058000 { | ||
379 | #address-cells = <1>; | ||
380 | #size-cells = <0>; | ||
381 | compatible = "fsl,imx28-i2c"; | ||
382 | reg = <0x80058000 2000>; | ||
383 | interrupts = <111 68>; | ||
384 | status = "disabled"; | ||
385 | }; | ||
386 | |||
387 | i2c1: i2c@8005a000 { | ||
388 | #address-cells = <1>; | ||
389 | #size-cells = <0>; | ||
390 | compatible = "fsl,imx28-i2c"; | ||
391 | reg = <0x8005a000 2000>; | ||
392 | interrupts = <110 69>; | ||
393 | status = "disabled"; | ||
394 | }; | ||
395 | |||
396 | pwm@80064000 { | ||
397 | reg = <0x80064000 2000>; | ||
398 | status = "disabled"; | ||
399 | }; | ||
400 | |||
401 | timrot@80068000 { | ||
402 | reg = <0x80068000 2000>; | ||
403 | status = "disabled"; | ||
404 | }; | ||
405 | |||
406 | auart0: serial@8006a000 { | ||
407 | reg = <0x8006a000 0x2000>; | ||
408 | interrupts = <112 70 71>; | ||
409 | status = "disabled"; | ||
410 | }; | ||
411 | |||
412 | auart1: serial@8006c000 { | ||
413 | reg = <0x8006c000 0x2000>; | ||
414 | interrupts = <113 72 73>; | ||
415 | status = "disabled"; | ||
416 | }; | ||
417 | |||
418 | auart2: serial@8006e000 { | ||
419 | reg = <0x8006e000 0x2000>; | ||
420 | interrupts = <114 74 75>; | ||
421 | status = "disabled"; | ||
422 | }; | ||
423 | |||
424 | auart3: serial@80070000 { | ||
425 | reg = <0x80070000 0x2000>; | ||
426 | interrupts = <115 76 77>; | ||
427 | status = "disabled"; | ||
428 | }; | ||
429 | |||
430 | auart4: serial@80072000 { | ||
431 | reg = <0x80072000 0x2000>; | ||
432 | interrupts = <116 78 79>; | ||
433 | status = "disabled"; | ||
434 | }; | ||
435 | |||
436 | duart: serial@80074000 { | ||
437 | compatible = "arm,pl011", "arm,primecell"; | ||
438 | reg = <0x80074000 0x1000>; | ||
439 | interrupts = <47>; | ||
440 | status = "disabled"; | ||
441 | }; | ||
442 | |||
443 | usbphy0: usbphy@8007c000 { | ||
444 | reg = <0x8007c000 0x2000>; | ||
445 | status = "disabled"; | ||
446 | }; | ||
447 | |||
448 | usbphy1: usbphy@8007e000 { | ||
449 | reg = <0x8007e000 0x2000>; | ||
450 | status = "disabled"; | ||
451 | }; | ||
452 | }; | ||
453 | }; | ||
454 | |||
455 | ahb@80080000 { | ||
456 | compatible = "simple-bus"; | ||
457 | #address-cells = <1>; | ||
458 | #size-cells = <1>; | ||
459 | reg = <0x80080000 0x80000>; | ||
460 | ranges; | ||
461 | |||
462 | usbctrl0: usbctrl@80080000 { | ||
463 | reg = <0x80080000 0x10000>; | ||
464 | status = "disabled"; | ||
465 | }; | ||
466 | |||
467 | usbctrl1: usbctrl@80090000 { | ||
468 | reg = <0x80090000 0x10000>; | ||
469 | status = "disabled"; | ||
470 | }; | ||
471 | |||
472 | dflpt@800c0000 { | ||
473 | reg = <0x800c0000 0x10000>; | ||
474 | status = "disabled"; | ||
475 | }; | ||
476 | |||
477 | mac0: ethernet@800f0000 { | ||
478 | compatible = "fsl,imx28-fec"; | ||
479 | reg = <0x800f0000 0x4000>; | ||
480 | interrupts = <101>; | ||
481 | status = "disabled"; | ||
482 | }; | ||
483 | |||
484 | mac1: ethernet@800f4000 { | ||
485 | compatible = "fsl,imx28-fec"; | ||
486 | reg = <0x800f4000 0x4000>; | ||
487 | interrupts = <102>; | ||
488 | status = "disabled"; | ||
489 | }; | ||
490 | |||
491 | switch@800f8000 { | ||
492 | reg = <0x800f8000 0x8000>; | ||
493 | status = "disabled"; | ||
494 | }; | ||
495 | |||
496 | }; | ||
497 | }; | ||
diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts index 9949e6060dee..de065b5976e6 100644 --- a/arch/arm/boot/dts/imx51-babbage.dts +++ b/arch/arm/boot/dts/imx51-babbage.dts | |||
@@ -17,10 +17,6 @@ | |||
17 | model = "Freescale i.MX51 Babbage Board"; | 17 | model = "Freescale i.MX51 Babbage Board"; |
18 | compatible = "fsl,imx51-babbage", "fsl,imx51"; | 18 | compatible = "fsl,imx51-babbage", "fsl,imx51"; |
19 | 19 | ||
20 | chosen { | ||
21 | bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait"; | ||
22 | }; | ||
23 | |||
24 | memory { | 20 | memory { |
25 | reg = <0x90000000 0x20000000>; | 21 | reg = <0x90000000 0x20000000>; |
26 | }; | 22 | }; |
@@ -40,7 +36,7 @@ | |||
40 | status = "okay"; | 36 | status = "okay"; |
41 | }; | 37 | }; |
42 | 38 | ||
43 | uart3: uart@7000c000 { | 39 | uart3: serial@7000c000 { |
44 | fsl,uart-has-rtscts; | 40 | fsl,uart-has-rtscts; |
45 | status = "okay"; | 41 | status = "okay"; |
46 | }; | 42 | }; |
@@ -166,6 +162,11 @@ | |||
166 | }; | 162 | }; |
167 | }; | 163 | }; |
168 | }; | 164 | }; |
165 | |||
166 | ssi2: ssi@70014000 { | ||
167 | fsl,mode = "i2s-slave"; | ||
168 | status = "okay"; | ||
169 | }; | ||
169 | }; | 170 | }; |
170 | 171 | ||
171 | wdog@73f98000 { /* WDOG1 */ | 172 | wdog@73f98000 { /* WDOG1 */ |
@@ -177,12 +178,12 @@ | |||
177 | reg = <0x73fa8000 0x4000>; | 178 | reg = <0x73fa8000 0x4000>; |
178 | }; | 179 | }; |
179 | 180 | ||
180 | uart1: uart@73fbc000 { | 181 | uart1: serial@73fbc000 { |
181 | fsl,uart-has-rtscts; | 182 | fsl,uart-has-rtscts; |
182 | status = "okay"; | 183 | status = "okay"; |
183 | }; | 184 | }; |
184 | 185 | ||
185 | uart2: uart@73fc0000 { | 186 | uart2: serial@73fc0000 { |
186 | status = "okay"; | 187 | status = "okay"; |
187 | }; | 188 | }; |
188 | }; | 189 | }; |
@@ -195,13 +196,20 @@ | |||
195 | i2c@83fc4000 { /* I2C2 */ | 196 | i2c@83fc4000 { /* I2C2 */ |
196 | status = "okay"; | 197 | status = "okay"; |
197 | 198 | ||
198 | codec: sgtl5000@0a { | 199 | sgtl5000: codec@0a { |
199 | compatible = "fsl,sgtl5000"; | 200 | compatible = "fsl,sgtl5000"; |
200 | reg = <0x0a>; | 201 | reg = <0x0a>; |
202 | clock-frequency = <26000000>; | ||
203 | VDDA-supply = <&vdig_reg>; | ||
204 | VDDIO-supply = <&vvideo_reg>; | ||
201 | }; | 205 | }; |
202 | }; | 206 | }; |
203 | 207 | ||
204 | fec@83fec000 { | 208 | audmux@83fd0000 { |
209 | status = "okay"; | ||
210 | }; | ||
211 | |||
212 | ethernet@83fec000 { | ||
205 | phy-mode = "mii"; | 213 | phy-mode = "mii"; |
206 | status = "okay"; | 214 | status = "okay"; |
207 | }; | 215 | }; |
@@ -218,4 +226,18 @@ | |||
218 | gpio-key,wakeup; | 226 | gpio-key,wakeup; |
219 | }; | 227 | }; |
220 | }; | 228 | }; |
229 | |||
230 | sound { | ||
231 | compatible = "fsl,imx51-babbage-sgtl5000", | ||
232 | "fsl,imx-audio-sgtl5000"; | ||
233 | model = "imx51-babbage-sgtl5000"; | ||
234 | ssi-controller = <&ssi2>; | ||
235 | audio-codec = <&sgtl5000>; | ||
236 | audio-routing = | ||
237 | "MIC_IN", "Mic Jack", | ||
238 | "Mic Jack", "Mic Bias", | ||
239 | "Headphone Jack", "HP_OUT"; | ||
240 | mux-int-port = <2>; | ||
241 | mux-ext-port = <3>; | ||
242 | }; | ||
221 | }; | 243 | }; |
diff --git a/arch/arm/boot/dts/imx51.dtsi b/arch/arm/boot/dts/imx51.dtsi index 6663986fe1c8..bfa65abe8ef2 100644 --- a/arch/arm/boot/dts/imx51.dtsi +++ b/arch/arm/boot/dts/imx51.dtsi | |||
@@ -86,7 +86,7 @@ | |||
86 | status = "disabled"; | 86 | status = "disabled"; |
87 | }; | 87 | }; |
88 | 88 | ||
89 | uart3: uart@7000c000 { | 89 | uart3: serial@7000c000 { |
90 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; | 90 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; |
91 | reg = <0x7000c000 0x4000>; | 91 | reg = <0x7000c000 0x4000>; |
92 | interrupts = <33>; | 92 | interrupts = <33>; |
@@ -102,6 +102,15 @@ | |||
102 | status = "disabled"; | 102 | status = "disabled"; |
103 | }; | 103 | }; |
104 | 104 | ||
105 | ssi2: ssi@70014000 { | ||
106 | compatible = "fsl,imx51-ssi", "fsl,imx21-ssi"; | ||
107 | reg = <0x70014000 0x4000>; | ||
108 | interrupts = <30>; | ||
109 | fsl,fifo-depth = <15>; | ||
110 | fsl,ssi-dma-events = <25 24 23 22>; /* TX0 RX0 TX1 RX1 */ | ||
111 | status = "disabled"; | ||
112 | }; | ||
113 | |||
105 | esdhc@70020000 { /* ESDHC3 */ | 114 | esdhc@70020000 { /* ESDHC3 */ |
106 | compatible = "fsl,imx51-esdhc"; | 115 | compatible = "fsl,imx51-esdhc"; |
107 | reg = <0x70020000 0x4000>; | 116 | reg = <0x70020000 0x4000>; |
@@ -171,14 +180,14 @@ | |||
171 | status = "disabled"; | 180 | status = "disabled"; |
172 | }; | 181 | }; |
173 | 182 | ||
174 | uart1: uart@73fbc000 { | 183 | uart1: serial@73fbc000 { |
175 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; | 184 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; |
176 | reg = <0x73fbc000 0x4000>; | 185 | reg = <0x73fbc000 0x4000>; |
177 | interrupts = <31>; | 186 | interrupts = <31>; |
178 | status = "disabled"; | 187 | status = "disabled"; |
179 | }; | 188 | }; |
180 | 189 | ||
181 | uart2: uart@73fc0000 { | 190 | uart2: serial@73fc0000 { |
182 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; | 191 | compatible = "fsl,imx51-uart", "fsl,imx21-uart"; |
183 | reg = <0x73fc0000 0x4000>; | 192 | reg = <0x73fc0000 0x4000>; |
184 | interrupts = <32>; | 193 | interrupts = <32>; |
@@ -235,7 +244,31 @@ | |||
235 | status = "disabled"; | 244 | status = "disabled"; |
236 | }; | 245 | }; |
237 | 246 | ||
238 | fec@83fec000 { | 247 | ssi1: ssi@83fcc000 { |
248 | compatible = "fsl,imx51-ssi", "fsl,imx21-ssi"; | ||
249 | reg = <0x83fcc000 0x4000>; | ||
250 | interrupts = <29>; | ||
251 | fsl,fifo-depth = <15>; | ||
252 | fsl,ssi-dma-events = <29 28 27 26>; /* TX0 RX0 TX1 RX1 */ | ||
253 | status = "disabled"; | ||
254 | }; | ||
255 | |||
256 | audmux@83fd0000 { | ||
257 | compatible = "fsl,imx51-audmux", "fsl,imx31-audmux"; | ||
258 | reg = <0x83fd0000 0x4000>; | ||
259 | status = "disabled"; | ||
260 | }; | ||
261 | |||
262 | ssi3: ssi@83fe8000 { | ||
263 | compatible = "fsl,imx51-ssi", "fsl,imx21-ssi"; | ||
264 | reg = <0x83fe8000 0x4000>; | ||
265 | interrupts = <96>; | ||
266 | fsl,fifo-depth = <15>; | ||
267 | fsl,ssi-dma-events = <47 46 37 35>; /* TX0 RX0 TX1 RX1 */ | ||
268 | status = "disabled"; | ||
269 | }; | ||
270 | |||
271 | ethernet@83fec000 { | ||
239 | compatible = "fsl,imx51-fec", "fsl,imx27-fec"; | 272 | compatible = "fsl,imx51-fec", "fsl,imx27-fec"; |
240 | reg = <0x83fec000 0x4000>; | 273 | reg = <0x83fec000 0x4000>; |
241 | interrupts = <87>; | 274 | interrupts = <87>; |
diff --git a/arch/arm/boot/dts/imx53-ard.dts b/arch/arm/boot/dts/imx53-ard.dts index 2dccce46ed81..5b8eafcdbeec 100644 --- a/arch/arm/boot/dts/imx53-ard.dts +++ b/arch/arm/boot/dts/imx53-ard.dts | |||
@@ -17,10 +17,6 @@ | |||
17 | model = "Freescale i.MX53 Automotive Reference Design Board"; | 17 | model = "Freescale i.MX53 Automotive Reference Design Board"; |
18 | compatible = "fsl,imx53-ard", "fsl,imx53"; | 18 | compatible = "fsl,imx53-ard", "fsl,imx53"; |
19 | 19 | ||
20 | chosen { | ||
21 | bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait"; | ||
22 | }; | ||
23 | |||
24 | memory { | 20 | memory { |
25 | reg = <0x70000000 0x40000000>; | 21 | reg = <0x70000000 0x40000000>; |
26 | }; | 22 | }; |
@@ -44,7 +40,7 @@ | |||
44 | reg = <0x53fa8000 0x4000>; | 40 | reg = <0x53fa8000 0x4000>; |
45 | }; | 41 | }; |
46 | 42 | ||
47 | uart1: uart@53fbc000 { | 43 | uart1: serial@53fbc000 { |
48 | status = "okay"; | 44 | status = "okay"; |
49 | }; | 45 | }; |
50 | }; | 46 | }; |
diff --git a/arch/arm/boot/dts/imx53-evk.dts b/arch/arm/boot/dts/imx53-evk.dts index 5bac4aa4800b..9c798034675e 100644 --- a/arch/arm/boot/dts/imx53-evk.dts +++ b/arch/arm/boot/dts/imx53-evk.dts | |||
@@ -17,10 +17,6 @@ | |||
17 | model = "Freescale i.MX53 Evaluation Kit"; | 17 | model = "Freescale i.MX53 Evaluation Kit"; |
18 | compatible = "fsl,imx53-evk", "fsl,imx53"; | 18 | compatible = "fsl,imx53-evk", "fsl,imx53"; |
19 | 19 | ||
20 | chosen { | ||
21 | bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait"; | ||
22 | }; | ||
23 | |||
24 | memory { | 20 | memory { |
25 | reg = <0x70000000 0x80000000>; | 21 | reg = <0x70000000 0x80000000>; |
26 | }; | 22 | }; |
@@ -75,7 +71,7 @@ | |||
75 | reg = <0x53fa8000 0x4000>; | 71 | reg = <0x53fa8000 0x4000>; |
76 | }; | 72 | }; |
77 | 73 | ||
78 | uart1: uart@53fbc000 { | 74 | uart1: serial@53fbc000 { |
79 | status = "okay"; | 75 | status = "okay"; |
80 | }; | 76 | }; |
81 | }; | 77 | }; |
@@ -99,7 +95,7 @@ | |||
99 | }; | 95 | }; |
100 | }; | 96 | }; |
101 | 97 | ||
102 | fec@63fec000 { | 98 | ethernet@63fec000 { |
103 | phy-mode = "rmii"; | 99 | phy-mode = "rmii"; |
104 | phy-reset-gpios = <&gpio7 6 0>; | 100 | phy-reset-gpios = <&gpio7 6 0>; |
105 | status = "okay"; | 101 | status = "okay"; |
diff --git a/arch/arm/boot/dts/imx53-qsb.dts b/arch/arm/boot/dts/imx53-qsb.dts index 5c57c8672c36..2d803a9a6949 100644 --- a/arch/arm/boot/dts/imx53-qsb.dts +++ b/arch/arm/boot/dts/imx53-qsb.dts | |||
@@ -17,10 +17,6 @@ | |||
17 | model = "Freescale i.MX53 Quick Start Board"; | 17 | model = "Freescale i.MX53 Quick Start Board"; |
18 | compatible = "fsl,imx53-qsb", "fsl,imx53"; | 18 | compatible = "fsl,imx53-qsb", "fsl,imx53"; |
19 | 19 | ||
20 | chosen { | ||
21 | bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait"; | ||
22 | }; | ||
23 | |||
24 | memory { | 20 | memory { |
25 | reg = <0x70000000 0x40000000>; | 21 | reg = <0x70000000 0x40000000>; |
26 | }; | 22 | }; |
@@ -33,6 +29,11 @@ | |||
33 | status = "okay"; | 29 | status = "okay"; |
34 | }; | 30 | }; |
35 | 31 | ||
32 | ssi2: ssi@50014000 { | ||
33 | fsl,mode = "i2s-slave"; | ||
34 | status = "okay"; | ||
35 | }; | ||
36 | |||
36 | esdhc@50020000 { /* ESDHC3 */ | 37 | esdhc@50020000 { /* ESDHC3 */ |
37 | cd-gpios = <&gpio3 11 0>; | 38 | cd-gpios = <&gpio3 11 0>; |
38 | wp-gpios = <&gpio3 12 0>; | 39 | wp-gpios = <&gpio3 12 0>; |
@@ -49,7 +50,7 @@ | |||
49 | reg = <0x53fa8000 0x4000>; | 50 | reg = <0x53fa8000 0x4000>; |
50 | }; | 51 | }; |
51 | 52 | ||
52 | uart1: uart@53fbc000 { | 53 | uart1: serial@53fbc000 { |
53 | status = "okay"; | 54 | status = "okay"; |
54 | }; | 55 | }; |
55 | }; | 56 | }; |
@@ -62,9 +63,11 @@ | |||
62 | i2c@63fc4000 { /* I2C2 */ | 63 | i2c@63fc4000 { /* I2C2 */ |
63 | status = "okay"; | 64 | status = "okay"; |
64 | 65 | ||
65 | codec: sgtl5000@0a { | 66 | sgtl5000: codec@0a { |
66 | compatible = "fsl,sgtl5000"; | 67 | compatible = "fsl,sgtl5000"; |
67 | reg = <0x0a>; | 68 | reg = <0x0a>; |
69 | VDDA-supply = <®_3p2v>; | ||
70 | VDDIO-supply = <®_3p2v>; | ||
68 | }; | 71 | }; |
69 | }; | 72 | }; |
70 | 73 | ||
@@ -77,12 +80,88 @@ | |||
77 | }; | 80 | }; |
78 | 81 | ||
79 | pmic: dialog@48 { | 82 | pmic: dialog@48 { |
80 | compatible = "dialog,da9053", "dialog,da9052"; | 83 | compatible = "dlg,da9053-aa", "dlg,da9052"; |
81 | reg = <0x48>; | 84 | reg = <0x48>; |
85 | |||
86 | regulators { | ||
87 | buck0 { | ||
88 | regulator-min-microvolt = <500000>; | ||
89 | regulator-max-microvolt = <2075000>; | ||
90 | }; | ||
91 | |||
92 | buck1 { | ||
93 | regulator-min-microvolt = <500000>; | ||
94 | regulator-max-microvolt = <2075000>; | ||
95 | }; | ||
96 | |||
97 | buck2 { | ||
98 | regulator-min-microvolt = <925000>; | ||
99 | regulator-max-microvolt = <2500000>; | ||
100 | }; | ||
101 | |||
102 | buck3 { | ||
103 | regulator-min-microvolt = <925000>; | ||
104 | regulator-max-microvolt = <2500000>; | ||
105 | }; | ||
106 | |||
107 | ldo4 { | ||
108 | regulator-min-microvolt = <600000>; | ||
109 | regulator-max-microvolt = <1800000>; | ||
110 | }; | ||
111 | |||
112 | ldo5 { | ||
113 | regulator-min-microvolt = <600000>; | ||
114 | regulator-max-microvolt = <1800000>; | ||
115 | }; | ||
116 | |||
117 | ldo6 { | ||
118 | regulator-min-microvolt = <1725000>; | ||
119 | regulator-max-microvolt = <3300000>; | ||
120 | }; | ||
121 | |||
122 | ldo7 { | ||
123 | regulator-min-microvolt = <1725000>; | ||
124 | regulator-max-microvolt = <3300000>; | ||
125 | }; | ||
126 | |||
127 | ldo8 { | ||
128 | regulator-min-microvolt = <1200000>; | ||
129 | regulator-max-microvolt = <3600000>; | ||
130 | }; | ||
131 | |||
132 | ldo9 { | ||
133 | regulator-min-microvolt = <1200000>; | ||
134 | regulator-max-microvolt = <3600000>; | ||
135 | }; | ||
136 | |||
137 | ldo10 { | ||
138 | regulator-min-microvolt = <1200000>; | ||
139 | regulator-max-microvolt = <3600000>; | ||
140 | }; | ||
141 | |||
142 | ldo11 { | ||
143 | regulator-min-microvolt = <1200000>; | ||
144 | regulator-max-microvolt = <3600000>; | ||
145 | }; | ||
146 | |||
147 | ldo12 { | ||
148 | regulator-min-microvolt = <1250000>; | ||
149 | regulator-max-microvolt = <3650000>; | ||
150 | }; | ||
151 | |||
152 | ldo13 { | ||
153 | regulator-min-microvolt = <1200000>; | ||
154 | regulator-max-microvolt = <3600000>; | ||
155 | }; | ||
156 | }; | ||
82 | }; | 157 | }; |
83 | }; | 158 | }; |
84 | 159 | ||
85 | fec@63fec000 { | 160 | audmux@63fd0000 { |
161 | status = "okay"; | ||
162 | }; | ||
163 | |||
164 | ethernet@63fec000 { | ||
86 | phy-mode = "rmii"; | 165 | phy-mode = "rmii"; |
87 | phy-reset-gpios = <&gpio7 6 0>; | 166 | phy-reset-gpios = <&gpio7 6 0>; |
88 | status = "okay"; | 167 | status = "okay"; |
@@ -122,4 +201,30 @@ | |||
122 | linux,default-trigger = "heartbeat"; | 201 | linux,default-trigger = "heartbeat"; |
123 | }; | 202 | }; |
124 | }; | 203 | }; |
204 | |||
205 | regulators { | ||
206 | compatible = "simple-bus"; | ||
207 | |||
208 | reg_3p2v: 3p2v { | ||
209 | compatible = "regulator-fixed"; | ||
210 | regulator-name = "3P2V"; | ||
211 | regulator-min-microvolt = <3200000>; | ||
212 | regulator-max-microvolt = <3200000>; | ||
213 | regulator-always-on; | ||
214 | }; | ||
215 | }; | ||
216 | |||
217 | sound { | ||
218 | compatible = "fsl,imx53-qsb-sgtl5000", | ||
219 | "fsl,imx-audio-sgtl5000"; | ||
220 | model = "imx53-qsb-sgtl5000"; | ||
221 | ssi-controller = <&ssi2>; | ||
222 | audio-codec = <&sgtl5000>; | ||
223 | audio-routing = | ||
224 | "MIC_IN", "Mic Jack", | ||
225 | "Mic Jack", "Mic Bias", | ||
226 | "Headphone Jack", "HP_OUT"; | ||
227 | mux-int-port = <2>; | ||
228 | mux-ext-port = <5>; | ||
229 | }; | ||
125 | }; | 230 | }; |
diff --git a/arch/arm/boot/dts/imx53-smd.dts b/arch/arm/boot/dts/imx53-smd.dts index 139138a556b0..08091029168e 100644 --- a/arch/arm/boot/dts/imx53-smd.dts +++ b/arch/arm/boot/dts/imx53-smd.dts | |||
@@ -17,10 +17,6 @@ | |||
17 | model = "Freescale i.MX53 Smart Mobile Reference Design Board"; | 17 | model = "Freescale i.MX53 Smart Mobile Reference Design Board"; |
18 | compatible = "fsl,imx53-smd", "fsl,imx53"; | 18 | compatible = "fsl,imx53-smd", "fsl,imx53"; |
19 | 19 | ||
20 | chosen { | ||
21 | bootargs = "console=ttymxc0,115200 root=/dev/mmcblk0p3 rootwait"; | ||
22 | }; | ||
23 | |||
24 | memory { | 20 | memory { |
25 | reg = <0x70000000 0x40000000>; | 21 | reg = <0x70000000 0x40000000>; |
26 | }; | 22 | }; |
@@ -39,7 +35,7 @@ | |||
39 | status = "okay"; | 35 | status = "okay"; |
40 | }; | 36 | }; |
41 | 37 | ||
42 | uart3: uart@5000c000 { | 38 | uart3: serial@5000c000 { |
43 | fsl,uart-has-rtscts; | 39 | fsl,uart-has-rtscts; |
44 | status = "okay"; | 40 | status = "okay"; |
45 | }; | 41 | }; |
@@ -90,11 +86,11 @@ | |||
90 | reg = <0x53fa8000 0x4000>; | 86 | reg = <0x53fa8000 0x4000>; |
91 | }; | 87 | }; |
92 | 88 | ||
93 | uart1: uart@53fbc000 { | 89 | uart1: serial@53fbc000 { |
94 | status = "okay"; | 90 | status = "okay"; |
95 | }; | 91 | }; |
96 | 92 | ||
97 | uart2: uart@53fc0000 { | 93 | uart2: serial@53fc0000 { |
98 | status = "okay"; | 94 | status = "okay"; |
99 | }; | 95 | }; |
100 | }; | 96 | }; |
@@ -142,7 +138,7 @@ | |||
142 | }; | 138 | }; |
143 | }; | 139 | }; |
144 | 140 | ||
145 | fec@63fec000 { | 141 | ethernet@63fec000 { |
146 | phy-mode = "rmii"; | 142 | phy-mode = "rmii"; |
147 | phy-reset-gpios = <&gpio7 6 0>; | 143 | phy-reset-gpios = <&gpio7 6 0>; |
148 | status = "okay"; | 144 | status = "okay"; |
diff --git a/arch/arm/boot/dts/imx53.dtsi b/arch/arm/boot/dts/imx53.dtsi index 5dd91b942c91..e3e869470cd3 100644 --- a/arch/arm/boot/dts/imx53.dtsi +++ b/arch/arm/boot/dts/imx53.dtsi | |||
@@ -88,7 +88,7 @@ | |||
88 | status = "disabled"; | 88 | status = "disabled"; |
89 | }; | 89 | }; |
90 | 90 | ||
91 | uart3: uart@5000c000 { | 91 | uart3: serial@5000c000 { |
92 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; | 92 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; |
93 | reg = <0x5000c000 0x4000>; | 93 | reg = <0x5000c000 0x4000>; |
94 | interrupts = <33>; | 94 | interrupts = <33>; |
@@ -104,6 +104,15 @@ | |||
104 | status = "disabled"; | 104 | status = "disabled"; |
105 | }; | 105 | }; |
106 | 106 | ||
107 | ssi2: ssi@50014000 { | ||
108 | compatible = "fsl,imx53-ssi", "fsl,imx21-ssi"; | ||
109 | reg = <0x50014000 0x4000>; | ||
110 | interrupts = <30>; | ||
111 | fsl,fifo-depth = <15>; | ||
112 | fsl,ssi-dma-events = <25 24 23 22>; /* TX0 RX0 TX1 RX1 */ | ||
113 | status = "disabled"; | ||
114 | }; | ||
115 | |||
107 | esdhc@50020000 { /* ESDHC3 */ | 116 | esdhc@50020000 { /* ESDHC3 */ |
108 | compatible = "fsl,imx53-esdhc"; | 117 | compatible = "fsl,imx53-esdhc"; |
109 | reg = <0x50020000 0x4000>; | 118 | reg = <0x50020000 0x4000>; |
@@ -173,14 +182,14 @@ | |||
173 | status = "disabled"; | 182 | status = "disabled"; |
174 | }; | 183 | }; |
175 | 184 | ||
176 | uart1: uart@53fbc000 { | 185 | uart1: serial@53fbc000 { |
177 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; | 186 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; |
178 | reg = <0x53fbc000 0x4000>; | 187 | reg = <0x53fbc000 0x4000>; |
179 | interrupts = <31>; | 188 | interrupts = <31>; |
180 | status = "disabled"; | 189 | status = "disabled"; |
181 | }; | 190 | }; |
182 | 191 | ||
183 | uart2: uart@53fc0000 { | 192 | uart2: serial@53fc0000 { |
184 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; | 193 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; |
185 | reg = <0x53fc0000 0x4000>; | 194 | reg = <0x53fc0000 0x4000>; |
186 | interrupts = <32>; | 195 | interrupts = <32>; |
@@ -226,7 +235,7 @@ | |||
226 | status = "disabled"; | 235 | status = "disabled"; |
227 | }; | 236 | }; |
228 | 237 | ||
229 | uart4: uart@53ff0000 { | 238 | uart4: serial@53ff0000 { |
230 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; | 239 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; |
231 | reg = <0x53ff0000 0x4000>; | 240 | reg = <0x53ff0000 0x4000>; |
232 | interrupts = <13>; | 241 | interrupts = <13>; |
@@ -241,7 +250,7 @@ | |||
241 | reg = <0x60000000 0x10000000>; | 250 | reg = <0x60000000 0x10000000>; |
242 | ranges; | 251 | ranges; |
243 | 252 | ||
244 | uart5: uart@63f90000 { | 253 | uart5: serial@63f90000 { |
245 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; | 254 | compatible = "fsl,imx53-uart", "fsl,imx21-uart"; |
246 | reg = <0x63f90000 0x4000>; | 255 | reg = <0x63f90000 0x4000>; |
247 | interrupts = <86>; | 256 | interrupts = <86>; |
@@ -290,7 +299,31 @@ | |||
290 | status = "disabled"; | 299 | status = "disabled"; |
291 | }; | 300 | }; |
292 | 301 | ||
293 | fec@63fec000 { | 302 | ssi1: ssi@63fcc000 { |
303 | compatible = "fsl,imx53-ssi", "fsl,imx21-ssi"; | ||
304 | reg = <0x63fcc000 0x4000>; | ||
305 | interrupts = <29>; | ||
306 | fsl,fifo-depth = <15>; | ||
307 | fsl,ssi-dma-events = <29 28 27 26>; /* TX0 RX0 TX1 RX1 */ | ||
308 | status = "disabled"; | ||
309 | }; | ||
310 | |||
311 | audmux@63fd0000 { | ||
312 | compatible = "fsl,imx53-audmux", "fsl,imx31-audmux"; | ||
313 | reg = <0x63fd0000 0x4000>; | ||
314 | status = "disabled"; | ||
315 | }; | ||
316 | |||
317 | ssi3: ssi@63fe8000 { | ||
318 | compatible = "fsl,imx53-ssi", "fsl,imx21-ssi"; | ||
319 | reg = <0x63fe8000 0x4000>; | ||
320 | interrupts = <96>; | ||
321 | fsl,fifo-depth = <15>; | ||
322 | fsl,ssi-dma-events = <47 46 45 44>; /* TX0 RX0 TX1 RX1 */ | ||
323 | status = "disabled"; | ||
324 | }; | ||
325 | |||
326 | ethernet@63fec000 { | ||
294 | compatible = "fsl,imx53-fec", "fsl,imx25-fec"; | 327 | compatible = "fsl,imx53-fec", "fsl,imx25-fec"; |
295 | reg = <0x63fec000 0x4000>; | 328 | reg = <0x63fec000 0x4000>; |
296 | interrupts = <87>; | 329 | interrupts = <87>; |
diff --git a/arch/arm/boot/dts/imx6q-arm2.dts b/arch/arm/boot/dts/imx6q-arm2.dts index d2eaf521c9fd..db4c6096c562 100644 --- a/arch/arm/boot/dts/imx6q-arm2.dts +++ b/arch/arm/boot/dts/imx6q-arm2.dts | |||
@@ -17,19 +17,14 @@ | |||
17 | model = "Freescale i.MX6 Quad Armadillo2 Board"; | 17 | model = "Freescale i.MX6 Quad Armadillo2 Board"; |
18 | compatible = "fsl,imx6q-arm2", "fsl,imx6q"; | 18 | compatible = "fsl,imx6q-arm2", "fsl,imx6q"; |
19 | 19 | ||
20 | chosen { | ||
21 | bootargs = "console=ttymxc0,115200 root=/dev/mmcblk3p3 rootwait"; | ||
22 | }; | ||
23 | |||
24 | memory { | 20 | memory { |
25 | reg = <0x10000000 0x80000000>; | 21 | reg = <0x10000000 0x80000000>; |
26 | }; | 22 | }; |
27 | 23 | ||
28 | soc { | 24 | soc { |
29 | aips-bus@02100000 { /* AIPS2 */ | 25 | aips-bus@02100000 { /* AIPS2 */ |
30 | enet@02188000 { | 26 | ethernet@02188000 { |
31 | phy-mode = "rgmii"; | 27 | phy-mode = "rgmii"; |
32 | local-mac-address = [00 04 9F 01 1B 61]; | ||
33 | status = "okay"; | 28 | status = "okay"; |
34 | }; | 29 | }; |
35 | 30 | ||
@@ -37,16 +32,20 @@ | |||
37 | cd-gpios = <&gpio6 11 0>; | 32 | cd-gpios = <&gpio6 11 0>; |
38 | wp-gpios = <&gpio6 14 0>; | 33 | wp-gpios = <&gpio6 14 0>; |
39 | vmmc-supply = <®_3p3v>; | 34 | vmmc-supply = <®_3p3v>; |
35 | pinctrl-names = "default"; | ||
36 | pinctrl-0 = <&pinctrl_usdhc3_1>; | ||
40 | status = "okay"; | 37 | status = "okay"; |
41 | }; | 38 | }; |
42 | 39 | ||
43 | usdhc@0219c000 { /* uSDHC4 */ | 40 | usdhc@0219c000 { /* uSDHC4 */ |
44 | non-removable; | 41 | non-removable; |
45 | vmmc-supply = <®_3p3v>; | 42 | vmmc-supply = <®_3p3v>; |
43 | pinctrl-names = "default"; | ||
44 | pinctrl-0 = <&pinctrl_usdhc4_1>; | ||
46 | status = "okay"; | 45 | status = "okay"; |
47 | }; | 46 | }; |
48 | 47 | ||
49 | uart4: uart@021f0000 { | 48 | uart4: serial@021f0000 { |
50 | status = "okay"; | 49 | status = "okay"; |
51 | }; | 50 | }; |
52 | }; | 51 | }; |
diff --git a/arch/arm/boot/dts/imx6q-sabrelite.dts b/arch/arm/boot/dts/imx6q-sabrelite.dts index 4663a4e5a285..e0ec92973e7e 100644 --- a/arch/arm/boot/dts/imx6q-sabrelite.dts +++ b/arch/arm/boot/dts/imx6q-sabrelite.dts | |||
@@ -22,8 +22,30 @@ | |||
22 | }; | 22 | }; |
23 | 23 | ||
24 | soc { | 24 | soc { |
25 | aips-bus@02000000 { /* AIPS1 */ | ||
26 | spba-bus@02000000 { | ||
27 | ecspi@02008000 { /* eCSPI1 */ | ||
28 | fsl,spi-num-chipselects = <1>; | ||
29 | cs-gpios = <&gpio3 19 0>; | ||
30 | status = "okay"; | ||
31 | |||
32 | flash: m25p80@0 { | ||
33 | compatible = "sst,sst25vf016b"; | ||
34 | spi-max-frequency = <20000000>; | ||
35 | reg = <0>; | ||
36 | }; | ||
37 | }; | ||
38 | |||
39 | ssi1: ssi@02028000 { | ||
40 | fsl,mode = "i2s-slave"; | ||
41 | status = "okay"; | ||
42 | }; | ||
43 | }; | ||
44 | |||
45 | }; | ||
46 | |||
25 | aips-bus@02100000 { /* AIPS2 */ | 47 | aips-bus@02100000 { /* AIPS2 */ |
26 | enet@02188000 { | 48 | ethernet@02188000 { |
27 | phy-mode = "rgmii"; | 49 | phy-mode = "rgmii"; |
28 | phy-reset-gpios = <&gpio3 23 0>; | 50 | phy-reset-gpios = <&gpio3 23 0>; |
29 | status = "okay"; | 51 | status = "okay"; |
@@ -43,13 +65,23 @@ | |||
43 | status = "okay"; | 65 | status = "okay"; |
44 | }; | 66 | }; |
45 | 67 | ||
46 | uart2: uart@021e8000 { | 68 | audmux@021d8000 { |
69 | status = "okay"; | ||
70 | pinctrl-names = "default"; | ||
71 | pinctrl-0 = <&pinctrl_audmux_1>; | ||
72 | }; | ||
73 | |||
74 | uart2: serial@021e8000 { | ||
47 | status = "okay"; | 75 | status = "okay"; |
76 | pinctrl-names = "default"; | ||
77 | pinctrl-0 = <&pinctrl_serial2_1>; | ||
48 | }; | 78 | }; |
49 | 79 | ||
50 | i2c@021a0000 { /* I2C1 */ | 80 | i2c@021a0000 { /* I2C1 */ |
51 | status = "okay"; | 81 | status = "okay"; |
52 | clock-frequency = <100000>; | 82 | clock-frequency = <100000>; |
83 | pinctrl-names = "default"; | ||
84 | pinctrl-0 = <&pinctrl_i2c1_1>; | ||
53 | 85 | ||
54 | codec: sgtl5000@0a { | 86 | codec: sgtl5000@0a { |
55 | compatible = "fsl,sgtl5000"; | 87 | compatible = "fsl,sgtl5000"; |
@@ -80,4 +112,18 @@ | |||
80 | regulator-always-on; | 112 | regulator-always-on; |
81 | }; | 113 | }; |
82 | }; | 114 | }; |
115 | |||
116 | sound { | ||
117 | compatible = "fsl,imx6q-sabrelite-sgtl5000", | ||
118 | "fsl,imx-audio-sgtl5000"; | ||
119 | model = "imx6q-sabrelite-sgtl5000"; | ||
120 | ssi-controller = <&ssi1>; | ||
121 | audio-codec = <&codec>; | ||
122 | audio-routing = | ||
123 | "MIC_IN", "Mic Jack", | ||
124 | "Mic Jack", "Mic Bias", | ||
125 | "Headphone Jack", "HP_OUT"; | ||
126 | mux-int-port = <1>; | ||
127 | mux-ext-port = <4>; | ||
128 | }; | ||
83 | }; | 129 | }; |
diff --git a/arch/arm/boot/dts/imx6q-sabresd.dts b/arch/arm/boot/dts/imx6q-sabresd.dts new file mode 100644 index 000000000000..07509a181178 --- /dev/null +++ b/arch/arm/boot/dts/imx6q-sabresd.dts | |||
@@ -0,0 +1,53 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Freescale Semiconductor, Inc. | ||
3 | * Copyright 2011 Linaro Ltd. | ||
4 | * | ||
5 | * The code contained herein is licensed under the GNU General Public | ||
6 | * License. You may obtain a copy of the GNU General Public License | ||
7 | * Version 2 or later at the following locations: | ||
8 | * | ||
9 | * http://www.opensource.org/licenses/gpl-license.html | ||
10 | * http://www.gnu.org/copyleft/gpl.html | ||
11 | */ | ||
12 | |||
13 | /dts-v1/; | ||
14 | /include/ "imx6q.dtsi" | ||
15 | |||
16 | / { | ||
17 | model = "Freescale i.MX6Q SABRE Smart Device Board"; | ||
18 | compatible = "fsl,imx6q-sabresd", "fsl,imx6q"; | ||
19 | |||
20 | memory { | ||
21 | reg = <0x10000000 0x40000000>; | ||
22 | }; | ||
23 | |||
24 | soc { | ||
25 | |||
26 | aips-bus@02000000 { /* AIPS1 */ | ||
27 | spba-bus@02000000 { | ||
28 | uart1: serial@02020000 { | ||
29 | status = "okay"; | ||
30 | }; | ||
31 | }; | ||
32 | }; | ||
33 | |||
34 | aips-bus@02100000 { /* AIPS2 */ | ||
35 | ethernet@02188000 { | ||
36 | phy-mode = "rgmii"; | ||
37 | status = "okay"; | ||
38 | }; | ||
39 | |||
40 | usdhc@02194000 { /* uSDHC2 */ | ||
41 | cd-gpios = <&gpio2 2 0>; | ||
42 | wp-gpios = <&gpio2 3 0>; | ||
43 | status = "okay"; | ||
44 | }; | ||
45 | |||
46 | usdhc@02198000 { /* uSDHC3 */ | ||
47 | cd-gpios = <&gpio2 0 0>; | ||
48 | wp-gpios = <&gpio2 1 0>; | ||
49 | status = "okay"; | ||
50 | }; | ||
51 | }; | ||
52 | }; | ||
53 | }; | ||
diff --git a/arch/arm/boot/dts/imx6q.dtsi b/arch/arm/boot/dts/imx6q.dtsi index 4905f51a106f..8c90cbac945f 100644 --- a/arch/arm/boot/dts/imx6q.dtsi +++ b/arch/arm/boot/dts/imx6q.dtsi | |||
@@ -165,7 +165,7 @@ | |||
165 | status = "disabled"; | 165 | status = "disabled"; |
166 | }; | 166 | }; |
167 | 167 | ||
168 | uart1: uart@02020000 { | 168 | uart1: serial@02020000 { |
169 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; | 169 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; |
170 | reg = <0x02020000 0x4000>; | 170 | reg = <0x02020000 0x4000>; |
171 | interrupts = <0 26 0x04>; | 171 | interrupts = <0 26 0x04>; |
@@ -177,19 +177,31 @@ | |||
177 | interrupts = <0 51 0x04>; | 177 | interrupts = <0 51 0x04>; |
178 | }; | 178 | }; |
179 | 179 | ||
180 | ssi@02028000 { /* SSI1 */ | 180 | ssi1: ssi@02028000 { |
181 | compatible = "fsl,imx6q-ssi","fsl,imx21-ssi"; | ||
181 | reg = <0x02028000 0x4000>; | 182 | reg = <0x02028000 0x4000>; |
182 | interrupts = <0 46 0x04>; | 183 | interrupts = <0 46 0x04>; |
184 | fsl,fifo-depth = <15>; | ||
185 | fsl,ssi-dma-events = <38 37>; | ||
186 | status = "disabled"; | ||
183 | }; | 187 | }; |
184 | 188 | ||
185 | ssi@0202c000 { /* SSI2 */ | 189 | ssi2: ssi@0202c000 { |
190 | compatible = "fsl,imx6q-ssi","fsl,imx21-ssi"; | ||
186 | reg = <0x0202c000 0x4000>; | 191 | reg = <0x0202c000 0x4000>; |
187 | interrupts = <0 47 0x04>; | 192 | interrupts = <0 47 0x04>; |
193 | fsl,fifo-depth = <15>; | ||
194 | fsl,ssi-dma-events = <42 41>; | ||
195 | status = "disabled"; | ||
188 | }; | 196 | }; |
189 | 197 | ||
190 | ssi@02030000 { /* SSI3 */ | 198 | ssi3: ssi@02030000 { |
199 | compatible = "fsl,imx6q-ssi","fsl,imx21-ssi"; | ||
191 | reg = <0x02030000 0x4000>; | 200 | reg = <0x02030000 0x4000>; |
192 | interrupts = <0 48 0x04>; | 201 | interrupts = <0 48 0x04>; |
202 | fsl,fifo-depth = <15>; | ||
203 | fsl,ssi-dma-events = <46 45>; | ||
204 | status = "disabled"; | ||
193 | }; | 205 | }; |
194 | 206 | ||
195 | asrc@02034000 { | 207 | asrc@02034000 { |
@@ -346,6 +358,90 @@ | |||
346 | compatible = "fsl,imx6q-anatop"; | 358 | compatible = "fsl,imx6q-anatop"; |
347 | reg = <0x020c8000 0x1000>; | 359 | reg = <0x020c8000 0x1000>; |
348 | interrupts = <0 49 0x04 0 54 0x04 0 127 0x04>; | 360 | interrupts = <0 49 0x04 0 54 0x04 0 127 0x04>; |
361 | |||
362 | regulator-1p1@110 { | ||
363 | compatible = "fsl,anatop-regulator"; | ||
364 | regulator-name = "vdd1p1"; | ||
365 | regulator-min-microvolt = <800000>; | ||
366 | regulator-max-microvolt = <1375000>; | ||
367 | regulator-always-on; | ||
368 | anatop-reg-offset = <0x110>; | ||
369 | anatop-vol-bit-shift = <8>; | ||
370 | anatop-vol-bit-width = <5>; | ||
371 | anatop-min-bit-val = <4>; | ||
372 | anatop-min-voltage = <800000>; | ||
373 | anatop-max-voltage = <1375000>; | ||
374 | }; | ||
375 | |||
376 | regulator-3p0@120 { | ||
377 | compatible = "fsl,anatop-regulator"; | ||
378 | regulator-name = "vdd3p0"; | ||
379 | regulator-min-microvolt = <2800000>; | ||
380 | regulator-max-microvolt = <3150000>; | ||
381 | regulator-always-on; | ||
382 | anatop-reg-offset = <0x120>; | ||
383 | anatop-vol-bit-shift = <8>; | ||
384 | anatop-vol-bit-width = <5>; | ||
385 | anatop-min-bit-val = <0>; | ||
386 | anatop-min-voltage = <2625000>; | ||
387 | anatop-max-voltage = <3400000>; | ||
388 | }; | ||
389 | |||
390 | regulator-2p5@130 { | ||
391 | compatible = "fsl,anatop-regulator"; | ||
392 | regulator-name = "vdd2p5"; | ||
393 | regulator-min-microvolt = <2000000>; | ||
394 | regulator-max-microvolt = <2750000>; | ||
395 | regulator-always-on; | ||
396 | anatop-reg-offset = <0x130>; | ||
397 | anatop-vol-bit-shift = <8>; | ||
398 | anatop-vol-bit-width = <5>; | ||
399 | anatop-min-bit-val = <0>; | ||
400 | anatop-min-voltage = <2000000>; | ||
401 | anatop-max-voltage = <2750000>; | ||
402 | }; | ||
403 | |||
404 | regulator-vddcore@140 { | ||
405 | compatible = "fsl,anatop-regulator"; | ||
406 | regulator-name = "cpu"; | ||
407 | regulator-min-microvolt = <725000>; | ||
408 | regulator-max-microvolt = <1450000>; | ||
409 | regulator-always-on; | ||
410 | anatop-reg-offset = <0x140>; | ||
411 | anatop-vol-bit-shift = <0>; | ||
412 | anatop-vol-bit-width = <5>; | ||
413 | anatop-min-bit-val = <1>; | ||
414 | anatop-min-voltage = <725000>; | ||
415 | anatop-max-voltage = <1450000>; | ||
416 | }; | ||
417 | |||
418 | regulator-vddpu@140 { | ||
419 | compatible = "fsl,anatop-regulator"; | ||
420 | regulator-name = "vddpu"; | ||
421 | regulator-min-microvolt = <725000>; | ||
422 | regulator-max-microvolt = <1450000>; | ||
423 | regulator-always-on; | ||
424 | anatop-reg-offset = <0x140>; | ||
425 | anatop-vol-bit-shift = <9>; | ||
426 | anatop-vol-bit-width = <5>; | ||
427 | anatop-min-bit-val = <1>; | ||
428 | anatop-min-voltage = <725000>; | ||
429 | anatop-max-voltage = <1450000>; | ||
430 | }; | ||
431 | |||
432 | regulator-vddsoc@140 { | ||
433 | compatible = "fsl,anatop-regulator"; | ||
434 | regulator-name = "vddsoc"; | ||
435 | regulator-min-microvolt = <725000>; | ||
436 | regulator-max-microvolt = <1450000>; | ||
437 | regulator-always-on; | ||
438 | anatop-reg-offset = <0x140>; | ||
439 | anatop-vol-bit-shift = <18>; | ||
440 | anatop-vol-bit-width = <5>; | ||
441 | anatop-min-bit-val = <1>; | ||
442 | anatop-min-voltage = <725000>; | ||
443 | anatop-max-voltage = <1450000>; | ||
444 | }; | ||
349 | }; | 445 | }; |
350 | 446 | ||
351 | usbphy@020c9000 { /* USBPHY1 */ | 447 | usbphy@020c9000 { /* USBPHY1 */ |
@@ -386,7 +482,62 @@ | |||
386 | }; | 482 | }; |
387 | 483 | ||
388 | iomuxc@020e0000 { | 484 | iomuxc@020e0000 { |
485 | compatible = "fsl,imx6q-iomuxc"; | ||
389 | reg = <0x020e0000 0x4000>; | 486 | reg = <0x020e0000 0x4000>; |
487 | |||
488 | /* shared pinctrl settings */ | ||
489 | audmux { | ||
490 | pinctrl_audmux_1: audmux-1 { | ||
491 | fsl,pins = <18 0x80000000 /* MX6Q_PAD_SD2_DAT0__AUDMUX_AUD4_RXD */ | ||
492 | 1586 0x80000000 /* MX6Q_PAD_SD2_DAT3__AUDMUX_AUD4_TXC */ | ||
493 | 11 0x80000000 /* MX6Q_PAD_SD2_DAT2__AUDMUX_AUD4_TXD */ | ||
494 | 3 0x80000000>; /* MX6Q_PAD_SD2_DAT1__AUDMUX_AUD4_TXFS */ | ||
495 | }; | ||
496 | }; | ||
497 | |||
498 | i2c1 { | ||
499 | pinctrl_i2c1_1: i2c1grp-1 { | ||
500 | fsl,pins = <137 0x4001b8b1 /* MX6Q_PAD_EIM_D21__I2C1_SCL */ | ||
501 | 196 0x4001b8b1>; /* MX6Q_PAD_EIM_D28__I2C1_SDA */ | ||
502 | }; | ||
503 | }; | ||
504 | |||
505 | serial2 { | ||
506 | pinctrl_serial2_1: serial2grp-1 { | ||
507 | fsl,pins = <183 0x1b0b1 /* MX6Q_PAD_EIM_D26__UART2_TXD */ | ||
508 | 191 0x1b0b1>; /* MX6Q_PAD_EIM_D27__UART2_RXD */ | ||
509 | }; | ||
510 | }; | ||
511 | |||
512 | usdhc3 { | ||
513 | pinctrl_usdhc3_1: usdhc3grp-1 { | ||
514 | fsl,pins = <1273 0x17059 /* MX6Q_PAD_SD3_CMD__USDHC3_CMD */ | ||
515 | 1281 0x10059 /* MX6Q_PAD_SD3_CLK__USDHC3_CLK */ | ||
516 | 1289 0x17059 /* MX6Q_PAD_SD3_DAT0__USDHC3_DAT0 */ | ||
517 | 1297 0x17059 /* MX6Q_PAD_SD3_DAT1__USDHC3_DAT1 */ | ||
518 | 1305 0x17059 /* MX6Q_PAD_SD3_DAT2__USDHC3_DAT2 */ | ||
519 | 1312 0x17059 /* MX6Q_PAD_SD3_DAT3__USDHC3_DAT3 */ | ||
520 | 1265 0x17059 /* MX6Q_PAD_SD3_DAT4__USDHC3_DAT4 */ | ||
521 | 1257 0x17059 /* MX6Q_PAD_SD3_DAT5__USDHC3_DAT5 */ | ||
522 | 1249 0x17059 /* MX6Q_PAD_SD3_DAT6__USDHC3_DAT6 */ | ||
523 | 1241 0x17059>; /* MX6Q_PAD_SD3_DAT7__USDHC3_DAT7 */ | ||
524 | }; | ||
525 | }; | ||
526 | |||
527 | usdhc4 { | ||
528 | pinctrl_usdhc4_1: usdhc4grp-1 { | ||
529 | fsl,pins = <1386 0x17059 /* MX6Q_PAD_SD4_CMD__USDHC4_CMD */ | ||
530 | 1392 0x10059 /* MX6Q_PAD_SD4_CLK__USDHC4_CLK */ | ||
531 | 1462 0x17059 /* MX6Q_PAD_SD4_DAT0__USDHC4_DAT0 */ | ||
532 | 1470 0x17059 /* MX6Q_PAD_SD4_DAT1__USDHC4_DAT1 */ | ||
533 | 1478 0x17059 /* MX6Q_PAD_SD4_DAT2__USDHC4_DAT2 */ | ||
534 | 1486 0x17059 /* MX6Q_PAD_SD4_DAT3__USDHC4_DAT3 */ | ||
535 | 1493 0x17059 /* MX6Q_PAD_SD4_DAT4__USDHC4_DAT4 */ | ||
536 | 1501 0x17059 /* MX6Q_PAD_SD4_DAT5__USDHC4_DAT5 */ | ||
537 | 1509 0x17059 /* MX6Q_PAD_SD4_DAT6__USDHC4_DAT6 */ | ||
538 | 1517 0x17059>; /* MX6Q_PAD_SD4_DAT7__USDHC4_DAT7 */ | ||
539 | }; | ||
540 | }; | ||
390 | }; | 541 | }; |
391 | 542 | ||
392 | dcic@020e4000 { /* DCIC1 */ | 543 | dcic@020e4000 { /* DCIC1 */ |
@@ -422,7 +573,7 @@ | |||
422 | reg = <0x0217c000 0x4000>; | 573 | reg = <0x0217c000 0x4000>; |
423 | }; | 574 | }; |
424 | 575 | ||
425 | enet@02188000 { | 576 | ethernet@02188000 { |
426 | compatible = "fsl,imx6q-fec"; | 577 | compatible = "fsl,imx6q-fec"; |
427 | reg = <0x02188000 0x4000>; | 578 | reg = <0x02188000 0x4000>; |
428 | interrupts = <0 118 0x04 0 119 0x04>; | 579 | interrupts = <0 118 0x04 0 119 0x04>; |
@@ -527,7 +678,9 @@ | |||
527 | }; | 678 | }; |
528 | 679 | ||
529 | audmux@021d8000 { | 680 | audmux@021d8000 { |
681 | compatible = "fsl,imx6q-audmux", "fsl,imx31-audmux"; | ||
530 | reg = <0x021d8000 0x4000>; | 682 | reg = <0x021d8000 0x4000>; |
683 | status = "disabled"; | ||
531 | }; | 684 | }; |
532 | 685 | ||
533 | mipi@021dc000 { /* MIPI-CSI */ | 686 | mipi@021dc000 { /* MIPI-CSI */ |
@@ -543,28 +696,28 @@ | |||
543 | interrupts = <0 18 0x04>; | 696 | interrupts = <0 18 0x04>; |
544 | }; | 697 | }; |
545 | 698 | ||
546 | uart2: uart@021e8000 { | 699 | uart2: serial@021e8000 { |
547 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; | 700 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; |
548 | reg = <0x021e8000 0x4000>; | 701 | reg = <0x021e8000 0x4000>; |
549 | interrupts = <0 27 0x04>; | 702 | interrupts = <0 27 0x04>; |
550 | status = "disabled"; | 703 | status = "disabled"; |
551 | }; | 704 | }; |
552 | 705 | ||
553 | uart3: uart@021ec000 { | 706 | uart3: serial@021ec000 { |
554 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; | 707 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; |
555 | reg = <0x021ec000 0x4000>; | 708 | reg = <0x021ec000 0x4000>; |
556 | interrupts = <0 28 0x04>; | 709 | interrupts = <0 28 0x04>; |
557 | status = "disabled"; | 710 | status = "disabled"; |
558 | }; | 711 | }; |
559 | 712 | ||
560 | uart4: uart@021f0000 { | 713 | uart4: serial@021f0000 { |
561 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; | 714 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; |
562 | reg = <0x021f0000 0x4000>; | 715 | reg = <0x021f0000 0x4000>; |
563 | interrupts = <0 29 0x04>; | 716 | interrupts = <0 29 0x04>; |
564 | status = "disabled"; | 717 | status = "disabled"; |
565 | }; | 718 | }; |
566 | 719 | ||
567 | uart5: uart@021f4000 { | 720 | uart5: serial@021f4000 { |
568 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; | 721 | compatible = "fsl,imx6q-uart", "fsl,imx21-uart"; |
569 | reg = <0x021f4000 0x4000>; | 722 | reg = <0x021f4000 0x4000>; |
570 | interrupts = <0 30 0x04>; | 723 | interrupts = <0 30 0x04>; |
diff --git a/arch/arm/boot/dts/tegra-cardhu.dts b/arch/arm/boot/dts/tegra-cardhu.dts index 4a166357172b..36321bceec46 100644 --- a/arch/arm/boot/dts/tegra-cardhu.dts +++ b/arch/arm/boot/dts/tegra-cardhu.dts | |||
@@ -7,10 +7,10 @@ | |||
7 | compatible = "nvidia,cardhu", "nvidia,tegra30"; | 7 | compatible = "nvidia,cardhu", "nvidia,tegra30"; |
8 | 8 | ||
9 | memory { | 9 | memory { |
10 | reg = < 0x80000000 0x40000000 >; | 10 | reg = <0x80000000 0x40000000>; |
11 | }; | 11 | }; |
12 | 12 | ||
13 | pinmux@70000000 { | 13 | pinmux { |
14 | pinctrl-names = "default"; | 14 | pinctrl-names = "default"; |
15 | pinctrl-0 = <&state_default>; | 15 | pinctrl-0 = <&state_default>; |
16 | 16 | ||
@@ -64,42 +64,40 @@ | |||
64 | }; | 64 | }; |
65 | 65 | ||
66 | serial@70006000 { | 66 | serial@70006000 { |
67 | clock-frequency = < 408000000 >; | 67 | status = "okay"; |
68 | }; | 68 | clock-frequency = <408000000>; |
69 | |||
70 | serial@70006040 { | ||
71 | status = "disable"; | ||
72 | }; | ||
73 | |||
74 | serial@70006200 { | ||
75 | status = "disable"; | ||
76 | }; | ||
77 | |||
78 | serial@70006300 { | ||
79 | status = "disable"; | ||
80 | }; | ||
81 | |||
82 | serial@70006400 { | ||
83 | status = "disable"; | ||
84 | }; | 69 | }; |
85 | 70 | ||
86 | i2c@7000c000 { | 71 | i2c@7000c000 { |
72 | status = "okay"; | ||
87 | clock-frequency = <100000>; | 73 | clock-frequency = <100000>; |
88 | }; | 74 | }; |
89 | 75 | ||
90 | i2c@7000c400 { | 76 | i2c@7000c400 { |
77 | status = "okay"; | ||
91 | clock-frequency = <100000>; | 78 | clock-frequency = <100000>; |
92 | }; | 79 | }; |
93 | 80 | ||
94 | i2c@7000c500 { | 81 | i2c@7000c500 { |
82 | status = "okay"; | ||
95 | clock-frequency = <100000>; | 83 | clock-frequency = <100000>; |
84 | |||
85 | /* ALS and Proximity sensor */ | ||
86 | isl29028@44 { | ||
87 | compatible = "isil,isl29028"; | ||
88 | reg = <0x44>; | ||
89 | interrupt-parent = <&gpio>; | ||
90 | interrupts = <88 0x04>; /*gpio PL0 */ | ||
91 | }; | ||
96 | }; | 92 | }; |
97 | 93 | ||
98 | i2c@7000c700 { | 94 | i2c@7000c700 { |
95 | status = "okay"; | ||
99 | clock-frequency = <100000>; | 96 | clock-frequency = <100000>; |
100 | }; | 97 | }; |
101 | 98 | ||
102 | i2c@7000d000 { | 99 | i2c@7000d000 { |
100 | status = "okay"; | ||
103 | clock-frequency = <100000>; | 101 | clock-frequency = <100000>; |
104 | 102 | ||
105 | wm8903: wm8903@1a { | 103 | wm8903: wm8903@1a { |
@@ -115,46 +113,41 @@ | |||
115 | micdet-delay = <100>; | 113 | micdet-delay = <100>; |
116 | gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>; | 114 | gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>; |
117 | }; | 115 | }; |
116 | |||
117 | tps62361 { | ||
118 | compatible = "ti,tps62361"; | ||
119 | reg = <0x60>; | ||
120 | |||
121 | regulator-name = "tps62361-vout"; | ||
122 | regulator-min-microvolt = <500000>; | ||
123 | regulator-max-microvolt = <1500000>; | ||
124 | regulator-boot-on; | ||
125 | regulator-always-on; | ||
126 | ti,vsel0-state-high; | ||
127 | ti,vsel1-state-high; | ||
128 | }; | ||
129 | }; | ||
130 | |||
131 | ahub { | ||
132 | i2s@70080400 { | ||
133 | status = "okay"; | ||
134 | }; | ||
118 | }; | 135 | }; |
119 | 136 | ||
120 | sdhci@78000000 { | 137 | sdhci@78000000 { |
138 | status = "okay"; | ||
121 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 139 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ |
122 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ | 140 | wp-gpios = <&gpio 155 0>; /* gpio PT3 */ |
123 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ | 141 | power-gpios = <&gpio 31 0>; /* gpio PD7 */ |
124 | bus-width = <4>; | 142 | bus-width = <4>; |
125 | }; | 143 | }; |
126 | 144 | ||
127 | sdhci@78000200 { | 145 | sdhci@78000600 { |
128 | status = "disable"; | 146 | status = "okay"; |
129 | }; | ||
130 | |||
131 | sdhci@78000400 { | ||
132 | status = "disable"; | ||
133 | }; | ||
134 | |||
135 | sdhci@78000400 { | ||
136 | support-8bit; | 147 | support-8bit; |
137 | bus-width = <8>; | 148 | bus-width = <8>; |
138 | }; | 149 | }; |
139 | 150 | ||
140 | ahub@70080000 { | ||
141 | i2s@70080300 { | ||
142 | status = "disable"; | ||
143 | }; | ||
144 | |||
145 | i2s@70080500 { | ||
146 | status = "disable"; | ||
147 | }; | ||
148 | |||
149 | i2s@70080600 { | ||
150 | status = "disable"; | ||
151 | }; | ||
152 | |||
153 | i2s@70080700 { | ||
154 | status = "disable"; | ||
155 | }; | ||
156 | }; | ||
157 | |||
158 | sound { | 151 | sound { |
159 | compatible = "nvidia,tegra-audio-wm8903-cardhu", | 152 | compatible = "nvidia,tegra-audio-wm8903-cardhu", |
160 | "nvidia,tegra-audio-wm8903"; | 153 | "nvidia,tegra-audio-wm8903"; |
diff --git a/arch/arm/boot/dts/tegra-harmony.dts b/arch/arm/boot/dts/tegra-harmony.dts index 7cd513ac5ea6..7de701365fce 100644 --- a/arch/arm/boot/dts/tegra-harmony.dts +++ b/arch/arm/boot/dts/tegra-harmony.dts | |||
@@ -6,11 +6,11 @@ | |||
6 | model = "NVIDIA Tegra2 Harmony evaluation board"; | 6 | model = "NVIDIA Tegra2 Harmony evaluation board"; |
7 | compatible = "nvidia,harmony", "nvidia,tegra20"; | 7 | compatible = "nvidia,harmony", "nvidia,tegra20"; |
8 | 8 | ||
9 | memory@0 { | 9 | memory { |
10 | reg = < 0x00000000 0x40000000 >; | 10 | reg = <0x00000000 0x40000000>; |
11 | }; | 11 | }; |
12 | 12 | ||
13 | pinmux@70000000 { | 13 | pinmux { |
14 | pinctrl-names = "default"; | 14 | pinctrl-names = "default"; |
15 | pinctrl-0 = <&state_default>; | 15 | pinctrl-0 = <&state_default>; |
16 | 16 | ||
@@ -234,42 +234,81 @@ | |||
234 | }; | 234 | }; |
235 | }; | 235 | }; |
236 | 236 | ||
237 | pmc@7000f400 { | 237 | i2s@70002800 { |
238 | nvidia,invert-interrupt; | 238 | status = "okay"; |
239 | }; | ||
240 | |||
241 | serial@70006300 { | ||
242 | status = "okay"; | ||
243 | clock-frequency = <216000000>; | ||
239 | }; | 244 | }; |
240 | 245 | ||
241 | i2c@7000c000 { | 246 | i2c@7000c000 { |
247 | status = "okay"; | ||
242 | clock-frequency = <400000>; | 248 | clock-frequency = <400000>; |
243 | 249 | ||
244 | wm8903: wm8903@1a { | 250 | wm8903: wm8903@1a { |
245 | compatible = "wlf,wm8903"; | 251 | compatible = "wlf,wm8903"; |
246 | reg = <0x1a>; | 252 | reg = <0x1a>; |
247 | interrupt-parent = <&gpio>; | 253 | interrupt-parent = <&gpio>; |
248 | interrupts = < 187 0x04 >; | 254 | interrupts = <187 0x04>; |
249 | 255 | ||
250 | gpio-controller; | 256 | gpio-controller; |
251 | #gpio-cells = <2>; | 257 | #gpio-cells = <2>; |
252 | 258 | ||
253 | micdet-cfg = <0>; | 259 | micdet-cfg = <0>; |
254 | micdet-delay = <100>; | 260 | micdet-delay = <100>; |
255 | gpio-cfg = < 0xffffffff 0xffffffff 0 0xffffffff 0xffffffff >; | 261 | gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>; |
256 | }; | 262 | }; |
257 | }; | 263 | }; |
258 | 264 | ||
259 | i2c@7000c400 { | 265 | i2c@7000c400 { |
266 | status = "okay"; | ||
260 | clock-frequency = <400000>; | 267 | clock-frequency = <400000>; |
261 | }; | 268 | }; |
262 | 269 | ||
263 | i2c@7000c500 { | 270 | i2c@7000c500 { |
271 | status = "okay"; | ||
264 | clock-frequency = <400000>; | 272 | clock-frequency = <400000>; |
265 | }; | 273 | }; |
266 | 274 | ||
267 | i2c@7000d000 { | 275 | i2c@7000d000 { |
276 | status = "okay"; | ||
268 | clock-frequency = <400000>; | 277 | clock-frequency = <400000>; |
269 | }; | 278 | }; |
270 | 279 | ||
271 | i2s@70002a00 { | 280 | pmc { |
272 | status = "disable"; | 281 | nvidia,invert-interrupt; |
282 | }; | ||
283 | |||
284 | usb@c5000000 { | ||
285 | status = "okay"; | ||
286 | }; | ||
287 | |||
288 | usb@c5004000 { | ||
289 | status = "okay"; | ||
290 | nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */ | ||
291 | }; | ||
292 | |||
293 | usb@c5008000 { | ||
294 | status = "okay"; | ||
295 | }; | ||
296 | |||
297 | sdhci@c8000200 { | ||
298 | status = "okay"; | ||
299 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | ||
300 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | ||
301 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ | ||
302 | bus-width = <4>; | ||
303 | }; | ||
304 | |||
305 | sdhci@c8000600 { | ||
306 | status = "okay"; | ||
307 | cd-gpios = <&gpio 58 0>; /* gpio PH2 */ | ||
308 | wp-gpios = <&gpio 59 0>; /* gpio PH3 */ | ||
309 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | ||
310 | support-8bit; | ||
311 | bus-width = <8>; | ||
273 | }; | 312 | }; |
274 | 313 | ||
275 | sound { | 314 | sound { |
@@ -295,51 +334,4 @@ | |||
295 | nvidia,int-mic-en-gpios = <&gpio 184 0>; /*gpio PX0 */ | 334 | nvidia,int-mic-en-gpios = <&gpio 184 0>; /*gpio PX0 */ |
296 | nvidia,ext-mic-en-gpios = <&gpio 185 0>; /* gpio PX1 */ | 335 | nvidia,ext-mic-en-gpios = <&gpio 185 0>; /* gpio PX1 */ |
297 | }; | 336 | }; |
298 | |||
299 | serial@70006000 { | ||
300 | status = "disable"; | ||
301 | }; | ||
302 | |||
303 | serial@70006040 { | ||
304 | status = "disable"; | ||
305 | }; | ||
306 | |||
307 | serial@70006200 { | ||
308 | status = "disable"; | ||
309 | }; | ||
310 | |||
311 | serial@70006300 { | ||
312 | clock-frequency = < 216000000 >; | ||
313 | }; | ||
314 | |||
315 | serial@70006400 { | ||
316 | status = "disable"; | ||
317 | }; | ||
318 | |||
319 | sdhci@c8000000 { | ||
320 | status = "disable"; | ||
321 | }; | ||
322 | |||
323 | sdhci@c8000200 { | ||
324 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | ||
325 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | ||
326 | power-gpios = <&gpio 155 0>; /* gpio PT3 */ | ||
327 | bus-width = <4>; | ||
328 | }; | ||
329 | |||
330 | sdhci@c8000400 { | ||
331 | status = "disable"; | ||
332 | }; | ||
333 | |||
334 | sdhci@c8000600 { | ||
335 | cd-gpios = <&gpio 58 0>; /* gpio PH2 */ | ||
336 | wp-gpios = <&gpio 59 0>; /* gpio PH3 */ | ||
337 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | ||
338 | support-8bit; | ||
339 | bus-width = <8>; | ||
340 | }; | ||
341 | |||
342 | usb@c5004000 { | ||
343 | nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */ | ||
344 | }; | ||
345 | }; | 337 | }; |
diff --git a/arch/arm/boot/dts/tegra-paz00.dts b/arch/arm/boot/dts/tegra-paz00.dts index 8d625e4c5de5..bfeb117d5aea 100644 --- a/arch/arm/boot/dts/tegra-paz00.dts +++ b/arch/arm/boot/dts/tegra-paz00.dts | |||
@@ -6,11 +6,11 @@ | |||
6 | model = "Toshiba AC100 / Dynabook AZ"; | 6 | model = "Toshiba AC100 / Dynabook AZ"; |
7 | compatible = "compal,paz00", "nvidia,tegra20"; | 7 | compatible = "compal,paz00", "nvidia,tegra20"; |
8 | 8 | ||
9 | memory@0 { | 9 | memory { |
10 | reg = <0x00000000 0x20000000>; | 10 | reg = <0x00000000 0x20000000>; |
11 | }; | 11 | }; |
12 | 12 | ||
13 | pinmux@70000000 { | 13 | pinmux { |
14 | pinctrl-names = "default"; | 14 | pinctrl-names = "default"; |
15 | pinctrl-0 = <&state_default>; | 15 | pinctrl-0 = <&state_default>; |
16 | 16 | ||
@@ -226,7 +226,22 @@ | |||
226 | }; | 226 | }; |
227 | }; | 227 | }; |
228 | 228 | ||
229 | i2s@70002800 { | ||
230 | status = "okay"; | ||
231 | }; | ||
232 | |||
233 | serial@70006000 { | ||
234 | status = "okay"; | ||
235 | clock-frequency = <216000000>; | ||
236 | }; | ||
237 | |||
238 | serial@70006200 { | ||
239 | status = "okay"; | ||
240 | clock-frequency = <216000000>; | ||
241 | }; | ||
242 | |||
229 | i2c@7000c000 { | 243 | i2c@7000c000 { |
244 | status = "okay"; | ||
230 | clock-frequency = <400000>; | 245 | clock-frequency = <400000>; |
231 | 246 | ||
232 | alc5632: alc5632@1e { | 247 | alc5632: alc5632@1e { |
@@ -238,25 +253,23 @@ | |||
238 | }; | 253 | }; |
239 | 254 | ||
240 | i2c@7000c400 { | 255 | i2c@7000c400 { |
256 | status = "okay"; | ||
241 | clock-frequency = <400000>; | 257 | clock-frequency = <400000>; |
242 | }; | 258 | }; |
243 | 259 | ||
244 | i2c@7000c500 { | 260 | nvec { |
245 | status = "disable"; | ||
246 | }; | ||
247 | |||
248 | nvec@7000c500 { | ||
249 | #address-cells = <1>; | ||
250 | #size-cells = <0>; | ||
251 | compatible = "nvidia,nvec"; | 261 | compatible = "nvidia,nvec"; |
252 | reg = <0x7000C500 0x100>; | 262 | reg = <0x7000c500 0x100>; |
253 | interrupts = <0 92 0x04>; | 263 | interrupts = <0 92 0x04>; |
264 | #address-cells = <1>; | ||
265 | #size-cells = <0>; | ||
254 | clock-frequency = <80000>; | 266 | clock-frequency = <80000>; |
255 | request-gpios = <&gpio 170 0>; | 267 | request-gpios = <&gpio 170 0>; /* gpio PV2 */ |
256 | slave-addr = <138>; | 268 | slave-addr = <138>; |
257 | }; | 269 | }; |
258 | 270 | ||
259 | i2c@7000d000 { | 271 | i2c@7000d000 { |
272 | status = "okay"; | ||
260 | clock-frequency = <400000>; | 273 | clock-frequency = <400000>; |
261 | 274 | ||
262 | adt7461@4c { | 275 | adt7461@4c { |
@@ -265,66 +278,29 @@ | |||
265 | }; | 278 | }; |
266 | }; | 279 | }; |
267 | 280 | ||
268 | i2s@70002a00 { | 281 | usb@c5000000 { |
269 | status = "disable"; | 282 | status = "okay"; |
270 | }; | ||
271 | |||
272 | sound { | ||
273 | compatible = "nvidia,tegra-audio-alc5632-paz00", | ||
274 | "nvidia,tegra-audio-alc5632"; | ||
275 | |||
276 | nvidia,model = "Compal PAZ00"; | ||
277 | |||
278 | nvidia,audio-routing = | ||
279 | "Int Spk", "SPKOUT", | ||
280 | "Int Spk", "SPKOUTN", | ||
281 | "Headset Mic", "MICBIAS1", | ||
282 | "MIC1", "Headset Mic", | ||
283 | "Headset Stereophone", "HPR", | ||
284 | "Headset Stereophone", "HPL", | ||
285 | "DMICDAT", "Digital Mic"; | ||
286 | |||
287 | nvidia,audio-codec = <&alc5632>; | ||
288 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
289 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ | ||
290 | }; | ||
291 | |||
292 | serial@70006000 { | ||
293 | clock-frequency = <216000000>; | ||
294 | }; | ||
295 | |||
296 | serial@70006040 { | ||
297 | status = "disable"; | ||
298 | }; | ||
299 | |||
300 | serial@70006200 { | ||
301 | clock-frequency = <216000000>; | ||
302 | }; | 283 | }; |
303 | 284 | ||
304 | serial@70006300 { | 285 | usb@c5004000 { |
305 | status = "disable"; | 286 | status = "okay"; |
287 | nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */ | ||
306 | }; | 288 | }; |
307 | 289 | ||
308 | serial@70006400 { | 290 | usb@c5008000 { |
309 | status = "disable"; | 291 | status = "okay"; |
310 | }; | 292 | }; |
311 | 293 | ||
312 | sdhci@c8000000 { | 294 | sdhci@c8000000 { |
295 | status = "okay"; | ||
313 | cd-gpios = <&gpio 173 0>; /* gpio PV5 */ | 296 | cd-gpios = <&gpio 173 0>; /* gpio PV5 */ |
314 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 297 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
315 | power-gpios = <&gpio 169 0>; /* gpio PV1 */ | 298 | power-gpios = <&gpio 169 0>; /* gpio PV1 */ |
316 | bus-width = <4>; | 299 | bus-width = <4>; |
317 | }; | 300 | }; |
318 | 301 | ||
319 | sdhci@c8000200 { | ||
320 | status = "disable"; | ||
321 | }; | ||
322 | |||
323 | sdhci@c8000400 { | ||
324 | status = "disable"; | ||
325 | }; | ||
326 | |||
327 | sdhci@c8000600 { | 302 | sdhci@c8000600 { |
303 | status = "okay"; | ||
328 | support-8bit; | 304 | support-8bit; |
329 | bus-width = <8>; | 305 | bus-width = <8>; |
330 | }; | 306 | }; |
@@ -345,12 +321,28 @@ | |||
345 | 321 | ||
346 | wifi { | 322 | wifi { |
347 | label = "wifi-led"; | 323 | label = "wifi-led"; |
348 | gpios = <&gpio 24 0>; | 324 | gpios = <&gpio 24 0>; /* gpio PD0 */ |
349 | linux,default-trigger = "rfkill0"; | 325 | linux,default-trigger = "rfkill0"; |
350 | }; | 326 | }; |
351 | }; | 327 | }; |
352 | 328 | ||
353 | usb@c5004000 { | 329 | sound { |
354 | nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */ | 330 | compatible = "nvidia,tegra-audio-alc5632-paz00", |
331 | "nvidia,tegra-audio-alc5632"; | ||
332 | |||
333 | nvidia,model = "Compal PAZ00"; | ||
334 | |||
335 | nvidia,audio-routing = | ||
336 | "Int Spk", "SPKOUT", | ||
337 | "Int Spk", "SPKOUTN", | ||
338 | "Headset Mic", "MICBIAS1", | ||
339 | "MIC1", "Headset Mic", | ||
340 | "Headset Stereophone", "HPR", | ||
341 | "Headset Stereophone", "HPL", | ||
342 | "DMICDAT", "Digital Mic"; | ||
343 | |||
344 | nvidia,audio-codec = <&alc5632>; | ||
345 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
346 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ | ||
355 | }; | 347 | }; |
356 | }; | 348 | }; |
diff --git a/arch/arm/boot/dts/tegra-seaboard.dts b/arch/arm/boot/dts/tegra-seaboard.dts index 315971993cfd..89cb7f2acd92 100644 --- a/arch/arm/boot/dts/tegra-seaboard.dts +++ b/arch/arm/boot/dts/tegra-seaboard.dts | |||
@@ -7,11 +7,10 @@ | |||
7 | compatible = "nvidia,seaboard", "nvidia,tegra20"; | 7 | compatible = "nvidia,seaboard", "nvidia,tegra20"; |
8 | 8 | ||
9 | memory { | 9 | memory { |
10 | device_type = "memory"; | 10 | reg = <0x00000000 0x40000000>; |
11 | reg = < 0x00000000 0x40000000 >; | ||
12 | }; | 11 | }; |
13 | 12 | ||
14 | pinmux@70000000 { | 13 | pinmux { |
15 | pinctrl-names = "default"; | 14 | pinctrl-names = "default"; |
16 | pinctrl-0 = <&state_default>; | 15 | pinctrl-0 = <&state_default>; |
17 | 16 | ||
@@ -100,7 +99,7 @@ | |||
100 | }; | 99 | }; |
101 | hdint { | 100 | hdint { |
102 | nvidia,pins = "hdint", "lpw0", "lpw2", "lsc1", | 101 | nvidia,pins = "hdint", "lpw0", "lpw2", "lsc1", |
103 | "lsck", "lsda", "pta"; | 102 | "lsck", "lsda"; |
104 | nvidia,function = "hdmi"; | 103 | nvidia,function = "hdmi"; |
105 | }; | 104 | }; |
106 | i2cp { | 105 | i2cp { |
@@ -134,6 +133,10 @@ | |||
134 | nvidia,pins = "pmc"; | 133 | nvidia,pins = "pmc"; |
135 | nvidia,function = "pwr_on"; | 134 | nvidia,function = "pwr_on"; |
136 | }; | 135 | }; |
136 | pta { | ||
137 | nvidia,pins = "pta"; | ||
138 | nvidia,function = "i2c2"; | ||
139 | }; | ||
137 | rm { | 140 | rm { |
138 | nvidia,pins = "rm"; | 141 | nvidia,pins = "rm"; |
139 | nvidia,function = "i2c1"; | 142 | nvidia,function = "i2c1"; |
@@ -254,96 +257,138 @@ | |||
254 | }; | 257 | }; |
255 | }; | 258 | }; |
256 | 259 | ||
260 | i2s@70002800 { | ||
261 | status = "okay"; | ||
262 | }; | ||
263 | |||
264 | serial@70006300 { | ||
265 | status = "okay"; | ||
266 | clock-frequency = <216000000>; | ||
267 | }; | ||
268 | |||
257 | i2c@7000c000 { | 269 | i2c@7000c000 { |
270 | status = "okay"; | ||
258 | clock-frequency = <400000>; | 271 | clock-frequency = <400000>; |
259 | 272 | ||
260 | wm8903: wm8903@1a { | 273 | wm8903: wm8903@1a { |
261 | compatible = "wlf,wm8903"; | 274 | compatible = "wlf,wm8903"; |
262 | reg = <0x1a>; | 275 | reg = <0x1a>; |
263 | interrupt-parent = <&gpio>; | 276 | interrupt-parent = <&gpio>; |
264 | interrupts = < 187 0x04 >; | 277 | interrupts = <187 0x04>; |
265 | 278 | ||
266 | gpio-controller; | 279 | gpio-controller; |
267 | #gpio-cells = <2>; | 280 | #gpio-cells = <2>; |
268 | 281 | ||
269 | micdet-cfg = <0>; | 282 | micdet-cfg = <0>; |
270 | micdet-delay = <100>; | 283 | micdet-delay = <100>; |
271 | gpio-cfg = < 0xffffffff 0xffffffff 0 0xffffffff 0xffffffff >; | 284 | gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>; |
285 | }; | ||
286 | |||
287 | /* ALS and proximity sensor */ | ||
288 | isl29018@44 { | ||
289 | compatible = "isil,isl29018"; | ||
290 | reg = <0x44>; | ||
291 | interrupt-parent = <&gpio>; | ||
292 | interrupts = <202 0x04>; /* GPIO PZ2 */ | ||
293 | }; | ||
294 | |||
295 | gyrometer@68 { | ||
296 | compatible = "invn,mpu3050"; | ||
297 | reg = <0x68>; | ||
298 | interrupt-parent = <&gpio>; | ||
299 | interrupts = <204 0x04>; /* gpio PZ4 */ | ||
272 | }; | 300 | }; |
273 | }; | 301 | }; |
274 | 302 | ||
275 | i2c@7000c400 { | 303 | i2c@7000c400 { |
276 | clock-frequency = <400000>; | 304 | status = "okay"; |
305 | clock-frequency = <100000>; | ||
306 | |||
307 | smart-battery@b { | ||
308 | compatible = "ti,bq20z75", "smart-battery-1.1"; | ||
309 | reg = <0xb>; | ||
310 | ti,i2c-retry-count = <2>; | ||
311 | ti,poll-retry-count = <10>; | ||
312 | }; | ||
277 | }; | 313 | }; |
278 | 314 | ||
279 | i2c@7000c500 { | 315 | i2c@7000c500 { |
316 | status = "okay"; | ||
280 | clock-frequency = <400000>; | 317 | clock-frequency = <400000>; |
281 | }; | 318 | }; |
282 | 319 | ||
283 | i2c@7000d000 { | 320 | i2c@7000d000 { |
321 | status = "okay"; | ||
284 | clock-frequency = <400000>; | 322 | clock-frequency = <400000>; |
285 | 323 | ||
286 | adt7461@4c { | 324 | temperature-sensor@4c { |
287 | compatible = "adt7461"; | 325 | compatible = "nct1008"; |
288 | reg = <0x4c>; | 326 | reg = <0x4c>; |
289 | }; | 327 | }; |
290 | }; | ||
291 | |||
292 | i2s@70002a00 { | ||
293 | status = "disable"; | ||
294 | }; | ||
295 | |||
296 | sound { | ||
297 | compatible = "nvidia,tegra-audio-wm8903-seaboard", | ||
298 | "nvidia,tegra-audio-wm8903"; | ||
299 | nvidia,model = "NVIDIA Tegra Seaboard"; | ||
300 | |||
301 | nvidia,audio-routing = | ||
302 | "Headphone Jack", "HPOUTR", | ||
303 | "Headphone Jack", "HPOUTL", | ||
304 | "Int Spk", "ROP", | ||
305 | "Int Spk", "RON", | ||
306 | "Int Spk", "LOP", | ||
307 | "Int Spk", "LON", | ||
308 | "Mic Jack", "MICBIAS", | ||
309 | "IN1R", "Mic Jack"; | ||
310 | 328 | ||
311 | nvidia,i2s-controller = <&tegra_i2s1>; | 329 | magnetometer@c { |
312 | nvidia,audio-codec = <&wm8903>; | 330 | compatible = "ak8975"; |
313 | 331 | reg = <0xc>; | |
314 | nvidia,spkr-en-gpios = <&wm8903 2 0>; | 332 | interrupt-parent = <&gpio>; |
315 | nvidia,hp-det-gpios = <&gpio 185 0>; /* gpio PX1 */ | 333 | interrupts = <109 0x04>; /* gpio PN5 */ |
316 | }; | 334 | }; |
317 | |||
318 | serial@70006000 { | ||
319 | status = "disable"; | ||
320 | }; | ||
321 | |||
322 | serial@70006040 { | ||
323 | status = "disable"; | ||
324 | }; | 335 | }; |
325 | 336 | ||
326 | serial@70006200 { | 337 | emc { |
327 | status = "disable"; | 338 | emc-table@190000 { |
328 | }; | 339 | reg = <190000>; |
340 | compatible = "nvidia,tegra20-emc-table"; | ||
341 | clock-frequency = <190000>; | ||
342 | nvidia,emc-registers = <0x0000000c 0x00000026 | ||
343 | 0x00000009 0x00000003 0x00000004 0x00000004 | ||
344 | 0x00000002 0x0000000c 0x00000003 0x00000003 | ||
345 | 0x00000002 0x00000001 0x00000004 0x00000005 | ||
346 | 0x00000004 0x00000009 0x0000000d 0x0000059f | ||
347 | 0x00000000 0x00000003 0x00000003 0x00000003 | ||
348 | 0x00000003 0x00000001 0x0000000b 0x000000c8 | ||
349 | 0x00000003 0x00000007 0x00000004 0x0000000f | ||
350 | 0x00000002 0x00000000 0x00000000 0x00000002 | ||
351 | 0x00000000 0x00000000 0x00000083 0xa06204ae | ||
352 | 0x007dc010 0x00000000 0x00000000 0x00000000 | ||
353 | 0x00000000 0x00000000 0x00000000 0x00000000>; | ||
354 | }; | ||
329 | 355 | ||
330 | serial@70006300 { | 356 | emc-table@380000 { |
331 | clock-frequency = < 216000000 >; | 357 | reg = <380000>; |
358 | compatible = "nvidia,tegra20-emc-table"; | ||
359 | clock-frequency = <380000>; | ||
360 | nvidia,emc-registers = <0x00000017 0x0000004b | ||
361 | 0x00000012 0x00000006 0x00000004 0x00000005 | ||
362 | 0x00000003 0x0000000c 0x00000006 0x00000006 | ||
363 | 0x00000003 0x00000001 0x00000004 0x00000005 | ||
364 | 0x00000004 0x00000009 0x0000000d 0x00000b5f | ||
365 | 0x00000000 0x00000003 0x00000003 0x00000006 | ||
366 | 0x00000006 0x00000001 0x00000011 0x000000c8 | ||
367 | 0x00000003 0x0000000e 0x00000007 0x0000000f | ||
368 | 0x00000002 0x00000000 0x00000000 0x00000002 | ||
369 | 0x00000000 0x00000000 0x00000083 0xe044048b | ||
370 | 0x007d8010 0x00000000 0x00000000 0x00000000 | ||
371 | 0x00000000 0x00000000 0x00000000 0x00000000>; | ||
372 | }; | ||
332 | }; | 373 | }; |
333 | 374 | ||
334 | serial@70006400 { | 375 | usb@c5000000 { |
335 | status = "disable"; | 376 | status = "okay"; |
377 | nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */ | ||
378 | dr_mode = "otg"; | ||
336 | }; | 379 | }; |
337 | 380 | ||
338 | sdhci@c8000000 { | 381 | usb@c5004000 { |
339 | status = "disable"; | 382 | status = "okay"; |
383 | nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */ | ||
340 | }; | 384 | }; |
341 | 385 | ||
342 | sdhci@c8000200 { | 386 | usb@c5008000 { |
343 | status = "disable"; | 387 | status = "okay"; |
344 | }; | 388 | }; |
345 | 389 | ||
346 | sdhci@c8000400 { | 390 | sdhci@c8000400 { |
391 | status = "okay"; | ||
347 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | 392 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ |
348 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | 393 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ |
349 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | 394 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ |
@@ -351,15 +396,11 @@ | |||
351 | }; | 396 | }; |
352 | 397 | ||
353 | sdhci@c8000600 { | 398 | sdhci@c8000600 { |
399 | status = "okay"; | ||
354 | support-8bit; | 400 | support-8bit; |
355 | bus-width = <8>; | 401 | bus-width = <8>; |
356 | }; | 402 | }; |
357 | 403 | ||
358 | usb@c5000000 { | ||
359 | nvidia,vbus-gpio = <&gpio 24 0>; /* PD0 */ | ||
360 | dr_mode = "otg"; | ||
361 | }; | ||
362 | |||
363 | gpio-keys { | 404 | gpio-keys { |
364 | compatible = "gpio-keys"; | 405 | compatible = "gpio-keys"; |
365 | 406 | ||
@@ -380,45 +421,25 @@ | |||
380 | }; | 421 | }; |
381 | }; | 422 | }; |
382 | 423 | ||
383 | emc@7000f400 { | 424 | sound { |
384 | emc-table@190000 { | 425 | compatible = "nvidia,tegra-audio-wm8903-seaboard", |
385 | reg = < 190000 >; | 426 | "nvidia,tegra-audio-wm8903"; |
386 | compatible = "nvidia,tegra20-emc-table"; | 427 | nvidia,model = "NVIDIA Tegra Seaboard"; |
387 | clock-frequency = < 190000 >; | ||
388 | nvidia,emc-registers = < 0x0000000c 0x00000026 | ||
389 | 0x00000009 0x00000003 0x00000004 0x00000004 | ||
390 | 0x00000002 0x0000000c 0x00000003 0x00000003 | ||
391 | 0x00000002 0x00000001 0x00000004 0x00000005 | ||
392 | 0x00000004 0x00000009 0x0000000d 0x0000059f | ||
393 | 0x00000000 0x00000003 0x00000003 0x00000003 | ||
394 | 0x00000003 0x00000001 0x0000000b 0x000000c8 | ||
395 | 0x00000003 0x00000007 0x00000004 0x0000000f | ||
396 | 0x00000002 0x00000000 0x00000000 0x00000002 | ||
397 | 0x00000000 0x00000000 0x00000083 0xa06204ae | ||
398 | 0x007dc010 0x00000000 0x00000000 0x00000000 | ||
399 | 0x00000000 0x00000000 0x00000000 0x00000000 >; | ||
400 | }; | ||
401 | 428 | ||
402 | emc-table@380000 { | 429 | nvidia,audio-routing = |
403 | reg = < 380000 >; | 430 | "Headphone Jack", "HPOUTR", |
404 | compatible = "nvidia,tegra20-emc-table"; | 431 | "Headphone Jack", "HPOUTL", |
405 | clock-frequency = < 380000 >; | 432 | "Int Spk", "ROP", |
406 | nvidia,emc-registers = < 0x00000017 0x0000004b | 433 | "Int Spk", "RON", |
407 | 0x00000012 0x00000006 0x00000004 0x00000005 | 434 | "Int Spk", "LOP", |
408 | 0x00000003 0x0000000c 0x00000006 0x00000006 | 435 | "Int Spk", "LON", |
409 | 0x00000003 0x00000001 0x00000004 0x00000005 | 436 | "Mic Jack", "MICBIAS", |
410 | 0x00000004 0x00000009 0x0000000d 0x00000b5f | 437 | "IN1R", "Mic Jack"; |
411 | 0x00000000 0x00000003 0x00000003 0x00000006 | ||
412 | 0x00000006 0x00000001 0x00000011 0x000000c8 | ||
413 | 0x00000003 0x0000000e 0x00000007 0x0000000f | ||
414 | 0x00000002 0x00000000 0x00000000 0x00000002 | ||
415 | 0x00000000 0x00000000 0x00000083 0xe044048b | ||
416 | 0x007d8010 0x00000000 0x00000000 0x00000000 | ||
417 | 0x00000000 0x00000000 0x00000000 0x00000000 >; | ||
418 | }; | ||
419 | }; | ||
420 | 438 | ||
421 | usb@c5004000 { | 439 | nvidia,i2s-controller = <&tegra_i2s1>; |
422 | nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */ | 440 | nvidia,audio-codec = <&wm8903>; |
441 | |||
442 | nvidia,spkr-en-gpios = <&wm8903 2 0>; | ||
443 | nvidia,hp-det-gpios = <&gpio 185 0>; /* gpio PX1 */ | ||
423 | }; | 444 | }; |
424 | }; | 445 | }; |
diff --git a/arch/arm/boot/dts/tegra-trimslice.dts b/arch/arm/boot/dts/tegra-trimslice.dts index e4fcf9a8178a..9de5636023f6 100644 --- a/arch/arm/boot/dts/tegra-trimslice.dts +++ b/arch/arm/boot/dts/tegra-trimslice.dts | |||
@@ -6,11 +6,11 @@ | |||
6 | model = "Compulab TrimSlice board"; | 6 | model = "Compulab TrimSlice board"; |
7 | compatible = "compulab,trimslice", "nvidia,tegra20"; | 7 | compatible = "compulab,trimslice", "nvidia,tegra20"; |
8 | 8 | ||
9 | memory@0 { | 9 | memory { |
10 | reg = < 0x00000000 0x40000000 >; | 10 | reg = <0x00000000 0x40000000>; |
11 | }; | 11 | }; |
12 | 12 | ||
13 | pinmux@70000000 { | 13 | pinmux { |
14 | pinctrl-names = "default"; | 14 | pinctrl-names = "default"; |
15 | pinctrl-0 = <&state_default>; | 15 | pinctrl-0 = <&state_default>; |
16 | 16 | ||
@@ -240,72 +240,67 @@ | |||
240 | }; | 240 | }; |
241 | }; | 241 | }; |
242 | 242 | ||
243 | i2s@70002800 { | ||
244 | status = "okay"; | ||
245 | }; | ||
246 | |||
247 | serial@70006000 { | ||
248 | status = "okay"; | ||
249 | clock-frequency = <216000000>; | ||
250 | }; | ||
251 | |||
243 | i2c@7000c000 { | 252 | i2c@7000c000 { |
253 | status = "okay"; | ||
244 | clock-frequency = <400000>; | 254 | clock-frequency = <400000>; |
245 | }; | 255 | }; |
246 | 256 | ||
247 | i2c@7000c400 { | 257 | i2c@7000c400 { |
258 | status = "okay"; | ||
248 | clock-frequency = <400000>; | 259 | clock-frequency = <400000>; |
249 | }; | 260 | }; |
250 | 261 | ||
251 | i2c@7000c500 { | 262 | i2c@7000c500 { |
263 | status = "okay"; | ||
252 | clock-frequency = <400000>; | 264 | clock-frequency = <400000>; |
253 | }; | ||
254 | |||
255 | i2c@7000d000 { | ||
256 | status = "disable"; | ||
257 | }; | ||
258 | |||
259 | i2s@70002800 { | ||
260 | status = "disable"; | ||
261 | }; | ||
262 | |||
263 | i2s@70002a00 { | ||
264 | status = "disable"; | ||
265 | }; | ||
266 | 265 | ||
267 | das@70000c00 { | 266 | codec: codec@1a { |
268 | status = "disable"; | 267 | compatible = "ti,tlv320aic23"; |
269 | }; | 268 | reg = <0x1a>; |
270 | 269 | }; | |
271 | serial@70006000 { | ||
272 | clock-frequency = < 216000000 >; | ||
273 | }; | ||
274 | 270 | ||
275 | serial@70006040 { | 271 | rtc@56 { |
276 | status = "disable"; | 272 | compatible = "emmicro,em3027"; |
273 | reg = <0x56>; | ||
274 | }; | ||
277 | }; | 275 | }; |
278 | 276 | ||
279 | serial@70006200 { | 277 | usb@c5000000 { |
280 | status = "disable"; | 278 | status = "okay"; |
281 | }; | 279 | }; |
282 | 280 | ||
283 | serial@70006300 { | 281 | usb@c5004000 { |
284 | status = "disable"; | 282 | nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */ |
285 | }; | 283 | }; |
286 | 284 | ||
287 | serial@70006400 { | 285 | usb@c5008000 { |
288 | status = "disable"; | 286 | status = "okay"; |
289 | }; | 287 | }; |
290 | 288 | ||
291 | sdhci@c8000000 { | 289 | sdhci@c8000000 { |
292 | status = "disable"; | 290 | status = "okay"; |
293 | }; | 291 | bus-width = <4>; |
294 | |||
295 | sdhci@c8000200 { | ||
296 | status = "disable"; | ||
297 | }; | ||
298 | |||
299 | sdhci@c8000400 { | ||
300 | status = "disable"; | ||
301 | }; | 292 | }; |
302 | 293 | ||
303 | sdhci@c8000600 { | 294 | sdhci@c8000600 { |
304 | cd-gpios = <&gpio 121 0>; | 295 | status = "okay"; |
305 | wp-gpios = <&gpio 122 0>; | 296 | cd-gpios = <&gpio 121 0>; /* gpio PP1 */ |
297 | wp-gpios = <&gpio 122 0>; /* gpio PP2 */ | ||
298 | bus-width = <4>; | ||
306 | }; | 299 | }; |
307 | 300 | ||
308 | usb@c5004000 { | 301 | sound { |
309 | nvidia,phy-reset-gpio = <&gpio 168 0>; /* gpio PV0 */ | 302 | compatible = "nvidia,tegra-audio-trimslice"; |
303 | nvidia,i2s-controller = <&tegra_i2s1>; | ||
304 | nvidia,audio-codec = <&codec>; | ||
310 | }; | 305 | }; |
311 | }; | 306 | }; |
diff --git a/arch/arm/boot/dts/tegra-ventana.dts b/arch/arm/boot/dts/tegra-ventana.dts index b922a26747e7..445343b0fbdd 100644 --- a/arch/arm/boot/dts/tegra-ventana.dts +++ b/arch/arm/boot/dts/tegra-ventana.dts | |||
@@ -7,10 +7,10 @@ | |||
7 | compatible = "nvidia,ventana", "nvidia,tegra20"; | 7 | compatible = "nvidia,ventana", "nvidia,tegra20"; |
8 | 8 | ||
9 | memory { | 9 | memory { |
10 | reg = < 0x00000000 0x40000000 >; | 10 | reg = <0x00000000 0x40000000>; |
11 | }; | 11 | }; |
12 | 12 | ||
13 | pinmux@70000000 { | 13 | pinmux { |
14 | pinctrl-names = "default"; | 14 | pinctrl-names = "default"; |
15 | pinctrl-0 = <&state_default>; | 15 | pinctrl-0 = <&state_default>; |
16 | 16 | ||
@@ -240,38 +240,82 @@ | |||
240 | }; | 240 | }; |
241 | }; | 241 | }; |
242 | 242 | ||
243 | i2s@70002800 { | ||
244 | status = "okay"; | ||
245 | }; | ||
246 | |||
247 | serial@70006300 { | ||
248 | status = "okay"; | ||
249 | clock-frequency = <216000000>; | ||
250 | }; | ||
251 | |||
243 | i2c@7000c000 { | 252 | i2c@7000c000 { |
253 | status = "okay"; | ||
244 | clock-frequency = <400000>; | 254 | clock-frequency = <400000>; |
245 | 255 | ||
246 | wm8903: wm8903@1a { | 256 | wm8903: wm8903@1a { |
247 | compatible = "wlf,wm8903"; | 257 | compatible = "wlf,wm8903"; |
248 | reg = <0x1a>; | 258 | reg = <0x1a>; |
249 | interrupt-parent = <&gpio>; | 259 | interrupt-parent = <&gpio>; |
250 | interrupts = < 187 0x04 >; | 260 | interrupts = <187 0x04>; |
251 | 261 | ||
252 | gpio-controller; | 262 | gpio-controller; |
253 | #gpio-cells = <2>; | 263 | #gpio-cells = <2>; |
254 | 264 | ||
255 | micdet-cfg = <0>; | 265 | micdet-cfg = <0>; |
256 | micdet-delay = <100>; | 266 | micdet-delay = <100>; |
257 | gpio-cfg = < 0xffffffff 0xffffffff 0 0xffffffff 0xffffffff >; | 267 | gpio-cfg = <0xffffffff 0xffffffff 0 0xffffffff 0xffffffff>; |
268 | }; | ||
269 | |||
270 | /* ALS and proximity sensor */ | ||
271 | isl29018@44 { | ||
272 | compatible = "isil,isl29018"; | ||
273 | reg = <0x44>; | ||
274 | interrupt-parent = <&gpio>; | ||
275 | interrupts = <202 0x04>; /*gpio PZ2 */ | ||
258 | }; | 276 | }; |
259 | }; | 277 | }; |
260 | 278 | ||
261 | i2c@7000c400 { | 279 | i2c@7000c400 { |
280 | status = "okay"; | ||
262 | clock-frequency = <400000>; | 281 | clock-frequency = <400000>; |
263 | }; | 282 | }; |
264 | 283 | ||
265 | i2c@7000c500 { | 284 | i2c@7000c500 { |
285 | status = "okay"; | ||
266 | clock-frequency = <400000>; | 286 | clock-frequency = <400000>; |
267 | }; | 287 | }; |
268 | 288 | ||
269 | i2c@7000d000 { | 289 | i2c@7000d000 { |
290 | status = "okay"; | ||
270 | clock-frequency = <400000>; | 291 | clock-frequency = <400000>; |
271 | }; | 292 | }; |
272 | 293 | ||
273 | i2s@70002a00 { | 294 | usb@c5000000 { |
274 | status = "disable"; | 295 | status = "okay"; |
296 | }; | ||
297 | |||
298 | usb@c5004000 { | ||
299 | status = "okay"; | ||
300 | nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */ | ||
301 | }; | ||
302 | |||
303 | usb@c5008000 { | ||
304 | status = "okay"; | ||
305 | }; | ||
306 | |||
307 | sdhci@c8000400 { | ||
308 | status = "okay"; | ||
309 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | ||
310 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | ||
311 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | ||
312 | bus-width = <4>; | ||
313 | }; | ||
314 | |||
315 | sdhci@c8000600 { | ||
316 | status = "okay"; | ||
317 | support-8bit; | ||
318 | bus-width = <8>; | ||
275 | }; | 319 | }; |
276 | 320 | ||
277 | sound { | 321 | sound { |
@@ -294,51 +338,7 @@ | |||
294 | 338 | ||
295 | nvidia,spkr-en-gpios = <&wm8903 2 0>; | 339 | nvidia,spkr-en-gpios = <&wm8903 2 0>; |
296 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ | 340 | nvidia,hp-det-gpios = <&gpio 178 0>; /* gpio PW2 */ |
297 | nvidia,int-mic-en-gpios = <&gpio 184 0>; /*gpio PX0 */ | 341 | nvidia,int-mic-en-gpios = <&gpio 184 0>; /* gpio PX0 */ |
298 | nvidia,ext-mic-en-gpios = <&gpio 185 0>; /* gpio PX1 */ | 342 | nvidia,ext-mic-en-gpios = <&gpio 185 0>; /* gpio PX1 */ |
299 | }; | 343 | }; |
300 | |||
301 | serial@70006000 { | ||
302 | status = "disable"; | ||
303 | }; | ||
304 | |||
305 | serial@70006040 { | ||
306 | status = "disable"; | ||
307 | }; | ||
308 | |||
309 | serial@70006200 { | ||
310 | status = "disable"; | ||
311 | }; | ||
312 | |||
313 | serial@70006300 { | ||
314 | clock-frequency = < 216000000 >; | ||
315 | }; | ||
316 | |||
317 | serial@70006400 { | ||
318 | status = "disable"; | ||
319 | }; | ||
320 | |||
321 | sdhci@c8000000 { | ||
322 | status = "disable"; | ||
323 | }; | ||
324 | |||
325 | sdhci@c8000200 { | ||
326 | status = "disable"; | ||
327 | }; | ||
328 | |||
329 | sdhci@c8000400 { | ||
330 | cd-gpios = <&gpio 69 0>; /* gpio PI5 */ | ||
331 | wp-gpios = <&gpio 57 0>; /* gpio PH1 */ | ||
332 | power-gpios = <&gpio 70 0>; /* gpio PI6 */ | ||
333 | bus-width = <4>; | ||
334 | }; | ||
335 | |||
336 | sdhci@c8000600 { | ||
337 | support-8bit; | ||
338 | bus-width = <8>; | ||
339 | }; | ||
340 | |||
341 | usb@c5004000 { | ||
342 | nvidia,phy-reset-gpio = <&gpio 169 0>; /* gpio PV1 */ | ||
343 | }; | ||
344 | }; | 344 | }; |
diff --git a/arch/arm/boot/dts/tegra20.dtsi b/arch/arm/boot/dts/tegra20.dtsi index 108e894a8926..c417d67e9027 100644 --- a/arch/arm/boot/dts/tegra20.dtsi +++ b/arch/arm/boot/dts/tegra20.dtsi | |||
@@ -4,207 +4,242 @@ | |||
4 | compatible = "nvidia,tegra20"; | 4 | compatible = "nvidia,tegra20"; |
5 | interrupt-parent = <&intc>; | 5 | interrupt-parent = <&intc>; |
6 | 6 | ||
7 | pmc@7000f400 { | 7 | intc: interrupt-controller { |
8 | compatible = "nvidia,tegra20-pmc"; | ||
9 | reg = <0x7000e400 0x400>; | ||
10 | }; | ||
11 | |||
12 | intc: interrupt-controller@50041000 { | ||
13 | compatible = "arm,cortex-a9-gic"; | 8 | compatible = "arm,cortex-a9-gic"; |
9 | reg = <0x50041000 0x1000 | ||
10 | 0x50040100 0x0100>; | ||
14 | interrupt-controller; | 11 | interrupt-controller; |
15 | #interrupt-cells = <3>; | 12 | #interrupt-cells = <3>; |
16 | reg = < 0x50041000 0x1000 >, | ||
17 | < 0x50040100 0x0100 >; | ||
18 | }; | 13 | }; |
19 | 14 | ||
20 | pmu { | 15 | apbdma: dma { |
21 | compatible = "arm,cortex-a9-pmu"; | ||
22 | interrupts = <0 56 0x04 | ||
23 | 0 57 0x04>; | ||
24 | }; | ||
25 | |||
26 | apbdma: dma@6000a000 { | ||
27 | compatible = "nvidia,tegra20-apbdma"; | 16 | compatible = "nvidia,tegra20-apbdma"; |
28 | reg = <0x6000a000 0x1200>; | 17 | reg = <0x6000a000 0x1200>; |
29 | interrupts = < 0 104 0x04 | 18 | interrupts = <0 104 0x04 |
30 | 0 105 0x04 | 19 | 0 105 0x04 |
31 | 0 106 0x04 | 20 | 0 106 0x04 |
32 | 0 107 0x04 | 21 | 0 107 0x04 |
33 | 0 108 0x04 | 22 | 0 108 0x04 |
34 | 0 109 0x04 | 23 | 0 109 0x04 |
35 | 0 110 0x04 | 24 | 0 110 0x04 |
36 | 0 111 0x04 | 25 | 0 111 0x04 |
37 | 0 112 0x04 | 26 | 0 112 0x04 |
38 | 0 113 0x04 | 27 | 0 113 0x04 |
39 | 0 114 0x04 | 28 | 0 114 0x04 |
40 | 0 115 0x04 | 29 | 0 115 0x04 |
41 | 0 116 0x04 | 30 | 0 116 0x04 |
42 | 0 117 0x04 | 31 | 0 117 0x04 |
43 | 0 118 0x04 | 32 | 0 118 0x04 |
44 | 0 119 0x04 >; | 33 | 0 119 0x04>; |
45 | }; | 34 | }; |
46 | 35 | ||
47 | i2c@7000c000 { | 36 | ahb { |
48 | #address-cells = <1>; | 37 | compatible = "nvidia,tegra20-ahb"; |
49 | #size-cells = <0>; | 38 | reg = <0x6000c004 0x10c>; /* AHB Arbitration + Gizmo Controller */ |
50 | compatible = "nvidia,tegra20-i2c"; | 39 | }; |
51 | reg = <0x7000C000 0x100>; | 40 | |
52 | interrupts = < 0 38 0x04 >; | 41 | gpio: gpio { |
53 | }; | 42 | compatible = "nvidia,tegra20-gpio"; |
54 | 43 | reg = <0x6000d000 0x1000>; | |
55 | i2c@7000c400 { | 44 | interrupts = <0 32 0x04 |
56 | #address-cells = <1>; | 45 | 0 33 0x04 |
57 | #size-cells = <0>; | 46 | 0 34 0x04 |
58 | compatible = "nvidia,tegra20-i2c"; | 47 | 0 35 0x04 |
59 | reg = <0x7000C400 0x100>; | 48 | 0 55 0x04 |
60 | interrupts = < 0 84 0x04 >; | 49 | 0 87 0x04 |
50 | 0 89 0x04>; | ||
51 | #gpio-cells = <2>; | ||
52 | gpio-controller; | ||
53 | #interrupt-cells = <2>; | ||
54 | interrupt-controller; | ||
61 | }; | 55 | }; |
62 | 56 | ||
63 | i2c@7000c500 { | 57 | pinmux: pinmux { |
64 | #address-cells = <1>; | 58 | compatible = "nvidia,tegra20-pinmux"; |
65 | #size-cells = <0>; | 59 | reg = <0x70000014 0x10 /* Tri-state registers */ |
66 | compatible = "nvidia,tegra20-i2c"; | 60 | 0x70000080 0x20 /* Mux registers */ |
67 | reg = <0x7000C500 0x100>; | 61 | 0x700000a0 0x14 /* Pull-up/down registers */ |
68 | interrupts = < 0 92 0x04 >; | 62 | 0x70000868 0xa8>; /* Pad control registers */ |
69 | }; | 63 | }; |
70 | 64 | ||
71 | i2c@7000d000 { | 65 | das { |
72 | #address-cells = <1>; | 66 | compatible = "nvidia,tegra20-das"; |
73 | #size-cells = <0>; | 67 | reg = <0x70000c00 0x80>; |
74 | compatible = "nvidia,tegra20-i2c-dvc"; | ||
75 | reg = <0x7000D000 0x200>; | ||
76 | interrupts = < 0 53 0x04 >; | ||
77 | }; | 68 | }; |
78 | 69 | ||
79 | tegra_i2s1: i2s@70002800 { | 70 | tegra_i2s1: i2s@70002800 { |
80 | compatible = "nvidia,tegra20-i2s"; | 71 | compatible = "nvidia,tegra20-i2s"; |
81 | reg = <0x70002800 0x200>; | 72 | reg = <0x70002800 0x200>; |
82 | interrupts = < 0 13 0x04 >; | 73 | interrupts = <0 13 0x04>; |
83 | nvidia,dma-request-selector = < &apbdma 2 >; | 74 | nvidia,dma-request-selector = <&apbdma 2>; |
75 | status = "disable"; | ||
84 | }; | 76 | }; |
85 | 77 | ||
86 | tegra_i2s2: i2s@70002a00 { | 78 | tegra_i2s2: i2s@70002a00 { |
87 | compatible = "nvidia,tegra20-i2s"; | 79 | compatible = "nvidia,tegra20-i2s"; |
88 | reg = <0x70002a00 0x200>; | 80 | reg = <0x70002a00 0x200>; |
89 | interrupts = < 0 3 0x04 >; | 81 | interrupts = <0 3 0x04>; |
90 | nvidia,dma-request-selector = < &apbdma 1 >; | 82 | nvidia,dma-request-selector = <&apbdma 1>; |
91 | }; | 83 | status = "disable"; |
92 | |||
93 | das@70000c00 { | ||
94 | compatible = "nvidia,tegra20-das"; | ||
95 | reg = <0x70000c00 0x80>; | ||
96 | }; | ||
97 | |||
98 | gpio: gpio@6000d000 { | ||
99 | compatible = "nvidia,tegra20-gpio"; | ||
100 | reg = < 0x6000d000 0x1000 >; | ||
101 | interrupts = < 0 32 0x04 | ||
102 | 0 33 0x04 | ||
103 | 0 34 0x04 | ||
104 | 0 35 0x04 | ||
105 | 0 55 0x04 | ||
106 | 0 87 0x04 | ||
107 | 0 89 0x04 >; | ||
108 | #gpio-cells = <2>; | ||
109 | gpio-controller; | ||
110 | #interrupt-cells = <2>; | ||
111 | interrupt-controller; | ||
112 | }; | ||
113 | |||
114 | pinmux: pinmux@70000000 { | ||
115 | compatible = "nvidia,tegra20-pinmux"; | ||
116 | reg = < 0x70000014 0x10 /* Tri-state registers */ | ||
117 | 0x70000080 0x20 /* Mux registers */ | ||
118 | 0x700000a0 0x14 /* Pull-up/down registers */ | ||
119 | 0x70000868 0xa8 >; /* Pad control registers */ | ||
120 | }; | 84 | }; |
121 | 85 | ||
122 | serial@70006000 { | 86 | serial@70006000 { |
123 | compatible = "nvidia,tegra20-uart"; | 87 | compatible = "nvidia,tegra20-uart"; |
124 | reg = <0x70006000 0x40>; | 88 | reg = <0x70006000 0x40>; |
125 | reg-shift = <2>; | 89 | reg-shift = <2>; |
126 | interrupts = < 0 36 0x04 >; | 90 | interrupts = <0 36 0x04>; |
91 | status = "disable"; | ||
127 | }; | 92 | }; |
128 | 93 | ||
129 | serial@70006040 { | 94 | serial@70006040 { |
130 | compatible = "nvidia,tegra20-uart"; | 95 | compatible = "nvidia,tegra20-uart"; |
131 | reg = <0x70006040 0x40>; | 96 | reg = <0x70006040 0x40>; |
132 | reg-shift = <2>; | 97 | reg-shift = <2>; |
133 | interrupts = < 0 37 0x04 >; | 98 | interrupts = <0 37 0x04>; |
99 | status = "disable"; | ||
134 | }; | 100 | }; |
135 | 101 | ||
136 | serial@70006200 { | 102 | serial@70006200 { |
137 | compatible = "nvidia,tegra20-uart"; | 103 | compatible = "nvidia,tegra20-uart"; |
138 | reg = <0x70006200 0x100>; | 104 | reg = <0x70006200 0x100>; |
139 | reg-shift = <2>; | 105 | reg-shift = <2>; |
140 | interrupts = < 0 46 0x04 >; | 106 | interrupts = <0 46 0x04>; |
107 | status = "disable"; | ||
141 | }; | 108 | }; |
142 | 109 | ||
143 | serial@70006300 { | 110 | serial@70006300 { |
144 | compatible = "nvidia,tegra20-uart"; | 111 | compatible = "nvidia,tegra20-uart"; |
145 | reg = <0x70006300 0x100>; | 112 | reg = <0x70006300 0x100>; |
146 | reg-shift = <2>; | 113 | reg-shift = <2>; |
147 | interrupts = < 0 90 0x04 >; | 114 | interrupts = <0 90 0x04>; |
115 | status = "disable"; | ||
148 | }; | 116 | }; |
149 | 117 | ||
150 | serial@70006400 { | 118 | serial@70006400 { |
151 | compatible = "nvidia,tegra20-uart"; | 119 | compatible = "nvidia,tegra20-uart"; |
152 | reg = <0x70006400 0x100>; | 120 | reg = <0x70006400 0x100>; |
153 | reg-shift = <2>; | 121 | reg-shift = <2>; |
154 | interrupts = < 0 91 0x04 >; | 122 | interrupts = <0 91 0x04>; |
123 | status = "disable"; | ||
155 | }; | 124 | }; |
156 | 125 | ||
157 | emc@7000f400 { | 126 | i2c@7000c000 { |
127 | compatible = "nvidia,tegra20-i2c"; | ||
128 | reg = <0x7000c000 0x100>; | ||
129 | interrupts = <0 38 0x04>; | ||
158 | #address-cells = <1>; | 130 | #address-cells = <1>; |
159 | #size-cells = <0>; | 131 | #size-cells = <0>; |
160 | compatible = "nvidia,tegra20-emc"; | 132 | status = "disable"; |
161 | reg = <0x7000f400 0x200>; | ||
162 | }; | 133 | }; |
163 | 134 | ||
164 | sdhci@c8000000 { | 135 | i2c@7000c400 { |
165 | compatible = "nvidia,tegra20-sdhci"; | 136 | compatible = "nvidia,tegra20-i2c"; |
166 | reg = <0xc8000000 0x200>; | 137 | reg = <0x7000c400 0x100>; |
167 | interrupts = < 0 14 0x04 >; | 138 | interrupts = <0 84 0x04>; |
139 | #address-cells = <1>; | ||
140 | #size-cells = <0>; | ||
141 | status = "disable"; | ||
168 | }; | 142 | }; |
169 | 143 | ||
170 | sdhci@c8000200 { | 144 | i2c@7000c500 { |
171 | compatible = "nvidia,tegra20-sdhci"; | 145 | compatible = "nvidia,tegra20-i2c"; |
172 | reg = <0xc8000200 0x200>; | 146 | reg = <0x7000c500 0x100>; |
173 | interrupts = < 0 15 0x04 >; | 147 | interrupts = <0 92 0x04>; |
148 | #address-cells = <1>; | ||
149 | #size-cells = <0>; | ||
150 | status = "disable"; | ||
174 | }; | 151 | }; |
175 | 152 | ||
176 | sdhci@c8000400 { | 153 | i2c@7000d000 { |
177 | compatible = "nvidia,tegra20-sdhci"; | 154 | compatible = "nvidia,tegra20-i2c-dvc"; |
178 | reg = <0xc8000400 0x200>; | 155 | reg = <0x7000d000 0x200>; |
179 | interrupts = < 0 19 0x04 >; | 156 | interrupts = <0 53 0x04>; |
157 | #address-cells = <1>; | ||
158 | #size-cells = <0>; | ||
159 | status = "disable"; | ||
180 | }; | 160 | }; |
181 | 161 | ||
182 | sdhci@c8000600 { | 162 | pmc { |
183 | compatible = "nvidia,tegra20-sdhci"; | 163 | compatible = "nvidia,tegra20-pmc"; |
184 | reg = <0xc8000600 0x200>; | 164 | reg = <0x7000e400 0x400>; |
185 | interrupts = < 0 31 0x04 >; | 165 | }; |
166 | |||
167 | mc { | ||
168 | compatible = "nvidia,tegra20-mc"; | ||
169 | reg = <0x7000f000 0x024 | ||
170 | 0x7000f03c 0x3c4>; | ||
171 | interrupts = <0 77 0x04>; | ||
172 | }; | ||
173 | |||
174 | gart { | ||
175 | compatible = "nvidia,tegra20-gart"; | ||
176 | reg = <0x7000f024 0x00000018 /* controller registers */ | ||
177 | 0x58000000 0x02000000>; /* GART aperture */ | ||
178 | }; | ||
179 | |||
180 | emc { | ||
181 | compatible = "nvidia,tegra20-emc"; | ||
182 | reg = <0x7000f400 0x200>; | ||
183 | #address-cells = <1>; | ||
184 | #size-cells = <0>; | ||
186 | }; | 185 | }; |
187 | 186 | ||
188 | usb@c5000000 { | 187 | usb@c5000000 { |
189 | compatible = "nvidia,tegra20-ehci", "usb-ehci"; | 188 | compatible = "nvidia,tegra20-ehci", "usb-ehci"; |
190 | reg = <0xc5000000 0x4000>; | 189 | reg = <0xc5000000 0x4000>; |
191 | interrupts = < 0 20 0x04 >; | 190 | interrupts = <0 20 0x04>; |
192 | phy_type = "utmi"; | 191 | phy_type = "utmi"; |
193 | nvidia,has-legacy-mode; | 192 | nvidia,has-legacy-mode; |
193 | status = "disable"; | ||
194 | }; | 194 | }; |
195 | 195 | ||
196 | usb@c5004000 { | 196 | usb@c5004000 { |
197 | compatible = "nvidia,tegra20-ehci", "usb-ehci"; | 197 | compatible = "nvidia,tegra20-ehci", "usb-ehci"; |
198 | reg = <0xc5004000 0x4000>; | 198 | reg = <0xc5004000 0x4000>; |
199 | interrupts = < 0 21 0x04 >; | 199 | interrupts = <0 21 0x04>; |
200 | phy_type = "ulpi"; | 200 | phy_type = "ulpi"; |
201 | status = "disable"; | ||
201 | }; | 202 | }; |
202 | 203 | ||
203 | usb@c5008000 { | 204 | usb@c5008000 { |
204 | compatible = "nvidia,tegra20-ehci", "usb-ehci"; | 205 | compatible = "nvidia,tegra20-ehci", "usb-ehci"; |
205 | reg = <0xc5008000 0x4000>; | 206 | reg = <0xc5008000 0x4000>; |
206 | interrupts = < 0 97 0x04 >; | 207 | interrupts = <0 97 0x04>; |
207 | phy_type = "utmi"; | 208 | phy_type = "utmi"; |
209 | status = "disable"; | ||
210 | }; | ||
211 | |||
212 | sdhci@c8000000 { | ||
213 | compatible = "nvidia,tegra20-sdhci"; | ||
214 | reg = <0xc8000000 0x200>; | ||
215 | interrupts = <0 14 0x04>; | ||
216 | status = "disable"; | ||
208 | }; | 217 | }; |
209 | }; | ||
210 | 218 | ||
219 | sdhci@c8000200 { | ||
220 | compatible = "nvidia,tegra20-sdhci"; | ||
221 | reg = <0xc8000200 0x200>; | ||
222 | interrupts = <0 15 0x04>; | ||
223 | status = "disable"; | ||
224 | }; | ||
225 | |||
226 | sdhci@c8000400 { | ||
227 | compatible = "nvidia,tegra20-sdhci"; | ||
228 | reg = <0xc8000400 0x200>; | ||
229 | interrupts = <0 19 0x04>; | ||
230 | status = "disable"; | ||
231 | }; | ||
232 | |||
233 | sdhci@c8000600 { | ||
234 | compatible = "nvidia,tegra20-sdhci"; | ||
235 | reg = <0xc8000600 0x200>; | ||
236 | interrupts = <0 31 0x04>; | ||
237 | status = "disable"; | ||
238 | }; | ||
239 | |||
240 | pmu { | ||
241 | compatible = "arm,cortex-a9-pmu"; | ||
242 | interrupts = <0 56 0x04 | ||
243 | 0 57 0x04>; | ||
244 | }; | ||
245 | }; | ||
diff --git a/arch/arm/boot/dts/tegra30.dtsi b/arch/arm/boot/dts/tegra30.dtsi index 15200a949a81..2dcc09e784b5 100644 --- a/arch/arm/boot/dts/tegra30.dtsi +++ b/arch/arm/boot/dts/tegra30.dtsi | |||
@@ -4,190 +4,193 @@ | |||
4 | compatible = "nvidia,tegra30"; | 4 | compatible = "nvidia,tegra30"; |
5 | interrupt-parent = <&intc>; | 5 | interrupt-parent = <&intc>; |
6 | 6 | ||
7 | pmc@7000f400 { | 7 | intc: interrupt-controller { |
8 | compatible = "nvidia,tegra20-pmc", "nvidia,tegra30-pmc"; | ||
9 | reg = <0x7000e400 0x400>; | ||
10 | }; | ||
11 | |||
12 | intc: interrupt-controller@50041000 { | ||
13 | compatible = "arm,cortex-a9-gic"; | 8 | compatible = "arm,cortex-a9-gic"; |
9 | reg = <0x50041000 0x1000 | ||
10 | 0x50040100 0x0100>; | ||
14 | interrupt-controller; | 11 | interrupt-controller; |
15 | #interrupt-cells = <3>; | 12 | #interrupt-cells = <3>; |
16 | reg = < 0x50041000 0x1000 >, | ||
17 | < 0x50040100 0x0100 >; | ||
18 | }; | 13 | }; |
19 | 14 | ||
20 | pmu { | 15 | apbdma: dma { |
21 | compatible = "arm,cortex-a9-pmu"; | ||
22 | interrupts = <0 144 0x04 | ||
23 | 0 145 0x04 | ||
24 | 0 146 0x04 | ||
25 | 0 147 0x04>; | ||
26 | }; | ||
27 | |||
28 | apbdma: dma@6000a000 { | ||
29 | compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma"; | 16 | compatible = "nvidia,tegra30-apbdma", "nvidia,tegra20-apbdma"; |
30 | reg = <0x6000a000 0x1400>; | 17 | reg = <0x6000a000 0x1400>; |
31 | interrupts = < 0 104 0x04 | 18 | interrupts = <0 104 0x04 |
32 | 0 105 0x04 | 19 | 0 105 0x04 |
33 | 0 106 0x04 | 20 | 0 106 0x04 |
34 | 0 107 0x04 | 21 | 0 107 0x04 |
35 | 0 108 0x04 | 22 | 0 108 0x04 |
36 | 0 109 0x04 | 23 | 0 109 0x04 |
37 | 0 110 0x04 | 24 | 0 110 0x04 |
38 | 0 111 0x04 | 25 | 0 111 0x04 |
39 | 0 112 0x04 | 26 | 0 112 0x04 |
40 | 0 113 0x04 | 27 | 0 113 0x04 |
41 | 0 114 0x04 | 28 | 0 114 0x04 |
42 | 0 115 0x04 | 29 | 0 115 0x04 |
43 | 0 116 0x04 | 30 | 0 116 0x04 |
44 | 0 117 0x04 | 31 | 0 117 0x04 |
45 | 0 118 0x04 | 32 | 0 118 0x04 |
46 | 0 119 0x04 | 33 | 0 119 0x04 |
47 | 0 128 0x04 | 34 | 0 128 0x04 |
48 | 0 129 0x04 | 35 | 0 129 0x04 |
49 | 0 130 0x04 | 36 | 0 130 0x04 |
50 | 0 131 0x04 | 37 | 0 131 0x04 |
51 | 0 132 0x04 | 38 | 0 132 0x04 |
52 | 0 133 0x04 | 39 | 0 133 0x04 |
53 | 0 134 0x04 | 40 | 0 134 0x04 |
54 | 0 135 0x04 | 41 | 0 135 0x04 |
55 | 0 136 0x04 | 42 | 0 136 0x04 |
56 | 0 137 0x04 | 43 | 0 137 0x04 |
57 | 0 138 0x04 | 44 | 0 138 0x04 |
58 | 0 139 0x04 | 45 | 0 139 0x04 |
59 | 0 140 0x04 | 46 | 0 140 0x04 |
60 | 0 141 0x04 | 47 | 0 141 0x04 |
61 | 0 142 0x04 | 48 | 0 142 0x04 |
62 | 0 143 0x04 >; | 49 | 0 143 0x04>; |
63 | }; | 50 | }; |
64 | 51 | ||
65 | i2c@7000c000 { | 52 | ahb: ahb { |
66 | #address-cells = <1>; | 53 | compatible = "nvidia,tegra30-ahb"; |
67 | #size-cells = <0>; | 54 | reg = <0x6000c004 0x14c>; /* AHB Arbitration + Gizmo Controller */ |
68 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; | ||
69 | reg = <0x7000C000 0x100>; | ||
70 | interrupts = < 0 38 0x04 >; | ||
71 | }; | ||
72 | |||
73 | i2c@7000c400 { | ||
74 | #address-cells = <1>; | ||
75 | #size-cells = <0>; | ||
76 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; | ||
77 | reg = <0x7000C400 0x100>; | ||
78 | interrupts = < 0 84 0x04 >; | ||
79 | }; | 55 | }; |
80 | 56 | ||
81 | i2c@7000c500 { | 57 | gpio: gpio { |
82 | #address-cells = <1>; | ||
83 | #size-cells = <0>; | ||
84 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; | ||
85 | reg = <0x7000C500 0x100>; | ||
86 | interrupts = < 0 92 0x04 >; | ||
87 | }; | ||
88 | |||
89 | i2c@7000c700 { | ||
90 | #address-cells = <1>; | ||
91 | #size-cells = <0>; | ||
92 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; | ||
93 | reg = <0x7000c700 0x100>; | ||
94 | interrupts = < 0 120 0x04 >; | ||
95 | }; | ||
96 | |||
97 | i2c@7000d000 { | ||
98 | #address-cells = <1>; | ||
99 | #size-cells = <0>; | ||
100 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; | ||
101 | reg = <0x7000D000 0x100>; | ||
102 | interrupts = < 0 53 0x04 >; | ||
103 | }; | ||
104 | |||
105 | gpio: gpio@6000d000 { | ||
106 | compatible = "nvidia,tegra30-gpio", "nvidia,tegra20-gpio"; | 58 | compatible = "nvidia,tegra30-gpio", "nvidia,tegra20-gpio"; |
107 | reg = < 0x6000d000 0x1000 >; | 59 | reg = <0x6000d000 0x1000>; |
108 | interrupts = < 0 32 0x04 | 60 | interrupts = <0 32 0x04 |
109 | 0 33 0x04 | 61 | 0 33 0x04 |
110 | 0 34 0x04 | 62 | 0 34 0x04 |
111 | 0 35 0x04 | 63 | 0 35 0x04 |
112 | 0 55 0x04 | 64 | 0 55 0x04 |
113 | 0 87 0x04 | 65 | 0 87 0x04 |
114 | 0 89 0x04 | 66 | 0 89 0x04 |
115 | 0 125 0x04 >; | 67 | 0 125 0x04>; |
116 | #gpio-cells = <2>; | 68 | #gpio-cells = <2>; |
117 | gpio-controller; | 69 | gpio-controller; |
118 | #interrupt-cells = <2>; | 70 | #interrupt-cells = <2>; |
119 | interrupt-controller; | 71 | interrupt-controller; |
120 | }; | 72 | }; |
121 | 73 | ||
74 | pinmux: pinmux { | ||
75 | compatible = "nvidia,tegra30-pinmux"; | ||
76 | reg = <0x70000868 0xd0 /* Pad control registers */ | ||
77 | 0x70003000 0x3e0>; /* Mux registers */ | ||
78 | }; | ||
79 | |||
122 | serial@70006000 { | 80 | serial@70006000 { |
123 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; | 81 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; |
124 | reg = <0x70006000 0x40>; | 82 | reg = <0x70006000 0x40>; |
125 | reg-shift = <2>; | 83 | reg-shift = <2>; |
126 | interrupts = < 0 36 0x04 >; | 84 | interrupts = <0 36 0x04>; |
85 | status = "disable"; | ||
127 | }; | 86 | }; |
128 | 87 | ||
129 | serial@70006040 { | 88 | serial@70006040 { |
130 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; | 89 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; |
131 | reg = <0x70006040 0x40>; | 90 | reg = <0x70006040 0x40>; |
132 | reg-shift = <2>; | 91 | reg-shift = <2>; |
133 | interrupts = < 0 37 0x04 >; | 92 | interrupts = <0 37 0x04>; |
93 | status = "disable"; | ||
134 | }; | 94 | }; |
135 | 95 | ||
136 | serial@70006200 { | 96 | serial@70006200 { |
137 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; | 97 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; |
138 | reg = <0x70006200 0x100>; | 98 | reg = <0x70006200 0x100>; |
139 | reg-shift = <2>; | 99 | reg-shift = <2>; |
140 | interrupts = < 0 46 0x04 >; | 100 | interrupts = <0 46 0x04>; |
101 | status = "disable"; | ||
141 | }; | 102 | }; |
142 | 103 | ||
143 | serial@70006300 { | 104 | serial@70006300 { |
144 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; | 105 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; |
145 | reg = <0x70006300 0x100>; | 106 | reg = <0x70006300 0x100>; |
146 | reg-shift = <2>; | 107 | reg-shift = <2>; |
147 | interrupts = < 0 90 0x04 >; | 108 | interrupts = <0 90 0x04>; |
109 | status = "disable"; | ||
148 | }; | 110 | }; |
149 | 111 | ||
150 | serial@70006400 { | 112 | serial@70006400 { |
151 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; | 113 | compatible = "nvidia,tegra30-uart", "nvidia,tegra20-uart"; |
152 | reg = <0x70006400 0x100>; | 114 | reg = <0x70006400 0x100>; |
153 | reg-shift = <2>; | 115 | reg-shift = <2>; |
154 | interrupts = < 0 91 0x04 >; | 116 | interrupts = <0 91 0x04>; |
117 | status = "disable"; | ||
155 | }; | 118 | }; |
156 | 119 | ||
157 | sdhci@78000000 { | 120 | i2c@7000c000 { |
158 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | 121 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; |
159 | reg = <0x78000000 0x200>; | 122 | reg = <0x7000c000 0x100>; |
160 | interrupts = < 0 14 0x04 >; | 123 | interrupts = <0 38 0x04>; |
124 | #address-cells = <1>; | ||
125 | #size-cells = <0>; | ||
126 | status = "disable"; | ||
161 | }; | 127 | }; |
162 | 128 | ||
163 | sdhci@78000200 { | 129 | i2c@7000c400 { |
164 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | 130 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; |
165 | reg = <0x78000200 0x200>; | 131 | reg = <0x7000c400 0x100>; |
166 | interrupts = < 0 15 0x04 >; | 132 | interrupts = <0 84 0x04>; |
133 | #address-cells = <1>; | ||
134 | #size-cells = <0>; | ||
135 | status = "disable"; | ||
167 | }; | 136 | }; |
168 | 137 | ||
169 | sdhci@78000400 { | 138 | i2c@7000c500 { |
170 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | 139 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; |
171 | reg = <0x78000400 0x200>; | 140 | reg = <0x7000c500 0x100>; |
172 | interrupts = < 0 19 0x04 >; | 141 | interrupts = <0 92 0x04>; |
142 | #address-cells = <1>; | ||
143 | #size-cells = <0>; | ||
144 | status = "disable"; | ||
173 | }; | 145 | }; |
174 | 146 | ||
175 | sdhci@78000600 { | 147 | i2c@7000c700 { |
176 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | 148 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; |
177 | reg = <0x78000600 0x200>; | 149 | reg = <0x7000c700 0x100>; |
178 | interrupts = < 0 31 0x04 >; | 150 | interrupts = <0 120 0x04>; |
151 | #address-cells = <1>; | ||
152 | #size-cells = <0>; | ||
153 | status = "disable"; | ||
179 | }; | 154 | }; |
180 | 155 | ||
181 | pinmux: pinmux@70000000 { | 156 | i2c@7000d000 { |
182 | compatible = "nvidia,tegra30-pinmux"; | 157 | compatible = "nvidia,tegra30-i2c", "nvidia,tegra20-i2c"; |
183 | reg = < 0x70000868 0xd0 /* Pad control registers */ | 158 | reg = <0x7000d000 0x100>; |
184 | 0x70003000 0x3e0 >; /* Mux registers */ | 159 | interrupts = <0 53 0x04>; |
160 | #address-cells = <1>; | ||
161 | #size-cells = <0>; | ||
162 | status = "disable"; | ||
163 | }; | ||
164 | |||
165 | pmc { | ||
166 | compatible = "nvidia,tegra20-pmc", "nvidia,tegra30-pmc"; | ||
167 | reg = <0x7000e400 0x400>; | ||
168 | }; | ||
169 | |||
170 | mc { | ||
171 | compatible = "nvidia,tegra30-mc"; | ||
172 | reg = <0x7000f000 0x010 | ||
173 | 0x7000f03c 0x1b4 | ||
174 | 0x7000f200 0x028 | ||
175 | 0x7000f284 0x17c>; | ||
176 | interrupts = <0 77 0x04>; | ||
177 | }; | ||
178 | |||
179 | smmu { | ||
180 | compatible = "nvidia,tegra30-smmu"; | ||
181 | reg = <0x7000f010 0x02c | ||
182 | 0x7000f1f0 0x010 | ||
183 | 0x7000f228 0x05c>; | ||
184 | nvidia,#asids = <4>; /* # of ASIDs */ | ||
185 | dma-window = <0 0x40000000>; /* IOVA start & length */ | ||
186 | nvidia,ahb = <&ahb>; | ||
185 | }; | 187 | }; |
186 | 188 | ||
187 | ahub { | 189 | ahub { |
188 | compatible = "nvidia,tegra30-ahub"; | 190 | compatible = "nvidia,tegra30-ahub"; |
189 | reg = <0x70080000 0x200 0x70080200 0x100>; | 191 | reg = <0x70080000 0x200 |
190 | interrupts = < 0 103 0x04 >; | 192 | 0x70080200 0x100>; |
193 | interrupts = <0 103 0x04>; | ||
191 | nvidia,dma-request-selector = <&apbdma 1>; | 194 | nvidia,dma-request-selector = <&apbdma 1>; |
192 | 195 | ||
193 | ranges; | 196 | ranges; |
@@ -198,30 +201,71 @@ | |||
198 | compatible = "nvidia,tegra30-i2s"; | 201 | compatible = "nvidia,tegra30-i2s"; |
199 | reg = <0x70080300 0x100>; | 202 | reg = <0x70080300 0x100>; |
200 | nvidia,ahub-cif-ids = <4 4>; | 203 | nvidia,ahub-cif-ids = <4 4>; |
204 | status = "disable"; | ||
201 | }; | 205 | }; |
202 | 206 | ||
203 | tegra_i2s1: i2s@70080400 { | 207 | tegra_i2s1: i2s@70080400 { |
204 | compatible = "nvidia,tegra30-i2s"; | 208 | compatible = "nvidia,tegra30-i2s"; |
205 | reg = <0x70080400 0x100>; | 209 | reg = <0x70080400 0x100>; |
206 | nvidia,ahub-cif-ids = <5 5>; | 210 | nvidia,ahub-cif-ids = <5 5>; |
211 | status = "disable"; | ||
207 | }; | 212 | }; |
208 | 213 | ||
209 | tegra_i2s2: i2s@70080500 { | 214 | tegra_i2s2: i2s@70080500 { |
210 | compatible = "nvidia,tegra30-i2s"; | 215 | compatible = "nvidia,tegra30-i2s"; |
211 | reg = <0x70080500 0x100>; | 216 | reg = <0x70080500 0x100>; |
212 | nvidia,ahub-cif-ids = <6 6>; | 217 | nvidia,ahub-cif-ids = <6 6>; |
218 | status = "disable"; | ||
213 | }; | 219 | }; |
214 | 220 | ||
215 | tegra_i2s3: i2s@70080600 { | 221 | tegra_i2s3: i2s@70080600 { |
216 | compatible = "nvidia,tegra30-i2s"; | 222 | compatible = "nvidia,tegra30-i2s"; |
217 | reg = <0x70080600 0x100>; | 223 | reg = <0x70080600 0x100>; |
218 | nvidia,ahub-cif-ids = <7 7>; | 224 | nvidia,ahub-cif-ids = <7 7>; |
225 | status = "disable"; | ||
219 | }; | 226 | }; |
220 | 227 | ||
221 | tegra_i2s4: i2s@70080700 { | 228 | tegra_i2s4: i2s@70080700 { |
222 | compatible = "nvidia,tegra30-i2s"; | 229 | compatible = "nvidia,tegra30-i2s"; |
223 | reg = <0x70080700 0x100>; | 230 | reg = <0x70080700 0x100>; |
224 | nvidia,ahub-cif-ids = <8 8>; | 231 | nvidia,ahub-cif-ids = <8 8>; |
232 | status = "disable"; | ||
225 | }; | 233 | }; |
226 | }; | 234 | }; |
235 | |||
236 | sdhci@78000000 { | ||
237 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | ||
238 | reg = <0x78000000 0x200>; | ||
239 | interrupts = <0 14 0x04>; | ||
240 | status = "disable"; | ||
241 | }; | ||
242 | |||
243 | sdhci@78000200 { | ||
244 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | ||
245 | reg = <0x78000200 0x200>; | ||
246 | interrupts = <0 15 0x04>; | ||
247 | status = "disable"; | ||
248 | }; | ||
249 | |||
250 | sdhci@78000400 { | ||
251 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | ||
252 | reg = <0x78000400 0x200>; | ||
253 | interrupts = <0 19 0x04>; | ||
254 | status = "disable"; | ||
255 | }; | ||
256 | |||
257 | sdhci@78000600 { | ||
258 | compatible = "nvidia,tegra30-sdhci", "nvidia,tegra20-sdhci"; | ||
259 | reg = <0x78000600 0x200>; | ||
260 | interrupts = <0 31 0x04>; | ||
261 | status = "disable"; | ||
262 | }; | ||
263 | |||
264 | pmu { | ||
265 | compatible = "arm,cortex-a9-pmu"; | ||
266 | interrupts = <0 144 0x04 | ||
267 | 0 145 0x04 | ||
268 | 0 146 0x04 | ||
269 | 0 147 0x04>; | ||
270 | }; | ||
227 | }; | 271 | }; |
diff --git a/arch/arm/configs/mxs_defconfig b/arch/arm/configs/mxs_defconfig index 1ebbf451c48d..5406c23a02e3 100644 --- a/arch/arm/configs/mxs_defconfig +++ b/arch/arm/configs/mxs_defconfig | |||
@@ -22,6 +22,7 @@ CONFIG_BLK_DEV_INTEGRITY=y | |||
22 | # CONFIG_IOSCHED_DEADLINE is not set | 22 | # CONFIG_IOSCHED_DEADLINE is not set |
23 | # CONFIG_IOSCHED_CFQ is not set | 23 | # CONFIG_IOSCHED_CFQ is not set |
24 | CONFIG_ARCH_MXS=y | 24 | CONFIG_ARCH_MXS=y |
25 | CONFIG_MACH_MXS_DT=y | ||
25 | CONFIG_MACH_MX23EVK=y | 26 | CONFIG_MACH_MX23EVK=y |
26 | CONFIG_MACH_MX28EVK=y | 27 | CONFIG_MACH_MX28EVK=y |
27 | CONFIG_MACH_STMP378X_DEVB=y | 28 | CONFIG_MACH_STMP378X_DEVB=y |
diff --git a/arch/arm/mach-imx/Makefile.boot b/arch/arm/mach-imx/Makefile.boot index 3851d8a27875..05541cf4a878 100644 --- a/arch/arm/mach-imx/Makefile.boot +++ b/arch/arm/mach-imx/Makefile.boot | |||
@@ -42,4 +42,5 @@ dtb-$(CONFIG_MACH_IMX51_DT) += imx51-babbage.dtb | |||
42 | dtb-$(CONFIG_MACH_IMX53_DT) += imx53-ard.dtb imx53-evk.dtb \ | 42 | dtb-$(CONFIG_MACH_IMX53_DT) += imx53-ard.dtb imx53-evk.dtb \ |
43 | imx53-qsb.dtb imx53-smd.dtb | 43 | imx53-qsb.dtb imx53-smd.dtb |
44 | dtb-$(CONFIG_SOC_IMX6Q) += imx6q-arm2.dtb \ | 44 | dtb-$(CONFIG_SOC_IMX6Q) += imx6q-arm2.dtb \ |
45 | imx6q-sabrelite.dtb | 45 | imx6q-sabrelite.dtb \ |
46 | imx6q-sabresd.dtb \ | ||
diff --git a/arch/arm/mach-imx/clk-imx51-imx53.c b/arch/arm/mach-imx/clk-imx51-imx53.c index b8a382defb23..fcd94f3b0f0e 100644 --- a/arch/arm/mach-imx/clk-imx51-imx53.c +++ b/arch/arm/mach-imx/clk-imx51-imx53.c | |||
@@ -31,6 +31,11 @@ static const char *per_lp_apm_sel[] = { "main_bus", "lp_apm", }; | |||
31 | static const char *per_root_sel[] = { "per_podf", "ipg", }; | 31 | static const char *per_root_sel[] = { "per_podf", "ipg", }; |
32 | static const char *esdhc_c_sel[] = { "esdhc_a_podf", "esdhc_b_podf", }; | 32 | static const char *esdhc_c_sel[] = { "esdhc_a_podf", "esdhc_b_podf", }; |
33 | static const char *esdhc_d_sel[] = { "esdhc_a_podf", "esdhc_b_podf", }; | 33 | static const char *esdhc_d_sel[] = { "esdhc_a_podf", "esdhc_b_podf", }; |
34 | static const char *ssi_apm_sels[] = { "ckih1", "lp_amp", "ckih2", }; | ||
35 | static const char *ssi_clk_sels[] = { "pll1_sw", "pll2_sw", "pll3_sw", "ssi_apm", }; | ||
36 | static const char *ssi3_clk_sels[] = { "ssi1_root_gate", "ssi2_root_gate", }; | ||
37 | static const char *ssi_ext1_com_sels[] = { "ssi_ext1_podf", "ssi1_root_gate", }; | ||
38 | static const char *ssi_ext2_com_sels[] = { "ssi_ext2_podf", "ssi2_root_gate", }; | ||
34 | static const char *emi_slow_sel[] = { "main_bus", "ahb", }; | 39 | static const char *emi_slow_sel[] = { "main_bus", "ahb", }; |
35 | static const char *usb_phy_sel_str[] = { "osc", "usb_phy_podf", }; | 40 | static const char *usb_phy_sel_str[] = { "osc", "usb_phy_podf", }; |
36 | static const char *mx51_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "tve_di", }; | 41 | static const char *mx51_ipu_di0_sel[] = { "di_pred", "osc", "ckih1", "tve_di", }; |
@@ -71,6 +76,11 @@ enum imx5_clks { | |||
71 | pll3_sw, ipu_di0_sel, ipu_di1_sel, tve_ext_sel, mx51_mipi, pll4_sw, | 76 | pll3_sw, ipu_di0_sel, ipu_di1_sel, tve_ext_sel, mx51_mipi, pll4_sw, |
72 | ldb_di1_sel, di_pll4_podf, ldb_di0_sel, ldb_di0_gate, usb_phy1_gate, | 77 | ldb_di1_sel, di_pll4_podf, ldb_di0_sel, ldb_di0_gate, usb_phy1_gate, |
73 | usb_phy2_gate, per_lp_apm, per_pred1, per_pred2, per_podf, per_root, | 78 | usb_phy2_gate, per_lp_apm, per_pred1, per_pred2, per_podf, per_root, |
79 | ssi_apm, ssi1_root_sel, ssi2_root_sel, ssi3_root_sel, ssi_ext1_sel, | ||
80 | ssi_ext2_sel, ssi_ext1_com_sel, ssi_ext2_com_sel, ssi1_root_pred, | ||
81 | ssi1_root_podf, ssi2_root_pred, ssi2_root_podf, ssi_ext1_pred, | ||
82 | ssi_ext1_podf, ssi_ext2_pred, ssi_ext2_podf, ssi1_root_gate, | ||
83 | ssi2_root_gate, ssi3_root_gate, ssi_ext1_gate, ssi_ext2_gate, | ||
74 | clk_max | 84 | clk_max |
75 | }; | 85 | }; |
76 | 86 | ||
@@ -195,6 +205,28 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil, | |||
195 | clk[uart5_per_gate] = imx_clk_gate2("uart5_per_gate", "uart_root", MXC_CCM_CCGR7, 14); | 205 | clk[uart5_per_gate] = imx_clk_gate2("uart5_per_gate", "uart_root", MXC_CCM_CCGR7, 14); |
196 | clk[gpc_dvfs] = imx_clk_gate2("gpc_dvfs", "dummy", MXC_CCM_CCGR5, 24); | 206 | clk[gpc_dvfs] = imx_clk_gate2("gpc_dvfs", "dummy", MXC_CCM_CCGR5, 24); |
197 | 207 | ||
208 | clk[ssi_apm] = imx_clk_mux("ssi_apm", MXC_CCM_CSCMR1, 8, 2, ssi_apm_sels, ARRAY_SIZE(ssi_apm_sels)); | ||
209 | clk[ssi1_root_sel] = imx_clk_mux("ssi1_root_sel", MXC_CCM_CSCMR1, 14, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels)); | ||
210 | clk[ssi2_root_sel] = imx_clk_mux("ssi2_root_sel", MXC_CCM_CSCMR1, 12, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels)); | ||
211 | clk[ssi3_root_sel] = imx_clk_mux("ssi3_root_sel", MXC_CCM_CSCMR1, 11, 1, ssi3_clk_sels, ARRAY_SIZE(ssi3_clk_sels)); | ||
212 | clk[ssi_ext1_sel] = imx_clk_mux("ssi_ext1_sel", MXC_CCM_CSCMR1, 28, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels)); | ||
213 | clk[ssi_ext2_sel] = imx_clk_mux("ssi_ext2_sel", MXC_CCM_CSCMR1, 30, 2, ssi_clk_sels, ARRAY_SIZE(ssi_clk_sels)); | ||
214 | clk[ssi_ext1_com_sel] = imx_clk_mux("ssi_ext1_com_sel", MXC_CCM_CSCMR1, 0, 1, ssi_ext1_com_sels, ARRAY_SIZE(ssi_ext1_com_sels)); | ||
215 | clk[ssi_ext2_com_sel] = imx_clk_mux("ssi_ext2_com_sel", MXC_CCM_CSCMR1, 1, 1, ssi_ext2_com_sels, ARRAY_SIZE(ssi_ext2_com_sels)); | ||
216 | clk[ssi1_root_pred] = imx_clk_divider("ssi1_root_pred", "ssi1_root_sel", MXC_CCM_CS1CDR, 6, 3); | ||
217 | clk[ssi1_root_podf] = imx_clk_divider("ssi1_root_podf", "ssi1_root_pred", MXC_CCM_CS1CDR, 0, 6); | ||
218 | clk[ssi2_root_pred] = imx_clk_divider("ssi2_root_pred", "ssi2_root_sel", MXC_CCM_CS2CDR, 6, 3); | ||
219 | clk[ssi2_root_podf] = imx_clk_divider("ssi2_root_podf", "ssi2_root_pred", MXC_CCM_CS2CDR, 0, 6); | ||
220 | clk[ssi_ext1_pred] = imx_clk_divider("ssi_ext1_pred", "ssi_ext1_sel", MXC_CCM_CS1CDR, 22, 3); | ||
221 | clk[ssi_ext1_podf] = imx_clk_divider("ssi_ext1_podf", "ssi_ext1_pred", MXC_CCM_CS1CDR, 16, 6); | ||
222 | clk[ssi_ext2_pred] = imx_clk_divider("ssi_ext2_pred", "ssi_ext2_sel", MXC_CCM_CS2CDR, 22, 3); | ||
223 | clk[ssi_ext2_podf] = imx_clk_divider("ssi_ext2_podf", "ssi_ext2_pred", MXC_CCM_CS2CDR, 16, 6); | ||
224 | clk[ssi1_root_gate] = imx_clk_gate2("ssi1_root_gate", "ssi1_root_podf", MXC_CCM_CCGR3, 18); | ||
225 | clk[ssi2_root_gate] = imx_clk_gate2("ssi2_root_gate", "ssi2_root_podf", MXC_CCM_CCGR3, 22); | ||
226 | clk[ssi3_root_gate] = imx_clk_gate2("ssi3_root_gate", "ssi3_root_sel", MXC_CCM_CCGR3, 26); | ||
227 | clk[ssi_ext1_gate] = imx_clk_gate2("ssi_ext1_gate", "ssi_ext1_com_sel", MXC_CCM_CCGR3, 28); | ||
228 | clk[ssi_ext2_gate] = imx_clk_gate2("ssi_ext2_gate", "ssi_ext2_com_sel", MXC_CCM_CCGR3, 30); | ||
229 | |||
198 | for (i = 0; i < ARRAY_SIZE(clk); i++) | 230 | for (i = 0; i < ARRAY_SIZE(clk); i++) |
199 | if (IS_ERR(clk[i])) | 231 | if (IS_ERR(clk[i])) |
200 | pr_err("i.MX5 clk %d: register failed with %ld\n", | 232 | pr_err("i.MX5 clk %d: register failed with %ld\n", |
@@ -237,6 +269,8 @@ static void __init mx5_clocks_common_init(unsigned long rate_ckil, | |||
237 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); | 269 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "imx-ssi.0"); |
238 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); | 270 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "imx-ssi.1"); |
239 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); | 271 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "imx-ssi.2"); |
272 | clk_register_clkdev(clk[ssi_ext1_gate], "ssi_ext1", NULL); | ||
273 | clk_register_clkdev(clk[ssi_ext2_gate], "ssi_ext2", NULL); | ||
240 | clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma"); | 274 | clk_register_clkdev(clk[sdma_gate], NULL, "imx35-sdma"); |
241 | clk_register_clkdev(clk[cpu_podf], "cpu", NULL); | 275 | clk_register_clkdev(clk[cpu_podf], "cpu", NULL); |
242 | clk_register_clkdev(clk[iim_gate], "iim", NULL); | 276 | clk_register_clkdev(clk[iim_gate], "iim", NULL); |
@@ -320,6 +354,9 @@ int __init mx51_clocks_init(unsigned long rate_ckil, unsigned long rate_osc, | |||
320 | clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx51.3"); | 354 | clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx51.3"); |
321 | clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.3"); | 355 | clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx51.3"); |
322 | clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx51.3"); | 356 | clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx51.3"); |
357 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "83fcc000.ssi"); | ||
358 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "70014000.ssi"); | ||
359 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "83fe8000.ssi"); | ||
323 | 360 | ||
324 | /* set the usboh3 parent to pll2_sw */ | 361 | /* set the usboh3 parent to pll2_sw */ |
325 | clk_set_parent(clk[usboh3_sel], clk[pll2_sw]); | 362 | clk_set_parent(clk[usboh3_sel], clk[pll2_sw]); |
@@ -406,6 +443,9 @@ int __init mx53_clocks_init(unsigned long rate_ckil, unsigned long rate_osc, | |||
406 | clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx53.3"); | 443 | clk_register_clkdev(clk[esdhc4_ipg_gate], "ipg", "sdhci-esdhc-imx53.3"); |
407 | clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx53.3"); | 444 | clk_register_clkdev(clk[dummy], "ahb", "sdhci-esdhc-imx53.3"); |
408 | clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx53.3"); | 445 | clk_register_clkdev(clk[esdhc4_per_gate], "per", "sdhci-esdhc-imx53.3"); |
446 | clk_register_clkdev(clk[ssi1_ipg_gate], NULL, "63fcc000.ssi"); | ||
447 | clk_register_clkdev(clk[ssi2_ipg_gate], NULL, "50014000.ssi"); | ||
448 | clk_register_clkdev(clk[ssi3_ipg_gate], NULL, "63fd0000.ssi"); | ||
409 | 449 | ||
410 | /* set SDHC root clock to 200MHZ*/ | 450 | /* set SDHC root clock to 200MHZ*/ |
411 | clk_set_rate(clk[esdhc_a_podf], 200000000); | 451 | clk_set_rate(clk[esdhc_a_podf], 200000000); |
diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index f40a35da2e5c..cab02d0a15d6 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c | |||
@@ -155,7 +155,8 @@ enum mx6q_clks { | |||
155 | gpmi_bch_apb, gpmi_bch, gpmi_io, gpmi_apb, sata, sdma, spba, ssi1, | 155 | gpmi_bch_apb, gpmi_bch, gpmi_io, gpmi_apb, sata, sdma, spba, ssi1, |
156 | ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3, | 156 | ssi2, ssi3, uart_ipg, uart_serial, usboh3, usdhc1, usdhc2, usdhc3, |
157 | usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg, | 157 | usdhc4, vdo_axi, vpu_axi, cko1, pll1_sys, pll2_bus, pll3_usb_otg, |
158 | pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, clk_max | 158 | pll4_audio, pll5_video, pll6_mlb, pll7_usb_host, pll8_enet, ssi1_ipg, |
159 | ssi2_ipg, ssi3_ipg, clk_max | ||
159 | }; | 160 | }; |
160 | 161 | ||
161 | static struct clk *clk[clk_max]; | 162 | static struct clk *clk[clk_max]; |
@@ -367,9 +368,9 @@ int __init mx6q_clocks_init(void) | |||
367 | clk[sata] = imx_clk_gate2("sata", "ipg", base + 0x7c, 4); | 368 | clk[sata] = imx_clk_gate2("sata", "ipg", base + 0x7c, 4); |
368 | clk[sdma] = imx_clk_gate2("sdma", "ahb", base + 0x7c, 6); | 369 | clk[sdma] = imx_clk_gate2("sdma", "ahb", base + 0x7c, 6); |
369 | clk[spba] = imx_clk_gate2("spba", "ipg", base + 0x7c, 12); | 370 | clk[spba] = imx_clk_gate2("spba", "ipg", base + 0x7c, 12); |
370 | clk[ssi1] = imx_clk_gate2("ssi1", "ssi1_podf", base + 0x7c, 18); | 371 | clk[ssi1_ipg] = imx_clk_gate2("ssi1_ipg", "ipg", base + 0x7c, 18); |
371 | clk[ssi2] = imx_clk_gate2("ssi2", "ssi2_podf", base + 0x7c, 20); | 372 | clk[ssi2_ipg] = imx_clk_gate2("ssi2_ipg", "ipg", base + 0x7c, 20); |
372 | clk[ssi3] = imx_clk_gate2("ssi3", "ssi3_podf", base + 0x7c, 22); | 373 | clk[ssi3_ipg] = imx_clk_gate2("ssi3_ipg", "ipg", base + 0x7c, 22); |
373 | clk[uart_ipg] = imx_clk_gate2("uart_ipg", "ipg", base + 0x7c, 24); | 374 | clk[uart_ipg] = imx_clk_gate2("uart_ipg", "ipg", base + 0x7c, 24); |
374 | clk[uart_serial] = imx_clk_gate2("uart_serial", "uart_serial_podf", base + 0x7c, 26); | 375 | clk[uart_serial] = imx_clk_gate2("uart_serial", "uart_serial_podf", base + 0x7c, 26); |
375 | clk[usboh3] = imx_clk_gate2("usboh3", "ipg", base + 0x80, 0); | 376 | clk[usboh3] = imx_clk_gate2("usboh3", "ipg", base + 0x80, 0); |
@@ -392,17 +393,17 @@ int __init mx6q_clocks_init(void) | |||
392 | clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); | 393 | clk_register_clkdev(clk[gpt_ipg_per], "per", "imx-gpt.0"); |
393 | clk_register_clkdev(clk[twd], NULL, "smp_twd"); | 394 | clk_register_clkdev(clk[twd], NULL, "smp_twd"); |
394 | clk_register_clkdev(clk[usboh3], NULL, "usboh3"); | 395 | clk_register_clkdev(clk[usboh3], NULL, "usboh3"); |
395 | clk_register_clkdev(clk[uart_serial], "per", "2020000.uart"); | 396 | clk_register_clkdev(clk[uart_serial], "per", "2020000.serial"); |
396 | clk_register_clkdev(clk[uart_ipg], "ipg", "2020000.uart"); | 397 | clk_register_clkdev(clk[uart_ipg], "ipg", "2020000.serial"); |
397 | clk_register_clkdev(clk[uart_serial], "per", "21e8000.uart"); | 398 | clk_register_clkdev(clk[uart_serial], "per", "21e8000.serial"); |
398 | clk_register_clkdev(clk[uart_ipg], "ipg", "21e8000.uart"); | 399 | clk_register_clkdev(clk[uart_ipg], "ipg", "21e8000.serial"); |
399 | clk_register_clkdev(clk[uart_serial], "per", "21ec000.uart"); | 400 | clk_register_clkdev(clk[uart_serial], "per", "21ec000.serial"); |
400 | clk_register_clkdev(clk[uart_ipg], "ipg", "21ec000.uart"); | 401 | clk_register_clkdev(clk[uart_ipg], "ipg", "21ec000.serial"); |
401 | clk_register_clkdev(clk[uart_serial], "per", "21f0000.uart"); | 402 | clk_register_clkdev(clk[uart_serial], "per", "21f0000.serial"); |
402 | clk_register_clkdev(clk[uart_ipg], "ipg", "21f0000.uart"); | 403 | clk_register_clkdev(clk[uart_ipg], "ipg", "21f0000.serial"); |
403 | clk_register_clkdev(clk[uart_serial], "per", "21f4000.uart"); | 404 | clk_register_clkdev(clk[uart_serial], "per", "21f4000.serial"); |
404 | clk_register_clkdev(clk[uart_ipg], "ipg", "21f4000.uart"); | 405 | clk_register_clkdev(clk[uart_ipg], "ipg", "21f4000.serial"); |
405 | clk_register_clkdev(clk[enet], NULL, "2188000.enet"); | 406 | clk_register_clkdev(clk[enet], NULL, "2188000.ethernet"); |
406 | clk_register_clkdev(clk[usdhc1], NULL, "2190000.usdhc"); | 407 | clk_register_clkdev(clk[usdhc1], NULL, "2190000.usdhc"); |
407 | clk_register_clkdev(clk[usdhc2], NULL, "2194000.usdhc"); | 408 | clk_register_clkdev(clk[usdhc2], NULL, "2194000.usdhc"); |
408 | clk_register_clkdev(clk[usdhc3], NULL, "2198000.usdhc"); | 409 | clk_register_clkdev(clk[usdhc3], NULL, "2198000.usdhc"); |
@@ -418,6 +419,10 @@ int __init mx6q_clocks_init(void) | |||
418 | clk_register_clkdev(clk[sdma], NULL, "20ec000.sdma"); | 419 | clk_register_clkdev(clk[sdma], NULL, "20ec000.sdma"); |
419 | clk_register_clkdev(clk[dummy], NULL, "20bc000.wdog"); | 420 | clk_register_clkdev(clk[dummy], NULL, "20bc000.wdog"); |
420 | clk_register_clkdev(clk[dummy], NULL, "20c0000.wdog"); | 421 | clk_register_clkdev(clk[dummy], NULL, "20c0000.wdog"); |
422 | clk_register_clkdev(clk[ssi1_ipg], NULL, "2028000.ssi"); | ||
423 | clk_register_clkdev(clk[cko1_sel], "cko1_sel", NULL); | ||
424 | clk_register_clkdev(clk[ahb], "ahb", NULL); | ||
425 | clk_register_clkdev(clk[cko1], "cko1", NULL); | ||
421 | 426 | ||
422 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) { | 427 | for (i = 0; i < ARRAY_SIZE(clks_init_on); i++) { |
423 | c = clk_get_sys(clks_init_on[i], NULL); | 428 | c = clk_get_sys(clks_init_on[i], NULL); |
diff --git a/arch/arm/mach-imx/imx53-dt.c b/arch/arm/mach-imx/imx53-dt.c index 574eca4b89a5..eb04b6248e48 100644 --- a/arch/arm/mach-imx/imx53-dt.c +++ b/arch/arm/mach-imx/imx53-dt.c | |||
@@ -10,6 +10,9 @@ | |||
10 | * http://www.gnu.org/copyleft/gpl.html | 10 | * http://www.gnu.org/copyleft/gpl.html |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/clk.h> | ||
14 | #include <linux/clkdev.h> | ||
15 | #include <linux/err.h> | ||
13 | #include <linux/io.h> | 16 | #include <linux/io.h> |
14 | #include <linux/irq.h> | 17 | #include <linux/irq.h> |
15 | #include <linux/irqdomain.h> | 18 | #include <linux/irqdomain.h> |
@@ -81,6 +84,19 @@ static const struct of_device_id imx53_iomuxc_of_match[] __initconst = { | |||
81 | { /* sentinel */ } | 84 | { /* sentinel */ } |
82 | }; | 85 | }; |
83 | 86 | ||
87 | static void __init imx53_qsb_init(void) | ||
88 | { | ||
89 | struct clk *clk; | ||
90 | |||
91 | clk = clk_get_sys(NULL, "ssi_ext1"); | ||
92 | if (IS_ERR(clk)) { | ||
93 | pr_err("failed to get clk ssi_ext1\n"); | ||
94 | return; | ||
95 | } | ||
96 | |||
97 | clk_register_clkdev(clk, NULL, "0-000a"); | ||
98 | } | ||
99 | |||
84 | static void __init imx53_dt_init(void) | 100 | static void __init imx53_dt_init(void) |
85 | { | 101 | { |
86 | struct device_node *node; | 102 | struct device_node *node; |
@@ -99,6 +115,9 @@ static void __init imx53_dt_init(void) | |||
99 | of_node_put(node); | 115 | of_node_put(node); |
100 | } | 116 | } |
101 | 117 | ||
118 | if (of_machine_is_compatible("fsl,imx53-qsb")) | ||
119 | imx53_qsb_init(); | ||
120 | |||
102 | of_platform_populate(NULL, of_default_bus_match_table, | 121 | of_platform_populate(NULL, of_default_bus_match_table, |
103 | imx53_auxdata_lookup, NULL); | 122 | imx53_auxdata_lookup, NULL); |
104 | } | 123 | } |
diff --git a/arch/arm/mach-imx/lluart.c b/arch/arm/mach-imx/lluart.c index 0213f8dcee81..c40a34c00489 100644 --- a/arch/arm/mach-imx/lluart.c +++ b/arch/arm/mach-imx/lluart.c | |||
@@ -17,6 +17,12 @@ | |||
17 | #include <mach/hardware.h> | 17 | #include <mach/hardware.h> |
18 | 18 | ||
19 | static struct map_desc imx_lluart_desc = { | 19 | static struct map_desc imx_lluart_desc = { |
20 | #ifdef CONFIG_DEBUG_IMX6Q_UART2 | ||
21 | .virtual = MX6Q_IO_P2V(MX6Q_UART2_BASE_ADDR), | ||
22 | .pfn = __phys_to_pfn(MX6Q_UART2_BASE_ADDR), | ||
23 | .length = MX6Q_UART2_SIZE, | ||
24 | .type = MT_DEVICE, | ||
25 | #endif | ||
20 | #ifdef CONFIG_DEBUG_IMX6Q_UART4 | 26 | #ifdef CONFIG_DEBUG_IMX6Q_UART4 |
21 | .virtual = MX6Q_IO_P2V(MX6Q_UART4_BASE_ADDR), | 27 | .virtual = MX6Q_IO_P2V(MX6Q_UART4_BASE_ADDR), |
22 | .pfn = __phys_to_pfn(MX6Q_UART4_BASE_ADDR), | 28 | .pfn = __phys_to_pfn(MX6Q_UART4_BASE_ADDR), |
diff --git a/arch/arm/mach-imx/mach-imx6q.c b/arch/arm/mach-imx/mach-imx6q.c index 3df360a52c17..b47e98b7d539 100644 --- a/arch/arm/mach-imx/mach-imx6q.c +++ b/arch/arm/mach-imx/mach-imx6q.c | |||
@@ -10,6 +10,8 @@ | |||
10 | * http://www.gnu.org/copyleft/gpl.html | 10 | * http://www.gnu.org/copyleft/gpl.html |
11 | */ | 11 | */ |
12 | 12 | ||
13 | #include <linux/clk.h> | ||
14 | #include <linux/clkdev.h> | ||
13 | #include <linux/delay.h> | 15 | #include <linux/delay.h> |
14 | #include <linux/init.h> | 16 | #include <linux/init.h> |
15 | #include <linux/io.h> | 17 | #include <linux/io.h> |
@@ -64,18 +66,53 @@ soft: | |||
64 | /* For imx6q sabrelite board: set KSZ9021RN RGMII pad skew */ | 66 | /* For imx6q sabrelite board: set KSZ9021RN RGMII pad skew */ |
65 | static int ksz9021rn_phy_fixup(struct phy_device *phydev) | 67 | static int ksz9021rn_phy_fixup(struct phy_device *phydev) |
66 | { | 68 | { |
67 | /* min rx data delay */ | 69 | if (IS_ENABLED(CONFIG_PHYLIB)) { |
68 | phy_write(phydev, 0x0b, 0x8105); | 70 | /* min rx data delay */ |
69 | phy_write(phydev, 0x0c, 0x0000); | 71 | phy_write(phydev, 0x0b, 0x8105); |
72 | phy_write(phydev, 0x0c, 0x0000); | ||
70 | 73 | ||
71 | /* max rx/tx clock delay, min rx/tx control delay */ | 74 | /* max rx/tx clock delay, min rx/tx control delay */ |
72 | phy_write(phydev, 0x0b, 0x8104); | 75 | phy_write(phydev, 0x0b, 0x8104); |
73 | phy_write(phydev, 0x0c, 0xf0f0); | 76 | phy_write(phydev, 0x0c, 0xf0f0); |
74 | phy_write(phydev, 0x0b, 0x104); | 77 | phy_write(phydev, 0x0b, 0x104); |
78 | } | ||
75 | 79 | ||
76 | return 0; | 80 | return 0; |
77 | } | 81 | } |
78 | 82 | ||
83 | static void __init imx6q_sabrelite_cko1_setup(void) | ||
84 | { | ||
85 | struct clk *cko1_sel, *ahb, *cko1; | ||
86 | unsigned long rate; | ||
87 | |||
88 | cko1_sel = clk_get_sys(NULL, "cko1_sel"); | ||
89 | ahb = clk_get_sys(NULL, "ahb"); | ||
90 | cko1 = clk_get_sys(NULL, "cko1"); | ||
91 | if (IS_ERR(cko1_sel) || IS_ERR(ahb) || IS_ERR(cko1)) { | ||
92 | pr_err("cko1 setup failed!\n"); | ||
93 | goto put_clk; | ||
94 | } | ||
95 | clk_set_parent(cko1_sel, ahb); | ||
96 | rate = clk_round_rate(cko1, 16000000); | ||
97 | clk_set_rate(cko1, rate); | ||
98 | clk_register_clkdev(cko1, NULL, "0-000a"); | ||
99 | put_clk: | ||
100 | if (!IS_ERR(cko1_sel)) | ||
101 | clk_put(cko1_sel); | ||
102 | if (!IS_ERR(ahb)) | ||
103 | clk_put(ahb); | ||
104 | if (!IS_ERR(cko1)) | ||
105 | clk_put(cko1); | ||
106 | } | ||
107 | |||
108 | static void __init imx6q_sabrelite_init(void) | ||
109 | { | ||
110 | if (IS_ENABLED(CONFIG_PHYLIB)) | ||
111 | phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK, | ||
112 | ksz9021rn_phy_fixup); | ||
113 | imx6q_sabrelite_cko1_setup(); | ||
114 | } | ||
115 | |||
79 | static void __init imx6q_init_machine(void) | 116 | static void __init imx6q_init_machine(void) |
80 | { | 117 | { |
81 | /* | 118 | /* |
@@ -85,8 +122,7 @@ static void __init imx6q_init_machine(void) | |||
85 | pinctrl_provide_dummies(); | 122 | pinctrl_provide_dummies(); |
86 | 123 | ||
87 | if (of_machine_is_compatible("fsl,imx6q-sabrelite")) | 124 | if (of_machine_is_compatible("fsl,imx6q-sabrelite")) |
88 | phy_register_fixup_for_uid(PHY_ID_KSZ9021, MICREL_PHY_ID_MASK, | 125 | imx6q_sabrelite_init(); |
89 | ksz9021rn_phy_fixup); | ||
90 | 126 | ||
91 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 127 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
92 | 128 | ||
@@ -139,6 +175,7 @@ static struct sys_timer imx6q_timer = { | |||
139 | static const char *imx6q_dt_compat[] __initdata = { | 175 | static const char *imx6q_dt_compat[] __initdata = { |
140 | "fsl,imx6q-arm2", | 176 | "fsl,imx6q-arm2", |
141 | "fsl,imx6q-sabrelite", | 177 | "fsl,imx6q-sabrelite", |
178 | "fsl,imx6q-sabresd", | ||
142 | "fsl,imx6q", | 179 | "fsl,imx6q", |
143 | NULL, | 180 | NULL, |
144 | }; | 181 | }; |
diff --git a/arch/arm/mach-imx/mach-mx51_babbage.c b/arch/arm/mach-imx/mach-mx51_babbage.c index e4b822e9f719..517672ebcbc5 100644 --- a/arch/arm/mach-imx/mach-mx51_babbage.c +++ b/arch/arm/mach-imx/mach-mx51_babbage.c | |||
@@ -163,6 +163,12 @@ static iomux_v3_cfg_t mx51babbage_pads[] = { | |||
163 | MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK, | 163 | MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK, |
164 | MX51_PAD_CSPI1_SS0__GPIO4_24, | 164 | MX51_PAD_CSPI1_SS0__GPIO4_24, |
165 | MX51_PAD_CSPI1_SS1__GPIO4_25, | 165 | MX51_PAD_CSPI1_SS1__GPIO4_25, |
166 | |||
167 | /* Audio */ | ||
168 | MX51_PAD_AUD3_BB_TXD__AUD3_TXD, | ||
169 | MX51_PAD_AUD3_BB_RXD__AUD3_RXD, | ||
170 | MX51_PAD_AUD3_BB_CK__AUD3_TXC, | ||
171 | MX51_PAD_AUD3_BB_FS__AUD3_TXFS, | ||
166 | }; | 172 | }; |
167 | 173 | ||
168 | /* Serial ports */ | 174 | /* Serial ports */ |
diff --git a/arch/arm/mach-mxs/Kconfig b/arch/arm/mach-mxs/Kconfig index 07d5383d68ee..91cf0625819c 100644 --- a/arch/arm/mach-mxs/Kconfig +++ b/arch/arm/mach-mxs/Kconfig | |||
@@ -7,18 +7,28 @@ config MXS_OCOTP | |||
7 | 7 | ||
8 | config SOC_IMX23 | 8 | config SOC_IMX23 |
9 | bool | 9 | bool |
10 | select ARM_AMBA | ||
10 | select CPU_ARM926T | 11 | select CPU_ARM926T |
11 | select HAVE_PWM | 12 | select HAVE_PWM |
12 | select PINCTRL_IMX23 | 13 | select PINCTRL_IMX23 |
13 | 14 | ||
14 | config SOC_IMX28 | 15 | config SOC_IMX28 |
15 | bool | 16 | bool |
17 | select ARM_AMBA | ||
16 | select CPU_ARM926T | 18 | select CPU_ARM926T |
17 | select HAVE_PWM | 19 | select HAVE_PWM |
18 | select PINCTRL_IMX28 | 20 | select PINCTRL_IMX28 |
19 | 21 | ||
20 | comment "MXS platforms:" | 22 | comment "MXS platforms:" |
21 | 23 | ||
24 | config MACH_MXS_DT | ||
25 | bool "Support MXS platforms from device tree" | ||
26 | select SOC_IMX23 | ||
27 | select SOC_IMX28 | ||
28 | help | ||
29 | Include support for Freescale MXS platforms(i.MX23 and i.MX28) | ||
30 | using the device tree for discovery | ||
31 | |||
22 | config MACH_STMP378X_DEVB | 32 | config MACH_STMP378X_DEVB |
23 | bool "Support STMP378x_devb Platform" | 33 | bool "Support STMP378x_devb Platform" |
24 | select SOC_IMX23 | 34 | select SOC_IMX23 |
diff --git a/arch/arm/mach-mxs/Makefile b/arch/arm/mach-mxs/Makefile index 6ce21a26412e..e41590ccb437 100644 --- a/arch/arm/mach-mxs/Makefile +++ b/arch/arm/mach-mxs/Makefile | |||
@@ -4,6 +4,7 @@ obj-y := devices.o icoll.o iomux.o system.o timer.o mm.o | |||
4 | obj-$(CONFIG_MXS_OCOTP) += ocotp.o | 4 | obj-$(CONFIG_MXS_OCOTP) += ocotp.o |
5 | obj-$(CONFIG_PM) += pm.o | 5 | obj-$(CONFIG_PM) += pm.o |
6 | 6 | ||
7 | obj-$(CONFIG_MACH_MXS_DT) += mach-mxs.o | ||
7 | obj-$(CONFIG_MACH_STMP378X_DEVB) += mach-stmp378x_devb.o | 8 | obj-$(CONFIG_MACH_STMP378X_DEVB) += mach-stmp378x_devb.o |
8 | obj-$(CONFIG_MACH_MX23EVK) += mach-mx23evk.o | 9 | obj-$(CONFIG_MACH_MX23EVK) += mach-mx23evk.o |
9 | obj-$(CONFIG_MACH_MX28EVK) += mach-mx28evk.o | 10 | obj-$(CONFIG_MACH_MX28EVK) += mach-mx28evk.o |
diff --git a/arch/arm/mach-mxs/devices/Kconfig b/arch/arm/mach-mxs/devices/Kconfig index b8913df4cfa2..19659de1c4e8 100644 --- a/arch/arm/mach-mxs/devices/Kconfig +++ b/arch/arm/mach-mxs/devices/Kconfig | |||
@@ -1,6 +1,5 @@ | |||
1 | config MXS_HAVE_AMBA_DUART | 1 | config MXS_HAVE_AMBA_DUART |
2 | bool | 2 | bool |
3 | select ARM_AMBA | ||
4 | 3 | ||
5 | config MXS_HAVE_PLATFORM_AUART | 4 | config MXS_HAVE_PLATFORM_AUART |
6 | bool | 5 | bool |
diff --git a/arch/arm/mach-mxs/devices/platform-dma.c b/arch/arm/mach-mxs/devices/platform-dma.c index 6a0202b1016c..46824501de00 100644 --- a/arch/arm/mach-mxs/devices/platform-dma.c +++ b/arch/arm/mach-mxs/devices/platform-dma.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <mach/mx28.h> | 14 | #include <mach/mx28.h> |
15 | #include <mach/devices-common.h> | 15 | #include <mach/devices-common.h> |
16 | 16 | ||
17 | static struct platform_device *__init mxs_add_dma(const char *devid, | 17 | struct platform_device *__init mxs_add_dma(const char *devid, |
18 | resource_size_t base) | 18 | resource_size_t base) |
19 | { | 19 | { |
20 | struct resource res[] = { | 20 | struct resource res[] = { |
@@ -29,22 +29,3 @@ static struct platform_device *__init mxs_add_dma(const char *devid, | |||
29 | res, ARRAY_SIZE(res), NULL, 0, | 29 | res, ARRAY_SIZE(res), NULL, 0, |
30 | DMA_BIT_MASK(32)); | 30 | DMA_BIT_MASK(32)); |
31 | } | 31 | } |
32 | |||
33 | static int __init mxs_add_mxs_dma(void) | ||
34 | { | ||
35 | char *apbh = "mxs-dma-apbh"; | ||
36 | char *apbx = "mxs-dma-apbx"; | ||
37 | |||
38 | if (cpu_is_mx23()) { | ||
39 | mxs_add_dma(apbh, MX23_APBH_DMA_BASE_ADDR); | ||
40 | mxs_add_dma(apbx, MX23_APBX_DMA_BASE_ADDR); | ||
41 | } | ||
42 | |||
43 | if (cpu_is_mx28()) { | ||
44 | mxs_add_dma(apbh, MX28_APBH_DMA_BASE_ADDR); | ||
45 | mxs_add_dma(apbx, MX28_APBX_DMA_BASE_ADDR); | ||
46 | } | ||
47 | |||
48 | return 0; | ||
49 | } | ||
50 | arch_initcall(mxs_add_mxs_dma); | ||
diff --git a/arch/arm/mach-mxs/devices/platform-gpio-mxs.c b/arch/arm/mach-mxs/devices/platform-gpio-mxs.c index ed0885e414e0..cd99f19ec637 100644 --- a/arch/arm/mach-mxs/devices/platform-gpio-mxs.c +++ b/arch/arm/mach-mxs/devices/platform-gpio-mxs.c | |||
@@ -14,7 +14,7 @@ | |||
14 | #include <mach/devices-common.h> | 14 | #include <mach/devices-common.h> |
15 | 15 | ||
16 | struct platform_device *__init mxs_add_gpio( | 16 | struct platform_device *__init mxs_add_gpio( |
17 | int id, resource_size_t iobase, int irq) | 17 | char *name, int id, resource_size_t iobase, int irq) |
18 | { | 18 | { |
19 | struct resource res[] = { | 19 | struct resource res[] = { |
20 | { | 20 | { |
@@ -29,25 +29,5 @@ struct platform_device *__init mxs_add_gpio( | |||
29 | }; | 29 | }; |
30 | 30 | ||
31 | return platform_device_register_resndata(&mxs_apbh_bus, | 31 | return platform_device_register_resndata(&mxs_apbh_bus, |
32 | "gpio-mxs", id, res, ARRAY_SIZE(res), NULL, 0); | 32 | name, id, res, ARRAY_SIZE(res), NULL, 0); |
33 | } | 33 | } |
34 | |||
35 | static int __init mxs_add_mxs_gpio(void) | ||
36 | { | ||
37 | if (cpu_is_mx23()) { | ||
38 | mxs_add_gpio(0, MX23_PINCTRL_BASE_ADDR, MX23_INT_GPIO0); | ||
39 | mxs_add_gpio(1, MX23_PINCTRL_BASE_ADDR, MX23_INT_GPIO1); | ||
40 | mxs_add_gpio(2, MX23_PINCTRL_BASE_ADDR, MX23_INT_GPIO2); | ||
41 | } | ||
42 | |||
43 | if (cpu_is_mx28()) { | ||
44 | mxs_add_gpio(0, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO0); | ||
45 | mxs_add_gpio(1, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO1); | ||
46 | mxs_add_gpio(2, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO2); | ||
47 | mxs_add_gpio(3, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO3); | ||
48 | mxs_add_gpio(4, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO4); | ||
49 | } | ||
50 | |||
51 | return 0; | ||
52 | } | ||
53 | postcore_initcall(mxs_add_mxs_gpio); | ||
diff --git a/arch/arm/mach-mxs/devices/platform-mxs-mmc.c b/arch/arm/mach-mxs/devices/platform-mxs-mmc.c index bef9d923f54e..b33c9d05c552 100644 --- a/arch/arm/mach-mxs/devices/platform-mxs-mmc.c +++ b/arch/arm/mach-mxs/devices/platform-mxs-mmc.c | |||
@@ -17,8 +17,9 @@ | |||
17 | #include <mach/mx28.h> | 17 | #include <mach/mx28.h> |
18 | #include <mach/devices-common.h> | 18 | #include <mach/devices-common.h> |
19 | 19 | ||
20 | #define mxs_mxs_mmc_data_entry_single(soc, _id, hwid) \ | 20 | #define mxs_mxs_mmc_data_entry_single(soc, _devid, _id, hwid) \ |
21 | { \ | 21 | { \ |
22 | .devid = _devid, \ | ||
22 | .id = _id, \ | 23 | .id = _id, \ |
23 | .iobase = soc ## _SSP ## hwid ## _BASE_ADDR, \ | 24 | .iobase = soc ## _SSP ## hwid ## _BASE_ADDR, \ |
24 | .dma = soc ## _DMA_SSP ## hwid, \ | 25 | .dma = soc ## _DMA_SSP ## hwid, \ |
@@ -26,23 +27,23 @@ | |||
26 | .irq_dma = soc ## _INT_SSP ## hwid ## _DMA, \ | 27 | .irq_dma = soc ## _INT_SSP ## hwid ## _DMA, \ |
27 | } | 28 | } |
28 | 29 | ||
29 | #define mxs_mxs_mmc_data_entry(soc, _id, hwid) \ | 30 | #define mxs_mxs_mmc_data_entry(soc, _devid, _id, hwid) \ |
30 | [_id] = mxs_mxs_mmc_data_entry_single(soc, _id, hwid) | 31 | [_id] = mxs_mxs_mmc_data_entry_single(soc, _devid, _id, hwid) |
31 | 32 | ||
32 | 33 | ||
33 | #ifdef CONFIG_SOC_IMX23 | 34 | #ifdef CONFIG_SOC_IMX23 |
34 | const struct mxs_mxs_mmc_data mx23_mxs_mmc_data[] __initconst = { | 35 | const struct mxs_mxs_mmc_data mx23_mxs_mmc_data[] __initconst = { |
35 | mxs_mxs_mmc_data_entry(MX23, 0, 1), | 36 | mxs_mxs_mmc_data_entry(MX23, "imx23-mmc", 0, 1), |
36 | mxs_mxs_mmc_data_entry(MX23, 1, 2), | 37 | mxs_mxs_mmc_data_entry(MX23, "imx23-mmc", 1, 2), |
37 | }; | 38 | }; |
38 | #endif | 39 | #endif |
39 | 40 | ||
40 | #ifdef CONFIG_SOC_IMX28 | 41 | #ifdef CONFIG_SOC_IMX28 |
41 | const struct mxs_mxs_mmc_data mx28_mxs_mmc_data[] __initconst = { | 42 | const struct mxs_mxs_mmc_data mx28_mxs_mmc_data[] __initconst = { |
42 | mxs_mxs_mmc_data_entry(MX28, 0, 0), | 43 | mxs_mxs_mmc_data_entry(MX28, "imx28-mmc", 0, 0), |
43 | mxs_mxs_mmc_data_entry(MX28, 1, 1), | 44 | mxs_mxs_mmc_data_entry(MX28, "imx28-mmc", 1, 1), |
44 | mxs_mxs_mmc_data_entry(MX28, 2, 2), | 45 | mxs_mxs_mmc_data_entry(MX28, "imx28-mmc", 2, 2), |
45 | mxs_mxs_mmc_data_entry(MX28, 3, 3), | 46 | mxs_mxs_mmc_data_entry(MX28, "imx28-mmc", 3, 3), |
46 | }; | 47 | }; |
47 | #endif | 48 | #endif |
48 | 49 | ||
@@ -70,6 +71,6 @@ struct platform_device *__init mxs_add_mxs_mmc( | |||
70 | }, | 71 | }, |
71 | }; | 72 | }; |
72 | 73 | ||
73 | return mxs_add_platform_device("mxs-mmc", data->id, | 74 | return mxs_add_platform_device(data->devid, data->id, |
74 | res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); | 75 | res, ARRAY_SIZE(res), pdata, sizeof(*pdata)); |
75 | } | 76 | } |
diff --git a/arch/arm/mach-mxs/include/mach/common.h b/arch/arm/mach-mxs/include/mach/common.h index 84af61cf6a62..de6c7ba42544 100644 --- a/arch/arm/mach-mxs/include/mach/common.h +++ b/arch/arm/mach-mxs/include/mach/common.h | |||
@@ -18,17 +18,20 @@ extern void mxs_restart(char, const char *); | |||
18 | extern int mxs_saif_clkmux_select(unsigned int clkmux); | 18 | extern int mxs_saif_clkmux_select(unsigned int clkmux); |
19 | 19 | ||
20 | extern void mx23_soc_init(void); | 20 | extern void mx23_soc_init(void); |
21 | extern int mx23_register_gpios(void); | ||
22 | extern int mx23_clocks_init(void); | 21 | extern int mx23_clocks_init(void); |
23 | extern void mx23_map_io(void); | 22 | extern void mx23_map_io(void); |
24 | extern void mx23_init_irq(void); | 23 | extern void mx23_init_irq(void); |
25 | 24 | ||
26 | extern void mx28_soc_init(void); | 25 | extern void mx28_soc_init(void); |
27 | extern int mx28_register_gpios(void); | ||
28 | extern int mx28_clocks_init(void); | 26 | extern int mx28_clocks_init(void); |
29 | extern void mx28_map_io(void); | 27 | extern void mx28_map_io(void); |
30 | extern void mx28_init_irq(void); | 28 | extern void mx28_init_irq(void); |
31 | 29 | ||
32 | extern void icoll_init_irq(void); | 30 | extern void icoll_init_irq(void); |
33 | 31 | ||
32 | extern struct platform_device *mxs_add_dma(const char *devid, | ||
33 | resource_size_t base); | ||
34 | extern struct platform_device *mxs_add_gpio(char *name, int id, | ||
35 | resource_size_t iobase, int irq); | ||
36 | |||
34 | #endif /* __MACH_MXS_COMMON_H__ */ | 37 | #endif /* __MACH_MXS_COMMON_H__ */ |
diff --git a/arch/arm/mach-mxs/include/mach/devices-common.h b/arch/arm/mach-mxs/include/mach/devices-common.h index 21e45a70d344..e8b1d958240b 100644 --- a/arch/arm/mach-mxs/include/mach/devices-common.h +++ b/arch/arm/mach-mxs/include/mach/devices-common.h | |||
@@ -82,8 +82,9 @@ struct platform_device * __init mxs_add_mxs_i2c( | |||
82 | const struct mxs_mxs_i2c_data *data); | 82 | const struct mxs_mxs_i2c_data *data); |
83 | 83 | ||
84 | /* mmc */ | 84 | /* mmc */ |
85 | #include <mach/mmc.h> | 85 | #include <linux/mmc/mxs-mmc.h> |
86 | struct mxs_mxs_mmc_data { | 86 | struct mxs_mxs_mmc_data { |
87 | const char *devid; | ||
87 | int id; | 88 | int id; |
88 | resource_size_t iobase; | 89 | resource_size_t iobase; |
89 | resource_size_t dma; | 90 | resource_size_t dma; |
diff --git a/arch/arm/mach-mxs/mach-mxs.c b/arch/arm/mach-mxs/mach-mxs.c new file mode 100644 index 000000000000..8cac94b33020 --- /dev/null +++ b/arch/arm/mach-mxs/mach-mxs.c | |||
@@ -0,0 +1,121 @@ | |||
1 | /* | ||
2 | * Copyright 2012 Freescale Semiconductor, Inc. | ||
3 | * Copyright 2012 Linaro Ltd. | ||
4 | * | ||
5 | * The code contained herein is licensed under the GNU General Public | ||
6 | * License. You may obtain a copy of the GNU General Public License | ||
7 | * Version 2 or later at the following locations: | ||
8 | * | ||
9 | * http://www.opensource.org/licenses/gpl-license.html | ||
10 | * http://www.gnu.org/copyleft/gpl.html | ||
11 | */ | ||
12 | |||
13 | #include <linux/clk.h> | ||
14 | #include <linux/clkdev.h> | ||
15 | #include <linux/err.h> | ||
16 | #include <linux/init.h> | ||
17 | #include <linux/init.h> | ||
18 | #include <linux/irqdomain.h> | ||
19 | #include <linux/of_irq.h> | ||
20 | #include <linux/of_platform.h> | ||
21 | #include <asm/mach/arch.h> | ||
22 | #include <asm/mach/time.h> | ||
23 | #include <mach/common.h> | ||
24 | |||
25 | static int __init mxs_icoll_add_irq_domain(struct device_node *np, | ||
26 | struct device_node *interrupt_parent) | ||
27 | { | ||
28 | irq_domain_add_legacy(np, 128, 0, 0, &irq_domain_simple_ops, NULL); | ||
29 | |||
30 | return 0; | ||
31 | } | ||
32 | |||
33 | static int __init mxs_gpio_add_irq_domain(struct device_node *np, | ||
34 | struct device_node *interrupt_parent) | ||
35 | { | ||
36 | static int gpio_irq_base = MXS_GPIO_IRQ_START; | ||
37 | |||
38 | irq_domain_add_legacy(np, 32, gpio_irq_base, 0, &irq_domain_simple_ops, NULL); | ||
39 | gpio_irq_base += 32; | ||
40 | |||
41 | return 0; | ||
42 | } | ||
43 | |||
44 | static const struct of_device_id mxs_irq_match[] __initconst = { | ||
45 | { .compatible = "fsl,mxs-icoll", .data = mxs_icoll_add_irq_domain, }, | ||
46 | { .compatible = "fsl,mxs-gpio", .data = mxs_gpio_add_irq_domain, }, | ||
47 | { /* sentinel */ } | ||
48 | }; | ||
49 | |||
50 | static void __init mxs_dt_init_irq(void) | ||
51 | { | ||
52 | icoll_init_irq(); | ||
53 | of_irq_init(mxs_irq_match); | ||
54 | } | ||
55 | |||
56 | static void __init imx23_timer_init(void) | ||
57 | { | ||
58 | mx23_clocks_init(); | ||
59 | } | ||
60 | |||
61 | static struct sys_timer imx23_timer = { | ||
62 | .init = imx23_timer_init, | ||
63 | }; | ||
64 | |||
65 | static void __init imx28_timer_init(void) | ||
66 | { | ||
67 | mx28_clocks_init(); | ||
68 | } | ||
69 | |||
70 | static struct sys_timer imx28_timer = { | ||
71 | .init = imx28_timer_init, | ||
72 | }; | ||
73 | |||
74 | static void __init imx28_evk_init(void) | ||
75 | { | ||
76 | struct clk *clk; | ||
77 | |||
78 | /* Enable fec phy clock */ | ||
79 | clk = clk_get_sys("enet_out", NULL); | ||
80 | if (!IS_ERR(clk)) | ||
81 | clk_prepare_enable(clk); | ||
82 | } | ||
83 | |||
84 | static void __init mxs_machine_init(void) | ||
85 | { | ||
86 | if (of_machine_is_compatible("fsl,imx28-evk")) | ||
87 | imx28_evk_init(); | ||
88 | |||
89 | of_platform_populate(NULL, of_default_bus_match_table, | ||
90 | NULL, NULL); | ||
91 | } | ||
92 | |||
93 | static const char *imx23_dt_compat[] __initdata = { | ||
94 | "fsl,imx23-evk", | ||
95 | "fsl,imx23", | ||
96 | NULL, | ||
97 | }; | ||
98 | |||
99 | static const char *imx28_dt_compat[] __initdata = { | ||
100 | "fsl,imx28-evk", | ||
101 | "fsl,imx28", | ||
102 | NULL, | ||
103 | }; | ||
104 | |||
105 | DT_MACHINE_START(IMX23, "Freescale i.MX23 (Device Tree)") | ||
106 | .map_io = mx23_map_io, | ||
107 | .init_irq = mxs_dt_init_irq, | ||
108 | .timer = &imx23_timer, | ||
109 | .init_machine = mxs_machine_init, | ||
110 | .dt_compat = imx23_dt_compat, | ||
111 | .restart = mxs_restart, | ||
112 | MACHINE_END | ||
113 | |||
114 | DT_MACHINE_START(IMX28, "Freescale i.MX28 (Device Tree)") | ||
115 | .map_io = mx28_map_io, | ||
116 | .init_irq = mxs_dt_init_irq, | ||
117 | .timer = &imx28_timer, | ||
118 | .init_machine = mxs_machine_init, | ||
119 | .dt_compat = imx28_dt_compat, | ||
120 | .restart = mxs_restart, | ||
121 | MACHINE_END | ||
diff --git a/arch/arm/mach-mxs/mm.c b/arch/arm/mach-mxs/mm.c index 67a384edcf5b..dccb67a9e7c4 100644 --- a/arch/arm/mach-mxs/mm.c +++ b/arch/arm/mach-mxs/mm.c | |||
@@ -66,9 +66,25 @@ void __init mx28_init_irq(void) | |||
66 | void __init mx23_soc_init(void) | 66 | void __init mx23_soc_init(void) |
67 | { | 67 | { |
68 | pinctrl_provide_dummies(); | 68 | pinctrl_provide_dummies(); |
69 | |||
70 | mxs_add_dma("imx23-dma-apbh", MX23_APBH_DMA_BASE_ADDR); | ||
71 | mxs_add_dma("imx23-dma-apbx", MX23_APBX_DMA_BASE_ADDR); | ||
72 | |||
73 | mxs_add_gpio("imx23-gpio", 0, MX23_PINCTRL_BASE_ADDR, MX23_INT_GPIO0); | ||
74 | mxs_add_gpio("imx23-gpio", 1, MX23_PINCTRL_BASE_ADDR, MX23_INT_GPIO1); | ||
75 | mxs_add_gpio("imx23-gpio", 2, MX23_PINCTRL_BASE_ADDR, MX23_INT_GPIO2); | ||
69 | } | 76 | } |
70 | 77 | ||
71 | void __init mx28_soc_init(void) | 78 | void __init mx28_soc_init(void) |
72 | { | 79 | { |
73 | pinctrl_provide_dummies(); | 80 | pinctrl_provide_dummies(); |
81 | |||
82 | mxs_add_dma("imx28-dma-apbh", MX23_APBH_DMA_BASE_ADDR); | ||
83 | mxs_add_dma("imx28-dma-apbx", MX23_APBX_DMA_BASE_ADDR); | ||
84 | |||
85 | mxs_add_gpio("imx28-gpio", 0, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO0); | ||
86 | mxs_add_gpio("imx28-gpio", 1, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO1); | ||
87 | mxs_add_gpio("imx28-gpio", 2, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO2); | ||
88 | mxs_add_gpio("imx28-gpio", 3, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO3); | ||
89 | mxs_add_gpio("imx28-gpio", 4, MX28_PINCTRL_BASE_ADDR, MX28_INT_GPIO4); | ||
74 | } | 90 | } |
diff --git a/arch/arm/plat-mxc/include/mach/debug-macro.S b/arch/arm/plat-mxc/include/mach/debug-macro.S index 8ddda365f1a0..761e45f9456f 100644 --- a/arch/arm/plat-mxc/include/mach/debug-macro.S +++ b/arch/arm/plat-mxc/include/mach/debug-macro.S | |||
@@ -24,6 +24,8 @@ | |||
24 | #define UART_PADDR MX51_UART1_BASE_ADDR | 24 | #define UART_PADDR MX51_UART1_BASE_ADDR |
25 | #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART) | 25 | #elif defined (CONFIG_DEBUG_IMX50_IMX53_UART) |
26 | #define UART_PADDR MX53_UART1_BASE_ADDR | 26 | #define UART_PADDR MX53_UART1_BASE_ADDR |
27 | #elif defined (CONFIG_DEBUG_IMX6Q_UART2) | ||
28 | #define UART_PADDR MX6Q_UART2_BASE_ADDR | ||
27 | #elif defined (CONFIG_DEBUG_IMX6Q_UART4) | 29 | #elif defined (CONFIG_DEBUG_IMX6Q_UART4) |
28 | #define UART_PADDR MX6Q_UART4_BASE_ADDR | 30 | #define UART_PADDR MX6Q_UART4_BASE_ADDR |
29 | #endif | 31 | #endif |
diff --git a/arch/arm/plat-mxc/include/mach/mx6q.h b/arch/arm/plat-mxc/include/mach/mx6q.h index 254a561a2799..f7e7dbac8f4b 100644 --- a/arch/arm/plat-mxc/include/mach/mx6q.h +++ b/arch/arm/plat-mxc/include/mach/mx6q.h | |||
@@ -27,6 +27,8 @@ | |||
27 | #define MX6Q_CCM_SIZE 0x4000 | 27 | #define MX6Q_CCM_SIZE 0x4000 |
28 | #define MX6Q_ANATOP_BASE_ADDR 0x020c8000 | 28 | #define MX6Q_ANATOP_BASE_ADDR 0x020c8000 |
29 | #define MX6Q_ANATOP_SIZE 0x1000 | 29 | #define MX6Q_ANATOP_SIZE 0x1000 |
30 | #define MX6Q_UART2_BASE_ADDR 0x021e8000 | ||
31 | #define MX6Q_UART2_SIZE 0x4000 | ||
30 | #define MX6Q_UART4_BASE_ADDR 0x021f0000 | 32 | #define MX6Q_UART4_BASE_ADDR 0x021f0000 |
31 | #define MX6Q_UART4_SIZE 0x4000 | 33 | #define MX6Q_UART4_SIZE 0x4000 |
32 | 34 | ||
diff --git a/drivers/clk/mxs/clk-imx23.c b/drivers/clk/mxs/clk-imx23.c index dcae11285716..f7be225f544c 100644 --- a/drivers/clk/mxs/clk-imx23.c +++ b/drivers/clk/mxs/clk-imx23.c | |||
@@ -81,19 +81,20 @@ static struct clk_lookup uart_lookups[] __initdata = { | |||
81 | }; | 81 | }; |
82 | 82 | ||
83 | static struct clk_lookup hbus_lookups[] __initdata = { | 83 | static struct clk_lookup hbus_lookups[] __initdata = { |
84 | { .dev_id = "mxs-dma-apbh", }, | 84 | { .dev_id = "imx23-dma-apbh", }, |
85 | { .dev_id = "80004000.dma-apbh", }, | 85 | { .dev_id = "80004000.dma-apbh", }, |
86 | }; | 86 | }; |
87 | 87 | ||
88 | static struct clk_lookup xbus_lookups[] __initdata = { | 88 | static struct clk_lookup xbus_lookups[] __initdata = { |
89 | { .dev_id = "duart", .con_id = "apb_pclk"}, | 89 | { .dev_id = "duart", .con_id = "apb_pclk"}, |
90 | { .dev_id = "mxs-dma-apbx", }, | 90 | { .dev_id = "80070000.serial", .con_id = "apb_pclk"}, |
91 | { .dev_id = "imx23-dma-apbx", }, | ||
91 | { .dev_id = "80024000.dma-apbx", }, | 92 | { .dev_id = "80024000.dma-apbx", }, |
92 | }; | 93 | }; |
93 | 94 | ||
94 | static struct clk_lookup ssp_lookups[] __initdata = { | 95 | static struct clk_lookup ssp_lookups[] __initdata = { |
95 | { .dev_id = "mxs-mmc.0", }, | 96 | { .dev_id = "imx23-mmc.0", }, |
96 | { .dev_id = "mxs-mmc.1", }, | 97 | { .dev_id = "imx23-mmc.1", }, |
97 | { .dev_id = "80010000.ssp", }, | 98 | { .dev_id = "80010000.ssp", }, |
98 | { .dev_id = "80034000.ssp", }, | 99 | { .dev_id = "80034000.ssp", }, |
99 | }; | 100 | }; |
diff --git a/drivers/clk/mxs/clk-imx28.c b/drivers/clk/mxs/clk-imx28.c index b2a3257d4f66..2826a2606a29 100644 --- a/drivers/clk/mxs/clk-imx28.c +++ b/drivers/clk/mxs/clk-imx28.c | |||
@@ -136,33 +136,34 @@ static struct clk_lookup uart_lookups[] __initdata = { | |||
136 | }; | 136 | }; |
137 | 137 | ||
138 | static struct clk_lookup hbus_lookups[] __initdata = { | 138 | static struct clk_lookup hbus_lookups[] __initdata = { |
139 | { .dev_id = "mxs-dma-apbh", }, | 139 | { .dev_id = "imx28-dma-apbh", }, |
140 | { .dev_id = "80004000.dma-apbh", }, | 140 | { .dev_id = "80004000.dma-apbh", }, |
141 | }; | 141 | }; |
142 | 142 | ||
143 | static struct clk_lookup xbus_lookups[] __initdata = { | 143 | static struct clk_lookup xbus_lookups[] __initdata = { |
144 | { .dev_id = "duart", .con_id = "apb_pclk"}, | 144 | { .dev_id = "duart", .con_id = "apb_pclk"}, |
145 | { .dev_id = "mxs-dma-apbx", }, | 145 | { .dev_id = "80074000.serial", .con_id = "apb_pclk"}, |
146 | { .dev_id = "imx28-dma-apbx", }, | ||
146 | { .dev_id = "80024000.dma-apbx", }, | 147 | { .dev_id = "80024000.dma-apbx", }, |
147 | }; | 148 | }; |
148 | 149 | ||
149 | static struct clk_lookup ssp0_lookups[] __initdata = { | 150 | static struct clk_lookup ssp0_lookups[] __initdata = { |
150 | { .dev_id = "mxs-mmc.0", }, | 151 | { .dev_id = "imx28-mmc.0", }, |
151 | { .dev_id = "80010000.ssp", }, | 152 | { .dev_id = "80010000.ssp", }, |
152 | }; | 153 | }; |
153 | 154 | ||
154 | static struct clk_lookup ssp1_lookups[] __initdata = { | 155 | static struct clk_lookup ssp1_lookups[] __initdata = { |
155 | { .dev_id = "mxs-mmc.1", }, | 156 | { .dev_id = "imx28-mmc.1", }, |
156 | { .dev_id = "80012000.ssp", }, | 157 | { .dev_id = "80012000.ssp", }, |
157 | }; | 158 | }; |
158 | 159 | ||
159 | static struct clk_lookup ssp2_lookups[] __initdata = { | 160 | static struct clk_lookup ssp2_lookups[] __initdata = { |
160 | { .dev_id = "mxs-mmc.2", }, | 161 | { .dev_id = "imx28-mmc.2", }, |
161 | { .dev_id = "80014000.ssp", }, | 162 | { .dev_id = "80014000.ssp", }, |
162 | }; | 163 | }; |
163 | 164 | ||
164 | static struct clk_lookup ssp3_lookups[] __initdata = { | 165 | static struct clk_lookup ssp3_lookups[] __initdata = { |
165 | { .dev_id = "mxs-mmc.3", }, | 166 | { .dev_id = "imx28-mmc.3", }, |
166 | { .dev_id = "80016000.ssp", }, | 167 | { .dev_id = "80016000.ssp", }, |
167 | }; | 168 | }; |
168 | 169 | ||
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig index ef378b5b17e4..aadeb5be9dba 100644 --- a/drivers/dma/Kconfig +++ b/drivers/dma/Kconfig | |||
@@ -238,6 +238,7 @@ config IMX_DMA | |||
238 | config MXS_DMA | 238 | config MXS_DMA |
239 | bool "MXS DMA support" | 239 | bool "MXS DMA support" |
240 | depends on SOC_IMX23 || SOC_IMX28 | 240 | depends on SOC_IMX23 || SOC_IMX28 |
241 | select STMP_DEVICE | ||
241 | select DMA_ENGINE | 242 | select DMA_ENGINE |
242 | help | 243 | help |
243 | Support the MXS DMA engine. This engine including APBH-DMA | 244 | Support the MXS DMA engine. This engine including APBH-DMA |
diff --git a/drivers/dma/mxs-dma.c b/drivers/dma/mxs-dma.c index 3db3a48d3f01..c96ab15319f2 100644 --- a/drivers/dma/mxs-dma.c +++ b/drivers/dma/mxs-dma.c | |||
@@ -22,11 +22,14 @@ | |||
22 | #include <linux/platform_device.h> | 22 | #include <linux/platform_device.h> |
23 | #include <linux/dmaengine.h> | 23 | #include <linux/dmaengine.h> |
24 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
25 | #include <linux/module.h> | ||
25 | #include <linux/fsl/mxs-dma.h> | 26 | #include <linux/fsl/mxs-dma.h> |
27 | #include <linux/stmp_device.h> | ||
28 | #include <linux/of.h> | ||
29 | #include <linux/of_device.h> | ||
26 | 30 | ||
27 | #include <asm/irq.h> | 31 | #include <asm/irq.h> |
28 | #include <mach/mxs.h> | 32 | #include <mach/mxs.h> |
29 | #include <mach/common.h> | ||
30 | 33 | ||
31 | #include "dmaengine.h" | 34 | #include "dmaengine.h" |
32 | 35 | ||
@@ -36,12 +39,8 @@ | |||
36 | * dma can program the controller registers of peripheral devices. | 39 | * dma can program the controller registers of peripheral devices. |
37 | */ | 40 | */ |
38 | 41 | ||
39 | #define MXS_DMA_APBH 0 | 42 | #define dma_is_apbh(mxs_dma) ((mxs_dma)->type == MXS_DMA_APBH) |
40 | #define MXS_DMA_APBX 1 | 43 | #define apbh_is_old(mxs_dma) ((mxs_dma)->dev_id == IMX23_DMA) |
41 | #define dma_is_apbh() (mxs_dma->dev_id == MXS_DMA_APBH) | ||
42 | |||
43 | #define APBH_VERSION_LATEST 3 | ||
44 | #define apbh_is_old() (mxs_dma->version < APBH_VERSION_LATEST) | ||
45 | 44 | ||
46 | #define HW_APBHX_CTRL0 0x000 | 45 | #define HW_APBHX_CTRL0 0x000 |
47 | #define BM_APBH_CTRL0_APB_BURST8_EN (1 << 29) | 46 | #define BM_APBH_CTRL0_APB_BURST8_EN (1 << 29) |
@@ -51,13 +50,14 @@ | |||
51 | #define HW_APBHX_CTRL2 0x020 | 50 | #define HW_APBHX_CTRL2 0x020 |
52 | #define HW_APBHX_CHANNEL_CTRL 0x030 | 51 | #define HW_APBHX_CHANNEL_CTRL 0x030 |
53 | #define BP_APBHX_CHANNEL_CTRL_RESET_CHANNEL 16 | 52 | #define BP_APBHX_CHANNEL_CTRL_RESET_CHANNEL 16 |
54 | #define HW_APBH_VERSION (cpu_is_mx23() ? 0x3f0 : 0x800) | 53 | /* |
55 | #define HW_APBX_VERSION 0x800 | 54 | * The offset of NXTCMDAR register is different per both dma type and version, |
56 | #define BP_APBHX_VERSION_MAJOR 24 | 55 | * while stride for each channel is all the same 0x70. |
57 | #define HW_APBHX_CHn_NXTCMDAR(n) \ | 56 | */ |
58 | (((dma_is_apbh() && apbh_is_old()) ? 0x050 : 0x110) + (n) * 0x70) | 57 | #define HW_APBHX_CHn_NXTCMDAR(d, n) \ |
59 | #define HW_APBHX_CHn_SEMA(n) \ | 58 | (((dma_is_apbh(d) && apbh_is_old(d)) ? 0x050 : 0x110) + (n) * 0x70) |
60 | (((dma_is_apbh() && apbh_is_old()) ? 0x080 : 0x140) + (n) * 0x70) | 59 | #define HW_APBHX_CHn_SEMA(d, n) \ |
60 | (((dma_is_apbh(d) && apbh_is_old(d)) ? 0x080 : 0x140) + (n) * 0x70) | ||
61 | 61 | ||
62 | /* | 62 | /* |
63 | * ccw bits definitions | 63 | * ccw bits definitions |
@@ -121,9 +121,19 @@ struct mxs_dma_chan { | |||
121 | #define MXS_DMA_CHANNELS 16 | 121 | #define MXS_DMA_CHANNELS 16 |
122 | #define MXS_DMA_CHANNELS_MASK 0xffff | 122 | #define MXS_DMA_CHANNELS_MASK 0xffff |
123 | 123 | ||
124 | enum mxs_dma_devtype { | ||
125 | MXS_DMA_APBH, | ||
126 | MXS_DMA_APBX, | ||
127 | }; | ||
128 | |||
129 | enum mxs_dma_id { | ||
130 | IMX23_DMA, | ||
131 | IMX28_DMA, | ||
132 | }; | ||
133 | |||
124 | struct mxs_dma_engine { | 134 | struct mxs_dma_engine { |
125 | int dev_id; | 135 | enum mxs_dma_id dev_id; |
126 | unsigned int version; | 136 | enum mxs_dma_devtype type; |
127 | void __iomem *base; | 137 | void __iomem *base; |
128 | struct clk *clk; | 138 | struct clk *clk; |
129 | struct dma_device dma_device; | 139 | struct dma_device dma_device; |
@@ -131,17 +141,86 @@ struct mxs_dma_engine { | |||
131 | struct mxs_dma_chan mxs_chans[MXS_DMA_CHANNELS]; | 141 | struct mxs_dma_chan mxs_chans[MXS_DMA_CHANNELS]; |
132 | }; | 142 | }; |
133 | 143 | ||
144 | struct mxs_dma_type { | ||
145 | enum mxs_dma_id id; | ||
146 | enum mxs_dma_devtype type; | ||
147 | }; | ||
148 | |||
149 | static struct mxs_dma_type mxs_dma_types[] = { | ||
150 | { | ||
151 | .id = IMX23_DMA, | ||
152 | .type = MXS_DMA_APBH, | ||
153 | }, { | ||
154 | .id = IMX23_DMA, | ||
155 | .type = MXS_DMA_APBX, | ||
156 | }, { | ||
157 | .id = IMX28_DMA, | ||
158 | .type = MXS_DMA_APBH, | ||
159 | }, { | ||
160 | .id = IMX28_DMA, | ||
161 | .type = MXS_DMA_APBX, | ||
162 | } | ||
163 | }; | ||
164 | |||
165 | static struct platform_device_id mxs_dma_ids[] = { | ||
166 | { | ||
167 | .name = "imx23-dma-apbh", | ||
168 | .driver_data = (kernel_ulong_t) &mxs_dma_types[0], | ||
169 | }, { | ||
170 | .name = "imx23-dma-apbx", | ||
171 | .driver_data = (kernel_ulong_t) &mxs_dma_types[1], | ||
172 | }, { | ||
173 | .name = "imx28-dma-apbh", | ||
174 | .driver_data = (kernel_ulong_t) &mxs_dma_types[2], | ||
175 | }, { | ||
176 | .name = "imx28-dma-apbx", | ||
177 | .driver_data = (kernel_ulong_t) &mxs_dma_types[3], | ||
178 | }, { | ||
179 | /* end of list */ | ||
180 | } | ||
181 | }; | ||
182 | |||
183 | static const struct of_device_id mxs_dma_dt_ids[] = { | ||
184 | { .compatible = "fsl,imx23-dma-apbh", .data = &mxs_dma_ids[0], }, | ||
185 | { .compatible = "fsl,imx23-dma-apbx", .data = &mxs_dma_ids[1], }, | ||
186 | { .compatible = "fsl,imx28-dma-apbh", .data = &mxs_dma_ids[2], }, | ||
187 | { .compatible = "fsl,imx28-dma-apbx", .data = &mxs_dma_ids[3], }, | ||
188 | { /* sentinel */ } | ||
189 | }; | ||
190 | MODULE_DEVICE_TABLE(of, mxs_dma_dt_ids); | ||
191 | |||
192 | static struct mxs_dma_chan *to_mxs_dma_chan(struct dma_chan *chan) | ||
193 | { | ||
194 | return container_of(chan, struct mxs_dma_chan, chan); | ||
195 | } | ||
196 | |||
197 | int mxs_dma_is_apbh(struct dma_chan *chan) | ||
198 | { | ||
199 | struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); | ||
200 | struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; | ||
201 | |||
202 | return dma_is_apbh(mxs_dma); | ||
203 | } | ||
204 | |||
205 | int mxs_dma_is_apbx(struct dma_chan *chan) | ||
206 | { | ||
207 | struct mxs_dma_chan *mxs_chan = to_mxs_dma_chan(chan); | ||
208 | struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; | ||
209 | |||
210 | return !dma_is_apbh(mxs_dma); | ||
211 | } | ||
212 | |||
134 | static void mxs_dma_reset_chan(struct mxs_dma_chan *mxs_chan) | 213 | static void mxs_dma_reset_chan(struct mxs_dma_chan *mxs_chan) |
135 | { | 214 | { |
136 | struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; | 215 | struct mxs_dma_engine *mxs_dma = mxs_chan->mxs_dma; |
137 | int chan_id = mxs_chan->chan.chan_id; | 216 | int chan_id = mxs_chan->chan.chan_id; |
138 | 217 | ||
139 | if (dma_is_apbh() && apbh_is_old()) | 218 | if (dma_is_apbh(mxs_dma) && apbh_is_old(mxs_dma)) |
140 | writel(1 << (chan_id + BP_APBH_CTRL0_RESET_CHANNEL), | 219 | writel(1 << (chan_id + BP_APBH_CTRL0_RESET_CHANNEL), |
141 | mxs_dma->base + HW_APBHX_CTRL0 + MXS_SET_ADDR); | 220 | mxs_dma->base + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); |
142 | else | 221 | else |
143 | writel(1 << (chan_id + BP_APBHX_CHANNEL_CTRL_RESET_CHANNEL), | 222 | writel(1 << (chan_id + BP_APBHX_CHANNEL_CTRL_RESET_CHANNEL), |
144 | mxs_dma->base + HW_APBHX_CHANNEL_CTRL + MXS_SET_ADDR); | 223 | mxs_dma->base + HW_APBHX_CHANNEL_CTRL + STMP_OFFSET_REG_SET); |
145 | } | 224 | } |
146 | 225 | ||
147 | static void mxs_dma_enable_chan(struct mxs_dma_chan *mxs_chan) | 226 | static void mxs_dma_enable_chan(struct mxs_dma_chan *mxs_chan) |
@@ -151,10 +230,10 @@ static void mxs_dma_enable_chan(struct mxs_dma_chan *mxs_chan) | |||
151 | 230 | ||
152 | /* set cmd_addr up */ | 231 | /* set cmd_addr up */ |
153 | writel(mxs_chan->ccw_phys, | 232 | writel(mxs_chan->ccw_phys, |
154 | mxs_dma->base + HW_APBHX_CHn_NXTCMDAR(chan_id)); | 233 | mxs_dma->base + HW_APBHX_CHn_NXTCMDAR(mxs_dma, chan_id)); |
155 | 234 | ||
156 | /* write 1 to SEMA to kick off the channel */ | 235 | /* write 1 to SEMA to kick off the channel */ |
157 | writel(1, mxs_dma->base + HW_APBHX_CHn_SEMA(chan_id)); | 236 | writel(1, mxs_dma->base + HW_APBHX_CHn_SEMA(mxs_dma, chan_id)); |
158 | } | 237 | } |
159 | 238 | ||
160 | static void mxs_dma_disable_chan(struct mxs_dma_chan *mxs_chan) | 239 | static void mxs_dma_disable_chan(struct mxs_dma_chan *mxs_chan) |
@@ -168,12 +247,12 @@ static void mxs_dma_pause_chan(struct mxs_dma_chan *mxs_chan) | |||
168 | int chan_id = mxs_chan->chan.chan_id; | 247 | int chan_id = mxs_chan->chan.chan_id; |
169 | 248 | ||
170 | /* freeze the channel */ | 249 | /* freeze the channel */ |
171 | if (dma_is_apbh() && apbh_is_old()) | 250 | if (dma_is_apbh(mxs_dma) && apbh_is_old(mxs_dma)) |
172 | writel(1 << chan_id, | 251 | writel(1 << chan_id, |
173 | mxs_dma->base + HW_APBHX_CTRL0 + MXS_SET_ADDR); | 252 | mxs_dma->base + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); |
174 | else | 253 | else |
175 | writel(1 << chan_id, | 254 | writel(1 << chan_id, |
176 | mxs_dma->base + HW_APBHX_CHANNEL_CTRL + MXS_SET_ADDR); | 255 | mxs_dma->base + HW_APBHX_CHANNEL_CTRL + STMP_OFFSET_REG_SET); |
177 | 256 | ||
178 | mxs_chan->status = DMA_PAUSED; | 257 | mxs_chan->status = DMA_PAUSED; |
179 | } | 258 | } |
@@ -184,21 +263,16 @@ static void mxs_dma_resume_chan(struct mxs_dma_chan *mxs_chan) | |||
184 | int chan_id = mxs_chan->chan.chan_id; | 263 | int chan_id = mxs_chan->chan.chan_id; |
185 | 264 | ||
186 | /* unfreeze the channel */ | 265 | /* unfreeze the channel */ |
187 | if (dma_is_apbh() && apbh_is_old()) | 266 | if (dma_is_apbh(mxs_dma) && apbh_is_old(mxs_dma)) |
188 | writel(1 << chan_id, | 267 | writel(1 << chan_id, |
189 | mxs_dma->base + HW_APBHX_CTRL0 + MXS_CLR_ADDR); | 268 | mxs_dma->base + HW_APBHX_CTRL0 + STMP_OFFSET_REG_CLR); |
190 | else | 269 | else |
191 | writel(1 << chan_id, | 270 | writel(1 << chan_id, |
192 | mxs_dma->base + HW_APBHX_CHANNEL_CTRL + MXS_CLR_ADDR); | 271 | mxs_dma->base + HW_APBHX_CHANNEL_CTRL + STMP_OFFSET_REG_CLR); |
193 | 272 | ||
194 | mxs_chan->status = DMA_IN_PROGRESS; | 273 | mxs_chan->status = DMA_IN_PROGRESS; |
195 | } | 274 | } |
196 | 275 | ||
197 | static struct mxs_dma_chan *to_mxs_dma_chan(struct dma_chan *chan) | ||
198 | { | ||
199 | return container_of(chan, struct mxs_dma_chan, chan); | ||
200 | } | ||
201 | |||
202 | static dma_cookie_t mxs_dma_tx_submit(struct dma_async_tx_descriptor *tx) | 276 | static dma_cookie_t mxs_dma_tx_submit(struct dma_async_tx_descriptor *tx) |
203 | { | 277 | { |
204 | return dma_cookie_assign(tx); | 278 | return dma_cookie_assign(tx); |
@@ -220,11 +294,11 @@ static irqreturn_t mxs_dma_int_handler(int irq, void *dev_id) | |||
220 | /* completion status */ | 294 | /* completion status */ |
221 | stat1 = readl(mxs_dma->base + HW_APBHX_CTRL1); | 295 | stat1 = readl(mxs_dma->base + HW_APBHX_CTRL1); |
222 | stat1 &= MXS_DMA_CHANNELS_MASK; | 296 | stat1 &= MXS_DMA_CHANNELS_MASK; |
223 | writel(stat1, mxs_dma->base + HW_APBHX_CTRL1 + MXS_CLR_ADDR); | 297 | writel(stat1, mxs_dma->base + HW_APBHX_CTRL1 + STMP_OFFSET_REG_CLR); |
224 | 298 | ||
225 | /* error status */ | 299 | /* error status */ |
226 | stat2 = readl(mxs_dma->base + HW_APBHX_CTRL2); | 300 | stat2 = readl(mxs_dma->base + HW_APBHX_CTRL2); |
227 | writel(stat2, mxs_dma->base + HW_APBHX_CTRL2 + MXS_CLR_ADDR); | 301 | writel(stat2, mxs_dma->base + HW_APBHX_CTRL2 + STMP_OFFSET_REG_CLR); |
228 | 302 | ||
229 | /* | 303 | /* |
230 | * When both completion and error of termination bits set at the | 304 | * When both completion and error of termination bits set at the |
@@ -567,27 +641,21 @@ static int __init mxs_dma_init(struct mxs_dma_engine *mxs_dma) | |||
567 | if (ret) | 641 | if (ret) |
568 | return ret; | 642 | return ret; |
569 | 643 | ||
570 | ret = mxs_reset_block(mxs_dma->base); | 644 | ret = stmp_reset_block(mxs_dma->base); |
571 | if (ret) | 645 | if (ret) |
572 | goto err_out; | 646 | goto err_out; |
573 | 647 | ||
574 | /* only major version matters */ | ||
575 | mxs_dma->version = readl(mxs_dma->base + | ||
576 | ((mxs_dma->dev_id == MXS_DMA_APBX) ? | ||
577 | HW_APBX_VERSION : HW_APBH_VERSION)) >> | ||
578 | BP_APBHX_VERSION_MAJOR; | ||
579 | |||
580 | /* enable apbh burst */ | 648 | /* enable apbh burst */ |
581 | if (dma_is_apbh()) { | 649 | if (dma_is_apbh(mxs_dma)) { |
582 | writel(BM_APBH_CTRL0_APB_BURST_EN, | 650 | writel(BM_APBH_CTRL0_APB_BURST_EN, |
583 | mxs_dma->base + HW_APBHX_CTRL0 + MXS_SET_ADDR); | 651 | mxs_dma->base + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); |
584 | writel(BM_APBH_CTRL0_APB_BURST8_EN, | 652 | writel(BM_APBH_CTRL0_APB_BURST8_EN, |
585 | mxs_dma->base + HW_APBHX_CTRL0 + MXS_SET_ADDR); | 653 | mxs_dma->base + HW_APBHX_CTRL0 + STMP_OFFSET_REG_SET); |
586 | } | 654 | } |
587 | 655 | ||
588 | /* enable irq for all the channels */ | 656 | /* enable irq for all the channels */ |
589 | writel(MXS_DMA_CHANNELS_MASK << MXS_DMA_CHANNELS, | 657 | writel(MXS_DMA_CHANNELS_MASK << MXS_DMA_CHANNELS, |
590 | mxs_dma->base + HW_APBHX_CTRL1 + MXS_SET_ADDR); | 658 | mxs_dma->base + HW_APBHX_CTRL1 + STMP_OFFSET_REG_SET); |
591 | 659 | ||
592 | err_out: | 660 | err_out: |
593 | clk_disable_unprepare(mxs_dma->clk); | 661 | clk_disable_unprepare(mxs_dma->clk); |
@@ -596,8 +664,9 @@ err_out: | |||
596 | 664 | ||
597 | static int __init mxs_dma_probe(struct platform_device *pdev) | 665 | static int __init mxs_dma_probe(struct platform_device *pdev) |
598 | { | 666 | { |
599 | const struct platform_device_id *id_entry = | 667 | const struct platform_device_id *id_entry; |
600 | platform_get_device_id(pdev); | 668 | const struct of_device_id *of_id; |
669 | const struct mxs_dma_type *dma_type; | ||
601 | struct mxs_dma_engine *mxs_dma; | 670 | struct mxs_dma_engine *mxs_dma; |
602 | struct resource *iores; | 671 | struct resource *iores; |
603 | int ret, i; | 672 | int ret, i; |
@@ -606,7 +675,15 @@ static int __init mxs_dma_probe(struct platform_device *pdev) | |||
606 | if (!mxs_dma) | 675 | if (!mxs_dma) |
607 | return -ENOMEM; | 676 | return -ENOMEM; |
608 | 677 | ||
609 | mxs_dma->dev_id = id_entry->driver_data; | 678 | of_id = of_match_device(mxs_dma_dt_ids, &pdev->dev); |
679 | if (of_id) | ||
680 | id_entry = of_id->data; | ||
681 | else | ||
682 | id_entry = platform_get_device_id(pdev); | ||
683 | |||
684 | dma_type = (struct mxs_dma_type *)id_entry->driver_data; | ||
685 | mxs_dma->type = dma_type->type; | ||
686 | mxs_dma->dev_id = dma_type->id; | ||
610 | 687 | ||
611 | iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 688 | iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
612 | 689 | ||
@@ -689,23 +766,12 @@ err_request_region: | |||
689 | return ret; | 766 | return ret; |
690 | } | 767 | } |
691 | 768 | ||
692 | static struct platform_device_id mxs_dma_type[] = { | ||
693 | { | ||
694 | .name = "mxs-dma-apbh", | ||
695 | .driver_data = MXS_DMA_APBH, | ||
696 | }, { | ||
697 | .name = "mxs-dma-apbx", | ||
698 | .driver_data = MXS_DMA_APBX, | ||
699 | }, { | ||
700 | /* end of list */ | ||
701 | } | ||
702 | }; | ||
703 | |||
704 | static struct platform_driver mxs_dma_driver = { | 769 | static struct platform_driver mxs_dma_driver = { |
705 | .driver = { | 770 | .driver = { |
706 | .name = "mxs-dma", | 771 | .name = "mxs-dma", |
772 | .of_match_table = mxs_dma_dt_ids, | ||
707 | }, | 773 | }, |
708 | .id_table = mxs_dma_type, | 774 | .id_table = mxs_dma_ids, |
709 | }; | 775 | }; |
710 | 776 | ||
711 | static int __init mxs_dma_module_init(void) | 777 | static int __init mxs_dma_module_init(void) |
diff --git a/drivers/gpio/gpio-mxs.c b/drivers/gpio/gpio-mxs.c index b4136501abd8..39e495669961 100644 --- a/drivers/gpio/gpio-mxs.c +++ b/drivers/gpio/gpio-mxs.c | |||
@@ -25,23 +25,25 @@ | |||
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/irq.h> | 26 | #include <linux/irq.h> |
27 | #include <linux/gpio.h> | 27 | #include <linux/gpio.h> |
28 | #include <linux/of.h> | ||
29 | #include <linux/of_address.h> | ||
30 | #include <linux/of_device.h> | ||
28 | #include <linux/platform_device.h> | 31 | #include <linux/platform_device.h> |
29 | #include <linux/slab.h> | 32 | #include <linux/slab.h> |
30 | #include <linux/basic_mmio_gpio.h> | 33 | #include <linux/basic_mmio_gpio.h> |
31 | #include <linux/module.h> | 34 | #include <linux/module.h> |
32 | #include <mach/mxs.h> | ||
33 | 35 | ||
34 | #define MXS_SET 0x4 | 36 | #define MXS_SET 0x4 |
35 | #define MXS_CLR 0x8 | 37 | #define MXS_CLR 0x8 |
36 | 38 | ||
37 | #define PINCTRL_DOUT(n) ((cpu_is_mx23() ? 0x0500 : 0x0700) + (n) * 0x10) | 39 | #define PINCTRL_DOUT(p) ((is_imx23_gpio(p) ? 0x0500 : 0x0700) + (p->id) * 0x10) |
38 | #define PINCTRL_DIN(n) ((cpu_is_mx23() ? 0x0600 : 0x0900) + (n) * 0x10) | 40 | #define PINCTRL_DIN(p) ((is_imx23_gpio(p) ? 0x0600 : 0x0900) + (p->id) * 0x10) |
39 | #define PINCTRL_DOE(n) ((cpu_is_mx23() ? 0x0700 : 0x0b00) + (n) * 0x10) | 41 | #define PINCTRL_DOE(p) ((is_imx23_gpio(p) ? 0x0700 : 0x0b00) + (p->id) * 0x10) |
40 | #define PINCTRL_PIN2IRQ(n) ((cpu_is_mx23() ? 0x0800 : 0x1000) + (n) * 0x10) | 42 | #define PINCTRL_PIN2IRQ(p) ((is_imx23_gpio(p) ? 0x0800 : 0x1000) + (p->id) * 0x10) |
41 | #define PINCTRL_IRQEN(n) ((cpu_is_mx23() ? 0x0900 : 0x1100) + (n) * 0x10) | 43 | #define PINCTRL_IRQEN(p) ((is_imx23_gpio(p) ? 0x0900 : 0x1100) + (p->id) * 0x10) |
42 | #define PINCTRL_IRQLEV(n) ((cpu_is_mx23() ? 0x0a00 : 0x1200) + (n) * 0x10) | 44 | #define PINCTRL_IRQLEV(p) ((is_imx23_gpio(p) ? 0x0a00 : 0x1200) + (p->id) * 0x10) |
43 | #define PINCTRL_IRQPOL(n) ((cpu_is_mx23() ? 0x0b00 : 0x1300) + (n) * 0x10) | 45 | #define PINCTRL_IRQPOL(p) ((is_imx23_gpio(p) ? 0x0b00 : 0x1300) + (p->id) * 0x10) |
44 | #define PINCTRL_IRQSTAT(n) ((cpu_is_mx23() ? 0x0c00 : 0x1400) + (n) * 0x10) | 46 | #define PINCTRL_IRQSTAT(p) ((is_imx23_gpio(p) ? 0x0c00 : 0x1400) + (p->id) * 0x10) |
45 | 47 | ||
46 | #define GPIO_INT_FALL_EDGE 0x0 | 48 | #define GPIO_INT_FALL_EDGE 0x0 |
47 | #define GPIO_INT_LOW_LEV 0x1 | 49 | #define GPIO_INT_LOW_LEV 0x1 |
@@ -52,14 +54,30 @@ | |||
52 | 54 | ||
53 | #define irq_to_gpio(irq) ((irq) - MXS_GPIO_IRQ_START) | 55 | #define irq_to_gpio(irq) ((irq) - MXS_GPIO_IRQ_START) |
54 | 56 | ||
57 | enum mxs_gpio_id { | ||
58 | IMX23_GPIO, | ||
59 | IMX28_GPIO, | ||
60 | }; | ||
61 | |||
55 | struct mxs_gpio_port { | 62 | struct mxs_gpio_port { |
56 | void __iomem *base; | 63 | void __iomem *base; |
57 | int id; | 64 | int id; |
58 | int irq; | 65 | int irq; |
59 | int virtual_irq_start; | 66 | int virtual_irq_start; |
60 | struct bgpio_chip bgc; | 67 | struct bgpio_chip bgc; |
68 | enum mxs_gpio_id devid; | ||
61 | }; | 69 | }; |
62 | 70 | ||
71 | static inline int is_imx23_gpio(struct mxs_gpio_port *port) | ||
72 | { | ||
73 | return port->devid == IMX23_GPIO; | ||
74 | } | ||
75 | |||
76 | static inline int is_imx28_gpio(struct mxs_gpio_port *port) | ||
77 | { | ||
78 | return port->devid == IMX28_GPIO; | ||
79 | } | ||
80 | |||
63 | /* Note: This driver assumes 32 GPIOs are handled in one register */ | 81 | /* Note: This driver assumes 32 GPIOs are handled in one register */ |
64 | 82 | ||
65 | static int mxs_gpio_set_irq_type(struct irq_data *d, unsigned int type) | 83 | static int mxs_gpio_set_irq_type(struct irq_data *d, unsigned int type) |
@@ -89,21 +107,21 @@ static int mxs_gpio_set_irq_type(struct irq_data *d, unsigned int type) | |||
89 | } | 107 | } |
90 | 108 | ||
91 | /* set level or edge */ | 109 | /* set level or edge */ |
92 | pin_addr = port->base + PINCTRL_IRQLEV(port->id); | 110 | pin_addr = port->base + PINCTRL_IRQLEV(port); |
93 | if (edge & GPIO_INT_LEV_MASK) | 111 | if (edge & GPIO_INT_LEV_MASK) |
94 | writel(pin_mask, pin_addr + MXS_SET); | 112 | writel(pin_mask, pin_addr + MXS_SET); |
95 | else | 113 | else |
96 | writel(pin_mask, pin_addr + MXS_CLR); | 114 | writel(pin_mask, pin_addr + MXS_CLR); |
97 | 115 | ||
98 | /* set polarity */ | 116 | /* set polarity */ |
99 | pin_addr = port->base + PINCTRL_IRQPOL(port->id); | 117 | pin_addr = port->base + PINCTRL_IRQPOL(port); |
100 | if (edge & GPIO_INT_POL_MASK) | 118 | if (edge & GPIO_INT_POL_MASK) |
101 | writel(pin_mask, pin_addr + MXS_SET); | 119 | writel(pin_mask, pin_addr + MXS_SET); |
102 | else | 120 | else |
103 | writel(pin_mask, pin_addr + MXS_CLR); | 121 | writel(pin_mask, pin_addr + MXS_CLR); |
104 | 122 | ||
105 | writel(1 << (gpio & 0x1f), | 123 | writel(1 << (gpio & 0x1f), |
106 | port->base + PINCTRL_IRQSTAT(port->id) + MXS_CLR); | 124 | port->base + PINCTRL_IRQSTAT(port) + MXS_CLR); |
107 | 125 | ||
108 | return 0; | 126 | return 0; |
109 | } | 127 | } |
@@ -117,8 +135,8 @@ static void mxs_gpio_irq_handler(u32 irq, struct irq_desc *desc) | |||
117 | 135 | ||
118 | desc->irq_data.chip->irq_ack(&desc->irq_data); | 136 | desc->irq_data.chip->irq_ack(&desc->irq_data); |
119 | 137 | ||
120 | irq_stat = readl(port->base + PINCTRL_IRQSTAT(port->id)) & | 138 | irq_stat = readl(port->base + PINCTRL_IRQSTAT(port)) & |
121 | readl(port->base + PINCTRL_IRQEN(port->id)); | 139 | readl(port->base + PINCTRL_IRQEN(port)); |
122 | 140 | ||
123 | while (irq_stat != 0) { | 141 | while (irq_stat != 0) { |
124 | int irqoffset = fls(irq_stat) - 1; | 142 | int irqoffset = fls(irq_stat) - 1; |
@@ -164,8 +182,8 @@ static void __init mxs_gpio_init_gc(struct mxs_gpio_port *port) | |||
164 | ct->chip.irq_unmask = irq_gc_mask_set_bit; | 182 | ct->chip.irq_unmask = irq_gc_mask_set_bit; |
165 | ct->chip.irq_set_type = mxs_gpio_set_irq_type; | 183 | ct->chip.irq_set_type = mxs_gpio_set_irq_type; |
166 | ct->chip.irq_set_wake = mxs_gpio_set_wake_irq; | 184 | ct->chip.irq_set_wake = mxs_gpio_set_wake_irq; |
167 | ct->regs.ack = PINCTRL_IRQSTAT(port->id) + MXS_CLR; | 185 | ct->regs.ack = PINCTRL_IRQSTAT(port) + MXS_CLR; |
168 | ct->regs.mask = PINCTRL_IRQEN(port->id); | 186 | ct->regs.mask = PINCTRL_IRQEN(port); |
169 | 187 | ||
170 | irq_setup_generic_chip(gc, IRQ_MSK(32), 0, IRQ_NOREQUEST, 0); | 188 | irq_setup_generic_chip(gc, IRQ_MSK(32), 0, IRQ_NOREQUEST, 0); |
171 | } | 189 | } |
@@ -179,60 +197,83 @@ static int mxs_gpio_to_irq(struct gpio_chip *gc, unsigned offset) | |||
179 | return port->virtual_irq_start + offset; | 197 | return port->virtual_irq_start + offset; |
180 | } | 198 | } |
181 | 199 | ||
200 | static struct platform_device_id mxs_gpio_ids[] = { | ||
201 | { | ||
202 | .name = "imx23-gpio", | ||
203 | .driver_data = IMX23_GPIO, | ||
204 | }, { | ||
205 | .name = "imx28-gpio", | ||
206 | .driver_data = IMX28_GPIO, | ||
207 | }, { | ||
208 | /* sentinel */ | ||
209 | } | ||
210 | }; | ||
211 | MODULE_DEVICE_TABLE(platform, mxs_gpio_ids); | ||
212 | |||
213 | static const struct of_device_id mxs_gpio_dt_ids[] = { | ||
214 | { .compatible = "fsl,imx23-gpio", .data = (void *) IMX23_GPIO, }, | ||
215 | { .compatible = "fsl,imx28-gpio", .data = (void *) IMX28_GPIO, }, | ||
216 | { /* sentinel */ } | ||
217 | }; | ||
218 | MODULE_DEVICE_TABLE(of, mxs_gpio_dt_ids); | ||
219 | |||
182 | static int __devinit mxs_gpio_probe(struct platform_device *pdev) | 220 | static int __devinit mxs_gpio_probe(struct platform_device *pdev) |
183 | { | 221 | { |
222 | const struct of_device_id *of_id = | ||
223 | of_match_device(mxs_gpio_dt_ids, &pdev->dev); | ||
224 | struct device_node *np = pdev->dev.of_node; | ||
225 | struct device_node *parent; | ||
184 | static void __iomem *base; | 226 | static void __iomem *base; |
185 | struct mxs_gpio_port *port; | 227 | struct mxs_gpio_port *port; |
186 | struct resource *iores = NULL; | 228 | struct resource *iores = NULL; |
187 | int err; | 229 | int err; |
188 | 230 | ||
189 | port = kzalloc(sizeof(struct mxs_gpio_port), GFP_KERNEL); | 231 | port = devm_kzalloc(&pdev->dev, sizeof(*port), GFP_KERNEL); |
190 | if (!port) | 232 | if (!port) |
191 | return -ENOMEM; | 233 | return -ENOMEM; |
192 | 234 | ||
193 | port->id = pdev->id; | 235 | if (np) { |
236 | port->id = of_alias_get_id(np, "gpio"); | ||
237 | if (port->id < 0) | ||
238 | return port->id; | ||
239 | port->devid = (enum mxs_gpio_id) of_id->data; | ||
240 | } else { | ||
241 | port->id = pdev->id; | ||
242 | port->devid = pdev->id_entry->driver_data; | ||
243 | } | ||
194 | port->virtual_irq_start = MXS_GPIO_IRQ_START + port->id * 32; | 244 | port->virtual_irq_start = MXS_GPIO_IRQ_START + port->id * 32; |
195 | 245 | ||
246 | port->irq = platform_get_irq(pdev, 0); | ||
247 | if (port->irq < 0) | ||
248 | return port->irq; | ||
249 | |||
196 | /* | 250 | /* |
197 | * map memory region only once, as all the gpio ports | 251 | * map memory region only once, as all the gpio ports |
198 | * share the same one | 252 | * share the same one |
199 | */ | 253 | */ |
200 | if (!base) { | 254 | if (!base) { |
201 | iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 255 | if (np) { |
202 | if (!iores) { | 256 | parent = of_get_parent(np); |
203 | err = -ENODEV; | 257 | base = of_iomap(parent, 0); |
204 | goto out_kfree; | 258 | of_node_put(parent); |
205 | } | 259 | } else { |
206 | 260 | iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); | |
207 | if (!request_mem_region(iores->start, resource_size(iores), | 261 | base = devm_request_and_ioremap(&pdev->dev, iores); |
208 | pdev->name)) { | ||
209 | err = -EBUSY; | ||
210 | goto out_kfree; | ||
211 | } | ||
212 | |||
213 | base = ioremap(iores->start, resource_size(iores)); | ||
214 | if (!base) { | ||
215 | err = -ENOMEM; | ||
216 | goto out_release_mem; | ||
217 | } | 262 | } |
263 | if (!base) | ||
264 | return -EADDRNOTAVAIL; | ||
218 | } | 265 | } |
219 | port->base = base; | 266 | port->base = base; |
220 | 267 | ||
221 | port->irq = platform_get_irq(pdev, 0); | ||
222 | if (port->irq < 0) { | ||
223 | err = -EINVAL; | ||
224 | goto out_iounmap; | ||
225 | } | ||
226 | |||
227 | /* | 268 | /* |
228 | * select the pin interrupt functionality but initially | 269 | * select the pin interrupt functionality but initially |
229 | * disable the interrupts | 270 | * disable the interrupts |
230 | */ | 271 | */ |
231 | writel(~0U, port->base + PINCTRL_PIN2IRQ(port->id)); | 272 | writel(~0U, port->base + PINCTRL_PIN2IRQ(port)); |
232 | writel(0, port->base + PINCTRL_IRQEN(port->id)); | 273 | writel(0, port->base + PINCTRL_IRQEN(port)); |
233 | 274 | ||
234 | /* clear address has to be used to clear IRQSTAT bits */ | 275 | /* clear address has to be used to clear IRQSTAT bits */ |
235 | writel(~0U, port->base + PINCTRL_IRQSTAT(port->id) + MXS_CLR); | 276 | writel(~0U, port->base + PINCTRL_IRQSTAT(port) + MXS_CLR); |
236 | 277 | ||
237 | /* gpio-mxs can be a generic irq chip */ | 278 | /* gpio-mxs can be a generic irq chip */ |
238 | mxs_gpio_init_gc(port); | 279 | mxs_gpio_init_gc(port); |
@@ -242,41 +283,32 @@ static int __devinit mxs_gpio_probe(struct platform_device *pdev) | |||
242 | irq_set_handler_data(port->irq, port); | 283 | irq_set_handler_data(port->irq, port); |
243 | 284 | ||
244 | err = bgpio_init(&port->bgc, &pdev->dev, 4, | 285 | err = bgpio_init(&port->bgc, &pdev->dev, 4, |
245 | port->base + PINCTRL_DIN(port->id), | 286 | port->base + PINCTRL_DIN(port), |
246 | port->base + PINCTRL_DOUT(port->id), NULL, | 287 | port->base + PINCTRL_DOUT(port), NULL, |
247 | port->base + PINCTRL_DOE(port->id), NULL, 0); | 288 | port->base + PINCTRL_DOE(port), NULL, 0); |
248 | if (err) | 289 | if (err) |
249 | goto out_iounmap; | 290 | return err; |
250 | 291 | ||
251 | port->bgc.gc.to_irq = mxs_gpio_to_irq; | 292 | port->bgc.gc.to_irq = mxs_gpio_to_irq; |
252 | port->bgc.gc.base = port->id * 32; | 293 | port->bgc.gc.base = port->id * 32; |
253 | 294 | ||
254 | err = gpiochip_add(&port->bgc.gc); | 295 | err = gpiochip_add(&port->bgc.gc); |
255 | if (err) | 296 | if (err) { |
256 | goto out_bgpio_remove; | 297 | bgpio_remove(&port->bgc); |
298 | return err; | ||
299 | } | ||
257 | 300 | ||
258 | return 0; | 301 | return 0; |
259 | |||
260 | out_bgpio_remove: | ||
261 | bgpio_remove(&port->bgc); | ||
262 | out_iounmap: | ||
263 | if (iores) | ||
264 | iounmap(port->base); | ||
265 | out_release_mem: | ||
266 | if (iores) | ||
267 | release_mem_region(iores->start, resource_size(iores)); | ||
268 | out_kfree: | ||
269 | kfree(port); | ||
270 | dev_info(&pdev->dev, "%s failed with errno %d\n", __func__, err); | ||
271 | return err; | ||
272 | } | 302 | } |
273 | 303 | ||
274 | static struct platform_driver mxs_gpio_driver = { | 304 | static struct platform_driver mxs_gpio_driver = { |
275 | .driver = { | 305 | .driver = { |
276 | .name = "gpio-mxs", | 306 | .name = "gpio-mxs", |
277 | .owner = THIS_MODULE, | 307 | .owner = THIS_MODULE, |
308 | .of_match_table = mxs_gpio_dt_ids, | ||
278 | }, | 309 | }, |
279 | .probe = mxs_gpio_probe, | 310 | .probe = mxs_gpio_probe, |
311 | .id_table = mxs_gpio_ids, | ||
280 | }; | 312 | }; |
281 | 313 | ||
282 | static int __init mxs_gpio_init(void) | 314 | static int __init mxs_gpio_init(void) |
diff --git a/drivers/i2c/busses/i2c-mxs.c b/drivers/i2c/busses/i2c-mxs.c index 58a338846f06..04eb441b6ce1 100644 --- a/drivers/i2c/busses/i2c-mxs.c +++ b/drivers/i2c/busses/i2c-mxs.c | |||
@@ -28,6 +28,9 @@ | |||
28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
29 | #include <linux/pinctrl/consumer.h> | 29 | #include <linux/pinctrl/consumer.h> |
30 | #include <linux/stmp_device.h> | 30 | #include <linux/stmp_device.h> |
31 | #include <linux/of.h> | ||
32 | #include <linux/of_device.h> | ||
33 | #include <linux/of_i2c.h> | ||
31 | 34 | ||
32 | #define DRIVER_NAME "mxs-i2c" | 35 | #define DRIVER_NAME "mxs-i2c" |
33 | 36 | ||
@@ -366,6 +369,7 @@ static int __devinit mxs_i2c_probe(struct platform_device *pdev) | |||
366 | adap->algo = &mxs_i2c_algo; | 369 | adap->algo = &mxs_i2c_algo; |
367 | adap->dev.parent = dev; | 370 | adap->dev.parent = dev; |
368 | adap->nr = pdev->id; | 371 | adap->nr = pdev->id; |
372 | adap->dev.of_node = pdev->dev.of_node; | ||
369 | i2c_set_adapdata(adap, i2c); | 373 | i2c_set_adapdata(adap, i2c); |
370 | err = i2c_add_numbered_adapter(adap); | 374 | err = i2c_add_numbered_adapter(adap); |
371 | if (err) { | 375 | if (err) { |
@@ -375,6 +379,8 @@ static int __devinit mxs_i2c_probe(struct platform_device *pdev) | |||
375 | return err; | 379 | return err; |
376 | } | 380 | } |
377 | 381 | ||
382 | of_i2c_register_devices(adap); | ||
383 | |||
378 | return 0; | 384 | return 0; |
379 | } | 385 | } |
380 | 386 | ||
@@ -394,10 +400,17 @@ static int __devexit mxs_i2c_remove(struct platform_device *pdev) | |||
394 | return 0; | 400 | return 0; |
395 | } | 401 | } |
396 | 402 | ||
403 | static const struct of_device_id mxs_i2c_dt_ids[] = { | ||
404 | { .compatible = "fsl,imx28-i2c", }, | ||
405 | { /* sentinel */ } | ||
406 | }; | ||
407 | MODULE_DEVICE_TABLE(of, mxs_i2c_dt_ids); | ||
408 | |||
397 | static struct platform_driver mxs_i2c_driver = { | 409 | static struct platform_driver mxs_i2c_driver = { |
398 | .driver = { | 410 | .driver = { |
399 | .name = DRIVER_NAME, | 411 | .name = DRIVER_NAME, |
400 | .owner = THIS_MODULE, | 412 | .owner = THIS_MODULE, |
413 | .of_match_table = mxs_i2c_dt_ids, | ||
401 | }, | 414 | }, |
402 | .remove = __devexit_p(mxs_i2c_remove), | 415 | .remove = __devexit_p(mxs_i2c_remove), |
403 | }; | 416 | }; |
diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c index bb03ddda481d..34a90266ab11 100644 --- a/drivers/mmc/host/mxs-mmc.c +++ b/drivers/mmc/host/mxs-mmc.c | |||
@@ -23,6 +23,9 @@ | |||
23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
24 | #include <linux/init.h> | 24 | #include <linux/init.h> |
25 | #include <linux/ioport.h> | 25 | #include <linux/ioport.h> |
26 | #include <linux/of.h> | ||
27 | #include <linux/of_device.h> | ||
28 | #include <linux/of_gpio.h> | ||
26 | #include <linux/platform_device.h> | 29 | #include <linux/platform_device.h> |
27 | #include <linux/delay.h> | 30 | #include <linux/delay.h> |
28 | #include <linux/interrupt.h> | 31 | #include <linux/interrupt.h> |
@@ -40,18 +43,15 @@ | |||
40 | #include <linux/module.h> | 43 | #include <linux/module.h> |
41 | #include <linux/fsl/mxs-dma.h> | 44 | #include <linux/fsl/mxs-dma.h> |
42 | #include <linux/pinctrl/consumer.h> | 45 | #include <linux/pinctrl/consumer.h> |
43 | 46 | #include <linux/stmp_device.h> | |
44 | #include <mach/mxs.h> | 47 | #include <linux/mmc/mxs-mmc.h> |
45 | #include <mach/common.h> | ||
46 | #include <mach/mmc.h> | ||
47 | 48 | ||
48 | #define DRIVER_NAME "mxs-mmc" | 49 | #define DRIVER_NAME "mxs-mmc" |
49 | 50 | ||
50 | /* card detect polling timeout */ | 51 | /* card detect polling timeout */ |
51 | #define MXS_MMC_DETECT_TIMEOUT (HZ/2) | 52 | #define MXS_MMC_DETECT_TIMEOUT (HZ/2) |
52 | 53 | ||
53 | #define SSP_VERSION_LATEST 4 | 54 | #define ssp_is_old(host) ((host)->devid == IMX23_MMC) |
54 | #define ssp_is_old() (host->version < SSP_VERSION_LATEST) | ||
55 | 55 | ||
56 | /* SSP registers */ | 56 | /* SSP registers */ |
57 | #define HW_SSP_CTRL0 0x000 | 57 | #define HW_SSP_CTRL0 0x000 |
@@ -86,14 +86,14 @@ | |||
86 | #define BM_SSP_BLOCK_SIZE_BLOCK_COUNT (0xffffff << 4) | 86 | #define BM_SSP_BLOCK_SIZE_BLOCK_COUNT (0xffffff << 4) |
87 | #define BP_SSP_BLOCK_SIZE_BLOCK_SIZE (0) | 87 | #define BP_SSP_BLOCK_SIZE_BLOCK_SIZE (0) |
88 | #define BM_SSP_BLOCK_SIZE_BLOCK_SIZE (0xf) | 88 | #define BM_SSP_BLOCK_SIZE_BLOCK_SIZE (0xf) |
89 | #define HW_SSP_TIMING (ssp_is_old() ? 0x050 : 0x070) | 89 | #define HW_SSP_TIMING(h) (ssp_is_old(h) ? 0x050 : 0x070) |
90 | #define BP_SSP_TIMING_TIMEOUT (16) | 90 | #define BP_SSP_TIMING_TIMEOUT (16) |
91 | #define BM_SSP_TIMING_TIMEOUT (0xffff << 16) | 91 | #define BM_SSP_TIMING_TIMEOUT (0xffff << 16) |
92 | #define BP_SSP_TIMING_CLOCK_DIVIDE (8) | 92 | #define BP_SSP_TIMING_CLOCK_DIVIDE (8) |
93 | #define BM_SSP_TIMING_CLOCK_DIVIDE (0xff << 8) | 93 | #define BM_SSP_TIMING_CLOCK_DIVIDE (0xff << 8) |
94 | #define BP_SSP_TIMING_CLOCK_RATE (0) | 94 | #define BP_SSP_TIMING_CLOCK_RATE (0) |
95 | #define BM_SSP_TIMING_CLOCK_RATE (0xff) | 95 | #define BM_SSP_TIMING_CLOCK_RATE (0xff) |
96 | #define HW_SSP_CTRL1 (ssp_is_old() ? 0x060 : 0x080) | 96 | #define HW_SSP_CTRL1(h) (ssp_is_old(h) ? 0x060 : 0x080) |
97 | #define BM_SSP_CTRL1_SDIO_IRQ (1 << 31) | 97 | #define BM_SSP_CTRL1_SDIO_IRQ (1 << 31) |
98 | #define BM_SSP_CTRL1_SDIO_IRQ_EN (1 << 30) | 98 | #define BM_SSP_CTRL1_SDIO_IRQ_EN (1 << 30) |
99 | #define BM_SSP_CTRL1_RESP_ERR_IRQ (1 << 29) | 99 | #define BM_SSP_CTRL1_RESP_ERR_IRQ (1 << 29) |
@@ -116,15 +116,13 @@ | |||
116 | #define BM_SSP_CTRL1_WORD_LENGTH (0xf << 4) | 116 | #define BM_SSP_CTRL1_WORD_LENGTH (0xf << 4) |
117 | #define BP_SSP_CTRL1_SSP_MODE (0) | 117 | #define BP_SSP_CTRL1_SSP_MODE (0) |
118 | #define BM_SSP_CTRL1_SSP_MODE (0xf) | 118 | #define BM_SSP_CTRL1_SSP_MODE (0xf) |
119 | #define HW_SSP_SDRESP0 (ssp_is_old() ? 0x080 : 0x0a0) | 119 | #define HW_SSP_SDRESP0(h) (ssp_is_old(h) ? 0x080 : 0x0a0) |
120 | #define HW_SSP_SDRESP1 (ssp_is_old() ? 0x090 : 0x0b0) | 120 | #define HW_SSP_SDRESP1(h) (ssp_is_old(h) ? 0x090 : 0x0b0) |
121 | #define HW_SSP_SDRESP2 (ssp_is_old() ? 0x0a0 : 0x0c0) | 121 | #define HW_SSP_SDRESP2(h) (ssp_is_old(h) ? 0x0a0 : 0x0c0) |
122 | #define HW_SSP_SDRESP3 (ssp_is_old() ? 0x0b0 : 0x0d0) | 122 | #define HW_SSP_SDRESP3(h) (ssp_is_old(h) ? 0x0b0 : 0x0d0) |
123 | #define HW_SSP_STATUS (ssp_is_old() ? 0x0c0 : 0x100) | 123 | #define HW_SSP_STATUS(h) (ssp_is_old(h) ? 0x0c0 : 0x100) |
124 | #define BM_SSP_STATUS_CARD_DETECT (1 << 28) | 124 | #define BM_SSP_STATUS_CARD_DETECT (1 << 28) |
125 | #define BM_SSP_STATUS_SDIO_IRQ (1 << 17) | 125 | #define BM_SSP_STATUS_SDIO_IRQ (1 << 17) |
126 | #define HW_SSP_VERSION (cpu_is_mx23() ? 0x110 : 0x130) | ||
127 | #define BP_SSP_VERSION_MAJOR (24) | ||
128 | 126 | ||
129 | #define BF_SSP(value, field) (((value) << BP_SSP_##field) & BM_SSP_##field) | 127 | #define BF_SSP(value, field) (((value) << BP_SSP_##field) & BM_SSP_##field) |
130 | 128 | ||
@@ -139,6 +137,11 @@ | |||
139 | 137 | ||
140 | #define SSP_PIO_NUM 3 | 138 | #define SSP_PIO_NUM 3 |
141 | 139 | ||
140 | enum mxs_mmc_id { | ||
141 | IMX23_MMC, | ||
142 | IMX28_MMC, | ||
143 | }; | ||
144 | |||
142 | struct mxs_mmc_host { | 145 | struct mxs_mmc_host { |
143 | struct mmc_host *mmc; | 146 | struct mmc_host *mmc; |
144 | struct mmc_request *mrq; | 147 | struct mmc_request *mrq; |
@@ -146,9 +149,7 @@ struct mxs_mmc_host { | |||
146 | struct mmc_data *data; | 149 | struct mmc_data *data; |
147 | 150 | ||
148 | void __iomem *base; | 151 | void __iomem *base; |
149 | int irq; | 152 | int dma_channel; |
150 | struct resource *res; | ||
151 | struct resource *dma_res; | ||
152 | struct clk *clk; | 153 | struct clk *clk; |
153 | unsigned int clk_rate; | 154 | unsigned int clk_rate; |
154 | 155 | ||
@@ -158,32 +159,28 @@ struct mxs_mmc_host { | |||
158 | enum dma_transfer_direction slave_dirn; | 159 | enum dma_transfer_direction slave_dirn; |
159 | u32 ssp_pio_words[SSP_PIO_NUM]; | 160 | u32 ssp_pio_words[SSP_PIO_NUM]; |
160 | 161 | ||
161 | unsigned int version; | 162 | enum mxs_mmc_id devid; |
162 | unsigned char bus_width; | 163 | unsigned char bus_width; |
163 | spinlock_t lock; | 164 | spinlock_t lock; |
164 | int sdio_irq_en; | 165 | int sdio_irq_en; |
166 | int wp_gpio; | ||
165 | }; | 167 | }; |
166 | 168 | ||
167 | static int mxs_mmc_get_ro(struct mmc_host *mmc) | 169 | static int mxs_mmc_get_ro(struct mmc_host *mmc) |
168 | { | 170 | { |
169 | struct mxs_mmc_host *host = mmc_priv(mmc); | 171 | struct mxs_mmc_host *host = mmc_priv(mmc); |
170 | struct mxs_mmc_platform_data *pdata = | ||
171 | mmc_dev(host->mmc)->platform_data; | ||
172 | |||
173 | if (!pdata) | ||
174 | return -EFAULT; | ||
175 | 172 | ||
176 | if (!gpio_is_valid(pdata->wp_gpio)) | 173 | if (!gpio_is_valid(host->wp_gpio)) |
177 | return -EINVAL; | 174 | return -EINVAL; |
178 | 175 | ||
179 | return gpio_get_value(pdata->wp_gpio); | 176 | return gpio_get_value(host->wp_gpio); |
180 | } | 177 | } |
181 | 178 | ||
182 | static int mxs_mmc_get_cd(struct mmc_host *mmc) | 179 | static int mxs_mmc_get_cd(struct mmc_host *mmc) |
183 | { | 180 | { |
184 | struct mxs_mmc_host *host = mmc_priv(mmc); | 181 | struct mxs_mmc_host *host = mmc_priv(mmc); |
185 | 182 | ||
186 | return !(readl(host->base + HW_SSP_STATUS) & | 183 | return !(readl(host->base + HW_SSP_STATUS(host)) & |
187 | BM_SSP_STATUS_CARD_DETECT); | 184 | BM_SSP_STATUS_CARD_DETECT); |
188 | } | 185 | } |
189 | 186 | ||
@@ -191,7 +188,7 @@ static void mxs_mmc_reset(struct mxs_mmc_host *host) | |||
191 | { | 188 | { |
192 | u32 ctrl0, ctrl1; | 189 | u32 ctrl0, ctrl1; |
193 | 190 | ||
194 | mxs_reset_block(host->base); | 191 | stmp_reset_block(host->base); |
195 | 192 | ||
196 | ctrl0 = BM_SSP_CTRL0_IGNORE_CRC; | 193 | ctrl0 = BM_SSP_CTRL0_IGNORE_CRC; |
197 | ctrl1 = BF_SSP(0x3, CTRL1_SSP_MODE) | | 194 | ctrl1 = BF_SSP(0x3, CTRL1_SSP_MODE) | |
@@ -207,7 +204,7 @@ static void mxs_mmc_reset(struct mxs_mmc_host *host) | |||
207 | writel(BF_SSP(0xffff, TIMING_TIMEOUT) | | 204 | writel(BF_SSP(0xffff, TIMING_TIMEOUT) | |
208 | BF_SSP(2, TIMING_CLOCK_DIVIDE) | | 205 | BF_SSP(2, TIMING_CLOCK_DIVIDE) | |
209 | BF_SSP(0, TIMING_CLOCK_RATE), | 206 | BF_SSP(0, TIMING_CLOCK_RATE), |
210 | host->base + HW_SSP_TIMING); | 207 | host->base + HW_SSP_TIMING(host)); |
211 | 208 | ||
212 | if (host->sdio_irq_en) { | 209 | if (host->sdio_irq_en) { |
213 | ctrl0 |= BM_SSP_CTRL0_SDIO_IRQ_CHECK; | 210 | ctrl0 |= BM_SSP_CTRL0_SDIO_IRQ_CHECK; |
@@ -215,7 +212,7 @@ static void mxs_mmc_reset(struct mxs_mmc_host *host) | |||
215 | } | 212 | } |
216 | 213 | ||
217 | writel(ctrl0, host->base + HW_SSP_CTRL0); | 214 | writel(ctrl0, host->base + HW_SSP_CTRL0); |
218 | writel(ctrl1, host->base + HW_SSP_CTRL1); | 215 | writel(ctrl1, host->base + HW_SSP_CTRL1(host)); |
219 | } | 216 | } |
220 | 217 | ||
221 | static void mxs_mmc_start_cmd(struct mxs_mmc_host *host, | 218 | static void mxs_mmc_start_cmd(struct mxs_mmc_host *host, |
@@ -229,12 +226,12 @@ static void mxs_mmc_request_done(struct mxs_mmc_host *host) | |||
229 | 226 | ||
230 | if (mmc_resp_type(cmd) & MMC_RSP_PRESENT) { | 227 | if (mmc_resp_type(cmd) & MMC_RSP_PRESENT) { |
231 | if (mmc_resp_type(cmd) & MMC_RSP_136) { | 228 | if (mmc_resp_type(cmd) & MMC_RSP_136) { |
232 | cmd->resp[3] = readl(host->base + HW_SSP_SDRESP0); | 229 | cmd->resp[3] = readl(host->base + HW_SSP_SDRESP0(host)); |
233 | cmd->resp[2] = readl(host->base + HW_SSP_SDRESP1); | 230 | cmd->resp[2] = readl(host->base + HW_SSP_SDRESP1(host)); |
234 | cmd->resp[1] = readl(host->base + HW_SSP_SDRESP2); | 231 | cmd->resp[1] = readl(host->base + HW_SSP_SDRESP2(host)); |
235 | cmd->resp[0] = readl(host->base + HW_SSP_SDRESP3); | 232 | cmd->resp[0] = readl(host->base + HW_SSP_SDRESP3(host)); |
236 | } else { | 233 | } else { |
237 | cmd->resp[0] = readl(host->base + HW_SSP_SDRESP0); | 234 | cmd->resp[0] = readl(host->base + HW_SSP_SDRESP0(host)); |
238 | } | 235 | } |
239 | } | 236 | } |
240 | 237 | ||
@@ -277,9 +274,9 @@ static irqreturn_t mxs_mmc_irq_handler(int irq, void *dev_id) | |||
277 | 274 | ||
278 | spin_lock(&host->lock); | 275 | spin_lock(&host->lock); |
279 | 276 | ||
280 | stat = readl(host->base + HW_SSP_CTRL1); | 277 | stat = readl(host->base + HW_SSP_CTRL1(host)); |
281 | writel(stat & MXS_MMC_IRQ_BITS, | 278 | writel(stat & MXS_MMC_IRQ_BITS, |
282 | host->base + HW_SSP_CTRL1 + MXS_CLR_ADDR); | 279 | host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_CLR); |
283 | 280 | ||
284 | if ((stat & BM_SSP_CTRL1_SDIO_IRQ) && (stat & BM_SSP_CTRL1_SDIO_IRQ_EN)) | 281 | if ((stat & BM_SSP_CTRL1_SDIO_IRQ) && (stat & BM_SSP_CTRL1_SDIO_IRQ_EN)) |
285 | mmc_signal_sdio_irq(host->mmc); | 282 | mmc_signal_sdio_irq(host->mmc); |
@@ -485,7 +482,7 @@ static void mxs_mmc_adtc(struct mxs_mmc_host *host) | |||
485 | blocks = 1; | 482 | blocks = 1; |
486 | 483 | ||
487 | /* xfer count, block size and count need to be set differently */ | 484 | /* xfer count, block size and count need to be set differently */ |
488 | if (ssp_is_old()) { | 485 | if (ssp_is_old(host)) { |
489 | ctrl0 |= BF_SSP(data_size, CTRL0_XFER_COUNT); | 486 | ctrl0 |= BF_SSP(data_size, CTRL0_XFER_COUNT); |
490 | cmd0 |= BF_SSP(log2_blksz, CMD0_BLOCK_SIZE) | | 487 | cmd0 |= BF_SSP(log2_blksz, CMD0_BLOCK_SIZE) | |
491 | BF_SSP(blocks - 1, CMD0_BLOCK_COUNT); | 488 | BF_SSP(blocks - 1, CMD0_BLOCK_COUNT); |
@@ -509,10 +506,10 @@ static void mxs_mmc_adtc(struct mxs_mmc_host *host) | |||
509 | 506 | ||
510 | /* set the timeout count */ | 507 | /* set the timeout count */ |
511 | timeout = mxs_ns_to_ssp_ticks(host->clk_rate, data->timeout_ns); | 508 | timeout = mxs_ns_to_ssp_ticks(host->clk_rate, data->timeout_ns); |
512 | val = readl(host->base + HW_SSP_TIMING); | 509 | val = readl(host->base + HW_SSP_TIMING(host)); |
513 | val &= ~(BM_SSP_TIMING_TIMEOUT); | 510 | val &= ~(BM_SSP_TIMING_TIMEOUT); |
514 | val |= BF_SSP(timeout, TIMING_TIMEOUT); | 511 | val |= BF_SSP(timeout, TIMING_TIMEOUT); |
515 | writel(val, host->base + HW_SSP_TIMING); | 512 | writel(val, host->base + HW_SSP_TIMING(host)); |
516 | 513 | ||
517 | /* pio */ | 514 | /* pio */ |
518 | host->ssp_pio_words[0] = ctrl0; | 515 | host->ssp_pio_words[0] = ctrl0; |
@@ -598,11 +595,11 @@ static void mxs_mmc_set_clk_rate(struct mxs_mmc_host *host, unsigned int rate) | |||
598 | 595 | ||
599 | ssp_sck = ssp_clk / clock_divide / (1 + clock_rate); | 596 | ssp_sck = ssp_clk / clock_divide / (1 + clock_rate); |
600 | 597 | ||
601 | val = readl(host->base + HW_SSP_TIMING); | 598 | val = readl(host->base + HW_SSP_TIMING(host)); |
602 | val &= ~(BM_SSP_TIMING_CLOCK_DIVIDE | BM_SSP_TIMING_CLOCK_RATE); | 599 | val &= ~(BM_SSP_TIMING_CLOCK_DIVIDE | BM_SSP_TIMING_CLOCK_RATE); |
603 | val |= BF_SSP(clock_divide, TIMING_CLOCK_DIVIDE); | 600 | val |= BF_SSP(clock_divide, TIMING_CLOCK_DIVIDE); |
604 | val |= BF_SSP(clock_rate, TIMING_CLOCK_RATE); | 601 | val |= BF_SSP(clock_rate, TIMING_CLOCK_RATE); |
605 | writel(val, host->base + HW_SSP_TIMING); | 602 | writel(val, host->base + HW_SSP_TIMING(host)); |
606 | 603 | ||
607 | host->clk_rate = ssp_sck; | 604 | host->clk_rate = ssp_sck; |
608 | 605 | ||
@@ -637,18 +634,19 @@ static void mxs_mmc_enable_sdio_irq(struct mmc_host *mmc, int enable) | |||
637 | 634 | ||
638 | if (enable) { | 635 | if (enable) { |
639 | writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK, | 636 | writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK, |
640 | host->base + HW_SSP_CTRL0 + MXS_SET_ADDR); | 637 | host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_SET); |
641 | writel(BM_SSP_CTRL1_SDIO_IRQ_EN, | 638 | writel(BM_SSP_CTRL1_SDIO_IRQ_EN, |
642 | host->base + HW_SSP_CTRL1 + MXS_SET_ADDR); | 639 | host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_SET); |
643 | 640 | ||
644 | if (readl(host->base + HW_SSP_STATUS) & BM_SSP_STATUS_SDIO_IRQ) | 641 | if (readl(host->base + HW_SSP_STATUS(host)) & |
642 | BM_SSP_STATUS_SDIO_IRQ) | ||
645 | mmc_signal_sdio_irq(host->mmc); | 643 | mmc_signal_sdio_irq(host->mmc); |
646 | 644 | ||
647 | } else { | 645 | } else { |
648 | writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK, | 646 | writel(BM_SSP_CTRL0_SDIO_IRQ_CHECK, |
649 | host->base + HW_SSP_CTRL0 + MXS_CLR_ADDR); | 647 | host->base + HW_SSP_CTRL0 + STMP_OFFSET_REG_CLR); |
650 | writel(BM_SSP_CTRL1_SDIO_IRQ_EN, | 648 | writel(BM_SSP_CTRL1_SDIO_IRQ_EN, |
651 | host->base + HW_SSP_CTRL1 + MXS_CLR_ADDR); | 649 | host->base + HW_SSP_CTRL1(host) + STMP_OFFSET_REG_CLR); |
652 | } | 650 | } |
653 | 651 | ||
654 | spin_unlock_irqrestore(&host->lock, flags); | 652 | spin_unlock_irqrestore(&host->lock, flags); |
@@ -669,7 +667,7 @@ static bool mxs_mmc_dma_filter(struct dma_chan *chan, void *param) | |||
669 | if (!mxs_dma_is_apbh(chan)) | 667 | if (!mxs_dma_is_apbh(chan)) |
670 | return false; | 668 | return false; |
671 | 669 | ||
672 | if (chan->chan_id != host->dma_res->start) | 670 | if (chan->chan_id != host->dma_channel) |
673 | return false; | 671 | return false; |
674 | 672 | ||
675 | chan->private = &host->dma_data; | 673 | chan->private = &host->dma_data; |
@@ -677,11 +675,34 @@ static bool mxs_mmc_dma_filter(struct dma_chan *chan, void *param) | |||
677 | return true; | 675 | return true; |
678 | } | 676 | } |
679 | 677 | ||
678 | static struct platform_device_id mxs_mmc_ids[] = { | ||
679 | { | ||
680 | .name = "imx23-mmc", | ||
681 | .driver_data = IMX23_MMC, | ||
682 | }, { | ||
683 | .name = "imx28-mmc", | ||
684 | .driver_data = IMX28_MMC, | ||
685 | }, { | ||
686 | /* sentinel */ | ||
687 | } | ||
688 | }; | ||
689 | MODULE_DEVICE_TABLE(platform, mxs_mmc_ids); | ||
690 | |||
691 | static const struct of_device_id mxs_mmc_dt_ids[] = { | ||
692 | { .compatible = "fsl,imx23-mmc", .data = (void *) IMX23_MMC, }, | ||
693 | { .compatible = "fsl,imx28-mmc", .data = (void *) IMX28_MMC, }, | ||
694 | { /* sentinel */ } | ||
695 | }; | ||
696 | MODULE_DEVICE_TABLE(of, mxs_mmc_dt_ids); | ||
697 | |||
680 | static int mxs_mmc_probe(struct platform_device *pdev) | 698 | static int mxs_mmc_probe(struct platform_device *pdev) |
681 | { | 699 | { |
700 | const struct of_device_id *of_id = | ||
701 | of_match_device(mxs_mmc_dt_ids, &pdev->dev); | ||
702 | struct device_node *np = pdev->dev.of_node; | ||
682 | struct mxs_mmc_host *host; | 703 | struct mxs_mmc_host *host; |
683 | struct mmc_host *mmc; | 704 | struct mmc_host *mmc; |
684 | struct resource *iores, *dmares, *r; | 705 | struct resource *iores, *dmares; |
685 | struct mxs_mmc_platform_data *pdata; | 706 | struct mxs_mmc_platform_data *pdata; |
686 | struct pinctrl *pinctrl; | 707 | struct pinctrl *pinctrl; |
687 | int ret = 0, irq_err, irq_dma; | 708 | int ret = 0, irq_err, irq_dma; |
@@ -691,46 +712,51 @@ static int mxs_mmc_probe(struct platform_device *pdev) | |||
691 | dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); | 712 | dmares = platform_get_resource(pdev, IORESOURCE_DMA, 0); |
692 | irq_err = platform_get_irq(pdev, 0); | 713 | irq_err = platform_get_irq(pdev, 0); |
693 | irq_dma = platform_get_irq(pdev, 1); | 714 | irq_dma = platform_get_irq(pdev, 1); |
694 | if (!iores || !dmares || irq_err < 0 || irq_dma < 0) | 715 | if (!iores || irq_err < 0 || irq_dma < 0) |
695 | return -EINVAL; | 716 | return -EINVAL; |
696 | 717 | ||
697 | r = request_mem_region(iores->start, resource_size(iores), pdev->name); | ||
698 | if (!r) | ||
699 | return -EBUSY; | ||
700 | |||
701 | mmc = mmc_alloc_host(sizeof(struct mxs_mmc_host), &pdev->dev); | 718 | mmc = mmc_alloc_host(sizeof(struct mxs_mmc_host), &pdev->dev); |
702 | if (!mmc) { | 719 | if (!mmc) |
703 | ret = -ENOMEM; | 720 | return -ENOMEM; |
704 | goto out_release_mem; | ||
705 | } | ||
706 | 721 | ||
707 | host = mmc_priv(mmc); | 722 | host = mmc_priv(mmc); |
708 | host->base = ioremap(r->start, resource_size(r)); | 723 | host->base = devm_request_and_ioremap(&pdev->dev, iores); |
709 | if (!host->base) { | 724 | if (!host->base) { |
710 | ret = -ENOMEM; | 725 | ret = -EADDRNOTAVAIL; |
711 | goto out_mmc_free; | 726 | goto out_mmc_free; |
712 | } | 727 | } |
713 | 728 | ||
714 | /* only major verion does matter */ | 729 | if (np) { |
715 | host->version = readl(host->base + HW_SSP_VERSION) >> | 730 | host->devid = (enum mxs_mmc_id) of_id->data; |
716 | BP_SSP_VERSION_MAJOR; | 731 | /* |
732 | * TODO: This is a temporary solution and should be changed | ||
733 | * to use generic DMA binding later when the helpers get in. | ||
734 | */ | ||
735 | ret = of_property_read_u32(np, "fsl,ssp-dma-channel", | ||
736 | &host->dma_channel); | ||
737 | if (ret) { | ||
738 | dev_err(mmc_dev(host->mmc), | ||
739 | "failed to get dma channel\n"); | ||
740 | goto out_mmc_free; | ||
741 | } | ||
742 | } else { | ||
743 | host->devid = pdev->id_entry->driver_data; | ||
744 | host->dma_channel = dmares->start; | ||
745 | } | ||
717 | 746 | ||
718 | host->mmc = mmc; | 747 | host->mmc = mmc; |
719 | host->res = r; | ||
720 | host->dma_res = dmares; | ||
721 | host->irq = irq_err; | ||
722 | host->sdio_irq_en = 0; | 748 | host->sdio_irq_en = 0; |
723 | 749 | ||
724 | pinctrl = devm_pinctrl_get_select_default(&pdev->dev); | 750 | pinctrl = devm_pinctrl_get_select_default(&pdev->dev); |
725 | if (IS_ERR(pinctrl)) { | 751 | if (IS_ERR(pinctrl)) { |
726 | ret = PTR_ERR(pinctrl); | 752 | ret = PTR_ERR(pinctrl); |
727 | goto out_iounmap; | 753 | goto out_mmc_free; |
728 | } | 754 | } |
729 | 755 | ||
730 | host->clk = clk_get(&pdev->dev, NULL); | 756 | host->clk = clk_get(&pdev->dev, NULL); |
731 | if (IS_ERR(host->clk)) { | 757 | if (IS_ERR(host->clk)) { |
732 | ret = PTR_ERR(host->clk); | 758 | ret = PTR_ERR(host->clk); |
733 | goto out_iounmap; | 759 | goto out_mmc_free; |
734 | } | 760 | } |
735 | clk_prepare_enable(host->clk); | 761 | clk_prepare_enable(host->clk); |
736 | 762 | ||
@@ -752,11 +778,20 @@ static int mxs_mmc_probe(struct platform_device *pdev) | |||
752 | MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL; | 778 | MMC_CAP_SDIO_IRQ | MMC_CAP_NEEDS_POLL; |
753 | 779 | ||
754 | pdata = mmc_dev(host->mmc)->platform_data; | 780 | pdata = mmc_dev(host->mmc)->platform_data; |
755 | if (pdata) { | 781 | if (!pdata) { |
782 | u32 bus_width = 0; | ||
783 | of_property_read_u32(np, "bus-width", &bus_width); | ||
784 | if (bus_width == 4) | ||
785 | mmc->caps |= MMC_CAP_4_BIT_DATA; | ||
786 | else if (bus_width == 8) | ||
787 | mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; | ||
788 | host->wp_gpio = of_get_named_gpio(np, "wp-gpios", 0); | ||
789 | } else { | ||
756 | if (pdata->flags & SLOTF_8_BIT_CAPABLE) | 790 | if (pdata->flags & SLOTF_8_BIT_CAPABLE) |
757 | mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; | 791 | mmc->caps |= MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA; |
758 | if (pdata->flags & SLOTF_4_BIT_CAPABLE) | 792 | if (pdata->flags & SLOTF_4_BIT_CAPABLE) |
759 | mmc->caps |= MMC_CAP_4_BIT_DATA; | 793 | mmc->caps |= MMC_CAP_4_BIT_DATA; |
794 | host->wp_gpio = pdata->wp_gpio; | ||
760 | } | 795 | } |
761 | 796 | ||
762 | mmc->f_min = 400000; | 797 | mmc->f_min = 400000; |
@@ -765,13 +800,14 @@ static int mxs_mmc_probe(struct platform_device *pdev) | |||
765 | 800 | ||
766 | mmc->max_segs = 52; | 801 | mmc->max_segs = 52; |
767 | mmc->max_blk_size = 1 << 0xf; | 802 | mmc->max_blk_size = 1 << 0xf; |
768 | mmc->max_blk_count = (ssp_is_old()) ? 0xff : 0xffffff; | 803 | mmc->max_blk_count = (ssp_is_old(host)) ? 0xff : 0xffffff; |
769 | mmc->max_req_size = (ssp_is_old()) ? 0xffff : 0xffffffff; | 804 | mmc->max_req_size = (ssp_is_old(host)) ? 0xffff : 0xffffffff; |
770 | mmc->max_seg_size = dma_get_max_seg_size(host->dmach->device->dev); | 805 | mmc->max_seg_size = dma_get_max_seg_size(host->dmach->device->dev); |
771 | 806 | ||
772 | platform_set_drvdata(pdev, mmc); | 807 | platform_set_drvdata(pdev, mmc); |
773 | 808 | ||
774 | ret = request_irq(host->irq, mxs_mmc_irq_handler, 0, DRIVER_NAME, host); | 809 | ret = devm_request_irq(&pdev->dev, irq_err, mxs_mmc_irq_handler, 0, |
810 | DRIVER_NAME, host); | ||
775 | if (ret) | 811 | if (ret) |
776 | goto out_free_dma; | 812 | goto out_free_dma; |
777 | 813 | ||
@@ -779,26 +815,20 @@ static int mxs_mmc_probe(struct platform_device *pdev) | |||
779 | 815 | ||
780 | ret = mmc_add_host(mmc); | 816 | ret = mmc_add_host(mmc); |
781 | if (ret) | 817 | if (ret) |
782 | goto out_free_irq; | 818 | goto out_free_dma; |
783 | 819 | ||
784 | dev_info(mmc_dev(host->mmc), "initialized\n"); | 820 | dev_info(mmc_dev(host->mmc), "initialized\n"); |
785 | 821 | ||
786 | return 0; | 822 | return 0; |
787 | 823 | ||
788 | out_free_irq: | ||
789 | free_irq(host->irq, host); | ||
790 | out_free_dma: | 824 | out_free_dma: |
791 | if (host->dmach) | 825 | if (host->dmach) |
792 | dma_release_channel(host->dmach); | 826 | dma_release_channel(host->dmach); |
793 | out_clk_put: | 827 | out_clk_put: |
794 | clk_disable_unprepare(host->clk); | 828 | clk_disable_unprepare(host->clk); |
795 | clk_put(host->clk); | 829 | clk_put(host->clk); |
796 | out_iounmap: | ||
797 | iounmap(host->base); | ||
798 | out_mmc_free: | 830 | out_mmc_free: |
799 | mmc_free_host(mmc); | 831 | mmc_free_host(mmc); |
800 | out_release_mem: | ||
801 | release_mem_region(iores->start, resource_size(iores)); | ||
802 | return ret; | 832 | return ret; |
803 | } | 833 | } |
804 | 834 | ||
@@ -806,12 +836,9 @@ static int mxs_mmc_remove(struct platform_device *pdev) | |||
806 | { | 836 | { |
807 | struct mmc_host *mmc = platform_get_drvdata(pdev); | 837 | struct mmc_host *mmc = platform_get_drvdata(pdev); |
808 | struct mxs_mmc_host *host = mmc_priv(mmc); | 838 | struct mxs_mmc_host *host = mmc_priv(mmc); |
809 | struct resource *res = host->res; | ||
810 | 839 | ||
811 | mmc_remove_host(mmc); | 840 | mmc_remove_host(mmc); |
812 | 841 | ||
813 | free_irq(host->irq, host); | ||
814 | |||
815 | platform_set_drvdata(pdev, NULL); | 842 | platform_set_drvdata(pdev, NULL); |
816 | 843 | ||
817 | if (host->dmach) | 844 | if (host->dmach) |
@@ -820,12 +847,8 @@ static int mxs_mmc_remove(struct platform_device *pdev) | |||
820 | clk_disable_unprepare(host->clk); | 847 | clk_disable_unprepare(host->clk); |
821 | clk_put(host->clk); | 848 | clk_put(host->clk); |
822 | 849 | ||
823 | iounmap(host->base); | ||
824 | |||
825 | mmc_free_host(mmc); | 850 | mmc_free_host(mmc); |
826 | 851 | ||
827 | release_mem_region(res->start, resource_size(res)); | ||
828 | |||
829 | return 0; | 852 | return 0; |
830 | } | 853 | } |
831 | 854 | ||
@@ -865,11 +888,13 @@ static const struct dev_pm_ops mxs_mmc_pm_ops = { | |||
865 | static struct platform_driver mxs_mmc_driver = { | 888 | static struct platform_driver mxs_mmc_driver = { |
866 | .probe = mxs_mmc_probe, | 889 | .probe = mxs_mmc_probe, |
867 | .remove = mxs_mmc_remove, | 890 | .remove = mxs_mmc_remove, |
891 | .id_table = mxs_mmc_ids, | ||
868 | .driver = { | 892 | .driver = { |
869 | .name = DRIVER_NAME, | 893 | .name = DRIVER_NAME, |
870 | .owner = THIS_MODULE, | 894 | .owner = THIS_MODULE, |
871 | #ifdef CONFIG_PM | 895 | #ifdef CONFIG_PM |
872 | .pm = &mxs_mmc_pm_ops, | 896 | .pm = &mxs_mmc_pm_ops, |
897 | .of_match_table = mxs_mmc_dt_ids, | ||
873 | #endif | 898 | #endif |
874 | }, | 899 | }, |
875 | }; | 900 | }; |
diff --git a/include/linux/fsl/mxs-dma.h b/include/linux/fsl/mxs-dma.h index 203d7c4a3e11..55d870238399 100644 --- a/include/linux/fsl/mxs-dma.h +++ b/include/linux/fsl/mxs-dma.h | |||
@@ -15,14 +15,6 @@ struct mxs_dma_data { | |||
15 | int chan_irq; | 15 | int chan_irq; |
16 | }; | 16 | }; |
17 | 17 | ||
18 | static inline int mxs_dma_is_apbh(struct dma_chan *chan) | 18 | extern int mxs_dma_is_apbh(struct dma_chan *chan); |
19 | { | 19 | extern int mxs_dma_is_apbx(struct dma_chan *chan); |
20 | return !strcmp(dev_name(chan->device->dev), "mxs-dma-apbh"); | ||
21 | } | ||
22 | |||
23 | static inline int mxs_dma_is_apbx(struct dma_chan *chan) | ||
24 | { | ||
25 | return !strcmp(dev_name(chan->device->dev), "mxs-dma-apbx"); | ||
26 | } | ||
27 | |||
28 | #endif /* __MACH_MXS_DMA_H__ */ | 20 | #endif /* __MACH_MXS_DMA_H__ */ |
diff --git a/arch/arm/mach-mxs/include/mach/mmc.h b/include/linux/mmc/mxs-mmc.h index 211547a05564..7c2ad3a7f2f3 100644 --- a/arch/arm/mach-mxs/include/mach/mmc.h +++ b/include/linux/mmc/mxs-mmc.h | |||
@@ -6,8 +6,8 @@ | |||
6 | * published by the Free Software Foundation. | 6 | * published by the Free Software Foundation. |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #ifndef __MACH_MXS_MMC_H__ | 9 | #ifndef __LINUX_MMC_MXS_MMC_H__ |
10 | #define __MACH_MXS_MMC_H__ | 10 | #define __LINUX_MMC_MXS_MMC_H__ |
11 | 11 | ||
12 | struct mxs_mmc_platform_data { | 12 | struct mxs_mmc_platform_data { |
13 | int wp_gpio; /* write protect pin */ | 13 | int wp_gpio; /* write protect pin */ |
@@ -15,4 +15,5 @@ struct mxs_mmc_platform_data { | |||
15 | #define SLOTF_4_BIT_CAPABLE (1 << 0) | 15 | #define SLOTF_4_BIT_CAPABLE (1 << 0) |
16 | #define SLOTF_8_BIT_CAPABLE (1 << 1) | 16 | #define SLOTF_8_BIT_CAPABLE (1 << 1) |
17 | }; | 17 | }; |
18 | #endif /* __MACH_MXS_MMC_H__ */ | 18 | |
19 | #endif /* __LINUX_MMC_MXS_MMC_H__ */ | ||