Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'boards-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc

Pull ARM SoC board updates from Olof Johansson:
"Board-related updates. This branch is getting smaller and smaller,
which is the whole idea so that's reassuring.

Right now by far most of the code is related to shmobile updates, and
they are now switching over to removal of board code and migration to
multiplatform, so we'll see their board code base shrink in the near
future too, I hope.

In addition to that is some defconfig updates, some display updates
for OMAP and a bit of new board support for Rockchip boards"

* tag 'boards-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (56 commits)
ARM: rockchip: add support for rk3188 and Radxa Rock board
ARM: rockchip: add dts for bqcurie2 tablet
ARM: rockchip: enable arm-global-timer
ARM: rockchip: move shared dt properties to common source file
ARM: OMAP2+: display: Create omap_vout device inside omap_display_init
ARM: OMAP2+: display: Create omapvrfb and omapfb devices inside omap_display_init
ARM: OMAP2+: display: Create omapdrm device inside omap_display_init
ARM: OMAP2+: drm: Don't build device for DMM
ARM: tegra: defconfig updates
RX-51: Add support for OMAP3 ROM Random Number Generator
ARM: OMAP3: RX-51: ARM errata 430973 workaround
ARM: OMAP3: Add secure function omap_smc3() which calling instruction smc #1
ARM: shmobile: marzen: enable INTC IRQ
ARM: shmobile: bockw: add SMSC support on reference
ARM: shmobile: Use SMP on Koelsch
ARM: shmobile: Remove KZM9D reference DTS
ARM: shmobile: Let KZM9D multiplatform boot with KZM9D DTB
ARM: shmobile: Remove non-multiplatform KZM9D reference support
ARM: shmobile: Use KZM9D without reference for multiplatform
ARM: shmobile: Sync KZM9D DTS with KZM9D reference DTS
...

+1902 -235
+3 -2
arch/arm/boot/dts/Makefile
··· 198 198 ste-ccu9540.dtb 199 199 dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb 200 200 dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \ 201 - emev2-kzm9d-reference.dtb \ 201 + r7s72100-genmai.dtb \ 202 202 r8a7740-armadillo800eva.dtb \ 203 203 r8a7778-bockw.dtb \ 204 204 r8a7778-bockw-reference.dtb \ 205 205 r8a7740-armadillo800eva-reference.dtb \ 206 206 r8a7779-marzen.dtb \ 207 207 r8a7779-marzen-reference.dtb \ 208 + r8a7791-koelsch.dtb \ 208 209 r8a7790-lager.dtb \ 209 210 r8a7790-lager-reference.dtb \ 210 211 sh73a0-kzm9g.dtb \ ··· 213 212 r8a73a4-ape6evm.dtb \ 214 213 r8a73a4-ape6evm-reference.dtb \ 215 214 sh7372-mackerel.dtb 216 - dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d-reference.dtb 215 + dtb-$(CONFIG_ARCH_SHMOBILE_MULTI) += emev2-kzm9d.dtb 217 216 dtb-$(CONFIG_ARCH_SOCFPGA) += socfpga_cyclone5.dtb \ 218 217 socfpga_vt.dtb 219 218 dtb-$(CONFIG_ARCH_SPEAR13XX) += spear1310-evb.dtb \
-57
arch/arm/boot/dts/emev2-kzm9d-reference.dts
··· 1 - /* 2 - * Device Tree Source for the KZM9D board 3 - * 4 - * Copyright (C) 2013 Renesas Solutions Corp. 5 - * 6 - * This file is licensed under the terms of the GNU General Public License 7 - * version 2. This program is licensed "as is" without any warranty of any 8 - * kind, whether express or implied. 9 - */ 10 - /dts-v1/; 11 - 12 - /include/ "emev2.dtsi" 13 - 14 - / { 15 - model = "EMEV2 KZM9D Board"; 16 - compatible = "renesas,kzm9d-reference", "renesas,emev2"; 17 - 18 - memory { 19 - device_type = "memory"; 20 - reg = <0x40000000 0x8000000>; 21 - }; 22 - 23 - chosen { 24 - bootargs = "console=ttyS1,115200n81 ignore_loglevel root=/dev/nfs ip=dhcp"; 25 - }; 26 - 27 - reg_1p8v: regulator@0 { 28 - compatible = "regulator-fixed"; 29 - regulator-name = "fixed-1.8V"; 30 - regulator-min-microvolt = <1800000>; 31 - regulator-max-microvolt = <1800000>; 32 - regulator-always-on; 33 - regulator-boot-on; 34 - }; 35 - 36 - reg_3p3v: regulator@1 { 37 - compatible = "regulator-fixed"; 38 - regulator-name = "fixed-3.3V"; 39 - regulator-min-microvolt = <3300000>; 40 - regulator-max-microvolt = <3300000>; 41 - regulator-always-on; 42 - regulator-boot-on; 43 - }; 44 - 45 - lan9220@20000000 { 46 - compatible = "smsc,lan9220", "smsc,lan9115"; 47 - reg = <0x20000000 0x10000>; 48 - phy-mode = "mii"; 49 - interrupt-parent = <&gpio0>; 50 - interrupts = <1 1>; /* active high */ 51 - reg-io-width = <4>; 52 - smsc,irq-active-high; 53 - smsc,irq-push-pull; 54 - vddvario-supply = <&reg_1p8v>; 55 - vdd33a-supply = <&reg_3p3v>; 56 - }; 57 - };
+32 -1
arch/arm/boot/dts/emev2-kzm9d.dts
··· 1 1 /* 2 2 * Device Tree Source for the KZM9D board 3 3 * 4 - * Copyright (C) 2012 Renesas Solutions Corp. 4 + * Copyright (C) 2013 Renesas Solutions Corp. 5 5 * 6 6 * This file is licensed under the terms of the GNU General Public License 7 7 * version 2. This program is licensed "as is" without any warranty of any ··· 22 22 23 23 chosen { 24 24 bootargs = "console=ttyS1,115200n81 ignore_loglevel root=/dev/nfs ip=dhcp"; 25 + }; 26 + 27 + reg_1p8v: regulator@0 { 28 + compatible = "regulator-fixed"; 29 + regulator-name = "fixed-1.8V"; 30 + regulator-min-microvolt = <1800000>; 31 + regulator-max-microvolt = <1800000>; 32 + regulator-always-on; 33 + regulator-boot-on; 34 + }; 35 + 36 + reg_3p3v: regulator@1 { 37 + compatible = "regulator-fixed"; 38 + regulator-name = "fixed-3.3V"; 39 + regulator-min-microvolt = <3300000>; 40 + regulator-max-microvolt = <3300000>; 41 + regulator-always-on; 42 + regulator-boot-on; 43 + }; 44 + 45 + lan9220@20000000 { 46 + compatible = "smsc,lan9220", "smsc,lan9115"; 47 + reg = <0x20000000 0x10000>; 48 + phy-mode = "mii"; 49 + interrupt-parent = <&gpio0>; 50 + interrupts = <1 1>; /* active high */ 51 + reg-io-width = <4>; 52 + smsc,irq-active-high; 53 + smsc,irq-push-pull; 54 + vddvario-supply = <&reg_1p8v>; 55 + vdd33a-supply = <&reg_3p3v>; 25 56 }; 26 57 };
+31
arch/arm/boot/dts/r7s72100-genmai.dts
··· 1 + /* 2 + * Device Tree Source for the Genmai board 3 + * 4 + * Copyright (C) 2013 Renesas Solutions Corp. 5 + * 6 + * This file is licensed under the terms of the GNU General Public License 7 + * version 2. This program is licensed "as is" without any warranty of any 8 + * kind, whether express or implied. 9 + */ 10 + 11 + /dts-v1/; 12 + /include/ "r7s72100.dtsi" 13 + 14 + / { 15 + model = "Genmai"; 16 + compatible = "renesas,genmai", "renesas,r7s72100"; 17 + 18 + chosen { 19 + bootargs = "console=ttySC2,115200 ignore_loglevel rw root=/dev/nfs ip=dhcp"; 20 + }; 21 + 22 + memory { 23 + device_type = "memory"; 24 + reg = <0x08000000 0x08000000>; 25 + }; 26 + 27 + lbsc { 28 + #address-cells = <1>; 29 + #size-cells = <1>; 30 + }; 31 + };
+32
arch/arm/boot/dts/r8a7791-koelsch.dts
··· 1 + /* 2 + * Device Tree Source for the Koelsch board 3 + * 4 + * Copyright (C) 2013 Renesas Electronics Corporation 5 + * Copyright (C) 2013 Renesas Solutions Corp. 6 + * 7 + * This file is licensed under the terms of the GNU General Public License 8 + * version 2. This program is licensed "as is" without any warranty of any 9 + * kind, whether express or implied. 10 + */ 11 + 12 + /dts-v1/; 13 + /include/ "r8a7791.dtsi" 14 + 15 + / { 16 + model = "Koelsch"; 17 + compatible = "renesas,koelsch", "renesas,r8a7791"; 18 + 19 + chosen { 20 + bootargs = "console=ttySC6,115200 ignore_loglevel rw root=/dev/nfs ip=dhcp"; 21 + }; 22 + 23 + memory@40000000 { 24 + device_type = "memory"; 25 + reg = <0 0x40000000 0 0x80000000>; 26 + }; 27 + 28 + lbsc { 29 + #address-cells = <1>; 30 + #size-cells = <1>; 31 + }; 32 + };
+109
arch/arm/boot/dts/rk3066a-bqcurie2.dts
··· 1 + /* 2 + * Copyright (c) 2013 MundoReader S.L. 3 + * Author: Heiko Stuebner <heiko@sntech.de> 4 + * 5 + * This program is free software; you can redistribute it and/or modify 6 + * it under the terms of the GNU General Public License as published by 7 + * the Free Software Foundation; either version 2 of the License, or 8 + * (at your option) any later version. 9 + * 10 + * This program is distributed in the hope that it will be useful, 11 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 + * GNU General Public License for more details. 14 + */ 15 + 16 + /dts-v1/; 17 + #include "rk3066a.dtsi" 18 + 19 + / { 20 + model = "bq Curie 2"; 21 + 22 + memory { 23 + reg = <0x60000000 0x40000000>; 24 + }; 25 + 26 + soc { 27 + uart0: serial@10124000 { 28 + status = "okay"; 29 + }; 30 + 31 + uart1: serial@10126000 { 32 + status = "okay"; 33 + }; 34 + 35 + uart2: serial@20064000 { 36 + pinctrl-names = "default"; 37 + pinctrl-0 = <&uart2_xfer>; 38 + status = "okay"; 39 + }; 40 + 41 + uart3: serial@20068000 { 42 + status = "okay"; 43 + }; 44 + 45 + vcc_sd0: fixed-regulator { 46 + compatible = "regulator-fixed"; 47 + regulator-name = "sdmmc-supply"; 48 + regulator-min-microvolt = <3000000>; 49 + regulator-max-microvolt = <3000000>; 50 + gpio = <&gpio3 7 GPIO_ACTIVE_LOW>; 51 + startup-delay-us = <100000>; 52 + }; 53 + 54 + dwmmc@10214000 { /* sdmmc */ 55 + num-slots = <1>; 56 + status = "okay"; 57 + 58 + pinctrl-names = "default"; 59 + pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_cd &sd0_bus4>; 60 + vmmc-supply = <&vcc_sd0>; 61 + 62 + slot@0 { 63 + reg = <0>; 64 + bus-width = <4>; 65 + disable-wp; 66 + }; 67 + }; 68 + 69 + dwmmc@10218000 { /* wifi */ 70 + num-slots = <1>; 71 + status = "okay"; 72 + non-removable; 73 + 74 + pinctrl-names = "default"; 75 + pinctrl-0 = <&sd1_clk &sd1_cmd &sd1_bus4>; 76 + 77 + slot@0 { 78 + reg = <0>; 79 + bus-width = <4>; 80 + disable-wp; 81 + }; 82 + }; 83 + 84 + gpio-keys { 85 + compatible = "gpio-keys"; 86 + #address-cells = <1>; 87 + #size-cells = <0>; 88 + autorepeat; 89 + 90 + button@0 { 91 + gpios = <&gpio6 2 GPIO_ACTIVE_LOW>; /* GPIO6_A2 */ 92 + linux,code = <116>; 93 + label = "GPIO Key Power"; 94 + linux,input-type = <1>; 95 + gpio-key,wakeup = <1>; 96 + debounce-interval = <100>; 97 + }; 98 + button@1 { 99 + gpios = <&gpio4 21 GPIO_ACTIVE_LOW>; /* GPIO4_C5 */ 100 + linux,code = <104>; 101 + label = "GPIO Key Vol-"; 102 + linux,input-type = <1>; 103 + gpio-key,wakeup = <0>; 104 + debounce-interval = <100>; 105 + }; 106 + /* VOL+ comes somehow thru the ADC */ 107 + }; 108 + }; 109 + };
+1 -97
arch/arm/boot/dts/rk3066a.dtsi
··· 14 14 */ 15 15 16 16 #include <dt-bindings/gpio/gpio.h> 17 - #include <dt-bindings/interrupt-controller/irq.h> 18 - #include <dt-bindings/interrupt-controller/arm-gic.h> 19 17 #include <dt-bindings/pinctrl/rockchip.h> 20 - #include "skeleton.dtsi" 18 + #include "rk3xxx.dtsi" 21 19 #include "rk3066a-clocks.dtsi" 22 20 23 21 / { 24 22 compatible = "rockchip,rk3066a"; 25 - interrupt-parent = <&gic>; 26 23 27 24 cpus { 28 25 #address-cells = <1>; ··· 40 43 }; 41 44 42 45 soc { 43 - #address-cells = <1>; 44 - #size-cells = <1>; 45 - compatible = "simple-bus"; 46 - ranges; 47 - 48 - gic: interrupt-controller@1013d000 { 49 - compatible = "arm,cortex-a9-gic"; 50 - interrupt-controller; 51 - #interrupt-cells = <3>; 52 - reg = <0x1013d000 0x1000>, 53 - <0x1013c100 0x0100>; 54 - }; 55 - 56 - L2: l2-cache-controller@10138000 { 57 - compatible = "arm,pl310-cache"; 58 - reg = <0x10138000 0x1000>; 59 - cache-unified; 60 - cache-level = <2>; 61 - }; 62 - 63 - local-timer@1013c600 { 64 - compatible = "arm,cortex-a9-twd-timer"; 65 - reg = <0x1013c600 0x20>; 66 - interrupts = <GIC_PPI 13 0x304>; 67 - clocks = <&dummy150m>; 68 - }; 69 - 70 46 timer@20038000 { 71 47 compatible = "snps,dw-apb-timer-osc"; 72 48 reg = <0x20038000 0x100>; ··· 267 297 <RK_GPIO3 20 RK_FUNC_1 &pcfg_pull_default>; 268 298 }; 269 299 }; 270 - }; 271 - 272 - uart0: serial@10124000 { 273 - compatible = "snps,dw-apb-uart"; 274 - reg = <0x10124000 0x400>; 275 - interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; 276 - reg-shift = <2>; 277 - reg-io-width = <1>; 278 - clocks = <&clk_gates1 8>; 279 - status = "disabled"; 280 - }; 281 - 282 - uart1: serial@10126000 { 283 - compatible = "snps,dw-apb-uart"; 284 - reg = <0x10126000 0x400>; 285 - interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; 286 - reg-shift = <2>; 287 - reg-io-width = <1>; 288 - clocks = <&clk_gates1 10>; 289 - status = "disabled"; 290 - }; 291 - 292 - uart2: serial@20064000 { 293 - compatible = "snps,dw-apb-uart"; 294 - reg = <0x20064000 0x400>; 295 - interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; 296 - reg-shift = <2>; 297 - reg-io-width = <1>; 298 - clocks = <&clk_gates1 12>; 299 - status = "disabled"; 300 - }; 301 - 302 - uart3: serial@20068000 { 303 - compatible = "snps,dw-apb-uart"; 304 - reg = <0x20068000 0x400>; 305 - interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; 306 - reg-shift = <2>; 307 - reg-io-width = <1>; 308 - clocks = <&clk_gates1 14>; 309 - status = "disabled"; 310 - }; 311 - 312 - dwmmc@10214000 { 313 - compatible = "rockchip,rk2928-dw-mshc"; 314 - reg = <0x10214000 0x1000>; 315 - interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; 316 - #address-cells = <1>; 317 - #size-cells = <0>; 318 - 319 - clocks = <&clk_gates5 10>, <&clk_gates2 11>; 320 - clock-names = "biu", "ciu"; 321 - 322 - status = "disabled"; 323 - }; 324 - 325 - dwmmc@10218000 { 326 - compatible = "rockchip,rk2928-dw-mshc"; 327 - reg = <0x10218000 0x1000>; 328 - interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 329 - #address-cells = <1>; 330 - #size-cells = <0>; 331 - 332 - clocks = <&clk_gates5 11>, <&clk_gates2 13>; 333 - clock-names = "biu", "ciu"; 334 - 335 - status = "disabled"; 336 300 }; 337 301 }; 338 302 };
+289
arch/arm/boot/dts/rk3188-clocks.dtsi
··· 1 + /* 2 + * Copyright (c) 2013 MundoReader S.L. 3 + * Author: Heiko Stuebner <heiko@sntech.de> 4 + * 5 + * This program is free software; you can redistribute it and/or modify 6 + * it under the terms of the GNU General Public License as published by 7 + * the Free Software Foundation; either version 2 of the License, or 8 + * (at your option) any later version. 9 + * 10 + * This program is distributed in the hope that it will be useful, 11 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 + * GNU General Public License for more details. 14 + */ 15 + 16 + / { 17 + clocks { 18 + #address-cells = <1>; 19 + #size-cells = <1>; 20 + ranges; 21 + 22 + /* 23 + * This is a dummy clock, to be used as placeholder on 24 + * other mux clocks when a specific parent clock is not 25 + * yet implemented. It should be dropped when the driver 26 + * is complete. 27 + */ 28 + dummy: dummy { 29 + compatible = "fixed-clock"; 30 + clock-frequency = <0>; 31 + #clock-cells = <0>; 32 + }; 33 + 34 + xin24m: xin24m { 35 + compatible = "fixed-clock"; 36 + clock-frequency = <24000000>; 37 + #clock-cells = <0>; 38 + }; 39 + 40 + dummy48m: dummy48m { 41 + compatible = "fixed-clock"; 42 + clock-frequency = <48000000>; 43 + #clock-cells = <0>; 44 + }; 45 + 46 + dummy150m: dummy150m { 47 + compatible = "fixed-clock"; 48 + clock-frequency = <150000000>; 49 + #clock-cells = <0>; 50 + }; 51 + 52 + clk_gates0: gate-clk@200000d0 { 53 + compatible = "rockchip,rk2928-gate-clk"; 54 + reg = <0x200000d0 0x4>; 55 + clocks = <&dummy150m>, <&dummy>, 56 + <&dummy>, <&dummy>, 57 + <&dummy>, <&dummy>, 58 + <&dummy>, <&dummy>, 59 + <&dummy>, <&dummy>, 60 + <&dummy>, <&dummy>, 61 + <&dummy>, <&dummy>, 62 + <&dummy>, <&dummy>; 63 + 64 + clock-output-names = 65 + "gate_core_periph", "gate_cpu_gpll", 66 + "gate_ddrphy", "gate_aclk_cpu", 67 + "gate_hclk_cpu", "gate_pclk_cpu", 68 + "gate_atclk_cpu", "gate_aclk_core", 69 + "reserved", "gate_i2s0", 70 + "gate_i2s0_frac", "reserved", 71 + "reserved", "gate_spdif", 72 + "gate_spdif_frac", "gate_testclk"; 73 + 74 + #clock-cells = <1>; 75 + }; 76 + 77 + clk_gates1: gate-clk@200000d4 { 78 + compatible = "rockchip,rk2928-gate-clk"; 79 + reg = <0x200000d4 0x4>; 80 + clocks = <&xin24m>, <&xin24m>, 81 + <&xin24m>, <&dummy>, 82 + <&dummy>, <&xin24m>, 83 + <&xin24m>, <&dummy>, 84 + <&xin24m>, <&dummy>, 85 + <&xin24m>, <&dummy>, 86 + <&xin24m>, <&dummy>, 87 + <&xin24m>, <&dummy>; 88 + 89 + clock-output-names = 90 + "gate_timer0", "gate_timer1", 91 + "gate_timer3", "gate_jtag", 92 + "gate_aclk_lcdc1_src", "gate_otgphy0", 93 + "gate_otgphy1", "gate_ddr_gpll", 94 + "gate_uart0", "gate_frac_uart0", 95 + "gate_uart1", "gate_frac_uart1", 96 + "gate_uart2", "gate_frac_uart2", 97 + "gate_uart3", "gate_frac_uart3"; 98 + 99 + #clock-cells = <1>; 100 + }; 101 + 102 + clk_gates2: gate-clk@200000d8 { 103 + compatible = "rockchip,rk2928-gate-clk"; 104 + reg = <0x200000d8 0x4>; 105 + clocks = <&clk_gates2 1>, <&dummy>, 106 + <&dummy>, <&dummy>, 107 + <&dummy>, <&dummy>, 108 + <&clk_gates2 3>, <&dummy>, 109 + <&dummy>, <&dummy>, 110 + <&dummy>, <&dummy48m>, 111 + <&dummy>, <&dummy48m>, 112 + <&dummy>, <&dummy>; 113 + 114 + clock-output-names = 115 + "gate_periph_src", "gate_aclk_periph", 116 + "gate_hclk_periph", "gate_pclk_periph", 117 + "gate_smc", "gate_mac", 118 + "gate_hsadc", "gate_hsadc_frac", 119 + "gate_saradc", "gate_spi0", 120 + "gate_spi1", "gate_mmc0", 121 + "gate_mac_lbtest", "gate_mmc1", 122 + "gate_emmc", "reserved"; 123 + 124 + #clock-cells = <1>; 125 + }; 126 + 127 + clk_gates3: gate-clk@200000dc { 128 + compatible = "rockchip,rk2928-gate-clk"; 129 + reg = <0x200000dc 0x4>; 130 + clocks = <&dummy>, <&dummy>, 131 + <&dummy>, <&dummy>, 132 + <&xin24m>, <&xin24m>, 133 + <&dummy>, <&dummy>, 134 + <&xin24m>, <&dummy>, 135 + <&dummy>, <&dummy>, 136 + <&dummy>, <&dummy>, 137 + <&xin24m>, <&dummy>; 138 + 139 + clock-output-names = 140 + "gate_aclk_lcdc0_src", "gate_dclk_lcdc0", 141 + "gate_dclk_lcdc1", "gate_pclkin_cif0", 142 + "gate_timer2", "gate_timer4", 143 + "gate_hsicphy", "gate_cif0_out", 144 + "gate_timer5", "gate_aclk_vepu", 145 + "gate_hclk_vepu", "gate_aclk_vdpu", 146 + "gate_hclk_vdpu", "reserved", 147 + "gate_timer6", "gate_aclk_gpu_src"; 148 + 149 + #clock-cells = <1>; 150 + }; 151 + 152 + clk_gates4: gate-clk@200000e0 { 153 + compatible = "rockchip,rk2928-gate-clk"; 154 + reg = <0x200000e0 0x4>; 155 + clocks = <&clk_gates2 2>, <&clk_gates2 3>, 156 + <&clk_gates2 1>, <&clk_gates2 1>, 157 + <&clk_gates2 1>, <&clk_gates2 2>, 158 + <&clk_gates2 2>, <&clk_gates2 2>, 159 + <&clk_gates0 4>, <&clk_gates0 4>, 160 + <&clk_gates0 3>, <&dummy>, 161 + <&clk_gates0 3>, <&dummy>, 162 + <&dummy>, <&dummy>; 163 + 164 + clock-output-names = 165 + "gate_hclk_peri_axi_matrix", "gate_pclk_peri_axi_matrix", 166 + "gate_aclk_cpu_peri", "gate_aclk_peri_axi_matrix", 167 + "gate_aclk_pei_niu", "gate_hclk_usb_peri", 168 + "gate_hclk_peri_ahb_arbi", "gate_hclk_emem_peri", 169 + "gate_hclk_cpubus", "gate_hclk_ahb2apb", 170 + "gate_aclk_strc_sys", "reserved", 171 + "gate_aclk_intmem", "reserved", 172 + "gate_hclk_imem1", "gate_hclk_imem0"; 173 + 174 + #clock-cells = <1>; 175 + }; 176 + 177 + clk_gates5: gate-clk@200000e4 { 178 + compatible = "rockchip,rk2928-gate-clk"; 179 + reg = <0x200000e4 0x4>; 180 + clocks = <&clk_gates0 3>, <&clk_gates2 1>, 181 + <&clk_gates0 5>, <&clk_gates0 5>, 182 + <&clk_gates0 5>, <&clk_gates0 5>, 183 + <&clk_gates0 4>, <&clk_gates0 5>, 184 + <&clk_gates2 1>, <&clk_gates2 2>, 185 + <&clk_gates2 2>, <&clk_gates2 2>, 186 + <&clk_gates2 2>, <&clk_gates4 5>; 187 + 188 + clock-output-names = 189 + "gate_aclk_dmac1", "gate_aclk_dmac2", 190 + "gate_pclk_efuse", "gate_pclk_tzpc", 191 + "gate_pclk_grf", "gate_pclk_pmu", 192 + "gate_hclk_rom", "gate_pclk_ddrupctl", 193 + "gate_aclk_smc", "gate_hclk_nandc", 194 + "gate_hclk_mmc0", "gate_hclk_mmc1", 195 + "gate_hclk_emmc", "gate_hclk_otg0"; 196 + 197 + #clock-cells = <1>; 198 + }; 199 + 200 + clk_gates6: gate-clk@200000e8 { 201 + compatible = "rockchip,rk2928-gate-clk"; 202 + reg = <0x200000e8 0x4>; 203 + clocks = <&clk_gates3 0>, <&clk_gates0 4>, 204 + <&clk_gates0 4>, <&clk_gates1 4>, 205 + <&clk_gates0 4>, <&clk_gates3 0>, 206 + <&dummy>, <&dummy>, 207 + <&clk_gates3 0>, <&clk_gates0 4>, 208 + <&clk_gates0 4>, <&clk_gates1 4>, 209 + <&clk_gates0 4>, <&clk_gates3 0>; 210 + 211 + clock-output-names = 212 + "gate_aclk_lcdc0", "gate_hclk_lcdc0", 213 + "gate_hclk_lcdc1", "gate_aclk_lcdc1", 214 + "gate_hclk_cif0", "gate_aclk_cif0", 215 + "reserved", "reserved", 216 + "gate_aclk_ipp", "gate_hclk_ipp", 217 + "gate_hclk_rga", "gate_aclk_rga", 218 + "gate_hclk_vio_bus", "gate_aclk_vio0"; 219 + 220 + #clock-cells = <1>; 221 + }; 222 + 223 + clk_gates7: gate-clk@200000ec { 224 + compatible = "rockchip,rk2928-gate-clk"; 225 + reg = <0x200000ec 0x4>; 226 + clocks = <&clk_gates2 2>, <&clk_gates0 4>, 227 + <&clk_gates0 4>, <&dummy>, 228 + <&dummy>, <&clk_gates2 2>, 229 + <&clk_gates2 2>, <&clk_gates0 5>, 230 + <&dummy>, <&clk_gates0 5>, 231 + <&clk_gates0 5>, <&clk_gates2 3>, 232 + <&clk_gates2 3>, <&clk_gates2 3>, 233 + <&clk_gates2 3>, <&clk_gates2 3>; 234 + 235 + clock-output-names = 236 + "gate_hclk_emac", "gate_hclk_spdif", 237 + "gate_hclk_i2s0_2ch", "gate_hclk_otg1", 238 + "gate_hclk_hsic", "gate_hclk_hsadc", 239 + "gate_hclk_pidf", "gate_pclk_timer0", 240 + "reserved", "gate_pclk_timer2", 241 + "gate_pclk_pwm01", "gate_pclk_pwm23", 242 + "gate_pclk_spi0", "gate_pclk_spi1", 243 + "gate_pclk_saradc", "gate_pclk_wdt"; 244 + 245 + #clock-cells = <1>; 246 + }; 247 + 248 + clk_gates8: gate-clk@200000f0 { 249 + compatible = "rockchip,rk2928-gate-clk"; 250 + reg = <0x200000f0 0x4>; 251 + clocks = <&clk_gates0 5>, <&clk_gates0 5>, 252 + <&clk_gates2 3>, <&clk_gates2 3>, 253 + <&clk_gates0 5>, <&clk_gates0 5>, 254 + <&clk_gates2 3>, <&clk_gates2 3>, 255 + <&clk_gates2 3>, <&clk_gates0 5>, 256 + <&clk_gates0 5>, <&clk_gates0 5>, 257 + <&clk_gates2 3>, <&dummy>; 258 + 259 + clock-output-names = 260 + "gate_pclk_uart0", "gate_pclk_uart1", 261 + "gate_pclk_uart2", "gate_pclk_uart3", 262 + "gate_pclk_i2c0", "gate_pclk_i2c1", 263 + "gate_pclk_i2c2", "gate_pclk_i2c3", 264 + "gate_pclk_i2c4", "gate_pclk_gpio0", 265 + "gate_pclk_gpio1", "gate_pclk_gpio2", 266 + "gate_pclk_gpio3", "gate_aclk_gps"; 267 + 268 + #clock-cells = <1>; 269 + }; 270 + 271 + clk_gates9: gate-clk@200000f4 { 272 + compatible = "rockchip,rk2928-gate-clk"; 273 + reg = <0x200000f4 0x4>; 274 + clocks = <&dummy>, <&dummy>, 275 + <&dummy>, <&dummy>, 276 + <&dummy>, <&dummy>, 277 + <&dummy>, <&dummy>; 278 + 279 + clock-output-names = 280 + "gate_clk_core_dbg", "gate_pclk_dbg", 281 + "gate_clk_trace", "gate_atclk", 282 + "gate_clk_l2c", "gate_aclk_vio1", 283 + "gate_pclk_publ", "gate_aclk_gpu"; 284 + 285 + #clock-cells = <1>; 286 + }; 287 + }; 288 + 289 + };
+80
arch/arm/boot/dts/rk3188-radxarock.dts
··· 1 + /* 2 + * Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de> 3 + * 4 + * This program is free software; you can redistribute it and/or modify 5 + * it under the terms of the GNU General Public License as published by 6 + * the Free Software Foundation; either version 2 of the License, or 7 + * (at your option) any later version. 8 + * 9 + * This program is distributed in the hope that it will be useful, 10 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 + * GNU General Public License for more details. 13 + */ 14 + 15 + /dts-v1/; 16 + #include "rk3188.dtsi" 17 + 18 + / { 19 + model = "Radxa Rock"; 20 + 21 + memory { 22 + reg = <0x60000000 0x80000000>; 23 + }; 24 + 25 + soc { 26 + uart0: serial@10124000 { 27 + status = "okay"; 28 + }; 29 + 30 + uart1: serial@10126000 { 31 + status = "okay"; 32 + }; 33 + 34 + uart2: serial@20064000 { 35 + pinctrl-names = "default"; 36 + pinctrl-0 = <&uart2_xfer>; 37 + status = "okay"; 38 + }; 39 + 40 + uart3: serial@20068000 { 41 + status = "okay"; 42 + }; 43 + 44 + gpio-keys { 45 + compatible = "gpio-keys"; 46 + #address-cells = <1>; 47 + #size-cells = <0>; 48 + autorepeat; 49 + 50 + button@0 { 51 + gpios = <&gpio0 4 GPIO_ACTIVE_LOW>; 52 + linux,code = <116>; 53 + label = "GPIO Key Power"; 54 + linux,input-type = <1>; 55 + gpio-key,wakeup = <1>; 56 + debounce-interval = <100>; 57 + }; 58 + }; 59 + 60 + gpio-leds { 61 + compatible = "gpio-leds"; 62 + 63 + green { 64 + gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; 65 + default-state = "off"; 66 + }; 67 + 68 + yellow { 69 + gpios = <&gpio0 14 GPIO_ACTIVE_LOW>; 70 + default-state = "off"; 71 + }; 72 + 73 + sleep { 74 + gpios = <&gpio0 15 0>; 75 + default-state = "off"; 76 + }; 77 + }; 78 + 79 + }; 80 + };
+253
arch/arm/boot/dts/rk3188.dtsi
··· 1 + /* 2 + * Copyright (c) 2013 MundoReader S.L. 3 + * Author: Heiko Stuebner <heiko@sntech.de> 4 + * 5 + * This program is free software; you can redistribute it and/or modify 6 + * it under the terms of the GNU General Public License as published by 7 + * the Free Software Foundation; either version 2 of the License, or 8 + * (at your option) any later version. 9 + * 10 + * This program is distributed in the hope that it will be useful, 11 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 + * GNU General Public License for more details. 14 + */ 15 + 16 + #include <dt-bindings/gpio/gpio.h> 17 + #include <dt-bindings/pinctrl/rockchip.h> 18 + #include "rk3xxx.dtsi" 19 + #include "rk3188-clocks.dtsi" 20 + 21 + / { 22 + compatible = "rockchip,rk3188"; 23 + 24 + cpus { 25 + #address-cells = <1>; 26 + #size-cells = <0>; 27 + 28 + cpu@0 { 29 + device_type = "cpu"; 30 + compatible = "arm,cortex-a9"; 31 + next-level-cache = <&L2>; 32 + reg = <0x0>; 33 + }; 34 + cpu@1 { 35 + device_type = "cpu"; 36 + compatible = "arm,cortex-a9"; 37 + next-level-cache = <&L2>; 38 + reg = <0x1>; 39 + }; 40 + cpu@2 { 41 + device_type = "cpu"; 42 + compatible = "arm,cortex-a9"; 43 + next-level-cache = <&L2>; 44 + reg = <0x2>; 45 + }; 46 + cpu@3 { 47 + device_type = "cpu"; 48 + compatible = "arm,cortex-a9"; 49 + next-level-cache = <&L2>; 50 + reg = <0x3>; 51 + }; 52 + }; 53 + 54 + soc { 55 + global-timer@1013c200 { 56 + interrupts = <GIC_PPI 11 0xf04>; 57 + }; 58 + 59 + local-timer@1013c600 { 60 + interrupts = <GIC_PPI 13 0xf04>; 61 + }; 62 + 63 + pinctrl@20008000 { 64 + compatible = "rockchip,rk3188-pinctrl"; 65 + reg = <0x20008000 0xa0>, 66 + <0x20008164 0x1a0>; 67 + reg-names = "base", "pull"; 68 + #address-cells = <1>; 69 + #size-cells = <1>; 70 + ranges; 71 + 72 + gpio0: gpio0@0x2000a000 { 73 + compatible = "rockchip,rk3188-gpio-bank0"; 74 + reg = <0x2000a000 0x100>, 75 + <0x20004064 0x8>; 76 + interrupts = <GIC_SPI 54 IRQ_TYPE_LEVEL_HIGH>; 77 + clocks = <&clk_gates8 9>; 78 + 79 + gpio-controller; 80 + #gpio-cells = <2>; 81 + 82 + interrupt-controller; 83 + #interrupt-cells = <2>; 84 + }; 85 + 86 + gpio1: gpio1@0x2003c000 { 87 + compatible = "rockchip,gpio-bank"; 88 + reg = <0x2003c000 0x100>; 89 + interrupts = <GIC_SPI 55 IRQ_TYPE_LEVEL_HIGH>; 90 + clocks = <&clk_gates8 10>; 91 + 92 + gpio-controller; 93 + #gpio-cells = <2>; 94 + 95 + interrupt-controller; 96 + #interrupt-cells = <2>; 97 + }; 98 + 99 + gpio2: gpio2@2003e000 { 100 + compatible = "rockchip,gpio-bank"; 101 + reg = <0x2003e000 0x100>; 102 + interrupts = <GIC_SPI 56 IRQ_TYPE_LEVEL_HIGH>; 103 + clocks = <&clk_gates8 11>; 104 + 105 + gpio-controller; 106 + #gpio-cells = <2>; 107 + 108 + interrupt-controller; 109 + #interrupt-cells = <2>; 110 + }; 111 + 112 + gpio3: gpio3@20080000 { 113 + compatible = "rockchip,gpio-bank"; 114 + reg = <0x20080000 0x100>; 115 + interrupts = <GIC_SPI 57 IRQ_TYPE_LEVEL_HIGH>; 116 + clocks = <&clk_gates8 12>; 117 + 118 + gpio-controller; 119 + #gpio-cells = <2>; 120 + 121 + interrupt-controller; 122 + #interrupt-cells = <2>; 123 + }; 124 + 125 + pcfg_pull_up: pcfg_pull_up { 126 + bias-pull-up; 127 + }; 128 + 129 + pcfg_pull_down: pcfg_pull_down { 130 + bias-pull-down; 131 + }; 132 + 133 + pcfg_pull_none: pcfg_pull_none { 134 + bias-disable; 135 + }; 136 + 137 + uart0 { 138 + uart0_xfer: uart0-xfer { 139 + rockchip,pins = <RK_GPIO1 0 RK_FUNC_1 &pcfg_pull_none>, 140 + <RK_GPIO1 1 RK_FUNC_1 &pcfg_pull_none>; 141 + }; 142 + 143 + uart0_cts: uart0-cts { 144 + rockchip,pins = <RK_GPIO1 2 RK_FUNC_1 &pcfg_pull_none>; 145 + }; 146 + 147 + uart0_rts: uart0-rts { 148 + rockchip,pins = <RK_GPIO1 3 RK_FUNC_1 &pcfg_pull_none>; 149 + }; 150 + }; 151 + 152 + uart1 { 153 + uart1_xfer: uart1-xfer { 154 + rockchip,pins = <RK_GPIO1 4 RK_FUNC_1 &pcfg_pull_none>, 155 + <RK_GPIO1 5 RK_FUNC_1 &pcfg_pull_none>; 156 + }; 157 + 158 + uart1_cts: uart1-cts { 159 + rockchip,pins = <RK_GPIO1 6 RK_FUNC_1 &pcfg_pull_none>; 160 + }; 161 + 162 + uart1_rts: uart1-rts { 163 + rockchip,pins = <RK_GPIO1 7 RK_FUNC_1 &pcfg_pull_none>; 164 + }; 165 + }; 166 + 167 + uart2 { 168 + uart2_xfer: uart2-xfer { 169 + rockchip,pins = <RK_GPIO1 8 RK_FUNC_1 &pcfg_pull_none>, 170 + <RK_GPIO1 9 RK_FUNC_1 &pcfg_pull_none>; 171 + }; 172 + /* no rts / cts for uart2 */ 173 + }; 174 + 175 + uart3 { 176 + uart3_xfer: uart3-xfer { 177 + rockchip,pins = <RK_GPIO1 10 RK_FUNC_1 &pcfg_pull_none>, 178 + <RK_GPIO1 11 RK_FUNC_1 &pcfg_pull_none>; 179 + }; 180 + 181 + uart3_cts: uart3-cts { 182 + rockchip,pins = <RK_GPIO1 12 RK_FUNC_1 &pcfg_pull_none>; 183 + }; 184 + 185 + uart3_rts: uart3-rts { 186 + rockchip,pins = <RK_GPIO1 13 RK_FUNC_1 &pcfg_pull_none>; 187 + }; 188 + }; 189 + 190 + sd0 { 191 + sd0_clk: sd0-clk { 192 + rockchip,pins = <RK_GPIO3 2 RK_FUNC_1 &pcfg_pull_none>; 193 + }; 194 + 195 + sd0_cmd: sd0-cmd { 196 + rockchip,pins = <RK_GPIO3 3 RK_FUNC_1 &pcfg_pull_none>; 197 + }; 198 + 199 + sd0_cd: sd0-cd { 200 + rockchip,pins = <RK_GPIO3 8 RK_FUNC_1 &pcfg_pull_none>; 201 + }; 202 + 203 + sd0_wp: sd0-wp { 204 + rockchip,pins = <RK_GPIO3 9 RK_FUNC_1 &pcfg_pull_none>; 205 + }; 206 + 207 + sd0_pwr: sd0-pwr { 208 + rockchip,pins = <RK_GPIO3 1 RK_FUNC_1 &pcfg_pull_none>; 209 + }; 210 + 211 + sd0_bus1: sd0-bus-width1 { 212 + rockchip,pins = <RK_GPIO3 4 RK_FUNC_1 &pcfg_pull_none>; 213 + }; 214 + 215 + sd0_bus4: sd0-bus-width4 { 216 + rockchip,pins = <RK_GPIO3 4 RK_FUNC_1 &pcfg_pull_none>, 217 + <RK_GPIO3 5 RK_FUNC_1 &pcfg_pull_none>, 218 + <RK_GPIO3 6 RK_FUNC_1 &pcfg_pull_none>, 219 + <RK_GPIO3 7 RK_FUNC_1 &pcfg_pull_none>; 220 + }; 221 + }; 222 + 223 + sd1 { 224 + sd1_clk: sd1-clk { 225 + rockchip,pins = <RK_GPIO3 21 RK_FUNC_1 &pcfg_pull_none>; 226 + }; 227 + 228 + sd1_cmd: sd1-cmd { 229 + rockchip,pins = <RK_GPIO3 16 RK_FUNC_1 &pcfg_pull_none>; 230 + }; 231 + 232 + sd1_cd: sd1-cd { 233 + rockchip,pins = <RK_GPIO3 22 RK_FUNC_1 &pcfg_pull_none>; 234 + }; 235 + 236 + sd1_wp: sd1-wp { 237 + rockchip,pins = <RK_GPIO3 23 RK_FUNC_1 &pcfg_pull_none>; 238 + }; 239 + 240 + sd1_bus1: sd1-bus-width1 { 241 + rockchip,pins = <RK_GPIO3 17 RK_FUNC_1 &pcfg_pull_none>; 242 + }; 243 + 244 + sd1_bus4: sd1-bus-width4 { 245 + rockchip,pins = <RK_GPIO3 17 RK_FUNC_1 &pcfg_pull_none>, 246 + <RK_GPIO3 18 RK_FUNC_1 &pcfg_pull_none>, 247 + <RK_GPIO3 19 RK_FUNC_1 &pcfg_pull_none>, 248 + <RK_GPIO3 20 RK_FUNC_1 &pcfg_pull_none>; 249 + }; 250 + }; 251 + }; 252 + }; 253 + };
+124
arch/arm/boot/dts/rk3xxx.dtsi
··· 1 + /* 2 + * Copyright (c) 2013 MundoReader S.L. 3 + * Author: Heiko Stuebner <heiko@sntech.de> 4 + * 5 + * This program is free software; you can redistribute it and/or modify 6 + * it under the terms of the GNU General Public License as published by 7 + * the Free Software Foundation; either version 2 of the License, or 8 + * (at your option) any later version. 9 + * 10 + * This program is distributed in the hope that it will be useful, 11 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 + * GNU General Public License for more details. 14 + */ 15 + 16 + #include <dt-bindings/interrupt-controller/irq.h> 17 + #include <dt-bindings/interrupt-controller/arm-gic.h> 18 + #include "skeleton.dtsi" 19 + 20 + / { 21 + interrupt-parent = <&gic>; 22 + 23 + soc { 24 + #address-cells = <1>; 25 + #size-cells = <1>; 26 + compatible = "simple-bus"; 27 + ranges; 28 + 29 + gic: interrupt-controller@1013d000 { 30 + compatible = "arm,cortex-a9-gic"; 31 + interrupt-controller; 32 + #interrupt-cells = <3>; 33 + reg = <0x1013d000 0x1000>, 34 + <0x1013c100 0x0100>; 35 + }; 36 + 37 + L2: l2-cache-controller@10138000 { 38 + compatible = "arm,pl310-cache"; 39 + reg = <0x10138000 0x1000>; 40 + cache-unified; 41 + cache-level = <2>; 42 + }; 43 + 44 + global-timer@1013c200 { 45 + compatible = "arm,cortex-a9-global-timer"; 46 + reg = <0x1013c200 0x20>; 47 + interrupts = <GIC_PPI 11 0x304>; 48 + clocks = <&dummy150m>; 49 + }; 50 + 51 + local-timer@1013c600 { 52 + compatible = "arm,cortex-a9-twd-timer"; 53 + reg = <0x1013c600 0x20>; 54 + interrupts = <GIC_PPI 13 0x304>; 55 + clocks = <&dummy150m>; 56 + }; 57 + 58 + uart0: serial@10124000 { 59 + compatible = "snps,dw-apb-uart"; 60 + reg = <0x10124000 0x400>; 61 + interrupts = <GIC_SPI 34 IRQ_TYPE_LEVEL_HIGH>; 62 + reg-shift = <2>; 63 + reg-io-width = <1>; 64 + clocks = <&clk_gates1 8>; 65 + status = "disabled"; 66 + }; 67 + 68 + uart1: serial@10126000 { 69 + compatible = "snps,dw-apb-uart"; 70 + reg = <0x10126000 0x400>; 71 + interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; 72 + reg-shift = <2>; 73 + reg-io-width = <1>; 74 + clocks = <&clk_gates1 10>; 75 + status = "disabled"; 76 + }; 77 + 78 + uart2: serial@20064000 { 79 + compatible = "snps,dw-apb-uart"; 80 + reg = <0x20064000 0x400>; 81 + interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; 82 + reg-shift = <2>; 83 + reg-io-width = <1>; 84 + clocks = <&clk_gates1 12>; 85 + status = "disabled"; 86 + }; 87 + 88 + uart3: serial@20068000 { 89 + compatible = "snps,dw-apb-uart"; 90 + reg = <0x20068000 0x400>; 91 + interrupts = <GIC_SPI 37 IRQ_TYPE_LEVEL_HIGH>; 92 + reg-shift = <2>; 93 + reg-io-width = <1>; 94 + clocks = <&clk_gates1 14>; 95 + status = "disabled"; 96 + }; 97 + 98 + dwmmc@10214000 { 99 + compatible = "rockchip,rk2928-dw-mshc"; 100 + reg = <0x10214000 0x1000>; 101 + interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>; 102 + #address-cells = <1>; 103 + #size-cells = <0>; 104 + 105 + clocks = <&clk_gates5 10>, <&clk_gates2 11>; 106 + clock-names = "biu", "ciu"; 107 + 108 + status = "disabled"; 109 + }; 110 + 111 + dwmmc@10218000 { 112 + compatible = "rockchip,rk2928-dw-mshc"; 113 + reg = <0x10218000 0x1000>; 114 + interrupts = <GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>; 115 + #address-cells = <1>; 116 + #size-cells = <0>; 117 + 118 + clocks = <&clk_gates5 11>, <&clk_gates2 13>; 119 + clock-names = "biu", "ciu"; 120 + 121 + status = "disabled"; 122 + }; 123 + }; 124 + };
+4
arch/arm/configs/bockw_defconfig
··· 91 91 CONFIG_VIDEO_ML86V7667=y 92 92 CONFIG_SPI=y 93 93 CONFIG_SPI_SH_HSPI=y 94 + CONFIG_SOUND=y 95 + CONFIG_SND=y 96 + CONFIG_SND_SOC=y 97 + CONFIG_SND_SOC_RCAR=y 94 98 CONFIG_USB=y 95 99 CONFIG_USB_ANNOUNCE_NEW_DEVICES=y 96 100 CONFIG_USB_EHCI_HCD=y
+54
arch/arm/configs/koelsch_defconfig
··· 1 + CONFIG_SYSVIPC=y 2 + CONFIG_NO_HZ=y 3 + CONFIG_IKCONFIG=y 4 + CONFIG_IKCONFIG_PROC=y 5 + CONFIG_LOG_BUF_SHIFT=16 6 + CONFIG_CC_OPTIMIZE_FOR_SIZE=y 7 + CONFIG_SYSCTL_SYSCALL=y 8 + CONFIG_EMBEDDED=y 9 + CONFIG_PERF_EVENTS=y 10 + CONFIG_SLAB=y 11 + # CONFIG_BLOCK is not set 12 + CONFIG_ARCH_SHMOBILE=y 13 + CONFIG_ARCH_R8A7791=y 14 + CONFIG_MACH_KOELSCH=y 15 + # CONFIG_SWP_EMULATE is not set 16 + CONFIG_CPU_BPREDICT_DISABLE=y 17 + CONFIG_PL310_ERRATA_588369=y 18 + CONFIG_ARM_ERRATA_754322=y 19 + CONFIG_SMP=y 20 + CONFIG_SCHED_MC=y 21 + CONFIG_NR_CPUS=8 22 + CONFIG_AEABI=y 23 + CONFIG_ZBOOT_ROM_TEXT=0x0 24 + CONFIG_ZBOOT_ROM_BSS=0x0 25 + CONFIG_ARM_APPENDED_DTB=y 26 + CONFIG_KEXEC=y 27 + CONFIG_AUTO_ZRELADDR=y 28 + CONFIG_VFP=y 29 + CONFIG_NEON=y 30 + # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set 31 + CONFIG_PM_RUNTIME=y 32 + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 33 + # CONFIG_INPUT_MOUSEDEV_PSAUX is not set 34 + # CONFIG_INPUT_MOUSE is not set 35 + # CONFIG_LEGACY_PTYS is not set 36 + CONFIG_SERIAL_SH_SCI=y 37 + CONFIG_SERIAL_SH_SCI_NR_UARTS=20 38 + CONFIG_SERIAL_SH_SCI_CONSOLE=y 39 + # CONFIG_HWMON is not set 40 + CONFIG_THERMAL=y 41 + CONFIG_RCAR_THERMAL=y 42 + # CONFIG_HID is not set 43 + # CONFIG_USB_SUPPORT is not set 44 + CONFIG_NEW_LEDS=y 45 + CONFIG_LEDS_CLASS=y 46 + # CONFIG_IOMMU_SUPPORT is not set 47 + # CONFIG_DNOTIFY is not set 48 + # CONFIG_INOTIFY_USER is not set 49 + CONFIG_TMPFS=y 50 + CONFIG_CONFIGFS_FS=y 51 + # CONFIG_MISC_FILESYSTEMS is not set 52 + # CONFIG_ENABLE_WARN_DEPRECATED is not set 53 + # CONFIG_ENABLE_MUST_CHECK is not set 54 + # CONFIG_ARM_UNWIND is not set
+2
arch/arm/configs/lager_defconfig
··· 89 89 CONFIG_RCAR_THERMAL=y 90 90 CONFIG_REGULATOR=y 91 91 CONFIG_REGULATOR_FIXED_VOLTAGE=y 92 + CONFIG_DRM=y 93 + CONFIG_DRM_RCAR_DU=y 92 94 # CONFIG_USB_SUPPORT is not set 93 95 CONFIG_MMC=y 94 96 CONFIG_MMC_SDHI=y
+2
arch/arm/configs/marzen_defconfig
··· 92 92 CONFIG_VIDEO_RCAR_VIN=y 93 93 # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set 94 94 CONFIG_VIDEO_ADV7180=y 95 + CONFIG_DRM=y 96 + CONFIG_DRM_RCAR_DU=y 95 97 CONFIG_USB=y 96 98 CONFIG_USB_RCAR_PHY=y 97 99 CONFIG_MMC=y
+5
arch/arm/configs/tegra_defconfig
··· 27 27 CONFIG_ARCH_TEGRA_2x_SOC=y 28 28 CONFIG_ARCH_TEGRA_3x_SOC=y 29 29 CONFIG_ARCH_TEGRA_114_SOC=y 30 + CONFIG_ARCH_TEGRA_124_SOC=y 30 31 CONFIG_TEGRA_EMC_SCALING_ENABLE=y 31 32 CONFIG_PCI=y 32 33 CONFIG_PCI_MSI=y ··· 42 41 CONFIG_ZBOOT_ROM_BSS=0x0 43 42 CONFIG_KEXEC=y 44 43 CONFIG_CPU_FREQ=y 44 + CONFIG_CPU_FREQ_STAT_DETAILS=y 45 45 CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y 46 46 CONFIG_CPU_IDLE=y 47 47 CONFIG_VFP=y 48 + CONFIG_NEON=y 48 49 CONFIG_PM_RUNTIME=y 49 50 CONFIG_NET=y 50 51 CONFIG_PACKET=y ··· 132 129 CONFIG_SPI_TEGRA114=y 133 130 CONFIG_SPI_TEGRA20_SFLASH=y 134 131 CONFIG_SPI_TEGRA20_SLINK=y 132 + CONFIG_PINCTRL_PALMAS=y 135 133 CONFIG_GPIO_PCA953X_IRQ=y 136 134 CONFIG_GPIO_PALMAS=y 137 135 CONFIG_GPIO_TPS6586X=y ··· 227 223 CONFIG_SERIO_NVEC_PS2=y 228 224 CONFIG_NVEC_POWER=y 229 225 CONFIG_NVEC_PAZ00=y 226 + CONFIG_COMMON_CLK_DEBUG=y 230 227 CONFIG_TEGRA_IOMMU_GART=y 231 228 CONFIG_TEGRA_IOMMU_SMMU=y 232 229 CONFIG_MEMORY=y
+1 -5
arch/arm/mach-omap2/Makefile
··· 8 8 # Common support 9 9 obj-y := id.o io.o control.o mux.o devices.o fb.o serial.o gpmc.o timer.o pm.o \ 10 10 common.o gpio.o dma.o wd_timer.o display.o i2c.o hdq1w.o omap_hwmod.o \ 11 - omap_device.o sram.o 11 + omap_device.o sram.o drm.o 12 12 13 13 omap-2-3-common = irq.o 14 14 hwmod-common = omap_hwmod.o omap_hwmod_reset.o \ ··· 234 234 235 235 # OMAP2420 MSDI controller integration support ("MMC") 236 236 obj-$(CONFIG_SOC_OMAP2420) += msdi.o 237 - 238 - ifneq ($(CONFIG_DRM_OMAP),) 239 - obj-y += drm.o 240 - endif 241 237 242 238 # Specific board support 243 239 obj-$(CONFIG_MACH_OMAP_GENERIC) += board-generic.o
+19
arch/arm/mach-omap2/board-rx51-peripherals.c
··· 57 57 #include "common-board-devices.h" 58 58 #include "gpmc.h" 59 59 #include "gpmc-onenand.h" 60 + #include "soc.h" 61 + #include "omap-secure.h" 60 62 61 63 #define SYSTEM_REV_B_USES_VAUX3 0x1699 62 64 #define SYSTEM_REV_S_USES_VAUX3 0x8 ··· 1300 1298 platform_device_register(&madc_hwmon); 1301 1299 } 1302 1300 1301 + static struct platform_device omap3_rom_rng_device = { 1302 + .name = "omap3-rom-rng", 1303 + .id = -1, 1304 + .dev = { 1305 + .platform_data = rx51_secure_rng_call, 1306 + }, 1307 + }; 1308 + 1309 + static void __init rx51_init_omap3_rom_rng(void) 1310 + { 1311 + if (omap_type() == OMAP2_DEVICE_TYPE_SEC) { 1312 + pr_info("RX-51: Registring OMAP3 HWRNG device\n"); 1313 + platform_device_register(&omap3_rom_rng_device); 1314 + } 1315 + } 1316 + 1303 1317 void __init rx51_peripherals_init(void) 1304 1318 { 1305 1319 rx51_i2c_init(); ··· 1336 1318 1337 1319 rx51_charger_init(); 1338 1320 rx51_init_twl4030_hwmon(); 1321 + rx51_init_omap3_rom_rng(); 1339 1322 } 1340 1323
+12
arch/arm/mach-omap2/board-rx51.c
··· 2 2 * Board support file for Nokia N900 (aka RX-51). 3 3 * 4 4 * Copyright (C) 2007, 2008 Nokia 5 + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg> 6 + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> 5 7 * 6 8 * This program is free software; you can redistribute it and/or modify 7 9 * it under the terms of the GNU General Public License version 2 as ··· 33 31 #include "mux.h" 34 32 #include "gpmc.h" 35 33 #include "pm.h" 34 + #include "soc.h" 36 35 #include "sdram-nokia.h" 36 + #include "omap-secure.h" 37 37 38 38 #define RX51_GPIO_SLEEP_IND 162 39 39 ··· 106 102 usb_bind_phy("musb-hdrc.0.auto", 0, "twl4030_usb"); 107 103 usb_musb_init(&musb_board_data); 108 104 rx51_peripherals_init(); 105 + 106 + if (omap_type() == OMAP2_DEVICE_TYPE_SEC) { 107 + #ifdef CONFIG_ARM_ERRATA_430973 108 + pr_info("RX-51: Enabling ARM errata 430973 workaround\n"); 109 + /* set IBE to 1 */ 110 + rx51_secure_update_aux_cr(BIT(6), 0); 111 + #endif 112 + } 109 113 110 114 /* Ensure SDRC pins are mux'd for self-refresh */ 111 115 omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT);
+1
arch/arm/mach-omap2/cclock3xxx_data.c
··· 3275 3275 static struct omap_clk omap34xx_omap36xx_clks[] = { 3276 3276 CLK(NULL, "aes1_ick", &aes1_ick), 3277 3277 CLK("omap_rng", "ick", &rng_ick), 3278 + CLK("omap3-rom-rng", "ick", &rng_ick), 3278 3279 CLK(NULL, "sha11_ick", &sha11_ick), 3279 3280 CLK(NULL, "des1_ick", &des1_ick), 3280 3281 CLK(NULL, "cam_mclk", &cam_mclk),
+5 -5
arch/arm/mach-omap2/devices.c
··· 37 37 #include "mux.h" 38 38 #include "control.h" 39 39 #include "devices.h" 40 + #include "display.h" 40 41 41 42 #define L3_MODULES_MAX_LEN 12 42 43 #define L3_MODULES 3 ··· 467 466 .resource = &omap_vout_resource[0], 468 467 .id = -1, 469 468 }; 470 - static void omap_init_vout(void) 469 + 470 + int __init omap_init_vout(void) 471 471 { 472 - if (platform_device_register(&omap_vout_device) < 0) 473 - printk(KERN_ERR "Unable to register OMAP-VOUT device\n"); 472 + return platform_device_register(&omap_vout_device); 474 473 } 475 474 #else 476 - static inline void omap_init_vout(void) {} 475 + int __init omap_init_vout(void) { return 0; } 477 476 #endif 478 477 479 478 #if IS_ENABLED(CONFIG_WL12XX) ··· 537 536 omap_init_wl12xx_of(); 538 537 } 539 538 omap_init_sti(); 540 - omap_init_vout(); 541 539 542 540 return 0; 543 541 }
+28
arch/arm/mach-omap2/display.c
··· 416 416 } 417 417 } 418 418 419 + /* create DRM device */ 420 + r = omap_init_drm(); 421 + if (r < 0) { 422 + pr_err("Unable to register omapdrm device\n"); 423 + return r; 424 + } 425 + 426 + /* create vrfb device */ 427 + r = omap_init_vrfb(); 428 + if (r < 0) { 429 + pr_err("Unable to register omapvrfb device\n"); 430 + return r; 431 + } 432 + 433 + /* create FB device */ 434 + r = omap_init_fb(); 435 + if (r < 0) { 436 + pr_err("Unable to register omapfb device\n"); 437 + return r; 438 + } 439 + 440 + /* create V4L2 display device */ 441 + r = omap_init_vout(); 442 + if (r < 0) { 443 + pr_err("Unable to register omap_vout device\n"); 444 + return r; 445 + } 446 + 419 447 return 0; 420 448 } 421 449
+4
arch/arm/mach-omap2/display.h
··· 26 26 bool has_framedonetv_irq; 27 27 }; 28 28 29 + int omap_init_drm(void); 30 + int omap_init_vrfb(void); 31 + int omap_init_fb(void); 32 + int omap_init_vout(void); 29 33 #endif
+5 -19
arch/arm/mach-omap2/drm.c
··· 26 26 #include <linux/platform_data/omap_drm.h> 27 27 28 28 #include "soc.h" 29 - #include "omap_device.h" 30 - #include "omap_hwmod.h" 29 + #include "display.h" 31 30 32 - #if defined(CONFIG_DRM_OMAP) || (CONFIG_DRM_OMAP_MODULE) 31 + #if defined(CONFIG_DRM_OMAP) || defined(CONFIG_DRM_OMAP_MODULE) 33 32 34 33 static struct omap_drm_platform_data platform_data; 35 34 ··· 41 42 .id = 0, 42 43 }; 43 44 44 - static int __init omap_init_drm(void) 45 + int __init omap_init_drm(void) 45 46 { 46 - struct omap_hwmod *oh = NULL; 47 - struct platform_device *pdev; 48 - 49 - /* lookup and populate the DMM information, if present - OMAP4+ */ 50 - oh = omap_hwmod_lookup("dmm"); 51 - 52 - if (oh) { 53 - pdev = omap_device_build(oh->name, -1, oh, NULL, 0); 54 - WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", 55 - oh->name); 56 - } 57 - 58 47 platform_data.omaprev = GET_OMAP_TYPE; 59 48 60 49 return platform_device_register(&omap_drm_device); 61 50 62 51 } 63 - 64 - omap_arch_initcall(omap_init_drm); 65 - 52 + #else 53 + int __init omap_init_drm(void) { return 0; } 66 54 #endif
+7 -7
arch/arm/mach-omap2/fb.c
··· 32 32 #include <asm/mach/map.h> 33 33 34 34 #include "soc.h" 35 + #include "display.h" 35 36 36 37 #ifdef CONFIG_OMAP2_VRFB 37 38 ··· 65 64 DEFINE_RES_MEM_NAMED(0xfc000000u, 0x4000000, "vrfb-area-11"), 66 65 }; 67 66 68 - static int __init omap_init_vrfb(void) 67 + int __init omap_init_vrfb(void) 69 68 { 70 69 struct platform_device *pdev; 71 70 const struct resource *res; ··· 86 85 87 86 return PTR_RET(pdev); 88 87 } 89 - 90 - omap_arch_initcall(omap_init_vrfb); 88 + #else 89 + int __init omap_init_vrfb(void) { return 0; } 91 90 #endif 92 91 93 92 #if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE) ··· 106 105 .num_resources = 0, 107 106 }; 108 107 109 - static int __init omap_init_fb(void) 108 + int __init omap_init_fb(void) 110 109 { 111 110 return platform_device_register(&omap_fb_device); 112 111 } 113 - 114 - omap_arch_initcall(omap_init_fb); 115 - 112 + #else 113 + int __init omap_init_fb(void) { return 0; } 116 114 #endif
+76
arch/arm/mach-omap2/omap-secure.c
··· 3 3 * 4 4 * Copyright (C) 2011 Texas Instruments, Inc. 5 5 * Santosh Shilimkar <santosh.shilimkar@ti.com> 6 + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg> 7 + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> 6 8 * 7 9 * 8 10 * This program is free software,you can redistribute it and/or modify ··· 71 69 phys_addr_t omap_secure_ram_mempool_base(void) 72 70 { 73 71 return omap_secure_memblock_base; 72 + } 73 + 74 + /** 75 + * rx51_secure_dispatcher: Routine to dispatch secure PPA API calls 76 + * @idx: The PPA API index 77 + * @process: Process ID 78 + * @flag: The flag indicating criticality of operation 79 + * @nargs: Number of valid arguments out of four. 80 + * @arg1, arg2, arg3 args4: Parameters passed to secure API 81 + * 82 + * Return the non-zero error value on failure. 83 + * 84 + * NOTE: rx51_secure_dispatcher differs from omap_secure_dispatcher because 85 + * it calling omap_smc3() instead omap_smc2() and param[0] is nargs+1 86 + */ 87 + u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, 88 + u32 arg1, u32 arg2, u32 arg3, u32 arg4) 89 + { 90 + u32 ret; 91 + u32 param[5]; 92 + 93 + param[0] = nargs+1; /* RX-51 needs number of arguments + 1 */ 94 + param[1] = arg1; 95 + param[2] = arg2; 96 + param[3] = arg3; 97 + param[4] = arg4; 98 + 99 + /* 100 + * Secure API needs physical address 101 + * pointer for the parameters 102 + */ 103 + local_irq_disable(); 104 + local_fiq_disable(); 105 + flush_cache_all(); 106 + outer_clean_range(__pa(param), __pa(param + 5)); 107 + ret = omap_smc3(idx, process, flag, __pa(param)); 108 + flush_cache_all(); 109 + local_fiq_enable(); 110 + local_irq_enable(); 111 + 112 + return ret; 113 + } 114 + 115 + /** 116 + * rx51_secure_update_aux_cr: Routine to modify the contents of Auxiliary Control Register 117 + * @set_bits: bits to set in ACR 118 + * @clr_bits: bits to clear in ACR 119 + * 120 + * Return the non-zero error value on failure. 121 + */ 122 + u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits) 123 + { 124 + u32 acr; 125 + 126 + /* Read ACR */ 127 + asm volatile ("mrc p15, 0, %0, c1, c0, 1" : "=r" (acr)); 128 + acr &= ~clear_bits; 129 + acr |= set_bits; 130 + 131 + return rx51_secure_dispatcher(RX51_PPA_WRITE_ACR, 132 + 0, 133 + FLAG_START_CRITICAL, 134 + 1, acr, 0, 0, 0); 135 + } 136 + 137 + /** 138 + * rx51_secure_rng_call: Routine for HW random generator 139 + */ 140 + u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag) 141 + { 142 + return rx51_secure_dispatcher(RX51_PPA_HWRNG, 143 + 0, 144 + NO_FLAG, 145 + 3, ptr, count, flag, 0); 74 146 }
+13
arch/arm/mach-omap2/omap-secure.h
··· 3 3 * 4 4 * Copyright (C) 2011 Texas Instruments, Inc. 5 5 * Santosh Shilimkar <santosh.shilimkar@ti.com> 6 + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg> 7 + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> 6 8 * 7 9 * This program is free software; you can redistribute it and/or modify 8 10 * it under the terms of the GNU General Public License version 2 as ··· 50 48 #define OMAP4_PPA_L2_POR_INDEX 0x23 51 49 #define OMAP4_PPA_CPU_ACTRL_SMP_INDEX 0x25 52 50 51 + /* Secure RX-51 PPA (Primary Protected Application) APIs */ 52 + #define RX51_PPA_HWRNG 29 53 + #define RX51_PPA_L2_INVAL 40 54 + #define RX51_PPA_WRITE_ACR 42 55 + 53 56 #ifndef __ASSEMBLER__ 54 57 55 58 extern u32 omap_secure_dispatcher(u32 idx, u32 flag, u32 nargs, 56 59 u32 arg1, u32 arg2, u32 arg3, u32 arg4); 57 60 extern u32 omap_smc2(u32 id, u32 falg, u32 pargs); 61 + extern u32 omap_smc3(u32 id, u32 process, u32 flag, u32 pargs); 58 62 extern phys_addr_t omap_secure_ram_mempool_base(void); 59 63 extern int omap_secure_ram_reserve_memblock(void); 64 + 65 + extern u32 rx51_secure_dispatcher(u32 idx, u32 process, u32 flag, u32 nargs, 66 + u32 arg1, u32 arg2, u32 arg3, u32 arg4); 67 + extern u32 rx51_secure_update_aux_cr(u32 set_bits, u32 clear_bits); 68 + extern u32 rx51_secure_rng_call(u32 ptr, u32 count, u32 flag); 60 69 61 70 #ifdef CONFIG_OMAP4_ERRATA_I688 62 71 extern int omap_barrier_reserve_memblock(void);
+20 -1
arch/arm/mach-omap2/omap-smc.S
··· 1 1 /* 2 - * OMAP44xx secure APIs file. 2 + * OMAP34xx and OMAP44xx secure APIs file. 3 3 * 4 4 * Copyright (C) 2010 Texas Instruments, Inc. 5 5 * Written by Santosh Shilimkar <santosh.shilimkar@ti.com> 6 6 * 7 + * Copyright (C) 2012 Ivaylo Dimitrov <freemangordon@abv.bg> 8 + * Copyright (C) 2013 Pali Rohár <pali.rohar@gmail.com> 7 9 * 8 10 * This program is free software,you can redistribute it and/or modify 9 11 * it under the terms of the GNU General Public License version 2 as ··· 55 53 smc #0 56 54 ldmfd sp!, {r4-r12, pc} 57 55 ENDPROC(omap_smc2) 56 + 57 + /** 58 + * u32 omap_smc3(u32 service_id, u32 process_id, u32 flag, u32 pargs) 59 + * Low level common routine for secure HAL and PPA APIs via smc #1 60 + * r0 - @service_id: Secure Service ID 61 + * r1 - @process_id: Process ID 62 + * r2 - @flag: Flag to indicate the criticality of operation 63 + * r3 - @pargs: Physical address of parameter list 64 + */ 65 + ENTRY(omap_smc3) 66 + stmfd sp!, {r4-r11, lr} 67 + mov r12, r0 @ Copy the secure service ID 68 + mov r6, #0xff @ Indicate new Task call 69 + dsb @ Memory Barrier (not sure if needed, copied from omap_smc2) 70 + smc #1 @ Call PPA service 71 + ldmfd sp!, {r4-r11, pc} 72 + ENDPROC(omap_smc3) 58 73 59 74 ENTRY(omap_modify_auxcoreboot0) 60 75 stmfd sp!, {r1-r12, lr}
+2
arch/arm/mach-rockchip/Kconfig
··· 10 10 select COMMON_CLK 11 11 select GENERIC_CLOCKEVENTS 12 12 select DW_APB_TIMER_OF 13 + select ARM_GLOBAL_TIMER 14 + select CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK 13 15 help 14 16 Support for Rockchip's Cortex-A9 Single-to-Quad-Core-SoCs 15 17 containing the RK2928, RK30xx and RK31xx series.
+14 -20
arch/arm/mach-shmobile/Kconfig
··· 22 22 23 23 comment "SH-Mobile Board Type" 24 24 25 - config MACH_KZM9D_REFERENCE 26 - bool "KZM9D board - Reference Device Tree Implementation" 25 + config MACH_KZM9D 26 + bool "KZM9D board" 27 27 depends on ARCH_EMEV2 28 28 select REGULATOR_FIXED_VOLTAGE if REGULATOR 29 - ---help--- 30 - Use reference implementation of KZM9D board support 31 - which makes a greater use of device tree at the expense 32 - of not supporting a number of devices. 33 - 34 - This is intended to aid developers 35 29 36 30 comment "SH-Mobile System Configuration" 37 31 endif ··· 168 174 select RENESAS_INTC_IRQPIN 169 175 select REGULATOR_FIXED_VOLTAGE if REGULATOR 170 176 select USE_OF 177 + select SND_SOC_AK4554 if SND_SIMPLE_CARD 178 + select SND_SOC_AK4642 if SND_SIMPLE_CARD 171 179 172 180 config MACH_BOCKW_REFERENCE 173 181 bool "BOCK-W - Reference Device Tree Implementation" ··· 184 188 of not supporting a number of devices. 185 189 186 190 This is intended to aid developers 191 + 192 + config MACH_GENMAI 193 + bool "Genmai board" 194 + depends on ARCH_R7S72100 195 + select USE_OF 187 196 188 197 config MACH_MARZEN 189 198 bool "MARZEN board" ··· 226 225 227 226 This is intended to aid developers 228 227 228 + config MACH_KOELSCH 229 + bool "Koelsch board" 230 + depends on ARCH_R8A7791 231 + select USE_OF 232 + 229 233 config MACH_KZM9D 230 234 bool "KZM9D board" 231 235 depends on ARCH_EMEV2 232 236 select REGULATOR_FIXED_VOLTAGE if REGULATOR 233 237 select USE_OF 234 - 235 - config MACH_KZM9D_REFERENCE 236 - bool "KZM9D board - Reference Device Tree Implementation" 237 - depends on ARCH_EMEV2 238 - select REGULATOR_FIXED_VOLTAGE if REGULATOR 239 - select USE_OF 240 - ---help--- 241 - Use reference implementation of KZM9D board support 242 - which makes a greater use of device tree at the expense 243 - of not supporting a number of devices. 244 - 245 - This is intended to aid developers 246 238 247 239 config MACH_KZM9G 248 240 bool "KZM-A9-GT board"
+6 -1
arch/arm/mach-shmobile/Makefile
··· 55 55 obj-$(CONFIG_ARCH_R8A7779) += pm-r8a7779.o 56 56 57 57 # Board objects 58 + ifdef CONFIG_ARCH_SHMOBILE_MULTI 59 + obj-$(CONFIG_MACH_KZM9D) += board-kzm9d-reference.o 60 + else 58 61 obj-$(CONFIG_MACH_APE6EVM) += board-ape6evm.o 59 62 obj-$(CONFIG_MACH_APE6EVM_REFERENCE) += board-ape6evm-reference.o 60 63 obj-$(CONFIG_MACH_MACKEREL) += board-mackerel.o 61 64 obj-$(CONFIG_MACH_BOCKW) += board-bockw.o 62 65 obj-$(CONFIG_MACH_BOCKW_REFERENCE) += board-bockw-reference.o 66 + obj-$(CONFIG_MACH_GENMAI) += board-genmai.o 63 67 obj-$(CONFIG_MACH_MARZEN) += board-marzen.o 64 68 obj-$(CONFIG_MACH_MARZEN_REFERENCE) += board-marzen-reference.o 65 69 obj-$(CONFIG_MACH_LAGER) += board-lager.o 66 70 obj-$(CONFIG_MACH_LAGER_REFERENCE) += board-lager-reference.o 67 71 obj-$(CONFIG_MACH_ARMADILLO800EVA) += board-armadillo800eva.o 68 72 obj-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += board-armadillo800eva-reference.o 73 + obj-$(CONFIG_MACH_KOELSCH) += board-koelsch.o 69 74 obj-$(CONFIG_MACH_KZM9D) += board-kzm9d.o 70 - obj-$(CONFIG_MACH_KZM9D_REFERENCE) += board-kzm9d-reference.o 71 75 obj-$(CONFIG_MACH_KZM9G) += board-kzm9g.o 72 76 obj-$(CONFIG_MACH_KZM9G_REFERENCE) += board-kzm9g-reference.o 77 + endif 73 78 74 79 # Framework support 75 80 obj-$(CONFIG_SMP) += $(smp-y)
+2 -1
arch/arm/mach-shmobile/Makefile.boot
··· 6 6 loadaddr-$(CONFIG_MACH_ARMADILLO800EVA_REFERENCE) += 0x40008000 7 7 loadaddr-$(CONFIG_MACH_BOCKW) += 0x60008000 8 8 loadaddr-$(CONFIG_MACH_BOCKW_REFERENCE) += 0x60008000 9 + loadaddr-$(CONFIG_MACH_GENMAI) += 0x8008000 10 + loadaddr-$(CONFIG_MACH_KOELSCH) += 0x40008000 9 11 loadaddr-$(CONFIG_MACH_KZM9D) += 0x40008000 10 - loadaddr-$(CONFIG_MACH_KZM9D_REFERENCE) += 0x40008000 11 12 loadaddr-$(CONFIG_MACH_KZM9G) += 0x41008000 12 13 loadaddr-$(CONFIG_MACH_KZM9G_REFERENCE) += 0x41008000 13 14 loadaddr-$(CONFIG_MACH_LAGER) += 0x40008000
+49 -8
arch/arm/mach-shmobile/board-ape6evm.c
··· 113 113 }; 114 114 115 115 /* 116 - * On APE6EVM power is supplied to MMCIF by a tps80032 regulator. For now we 117 - * model a VDD supply to MMCIF, using a fixed 3.3V regulator. Also use the 118 - * static power supply for SDHI0 and SDHI1, whereas SDHI0's VccQ is also 119 - * supplied by the same tps80032 regulator and thus can also be adjusted 120 - * dynamically. 116 + * MMC0 power supplies: 117 + * Both Vcc and VccQ to eMMC on APE6EVM are supplied by a tps80032 voltage 118 + * regulator. Until support for it is added to this file we simulate the 119 + * Vcc supply by a fixed always-on regulator 121 120 */ 122 - static struct regulator_consumer_supply fixed3v3_power_consumers[] = 121 + static struct regulator_consumer_supply vcc_mmc0_consumers[] = 123 122 { 124 123 REGULATOR_SUPPLY("vmmc", "sh_mmcif.0"), 124 + }; 125 + 126 + /* 127 + * SDHI0 power supplies: 128 + * Vcc to SDHI0 on APE6EVM is supplied by a GPIO-switchable regulator. VccQ is 129 + * provided by the same tps80032 regulator as both MMC0 voltages - see comment 130 + * above 131 + */ 132 + static struct regulator_consumer_supply vcc_sdhi0_consumers[] = 133 + { 125 134 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.0"), 135 + }; 136 + 137 + static struct regulator_init_data vcc_sdhi0_init_data = { 138 + .constraints = { 139 + .valid_ops_mask = REGULATOR_CHANGE_STATUS, 140 + }, 141 + .num_consumer_supplies = ARRAY_SIZE(vcc_sdhi0_consumers), 142 + .consumer_supplies = vcc_sdhi0_consumers, 143 + }; 144 + 145 + static const struct fixed_voltage_config vcc_sdhi0_info __initconst = { 146 + .supply_name = "SDHI0 Vcc", 147 + .microvolts = 3300000, 148 + .gpio = 76, 149 + .enable_high = 1, 150 + .init_data = &vcc_sdhi0_init_data, 151 + }; 152 + 153 + /* 154 + * SDHI1 power supplies: 155 + * Vcc and VccQ to SDHI1 on APE6EVM are both fixed at 3.3V 156 + */ 157 + static struct regulator_consumer_supply vcc_sdhi1_consumers[] = 158 + { 126 159 REGULATOR_SUPPLY("vmmc", "sh_mobile_sdhi.1"), 127 160 }; 128 161 129 162 /* MMCIF */ 130 163 static const struct sh_mmcif_plat_data mmcif0_pdata __initconst = { 131 164 .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, 165 + .slave_id_tx = SHDMA_SLAVE_MMCIF0_TX, 166 + .slave_id_rx = SHDMA_SLAVE_MMCIF0_RX, 167 + .ccs_unsupported = true, 132 168 }; 133 169 134 170 static const struct resource mmcif0_resources[] __initconst = { ··· 251 215 platform_device_register_resndata(&platform_bus, "smsc911x", -1, 252 216 lan9220_res, ARRAY_SIZE(lan9220_res), 253 217 &lan9220_data, sizeof(lan9220_data)); 254 - regulator_register_always_on(1, "fixed-3.3V", fixed3v3_power_consumers, 255 - ARRAY_SIZE(fixed3v3_power_consumers), 3300000); 218 + 219 + regulator_register_always_on(1, "MMC0 Vcc", vcc_mmc0_consumers, 220 + ARRAY_SIZE(vcc_mmc0_consumers), 2800000); 256 221 platform_device_register_resndata(&platform_bus, "sh_mmcif", 0, 257 222 mmcif0_resources, ARRAY_SIZE(mmcif0_resources), 258 223 &mmcif0_pdata, sizeof(mmcif0_pdata)); 224 + platform_device_register_data(&platform_bus, "reg-fixed-voltage", 2, 225 + &vcc_sdhi0_info, sizeof(vcc_sdhi0_info)); 259 226 platform_device_register_resndata(&platform_bus, "sh_mobile_sdhi", 0, 260 227 sdhi0_resources, ARRAY_SIZE(sdhi0_resources), 261 228 &sdhi0_pdata, sizeof(sdhi0_pdata)); 229 + regulator_register_always_on(3, "SDHI1 Vcc", vcc_sdhi1_consumers, 230 + ARRAY_SIZE(vcc_sdhi1_consumers), 3300000); 262 231 platform_device_register_resndata(&platform_bus, "sh_mobile_sdhi", 1, 263 232 sdhi1_resources, ARRAY_SIZE(sdhi1_resources), 264 233 &sdhi1_pdata, sizeof(sdhi1_pdata));
+1
arch/arm/mach-shmobile/board-armadillo800eva.c
··· 823 823 .caps = MMC_CAP_4_BIT_DATA | 824 824 MMC_CAP_8_BIT_DATA | 825 825 MMC_CAP_NONREMOVABLE, 826 + .ccs_unsupported = true, 826 827 .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, 827 828 .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, 828 829 };
+20
arch/arm/mach-shmobile/board-bockw-reference.c
··· 36 36 "scif0_ctrl", "scif0"), 37 37 }; 38 38 39 + #define FPGA 0x18200000 40 + #define IRQ0MR 0x30 41 + #define COMCTLR 0x101c 39 42 static void __init bockw_init(void) 40 43 { 44 + static void __iomem *fpga; 45 + 41 46 r8a7778_clock_init(); 47 + r8a7778_init_irq_extpin_dt(1); 42 48 43 49 pinctrl_register_mappings(bockw_pinctrl_map, 44 50 ARRAY_SIZE(bockw_pinctrl_map)); 45 51 r8a7778_pinmux_init(); 46 52 r8a7778_add_dt_devices(); 53 + 54 + fpga = ioremap_nocache(FPGA, SZ_1M); 55 + if (fpga) { 56 + /* 57 + * CAUTION 58 + * 59 + * IRQ0/1 is cascaded interrupt from FPGA. 60 + * it should be cared in the future 61 + * Now, it is assuming IRQ0 was used only from SMSC. 62 + */ 63 + u16 val = ioread16(fpga + IRQ0MR); 64 + val &= ~(1 << 4); /* enable SMSC911x */ 65 + iowrite16(val, fpga + IRQ0MR); 66 + } 47 67 48 68 of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); 49 69 }
+361 -11
arch/arm/mach-shmobile/board-bockw.c
··· 32 32 #include <linux/smsc911x.h> 33 33 #include <linux/spi/spi.h> 34 34 #include <linux/spi/flash.h> 35 + #include <linux/usb/renesas_usbhs.h> 35 36 #include <media/soc_camera.h> 36 37 #include <mach/common.h> 37 38 #include <mach/irqs.h> 38 39 #include <mach/r8a7778.h> 39 40 #include <asm/mach/arch.h> 41 + #include <sound/rcar_snd.h> 42 + #include <sound/simple_card.h> 43 + 44 + #define FPGA 0x18200000 45 + #define IRQ0MR 0x30 46 + #define COMCTLR 0x101c 47 + static void __iomem *fpga; 40 48 41 49 /* 42 50 * CN9(Upper side) SCIF/RCAN selection ··· 71 63 * SW19 (MMC) 1 pin 72 64 */ 73 65 66 + /* 67 + * SSI settings 68 + * 69 + * SW45: 1-4 side (SSI5 out, ROUT/LOUT CN19 Mid) 70 + * SW46: 1101 (SSI6 Recorde) 71 + * SW47: 1110 (SSI5 Playback) 72 + * SW48: 11 (Recorde power) 73 + * SW49: 1 (SSI slave mode) 74 + * SW50: 1111 (SSI7, SSI8) 75 + * SW51: 1111 (SSI3, SSI4) 76 + * SW54: 1pin (ak4554 FPGA control) 77 + * SW55: 1 (CLKB is 24.5760MHz) 78 + * SW60: 1pin (ak4554 FPGA control) 79 + * SW61: 3pin (use X11 clock) 80 + * SW78: 3-6 (ak4642 connects I2C0) 81 + * 82 + * You can use sound as 83 + * 84 + * hw0: CN19: SSI56-AK4643 85 + * hw1: CN21: SSI3-AK4554(playback) 86 + * hw2: CN21: SSI4-AK4554(capture) 87 + * hw3: CN20: SSI7-AK4554(playback) 88 + * hw4: CN20: SSI8-AK4554(capture) 89 + * 90 + * this command is required when playback on hw0. 91 + * 92 + * # amixer set "LINEOUT Mixer DACL" on 93 + */ 94 + 95 + /* 96 + * USB 97 + * 98 + * USB1 (CN29) can be Host/Function 99 + * 100 + * Host Func 101 + * SW98 1 2 102 + * SW99 1 3 103 + */ 104 + 74 105 /* Dummy supplies, where voltage doesn't matter */ 75 106 static struct regulator_consumer_supply dummy_supplies[] = { 76 107 REGULATOR_SUPPLY("vddvario", "smsc911x"), ··· 128 81 DEFINE_RES_IRQ(irq_pin(0)), /* IRQ 0 */ 129 82 }; 130 83 84 + #if IS_ENABLED(CONFIG_USB_RENESAS_USBHS_UDC) 85 + /* 86 + * When USB1 is Func 87 + */ 88 + static int usbhsf_get_id(struct platform_device *pdev) 89 + { 90 + return USBHS_GADGET; 91 + } 92 + 93 + #define SUSPMODE 0x102 94 + static int usbhsf_power_ctrl(struct platform_device *pdev, 95 + void __iomem *base, int enable) 96 + { 97 + enable = !!enable; 98 + 99 + r8a7778_usb_phy_power(enable); 100 + 101 + iowrite16(enable << 14, base + SUSPMODE); 102 + 103 + return 0; 104 + } 105 + 106 + static struct resource usbhsf_resources[] __initdata = { 107 + DEFINE_RES_MEM(0xffe60000, 0x110), 108 + DEFINE_RES_IRQ(gic_iid(0x4f)), 109 + }; 110 + 111 + static struct renesas_usbhs_platform_info usbhs_info __initdata = { 112 + .platform_callback = { 113 + .get_id = usbhsf_get_id, 114 + .power_ctrl = usbhsf_power_ctrl, 115 + }, 116 + .driver_param = { 117 + .buswait_bwait = 4, 118 + }, 119 + }; 120 + 121 + #define USB_PHY_SETTING {.port1_func = 1, .ovc_pin[1].active_high = 1,} 122 + #define USB1_DEVICE "renesas_usbhs" 123 + #define ADD_USB_FUNC_DEVICE_IF_POSSIBLE() \ 124 + platform_device_register_resndata( \ 125 + &platform_bus, "renesas_usbhs", -1, \ 126 + usbhsf_resources, \ 127 + ARRAY_SIZE(usbhsf_resources), \ 128 + &usbhs_info, sizeof(struct renesas_usbhs_platform_info)) 129 + 130 + #else 131 + /* 132 + * When USB1 is Host 133 + */ 134 + #define USB_PHY_SETTING { } 135 + #define USB1_DEVICE "ehci-platform" 136 + #define ADD_USB_FUNC_DEVICE_IF_POSSIBLE() 137 + 138 + #endif 139 + 131 140 /* USB */ 132 141 static struct resource usb_phy_resources[] __initdata = { 133 142 DEFINE_RES_MEM(0xffe70800, 0x100), 134 143 DEFINE_RES_MEM(0xffe76000, 0x100), 135 144 }; 136 145 137 - static struct rcar_phy_platform_data usb_phy_platform_data __initdata; 146 + static struct rcar_phy_platform_data usb_phy_platform_data __initdata = 147 + USB_PHY_SETTING; 148 + 138 149 139 150 /* SDHI */ 140 151 static struct sh_mobile_sdhi_info sdhi0_info __initdata = { 152 + .dma_slave_tx = HPBDMA_SLAVE_SDHI0_TX, 153 + .dma_slave_rx = HPBDMA_SLAVE_SDHI0_RX, 141 154 .tmio_caps = MMC_CAP_SD_HIGHSPEED, 142 155 .tmio_ocr_mask = MMC_VDD_165_195 | MMC_VDD_32_33 | MMC_VDD_33_34, 143 156 .tmio_flags = TMIO_MMC_HAS_IDLE_WAIT, ··· 231 124 static struct i2c_board_info i2c0_devices[] = { 232 125 { 233 126 I2C_BOARD_INFO("rx8581", 0x51), 234 - }, 127 + }, { 128 + I2C_BOARD_INFO("ak4643", 0x12), 129 + } 235 130 }; 236 131 237 132 /* HSPI*/ ··· 316 207 R8A7778_VIN(0); 317 208 R8A7778_VIN(1); 318 209 210 + /* Sound */ 211 + static struct resource rsnd_resources[] __initdata = { 212 + [RSND_GEN1_SRU] = DEFINE_RES_MEM(0xffd90000, 0x1000), 213 + [RSND_GEN1_SSI] = DEFINE_RES_MEM(0xffd91000, 0x1240), 214 + [RSND_GEN1_ADG] = DEFINE_RES_MEM(0xfffe0000, 0x24), 215 + }; 216 + 217 + static struct rsnd_ssi_platform_info rsnd_ssi[] = { 218 + RSND_SSI_UNUSED, /* SSI 0 */ 219 + RSND_SSI_UNUSED, /* SSI 1 */ 220 + RSND_SSI_UNUSED, /* SSI 2 */ 221 + RSND_SSI_SET(1, 0, gic_iid(0x85), RSND_SSI_PLAY), 222 + RSND_SSI_SET(2, 0, gic_iid(0x85), RSND_SSI_CLK_PIN_SHARE | RSND_SSI_CLK_FROM_ADG), 223 + RSND_SSI_SET(0, 0, gic_iid(0x86), RSND_SSI_PLAY), 224 + RSND_SSI_SET(0, 0, gic_iid(0x86), 0), 225 + RSND_SSI_SET(3, 0, gic_iid(0x86), RSND_SSI_PLAY), 226 + RSND_SSI_SET(4, 0, gic_iid(0x86), RSND_SSI_CLK_PIN_SHARE | RSND_SSI_CLK_FROM_ADG), 227 + }; 228 + 229 + static struct rsnd_scu_platform_info rsnd_scu[9] = { 230 + /* no member at this point */ 231 + }; 232 + 233 + enum { 234 + AK4554_34 = 0, 235 + AK4643_56, 236 + AK4554_78, 237 + SOUND_MAX, 238 + }; 239 + 240 + static int rsnd_codec_power(int id, int enable) 241 + { 242 + static int sound_user[SOUND_MAX] = {0, 0, 0}; 243 + int *usr = NULL; 244 + u32 bit; 245 + 246 + switch (id) { 247 + case 3: 248 + case 4: 249 + usr = sound_user + AK4554_34; 250 + bit = (1 << 10); 251 + break; 252 + case 5: 253 + case 6: 254 + usr = sound_user + AK4643_56; 255 + bit = (1 << 6); 256 + break; 257 + case 7: 258 + case 8: 259 + usr = sound_user + AK4554_78; 260 + bit = (1 << 7); 261 + break; 262 + } 263 + 264 + if (!usr) 265 + return -EIO; 266 + 267 + if (enable) { 268 + if (*usr == 0) { 269 + u32 val = ioread16(fpga + COMCTLR); 270 + val &= ~bit; 271 + iowrite16(val, fpga + COMCTLR); 272 + } 273 + 274 + (*usr)++; 275 + } else { 276 + if (*usr == 0) 277 + return 0; 278 + 279 + (*usr)--; 280 + 281 + if (*usr == 0) { 282 + u32 val = ioread16(fpga + COMCTLR); 283 + val |= bit; 284 + iowrite16(val, fpga + COMCTLR); 285 + } 286 + } 287 + 288 + return 0; 289 + } 290 + 291 + static int rsnd_start(int id) 292 + { 293 + return rsnd_codec_power(id, 1); 294 + } 295 + 296 + static int rsnd_stop(int id) 297 + { 298 + return rsnd_codec_power(id, 0); 299 + } 300 + 301 + static struct rcar_snd_info rsnd_info = { 302 + .flags = RSND_GEN1, 303 + .ssi_info = rsnd_ssi, 304 + .ssi_info_nr = ARRAY_SIZE(rsnd_ssi), 305 + .scu_info = rsnd_scu, 306 + .scu_info_nr = ARRAY_SIZE(rsnd_scu), 307 + .start = rsnd_start, 308 + .stop = rsnd_stop, 309 + }; 310 + 311 + static struct asoc_simple_card_info rsnd_card_info[] = { 312 + /* SSI5, SSI6 */ 313 + { 314 + .name = "AK4643", 315 + .card = "SSI56-AK4643", 316 + .codec = "ak4642-codec.0-0012", 317 + .platform = "rcar_sound", 318 + .daifmt = SND_SOC_DAIFMT_LEFT_J, 319 + .cpu_dai = { 320 + .name = "rsnd-dai.0", 321 + .fmt = SND_SOC_DAIFMT_CBS_CFS, 322 + }, 323 + .codec_dai = { 324 + .name = "ak4642-hifi", 325 + .fmt = SND_SOC_DAIFMT_CBM_CFM, 326 + .sysclk = 11289600, 327 + }, 328 + }, 329 + /* SSI3 */ 330 + { 331 + .name = "AK4554", 332 + .card = "SSI3-AK4554(playback)", 333 + .codec = "ak4554-adc-dac.0", 334 + .platform = "rcar_sound", 335 + .cpu_dai = { 336 + .name = "rsnd-dai.1", 337 + .fmt = SND_SOC_DAIFMT_CBM_CFM | 338 + SND_SOC_DAIFMT_RIGHT_J, 339 + }, 340 + .codec_dai = { 341 + .name = "ak4554-hifi", 342 + }, 343 + }, 344 + /* SSI4 */ 345 + { 346 + .name = "AK4554", 347 + .card = "SSI4-AK4554(capture)", 348 + .codec = "ak4554-adc-dac.0", 349 + .platform = "rcar_sound", 350 + .cpu_dai = { 351 + .name = "rsnd-dai.2", 352 + .fmt = SND_SOC_DAIFMT_CBM_CFM | 353 + SND_SOC_DAIFMT_LEFT_J, 354 + }, 355 + .codec_dai = { 356 + .name = "ak4554-hifi", 357 + }, 358 + }, 359 + /* SSI7 */ 360 + { 361 + .name = "AK4554", 362 + .card = "SSI7-AK4554(playback)", 363 + .codec = "ak4554-adc-dac.1", 364 + .platform = "rcar_sound", 365 + .cpu_dai = { 366 + .name = "rsnd-dai.3", 367 + .fmt = SND_SOC_DAIFMT_CBM_CFM | 368 + SND_SOC_DAIFMT_RIGHT_J, 369 + }, 370 + .codec_dai = { 371 + .name = "ak4554-hifi", 372 + }, 373 + }, 374 + /* SSI8 */ 375 + { 376 + .name = "AK4554", 377 + .card = "SSI8-AK4554(capture)", 378 + .codec = "ak4554-adc-dac.1", 379 + .platform = "rcar_sound", 380 + .cpu_dai = { 381 + .name = "rsnd-dai.4", 382 + .fmt = SND_SOC_DAIFMT_CBM_CFM | 383 + SND_SOC_DAIFMT_LEFT_J, 384 + }, 385 + .codec_dai = { 386 + .name = "ak4554-hifi", 387 + }, 388 + } 389 + }; 390 + 319 391 static const struct pinctrl_map bockw_pinctrl_map[] = { 392 + /* AUDIO */ 393 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 394 + "audio_clk_a", "audio_clk"), 395 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 396 + "audio_clk_b", "audio_clk"), 397 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 398 + "ssi34_ctrl", "ssi"), 399 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 400 + "ssi3_data", "ssi"), 401 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 402 + "ssi4_data", "ssi"), 403 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 404 + "ssi5_ctrl", "ssi"), 405 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 406 + "ssi5_data", "ssi"), 407 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 408 + "ssi6_ctrl", "ssi"), 409 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 410 + "ssi6_data", "ssi"), 411 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 412 + "ssi78_ctrl", "ssi"), 413 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 414 + "ssi7_data", "ssi"), 415 + PIN_MAP_MUX_GROUP_DEFAULT("rcar_sound", "pfc-r8a7778", 416 + "ssi8_data", "ssi"), 320 417 /* Ether */ 321 418 PIN_MAP_MUX_GROUP_DEFAULT("r8a777x-ether", "pfc-r8a7778", 322 419 "ether_rmii", "ether"), ··· 542 227 /* USB */ 543 228 PIN_MAP_MUX_GROUP_DEFAULT("ehci-platform", "pfc-r8a7778", 544 229 "usb0", "usb0"), 545 - PIN_MAP_MUX_GROUP_DEFAULT("ehci-platform", "pfc-r8a7778", 230 + PIN_MAP_MUX_GROUP_DEFAULT(USB1_DEVICE, "pfc-r8a7778", 546 231 "usb1", "usb1"), 547 232 /* SDHI0 */ 548 233 PIN_MAP_MUX_GROUP_DEFAULT("sh_mobile_sdhi.0", "pfc-r8a7778", ··· 565 250 "vin1_data8", "vin1"), 566 251 }; 567 252 568 - #define FPGA 0x18200000 569 - #define IRQ0MR 0x30 570 253 #define PFC 0xfffc0000 571 254 #define PUPR4 0x110 572 255 static void __init bockw_init(void) 573 256 { 574 257 void __iomem *base; 258 + struct clk *clk; 259 + int i; 575 260 576 261 r8a7778_clock_init(); 577 262 r8a7778_init_irq_extpin(1); ··· 616 301 617 302 618 303 /* for SMSC */ 619 - base = ioremap_nocache(FPGA, SZ_1M); 620 - if (base) { 304 + fpga = ioremap_nocache(FPGA, SZ_1M); 305 + if (fpga) { 621 306 /* 622 307 * CAUTION 623 308 * ··· 625 310 * it should be cared in the future 626 311 * Now, it is assuming IRQ0 was used only from SMSC. 627 312 */ 628 - u16 val = ioread16(base + IRQ0MR); 313 + u16 val = ioread16(fpga + IRQ0MR); 629 314 val &= ~(1 << 4); /* enable SMSC911x */ 630 - iowrite16(val, base + IRQ0MR); 631 - iounmap(base); 315 + iowrite16(val, fpga + IRQ0MR); 632 316 633 317 regulator_register_fixed(0, dummy_supplies, 634 318 ARRAY_SIZE(dummy_supplies)); ··· 654 340 sdhi0_resources, ARRAY_SIZE(sdhi0_resources), 655 341 &sdhi0_info, sizeof(struct sh_mobile_sdhi_info)); 656 342 } 343 + 344 + /* for Audio */ 345 + clk = clk_get(NULL, "audio_clk_b"); 346 + clk_set_rate(clk, 24576000); 347 + clk_put(clk); 348 + rsnd_codec_power(5, 1); /* enable ak4642 */ 349 + 350 + platform_device_register_simple( 351 + "ak4554-adc-dac", 0, NULL, 0); 352 + 353 + platform_device_register_simple( 354 + "ak4554-adc-dac", 1, NULL, 0); 355 + 356 + platform_device_register_resndata( 357 + &platform_bus, "rcar_sound", -1, 358 + rsnd_resources, ARRAY_SIZE(rsnd_resources), 359 + &rsnd_info, sizeof(rsnd_info)); 360 + 361 + for (i = 0; i < ARRAY_SIZE(rsnd_card_info); i++) { 362 + struct platform_device_info cardinfo = { 363 + .parent = &platform_bus, 364 + .name = "asoc-simple-card", 365 + .id = i, 366 + .data = &rsnd_card_info[i], 367 + .size_data = sizeof(struct asoc_simple_card_info), 368 + .dma_mask = ~0, 369 + }; 370 + 371 + platform_device_register_full(&cardinfo); 372 + } 373 + } 374 + 375 + static void __init bockw_init_late(void) 376 + { 377 + r8a7778_init_late(); 378 + ADD_USB_FUNC_DEVICE_IF_POSSIBLE(); 657 379 } 658 380 659 381 static const char *bockw_boards_compat_dt[] __initdata = { ··· 702 352 .init_irq = r8a7778_init_irq_dt, 703 353 .init_machine = bockw_init, 704 354 .dt_compat = bockw_boards_compat_dt, 705 - .init_late = r8a7778_init_late, 355 + .init_late = bockw_init_late, 706 356 MACHINE_END
+43
arch/arm/mach-shmobile/board-genmai.c
··· 1 + /* 2 + * Genmai board support 3 + * 4 + * Copyright (C) 2013 Renesas Solutions Corp. 5 + * Copyright (C) 2013 Magnus Damm 6 + * 7 + * This program is free software; you can redistribute it and/or modify 8 + * it under the terms of the GNU General Public License as published by 9 + * the Free Software Foundation; version 2 of the License. 10 + * 11 + * This program is distributed in the hope that it will be useful, 12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 + * GNU General Public License for more details. 15 + * 16 + * You should have received a copy of the GNU General Public License 17 + * along with this program; if not, write to the Free Software 18 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 19 + */ 20 + 21 + #include <linux/kernel.h> 22 + #include <linux/platform_device.h> 23 + #include <mach/common.h> 24 + #include <mach/r7s72100.h> 25 + #include <asm/mach-types.h> 26 + #include <asm/mach/arch.h> 27 + 28 + static void __init genmai_add_standard_devices(void) 29 + { 30 + r7s72100_clock_init(); 31 + r7s72100_add_dt_devices(); 32 + } 33 + 34 + static const char * const genmai_boards_compat_dt[] __initconst = { 35 + "renesas,genmai", 36 + NULL, 37 + }; 38 + 39 + DT_MACHINE_START(GENMAI_DT, "genmai") 40 + .init_early = r7s72100_init_early, 41 + .init_machine = genmai_add_standard_devices, 42 + .dt_compat = genmai_boards_compat_dt, 43 + MACHINE_END
+47
arch/arm/mach-shmobile/board-koelsch.c
··· 1 + /* 2 + * Koelsch board support 3 + * 4 + * Copyright (C) 2013 Renesas Electronics Corporation 5 + * Copyright (C) 2013 Renesas Solutions Corp. 6 + * Copyright (C) 2013 Magnus Damm 7 + * 8 + * This program is free software; you can redistribute it and/or modify 9 + * it under the terms of the GNU General Public License as published by 10 + * the Free Software Foundation; version 2 of the License. 11 + * 12 + * This program is distributed in the hope that it will be useful, 13 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 + * GNU General Public License for more details. 16 + * 17 + * You should have received a copy of the GNU General Public License 18 + * along with this program; if not, write to the Free Software 19 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 20 + */ 21 + 22 + #include <linux/kernel.h> 23 + #include <linux/platform_device.h> 24 + #include <mach/common.h> 25 + #include <mach/r8a7791.h> 26 + #include <mach/rcar-gen2.h> 27 + #include <asm/mach-types.h> 28 + #include <asm/mach/arch.h> 29 + 30 + static void __init koelsch_add_standard_devices(void) 31 + { 32 + r8a7791_clock_init(); 33 + r8a7791_add_standard_devices(); 34 + } 35 + 36 + static const char * const koelsch_boards_compat_dt[] __initconst = { 37 + "renesas,koelsch", 38 + NULL, 39 + }; 40 + 41 + DT_MACHINE_START(KOELSCH_DT, "koelsch") 42 + .smp = smp_ops(r8a7791_smp_ops), 43 + .init_early = r8a7791_init_early, 44 + .init_machine = koelsch_add_standard_devices, 45 + .init_time = rcar_gen2_timer_init, 46 + .dt_compat = koelsch_boards_compat_dt, 47 + MACHINE_END
+1
arch/arm/mach-shmobile/board-kzm9d-reference.c
··· 33 33 } 34 34 35 35 static const char *kzm9d_boards_compat_dt[] __initdata = { 36 + "renesas,kzm9d", 36 37 "renesas,kzm9d-reference", 37 38 NULL, 38 39 };
+1
arch/arm/mach-shmobile/board-kzm9g.c
··· 366 366 static struct sh_mmcif_plat_data sh_mmcif_platdata = { 367 367 .ocr = MMC_VDD_165_195, 368 368 .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, 369 + .ccs_unsupported = true, 369 370 .slave_id_tx = SHDMA_SLAVE_MMCIF_TX, 370 371 .slave_id_rx = SHDMA_SLAVE_MMCIF_RX, 371 372 };
+68
arch/arm/mach-shmobile/board-lager.c
··· 28 28 #include <linux/mmc/sh_mmcif.h> 29 29 #include <linux/pinctrl/machine.h> 30 30 #include <linux/platform_data/gpio-rcar.h> 31 + #include <linux/platform_data/rcar-du.h> 31 32 #include <linux/platform_device.h> 32 33 #include <linux/phy.h> 33 34 #include <linux/regulator/fixed.h> ··· 39 38 #include <mach/r8a7790.h> 40 39 #include <asm/mach-types.h> 41 40 #include <asm/mach/arch.h> 41 + 42 + /* DU */ 43 + static struct rcar_du_encoder_data lager_du_encoders[] = { 44 + { 45 + .type = RCAR_DU_ENCODER_VGA, 46 + .output = RCAR_DU_OUTPUT_DPAD0, 47 + }, { 48 + .type = RCAR_DU_ENCODER_NONE, 49 + .output = RCAR_DU_OUTPUT_LVDS1, 50 + .connector.lvds.panel = { 51 + .width_mm = 210, 52 + .height_mm = 158, 53 + .mode = { 54 + .clock = 65000, 55 + .hdisplay = 1024, 56 + .hsync_start = 1048, 57 + .hsync_end = 1184, 58 + .htotal = 1344, 59 + .vdisplay = 768, 60 + .vsync_start = 771, 61 + .vsync_end = 777, 62 + .vtotal = 806, 63 + .flags = 0, 64 + }, 65 + }, 66 + }, 67 + }; 68 + 69 + static const struct rcar_du_platform_data lager_du_pdata __initconst = { 70 + .encoders = lager_du_encoders, 71 + .num_encoders = ARRAY_SIZE(lager_du_encoders), 72 + }; 73 + 74 + static const struct resource du_resources[] __initconst = { 75 + DEFINE_RES_MEM(0xfeb00000, 0x70000), 76 + DEFINE_RES_MEM_NAMED(0xfeb90000, 0x1c, "lvds.0"), 77 + DEFINE_RES_MEM_NAMED(0xfeb94000, 0x1c, "lvds.1"), 78 + DEFINE_RES_IRQ(gic_spi(256)), 79 + DEFINE_RES_IRQ(gic_spi(268)), 80 + DEFINE_RES_IRQ(gic_spi(269)), 81 + }; 82 + 83 + static void __init lager_add_du_device(void) 84 + { 85 + struct platform_device_info info = { 86 + .name = "rcar-du-r8a7790", 87 + .id = -1, 88 + .res = du_resources, 89 + .num_res = ARRAY_SIZE(du_resources), 90 + .data = &lager_du_pdata, 91 + .size_data = sizeof(lager_du_pdata), 92 + .dma_mask = DMA_BIT_MASK(32), 93 + }; 94 + 95 + platform_device_register_full(&info); 96 + } 42 97 43 98 /* LEDS */ 44 99 static struct gpio_led lager_leds[] = { ··· 143 86 /* MMCIF */ 144 87 static const struct sh_mmcif_plat_data mmcif1_pdata __initconst = { 145 88 .caps = MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE, 89 + .clk_ctrl2_present = true, 90 + .ccs_unsupported = true, 146 91 }; 147 92 148 93 static const struct resource mmcif1_resources[] __initconst = { ··· 166 107 }; 167 108 168 109 static const struct pinctrl_map lager_pinctrl_map[] = { 110 + /* DU (CN10: ARGB0, CN13: LVDS) */ 111 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7790", "pfc-r8a7790", 112 + "du_rgb666", "du"), 113 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7790", "pfc-r8a7790", 114 + "du_sync_1", "du"), 115 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7790", "pfc-r8a7790", 116 + "du_clk_out_0", "du"), 169 117 /* SCIF0 (CN19: DEBUG SERIAL0) */ 170 118 PIN_MAP_MUX_GROUP_DEFAULT("sh-sci.6", "pfc-r8a7790", 171 119 "scif0_data", "scif0"), ··· 220 154 ether_resources, 221 155 ARRAY_SIZE(ether_resources), 222 156 &ether_pdata, sizeof(ether_pdata)); 157 + 158 + lager_add_du_device(); 223 159 } 224 160 225 161 /*
+1
arch/arm/mach-shmobile/board-marzen-reference.c
··· 28 28 static void __init marzen_init(void) 29 29 { 30 30 r8a7779_add_standard_devices_dt(); 31 + r8a7779_init_irq_extpin_dt(1); /* IRQ1 as individual interrupt */ 31 32 } 32 33 33 34 static const char *marzen_boards_compat_dt[] __initdata = {
+74
arch/arm/mach-shmobile/board-marzen.c
··· 30 30 #include <linux/dma-mapping.h> 31 31 #include <linux/pinctrl/machine.h> 32 32 #include <linux/platform_data/gpio-rcar.h> 33 + #include <linux/platform_data/rcar-du.h> 33 34 #include <linux/platform_data/usb-rcar-phy.h> 34 35 #include <linux/regulator/fixed.h> 35 36 #include <linux/regulator/machine.h> ··· 125 124 }; 126 125 127 126 static struct sh_mobile_sdhi_info sdhi0_platform_data = { 127 + .dma_slave_tx = HPBDMA_SLAVE_SDHI0_TX, 128 + .dma_slave_rx = HPBDMA_SLAVE_SDHI0_RX, 128 129 .tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT, 129 130 .tmio_caps = MMC_CAP_SD_HIGHSPEED, 130 131 }; ··· 171 168 .resource = hspi_resources, 172 169 .num_resources = ARRAY_SIZE(hspi_resources), 173 170 }; 171 + 172 + /* 173 + * DU 174 + * 175 + * The panel only specifies the [hv]display and [hv]total values. The position 176 + * and width of the sync pulses don't matter, they're copied from VESA timings. 177 + */ 178 + static struct rcar_du_encoder_data du_encoders[] = { 179 + { 180 + .type = RCAR_DU_ENCODER_VGA, 181 + .output = RCAR_DU_OUTPUT_DPAD0, 182 + }, { 183 + .type = RCAR_DU_ENCODER_LVDS, 184 + .output = RCAR_DU_OUTPUT_DPAD1, 185 + .connector.lvds.panel = { 186 + .width_mm = 210, 187 + .height_mm = 158, 188 + .mode = { 189 + .clock = 65000, 190 + .hdisplay = 1024, 191 + .hsync_start = 1048, 192 + .hsync_end = 1184, 193 + .htotal = 1344, 194 + .vdisplay = 768, 195 + .vsync_start = 771, 196 + .vsync_end = 777, 197 + .vtotal = 806, 198 + .flags = 0, 199 + }, 200 + }, 201 + }, 202 + }; 203 + 204 + static const struct rcar_du_platform_data du_pdata __initconst = { 205 + .encoders = du_encoders, 206 + .num_encoders = ARRAY_SIZE(du_encoders), 207 + }; 208 + 209 + static const struct resource du_resources[] __initconst = { 210 + DEFINE_RES_MEM(0xfff80000, 0x40000), 211 + DEFINE_RES_IRQ(gic_iid(0x3f)), 212 + }; 213 + 214 + static void __init marzen_add_du_device(void) 215 + { 216 + struct platform_device_info info = { 217 + .name = "rcar-du-r8a7779", 218 + .id = -1, 219 + .res = du_resources, 220 + .num_res = ARRAY_SIZE(du_resources), 221 + .data = &du_pdata, 222 + .size_data = sizeof(du_pdata), 223 + .dma_mask = DMA_BIT_MASK(32), 224 + }; 225 + 226 + platform_device_register_full(&info); 227 + } 174 228 175 229 /* LEDS */ 176 230 static struct gpio_led marzen_leds[] = { ··· 297 237 }; 298 238 299 239 static const struct pinctrl_map marzen_pinctrl_map[] = { 240 + /* DU (CN10: ARGB0, CN13: LVDS) */ 241 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7779", "pfc-r8a7779", 242 + "du0_rgb888", "du0"), 243 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7779", "pfc-r8a7779", 244 + "du0_sync_1", "du0"), 245 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7779", "pfc-r8a7779", 246 + "du0_clk_out_0", "du0"), 247 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7779", "pfc-r8a7779", 248 + "du1_rgb666", "du1"), 249 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7779", "pfc-r8a7779", 250 + "du1_sync_1", "du1"), 251 + PIN_MAP_MUX_GROUP_DEFAULT("rcar-du-r8a7779", "pfc-r8a7779", 252 + "du1_clk_out", "du1"), 300 253 /* HSPI0 */ 301 254 PIN_MAP_MUX_GROUP_DEFAULT("sh-hspi.0", "pfc-r8a7779", 302 255 "hspi0", "hspi0"), ··· 370 297 r8a7779_add_vin_device(1, &vin_platform_data); 371 298 r8a7779_add_vin_device(3, &vin_platform_data); 372 299 platform_add_devices(marzen_devices, ARRAY_SIZE(marzen_devices)); 300 + marzen_add_du_device(); 373 301 } 374 302 375 303 static const char *marzen_boards_compat_dt[] __initdata = {