diff options
32 files changed, 381 insertions, 79 deletions
diff --git a/Documentation/devicetree/bindings/arm/omap/omap.txt b/Documentation/devicetree/bindings/arm/omap/omap.txt index 808c1543b0f8..34dc40cffdfd 100644 --- a/Documentation/devicetree/bindings/arm/omap/omap.txt +++ b/Documentation/devicetree/bindings/arm/omap/omap.txt | |||
@@ -31,6 +31,59 @@ spinlock@1 { | |||
31 | ti,hwmods = "spinlock"; | 31 | ti,hwmods = "spinlock"; |
32 | }; | 32 | }; |
33 | 33 | ||
34 | SoC Type (optional): | ||
35 | |||
36 | - General Purpose devices | ||
37 | compatible = "ti,gp" | ||
38 | - High Security devices | ||
39 | compatible = "ti,hs" | ||
40 | |||
41 | SoC Families: | ||
42 | |||
43 | - OMAP2 generic - defaults to OMAP2420 | ||
44 | compatible = "ti,omap2" | ||
45 | - OMAP3 generic - defaults to OMAP3430 | ||
46 | compatible = "ti,omap3" | ||
47 | - OMAP4 generic - defaults to OMAP4430 | ||
48 | compatible = "ti,omap4" | ||
49 | - OMAP5 generic - defaults to OMAP5430 | ||
50 | compatible = "ti,omap5" | ||
51 | - DRA7 generic - defaults to DRA742 | ||
52 | compatible = "ti,dra7" | ||
53 | - AM43x generic - defaults to AM4372 | ||
54 | compatible = "ti,am43" | ||
55 | |||
56 | SoCs: | ||
57 | |||
58 | - OMAP2420 | ||
59 | compatible = "ti,omap2420", "ti,omap2" | ||
60 | - OMAP2430 | ||
61 | compatible = "ti,omap2430", "ti,omap2" | ||
62 | |||
63 | - OMAP3430 | ||
64 | compatible = "ti,omap3430", "ti,omap3" | ||
65 | - AM3517 | ||
66 | compatible = "ti,am3517", "ti,omap3" | ||
67 | - OMAP3630 | ||
68 | compatible = "ti,omap36xx", "ti,omap3" | ||
69 | - AM33xx | ||
70 | compatible = "ti,am33xx", "ti,omap3" | ||
71 | |||
72 | - OMAP4430 | ||
73 | compatible = "ti,omap4430", "ti,omap4" | ||
74 | - OMAP4460 | ||
75 | compatible = "ti,omap4460", "ti,omap4" | ||
76 | |||
77 | - OMAP5430 | ||
78 | compatible = "ti,omap5430", "ti,omap5" | ||
79 | - OMAP5432 | ||
80 | compatible = "ti,omap5432", "ti,omap5" | ||
81 | |||
82 | - DRA742 | ||
83 | compatible = "ti,dra7xx", "ti,dra7" | ||
84 | |||
85 | - AM4372 | ||
86 | compatible = "ti,am4372", "ti,am43" | ||
34 | 87 | ||
35 | Boards: | 88 | Boards: |
36 | 89 | ||
diff --git a/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt b/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt index 82e8f6f17179..582b4652a82a 100644 --- a/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt +++ b/Documentation/devicetree/bindings/i2c/i2c-mv64xxx.txt | |||
@@ -5,7 +5,11 @@ Required properties : | |||
5 | 5 | ||
6 | - reg : Offset and length of the register set for the device | 6 | - reg : Offset and length of the register set for the device |
7 | - compatible : Should be "marvell,mv64xxx-i2c" or "allwinner,sun4i-i2c" | 7 | - compatible : Should be "marvell,mv64xxx-i2c" or "allwinner,sun4i-i2c" |
8 | or "marvell,mv78230-i2c" | 8 | or "marvell,mv78230-i2c" or "marvell,mv78230-a0-i2c" |
9 | Note: Only use "marvell,mv78230-a0-i2c" for a very rare, | ||
10 | initial version of the SoC which had broken offload | ||
11 | support. Linux auto-detects this and sets it | ||
12 | appropriately. | ||
9 | - interrupts : The interrupt number | 13 | - interrupts : The interrupt number |
10 | 14 | ||
11 | Optional properties : | 15 | Optional properties : |
diff --git a/arch/arm/boot/dts/exynos4210-origen.dts b/arch/arm/boot/dts/exynos4210-origen.dts index 1a12fb23767c..2aa13cb3bbed 100644 --- a/arch/arm/boot/dts/exynos4210-origen.dts +++ b/arch/arm/boot/dts/exynos4210-origen.dts | |||
@@ -313,7 +313,7 @@ | |||
313 | display-timings { | 313 | display-timings { |
314 | native-mode = <&timing0>; | 314 | native-mode = <&timing0>; |
315 | timing0: timing { | 315 | timing0: timing { |
316 | clock-frequency = <50000>; | 316 | clock-frequency = <47500000>; |
317 | hactive = <1024>; | 317 | hactive = <1024>; |
318 | vactive = <600>; | 318 | vactive = <600>; |
319 | hfront-porch = <64>; | 319 | hfront-porch = <64>; |
diff --git a/arch/arm/boot/dts/exynos4412-odroidx.dts b/arch/arm/boot/dts/exynos4412-odroidx.dts index 46c678ee119c..8aad5f72ced7 100644 --- a/arch/arm/boot/dts/exynos4412-odroidx.dts +++ b/arch/arm/boot/dts/exynos4412-odroidx.dts | |||
@@ -38,9 +38,7 @@ | |||
38 | }; | 38 | }; |
39 | }; | 39 | }; |
40 | 40 | ||
41 | mshc@12550000 { | 41 | mmc@12550000 { |
42 | #address-cells = <1>; | ||
43 | #size-cells = <0>; | ||
44 | pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>; | 42 | pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>; |
45 | pinctrl-names = "default"; | 43 | pinctrl-names = "default"; |
46 | vmmc-supply = <&ldo20_reg &buck8_reg>; | 44 | vmmc-supply = <&ldo20_reg &buck8_reg>; |
@@ -49,7 +47,6 @@ | |||
49 | num-slots = <1>; | 47 | num-slots = <1>; |
50 | supports-highspeed; | 48 | supports-highspeed; |
51 | broken-cd; | 49 | broken-cd; |
52 | fifo-depth = <0x80>; | ||
53 | card-detect-delay = <200>; | 50 | card-detect-delay = <200>; |
54 | samsung,dw-mshc-ciu-div = <3>; | 51 | samsung,dw-mshc-ciu-div = <3>; |
55 | samsung,dw-mshc-sdr-timing = <2 3>; | 52 | samsung,dw-mshc-sdr-timing = <2 3>; |
diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index d65984c440f6..6bc053924e9e 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts | |||
@@ -122,9 +122,7 @@ | |||
122 | status = "okay"; | 122 | status = "okay"; |
123 | }; | 123 | }; |
124 | 124 | ||
125 | mshc@12550000 { | 125 | mmc@12550000 { |
126 | #address-cells = <1>; | ||
127 | #size-cells = <0>; | ||
128 | pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>; | 126 | pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>; |
129 | pinctrl-names = "default"; | 127 | pinctrl-names = "default"; |
130 | status = "okay"; | 128 | status = "okay"; |
@@ -132,7 +130,6 @@ | |||
132 | num-slots = <1>; | 130 | num-slots = <1>; |
133 | supports-highspeed; | 131 | supports-highspeed; |
134 | broken-cd; | 132 | broken-cd; |
135 | fifo-depth = <0x80>; | ||
136 | card-detect-delay = <200>; | 133 | card-detect-delay = <200>; |
137 | samsung,dw-mshc-ciu-div = <3>; | 134 | samsung,dw-mshc-ciu-div = <3>; |
138 | samsung,dw-mshc-sdr-timing = <2 3>; | 135 | samsung,dw-mshc-sdr-timing = <2 3>; |
@@ -159,7 +156,7 @@ | |||
159 | display-timings { | 156 | display-timings { |
160 | native-mode = <&timing0>; | 157 | native-mode = <&timing0>; |
161 | timing0: timing { | 158 | timing0: timing { |
162 | clock-frequency = <50000>; | 159 | clock-frequency = <47500000>; |
163 | hactive = <1024>; | 160 | hactive = <1024>; |
164 | vactive = <600>; | 161 | vactive = <600>; |
165 | hfront-porch = <64>; | 162 | hfront-porch = <64>; |
diff --git a/arch/arm/boot/dts/exynos4412-trats2.dts b/arch/arm/boot/dts/exynos4412-trats2.dts index fb7b9ae5f399..890ad275cb85 100644 --- a/arch/arm/boot/dts/exynos4412-trats2.dts +++ b/arch/arm/boot/dts/exynos4412-trats2.dts | |||
@@ -442,13 +442,25 @@ | |||
442 | }; | 442 | }; |
443 | }; | 443 | }; |
444 | 444 | ||
445 | sdhci@12510000 { | 445 | mmc@12550000 { |
446 | bus-width = <8>; | 446 | num-slots = <1>; |
447 | supports-highspeed; | ||
448 | broken-cd; | ||
447 | non-removable; | 449 | non-removable; |
448 | pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus8>; | 450 | card-detect-delay = <200>; |
449 | pinctrl-names = "default"; | ||
450 | vmmc-supply = <&vemmc_reg>; | 451 | vmmc-supply = <&vemmc_reg>; |
452 | clock-frequency = <400000000>; | ||
453 | samsung,dw-mshc-ciu-div = <0>; | ||
454 | samsung,dw-mshc-sdr-timing = <2 3>; | ||
455 | samsung,dw-mshc-ddr-timing = <1 2>; | ||
456 | pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>; | ||
457 | pinctrl-names = "default"; | ||
451 | status = "okay"; | 458 | status = "okay"; |
459 | |||
460 | slot@0 { | ||
461 | reg = <0>; | ||
462 | bus-width = <8>; | ||
463 | }; | ||
452 | }; | 464 | }; |
453 | 465 | ||
454 | serial@13800000 { | 466 | serial@13800000 { |
diff --git a/arch/arm/boot/dts/exynos4412.dtsi b/arch/arm/boot/dts/exynos4412.dtsi index e743e677a9e2..85812bd95a86 100644 --- a/arch/arm/boot/dts/exynos4412.dtsi +++ b/arch/arm/boot/dts/exynos4412.dtsi | |||
@@ -61,11 +61,4 @@ | |||
61 | }; | 61 | }; |
62 | }; | 62 | }; |
63 | 63 | ||
64 | mshc@12550000 { | ||
65 | compatible = "samsung,exynos4412-dw-mshc"; | ||
66 | reg = <0x12550000 0x1000>; | ||
67 | interrupts = <0 77 0>; | ||
68 | #address-cells = <1>; | ||
69 | #size-cells = <0>; | ||
70 | }; | ||
71 | }; | 64 | }; |
diff --git a/arch/arm/boot/dts/exynos4x12.dtsi b/arch/arm/boot/dts/exynos4x12.dtsi index ad531fe6ab95..1917c829e64e 100644 --- a/arch/arm/boot/dts/exynos4x12.dtsi +++ b/arch/arm/boot/dts/exynos4x12.dtsi | |||
@@ -28,6 +28,7 @@ | |||
28 | pinctrl3 = &pinctrl_3; | 28 | pinctrl3 = &pinctrl_3; |
29 | fimc-lite0 = &fimc_lite_0; | 29 | fimc-lite0 = &fimc_lite_0; |
30 | fimc-lite1 = &fimc_lite_1; | 30 | fimc-lite1 = &fimc_lite_1; |
31 | mshc0 = &mshc_0; | ||
31 | }; | 32 | }; |
32 | 33 | ||
33 | pd_isp: isp-power-domain@10023CA0 { | 34 | pd_isp: isp-power-domain@10023CA0 { |
@@ -176,4 +177,16 @@ | |||
176 | }; | 177 | }; |
177 | }; | 178 | }; |
178 | }; | 179 | }; |
180 | |||
181 | mshc_0: mmc@12550000 { | ||
182 | compatible = "samsung,exynos4412-dw-mshc"; | ||
183 | reg = <0x12550000 0x1000>; | ||
184 | interrupts = <0 77 0>; | ||
185 | #address-cells = <1>; | ||
186 | #size-cells = <0>; | ||
187 | fifo-depth = <0x80>; | ||
188 | clocks = <&clock 301>, <&clock 149>; | ||
189 | clock-names = "biu", "ciu"; | ||
190 | status = "disabled"; | ||
191 | }; | ||
179 | }; | 192 | }; |
diff --git a/arch/arm/boot/dts/exynos5250-arndale.dts b/arch/arm/boot/dts/exynos5250-arndale.dts index 684527087aa4..bbfb23f942e1 100644 --- a/arch/arm/boot/dts/exynos5250-arndale.dts +++ b/arch/arm/boot/dts/exynos5250-arndale.dts | |||
@@ -302,11 +302,13 @@ | |||
302 | buck7_reg: BUCK7 { | 302 | buck7_reg: BUCK7 { |
303 | regulator-name = "PVDD_BUCK7"; | 303 | regulator-name = "PVDD_BUCK7"; |
304 | regulator-always-on; | 304 | regulator-always-on; |
305 | op_mode = <1>; | ||
305 | }; | 306 | }; |
306 | 307 | ||
307 | buck8_reg: BUCK8 { | 308 | buck8_reg: BUCK8 { |
308 | regulator-name = "PVDD_BUCK8"; | 309 | regulator-name = "PVDD_BUCK8"; |
309 | regulator-always-on; | 310 | regulator-always-on; |
311 | op_mode = <1>; | ||
310 | }; | 312 | }; |
311 | 313 | ||
312 | buck9_reg: BUCK9 { | 314 | buck9_reg: BUCK9 { |
diff --git a/arch/arm/boot/dts/exynos5250-snow.dts b/arch/arm/boot/dts/exynos5250-snow.dts index fd711e245e8d..c65f52a6dcea 100644 --- a/arch/arm/boot/dts/exynos5250-snow.dts +++ b/arch/arm/boot/dts/exynos5250-snow.dts | |||
@@ -85,7 +85,7 @@ | |||
85 | keypad,num-rows = <8>; | 85 | keypad,num-rows = <8>; |
86 | keypad,num-columns = <13>; | 86 | keypad,num-columns = <13>; |
87 | google,needs-ghost-filter; | 87 | google,needs-ghost-filter; |
88 | linux,keymap = <0x0001003a /* CAPSLK */ | 88 | linux,keymap = <0x0001007d /* L_META */ |
89 | 0x0002003b /* F1 */ | 89 | 0x0002003b /* F1 */ |
90 | 0x00030030 /* B */ | 90 | 0x00030030 /* B */ |
91 | 0x00040044 /* F10 */ | 91 | 0x00040044 /* F10 */ |
@@ -130,6 +130,7 @@ | |||
130 | 0x04060024 /* J */ | 130 | 0x04060024 /* J */ |
131 | 0x04080027 /* ; */ | 131 | 0x04080027 /* ; */ |
132 | 0x04090026 /* L */ | 132 | 0x04090026 /* L */ |
133 | 0x040a002b /* \ */ | ||
133 | 0x040b001c /* ENTER */ | 134 | 0x040b001c /* ENTER */ |
134 | 135 | ||
135 | 0x0501002c /* Z */ | 136 | 0x0501002c /* Z */ |
diff --git a/arch/arm/boot/dts/exynos5250.dtsi b/arch/arm/boot/dts/exynos5250.dtsi index 177becde7a26..6feaa1c454fa 100644 --- a/arch/arm/boot/dts/exynos5250.dtsi +++ b/arch/arm/boot/dts/exynos5250.dtsi | |||
@@ -60,11 +60,13 @@ | |||
60 | device_type = "cpu"; | 60 | device_type = "cpu"; |
61 | compatible = "arm,cortex-a15"; | 61 | compatible = "arm,cortex-a15"; |
62 | reg = <0>; | 62 | reg = <0>; |
63 | clock-frequency = <1700000000>; | ||
63 | }; | 64 | }; |
64 | cpu@1 { | 65 | cpu@1 { |
65 | device_type = "cpu"; | 66 | device_type = "cpu"; |
66 | compatible = "arm,cortex-a15"; | 67 | compatible = "arm,cortex-a15"; |
67 | reg = <1>; | 68 | reg = <1>; |
69 | clock-frequency = <1700000000>; | ||
68 | }; | 70 | }; |
69 | }; | 71 | }; |
70 | 72 | ||
diff --git a/arch/arm/boot/dts/exynos5420-pinctrl.dtsi b/arch/arm/boot/dts/exynos5420-pinctrl.dtsi index e695aba5f73c..e62c8eb57438 100644 --- a/arch/arm/boot/dts/exynos5420-pinctrl.dtsi +++ b/arch/arm/boot/dts/exynos5420-pinctrl.dtsi | |||
@@ -64,7 +64,7 @@ | |||
64 | samsung,pins = "gpx0-7"; | 64 | samsung,pins = "gpx0-7"; |
65 | samsung,pin-function = <3>; | 65 | samsung,pin-function = <3>; |
66 | samsung,pin-pud = <0>; | 66 | samsung,pin-pud = <0>; |
67 | samaung,pin-drv = <0>; | 67 | samsung,pin-drv = <0>; |
68 | }; | 68 | }; |
69 | }; | 69 | }; |
70 | 70 | ||
diff --git a/arch/arm/boot/dts/qcom-msm8660-surf.dts b/arch/arm/boot/dts/qcom-msm8660-surf.dts index 386d42870215..1187185cf25b 100644 --- a/arch/arm/boot/dts/qcom-msm8660-surf.dts +++ b/arch/arm/boot/dts/qcom-msm8660-surf.dts | |||
@@ -28,11 +28,11 @@ | |||
28 | 28 | ||
29 | msmgpio: gpio@800000 { | 29 | msmgpio: gpio@800000 { |
30 | compatible = "qcom,msm-gpio"; | 30 | compatible = "qcom,msm-gpio"; |
31 | reg = <0x00800000 0x1000>; | 31 | reg = <0x00800000 0x4000>; |
32 | gpio-controller; | 32 | gpio-controller; |
33 | #gpio-cells = <2>; | 33 | #gpio-cells = <2>; |
34 | ngpio = <173>; | 34 | ngpio = <173>; |
35 | interrupts = <0 32 0x4>; | 35 | interrupts = <0 16 0x4>; |
36 | interrupt-controller; | 36 | interrupt-controller; |
37 | #interrupt-cells = <2>; | 37 | #interrupt-cells = <2>; |
38 | }; | 38 | }; |
diff --git a/arch/arm/boot/dts/qcom-msm8960-cdp.dts b/arch/arm/boot/dts/qcom-msm8960-cdp.dts index 93e9f7e0b7ad..6ccbac77931e 100644 --- a/arch/arm/boot/dts/qcom-msm8960-cdp.dts +++ b/arch/arm/boot/dts/qcom-msm8960-cdp.dts | |||
@@ -31,7 +31,7 @@ | |||
31 | gpio-controller; | 31 | gpio-controller; |
32 | #gpio-cells = <2>; | 32 | #gpio-cells = <2>; |
33 | ngpio = <150>; | 33 | ngpio = <150>; |
34 | interrupts = <0 32 0x4>; | 34 | interrupts = <0 16 0x4>; |
35 | interrupt-controller; | 35 | interrupt-controller; |
36 | #interrupt-cells = <2>; | 36 | #interrupt-cells = <2>; |
37 | reg = <0x800000 0x4000>; | 37 | reg = <0x800000 0x4000>; |
diff --git a/arch/arm/boot/dts/ste-u300.dts b/arch/arm/boot/dts/ste-u300.dts index 8a1032c1ffc9..a9da4800daf0 100644 --- a/arch/arm/boot/dts/ste-u300.dts +++ b/arch/arm/boot/dts/ste-u300.dts | |||
@@ -307,7 +307,7 @@ | |||
307 | clocks = <&i2c0_clk>; | 307 | clocks = <&i2c0_clk>; |
308 | #address-cells = <1>; | 308 | #address-cells = <1>; |
309 | #size-cells = <0>; | 309 | #size-cells = <0>; |
310 | ab3100: ab3100@0x48 { | 310 | ab3100: ab3100@48 { |
311 | compatible = "stericsson,ab3100"; | 311 | compatible = "stericsson,ab3100"; |
312 | reg = <0x48>; | 312 | reg = <0x48>; |
313 | interrupt-parent = <&vica>; | 313 | interrupt-parent = <&vica>; |
@@ -385,10 +385,10 @@ | |||
385 | clocks = <&i2c1_clk>; | 385 | clocks = <&i2c1_clk>; |
386 | #address-cells = <1>; | 386 | #address-cells = <1>; |
387 | #size-cells = <0>; | 387 | #size-cells = <0>; |
388 | fwcam0: fwcam@0x10 { | 388 | fwcam0: fwcam@10 { |
389 | reg = <0x10>; | 389 | reg = <0x10>; |
390 | }; | 390 | }; |
391 | fwcam1: fwcam@0x5d { | 391 | fwcam1: fwcam@5d { |
392 | reg = <0x5d>; | 392 | reg = <0x5d>; |
393 | }; | 393 | }; |
394 | }; | 394 | }; |
diff --git a/arch/arm/configs/omap2plus_defconfig b/arch/arm/configs/omap2plus_defconfig index bfa80a11e8c7..3a0b53d225e7 100644 --- a/arch/arm/configs/omap2plus_defconfig +++ b/arch/arm/configs/omap2plus_defconfig | |||
@@ -208,6 +208,8 @@ CONFIG_SND_DEBUG=y | |||
208 | CONFIG_SND_USB_AUDIO=m | 208 | CONFIG_SND_USB_AUDIO=m |
209 | CONFIG_SND_SOC=m | 209 | CONFIG_SND_SOC=m |
210 | CONFIG_SND_OMAP_SOC=m | 210 | CONFIG_SND_OMAP_SOC=m |
211 | CONFIG_SND_AM33XX_SOC_EVM=m | ||
212 | CONFIG_SND_DAVINCI_SOC=m | ||
211 | CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m | 213 | CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m |
212 | CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m | 214 | CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m |
213 | CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m | 215 | CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m |
@@ -222,6 +224,7 @@ CONFIG_USB_TEST=y | |||
222 | CONFIG_NOP_USB_XCEIV=y | 224 | CONFIG_NOP_USB_XCEIV=y |
223 | CONFIG_OMAP_USB2=y | 225 | CONFIG_OMAP_USB2=y |
224 | CONFIG_OMAP_USB3=y | 226 | CONFIG_OMAP_USB3=y |
227 | CONFIG_AM335X_PHY_USB=y | ||
225 | CONFIG_USB_GADGET=y | 228 | CONFIG_USB_GADGET=y |
226 | CONFIG_USB_GADGET_DEBUG=y | 229 | CONFIG_USB_GADGET_DEBUG=y |
227 | CONFIG_USB_GADGET_DEBUG_FILES=y | 230 | CONFIG_USB_GADGET_DEBUG_FILES=y |
diff --git a/arch/arm/mach-at91/sam9_smc.c b/arch/arm/mach-at91/sam9_smc.c index 99a0a1d2b7dc..b26156bf15db 100644 --- a/arch/arm/mach-at91/sam9_smc.c +++ b/arch/arm/mach-at91/sam9_smc.c | |||
@@ -101,7 +101,7 @@ static void sam9_smc_cs_read(void __iomem *base, | |||
101 | /* Pulse register */ | 101 | /* Pulse register */ |
102 | val = __raw_readl(base + AT91_SMC_PULSE); | 102 | val = __raw_readl(base + AT91_SMC_PULSE); |
103 | 103 | ||
104 | config->nwe_setup = val & AT91_SMC_NWEPULSE; | 104 | config->nwe_pulse = val & AT91_SMC_NWEPULSE; |
105 | config->ncs_write_pulse = (val & AT91_SMC_NCS_WRPULSE) >> 8; | 105 | config->ncs_write_pulse = (val & AT91_SMC_NCS_WRPULSE) >> 8; |
106 | config->nrd_pulse = (val & AT91_SMC_NRDPULSE) >> 16; | 106 | config->nrd_pulse = (val & AT91_SMC_NRDPULSE) >> 16; |
107 | config->ncs_read_pulse = (val & AT91_SMC_NCS_RDPULSE) >> 24; | 107 | config->ncs_read_pulse = (val & AT91_SMC_NCS_RDPULSE) >> 24; |
diff --git a/arch/arm/mach-bcm2835/Kconfig b/arch/arm/mach-bcm2835/Kconfig index 560045cafc34..d1f9612f8c15 100644 --- a/arch/arm/mach-bcm2835/Kconfig +++ b/arch/arm/mach-bcm2835/Kconfig | |||
@@ -12,4 +12,4 @@ config ARCH_BCM2835 | |||
12 | select PINCTRL_BCM2835 | 12 | select PINCTRL_BCM2835 |
13 | help | 13 | help |
14 | This enables support for the Broadcom BCM2835 SoC. This SoC is | 14 | This enables support for the Broadcom BCM2835 SoC. This SoC is |
15 | use in the Raspberry Pi, and Roku 2 devices. | 15 | used in the Raspberry Pi and Roku 2 devices. |
diff --git a/arch/arm/mach-msm/board-trout.c b/arch/arm/mach-msm/board-trout.c index ccf6621bc664..015d544aa017 100644 --- a/arch/arm/mach-msm/board-trout.c +++ b/arch/arm/mach-msm/board-trout.c | |||
@@ -13,6 +13,7 @@ | |||
13 | * GNU General Public License for more details. | 13 | * GNU General Public License for more details. |
14 | * | 14 | * |
15 | */ | 15 | */ |
16 | #define pr_fmt(fmt) "%s: " fmt, __func__ | ||
16 | 17 | ||
17 | #include <linux/kernel.h> | 18 | #include <linux/kernel.h> |
18 | #include <linux/init.h> | 19 | #include <linux/init.h> |
@@ -68,12 +69,11 @@ static void __init trout_init(void) | |||
68 | 69 | ||
69 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 70 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
70 | 71 | ||
71 | #ifdef CONFIG_MMC | 72 | if (IS_ENABLED(CONFIG_MMC)) { |
72 | rc = trout_init_mmc(system_rev); | 73 | rc = trout_init_mmc(system_rev); |
73 | if (rc) | 74 | if (rc) |
74 | printk(KERN_CRIT "%s: MMC init failure (%d)\n", __func__, rc); | 75 | pr_crit("MMC init failure (%d)\n", rc); |
75 | #endif | 76 | } |
76 | |||
77 | } | 77 | } |
78 | 78 | ||
79 | static struct map_desc trout_io_desc[] __initdata = { | 79 | static struct map_desc trout_io_desc[] __initdata = { |
diff --git a/arch/arm/mach-mvebu/Makefile b/arch/arm/mach-mvebu/Makefile index 2d04f0e21870..878aebe98dcc 100644 --- a/arch/arm/mach-mvebu/Makefile +++ b/arch/arm/mach-mvebu/Makefile | |||
@@ -3,7 +3,7 @@ ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \ | |||
3 | 3 | ||
4 | AFLAGS_coherency_ll.o := -Wa,-march=armv7-a | 4 | AFLAGS_coherency_ll.o := -Wa,-march=armv7-a |
5 | 5 | ||
6 | obj-y += system-controller.o | 6 | obj-y += system-controller.o mvebu-soc-id.o |
7 | obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o | 7 | obj-$(CONFIG_MACH_ARMADA_370_XP) += armada-370-xp.o |
8 | obj-$(CONFIG_ARCH_MVEBU) += coherency.o coherency_ll.o pmsu.o | 8 | obj-$(CONFIG_ARCH_MVEBU) += coherency.o coherency_ll.o pmsu.o |
9 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o | 9 | obj-$(CONFIG_SMP) += platsmp.o headsmp.o |
diff --git a/arch/arm/mach-mvebu/armada-370-xp.c b/arch/arm/mach-mvebu/armada-370-xp.c index e2acff98e750..f6c9d1d85c14 100644 --- a/arch/arm/mach-mvebu/armada-370-xp.c +++ b/arch/arm/mach-mvebu/armada-370-xp.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/clocksource.h> | 21 | #include <linux/clocksource.h> |
22 | #include <linux/dma-mapping.h> | 22 | #include <linux/dma-mapping.h> |
23 | #include <linux/mbus.h> | 23 | #include <linux/mbus.h> |
24 | #include <linux/slab.h> | ||
24 | #include <asm/hardware/cache-l2x0.h> | 25 | #include <asm/hardware/cache-l2x0.h> |
25 | #include <asm/mach/arch.h> | 26 | #include <asm/mach/arch.h> |
26 | #include <asm/mach/map.h> | 27 | #include <asm/mach/map.h> |
@@ -28,6 +29,7 @@ | |||
28 | #include "armada-370-xp.h" | 29 | #include "armada-370-xp.h" |
29 | #include "common.h" | 30 | #include "common.h" |
30 | #include "coherency.h" | 31 | #include "coherency.h" |
32 | #include "mvebu-soc-id.h" | ||
31 | 33 | ||
32 | static void __init armada_370_xp_map_io(void) | 34 | static void __init armada_370_xp_map_io(void) |
33 | { | 35 | { |
@@ -45,8 +47,38 @@ static void __init armada_370_xp_timer_and_clk_init(void) | |||
45 | #endif | 47 | #endif |
46 | } | 48 | } |
47 | 49 | ||
50 | static void __init i2c_quirk(void) | ||
51 | { | ||
52 | struct device_node *np; | ||
53 | u32 dev, rev; | ||
54 | |||
55 | /* | ||
56 | * Only revisons more recent than A0 support the offload | ||
57 | * mechanism. We can exit only if we are sure that we can | ||
58 | * get the SoC revision and it is more recent than A0. | ||
59 | */ | ||
60 | if (mvebu_get_soc_id(&rev, &dev) == 0 && dev > MV78XX0_A0_REV) | ||
61 | return; | ||
62 | |||
63 | for_each_compatible_node(np, NULL, "marvell,mv78230-i2c") { | ||
64 | struct property *new_compat; | ||
65 | |||
66 | new_compat = kzalloc(sizeof(*new_compat), GFP_KERNEL); | ||
67 | |||
68 | new_compat->name = kstrdup("compatible", GFP_KERNEL); | ||
69 | new_compat->length = sizeof("marvell,mv78230-a0-i2c"); | ||
70 | new_compat->value = kstrdup("marvell,mv78230-a0-i2c", | ||
71 | GFP_KERNEL); | ||
72 | |||
73 | of_update_property(np, new_compat); | ||
74 | } | ||
75 | return; | ||
76 | } | ||
77 | |||
48 | static void __init armada_370_xp_dt_init(void) | 78 | static void __init armada_370_xp_dt_init(void) |
49 | { | 79 | { |
80 | if (of_machine_is_compatible("plathome,openblocks-ax3-4")) | ||
81 | i2c_quirk(); | ||
50 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 82 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
51 | } | 83 | } |
52 | 84 | ||
diff --git a/arch/arm/mach-mvebu/mvebu-soc-id.c b/arch/arm/mach-mvebu/mvebu-soc-id.c new file mode 100644 index 000000000000..fe4fc1cbdfaf --- /dev/null +++ b/arch/arm/mach-mvebu/mvebu-soc-id.c | |||
@@ -0,0 +1,119 @@ | |||
1 | /* | ||
2 | * ID and revision information for mvebu SoCs | ||
3 | * | ||
4 | * Copyright (C) 2014 Marvell | ||
5 | * | ||
6 | * Gregory CLEMENT <gregory.clement@free-electrons.com> | ||
7 | * | ||
8 | * This file is licensed under the terms of the GNU General Public | ||
9 | * License version 2. This program is licensed "as is" without any | ||
10 | * warranty of any kind, whether express or implied. | ||
11 | * | ||
12 | * All the mvebu SoCs have information related to their variant and | ||
13 | * revision that can be read from the PCI control register. This is | ||
14 | * done before the PCI initialization to avoid any conflict. Once the | ||
15 | * ID and revision are retrieved, the mapping is freed. | ||
16 | */ | ||
17 | |||
18 | #define pr_fmt(fmt) "mvebu-soc-id: " fmt | ||
19 | |||
20 | #include <linux/clk.h> | ||
21 | #include <linux/init.h> | ||
22 | #include <linux/io.h> | ||
23 | #include <linux/kernel.h> | ||
24 | #include <linux/of.h> | ||
25 | #include <linux/of_address.h> | ||
26 | #include "mvebu-soc-id.h" | ||
27 | |||
28 | #define PCIE_DEV_ID_OFF 0x0 | ||
29 | #define PCIE_DEV_REV_OFF 0x8 | ||
30 | |||
31 | #define SOC_ID_MASK 0xFFFF0000 | ||
32 | #define SOC_REV_MASK 0xFF | ||
33 | |||
34 | static u32 soc_dev_id; | ||
35 | static u32 soc_rev; | ||
36 | static bool is_id_valid; | ||
37 | |||
38 | static const struct of_device_id mvebu_pcie_of_match_table[] = { | ||
39 | { .compatible = "marvell,armada-xp-pcie", }, | ||
40 | { .compatible = "marvell,armada-370-pcie", }, | ||
41 | {}, | ||
42 | }; | ||
43 | |||
44 | int mvebu_get_soc_id(u32 *dev, u32 *rev) | ||
45 | { | ||
46 | if (is_id_valid) { | ||
47 | *dev = soc_dev_id; | ||
48 | *rev = soc_rev; | ||
49 | return 0; | ||
50 | } else | ||
51 | return -1; | ||
52 | } | ||
53 | |||
54 | static int __init mvebu_soc_id_init(void) | ||
55 | { | ||
56 | struct device_node *np; | ||
57 | int ret = 0; | ||
58 | void __iomem *pci_base; | ||
59 | struct clk *clk; | ||
60 | struct device_node *child; | ||
61 | |||
62 | np = of_find_matching_node(NULL, mvebu_pcie_of_match_table); | ||
63 | if (!np) | ||
64 | return ret; | ||
65 | |||
66 | /* | ||
67 | * ID and revision are available from any port, so we | ||
68 | * just pick the first one | ||
69 | */ | ||
70 | child = of_get_next_child(np, NULL); | ||
71 | if (child == NULL) { | ||
72 | pr_err("cannot get pci node\n"); | ||
73 | ret = -ENOMEM; | ||
74 | goto clk_err; | ||
75 | } | ||
76 | |||
77 | clk = of_clk_get_by_name(child, NULL); | ||
78 | if (IS_ERR(clk)) { | ||
79 | pr_err("cannot get clock\n"); | ||
80 | ret = -ENOMEM; | ||
81 | goto clk_err; | ||
82 | } | ||
83 | |||
84 | ret = clk_prepare_enable(clk); | ||
85 | if (ret) { | ||
86 | pr_err("cannot enable clock\n"); | ||
87 | goto clk_err; | ||
88 | } | ||
89 | |||
90 | pci_base = of_iomap(child, 0); | ||
91 | if (IS_ERR(pci_base)) { | ||
92 | pr_err("cannot map registers\n"); | ||
93 | ret = -ENOMEM; | ||
94 | goto res_ioremap; | ||
95 | } | ||
96 | |||
97 | /* SoC ID */ | ||
98 | soc_dev_id = readl(pci_base + PCIE_DEV_ID_OFF) >> 16; | ||
99 | |||
100 | /* SoC revision */ | ||
101 | soc_rev = readl(pci_base + PCIE_DEV_REV_OFF) & SOC_REV_MASK; | ||
102 | |||
103 | is_id_valid = true; | ||
104 | |||
105 | pr_info("MVEBU SoC ID=0x%X, Rev=0x%X\n", soc_dev_id, soc_rev); | ||
106 | |||
107 | iounmap(pci_base); | ||
108 | |||
109 | res_ioremap: | ||
110 | clk_disable_unprepare(clk); | ||
111 | |||
112 | clk_err: | ||
113 | of_node_put(child); | ||
114 | of_node_put(np); | ||
115 | |||
116 | return ret; | ||
117 | } | ||
118 | core_initcall(mvebu_soc_id_init); | ||
119 | |||
diff --git a/arch/arm/mach-mvebu/mvebu-soc-id.h b/arch/arm/mach-mvebu/mvebu-soc-id.h new file mode 100644 index 000000000000..31654252fe35 --- /dev/null +++ b/arch/arm/mach-mvebu/mvebu-soc-id.h | |||
@@ -0,0 +1,32 @@ | |||
1 | /* | ||
2 | * Marvell EBU SoC ID and revision definitions. | ||
3 | * | ||
4 | * Copyright (C) 2014 Marvell Semiconductor | ||
5 | * | ||
6 | * This file is licensed under the terms of the GNU General Public | ||
7 | * License version 2. This program is licensed "as is" without any | ||
8 | * warranty of any kind, whether express or implied. | ||
9 | */ | ||
10 | |||
11 | #ifndef __LINUX_MVEBU_SOC_ID_H | ||
12 | #define __LINUX_MVEBU_SOC_ID_H | ||
13 | |||
14 | /* Armada XP ID */ | ||
15 | #define MV78230_DEV_ID 0x7823 | ||
16 | #define MV78260_DEV_ID 0x7826 | ||
17 | #define MV78460_DEV_ID 0x7846 | ||
18 | |||
19 | /* Armada XP Revision */ | ||
20 | #define MV78XX0_A0_REV 0x1 | ||
21 | #define MV78XX0_B0_REV 0x2 | ||
22 | |||
23 | #ifdef CONFIG_ARCH_MVEBU | ||
24 | int mvebu_get_soc_id(u32 *dev, u32 *rev); | ||
25 | #else | ||
26 | static inline int mvebu_get_soc_id(u32 *dev, u32 *rev) | ||
27 | { | ||
28 | return -1; | ||
29 | } | ||
30 | #endif | ||
31 | |||
32 | #endif /* __LINUX_MVEBU_SOC_ID_H */ | ||
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c index 8d972ff18c56..8e3daa11602b 100644 --- a/arch/arm/mach-omap2/board-generic.c +++ b/arch/arm/mach-omap2/board-generic.c | |||
@@ -78,6 +78,7 @@ MACHINE_END | |||
78 | 78 | ||
79 | #ifdef CONFIG_ARCH_OMAP3 | 79 | #ifdef CONFIG_ARCH_OMAP3 |
80 | static const char *omap3_boards_compat[] __initdata = { | 80 | static const char *omap3_boards_compat[] __initdata = { |
81 | "ti,omap3430", | ||
81 | "ti,omap3", | 82 | "ti,omap3", |
82 | NULL, | 83 | NULL, |
83 | }; | 84 | }; |
@@ -173,6 +174,8 @@ MACHINE_END | |||
173 | 174 | ||
174 | #ifdef CONFIG_ARCH_OMAP4 | 175 | #ifdef CONFIG_ARCH_OMAP4 |
175 | static const char *omap4_boards_compat[] __initdata = { | 176 | static const char *omap4_boards_compat[] __initdata = { |
177 | "ti,omap4460", | ||
178 | "ti,omap4430", | ||
176 | "ti,omap4", | 179 | "ti,omap4", |
177 | NULL, | 180 | NULL, |
178 | }; | 181 | }; |
@@ -193,6 +196,8 @@ MACHINE_END | |||
193 | 196 | ||
194 | #ifdef CONFIG_SOC_OMAP5 | 197 | #ifdef CONFIG_SOC_OMAP5 |
195 | static const char *omap5_boards_compat[] __initdata = { | 198 | static const char *omap5_boards_compat[] __initdata = { |
199 | "ti,omap5432", | ||
200 | "ti,omap5430", | ||
196 | "ti,omap5", | 201 | "ti,omap5", |
197 | NULL, | 202 | NULL, |
198 | }; | 203 | }; |
@@ -213,6 +218,7 @@ MACHINE_END | |||
213 | 218 | ||
214 | #ifdef CONFIG_SOC_AM43XX | 219 | #ifdef CONFIG_SOC_AM43XX |
215 | static const char *am43_boards_compat[] __initdata = { | 220 | static const char *am43_boards_compat[] __initdata = { |
221 | "ti,am4372", | ||
216 | "ti,am43", | 222 | "ti,am43", |
217 | NULL, | 223 | NULL, |
218 | }; | 224 | }; |
@@ -230,6 +236,7 @@ MACHINE_END | |||
230 | 236 | ||
231 | #ifdef CONFIG_SOC_DRA7XX | 237 | #ifdef CONFIG_SOC_DRA7XX |
232 | static const char *dra7xx_boards_compat[] __initdata = { | 238 | static const char *dra7xx_boards_compat[] __initdata = { |
239 | "ti,dra7xx", | ||
233 | "ti,dra7", | 240 | "ti,dra7", |
234 | NULL, | 241 | NULL, |
235 | }; | 242 | }; |
diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c index 662c7fd633cc..174caecc3186 100644 --- a/arch/arm/mach-omap2/gpmc-nand.c +++ b/arch/arm/mach-omap2/gpmc-nand.c | |||
@@ -65,6 +65,22 @@ static bool gpmc_hwecc_bch_capable(enum omap_ecc ecc_opt) | |||
65 | return 1; | 65 | return 1; |
66 | } | 66 | } |
67 | 67 | ||
68 | /* This function will go away once the device-tree convertion is complete */ | ||
69 | static void gpmc_set_legacy(struct omap_nand_platform_data *gpmc_nand_data, | ||
70 | struct gpmc_settings *s) | ||
71 | { | ||
72 | /* Enable RD PIN Monitoring Reg */ | ||
73 | if (gpmc_nand_data->dev_ready) { | ||
74 | s->wait_on_read = true; | ||
75 | s->wait_on_write = true; | ||
76 | } | ||
77 | |||
78 | if (gpmc_nand_data->devsize == NAND_BUSWIDTH_16) | ||
79 | s->device_width = GPMC_DEVWIDTH_16BIT; | ||
80 | else | ||
81 | s->device_width = GPMC_DEVWIDTH_8BIT; | ||
82 | } | ||
83 | |||
68 | int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, | 84 | int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, |
69 | struct gpmc_timings *gpmc_t) | 85 | struct gpmc_timings *gpmc_t) |
70 | { | 86 | { |
@@ -98,32 +114,22 @@ int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, | |||
98 | dev_err(dev, "Unable to set gpmc timings: %d\n", err); | 114 | dev_err(dev, "Unable to set gpmc timings: %d\n", err); |
99 | return err; | 115 | return err; |
100 | } | 116 | } |
117 | } | ||
101 | 118 | ||
102 | if (gpmc_nand_data->of_node) { | 119 | if (gpmc_nand_data->of_node) |
103 | gpmc_read_settings_dt(gpmc_nand_data->of_node, &s); | 120 | gpmc_read_settings_dt(gpmc_nand_data->of_node, &s); |
104 | } else { | 121 | else |
105 | /* Enable RD PIN Monitoring Reg */ | 122 | gpmc_set_legacy(gpmc_nand_data, &s); |
106 | if (gpmc_nand_data->dev_ready) { | ||
107 | s.wait_on_read = true; | ||
108 | s.wait_on_write = true; | ||
109 | } | ||
110 | } | ||
111 | |||
112 | s.device_nand = true; | ||
113 | 123 | ||
114 | if (gpmc_nand_data->devsize == NAND_BUSWIDTH_16) | 124 | s.device_nand = true; |
115 | s.device_width = GPMC_DEVWIDTH_16BIT; | ||
116 | else | ||
117 | s.device_width = GPMC_DEVWIDTH_8BIT; | ||
118 | 125 | ||
119 | err = gpmc_cs_program_settings(gpmc_nand_data->cs, &s); | 126 | err = gpmc_cs_program_settings(gpmc_nand_data->cs, &s); |
120 | if (err < 0) | 127 | if (err < 0) |
121 | goto out_free_cs; | 128 | goto out_free_cs; |
122 | 129 | ||
123 | err = gpmc_configure(GPMC_CONFIG_WP, 0); | 130 | err = gpmc_configure(GPMC_CONFIG_WP, 0); |
124 | if (err < 0) | 131 | if (err < 0) |
125 | goto out_free_cs; | 132 | goto out_free_cs; |
126 | } | ||
127 | 133 | ||
128 | gpmc_update_nand_reg(&gpmc_nand_data->reg, gpmc_nand_data->cs); | 134 | gpmc_update_nand_reg(&gpmc_nand_data->reg, gpmc_nand_data->cs); |
129 | 135 | ||
diff --git a/arch/arm/mach-s3c64xx/mach-mini6410.c b/arch/arm/mach-s3c64xx/mach-mini6410.c index 8c84d3448dac..8d553a418e1c 100644 --- a/arch/arm/mach-s3c64xx/mach-mini6410.c +++ b/arch/arm/mach-s3c64xx/mach-mini6410.c | |||
@@ -37,7 +37,9 @@ | |||
37 | #include <plat/devs.h> | 37 | #include <plat/devs.h> |
38 | #include <plat/fb.h> | 38 | #include <plat/fb.h> |
39 | #include <linux/platform_data/mtd-nand-s3c2410.h> | 39 | #include <linux/platform_data/mtd-nand-s3c2410.h> |
40 | #include <linux/platform_data/mmc-sdhci-s3c.h> | ||
40 | #include <plat/regs-serial.h> | 41 | #include <plat/regs-serial.h> |
42 | #include <plat/sdhci.h> | ||
41 | #include <linux/platform_data/touchscreen-s3c2410.h> | 43 | #include <linux/platform_data/touchscreen-s3c2410.h> |
42 | 44 | ||
43 | #include <video/platform_lcd.h> | 45 | #include <video/platform_lcd.h> |
@@ -215,6 +217,13 @@ static struct platform_device mini6410_lcd_powerdev = { | |||
215 | .dev.platform_data = &mini6410_lcd_power_data, | 217 | .dev.platform_data = &mini6410_lcd_power_data, |
216 | }; | 218 | }; |
217 | 219 | ||
220 | static struct s3c_sdhci_platdata mini6410_hsmmc1_pdata = { | ||
221 | .max_width = 4, | ||
222 | .cd_type = S3C_SDHCI_CD_GPIO, | ||
223 | .ext_cd_gpio = S3C64XX_GPN(10), | ||
224 | .ext_cd_gpio_invert = true, | ||
225 | }; | ||
226 | |||
218 | static struct platform_device *mini6410_devices[] __initdata = { | 227 | static struct platform_device *mini6410_devices[] __initdata = { |
219 | &mini6410_device_eth, | 228 | &mini6410_device_eth, |
220 | &s3c_device_hsmmc0, | 229 | &s3c_device_hsmmc0, |
@@ -322,6 +331,7 @@ static void __init mini6410_machine_init(void) | |||
322 | 331 | ||
323 | s3c_nand_set_platdata(&mini6410_nand_info); | 332 | s3c_nand_set_platdata(&mini6410_nand_info); |
324 | s3c_fb_set_platdata(&mini6410_lcd_pdata[features.lcd_index]); | 333 | s3c_fb_set_platdata(&mini6410_lcd_pdata[features.lcd_index]); |
334 | s3c_sdhci1_set_platdata(&mini6410_hsmmc1_pdata); | ||
325 | s3c24xx_ts_set_platdata(NULL); | 335 | s3c24xx_ts_set_platdata(NULL); |
326 | 336 | ||
327 | /* configure nCS1 width to 16 bits */ | 337 | /* configure nCS1 width to 16 bits */ |
diff --git a/arch/arm/mach-u300/regulator.c b/arch/arm/mach-u300/regulator.c index bf40cd478fe9..0493a845b6bc 100644 --- a/arch/arm/mach-u300/regulator.c +++ b/arch/arm/mach-u300/regulator.c | |||
@@ -69,9 +69,9 @@ static int __init __u300_init_boardpower(struct platform_device *pdev) | |||
69 | return -ENODEV; | 69 | return -ENODEV; |
70 | } | 70 | } |
71 | regmap = syscon_node_to_regmap(syscon_np); | 71 | regmap = syscon_node_to_regmap(syscon_np); |
72 | if (!regmap) { | 72 | if (IS_ERR(regmap)) { |
73 | pr_crit("U300: could not locate syscon regmap\n"); | 73 | pr_crit("U300: could not locate syscon regmap\n"); |
74 | return -ENODEV; | 74 | return PTR_ERR(regmap); |
75 | } | 75 | } |
76 | 76 | ||
77 | main_power_15 = regulator_get(&pdev->dev, "vana15"); | 77 | main_power_15 = regulator_get(&pdev->dev, "vana15"); |
diff --git a/arch/arm/mach-u300/timer.c b/arch/arm/mach-u300/timer.c index 9a5f9fb352ce..5226162fac69 100644 --- a/arch/arm/mach-u300/timer.c +++ b/arch/arm/mach-u300/timer.c | |||
@@ -184,11 +184,13 @@ | |||
184 | #define U300_TIMER_APP_CRC (0x100) | 184 | #define U300_TIMER_APP_CRC (0x100) |
185 | #define U300_TIMER_APP_CRC_CLOCK_REQUEST_ENABLE (0x00000001) | 185 | #define U300_TIMER_APP_CRC_CLOCK_REQUEST_ENABLE (0x00000001) |
186 | 186 | ||
187 | #define TICKS_PER_JIFFY ((CLOCK_TICK_RATE + (HZ/2)) / HZ) | ||
188 | #define US_PER_TICK ((1000000 + (HZ/2)) / HZ) | ||
189 | |||
190 | static void __iomem *u300_timer_base; | 187 | static void __iomem *u300_timer_base; |
191 | 188 | ||
189 | struct u300_clockevent_data { | ||
190 | struct clock_event_device cevd; | ||
191 | unsigned ticks_per_jiffy; | ||
192 | }; | ||
193 | |||
192 | /* | 194 | /* |
193 | * The u300_set_mode() function is always called first, if we | 195 | * The u300_set_mode() function is always called first, if we |
194 | * have oneshot timer active, the oneshot scheduling function | 196 | * have oneshot timer active, the oneshot scheduling function |
@@ -197,6 +199,9 @@ static void __iomem *u300_timer_base; | |||
197 | static void u300_set_mode(enum clock_event_mode mode, | 199 | static void u300_set_mode(enum clock_event_mode mode, |
198 | struct clock_event_device *evt) | 200 | struct clock_event_device *evt) |
199 | { | 201 | { |
202 | struct u300_clockevent_data *cevdata = | ||
203 | container_of(evt, struct u300_clockevent_data, cevd); | ||
204 | |||
200 | switch (mode) { | 205 | switch (mode) { |
201 | case CLOCK_EVT_MODE_PERIODIC: | 206 | case CLOCK_EVT_MODE_PERIODIC: |
202 | /* Disable interrupts on GPT1 */ | 207 | /* Disable interrupts on GPT1 */ |
@@ -209,7 +214,7 @@ static void u300_set_mode(enum clock_event_mode mode, | |||
209 | * Set the periodic mode to a certain number of ticks per | 214 | * Set the periodic mode to a certain number of ticks per |
210 | * jiffy. | 215 | * jiffy. |
211 | */ | 216 | */ |
212 | writel(TICKS_PER_JIFFY, | 217 | writel(cevdata->ticks_per_jiffy, |
213 | u300_timer_base + U300_TIMER_APP_GPT1TC); | 218 | u300_timer_base + U300_TIMER_APP_GPT1TC); |
214 | /* | 219 | /* |
215 | * Set continuous mode, so the timer keeps triggering | 220 | * Set continuous mode, so the timer keeps triggering |
@@ -305,20 +310,23 @@ static int u300_set_next_event(unsigned long cycles, | |||
305 | return 0; | 310 | return 0; |
306 | } | 311 | } |
307 | 312 | ||
308 | 313 | static struct u300_clockevent_data u300_clockevent_data = { | |
309 | /* Use general purpose timer 1 as clock event */ | 314 | /* Use general purpose timer 1 as clock event */ |
310 | static struct clock_event_device clockevent_u300_1mhz = { | 315 | .cevd = { |
311 | .name = "GPT1", | 316 | .name = "GPT1", |
312 | .rating = 300, /* Reasonably fast and accurate clock event */ | 317 | /* Reasonably fast and accurate clock event */ |
313 | .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT, | 318 | .rating = 300, |
314 | .set_next_event = u300_set_next_event, | 319 | .features = CLOCK_EVT_FEAT_PERIODIC | |
315 | .set_mode = u300_set_mode, | 320 | CLOCK_EVT_FEAT_ONESHOT, |
321 | .set_next_event = u300_set_next_event, | ||
322 | .set_mode = u300_set_mode, | ||
323 | }, | ||
316 | }; | 324 | }; |
317 | 325 | ||
318 | /* Clock event timer interrupt handler */ | 326 | /* Clock event timer interrupt handler */ |
319 | static irqreturn_t u300_timer_interrupt(int irq, void *dev_id) | 327 | static irqreturn_t u300_timer_interrupt(int irq, void *dev_id) |
320 | { | 328 | { |
321 | struct clock_event_device *evt = &clockevent_u300_1mhz; | 329 | struct clock_event_device *evt = &u300_clockevent_data.cevd; |
322 | /* ACK/Clear timer IRQ for the APP GPT1 Timer */ | 330 | /* ACK/Clear timer IRQ for the APP GPT1 Timer */ |
323 | 331 | ||
324 | writel(U300_TIMER_APP_GPT1IA_IRQ_ACK, | 332 | writel(U300_TIMER_APP_GPT1IA_IRQ_ACK, |
@@ -379,6 +387,8 @@ static void __init u300_timer_init_of(struct device_node *np) | |||
379 | clk_prepare_enable(clk); | 387 | clk_prepare_enable(clk); |
380 | rate = clk_get_rate(clk); | 388 | rate = clk_get_rate(clk); |
381 | 389 | ||
390 | u300_clockevent_data.ticks_per_jiffy = DIV_ROUND_CLOSEST(rate, HZ); | ||
391 | |||
382 | setup_sched_clock(u300_read_sched_clock, 32, rate); | 392 | setup_sched_clock(u300_read_sched_clock, 32, rate); |
383 | 393 | ||
384 | u300_delay_timer.read_current_timer = &u300_read_current_timer; | 394 | u300_delay_timer.read_current_timer = &u300_read_current_timer; |
@@ -428,7 +438,7 @@ static void __init u300_timer_init_of(struct device_node *np) | |||
428 | pr_err("timer: failed to initialize U300 clock source\n"); | 438 | pr_err("timer: failed to initialize U300 clock source\n"); |
429 | 439 | ||
430 | /* Configure and register the clockevent */ | 440 | /* Configure and register the clockevent */ |
431 | clockevents_config_and_register(&clockevent_u300_1mhz, rate, | 441 | clockevents_config_and_register(&u300_clockevent_data.cevd, rate, |
432 | 1, 0xffffffff); | 442 | 1, 0xffffffff); |
433 | 443 | ||
434 | /* | 444 | /* |
diff --git a/arch/arm/plat-samsung/include/plat/uncompress.h b/arch/arm/plat-samsung/include/plat/uncompress.h index 4afc32f90b6d..f48dc0a4736c 100644 --- a/arch/arm/plat-samsung/include/plat/uncompress.h +++ b/arch/arm/plat-samsung/include/plat/uncompress.h | |||
@@ -145,6 +145,8 @@ static inline void arch_enable_uart_fifo(void) | |||
145 | if (!(fifocon & S3C2410_UFCON_RESETBOTH)) | 145 | if (!(fifocon & S3C2410_UFCON_RESETBOTH)) |
146 | break; | 146 | break; |
147 | } | 147 | } |
148 | |||
149 | uart_wr(S3C2410_UFCON, S3C2410_UFCON_FIFOMODE); | ||
148 | } | 150 | } |
149 | } | 151 | } |
150 | #else | 152 | #else |
diff --git a/drivers/clk/samsung/clk-exynos4.c b/drivers/clk/samsung/clk-exynos4.c index 1a7c1b929c69..3852e44db0f8 100644 --- a/drivers/clk/samsung/clk-exynos4.c +++ b/drivers/clk/samsung/clk-exynos4.c | |||
@@ -530,7 +530,8 @@ static struct samsung_div_clock exynos4_div_clks[] __initdata = { | |||
530 | DIV(sclk_i2s1, "sclk_i2s1", "sclk_audio1", DIV_PERIL5, 0, 6), | 530 | DIV(sclk_i2s1, "sclk_i2s1", "sclk_audio1", DIV_PERIL5, 0, 6), |
531 | DIV(sclk_i2s2, "sclk_i2s2", "sclk_audio2", DIV_PERIL5, 8, 6), | 531 | DIV(sclk_i2s2, "sclk_i2s2", "sclk_audio2", DIV_PERIL5, 8, 6), |
532 | DIV(none, "div_mmc4", "mout_mmc4", DIV_FSYS3, 0, 4), | 532 | DIV(none, "div_mmc4", "mout_mmc4", DIV_FSYS3, 0, 4), |
533 | DIV(none, "div_mmc_pre4", "div_mmc4", DIV_FSYS3, 8, 8), | 533 | DIV_F(none, "div_mmc_pre4", "div_mmc4", DIV_FSYS3, 8, 8, |
534 | CLK_SET_RATE_PARENT, 0), | ||
534 | DIV(none, "div_uart0", "mout_uart0", DIV_PERIL0, 0, 4), | 535 | DIV(none, "div_uart0", "mout_uart0", DIV_PERIL0, 0, 4), |
535 | DIV(none, "div_uart1", "mout_uart1", DIV_PERIL0, 4, 4), | 536 | DIV(none, "div_uart1", "mout_uart1", DIV_PERIL0, 4, 4), |
536 | DIV(none, "div_uart2", "mout_uart2", DIV_PERIL0, 8, 4), | 537 | DIV(none, "div_uart2", "mout_uart2", DIV_PERIL0, 8, 4), |
diff --git a/drivers/i2c/busses/i2c-mv64xxx.c b/drivers/i2c/busses/i2c-mv64xxx.c index 8be7e42aa4de..b8c5187b9ee0 100644 --- a/drivers/i2c/busses/i2c-mv64xxx.c +++ b/drivers/i2c/busses/i2c-mv64xxx.c | |||
@@ -692,6 +692,7 @@ static const struct of_device_id mv64xxx_i2c_of_match_table[] = { | |||
692 | { .compatible = "allwinner,sun4i-i2c", .data = &mv64xxx_i2c_regs_sun4i}, | 692 | { .compatible = "allwinner,sun4i-i2c", .data = &mv64xxx_i2c_regs_sun4i}, |
693 | { .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx}, | 693 | { .compatible = "marvell,mv64xxx-i2c", .data = &mv64xxx_i2c_regs_mv64xxx}, |
694 | { .compatible = "marvell,mv78230-i2c", .data = &mv64xxx_i2c_regs_mv64xxx}, | 694 | { .compatible = "marvell,mv78230-i2c", .data = &mv64xxx_i2c_regs_mv64xxx}, |
695 | { .compatible = "marvell,mv78230-a0-i2c", .data = &mv64xxx_i2c_regs_mv64xxx}, | ||
695 | {} | 696 | {} |
696 | }; | 697 | }; |
697 | MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table); | 698 | MODULE_DEVICE_TABLE(of, mv64xxx_i2c_of_match_table); |
@@ -783,6 +784,10 @@ mv64xxx_of_config(struct mv64xxx_i2c_data *drv_data, | |||
783 | drv_data->errata_delay = true; | 784 | drv_data->errata_delay = true; |
784 | } | 785 | } |
785 | 786 | ||
787 | if (of_device_is_compatible(np, "marvell,mv78230-a0-i2c")) { | ||
788 | drv_data->offload_enabled = false; | ||
789 | drv_data->errata_delay = true; | ||
790 | } | ||
786 | out: | 791 | out: |
787 | return rc; | 792 | return rc; |
788 | #endif | 793 | #endif |
diff --git a/drivers/irqchip/irq-sirfsoc.c b/drivers/irqchip/irq-sirfsoc.c index 4851afae38dc..3a070c587ed9 100644 --- a/drivers/irqchip/irq-sirfsoc.c +++ b/drivers/irqchip/irq-sirfsoc.c | |||
@@ -34,9 +34,10 @@ sirfsoc_alloc_gc(void __iomem *base, unsigned int irq_start, unsigned int num) | |||
34 | struct irq_chip_type *ct; | 34 | struct irq_chip_type *ct; |
35 | int ret; | 35 | int ret; |
36 | unsigned int clr = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN; | 36 | unsigned int clr = IRQ_NOREQUEST | IRQ_NOPROBE | IRQ_NOAUTOEN; |
37 | unsigned int set = IRQ_LEVEL; | ||
37 | 38 | ||
38 | ret = irq_alloc_domain_generic_chips(sirfsoc_irqdomain, num, 1, "irq_sirfsoc", | 39 | ret = irq_alloc_domain_generic_chips(sirfsoc_irqdomain, num, 1, "irq_sirfsoc", |
39 | handle_level_irq, clr, 0, IRQ_GC_INIT_MASK_CACHE); | 40 | handle_level_irq, clr, set, IRQ_GC_INIT_MASK_CACHE); |
40 | 41 | ||
41 | gc = irq_get_domain_generic_chip(sirfsoc_irqdomain, irq_start); | 42 | gc = irq_get_domain_generic_chip(sirfsoc_irqdomain, irq_start); |
42 | gc->reg_base = base; | 43 | gc->reg_base = base; |