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

Merge branch 'next/dt-samsung-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/dt

From Kukjin Kim:
Here is second Samsung DT stuff for v3.8.

This is including power domain DT support for exynos and Google ARM
Chromebook, Snow board and exynos4210-origen updates.

* 'next/dt-samsung-2' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:
ARM: dts: Use drive strength 3 for SD pins for exynos4
ARM: dts: Set up power domains for exynos4
ARM: EXYNOS: Bind devices to power domains using DT
ARM: EXYNOS: Fix power domain name initialization
ARM: EXYNOS: Detect power domain state on registration from DT
ARM: dts: Add vmmc fixed voltage regulator for exynos4210-origen
ARM: dts: Update sdhci nodes for current bindings for exynos4210-origen
ARM: dts: Update for pinctrl-samsung driver for exynos4210-origen
ARM: dts: Split memory sections for exynos4210-origen
ARM: EXYNOS: add all i2c busses to auxdata for DT
ARM: dts: Add aliases for i2c controller for exynos4
ARM: dts: Add board dts file for Snow board (ARM Chromebook)
ARM: dts: Move the dwmmc aliases from smdk5250 dts to exynos

Add/add conflicts resolved in arch/arm/boot/dts/exynos5250-smdk5250.dts
and arch/arm/mach-exynos/mach-exynos5-dt.c.

Signed-off-by: Olof Johansson <olof@lixom.net>

+485 -112
+11 -4
Documentation/devicetree/bindings/arm/exynos/power_domain.txt
··· 4 4 to gate power to one or more peripherals on the processor. 5 5 6 6 Required Properties: 7 - - compatiable: should be one of the following. 7 + - compatible: should be one of the following. 8 8 * samsung,exynos4210-pd - for exynos4210 type power domain. 9 9 - reg: physical base address of the controller and length of memory mapped 10 10 region. 11 11 12 - Optional Properties: 13 - - samsung,exynos4210-pd-off: Specifies that the power domain is in turned-off 14 - state during boot and remains to be turned-off until explicitly turned-on. 12 + Node of a device using power domains must have a samsung,power-domain property 13 + defined with a phandle to respective power domain. 15 14 16 15 Example: 17 16 18 17 lcd0: power-domain-lcd0 { 19 18 compatible = "samsung,exynos4210-pd"; 20 19 reg = <0x10023C00 0x10>; 20 + }; 21 + 22 + Example of the node using power domain: 23 + 24 + node { 25 + /* ... */ 26 + samsung,power-domain = <&lcd0>; 27 + /* ... */ 21 28 };
+2 -1
arch/arm/boot/dts/Makefile
··· 26 26 exynos4210-smdkv310.dtb \ 27 27 exynos4210-trats.dtb \ 28 28 exynos4412-smdk4412.dtb \ 29 - exynos5250-smdk5250.dtb 29 + exynos5250-smdk5250.dtb \ 30 + exynos5250-snow.dtb 30 31 dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb 31 32 dtb-$(CONFIG_ARCH_INTEGRATOR) += integratorap.dtb \ 32 33 integratorcp.dtb
+184
arch/arm/boot/dts/cros5250-common.dtsi
··· 1 + /* 2 + * Common device tree include for all Exynos 5250 boards based off of Daisy. 3 + * 4 + * Copyright (c) 2012 Google, Inc 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + */ 10 + 11 + / { 12 + aliases { 13 + }; 14 + 15 + memory { 16 + reg = <0x40000000 0x80000000>; 17 + }; 18 + 19 + chosen { 20 + }; 21 + 22 + i2c@12C60000 { 23 + samsung,i2c-sda-delay = <100>; 24 + samsung,i2c-max-bus-freq = <378000>; 25 + gpios = <&gpb3 0 2 3 0>, 26 + <&gpb3 1 2 3 0>; 27 + }; 28 + 29 + i2c@12C70000 { 30 + samsung,i2c-sda-delay = <100>; 31 + samsung,i2c-max-bus-freq = <378000>; 32 + gpios = <&gpb3 2 2 3 0>, 33 + <&gpb3 3 2 3 0>; 34 + }; 35 + 36 + i2c@12C80000 { 37 + samsung,i2c-sda-delay = <100>; 38 + samsung,i2c-max-bus-freq = <66000>; 39 + 40 + /* 41 + * Disabled pullups since external part has its own pullups and 42 + * double-pulling gets us out of spec in some cases. 43 + */ 44 + gpios = <&gpa0 6 3 0 0>, 45 + <&gpa0 7 3 0 0>; 46 + 47 + hdmiddc@50 { 48 + compatible = "samsung,exynos5-hdmiddc"; 49 + reg = <0x50>; 50 + }; 51 + }; 52 + 53 + i2c@12C90000 { 54 + samsung,i2c-sda-delay = <100>; 55 + samsung,i2c-max-bus-freq = <66000>; 56 + gpios = <&gpa1 2 3 3 0>, 57 + <&gpa1 3 3 3 0>; 58 + }; 59 + 60 + i2c@12CA0000 { 61 + status = "disabled"; 62 + }; 63 + 64 + i2c@12CB0000 { 65 + samsung,i2c-sda-delay = <100>; 66 + samsung,i2c-max-bus-freq = <66000>; 67 + gpios = <&gpa2 2 3 3 0>, 68 + <&gpa2 3 3 3 0>; 69 + }; 70 + 71 + i2c@12CC0000 { 72 + status = "disabled"; 73 + }; 74 + 75 + i2c@12CD0000 { 76 + samsung,i2c-sda-delay = <100>; 77 + samsung,i2c-max-bus-freq = <66000>; 78 + gpios = <&gpb2 2 3 3 0>, 79 + <&gpb2 3 3 3 0>; 80 + }; 81 + 82 + i2c@12CE0000 { 83 + samsung,i2c-sda-delay = <100>; 84 + samsung,i2c-max-bus-freq = <378000>; 85 + 86 + hdmiphy@38 { 87 + compatible = "samsung,exynos5-hdmiphy"; 88 + reg = <0x38>; 89 + }; 90 + }; 91 + 92 + dwmmc0@12200000 { 93 + num-slots = <1>; 94 + supports-highspeed; 95 + broken-cd; 96 + fifo-depth = <0x80>; 97 + card-detect-delay = <200>; 98 + samsung,dw-mshc-ciu-div = <3>; 99 + samsung,dw-mshc-sdr-timing = <2 3 3>; 100 + samsung,dw-mshc-ddr-timing = <1 2 3>; 101 + 102 + slot@0 { 103 + reg = <0>; 104 + bus-width = <8>; 105 + gpios = <&gpc0 0 2 0 3>, <&gpc0 1 2 0 3>, 106 + <&gpc1 0 2 3 3>, <&gpc1 1 2 3 3>, 107 + <&gpc1 2 2 3 3>, <&gpc1 3 2 3 3>, 108 + <&gpc0 3 2 3 3>, <&gpc0 4 2 3 3>, 109 + <&gpc0 5 2 3 3>, <&gpc0 6 2 3 3>; 110 + }; 111 + }; 112 + 113 + dwmmc1@12210000 { 114 + status = "disabled"; 115 + }; 116 + 117 + dwmmc2@12220000 { 118 + num-slots = <1>; 119 + supports-highspeed; 120 + fifo-depth = <0x80>; 121 + card-detect-delay = <200>; 122 + samsung,dw-mshc-ciu-div = <3>; 123 + samsung,dw-mshc-sdr-timing = <2 3 3>; 124 + samsung,dw-mshc-ddr-timing = <1 2 3>; 125 + 126 + slot@0 { 127 + reg = <0>; 128 + bus-width = <4>; 129 + samsung,cd-pinmux-gpio = <&gpc3 2 2 3 3>; 130 + wp-gpios = <&gpc2 1 0 0 3>; 131 + gpios = <&gpc3 0 2 0 3>, <&gpc3 1 2 0 3>, 132 + <&gpc3 3 2 3 3>, <&gpc3 4 2 3 3>, 133 + <&gpc3 5 2 3 3>, <&gpc3 6 2 3 3>; 134 + }; 135 + }; 136 + 137 + dwmmc3@12230000 { 138 + num-slots = <1>; 139 + supports-highspeed; 140 + broken-cd; 141 + fifo-depth = <0x80>; 142 + card-detect-delay = <200>; 143 + samsung,dw-mshc-ciu-div = <3>; 144 + samsung,dw-mshc-sdr-timing = <2 3 3>; 145 + samsung,dw-mshc-ddr-timing = <1 2 3>; 146 + 147 + slot@0 { 148 + reg = <0>; 149 + bus-width = <4>; 150 + /* See board-specific dts files for GPIOs */ 151 + }; 152 + }; 153 + 154 + spi_0: spi@12d20000 { 155 + status = "disabled"; 156 + }; 157 + 158 + spi_1: spi@12d30000 { 159 + gpios = <&gpa2 4 2 3 0>, 160 + <&gpa2 6 2 3 0>, 161 + <&gpa2 7 2 3 0>; 162 + samsung,spi-src-clk = <0>; 163 + num-cs = <1>; 164 + }; 165 + 166 + spi_2: spi@12d40000 { 167 + status = "disabled"; 168 + }; 169 + 170 + hdmi { 171 + hpd-gpio = <&gpx3 7 0xf 1 3>; 172 + }; 173 + 174 + gpio-keys { 175 + compatible = "gpio-keys"; 176 + 177 + power { 178 + label = "Power"; 179 + gpios = <&gpx1 3 0 0x10000 0>; 180 + linux,code = <116>; /* KEY_POWER */ 181 + gpio-key,wakeup; 182 + }; 183 + }; 184 + };
+46 -8
arch/arm/boot/dts/exynos4.dtsi
··· 28 28 spi0 = &spi_0; 29 29 spi1 = &spi_1; 30 30 spi2 = &spi_2; 31 + i2c0 = &i2c_0; 32 + i2c1 = &i2c_1; 33 + i2c2 = &i2c_2; 34 + i2c3 = &i2c_3; 35 + i2c4 = &i2c_4; 36 + i2c5 = &i2c_5; 37 + i2c6 = &i2c_6; 38 + i2c7 = &i2c_7; 39 + }; 40 + 41 + pd_mfc: mfc-power-domain@10023C40 { 42 + compatible = "samsung,exynos4210-pd"; 43 + reg = <0x10023C40 0x20>; 44 + }; 45 + 46 + pd_g3d: g3d-power-domain@10023C60 { 47 + compatible = "samsung,exynos4210-pd"; 48 + reg = <0x10023C60 0x20>; 49 + }; 50 + 51 + pd_lcd0: lcd0-power-domain@10023C80 { 52 + compatible = "samsung,exynos4210-pd"; 53 + reg = <0x10023C80 0x20>; 54 + }; 55 + 56 + pd_tv: tv-power-domain@10023C20 { 57 + compatible = "samsung,exynos4210-pd"; 58 + reg = <0x10023C20 0x20>; 59 + }; 60 + 61 + pd_cam: cam-power-domain@10023C00 { 62 + compatible = "samsung,exynos4210-pd"; 63 + reg = <0x10023C00 0x20>; 64 + }; 65 + 66 + pd_gps: gps-power-domain@10023CE0 { 67 + compatible = "samsung,exynos4210-pd"; 68 + reg = <0x10023CE0 0x20>; 31 69 }; 32 70 33 71 gic:interrupt-controller@10490000 { ··· 159 121 status = "disabled"; 160 122 }; 161 123 162 - i2c@13860000 { 124 + i2c_0: i2c@13860000 { 163 125 #address-cells = <1>; 164 126 #size-cells = <0>; 165 127 compatible = "samsung,s3c2440-i2c"; ··· 168 130 status = "disabled"; 169 131 }; 170 132 171 - i2c@13870000 { 133 + i2c_1: i2c@13870000 { 172 134 #address-cells = <1>; 173 135 #size-cells = <0>; 174 136 compatible = "samsung,s3c2440-i2c"; ··· 177 139 status = "disabled"; 178 140 }; 179 141 180 - i2c@13880000 { 142 + i2c_2: i2c@13880000 { 181 143 #address-cells = <1>; 182 144 #size-cells = <0>; 183 145 compatible = "samsung,s3c2440-i2c"; ··· 186 148 status = "disabled"; 187 149 }; 188 150 189 - i2c@13890000 { 151 + i2c_3: i2c@13890000 { 190 152 #address-cells = <1>; 191 153 #size-cells = <0>; 192 154 compatible = "samsung,s3c2440-i2c"; ··· 195 157 status = "disabled"; 196 158 }; 197 159 198 - i2c@138A0000 { 160 + i2c_4: i2c@138A0000 { 199 161 #address-cells = <1>; 200 162 #size-cells = <0>; 201 163 compatible = "samsung,s3c2440-i2c"; ··· 204 166 status = "disabled"; 205 167 }; 206 168 207 - i2c@138B0000 { 169 + i2c_5: i2c@138B0000 { 208 170 #address-cells = <1>; 209 171 #size-cells = <0>; 210 172 compatible = "samsung,s3c2440-i2c"; ··· 213 175 status = "disabled"; 214 176 }; 215 177 216 - i2c@138C0000 { 178 + i2c_6: i2c@138C0000 { 217 179 #address-cells = <1>; 218 180 #size-cells = <0>; 219 181 compatible = "samsung,s3c2440-i2c"; ··· 222 184 status = "disabled"; 223 185 }; 224 186 225 - i2c@138D0000 { 187 + i2c_7: i2c@138D0000 { 226 188 #address-cells = <1>; 227 189 #size-cells = <0>; 228 190 compatible = "samsung,s3c2440-i2c";
+27 -27
arch/arm/boot/dts/exynos4210-origen.dts
··· 22 22 compatible = "insignal,origen", "samsung,exynos4210"; 23 23 24 24 memory { 25 - reg = <0x40000000 0x40000000>; 25 + reg = <0x40000000 0x10000000 26 + 0x50000000 0x10000000 27 + 0x60000000 0x10000000 28 + 0x70000000 0x10000000>; 26 29 }; 27 30 28 31 chosen { 29 32 bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc"; 30 33 }; 31 34 35 + mmc_reg: voltage-regulator { 36 + compatible = "regulator-fixed"; 37 + regulator-name = "VMEM_VDD_2.8V"; 38 + regulator-min-microvolt = <2800000>; 39 + regulator-max-microvolt = <2800000>; 40 + gpio = <&gpx1 1 0>; 41 + enable-active-high; 42 + }; 43 + 32 44 sdhci@12530000 { 33 - samsung,sdhci-bus-width = <4>; 34 - linux,mmc_cap_4_bit_data; 35 - samsung,sdhci-cd-internal; 36 - gpio-cd = <&gpk2 2 2 3 3>; 37 - gpios = <&gpk2 0 2 0 3>, 38 - <&gpk2 1 2 0 3>, 39 - <&gpk2 3 2 3 3>, 40 - <&gpk2 4 2 3 3>, 41 - <&gpk2 5 2 3 3>, 42 - <&gpk2 6 2 3 3>; 45 + bus-width = <4>; 46 + pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>; 47 + pinctrl-names = "default"; 48 + vmmc-supply = <&mmc_reg>; 43 49 status = "okay"; 44 50 }; 45 51 46 52 sdhci@12510000 { 47 - samsung,sdhci-bus-width = <4>; 48 - linux,mmc_cap_4_bit_data; 49 - samsung,sdhci-cd-internal; 50 - gpio-cd = <&gpk0 2 2 3 3>; 51 - gpios = <&gpk0 0 2 0 3>, 52 - <&gpk0 1 2 0 3>, 53 - <&gpk0 3 2 3 3>, 54 - <&gpk0 4 2 3 3>, 55 - <&gpk0 5 2 3 3>, 56 - <&gpk0 6 2 3 3>; 53 + bus-width = <4>; 54 + pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_bus4 &sd0_cd>; 55 + pinctrl-names = "default"; 56 + vmmc-supply = <&mmc_reg>; 57 57 status = "okay"; 58 58 }; 59 59 ··· 80 80 81 81 up { 82 82 label = "Up"; 83 - gpios = <&gpx2 0 0 0x10000 2>; 83 + gpios = <&gpx2 0 1>; 84 84 linux,code = <103>; 85 85 gpio-key,wakeup; 86 86 }; 87 87 88 88 down { 89 89 label = "Down"; 90 - gpios = <&gpx2 1 0 0x10000 2>; 90 + gpios = <&gpx2 1 1>; 91 91 linux,code = <108>; 92 92 gpio-key,wakeup; 93 93 }; 94 94 95 95 back { 96 96 label = "Back"; 97 - gpios = <&gpx1 7 0 0x10000 2>; 97 + gpios = <&gpx1 7 1>; 98 98 linux,code = <158>; 99 99 gpio-key,wakeup; 100 100 }; 101 101 102 102 home { 103 103 label = "Home"; 104 - gpios = <&gpx1 6 0 0x10000 2>; 104 + gpios = <&gpx1 6 1>; 105 105 linux,code = <102>; 106 106 gpio-key,wakeup; 107 107 }; 108 108 109 109 menu { 110 110 label = "Menu"; 111 - gpios = <&gpx1 5 0 0x10000 2>; 111 + gpios = <&gpx1 5 1>; 112 112 linux,code = <139>; 113 113 gpio-key,wakeup; 114 114 }; ··· 117 117 leds { 118 118 compatible = "gpio-leds"; 119 119 status { 120 - gpios = <&gpx1 3 0 0x10000 2>; 120 + gpios = <&gpx1 3 1>; 121 121 linux,default-trigger = "heartbeat"; 122 122 }; 123 123 };
+28 -28
arch/arm/boot/dts/exynos4210-pinctrl.dtsi
··· 482 482 samsung,pins = "gpk0-0"; 483 483 samsung,pin-function = <2>; 484 484 samsung,pin-pud = <0>; 485 - samsung,pin-drv = <0>; 485 + samsung,pin-drv = <3>; 486 486 }; 487 487 488 488 sd0_cmd: sd0-cmd { 489 489 samsung,pins = "gpk0-1"; 490 490 samsung,pin-function = <2>; 491 491 samsung,pin-pud = <0>; 492 - samsung,pin-drv = <0>; 492 + samsung,pin-drv = <3>; 493 493 }; 494 494 495 495 sd0_cd: sd0-cd { 496 496 samsung,pins = "gpk0-2"; 497 497 samsung,pin-function = <2>; 498 498 samsung,pin-pud = <3>; 499 - samsung,pin-drv = <0>; 499 + samsung,pin-drv = <3>; 500 500 }; 501 501 502 502 sd0_bus1: sd0-bus-width1 { 503 503 samsung,pins = "gpk0-3"; 504 504 samsung,pin-function = <2>; 505 505 samsung,pin-pud = <3>; 506 - samsung,pin-drv = <0>; 506 + samsung,pin-drv = <3>; 507 507 }; 508 508 509 509 sd0_bus4: sd0-bus-width4 { 510 510 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 511 511 samsung,pin-function = <2>; 512 512 samsung,pin-pud = <3>; 513 - samsung,pin-drv = <0>; 513 + samsung,pin-drv = <3>; 514 514 }; 515 515 516 516 sd0_bus8: sd0-bus-width8 { 517 517 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 518 518 samsung,pin-function = <3>; 519 519 samsung,pin-pud = <3>; 520 - samsung,pin-drv = <0>; 520 + samsung,pin-drv = <3>; 521 521 }; 522 522 523 523 sd4_clk: sd4-clk { 524 524 samsung,pins = "gpk0-0"; 525 525 samsung,pin-function = <3>; 526 526 samsung,pin-pud = <0>; 527 - samsung,pin-drv = <0>; 527 + samsung,pin-drv = <3>; 528 528 }; 529 529 530 530 sd4_cmd: sd4-cmd { 531 531 samsung,pins = "gpk0-1"; 532 532 samsung,pin-function = <3>; 533 533 samsung,pin-pud = <0>; 534 - samsung,pin-drv = <0>; 534 + samsung,pin-drv = <3>; 535 535 }; 536 536 537 537 sd4_cd: sd4-cd { 538 538 samsung,pins = "gpk0-2"; 539 539 samsung,pin-function = <3>; 540 540 samsung,pin-pud = <3>; 541 - samsung,pin-drv = <0>; 541 + samsung,pin-drv = <3>; 542 542 }; 543 543 544 544 sd4_bus1: sd4-bus-width1 { 545 545 samsung,pins = "gpk0-3"; 546 546 samsung,pin-function = <3>; 547 547 samsung,pin-pud = <3>; 548 - samsung,pin-drv = <0>; 548 + samsung,pin-drv = <3>; 549 549 }; 550 550 551 551 sd4_bus4: sd4-bus-width4 { 552 552 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 553 553 samsung,pin-function = <3>; 554 554 samsung,pin-pud = <3>; 555 - samsung,pin-drv = <0>; 555 + samsung,pin-drv = <3>; 556 556 }; 557 557 558 558 sd4_bus8: sd4-bus-width8 { 559 559 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 560 560 samsung,pin-function = <3>; 561 561 samsung,pin-pud = <4>; 562 - samsung,pin-drv = <0>; 562 + samsung,pin-drv = <3>; 563 563 }; 564 564 565 565 sd1_clk: sd1-clk { 566 566 samsung,pins = "gpk1-0"; 567 567 samsung,pin-function = <2>; 568 568 samsung,pin-pud = <0>; 569 - samsung,pin-drv = <0>; 569 + samsung,pin-drv = <3>; 570 570 }; 571 571 572 572 sd1_cmd: sd1-cmd { 573 573 samsung,pins = "gpk1-1"; 574 574 samsung,pin-function = <2>; 575 575 samsung,pin-pud = <0>; 576 - samsung,pin-drv = <0>; 576 + samsung,pin-drv = <3>; 577 577 }; 578 578 579 579 sd1_cd: sd1-cd { 580 580 samsung,pins = "gpk1-2"; 581 581 samsung,pin-function = <2>; 582 582 samsung,pin-pud = <3>; 583 - samsung,pin-drv = <0>; 583 + samsung,pin-drv = <3>; 584 584 }; 585 585 586 586 sd1_bus1: sd1-bus-width1 { 587 587 samsung,pins = "gpk1-3"; 588 588 samsung,pin-function = <2>; 589 589 samsung,pin-pud = <3>; 590 - samsung,pin-drv = <0>; 590 + samsung,pin-drv = <3>; 591 591 }; 592 592 593 593 sd1_bus4: sd1-bus-width4 { 594 594 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 595 595 samsung,pin-function = <2>; 596 596 samsung,pin-pud = <3>; 597 - samsung,pin-drv = <0>; 597 + samsung,pin-drv = <3>; 598 598 }; 599 599 600 600 sd2_clk: sd2-clk { 601 601 samsung,pins = "gpk2-0"; 602 602 samsung,pin-function = <2>; 603 603 samsung,pin-pud = <0>; 604 - samsung,pin-drv = <0>; 604 + samsung,pin-drv = <3>; 605 605 }; 606 606 607 607 sd2_cmd: sd2-cmd { 608 608 samsung,pins = "gpk2-1"; 609 609 samsung,pin-function = <2>; 610 610 samsung,pin-pud = <0>; 611 - samsung,pin-drv = <0>; 611 + samsung,pin-drv = <3>; 612 612 }; 613 613 614 614 sd2_cd: sd2-cd { 615 615 samsung,pins = "gpk2-2"; 616 616 samsung,pin-function = <2>; 617 617 samsung,pin-pud = <3>; 618 - samsung,pin-drv = <0>; 618 + samsung,pin-drv = <3>; 619 619 }; 620 620 621 621 sd2_bus1: sd2-bus-width1 { 622 622 samsung,pins = "gpk2-3"; 623 623 samsung,pin-function = <2>; 624 624 samsung,pin-pud = <3>; 625 - samsung,pin-drv = <0>; 625 + samsung,pin-drv = <3>; 626 626 }; 627 627 628 628 sd2_bus4: sd2-bus-width4 { 629 629 samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6"; 630 630 samsung,pin-function = <2>; 631 631 samsung,pin-pud = <3>; 632 - samsung,pin-drv = <0>; 632 + samsung,pin-drv = <3>; 633 633 }; 634 634 635 635 sd2_bus8: sd2-bus-width8 { 636 636 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 637 637 samsung,pin-function = <3>; 638 638 samsung,pin-pud = <3>; 639 - samsung,pin-drv = <0>; 639 + samsung,pin-drv = <3>; 640 640 }; 641 641 642 642 sd3_clk: sd3-clk { 643 643 samsung,pins = "gpk3-0"; 644 644 samsung,pin-function = <2>; 645 645 samsung,pin-pud = <0>; 646 - samsung,pin-drv = <0>; 646 + samsung,pin-drv = <3>; 647 647 }; 648 648 649 649 sd3_cmd: sd3-cmd { 650 650 samsung,pins = "gpk3-1"; 651 651 samsung,pin-function = <2>; 652 652 samsung,pin-pud = <0>; 653 - samsung,pin-drv = <0>; 653 + samsung,pin-drv = <3>; 654 654 }; 655 655 656 656 sd3_cd: sd3-cd { 657 657 samsung,pins = "gpk3-2"; 658 658 samsung,pin-function = <2>; 659 659 samsung,pin-pud = <3>; 660 - samsung,pin-drv = <0>; 660 + samsung,pin-drv = <3>; 661 661 }; 662 662 663 663 sd3_bus1: sd3-bus-width1 { 664 664 samsung,pins = "gpk3-3"; 665 665 samsung,pin-function = <2>; 666 666 samsung,pin-pud = <3>; 667 - samsung,pin-drv = <0>; 667 + samsung,pin-drv = <3>; 668 668 }; 669 669 670 670 sd3_bus4: sd3-bus-width4 { 671 671 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 672 672 samsung,pin-function = <2>; 673 673 samsung,pin-pud = <3>; 674 - samsung,pin-drv = <0>; 674 + samsung,pin-drv = <3>; 675 675 }; 676 676 677 677 eint0: ext-int0 {
+5
arch/arm/boot/dts/exynos4210.dtsi
··· 31 31 pinctrl2 = &pinctrl_2; 32 32 }; 33 33 34 + pd_lcd1: lcd1-power-domain@10023CA0 { 35 + compatible = "samsung,exynos4210-pd"; 36 + reg = <0x10023CA0 0x20>; 37 + }; 38 + 34 39 gic:interrupt-controller@10490000 { 35 40 cpu-offset = <0x8000>; 36 41 };
+28 -28
arch/arm/boot/dts/exynos4x12-pinctrl.dtsi
··· 586 586 samsung,pins = "gpk0-0"; 587 587 samsung,pin-function = <2>; 588 588 samsung,pin-pud = <0>; 589 - samsung,pin-drv = <0>; 589 + samsung,pin-drv = <3>; 590 590 }; 591 591 592 592 sd0_cmd: sd0-cmd { 593 593 samsung,pins = "gpk0-1"; 594 594 samsung,pin-function = <2>; 595 595 samsung,pin-pud = <0>; 596 - samsung,pin-drv = <0>; 596 + samsung,pin-drv = <3>; 597 597 }; 598 598 599 599 sd0_cd: sd0-cd { 600 600 samsung,pins = "gpk0-2"; 601 601 samsung,pin-function = <2>; 602 602 samsung,pin-pud = <3>; 603 - samsung,pin-drv = <0>; 603 + samsung,pin-drv = <3>; 604 604 }; 605 605 606 606 sd0_bus1: sd0-bus-width1 { 607 607 samsung,pins = "gpk0-3"; 608 608 samsung,pin-function = <2>; 609 609 samsung,pin-pud = <3>; 610 - samsung,pin-drv = <0>; 610 + samsung,pin-drv = <3>; 611 611 }; 612 612 613 613 sd0_bus4: sd0-bus-width4 { 614 614 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 615 615 samsung,pin-function = <2>; 616 616 samsung,pin-pud = <3>; 617 - samsung,pin-drv = <0>; 617 + samsung,pin-drv = <3>; 618 618 }; 619 619 620 620 sd0_bus8: sd0-bus-width8 { 621 621 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 622 622 samsung,pin-function = <3>; 623 623 samsung,pin-pud = <3>; 624 - samsung,pin-drv = <0>; 624 + samsung,pin-drv = <3>; 625 625 }; 626 626 627 627 sd4_clk: sd4-clk { 628 628 samsung,pins = "gpk0-0"; 629 629 samsung,pin-function = <3>; 630 630 samsung,pin-pud = <0>; 631 - samsung,pin-drv = <0>; 631 + samsung,pin-drv = <3>; 632 632 }; 633 633 634 634 sd4_cmd: sd4-cmd { 635 635 samsung,pins = "gpk0-1"; 636 636 samsung,pin-function = <3>; 637 637 samsung,pin-pud = <0>; 638 - samsung,pin-drv = <0>; 638 + samsung,pin-drv = <3>; 639 639 }; 640 640 641 641 sd4_cd: sd4-cd { 642 642 samsung,pins = "gpk0-2"; 643 643 samsung,pin-function = <3>; 644 644 samsung,pin-pud = <3>; 645 - samsung,pin-drv = <0>; 645 + samsung,pin-drv = <3>; 646 646 }; 647 647 648 648 sd4_bus1: sd4-bus-width1 { 649 649 samsung,pins = "gpk0-3"; 650 650 samsung,pin-function = <3>; 651 651 samsung,pin-pud = <3>; 652 - samsung,pin-drv = <0>; 652 + samsung,pin-drv = <3>; 653 653 }; 654 654 655 655 sd4_bus4: sd4-bus-width4 { 656 656 samsung,pins = "gpk0-3", "gpk0-4", "gpk0-5", "gpk0-6"; 657 657 samsung,pin-function = <3>; 658 658 samsung,pin-pud = <3>; 659 - samsung,pin-drv = <0>; 659 + samsung,pin-drv = <3>; 660 660 }; 661 661 662 662 sd4_bus8: sd4-bus-width8 { 663 663 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 664 664 samsung,pin-function = <3>; 665 665 samsung,pin-pud = <4>; 666 - samsung,pin-drv = <0>; 666 + samsung,pin-drv = <3>; 667 667 }; 668 668 669 669 sd1_clk: sd1-clk { 670 670 samsung,pins = "gpk1-0"; 671 671 samsung,pin-function = <2>; 672 672 samsung,pin-pud = <0>; 673 - samsung,pin-drv = <0>; 673 + samsung,pin-drv = <3>; 674 674 }; 675 675 676 676 sd1_cmd: sd1-cmd { 677 677 samsung,pins = "gpk1-1"; 678 678 samsung,pin-function = <2>; 679 679 samsung,pin-pud = <0>; 680 - samsung,pin-drv = <0>; 680 + samsung,pin-drv = <3>; 681 681 }; 682 682 683 683 sd1_cd: sd1-cd { 684 684 samsung,pins = "gpk1-2"; 685 685 samsung,pin-function = <2>; 686 686 samsung,pin-pud = <3>; 687 - samsung,pin-drv = <0>; 687 + samsung,pin-drv = <3>; 688 688 }; 689 689 690 690 sd1_bus1: sd1-bus-width1 { 691 691 samsung,pins = "gpk1-3"; 692 692 samsung,pin-function = <2>; 693 693 samsung,pin-pud = <3>; 694 - samsung,pin-drv = <0>; 694 + samsung,pin-drv = <3>; 695 695 }; 696 696 697 697 sd1_bus4: sd1-bus-width4 { 698 698 samsung,pins = "gpk1-3", "gpk1-4", "gpk1-5", "gpk1-6"; 699 699 samsung,pin-function = <2>; 700 700 samsung,pin-pud = <3>; 701 - samsung,pin-drv = <0>; 701 + samsung,pin-drv = <3>; 702 702 }; 703 703 704 704 sd2_clk: sd2-clk { 705 705 samsung,pins = "gpk2-0"; 706 706 samsung,pin-function = <2>; 707 707 samsung,pin-pud = <0>; 708 - samsung,pin-drv = <0>; 708 + samsung,pin-drv = <3>; 709 709 }; 710 710 711 711 sd2_cmd: sd2-cmd { 712 712 samsung,pins = "gpk2-1"; 713 713 samsung,pin-function = <2>; 714 714 samsung,pin-pud = <0>; 715 - samsung,pin-drv = <0>; 715 + samsung,pin-drv = <3>; 716 716 }; 717 717 718 718 sd2_cd: sd2-cd { 719 719 samsung,pins = "gpk2-2"; 720 720 samsung,pin-function = <2>; 721 721 samsung,pin-pud = <3>; 722 - samsung,pin-drv = <0>; 722 + samsung,pin-drv = <3>; 723 723 }; 724 724 725 725 sd2_bus1: sd2-bus-width1 { 726 726 samsung,pins = "gpk2-3"; 727 727 samsung,pin-function = <2>; 728 728 samsung,pin-pud = <3>; 729 - samsung,pin-drv = <0>; 729 + samsung,pin-drv = <3>; 730 730 }; 731 731 732 732 sd2_bus4: sd2-bus-width4 { 733 733 samsung,pins = "gpk2-3", "gpk2-4", "gpk2-5", "gpk2-6"; 734 734 samsung,pin-function = <2>; 735 735 samsung,pin-pud = <3>; 736 - samsung,pin-drv = <0>; 736 + samsung,pin-drv = <3>; 737 737 }; 738 738 739 739 sd2_bus8: sd2-bus-width8 { 740 740 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 741 741 samsung,pin-function = <3>; 742 742 samsung,pin-pud = <3>; 743 - samsung,pin-drv = <0>; 743 + samsung,pin-drv = <3>; 744 744 }; 745 745 746 746 sd3_clk: sd3-clk { 747 747 samsung,pins = "gpk3-0"; 748 748 samsung,pin-function = <2>; 749 749 samsung,pin-pud = <0>; 750 - samsung,pin-drv = <0>; 750 + samsung,pin-drv = <3>; 751 751 }; 752 752 753 753 sd3_cmd: sd3-cmd { 754 754 samsung,pins = "gpk3-1"; 755 755 samsung,pin-function = <2>; 756 756 samsung,pin-pud = <0>; 757 - samsung,pin-drv = <0>; 757 + samsung,pin-drv = <3>; 758 758 }; 759 759 760 760 sd3_cd: sd3-cd { 761 761 samsung,pins = "gpk3-2"; 762 762 samsung,pin-function = <2>; 763 763 samsung,pin-pud = <3>; 764 - samsung,pin-drv = <0>; 764 + samsung,pin-drv = <3>; 765 765 }; 766 766 767 767 sd3_bus1: sd3-bus-width1 { 768 768 samsung,pins = "gpk3-3"; 769 769 samsung,pin-function = <2>; 770 770 samsung,pin-pud = <3>; 771 - samsung,pin-drv = <0>; 771 + samsung,pin-drv = <3>; 772 772 }; 773 773 774 774 sd3_bus4: sd3-bus-width4 { 775 775 samsung,pins = "gpk3-3", "gpk3-4", "gpk3-5", "gpk3-6"; 776 776 samsung,pin-function = <2>; 777 777 samsung,pin-pud = <3>; 778 - samsung,pin-drv = <0>; 778 + samsung,pin-drv = <3>; 779 779 }; 780 780 781 781 keypad_col0: keypad-col0 {
+4 -8
arch/arm/boot/dts/exynos5250-smdk5250.dts
··· 17 17 compatible = "samsung,smdk5250", "samsung,exynos5250"; 18 18 19 19 aliases { 20 - mshc0 = &dwmmc_0; 21 - mshc1 = &dwmmc_1; 22 - mshc2 = &dwmmc_2; 23 - mshc3 = &dwmmc_3; 24 20 }; 25 21 26 22 memory { ··· 108 112 }; 109 113 }; 110 114 111 - dwmmc_0: dwmmc0@12200000 { 115 + dwmmc0@12200000 { 112 116 num-slots = <1>; 113 117 supports-highspeed; 114 118 broken-cd; ··· 129 133 }; 130 134 }; 131 135 132 - dwmmc_1: dwmmc1@12210000 { 136 + dwmmc1@12210000 { 133 137 status = "disabled"; 134 138 }; 135 139 136 - dwmmc_2: dwmmc2@12220000 { 140 + dwmmc2@12220000 { 137 141 num-slots = <1>; 138 142 supports-highspeed; 139 143 fifo-depth = <0x80>; ··· 154 158 }; 155 159 }; 156 160 157 - dwmmc_3: dwmmc3@12230000 { 161 + dwmmc3@12230000 { 158 162 status = "disabled"; 159 163 }; 160 164
+43
arch/arm/boot/dts/exynos5250-snow.dts
··· 1 + /* 2 + * Google Snow board device tree source 3 + * 4 + * Copyright (c) 2012 Google, Inc 5 + * 6 + * This program is free software; you can redistribute it and/or modify 7 + * it under the terms of the GNU General Public License version 2 as 8 + * published by the Free Software Foundation. 9 + */ 10 + 11 + /dts-v1/; 12 + /include/ "exynos5250.dtsi" 13 + /include/ "cros5250-common.dtsi" 14 + 15 + / { 16 + model = "Google Snow"; 17 + compatible = "google,snow", "samsung,exynos5250"; 18 + 19 + gpio-keys { 20 + compatible = "gpio-keys"; 21 + 22 + lid-switch { 23 + label = "Lid"; 24 + gpios = <&gpx3 5 0 0x10000 0>; 25 + linux,input-type = <5>; /* EV_SW */ 26 + linux,code = <0>; /* SW_LID */ 27 + debounce-interval = <1>; 28 + gpio-key,wakeup; 29 + }; 30 + }; 31 + 32 + /* 33 + * On Snow we've got SIP WiFi and so can keep drive strengths low to 34 + * reduce EMI. 35 + */ 36 + dwmmc3@12230000 { 37 + slot@0 { 38 + gpios = <&gpc4 0 2 0 0>, <&gpc4 1 2 3 0>, 39 + <&gpc4 3 2 3 0>, <&gpc4 4 2 3 0>, 40 + <&gpc4 5 2 3 0>, <&gpc4 6 2 3 0>; 41 + }; 42 + }; 43 + };
+8 -4
arch/arm/boot/dts/exynos5250.dtsi
··· 31 31 gsc1 = &gsc_1; 32 32 gsc2 = &gsc_2; 33 33 gsc3 = &gsc_3; 34 + mshc0 = &dwmmc_0; 35 + mshc1 = &dwmmc_1; 36 + mshc2 = &dwmmc_2; 37 + mshc3 = &dwmmc_3; 34 38 }; 35 39 36 40 gic:interrupt-controller@10481000 { ··· 228 224 #size-cells = <0>; 229 225 }; 230 226 231 - dwmmc0@12200000 { 227 + dwmmc_0: dwmmc0@12200000 { 232 228 compatible = "samsung,exynos5250-dw-mshc"; 233 229 reg = <0x12200000 0x1000>; 234 230 interrupts = <0 75 0>; ··· 236 232 #size-cells = <0>; 237 233 }; 238 234 239 - dwmmc1@12210000 { 235 + dwmmc_1: dwmmc1@12210000 { 240 236 compatible = "samsung,exynos5250-dw-mshc"; 241 237 reg = <0x12210000 0x1000>; 242 238 interrupts = <0 76 0>; ··· 244 240 #size-cells = <0>; 245 241 }; 246 242 247 - dwmmc2@12220000 { 243 + dwmmc_2: dwmmc2@12220000 { 248 244 compatible = "samsung,exynos5250-dw-mshc"; 249 245 reg = <0x12220000 0x1000>; 250 246 interrupts = <0 77 0>; ··· 252 248 #size-cells = <0>; 253 249 }; 254 250 255 - dwmmc3@12230000 { 251 + dwmmc_3: dwmmc3@12230000 { 256 252 compatible = "samsung,exynos5250-dw-mshc"; 257 253 reg = <0x12230000 0x1000>; 258 254 interrupts = <0 78 0>;
+10
arch/arm/mach-exynos/mach-exynos5-dt.c
··· 52 52 "s3c2440-i2c.1", NULL), 53 53 OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(2), 54 54 "s3c2440-i2c.2", NULL), 55 + OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(3), 56 + "s3c2440-i2c.3", NULL), 57 + OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(4), 58 + "s3c2440-i2c.4", NULL), 59 + OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(5), 60 + "s3c2440-i2c.5", NULL), 61 + OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(6), 62 + "s3c2440-i2c.6", NULL), 63 + OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(7), 64 + "s3c2440-i2c.7", NULL), 55 65 OF_DEV_AUXDATA("samsung,s3c2440-hdmiphy-i2c", EXYNOS5_PA_IIC(8), 56 66 "s3c2440-hdmiphy-i2c", NULL), 57 67 OF_DEV_AUXDATA("samsung,exynos5250-dw-mshc", EXYNOS5_PA_DWMCI0,
+89 -4
arch/arm/mach-exynos/pm_domains.c
··· 19 19 #include <linux/pm_domain.h> 20 20 #include <linux/delay.h> 21 21 #include <linux/of_address.h> 22 + #include <linux/of_platform.h> 23 + #include <linux/sched.h> 22 24 23 25 #include <mach/regs-pmu.h> 24 26 #include <plat/devs.h> ··· 85 83 } 86 84 87 85 #ifdef CONFIG_OF 86 + static void exynos_add_device_to_domain(struct exynos_pm_domain *pd, 87 + struct device *dev) 88 + { 89 + int ret; 90 + 91 + dev_dbg(dev, "adding to power domain %s\n", pd->pd.name); 92 + 93 + while (1) { 94 + ret = pm_genpd_add_device(&pd->pd, dev); 95 + if (ret != -EAGAIN) 96 + break; 97 + cond_resched(); 98 + } 99 + 100 + pm_genpd_dev_need_restore(dev, true); 101 + } 102 + 103 + static void exynos_remove_device_from_domain(struct device *dev) 104 + { 105 + struct generic_pm_domain *genpd = dev_to_genpd(dev); 106 + int ret; 107 + 108 + dev_dbg(dev, "removing from power domain %s\n", genpd->name); 109 + 110 + while (1) { 111 + ret = pm_genpd_remove_device(genpd, dev); 112 + if (ret != -EAGAIN) 113 + break; 114 + cond_resched(); 115 + } 116 + } 117 + 118 + static void exynos_read_domain_from_dt(struct device *dev) 119 + { 120 + struct platform_device *pd_pdev; 121 + struct exynos_pm_domain *pd; 122 + struct device_node *node; 123 + 124 + node = of_parse_phandle(dev->of_node, "samsung,power-domain", 0); 125 + if (!node) 126 + return; 127 + pd_pdev = of_find_device_by_node(node); 128 + if (!pd_pdev) 129 + return; 130 + pd = platform_get_drvdata(pd_pdev); 131 + exynos_add_device_to_domain(pd, dev); 132 + } 133 + 134 + static int exynos_pm_notifier_call(struct notifier_block *nb, 135 + unsigned long event, void *data) 136 + { 137 + struct device *dev = data; 138 + 139 + switch (event) { 140 + case BUS_NOTIFY_BIND_DRIVER: 141 + if (dev->of_node) 142 + exynos_read_domain_from_dt(dev); 143 + 144 + break; 145 + 146 + case BUS_NOTIFY_UNBOUND_DRIVER: 147 + exynos_remove_device_from_domain(dev); 148 + 149 + break; 150 + } 151 + return NOTIFY_DONE; 152 + } 153 + 154 + static struct notifier_block platform_nb = { 155 + .notifier_call = exynos_pm_notifier_call, 156 + }; 157 + 88 158 static __init int exynos_pm_dt_parse_domains(void) 89 159 { 160 + struct platform_device *pdev; 90 161 struct device_node *np; 91 162 92 163 for_each_compatible_node(np, NULL, "samsung,exynos4210-pd") { 93 164 struct exynos_pm_domain *pd; 165 + int on; 166 + 167 + pdev = of_find_device_by_node(np); 94 168 95 169 pd = kzalloc(sizeof(*pd), GFP_KERNEL); 96 170 if (!pd) { ··· 175 97 return -ENOMEM; 176 98 } 177 99 178 - if (of_get_property(np, "samsung,exynos4210-pd-off", NULL)) 179 - pd->is_off = true; 180 - pd->name = np->name; 100 + pd->pd.name = kstrdup(np->name, GFP_KERNEL); 101 + pd->name = pd->pd.name; 181 102 pd->base = of_iomap(np, 0); 182 103 pd->pd.power_off = exynos_pd_power_off; 183 104 pd->pd.power_on = exynos_pd_power_on; 184 105 pd->pd.of_node = np; 185 - pm_genpd_init(&pd->pd, NULL, false); 106 + 107 + platform_set_drvdata(pdev, pd); 108 + 109 + on = __raw_readl(pd->base + 0x4) & S5P_INT_LOCAL_PWR_EN; 110 + 111 + pm_genpd_init(&pd->pd, NULL, !on); 186 112 } 113 + 114 + bus_register_notifier(&platform_bus_type, &platform_nb); 115 + 187 116 return 0; 188 117 } 189 118 #else