diff mbox

[2/3] ARM: dts: add Samsung's exynos4412-based midas boards

Message ID 20171212140815.28257-3-simon@lineageos.org (mailing list archive)
State Superseded
Headers show

Commit Message

Simon Shields Dec. 12, 2017, 2:08 p.m. UTC
"midas" is the codename for a family of smartphones released by Samsung
Mobile. It includes the Galaxy S3 (GT-I9300/I9305) and the Galaxy
Note 2 (GT-N7100/N7105). The boards largely have the same peripherals:
the main differences are touchscreen, display panel and cellular modem.

Signed-off-by: Simon Shields <simon@lineageos.org>
---
 arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi |  144 +++
 arch/arm/boot/dts/exynos4412-m0.dts         |   14 +
 arch/arm/boot/dts/exynos4412-m3.dts         |   19 +
 arch/arm/boot/dts/exynos4412-midas.dtsi     | 1291 +++++++++++++++++++++++++++
 arch/arm/boot/dts/exynos4412-t0.dts         |   51 ++
 5 files changed, 1519 insertions(+)
 create mode 100644 arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi
 create mode 100644 arch/arm/boot/dts/exynos4412-m0.dts
 create mode 100644 arch/arm/boot/dts/exynos4412-m3.dts
 create mode 100644 arch/arm/boot/dts/exynos4412-midas.dtsi
 create mode 100644 arch/arm/boot/dts/exynos4412-t0.dts

Comments

Krzysztof Kozlowski Dec. 14, 2017, 8:48 a.m. UTC | #1
Hi Simon,

Thanks for new boards!

+Cc Marek, Bartlomiej,

On Tue, Dec 12, 2017 at 3:08 PM, Simon Shields <simon@lineageos.org> wrote:
> "midas" is the codename for a family of smartphones released by Samsung
> Mobile. It includes the Galaxy S3 (GT-I9300/I9305) and the Galaxy
> Note 2 (GT-N7100/N7105). The boards largely have the same peripherals:
> the main differences are touchscreen, display panel and cellular modem.
>
> Signed-off-by: Simon Shields <simon@lineageos.org>
> ---
>  arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi |  144 +++
>  arch/arm/boot/dts/exynos4412-m0.dts         |   14 +
>  arch/arm/boot/dts/exynos4412-m3.dts         |   19 +
>  arch/arm/boot/dts/exynos4412-midas.dtsi     | 1291 +++++++++++++++++++++++++++

M0 is essentially Trats2. You are duplicating here almost entire
Trats2 which means:
1. A lot of duplicated code thus it will require more maintenance to
keep DTS synced,
2. It is very difficult to spot the changes and possible errors
between Trats2 and Midas DTSI/M0.

Please make a generic family of devices based on Midas, including
Trats2. You might make it in steps for easier review:
1. Split common Trats2 part,
2. Add new boards.

Also, few minor nits below.

>  arch/arm/boot/dts/exynos4412-t0.dts         |   51 ++
>  5 files changed, 1519 insertions(+)
>  create mode 100644 arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi
>  create mode 100644 arch/arm/boot/dts/exynos4412-m0.dts
>  create mode 100644 arch/arm/boot/dts/exynos4412-m3.dts
>  create mode 100644 arch/arm/boot/dts/exynos4412-midas.dtsi
>  create mode 100644 arch/arm/boot/dts/exynos4412-t0.dts
>
> diff --git a/arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi b/arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi
> new file mode 100644
> index 000000000000..536195adfe65
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi
> @@ -0,0 +1,144 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/dts-v1/;
> +#include "exynos4412-midas.dtsi"
> +
> +/ {
> +       regulators {
> +               lcd_vdd3_reg: voltage-regulator-10 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "LCD_VDD_2.2V";
> +                       regulator-min-microvolt = <2200000>;
> +                       regulator-max-microvolt = <2200000>;
> +                       enable-active-high;
> +                       gpio = <&gpc0 1 GPIO_ACTIVE_HIGH>;
> +               };
> +
> +               ps_als_reg: voltage-regulator-11 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "LED_A_3.0V";
> +                       regulator-min-microvolt = <3000000>;
> +                       regulator-max-microvolt = <3000000>;
> +                       enable-active-high;
> +                       gpio = <&gpj0 5 GPIO_ACTIVE_HIGH>;
> +               };
> +       };
> +
> +       i2c_ak8975: i2c-gpio-10 {
> +               compatible = "i2c-gpio";
> +               gpios = <&gpy2 4 GPIO_ACTIVE_HIGH>, <&gpy2 5 GPIO_ACTIVE_HIGH>;
> +               i2c-gpio,delay-us = <2>;
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               ak8975@c {
> +                       compatible = "asahi-kasei,ak8975";
> +                       reg = <0x0c>;
> +                       gpios = <&gpj0 7 GPIO_ACTIVE_HIGH>;
> +               };
> +       };
> +
> +       i2c_cm36651: i2c-gpio-11 {
> +               compatible = "i2c-gpio";
> +               gpios = <&gpf0 0 GPIO_ACTIVE_LOW>, <&gpf0 1 GPIO_ACTIVE_LOW>;
> +               i2c-gpio,delay-us = <2>;
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               cm36651@18 {
> +                       compatible = "capella,cm36651";
> +                       reg = <0x18>;
> +                       interrupt-parent = <&gpx0>;
> +                       interrupts = <2 IRQ_EDGE_TYPE_FALLING>;
> +                       vled-supply = <&ps_als_reg>;
> +               };
> +       };
> +};
> +
> +&buck9_reg {
> +       maxim,ena-gpios = <&gpm0 3 GPIO_ACTIVE_HIGH>;
> +};
> +
> +&cam_af_reg {
> +       gpio = <&gpm0 4 GPIO_ACTIVE_HIGH>;
> +       status = "okay";
> +};
> +
> +&cam_io_reg {
> +       gpio = <&gpm0 2 GPIO_ACTIVE_HIGH>;
> +       status = "okay";
> +};
> +
> +&dsi_0 {
> +       vddcore-supply = <&ldo8_reg>;
> +       vddio-supply = <&ldo10_reg>;
> +       samsung,burst-clock-frequency = <500000000>;
> +       samsung,esc-clock-frequency = <20000000>;
> +       samsung,pll-clock-frequency = <24000000>;
> +       status = "okay";
> +
> +       panel@0 {
> +               compatible = "samsung,s6e8aa0";
> +               reg = <0>;
> +               vdd3-supply = <&lcd_vdd3_reg>;
> +               vci-supply = <&ldo25_reg>;
> +               reset-gpios = <&gpf2 1 GPIO_ACTIVE_HIGH>;
> +               power-on-delay= <50>;
> +               reset-delay = <100>;
> +               init-delay = <100>;
> +               flip-horizontal;
> +               flip-vertical;
> +               panel-width-mm = <58>;
> +               panel-height-mm = <103>;
> +
> +               display-timings {
> +                       timing-0 {
> +                               clock-frequency = <57153600>;
> +                               hactive = <720>;
> +                               vactive = <1280>;
> +                               hfront-porch = <5>;
> +                               hback-porch = <5>;
> +                               hsync-len = <5>;
> +                               vfront-porch = <13>;
> +                               vback-porch = <1>;
> +                               vsync-len = <2>;
> +                       };
> +               };
> +       };
> +};
> +
> +&i2c_0 {
> +       status = "okay";
> +};
> +
> +&i2c_3 {
> +       samsung,i2c-sda-delay = <100>;
> +       samsung,i2c-slave-addr = <0x10>;
> +       samsung,i2c-max-bus-freq = <400000>;
> +       pinctrl-0 = <&i2c3_bus>;
> +       pinctrl-names = "default";
> +       status = "okay";
> +
> +       mms114-touchscreen@48 {
> +               compatible = "melfas,mms114";
> +               reg = <0x48>;
> +               interrupt-parent = <&gpm2>;
> +               interrupts = <3 IRQ_EDGE_TYPE_FALLING>;
> +               x-size = <720>;
> +               y-size = <1280>;
> +               avdd-supply = <&ldo23_reg>;
> +               vdd-supply = <&ldo24_reg>;
> +       };
> +};
> +
> +&ldo17_reg {
> +       regulator-name = "CAM_SENSOR_CORE_1.2V";
> +       regulator-min-microvolt = <1200000>;
> +       regulator-max-microvolt = <1200000>;
> +};
> +
> +&ldo25_reg {
> +       regulator-name = "LCD_VCC_3.3V";
> +       regulator-min-microvolt = <3300000>;
> +       regulator-max-microvolt = <3300000>;
> +};
> +
> diff --git a/arch/arm/boot/dts/exynos4412-m0.dts b/arch/arm/boot/dts/exynos4412-m0.dts
> new file mode 100644
> index 000000000000..18aff81682a9
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-m0.dts
> @@ -0,0 +1,14 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/dts-v1/;
> +#include "exynos4412-galaxy-s3.dtsi"
> +
> +/ {
> +       compatible = "samsung,m0", "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
> +       model = "Samsung M0 (GT-I9300) based on Exynos4412";
> +
> +       memory@40000000 {
> +               device_type = "memory";
> +               reg =  <0x40000000 0x40000000>;
> +       };
> +};
> +
> diff --git a/arch/arm/boot/dts/exynos4412-m3.dts b/arch/arm/boot/dts/exynos4412-m3.dts
> new file mode 100644
> index 000000000000..e13ee49ad867
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-m3.dts
> @@ -0,0 +1,19 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/dts-v1/;
> +#include "exynos4412-galaxy-s3.dtsi"
> +
> +/ {
> +       compatible = "samsung,m3", "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
> +       model = "Samsung M3 (GT-I9305) based on Exynos4412";
> +
> +       memory@40000000 {
> +               device_type = "memory";
> +               reg =  <0x40000000 0x80000000>;
> +       };
> +};
> +
> +&i2c0_bus {
> +       // SCL and SDA pins are swapped

Use /* comments (except SPDX line).

> +       samsung,pins = "gpd1-1", "gpd1-0";
> +};
> +
> diff --git a/arch/arm/boot/dts/exynos4412-midas.dtsi b/arch/arm/boot/dts/exynos4412-midas.dtsi
> new file mode 100644
> index 000000000000..65c1e2d14d26
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-midas.dtsi
> @@ -0,0 +1,1291 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/dts-v1/;
> +#include "exynos4412.dtsi"
> +#include "exynos4412-ppmu-common.dtsi"
> +#include <dt-bindings/gpio/gpio.h>
> +#include <dt-bindings/interrupt-controller/irq.h>
> +#include <dt-bindings/clock/maxim,max77686.h>
> +#include <dt-bindings/pinctrl/samsung.h>
> +
> +/ {
> +       compatible = "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
> +
> +       aliases {
> +               i2c9 = &i2c_max77693;
> +               i2c10 = &i2c_max77693_fuel;
> +       };
> +
> +       chosen {
> +               stdout-path = &serial_2;
> +       };
> +
> +       firmware@204f000 {
> +               compatible = "samsung,secure-firmware";
> +               reg = <0x0204F000 0x1000>;
> +       };
> +
> +       fixed-rate-clocks {
> +               xxti {
> +                       compatible = "samsung,clock-xxti", "fixed-clock";
> +                       clock-frequency = <0>;
> +               };
> +
> +               xusbxti {
> +                       compatible = "samsung,clock-xusbxti", "fixed-clock";
> +                       clock-frequency = <24000000>;
> +               };
> +       };
> +
> +       regulators {
> +               compatible = "simple-bus";
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               cam_io_reg: voltage-regulator-0 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "CAM_SENSOR_A";
> +                       regulator-min-microvolt = <2800000>;
> +                       regulator-max-microvolt = <2800000>;
> +                       enable-active-high;
> +                       status = "disabled";
> +               };
> +
> +               cam_af_reg: voltage-regulator-1 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "CAM_AF";
> +                       regulator-min-microvolt = <2800000>;
> +                       regulator-max-microvolt = <2800000>;
> +                       enable-active-high;
> +                       status = "disabled";
> +               };
> +
> +               vsil12: voltage-regulator-6 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "VSIL_1.2V";
> +                       regulator-min-microvolt = <1200000>;
> +                       regulator-max-microvolt = <1200000>;
> +                       gpio = <&gpl0 4 GPIO_ACTIVE_HIGH>;
> +                       enable-active-high;
> +                       vin-supply = <&buck7_reg>;
> +               };
> +
> +               vcc33mhl: voltage-regulator-7 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "VCC_3.3_MHL";
> +                       regulator-min-microvolt = <3300000>;
> +                       regulator-max-microvolt = <3300000>;
> +                       gpio = <&gpl0 4 GPIO_ACTIVE_HIGH>;
> +                       enable-active-high;
> +               };
> +
> +               vcc18mhl: voltage-regulator-8 {
> +                       compatible = "regulator-fixed";
> +                       regulator-name = "VCC_1.8_MHL";
> +                       regulator-min-microvolt = <1800000>;
> +                       regulator-max-microvolt = <1800000>;
> +                       gpio = <&gpl0 4 GPIO_ACTIVE_HIGH>;
> +                       enable-active-high;
> +               };
> +
> +       };
> +
> +       gpio-keys {
> +               compatible = "gpio-keys";
> +
> +               key-down {
> +                       gpios = <&gpx3 3 GPIO_ACTIVE_LOW>;
> +                       linux,code = <114>;
> +                       label = "volume down";
> +                       debounce-interval = <10>;
> +               };
> +
> +               key-up {
> +                       gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
> +                       linux,code = <115>;
> +                       label = "volume up";
> +                       debounce-interval = <10>;
> +               };
> +
> +               key-power {
> +                       gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
> +                       linux,code = <116>;
> +                       label = "power";
> +                       debounce-interval = <10>;
> +                       wakeup-source;
> +               };
> +
> +               key-home {
> +                       gpios = <&gpx0 1 GPIO_ACTIVE_LOW>;
> +                       linux,code = <172>;
> +                       label = "home";
> +                       debounce-inteval = <10>;
> +                       wakeup-source;
> +               };
> +       };
> +
> +       i2c_max77693: i2c-gpio-0 {
> +               compatible = "i2c-gpio";
> +               gpios = <&gpm2 0 GPIO_ACTIVE_HIGH>, <&gpm2 1 GPIO_ACTIVE_HIGH>;
> +               i2c-gpio,delay-us = <2>;
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +               status = "okay";
> +
> +               max77693@66 {
> +                       compatible = "maxim,max77693";
> +                       interrupt-parent = <&gpx1>;
> +                       interrupts = <5 IRQ_EDGE_TYPE_FALLING>;
> +                       reg = <0x66>;
> +
> +                       regulators {
> +                               esafeout1_reg: ESAFEOUT1 {
> +                                       regulator-name = "ESAFEOUT1";
> +                               };
> +                               esafeout2_reg: ESAFEOUT2 {
> +                                       regulator-name = "ESAFEOUT2";
> +                               };
> +                               charger_reg: CHARGER {
> +                                       regulator-name = "CHARGER";
> +                                       regulator-min-microamp = <60000>;
> +                                       regulator-max-microamp = <2580000>;
> +                               };
> +                       };
> +
> +                       max77693_haptic {
> +                               compatible = "maxim,max77693-haptic";
> +                               haptic-supply = <&ldo26_reg>;
> +                               pwms = <&pwm 0 38022 0>;
> +                       };
> +
> +                       charger {
> +                               compatible = "maxim,max77693-charger";
> +
> +                               maxim,constant-microvolt = <4350000>;
> +                               maxim,min-system-microvolt = <3600000>;
> +                               maxim,thermal-regulation-celsius = <100>;
> +                               maxim,battery-overcurrent-microamp = <3500000>;
> +                               maxim,charge-input-threshold-microvolt = <4300000>;
> +                       };
> +               };
> +       };
> +
> +       i2c_max77693_fuel: i2c-gpio-1 {
> +               compatible = "i2c-gpio";
> +               gpios = <&gpf1 5 GPIO_ACTIVE_HIGH>, <&gpf1 4 GPIO_ACTIVE_HIGH>;
> +               i2c-gpio,delay-us = <2>;
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +               status = "okay";
> +
> +               max77693-fuel-gauge@36 {
> +                       compatible = "maxim,max17047";
> +                       interrupt-parent = <&gpx2>;
> +                       interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
> +                       reg = <0x36>;
> +
> +                       maxim,over-heat-temp = <700>;
> +                       maxim,over-volt = <4500>;
> +               };
> +       };
> +
> +       i2c-mhl {
> +               compatible = "i2c-gpio";
> +               gpios = <&gpf0 4 GPIO_ACTIVE_HIGH>, <&gpf0 6 GPIO_ACTIVE_HIGH>;
> +               i2c-gpio,delay-us = <100>;
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               pinctrl-0 = <&i2c_mhl_bus>;
> +               pinctrl-names = "default";
> +               status = "okay";
> +
> +               sii9234: hdmi-bridge@39 {
> +                       compatible = "sil,sii9234";
> +                       avcc33-supply = <&vcc33mhl>;
> +                       iovcc18-supply = <&vcc18mhl>;
> +                       avcc12-supply = <&vsil12>;
> +                       cvcc12-supply = <&vsil12>;
> +                       reset-gpios = <&gpf3 4 GPIO_ACTIVE_LOW>;
> +                       interrupt-parent = <&gpf3>;
> +                       interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
> +                       reg = <0x39>;
> +
> +                       port {
> +                               mhl_to_hdmi: endpoint {
> +                                       remote-endpoint = <&hdmi_to_mhl>;
> +                               };
> +                       };
> +               };
> +       };
> +
> +       camera: camera {
> +               pinctrl-0 = <&cam_port_a_clk_active &cam_port_b_clk_active>;
> +               pinctrl-names = "default";
> +               status = "okay";
> +               assigned-clocks = <&clock CLK_MOUT_CAM0>,
> +                                 <&clock CLK_MOUT_CAM1>;
> +               assigned-clock-parents = <&clock CLK_XUSBXTI>,
> +                                        <&clock CLK_XUSBXTI>;
> +       };
> +
> +       wlan_pwrseq: sdhci3-pwrseq {
> +               compatible = "mmc-pwrseq-simple";
> +               reset-gpios = <&gpj0 0 GPIO_ACTIVE_LOW>;
> +               clocks = <&max77686 MAX77686_CLK_PMIC>;
> +               clock-names = "ext_clock";
> +       };
> +
> +       thermistor-ap {
> +               compatible = "murata,ncp15wb473";
> +               pullup-uv = <1800000>;   /* VCC_1.8V_AP */
> +               pullup-ohm = <100000>;   /* 100K */
> +               pulldown-ohm = <100000>; /* 100K */
> +               io-channels = <&adc 1>;  /* AP temperature */
> +       };
> +
> +       thermistor-battery {
> +               compatible = "murata,ncp15wb473";
> +               pullup-uv = <1800000>;   /* VCC_1.8V_AP */
> +               pullup-ohm = <100000>;   /* 100K */
> +               pulldown-ohm = <100000>; /* 100K */
> +               io-channels = <&adc 2>;  /* Battery temperature */
> +       };
> +
> +       thermal-zones {
> +               cpu_thermal: cpu-thermal {
> +                       cooling-maps {
> +                               map0 {
> +                                        /* Corresponds to 800MHz at freq_table */
> +                                        cooling-device = <&cpu0 7 7>;
> +                               };
> +                               map1 {
> +                                        /* Corresponds to 200MHz at freq_table */
> +                                        cooling-device = <&cpu0 13 13>;
> +                               };
> +                       };
> +               };
> +       };
> +
> +};
> +
> +&adc {
> +       vdd-supply = <&ldo3_reg>;
> +       status = "okay";
> +};
> +
> +&bus_dmc {
> +       devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
> +       vdd-supply = <&buck1_reg>;
> +       status = "okay";
> +};
> +
> +&bus_acp {
> +       devfreq = <&bus_dmc>;
> +       status = "okay";
> +};
> +
> +&bus_c2c {
> +       devfreq = <&bus_dmc>;
> +       status = "okay";
> +};
> +
> +&bus_leftbus {
> +       devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
> +       vdd-supply = <&buck3_reg>;
> +       status = "okay";
> +};
> +
> +&bus_rightbus {
> +       devfreq = <&bus_leftbus>;
> +       status = "okay";
> +};
> +
> +&bus_display {
> +       devfreq = <&bus_leftbus>;
> +       status = "okay";
> +};
> +
> +&bus_fsys {
> +       devfreq = <&bus_leftbus>;
> +       status = "okay";
> +};
> +
> +&bus_peri {
> +       devfreq = <&bus_leftbus>;
> +       status = "okay";
> +};
> +
> +&bus_mfc {
> +       devfreq = <&bus_leftbus>;
> +       status = "okay";
> +};
> +
> +&cpu0 {
> +       cpu0-supply = <&buck2_reg>;
> +};
> +
> +&csis_0 {
> +       status = "okay";
> +       vddcore-supply = <&ldo8_reg>;
> +       vddio-supply = <&ldo10_reg>;
> +       assigned-clocks = <&clock CLK_MOUT_CSIS0>,
> +                       <&clock CLK_SCLK_CSIS0>;
> +       assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
> +       assigned-clock-rates = <0>, <176000000>;
> +
> +       /* Camera C (3) MIPI CSI-2 (CSIS0) */
> +       port@3 {
> +               reg = <3>;
> +               csis0_ep: endpoint {
> +                       remote-endpoint = <&s5c73m3_ep>;
> +                       data-lanes = <1 2 3 4>;
> +                       samsung,csis-hs-settle = <12>;
> +               };
> +       };
> +};
> +
> +&csis_1 {
> +       status = "okay";
> +       vddcore-supply = <&ldo8_reg>;
> +       vddio-supply = <&ldo10_reg>;
> +       assigned-clocks = <&clock CLK_MOUT_CSIS1>,
> +                       <&clock CLK_SCLK_CSIS1>;
> +       assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
> +       assigned-clock-rates = <0>, <176000000>;
> +
> +       /* Camera D (4) MIPI CSI-2 (CSIS1) */
> +       port@4 {
> +               reg = <4>;
> +               csis1_ep: endpoint {
> +                       remote-endpoint = <&is_s5k6a3_ep>;
> +                       data-lanes = <1>;
> +                       samsung,csis-hs-settle = <18>;
> +                       samsung,csis-wclk;
> +               };
> +       };
> +};
> +
> +&exynos_usbphy {
> +       vbus-supply = <&esafeout1_reg>;
> +       status = "okay";
> +};
> +
> +&fimc_0 {
> +       status = "okay";
> +       assigned-clocks = <&clock CLK_MOUT_FIMC0>,
> +                       <&clock CLK_SCLK_FIMC0>;
> +       assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
> +       assigned-clock-rates = <0>, <176000000>;
> +};
> +
> +&fimc_1 {
> +       status = "okay";
> +       assigned-clocks = <&clock CLK_MOUT_FIMC1>,
> +                       <&clock CLK_SCLK_FIMC1>;
> +       assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
> +       assigned-clock-rates = <0>, <176000000>;
> +};
> +
> +&fimc_2 {
> +       status = "okay";
> +       assigned-clocks = <&clock CLK_MOUT_FIMC2>,
> +                       <&clock CLK_SCLK_FIMC2>;
> +       assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
> +       assigned-clock-rates = <0>, <176000000>;
> +};
> +
> +&fimc_3 {
> +       status = "okay";
> +       assigned-clocks = <&clock CLK_MOUT_FIMC3>,
> +                       <&clock CLK_SCLK_FIMC3>;
> +       assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
> +       assigned-clock-rates = <0>, <176000000>;
> +};
> +
> +&fimc_is {
> +       pinctrl-0 = <&fimc_is_uart>;
> +       pinctrl-names = "default";
> +       status = "okay";
> +
> +       i2c1_isp: i2c-isp@12140000 {
> +               pinctrl-0 = <&fimc_is_i2c1>;
> +               pinctrl-names = "default";
> +
> +               s5k6a3@10 {
> +                       compatible = "samsung,s5k6a3";
> +                       reg = <0x10>;
> +                       svdda-supply = <&cam_io_reg>;
> +                       svddio-supply = <&ldo19_reg>;
> +                       afvdd-supply = <&ldo19_reg>;
> +                       clock-frequency = <24000000>;
> +                       /* CAM_B_CLKOUT */
> +                       clocks = <&camera 1>;
> +                       clock-names = "extclk";
> +                       samsung,camclk-out = <1>;
> +                       gpios = <&gpm1 6 GPIO_ACTIVE_HIGH>;
> +
> +                       port {
> +                               is_s5k6a3_ep: endpoint {
> +                                       remote-endpoint = <&csis1_ep>;
> +                                       data-lanes = <1>;
> +                               };
> +                       };
> +               };
> +       };
> +};
> +
> +&fimc_lite_0 {
> +       status = "okay";
> +};
> +
> +&fimc_lite_1 {
> +       status = "okay";
> +};
> +
> +&fimd {
> +       status = "okay";
> +};
> +
> +&hdmi {
> +       hpd-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>;
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&hdmi_hpd>;
> +       vdd-supply = <&ldo3_reg>;
> +       vdd_osc-supply = <&ldo4_reg>;
> +       vdd_pll-supply = <&ldo3_reg>;
> +       ddc = <&i2c_5>;
> +       status = "okay";
> +
> +       ports {
> +               #address-cells = <1>;
> +               #size-cells = <0>;
> +
> +               port@1 {
> +                       reg = <1>;
> +                       hdmi_to_mhl: endpoint {
> +                               remote-endpoint = <&mhl_to_hdmi>;
> +                       };
> +               };
> +       };
> +};
> +
> +&hsotg {
> +       vusb_d-supply = <&ldo15_reg>;
> +       vusb_a-supply = <&ldo12_reg>;
> +       dr_mode = "peripheral";
> +       status = "okay";
> +};
> +
> +&i2c_0 {
> +       samsung,i2c-sda-delay = <100>;
> +       samsung,i2c-slave-addr = <0x10>;
> +       samsung,i2c-max-bus-freq = <400000>;
> +       pinctrl-0 = <&i2c0_bus>;
> +       pinctrl-names = "default";
> +
> +       status = "disabled";
> +
> +       s5c73m3@3c {
> +               compatible = "samsung,s5c73m3";
> +               reg = <0x3c>;
> +               standby-gpios = <&gpm0 1 GPIO_ACTIVE_LOW>;   /* ISP_STANDBY */
> +               xshutdown-gpios = <&gpf1 3 GPIO_ACTIVE_LOW>; /* ISP_RESET */
> +               vdd-int-supply = <&buck9_reg>;
> +               vddio-cis-supply = <&ldo9_reg>;
> +               vdda-supply = <&ldo17_reg>;
> +               vddio-host-supply = <&ldo18_reg>;
> +               vdd-af-supply = <&cam_af_reg>;
> +               vdd-reg-supply = <&cam_io_reg>;
> +               clock-frequency = <24000000>;
> +               /* CAM_A_CLKOUT */
> +               clocks = <&camera 0>;
> +               clock-names = "cis_extclk";
> +               port {
> +                       s5c73m3_ep: endpoint {
> +                               remote-endpoint = <&csis0_ep>;
> +                               data-lanes = <1 2 3 4>;
> +                       };
> +               };
> +       };
> +};
> +
> +&i2c_4 {
> +       samsung,i2c-sda-delay = <100>;
> +       samsung,i2c-slave-addr = <0x10>;
> +       samsung,i2c-max-bus-freq = <100000>;
> +       pinctrl-0 = <&i2c4_bus>;
> +       pinctrl-names = "default";
> +       status = "okay";
> +
> +       wm1811: wm1811@1a {
> +               compatible = "wlf,wm1811";
> +               reg = <0x1a>;
> +               clocks = <&pmu_system_controller 0>;
> +               clock-names = "MCLK1";
> +               DCVDD-supply = <&ldo3_reg>;
> +               DBVDD1-supply = <&ldo3_reg>;
> +               wlf,ldo1ena = <&gpj0 4 0>;
> +       };
> +};
> +
> +&i2c_5 {
> +       status = "okay";
> +};
> +
> +&i2c_7 {
> +       samsung,i2c-sda-delay = <100>;
> +       samsung,i2c-slave-addr = <0x10>;
> +       samsung,i2c-max-bus-freq = <100000>;
> +       pinctrl-0 = <&i2c7_bus>;
> +       pinctrl-names = "default";
> +       status = "okay";
> +
> +       max77686: max77686_pmic@9 {
> +               compatible = "maxim,max77686";
> +               interrupt-parent = <&gpx0>;
> +               interrupts = <7 IRQ_EDGE_TYPE_NONE>;
> +               reg = <0x09>;
> +               #clock-cells = <1>;
> +
> +               voltage-regulators {
> +                       ldo1_reg: LDO1 {
> +                               regulator-name = "VALIVE_1.0V_AP";
> +                               regulator-min-microvolt = <1000000>;
> +                               regulator-max-microvolt = <1000000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       ldo2_reg: LDO2 {
> +                               regulator-name = "VM1M2_1.2V_AP";
> +                               regulator-min-microvolt = <1200000>;
> +                               regulator-max-microvolt = <1200000>;
> +                               regulator-always-on;
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo3_reg: LDO3 {
> +                               regulator-name = "VCC_1.8V_AP";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       ldo4_reg: LDO4 {
> +                               regulator-name = "VCC_2.8V_AP";
> +                               regulator-min-microvolt = <2800000>;
> +                               regulator-max-microvolt = <2800000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       ldo5_reg: LDO5 {
> +                               regulator-name = "VTOUCH_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       ldo6_reg: LDO6 {
> +                               regulator-name = "VMPLL_1.0V_AP";
> +                               regulator-min-microvolt = <1000000>;
> +                               regulator-max-microvolt = <1000000>;
> +                               regulator-always-on;
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo7_reg: LDO7 {
> +                               regulator-name = "VPLL_1.0V_AP";
> +                               regulator-min-microvolt = <1000000>;
> +                               regulator-max-microvolt = <1000000>;
> +                               regulator-always-on;
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo8_reg: LDO8 {
> +                               regulator-name = "VMIPI_1.0V";
> +                               regulator-min-microvolt = <1000000>;
> +                               regulator-max-microvolt = <1000000>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo9_reg: LDO9 {
> +                               regulator-name = "CAM_ISP_MIPI_1.2V";
> +                               regulator-min-microvolt = <1200000>;
> +                               regulator-max-microvolt = <1200000>;
> +                       };
> +
> +                       ldo10_reg: LDO10 {
> +                               regulator-name = "VMIPI_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo11_reg: LDO11 {
> +                               regulator-name = "VABB1_1.95V";
> +                               regulator-min-microvolt = <1950000>;
> +                               regulator-max-microvolt = <1950000>;
> +                               regulator-always-on;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo12_reg: LDO12 {
> +                               regulator-name = "VUOTG_3.0V";
> +                               regulator-min-microvolt = <3000000>;
> +                               regulator-max-microvolt = <3000000>;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo13_reg: LDO13 {
> +                               status = "disabled";
> +                       };
> +
> +                       ldo14_reg: LDO14 {
> +                               regulator-name = "VABB2_1.95V";
> +                               regulator-min-microvolt = <1950000>;
> +                               regulator-max-microvolt = <1950000>;
> +                               regulator-always-on;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo15_reg: LDO15 {
> +                               regulator-name = "VHSIC_1.0V";
> +                               regulator-min-microvolt = <1000000>;
> +                               regulator-max-microvolt = <1000000>;
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo16_reg: LDO16 {
> +                               regulator-name = "VHSIC_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       ldo17_reg: LDO17 {
> +                               status = "disabled";
> +                       };
> +
> +                       ldo18_reg: LDO18 {
> +                               regulator-name = "CAM_ISP_SENSOR_IO_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                       };
> +
> +                       ldo19_reg: LDO19 {
> +                               regulator-name = "VT_CAM_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                       };
> +
> +                       ldo20_reg: LDO20 {
> +                               regulator-name = "VDDQ_PRE_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                       };
> +
> +                       ldo21_reg: LDO21 {
> +                               regulator-name = "VTF_2.8V";
> +                               regulator-min-microvolt = <2800000>;
> +                               regulator-max-microvolt = <2800000>;
> +                               maxim,ena-gpios = <&gpy2 0 GPIO_ACTIVE_HIGH>;
> +                       };
> +
> +                       ldo22_reg: LDO22 {
> +                               regulator-name = "VMEM_VDD_2.8V";
> +                               regulator-min-microvolt = <2800000>;
> +                               regulator-max-microvolt = <2800000>;
> +                               maxim,ena-gpios = <&gpk0 2 GPIO_ACTIVE_HIGH>;
> +                       };
> +
> +                       ldo23_reg: LDO23 {
> +                               regulator-name = "TSP_AVDD_3.3V";
> +                               regulator-min-microvolt = <3300000>;
> +                               regulator-max-microvolt = <3300000>;
> +                       };
> +
> +                       ldo24_reg: LDO24 {
> +                               regulator-name = "TSP_VDD_1.8V";
> +                               regulator-min-microvolt = <1800000>;
> +                               regulator-max-microvolt = <1800000>;
> +                       };
> +
> +                       ldo25_reg: LDO25 {
> +                               status = "disabled";
> +                       };
> +
> +                       ldo26_reg: LDO26 {
> +                               regulator-name = "MOTOR_VCC_3.0V";
> +                               regulator-min-microvolt = <3000000>;
> +                               regulator-max-microvolt = <3000000>;
> +                       };
> +
> +                       buck1_reg: BUCK1 {
> +                               regulator-name = "vdd_mif";
> +                               regulator-min-microvolt = <850000>;
> +                               regulator-max-microvolt = <1100000>;
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       buck2_reg: BUCK2 {
> +                               regulator-name = "vdd_arm";
> +                               regulator-min-microvolt = <850000>;
> +                               regulator-max-microvolt = <1500000>;
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-state-mem {
> +                                       regulator-on-in-suspend;
> +                               };
> +                       };
> +
> +                       buck3_reg: BUCK3 {
> +                               regulator-name = "vdd_int";
> +                               regulator-min-microvolt = <850000>;
> +                               regulator-max-microvolt = <1150000>;
> +                               regulator-always-on;
> +                               regulator-boot-on;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       buck4_reg: BUCK4 {
> +                               regulator-name = "vdd_g3d";
> +                               regulator-min-microvolt = <850000>;
> +                               regulator-max-microvolt = <1150000>;
> +                               regulator-boot-on;
> +                               regulator-state-mem {
> +                                       regulator-off-in-suspend;
> +                               };
> +                       };
> +
> +                       buck5_reg: BUCK5 {
> +                               regulator-name = "VMEM_1.2V_AP";
> +                               regulator-min-microvolt = <1200000>;
> +                               regulator-max-microvolt = <1200000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       buck6_reg: BUCK6 {
> +                               regulator-name = "VCC_SUB_1.35V";
> +                               regulator-min-microvolt = <1350000>;
> +                               regulator-max-microvolt = <1350000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       buck7_reg: BUCK7 {
> +                               regulator-name = "VCC_SUB_2.0V";
> +                               regulator-min-microvolt = <2000000>;
> +                               regulator-max-microvolt = <2000000>;
> +                               regulator-always-on;
> +                       };
> +
> +                       buck8_reg: BUCK8 {
> +                               regulator-name = "VMEM_VDDF_3.0V";
> +                               regulator-min-microvolt = <2850000>;
> +                               regulator-max-microvolt = <2850000>;
> +                               maxim,ena-gpios = <&gpk0 2 GPIO_ACTIVE_HIGH>;
> +                       };
> +
> +                       buck9_reg: BUCK9 {
> +                               regulator-name = "CAM_ISP_CORE_1.2V";
> +                               regulator-min-microvolt = <1000000>;
> +                               regulator-max-microvolt = <1200000>;
> +                       };
> +               };
> +       };
> +};
> +
> +&i2c_8 {
> +       status = "okay";
> +};
> +
> +&i2s0 {
> +       pinctrl-0 = <&i2s0_bus>;
> +       pinctrl-names = "default";
> +       status = "okay";
> +};
> +
> +&mixer {
> +       status = "okay";
> +};
> +
> +&mshc_0 {
> +       broken-cd;
> +       non-removable;
> +       card-detect-delay = <200>;
> +       vmmc-supply = <&ldo22_reg>;
> +       clock-frequency = <400000000>;
> +       samsung,dw-mshc-ciu-div = <0>;
> +       samsung,dw-mshc-sdr-timing = <2 3>;
> +       samsung,dw-mshc-ddr-timing = <1 2>;
> +       pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
> +       pinctrl-names = "default";
> +       status = "okay";
> +       bus-width = <8>;
> +       cap-mmc-highspeed;
> +};
> +
> +&pmu_system_controller {
> +       assigned-clocks = <&pmu_system_controller 0>;
> +       assigned-clock-parents =  <&clock CLK_XUSBXTI>;
> +};
> +
> +&pinctrl_0 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sleep0>;
> +
> +       mhl_int: mhl-int {
> +               samsung,pins = "gpf3-5";
> +               samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
> +       };
> +
> +       i2c_mhl_bus: i2c-mhl-bus {
> +               samsung,pins = "gpf0-4", "gpf0-6";
> +               samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
> +               samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
> +               samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
> +       };
> +
> +       sleep0: sleep-states {
> +               PIN_SLP(gpa0-0, INPUT, NONE);
> +               PIN_SLP(gpa0-1, OUT0, NONE);
> +               PIN_SLP(gpa0-2, INPUT, NONE);
> +               PIN_SLP(gpa0-3, INPUT, UP);
> +               PIN_SLP(gpa0-4, INPUT, NONE);
> +               PIN_SLP(gpa0-5, INPUT, DOWN);
> +               PIN_SLP(gpa0-6, INPUT, DOWN);
> +               PIN_SLP(gpa0-7, INPUT, UP);
> +
> +               PIN_SLP(gpa1-0, INPUT, DOWN);
> +               PIN_SLP(gpa1-1, INPUT, DOWN);
> +               PIN_SLP(gpa1-2, INPUT, DOWN);
> +               PIN_SLP(gpa1-3, INPUT, DOWN);
> +               PIN_SLP(gpa1-4, INPUT, DOWN);
> +               PIN_SLP(gpa1-5, INPUT, DOWN);
> +
> +               PIN_SLP(gpb-0, INPUT, NONE);
> +               PIN_SLP(gpb-1, INPUT, NONE);
> +               PIN_SLP(gpb-2, INPUT, NONE);
> +               PIN_SLP(gpb-3, INPUT, NONE);
> +               PIN_SLP(gpb-4, INPUT, DOWN);
> +               PIN_SLP(gpb-5, INPUT, UP);
> +               PIN_SLP(gpb-6, INPUT, DOWN);
> +               PIN_SLP(gpb-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpc0-0, INPUT, DOWN);
> +               PIN_SLP(gpc0-1, INPUT, DOWN);
> +               PIN_SLP(gpc0-2, INPUT, DOWN);
> +               PIN_SLP(gpc0-3, INPUT, DOWN);
> +               PIN_SLP(gpc0-4, INPUT, DOWN);
> +
> +               PIN_SLP(gpc1-0, INPUT, NONE);
> +               PIN_SLP(gpc1-1, PREV, NONE);
> +               PIN_SLP(gpc1-2, INPUT, NONE);
> +               PIN_SLP(gpc1-3, INPUT, NONE);
> +               PIN_SLP(gpc1-4, INPUT, NONE);
> +
> +               PIN_SLP(gpd0-0, INPUT, DOWN);
> +               PIN_SLP(gpd0-1, INPUT, DOWN);
> +               PIN_SLP(gpd0-2, INPUT, NONE);
> +               PIN_SLP(gpd0-3, INPUT, NONE);
> +
> +               PIN_SLP(gpd1-0, INPUT, DOWN);
> +               PIN_SLP(gpd1-1, INPUT, DOWN);
> +               PIN_SLP(gpd1-2, INPUT, NONE);
> +               PIN_SLP(gpd1-3, INPUT, NONE);
> +
> +               PIN_SLP(gpf0-0, INPUT, NONE);
> +               PIN_SLP(gpf0-1, INPUT, NONE);
> +               PIN_SLP(gpf0-2, INPUT, DOWN);
> +               PIN_SLP(gpf0-3, INPUT, DOWN);
> +               PIN_SLP(gpf0-4, INPUT, NONE);
> +               PIN_SLP(gpf0-5, INPUT, DOWN);
> +               PIN_SLP(gpf0-6, INPUT, NONE);
> +               PIN_SLP(gpf0-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpf1-0, INPUT, DOWN);
> +               PIN_SLP(gpf1-1, INPUT, DOWN);
> +               PIN_SLP(gpf1-2, INPUT, DOWN);
> +               PIN_SLP(gpf1-3, INPUT, DOWN);
> +               PIN_SLP(gpf1-4, INPUT, NONE);
> +               PIN_SLP(gpf1-5, INPUT, NONE);
> +               PIN_SLP(gpf1-6, INPUT, DOWN);
> +               PIN_SLP(gpf1-7, PREV, NONE);
> +
> +               PIN_SLP(gpf2-0, PREV, NONE);
> +               PIN_SLP(gpf2-1, INPUT, DOWN);
> +               PIN_SLP(gpf2-2, INPUT, DOWN);
> +               PIN_SLP(gpf2-3, INPUT, DOWN);
> +               PIN_SLP(gpf2-4, INPUT, DOWN);
> +               PIN_SLP(gpf2-5, INPUT, DOWN);
> +               PIN_SLP(gpf2-6, INPUT, NONE);
> +               PIN_SLP(gpf2-7, INPUT, NONE);
> +
> +               PIN_SLP(gpf3-0, INPUT, NONE);
> +               PIN_SLP(gpf3-1, PREV, NONE);
> +               PIN_SLP(gpf3-2, PREV, NONE);
> +               PIN_SLP(gpf3-3, PREV, NONE);
> +               PIN_SLP(gpf3-4, OUT1, NONE);
> +               PIN_SLP(gpf3-5, INPUT, DOWN);
> +
> +               PIN_SLP(gpj0-0, PREV, NONE);
> +               PIN_SLP(gpj0-1, PREV, NONE);
> +               PIN_SLP(gpj0-2, PREV, NONE);
> +               PIN_SLP(gpj0-3, INPUT, DOWN);
> +               PIN_SLP(gpj0-4, PREV, NONE);
> +               PIN_SLP(gpj0-5, PREV, NONE);
> +               PIN_SLP(gpj0-6, INPUT, DOWN);
> +               PIN_SLP(gpj0-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpj1-0, INPUT, DOWN);
> +               PIN_SLP(gpj1-1, PREV, NONE);
> +               PIN_SLP(gpj1-2, PREV, NONE);
> +               PIN_SLP(gpj1-3, INPUT, DOWN);
> +               PIN_SLP(gpj1-4, INPUT, DOWN);
> +       };
> +};
> +
> +&pinctrl_1 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sleep1>;
> +
> +       hdmi_hpd: hdmi-hpd {
> +               samsung,pins = "gpx3-7";
> +               samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
> +       };
> +
> +       sleep1: sleep-states {
> +               PIN_SLP(gpk0-0, PREV, NONE);
> +               PIN_SLP(gpk0-1, PREV, NONE);
> +               PIN_SLP(gpk0-2, OUT0, NONE);
> +               PIN_SLP(gpk0-3, PREV, NONE);
> +               PIN_SLP(gpk0-4, PREV, NONE);
> +               PIN_SLP(gpk0-5, PREV, NONE);
> +               PIN_SLP(gpk0-6, PREV, NONE);
> +
> +               PIN_SLP(gpk1-0, INPUT, DOWN);
> +               PIN_SLP(gpk1-1, INPUT, DOWN);
> +               PIN_SLP(gpk1-2, INPUT, DOWN);
> +               PIN_SLP(gpk1-3, PREV, NONE);
> +               PIN_SLP(gpk1-4, PREV, NONE);
> +               PIN_SLP(gpk1-5, PREV, NONE);
> +               PIN_SLP(gpk1-6, PREV, NONE);
> +
> +               PIN_SLP(gpk2-0, INPUT, DOWN);
> +               PIN_SLP(gpk2-1, INPUT, DOWN);
> +               PIN_SLP(gpk2-2, INPUT, DOWN);
> +               PIN_SLP(gpk2-3, INPUT, DOWN);
> +               PIN_SLP(gpk2-4, INPUT, DOWN);
> +               PIN_SLP(gpk2-5, INPUT, DOWN);
> +               PIN_SLP(gpk2-6, INPUT, DOWN);
> +
> +               PIN_SLP(gpk3-0, OUT0, NONE);
> +               PIN_SLP(gpk3-1, INPUT, NONE);
> +               PIN_SLP(gpk3-2, INPUT, DOWN);
> +               PIN_SLP(gpk3-3, INPUT, NONE);
> +               PIN_SLP(gpk3-4, INPUT, NONE);
> +               PIN_SLP(gpk3-5, INPUT, NONE);
> +               PIN_SLP(gpk3-6, INPUT, NONE);
> +
> +               PIN_SLP(gpl0-0, INPUT, DOWN);
> +               PIN_SLP(gpl0-1, INPUT, DOWN);
> +               PIN_SLP(gpl0-2, INPUT, DOWN);
> +               PIN_SLP(gpl0-3, INPUT, DOWN);
> +               PIN_SLP(gpl0-4, PREV, NONE);
> +               PIN_SLP(gpl0-6, PREV, NONE);
> +
> +               PIN_SLP(gpl1-0, INPUT, DOWN);
> +               PIN_SLP(gpl1-1, INPUT, DOWN);
> +               PIN_SLP(gpl2-0, INPUT, DOWN);
> +               PIN_SLP(gpl2-1, INPUT, DOWN);
> +               PIN_SLP(gpl2-2, INPUT, DOWN);
> +               PIN_SLP(gpl2-3, INPUT, DOWN);
> +               PIN_SLP(gpl2-4, INPUT, DOWN);
> +               PIN_SLP(gpl2-5, INPUT, DOWN);
> +               PIN_SLP(gpl2-6, PREV, NONE);
> +               PIN_SLP(gpl2-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpm0-0, INPUT, DOWN);
> +               PIN_SLP(gpm0-1, INPUT, DOWN);
> +               PIN_SLP(gpm0-2, INPUT, DOWN);
> +               PIN_SLP(gpm0-3, INPUT, DOWN);
> +               PIN_SLP(gpm0-4, INPUT, DOWN);
> +               PIN_SLP(gpm0-5, INPUT, DOWN);
> +               PIN_SLP(gpm0-6, INPUT, DOWN);
> +               PIN_SLP(gpm0-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpm1-0, INPUT, DOWN);
> +               PIN_SLP(gpm1-1, INPUT, DOWN);
> +               PIN_SLP(gpm1-2, INPUT, NONE);
> +               PIN_SLP(gpm1-3, INPUT, NONE);
> +               PIN_SLP(gpm1-4, INPUT, NONE);
> +               PIN_SLP(gpm1-5, INPUT, NONE);
> +               PIN_SLP(gpm1-6, INPUT, DOWN);
> +
> +               PIN_SLP(gpm2-0, INPUT, NONE);
> +               PIN_SLP(gpm2-1, INPUT, NONE);
> +               PIN_SLP(gpm2-2, INPUT, DOWN);
> +               PIN_SLP(gpm2-3, INPUT, DOWN);
> +               PIN_SLP(gpm2-4, INPUT, DOWN);
> +
> +               PIN_SLP(gpm3-0, PREV, NONE);
> +               PIN_SLP(gpm3-1, PREV, NONE);
> +               PIN_SLP(gpm3-2, PREV, NONE);
> +               PIN_SLP(gpm3-3, OUT1, NONE);
> +               PIN_SLP(gpm3-4, INPUT, DOWN);
> +               PIN_SLP(gpm3-5, INPUT, DOWN);
> +               PIN_SLP(gpm3-6, INPUT, DOWN);
> +               PIN_SLP(gpm3-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpm4-0, INPUT, DOWN);
> +               PIN_SLP(gpm4-1, INPUT, DOWN);
> +               PIN_SLP(gpm4-2, INPUT, DOWN);
> +               PIN_SLP(gpm4-3, INPUT, DOWN);
> +               PIN_SLP(gpm4-4, INPUT, DOWN);
> +               PIN_SLP(gpm4-5, INPUT, DOWN);
> +               PIN_SLP(gpm4-6, INPUT, DOWN);
> +               PIN_SLP(gpm4-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpy0-0, INPUT, DOWN);
> +               PIN_SLP(gpy0-1, INPUT, DOWN);
> +               PIN_SLP(gpy0-2, INPUT, DOWN);
> +               PIN_SLP(gpy0-3, INPUT, DOWN);
> +               PIN_SLP(gpy0-4, INPUT, DOWN);
> +               PIN_SLP(gpy0-5, INPUT, DOWN);
> +
> +               PIN_SLP(gpy1-0, INPUT, DOWN);
> +               PIN_SLP(gpy1-1, INPUT, DOWN);
> +               PIN_SLP(gpy1-2, INPUT, DOWN);
> +               PIN_SLP(gpy1-3, INPUT, DOWN);
> +
> +               PIN_SLP(gpy2-0, PREV, NONE);
> +               PIN_SLP(gpy2-1, INPUT, DOWN);
> +               PIN_SLP(gpy2-2, INPUT, NONE);
> +               PIN_SLP(gpy2-3, INPUT, NONE);
> +               PIN_SLP(gpy2-4, INPUT, NONE);
> +               PIN_SLP(gpy2-5, INPUT, NONE);
> +
> +               PIN_SLP(gpy3-0, INPUT, DOWN);
> +               PIN_SLP(gpy3-1, INPUT, DOWN);
> +               PIN_SLP(gpy3-2, INPUT, DOWN);
> +               PIN_SLP(gpy3-3, INPUT, DOWN);
> +               PIN_SLP(gpy3-4, INPUT, DOWN);
> +               PIN_SLP(gpy3-5, INPUT, DOWN);
> +               PIN_SLP(gpy3-6, INPUT, DOWN);
> +               PIN_SLP(gpy3-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpy4-0, INPUT, DOWN);
> +               PIN_SLP(gpy4-1, INPUT, DOWN);
> +               PIN_SLP(gpy4-2, INPUT, DOWN);
> +               PIN_SLP(gpy4-3, INPUT, DOWN);
> +               PIN_SLP(gpy4-4, INPUT, DOWN);
> +               PIN_SLP(gpy4-5, INPUT, DOWN);
> +               PIN_SLP(gpy4-6, INPUT, DOWN);
> +               PIN_SLP(gpy4-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpy5-0, INPUT, DOWN);
> +               PIN_SLP(gpy5-1, INPUT, DOWN);
> +               PIN_SLP(gpy5-2, INPUT, DOWN);
> +               PIN_SLP(gpy5-3, INPUT, DOWN);
> +               PIN_SLP(gpy5-4, INPUT, DOWN);
> +               PIN_SLP(gpy5-5, INPUT, DOWN);
> +               PIN_SLP(gpy5-6, INPUT, DOWN);
> +               PIN_SLP(gpy5-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpy6-0, INPUT, DOWN);
> +               PIN_SLP(gpy6-1, INPUT, DOWN);
> +               PIN_SLP(gpy6-2, INPUT, DOWN);
> +               PIN_SLP(gpy6-3, INPUT, DOWN);
> +               PIN_SLP(gpy6-4, INPUT, DOWN);
> +               PIN_SLP(gpy6-5, INPUT, DOWN);
> +               PIN_SLP(gpy6-6, INPUT, DOWN);
> +               PIN_SLP(gpy6-7, INPUT, DOWN);
> +       };
> +};
> +
> +&pinctrl_2 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sleep2>;
> +
> +       sleep2: sleep-states {
> +               PIN_SLP(gpz-0, INPUT, DOWN);
> +               PIN_SLP(gpz-1, INPUT, DOWN);
> +               PIN_SLP(gpz-2, INPUT, DOWN);
> +               PIN_SLP(gpz-3, INPUT, DOWN);
> +               PIN_SLP(gpz-4, INPUT, DOWN);
> +               PIN_SLP(gpz-5, INPUT, DOWN);
> +               PIN_SLP(gpz-6, INPUT, DOWN);
> +       };
> +};
> +
> +&pinctrl_3 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sleep3>;
> +
> +       sleep3: sleep-states {
> +               PIN_SLP(gpv0-0, INPUT, DOWN);
> +               PIN_SLP(gpv0-1, INPUT, DOWN);
> +               PIN_SLP(gpv0-2, INPUT, DOWN);
> +               PIN_SLP(gpv0-3, INPUT, DOWN);
> +               PIN_SLP(gpv0-4, INPUT, DOWN);
> +               PIN_SLP(gpv0-5, INPUT, DOWN);
> +               PIN_SLP(gpv0-6, INPUT, DOWN);
> +               PIN_SLP(gpv0-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpv1-0, INPUT, DOWN);
> +               PIN_SLP(gpv1-1, INPUT, DOWN);
> +               PIN_SLP(gpv1-2, INPUT, DOWN);
> +               PIN_SLP(gpv1-3, INPUT, DOWN);
> +               PIN_SLP(gpv1-4, INPUT, DOWN);
> +               PIN_SLP(gpv1-5, INPUT, DOWN);
> +               PIN_SLP(gpv1-6, INPUT, DOWN);
> +               PIN_SLP(gpv1-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpv2-0, INPUT, DOWN);
> +               PIN_SLP(gpv2-1, INPUT, DOWN);
> +               PIN_SLP(gpv2-2, INPUT, DOWN);
> +               PIN_SLP(gpv2-3, INPUT, DOWN);
> +               PIN_SLP(gpv2-4, INPUT, DOWN);
> +               PIN_SLP(gpv2-5, INPUT, DOWN);
> +               PIN_SLP(gpv2-6, INPUT, DOWN);
> +               PIN_SLP(gpv2-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpv3-0, INPUT, DOWN);
> +               PIN_SLP(gpv3-1, INPUT, DOWN);
> +               PIN_SLP(gpv3-2, INPUT, DOWN);
> +               PIN_SLP(gpv3-3, INPUT, DOWN);
> +               PIN_SLP(gpv3-4, INPUT, DOWN);
> +               PIN_SLP(gpv3-5, INPUT, DOWN);
> +               PIN_SLP(gpv3-6, INPUT, DOWN);
> +               PIN_SLP(gpv3-7, INPUT, DOWN);
> +
> +               PIN_SLP(gpv4-0, INPUT, DOWN);
> +       };
> +};
> +
> +&pwm {
> +       pinctrl-0 = <&pwm0_out>;
> +       pinctrl-names = "default";
> +       samsung,pwm-outputs = <0>;
> +       status = "okay";
> +};
> +
> +&rtc {
> +       status = "okay";
> +       clocks = <&clock CLK_RTC>, <&max77686 MAX77686_CLK_AP>;
> +       clock-names = "rtc", "rtc_src";
> +};
> +
> +&sdhci_2 {
> +       bus-width = <4>;
> +       cd-gpios = <&gpx3 4 GPIO_ACTIVE_HIGH>;
> +       cd-inverted;
> +       pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4>;
> +       pinctrl-names = "default";
> +       vmmc-supply = <&ldo21_reg>;
> +       status = "okay";
> +};
> +
> +&sdhci_3 {
> +       #address-cells = <1>;
> +       #size-cells = <0>;
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&sd3_clk &sd3_cmd &sd3_bus4>;
> +
> +       broken-cd;
> +
> +       mmc-pwrseq = <&wlan_pwrseq>;
> +
> +       bus-width = <4>;
> +       status = "okay";
> +
> +       brcmf: wifi@1 {
> +               reg = <1>;
> +               compatible = "brcm,bcm4329-fmac";
> +               interrupt-parent = <&gpx2>;
> +               interrupts = <5 IRQ_TYPE_NONE>;
> +               interrupt-names = "host-wake";
> +       };
> +};
> +
> +&serial_0 {
> +       status = "okay";
> +};
> +
> +&serial_1 {
> +       status = "okay";
> +};
> +
> +&serial_2 {
> +       status = "okay";
> +};
> +
> +&serial_3 {
> +       status = "okay";
> +};
> +
> +&sleep0 {
> +       gpf1-0 {
> +               samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
> +               samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
> +       };
> +};
> +
> +&spi_1 {
> +       pinctrl-names = "default";
> +       pinctrl-0 = <&spi1_bus>;
> +       cs-gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
> +       status = "okay";
> +
> +       s5c73m3_spi: s5c73m3@0 {
> +               compatible = "samsung,s5c73m3";
> +               spi-max-frequency = <50000000>;
> +               reg = <0>;
> +               controller-data {
> +                       samsung,spi-feedback-delay = <2>;
> +               };
> +       };
> +};
> +
> +&tmu {
> +       vtmu-supply = <&ldo10_reg>;
> +       status = "okay";
> +};
> +
> +&pmu_system_controller {
> +       compatible = "samsung,exynos4210-pmu", "syscon", "simple-mfd";
> +
> +       reboot-mode {
> +               compatible = "syscon-reboot-mode";
> +               offset = <0x80c>;
> +
> +               mode-normal      = <0x12345670>;
> +               mode-bootloader = <0x12345671>;
> +               mode-download = <0x12345671>;
> +               mode-recovery = <0x12345674>;
> +       };
> +};
> diff --git a/arch/arm/boot/dts/exynos4412-t0.dts b/arch/arm/boot/dts/exynos4412-t0.dts
> new file mode 100644
> index 000000000000..c49abe857b6f
> --- /dev/null
> +++ b/arch/arm/boot/dts/exynos4412-t0.dts
> @@ -0,0 +1,51 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/dts-v1/;
> +#include "exynos4412-midas.dtsi"
> +
> +/ {
> +       compatible = "samsung,t0", "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
> +       model = "Samsung T0 (GT-N7100, GT-N7105) based on Exynos4412";
> +
> +       memory@40000000 {
> +               device_type = "memory";
> +               reg =  <0x40000000 0x80000000>;
> +       };
> +

Unnecessary blank line.

Best regards,
Krzysztof
--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Marek Szyprowski Dec. 14, 2017, 9:04 a.m. UTC | #2
Hi Krzysztof,


On 2017-12-14 09:48, Krzysztof Kozlowski wrote:
> Hi Simon,
>
> Thanks for new boards!
>
> +Cc Marek, Bartlomiej,
>
> On Tue, Dec 12, 2017 at 3:08 PM, Simon Shields <simon@lineageos.org> wrote:
>> "midas" is the codename for a family of smartphones released by Samsung
>> Mobile. It includes the Galaxy S3 (GT-I9300/I9305) and the Galaxy
>> Note 2 (GT-N7100/N7105). The boards largely have the same peripherals:
>> the main differences are touchscreen, display panel and cellular modem.
>>
>> Signed-off-by: Simon Shields <simon@lineageos.org>
>> ---
>>   arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi |  144 +++
>>   arch/arm/boot/dts/exynos4412-m0.dts         |   14 +
>>   arch/arm/boot/dts/exynos4412-m3.dts         |   19 +
>>   arch/arm/boot/dts/exynos4412-midas.dtsi     | 1291 +++++++++++++++++++++++++++
> M0 is essentially Trats2. You are duplicating here almost entire
> Trats2 which means:
> 1. A lot of duplicated code thus it will require more maintenance to
> keep DTS synced,
> 2. It is very difficult to spot the changes and possible errors
> between Trats2 and Midas DTSI/M0.
>
> Please make a generic family of devices based on Midas, including
> Trats2. You might make it in steps for easier review:
> 1. Split common Trats2 part,
> 2. Add new boards.

Krzysztof is right. Trats2 should also be based on midas.dtsi (it is very
similar to gt-i9300, the difference in mainly in the casing). We also used
gt-i9300 with modified bootloader with Trats2 dts.

It should not be hard to adapt it for common midas.dtsi base (hind: use
scripts/dtc/dtx_diff for checking if the final dts is correct).

 > ...

Best regards
diff mbox

Patch

diff --git a/arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi b/arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi
new file mode 100644
index 000000000000..536195adfe65
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-galaxy-s3.dtsi
@@ -0,0 +1,144 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "exynos4412-midas.dtsi"
+
+/ {
+	regulators {
+		lcd_vdd3_reg: voltage-regulator-10 {
+			compatible = "regulator-fixed";
+			regulator-name = "LCD_VDD_2.2V";
+			regulator-min-microvolt = <2200000>;
+			regulator-max-microvolt = <2200000>;
+			enable-active-high;
+			gpio = <&gpc0 1 GPIO_ACTIVE_HIGH>;
+		};
+
+		ps_als_reg: voltage-regulator-11 {
+			compatible = "regulator-fixed";
+			regulator-name = "LED_A_3.0V";
+			regulator-min-microvolt = <3000000>;
+			regulator-max-microvolt = <3000000>;
+			enable-active-high;
+			gpio = <&gpj0 5 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	i2c_ak8975: i2c-gpio-10 {
+		compatible = "i2c-gpio";
+		gpios = <&gpy2 4 GPIO_ACTIVE_HIGH>, <&gpy2 5 GPIO_ACTIVE_HIGH>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		ak8975@c {
+			compatible = "asahi-kasei,ak8975";
+			reg = <0x0c>;
+			gpios = <&gpj0 7 GPIO_ACTIVE_HIGH>;
+		};
+	};
+
+	i2c_cm36651: i2c-gpio-11 {
+		compatible = "i2c-gpio";
+		gpios = <&gpf0 0 GPIO_ACTIVE_LOW>, <&gpf0 1 GPIO_ACTIVE_LOW>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cm36651@18 {
+			compatible = "capella,cm36651";
+			reg = <0x18>;
+			interrupt-parent = <&gpx0>;
+			interrupts = <2 IRQ_EDGE_TYPE_FALLING>;
+			vled-supply = <&ps_als_reg>;
+		};
+	};
+};
+
+&buck9_reg {
+	maxim,ena-gpios = <&gpm0 3 GPIO_ACTIVE_HIGH>;
+};
+
+&cam_af_reg {
+	gpio = <&gpm0 4 GPIO_ACTIVE_HIGH>;
+	status = "okay";
+};
+
+&cam_io_reg {
+	gpio = <&gpm0 2 GPIO_ACTIVE_HIGH>;
+	status = "okay";
+};
+
+&dsi_0 {
+	vddcore-supply = <&ldo8_reg>;
+	vddio-supply = <&ldo10_reg>;
+	samsung,burst-clock-frequency = <500000000>;
+	samsung,esc-clock-frequency = <20000000>;
+	samsung,pll-clock-frequency = <24000000>;
+	status = "okay";
+
+	panel@0 {
+		compatible = "samsung,s6e8aa0";
+		reg = <0>;
+		vdd3-supply = <&lcd_vdd3_reg>;
+		vci-supply = <&ldo25_reg>;
+		reset-gpios = <&gpf2 1 GPIO_ACTIVE_HIGH>;
+		power-on-delay= <50>;
+		reset-delay = <100>;
+		init-delay = <100>;
+		flip-horizontal;
+		flip-vertical;
+		panel-width-mm = <58>;
+		panel-height-mm = <103>;
+
+		display-timings {
+			timing-0 {
+				clock-frequency = <57153600>;
+				hactive = <720>;
+				vactive = <1280>;
+				hfront-porch = <5>;
+				hback-porch = <5>;
+				hsync-len = <5>;
+				vfront-porch = <13>;
+				vback-porch = <1>;
+				vsync-len = <2>;
+			};
+		};
+	};
+};
+
+&i2c_0 {
+	status = "okay";
+};
+
+&i2c_3 {
+	samsung,i2c-sda-delay = <100>;
+	samsung,i2c-slave-addr = <0x10>;
+	samsung,i2c-max-bus-freq = <400000>;
+	pinctrl-0 = <&i2c3_bus>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	mms114-touchscreen@48 {
+		compatible = "melfas,mms114";
+		reg = <0x48>;
+		interrupt-parent = <&gpm2>;
+		interrupts = <3 IRQ_EDGE_TYPE_FALLING>;
+		x-size = <720>;
+		y-size = <1280>;
+		avdd-supply = <&ldo23_reg>;
+		vdd-supply = <&ldo24_reg>;
+	};
+};
+
+&ldo17_reg {
+	regulator-name = "CAM_SENSOR_CORE_1.2V";
+	regulator-min-microvolt = <1200000>;
+	regulator-max-microvolt = <1200000>;
+};
+
+&ldo25_reg {
+	regulator-name = "LCD_VCC_3.3V";
+	regulator-min-microvolt = <3300000>;
+	regulator-max-microvolt = <3300000>;
+};
+
diff --git a/arch/arm/boot/dts/exynos4412-m0.dts b/arch/arm/boot/dts/exynos4412-m0.dts
new file mode 100644
index 000000000000..18aff81682a9
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-m0.dts
@@ -0,0 +1,14 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "exynos4412-galaxy-s3.dtsi"
+
+/ {
+	compatible = "samsung,m0", "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
+	model = "Samsung M0 (GT-I9300) based on Exynos4412";
+
+	memory@40000000 {
+		device_type = "memory";
+		reg =  <0x40000000 0x40000000>;
+	};
+};
+
diff --git a/arch/arm/boot/dts/exynos4412-m3.dts b/arch/arm/boot/dts/exynos4412-m3.dts
new file mode 100644
index 000000000000..e13ee49ad867
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-m3.dts
@@ -0,0 +1,19 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "exynos4412-galaxy-s3.dtsi"
+
+/ {
+	compatible = "samsung,m3", "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
+	model = "Samsung M3 (GT-I9305) based on Exynos4412";
+
+	memory@40000000 {
+		device_type = "memory";
+		reg =  <0x40000000 0x80000000>;
+	};
+};
+
+&i2c0_bus {
+	// SCL and SDA pins are swapped
+	samsung,pins = "gpd1-1", "gpd1-0";
+};
+
diff --git a/arch/arm/boot/dts/exynos4412-midas.dtsi b/arch/arm/boot/dts/exynos4412-midas.dtsi
new file mode 100644
index 000000000000..65c1e2d14d26
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-midas.dtsi
@@ -0,0 +1,1291 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "exynos4412.dtsi"
+#include "exynos4412-ppmu-common.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/clock/maxim,max77686.h>
+#include <dt-bindings/pinctrl/samsung.h>
+
+/ {
+	compatible = "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
+
+	aliases {
+		i2c9 = &i2c_max77693;
+		i2c10 = &i2c_max77693_fuel;
+	};
+
+	chosen {
+		stdout-path = &serial_2;
+	};
+
+	firmware@204f000 {
+		compatible = "samsung,secure-firmware";
+		reg = <0x0204F000 0x1000>;
+	};
+
+	fixed-rate-clocks {
+		xxti {
+			compatible = "samsung,clock-xxti", "fixed-clock";
+			clock-frequency = <0>;
+		};
+
+		xusbxti {
+			compatible = "samsung,clock-xusbxti", "fixed-clock";
+			clock-frequency = <24000000>;
+		};
+	};
+
+	regulators {
+		compatible = "simple-bus";
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		cam_io_reg: voltage-regulator-0 {
+			compatible = "regulator-fixed";
+			regulator-name = "CAM_SENSOR_A";
+			regulator-min-microvolt = <2800000>;
+			regulator-max-microvolt = <2800000>;
+			enable-active-high;
+			status = "disabled";
+		};
+
+		cam_af_reg: voltage-regulator-1 {
+			compatible = "regulator-fixed";
+			regulator-name = "CAM_AF";
+			regulator-min-microvolt = <2800000>;
+			regulator-max-microvolt = <2800000>;
+			enable-active-high;
+			status = "disabled";
+		};
+
+		vsil12: voltage-regulator-6 {
+			compatible = "regulator-fixed";
+			regulator-name = "VSIL_1.2V";
+			regulator-min-microvolt = <1200000>;
+			regulator-max-microvolt = <1200000>;
+			gpio = <&gpl0 4 GPIO_ACTIVE_HIGH>;
+			enable-active-high;
+			vin-supply = <&buck7_reg>;
+		};
+
+		vcc33mhl: voltage-regulator-7 {
+			compatible = "regulator-fixed";
+			regulator-name = "VCC_3.3_MHL";
+			regulator-min-microvolt = <3300000>;
+			regulator-max-microvolt = <3300000>;
+			gpio = <&gpl0 4 GPIO_ACTIVE_HIGH>;
+			enable-active-high;
+		};
+
+		vcc18mhl: voltage-regulator-8 {
+			compatible = "regulator-fixed";
+			regulator-name = "VCC_1.8_MHL";
+			regulator-min-microvolt = <1800000>;
+			regulator-max-microvolt = <1800000>;
+			gpio = <&gpl0 4 GPIO_ACTIVE_HIGH>;
+			enable-active-high;
+		};
+
+	};
+
+	gpio-keys {
+		compatible = "gpio-keys";
+
+		key-down {
+			gpios = <&gpx3 3 GPIO_ACTIVE_LOW>;
+			linux,code = <114>;
+			label = "volume down";
+			debounce-interval = <10>;
+		};
+
+		key-up {
+			gpios = <&gpx2 2 GPIO_ACTIVE_LOW>;
+			linux,code = <115>;
+			label = "volume up";
+			debounce-interval = <10>;
+		};
+
+		key-power {
+			gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
+			linux,code = <116>;
+			label = "power";
+			debounce-interval = <10>;
+			wakeup-source;
+		};
+
+		key-home {
+			gpios = <&gpx0 1 GPIO_ACTIVE_LOW>;
+			linux,code = <172>;
+			label = "home";
+			debounce-inteval = <10>;
+			wakeup-source;
+		};
+	};
+
+	i2c_max77693: i2c-gpio-0 {
+		compatible = "i2c-gpio";
+		gpios = <&gpm2 0 GPIO_ACTIVE_HIGH>, <&gpm2 1 GPIO_ACTIVE_HIGH>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "okay";
+
+		max77693@66 {
+			compatible = "maxim,max77693";
+			interrupt-parent = <&gpx1>;
+			interrupts = <5 IRQ_EDGE_TYPE_FALLING>;
+			reg = <0x66>;
+
+			regulators {
+				esafeout1_reg: ESAFEOUT1 {
+					regulator-name = "ESAFEOUT1";
+				};
+				esafeout2_reg: ESAFEOUT2 {
+					regulator-name = "ESAFEOUT2";
+				};
+				charger_reg: CHARGER {
+					regulator-name = "CHARGER";
+					regulator-min-microamp = <60000>;
+					regulator-max-microamp = <2580000>;
+				};
+			};
+
+			max77693_haptic {
+				compatible = "maxim,max77693-haptic";
+				haptic-supply = <&ldo26_reg>;
+				pwms = <&pwm 0 38022 0>;
+			};
+
+			charger {
+				compatible = "maxim,max77693-charger";
+
+				maxim,constant-microvolt = <4350000>;
+				maxim,min-system-microvolt = <3600000>;
+				maxim,thermal-regulation-celsius = <100>;
+				maxim,battery-overcurrent-microamp = <3500000>;
+				maxim,charge-input-threshold-microvolt = <4300000>;
+			};
+		};
+	};
+
+	i2c_max77693_fuel: i2c-gpio-1 {
+		compatible = "i2c-gpio";
+		gpios = <&gpf1 5 GPIO_ACTIVE_HIGH>, <&gpf1 4 GPIO_ACTIVE_HIGH>;
+		i2c-gpio,delay-us = <2>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		status = "okay";
+
+		max77693-fuel-gauge@36 {
+			compatible = "maxim,max17047";
+			interrupt-parent = <&gpx2>;
+			interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
+			reg = <0x36>;
+
+			maxim,over-heat-temp = <700>;
+			maxim,over-volt = <4500>;
+		};
+	};
+
+	i2c-mhl {
+		compatible = "i2c-gpio";
+		gpios = <&gpf0 4 GPIO_ACTIVE_HIGH>, <&gpf0 6 GPIO_ACTIVE_HIGH>;
+		i2c-gpio,delay-us = <100>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		pinctrl-0 = <&i2c_mhl_bus>;
+		pinctrl-names = "default";
+		status = "okay";
+
+		sii9234: hdmi-bridge@39 {
+			compatible = "sil,sii9234";
+			avcc33-supply = <&vcc33mhl>;
+			iovcc18-supply = <&vcc18mhl>;
+			avcc12-supply = <&vsil12>;
+			cvcc12-supply = <&vsil12>;
+			reset-gpios = <&gpf3 4 GPIO_ACTIVE_LOW>;
+			interrupt-parent = <&gpf3>;
+			interrupts = <5 IRQ_TYPE_LEVEL_HIGH>;
+			reg = <0x39>;
+
+			port {
+				mhl_to_hdmi: endpoint {
+					remote-endpoint = <&hdmi_to_mhl>;
+				};
+			};
+		};
+	};
+
+	camera: camera {
+		pinctrl-0 = <&cam_port_a_clk_active &cam_port_b_clk_active>;
+		pinctrl-names = "default";
+		status = "okay";
+		assigned-clocks = <&clock CLK_MOUT_CAM0>,
+				  <&clock CLK_MOUT_CAM1>;
+		assigned-clock-parents = <&clock CLK_XUSBXTI>,
+					 <&clock CLK_XUSBXTI>;
+	};
+
+	wlan_pwrseq: sdhci3-pwrseq {
+		compatible = "mmc-pwrseq-simple";
+		reset-gpios = <&gpj0 0 GPIO_ACTIVE_LOW>;
+		clocks = <&max77686 MAX77686_CLK_PMIC>;
+		clock-names = "ext_clock";
+	};
+
+	thermistor-ap {
+		compatible = "murata,ncp15wb473";
+		pullup-uv = <1800000>;	 /* VCC_1.8V_AP */
+		pullup-ohm = <100000>;	 /* 100K */
+		pulldown-ohm = <100000>; /* 100K */
+		io-channels = <&adc 1>;  /* AP temperature */
+	};
+
+	thermistor-battery {
+		compatible = "murata,ncp15wb473";
+		pullup-uv = <1800000>;	 /* VCC_1.8V_AP */
+		pullup-ohm = <100000>;	 /* 100K */
+		pulldown-ohm = <100000>; /* 100K */
+		io-channels = <&adc 2>;  /* Battery temperature */
+	};
+
+	thermal-zones {
+		cpu_thermal: cpu-thermal {
+			cooling-maps {
+				map0 {
+					 /* Corresponds to 800MHz at freq_table */
+					 cooling-device = <&cpu0 7 7>;
+				};
+				map1 {
+					 /* Corresponds to 200MHz at freq_table */
+					 cooling-device = <&cpu0 13 13>;
+				};
+			};
+		};
+	};
+
+};
+
+&adc {
+	vdd-supply = <&ldo3_reg>;
+	status = "okay";
+};
+
+&bus_dmc {
+	devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
+	vdd-supply = <&buck1_reg>;
+	status = "okay";
+};
+
+&bus_acp {
+	devfreq = <&bus_dmc>;
+	status = "okay";
+};
+
+&bus_c2c {
+	devfreq = <&bus_dmc>;
+	status = "okay";
+};
+
+&bus_leftbus {
+	devfreq-events = <&ppmu_leftbus_3>, <&ppmu_rightbus_3>;
+	vdd-supply = <&buck3_reg>;
+	status = "okay";
+};
+
+&bus_rightbus {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_display {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_fsys {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_peri {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&bus_mfc {
+	devfreq = <&bus_leftbus>;
+	status = "okay";
+};
+
+&cpu0 {
+	cpu0-supply = <&buck2_reg>;
+};
+
+&csis_0 {
+	status = "okay";
+	vddcore-supply = <&ldo8_reg>;
+	vddio-supply = <&ldo10_reg>;
+	assigned-clocks = <&clock CLK_MOUT_CSIS0>,
+			<&clock CLK_SCLK_CSIS0>;
+	assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
+	assigned-clock-rates = <0>, <176000000>;
+
+	/* Camera C (3) MIPI CSI-2 (CSIS0) */
+	port@3 {
+		reg = <3>;
+		csis0_ep: endpoint {
+			remote-endpoint = <&s5c73m3_ep>;
+			data-lanes = <1 2 3 4>;
+			samsung,csis-hs-settle = <12>;
+		};
+	};
+};
+
+&csis_1 {
+	status = "okay";
+	vddcore-supply = <&ldo8_reg>;
+	vddio-supply = <&ldo10_reg>;
+	assigned-clocks = <&clock CLK_MOUT_CSIS1>,
+			<&clock CLK_SCLK_CSIS1>;
+	assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
+	assigned-clock-rates = <0>, <176000000>;
+
+	/* Camera D (4) MIPI CSI-2 (CSIS1) */
+	port@4 {
+		reg = <4>;
+		csis1_ep: endpoint {
+			remote-endpoint = <&is_s5k6a3_ep>;
+			data-lanes = <1>;
+			samsung,csis-hs-settle = <18>;
+			samsung,csis-wclk;
+		};
+	};
+};
+
+&exynos_usbphy {
+	vbus-supply = <&esafeout1_reg>;
+	status = "okay";
+};
+
+&fimc_0 {
+	status = "okay";
+	assigned-clocks = <&clock CLK_MOUT_FIMC0>,
+			<&clock CLK_SCLK_FIMC0>;
+	assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
+	assigned-clock-rates = <0>, <176000000>;
+};
+
+&fimc_1 {
+	status = "okay";
+	assigned-clocks = <&clock CLK_MOUT_FIMC1>,
+			<&clock CLK_SCLK_FIMC1>;
+	assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
+	assigned-clock-rates = <0>, <176000000>;
+};
+
+&fimc_2 {
+	status = "okay";
+	assigned-clocks = <&clock CLK_MOUT_FIMC2>,
+			<&clock CLK_SCLK_FIMC2>;
+	assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
+	assigned-clock-rates = <0>, <176000000>;
+};
+
+&fimc_3 {
+	status = "okay";
+	assigned-clocks = <&clock CLK_MOUT_FIMC3>,
+			<&clock CLK_SCLK_FIMC3>;
+	assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
+	assigned-clock-rates = <0>, <176000000>;
+};
+
+&fimc_is {
+	pinctrl-0 = <&fimc_is_uart>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	i2c1_isp: i2c-isp@12140000 {
+		pinctrl-0 = <&fimc_is_i2c1>;
+		pinctrl-names = "default";
+
+		s5k6a3@10 {
+			compatible = "samsung,s5k6a3";
+			reg = <0x10>;
+			svdda-supply = <&cam_io_reg>;
+			svddio-supply = <&ldo19_reg>;
+			afvdd-supply = <&ldo19_reg>;
+			clock-frequency = <24000000>;
+			/* CAM_B_CLKOUT */
+			clocks = <&camera 1>;
+			clock-names = "extclk";
+			samsung,camclk-out = <1>;
+			gpios = <&gpm1 6 GPIO_ACTIVE_HIGH>;
+
+			port {
+				is_s5k6a3_ep: endpoint {
+					remote-endpoint = <&csis1_ep>;
+					data-lanes = <1>;
+				};
+			};
+		};
+	};
+};
+
+&fimc_lite_0 {
+	status = "okay";
+};
+
+&fimc_lite_1 {
+	status = "okay";
+};
+
+&fimd {
+	status = "okay";
+};
+
+&hdmi {
+	hpd-gpios = <&gpx3 7 GPIO_ACTIVE_HIGH>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&hdmi_hpd>;
+	vdd-supply = <&ldo3_reg>;
+	vdd_osc-supply = <&ldo4_reg>;
+	vdd_pll-supply = <&ldo3_reg>;
+	ddc = <&i2c_5>;
+	status = "okay";
+
+	ports {
+		#address-cells = <1>;
+		#size-cells = <0>;
+
+		port@1 {
+			reg = <1>;
+			hdmi_to_mhl: endpoint {
+				remote-endpoint = <&mhl_to_hdmi>;
+			};
+		};
+	};
+};
+
+&hsotg {
+	vusb_d-supply = <&ldo15_reg>;
+	vusb_a-supply = <&ldo12_reg>;
+	dr_mode = "peripheral";
+	status = "okay";
+};
+
+&i2c_0 {
+	samsung,i2c-sda-delay = <100>;
+	samsung,i2c-slave-addr = <0x10>;
+	samsung,i2c-max-bus-freq = <400000>;
+	pinctrl-0 = <&i2c0_bus>;
+	pinctrl-names = "default";
+
+	status = "disabled";
+
+	s5c73m3@3c {
+		compatible = "samsung,s5c73m3";
+		reg = <0x3c>;
+		standby-gpios = <&gpm0 1 GPIO_ACTIVE_LOW>;   /* ISP_STANDBY */
+		xshutdown-gpios = <&gpf1 3 GPIO_ACTIVE_LOW>; /* ISP_RESET */
+		vdd-int-supply = <&buck9_reg>;
+		vddio-cis-supply = <&ldo9_reg>;
+		vdda-supply = <&ldo17_reg>;
+		vddio-host-supply = <&ldo18_reg>;
+		vdd-af-supply = <&cam_af_reg>;
+		vdd-reg-supply = <&cam_io_reg>;
+		clock-frequency = <24000000>;
+		/* CAM_A_CLKOUT */
+		clocks = <&camera 0>;
+		clock-names = "cis_extclk";
+		port {
+			s5c73m3_ep: endpoint {
+				remote-endpoint = <&csis0_ep>;
+				data-lanes = <1 2 3 4>;
+			};
+		};
+	};
+};
+
+&i2c_4 {
+	samsung,i2c-sda-delay = <100>;
+	samsung,i2c-slave-addr = <0x10>;
+	samsung,i2c-max-bus-freq = <100000>;
+	pinctrl-0 = <&i2c4_bus>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	wm1811: wm1811@1a {
+		compatible = "wlf,wm1811";
+		reg = <0x1a>;
+		clocks = <&pmu_system_controller 0>;
+		clock-names = "MCLK1";
+		DCVDD-supply = <&ldo3_reg>;
+		DBVDD1-supply = <&ldo3_reg>;
+		wlf,ldo1ena = <&gpj0 4 0>;
+	};
+};
+
+&i2c_5 {
+	status = "okay";
+};
+
+&i2c_7 {
+	samsung,i2c-sda-delay = <100>;
+	samsung,i2c-slave-addr = <0x10>;
+	samsung,i2c-max-bus-freq = <100000>;
+	pinctrl-0 = <&i2c7_bus>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	max77686: max77686_pmic@9 {
+		compatible = "maxim,max77686";
+		interrupt-parent = <&gpx0>;
+		interrupts = <7 IRQ_EDGE_TYPE_NONE>;
+		reg = <0x09>;
+		#clock-cells = <1>;
+
+		voltage-regulators {
+			ldo1_reg: LDO1 {
+				regulator-name = "VALIVE_1.0V_AP";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-always-on;
+			};
+
+			ldo2_reg: LDO2 {
+				regulator-name = "VM1M2_1.2V_AP";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <1200000>;
+				regulator-always-on;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo3_reg: LDO3 {
+				regulator-name = "VCC_1.8V_AP";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-always-on;
+			};
+
+			ldo4_reg: LDO4 {
+				regulator-name = "VCC_2.8V_AP";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+				regulator-always-on;
+			};
+
+			ldo5_reg: LDO5 {
+				regulator-name = "VTOUCH_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-always-on;
+			};
+
+			ldo6_reg: LDO6 {
+				regulator-name = "VMPLL_1.0V_AP";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-always-on;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo7_reg: LDO7 {
+				regulator-name = "VPLL_1.0V_AP";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-always-on;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo8_reg: LDO8 {
+				regulator-name = "VMIPI_1.0V";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo9_reg: LDO9 {
+				regulator-name = "CAM_ISP_MIPI_1.2V";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <1200000>;
+			};
+
+			ldo10_reg: LDO10 {
+				regulator-name = "VMIPI_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo11_reg: LDO11 {
+				regulator-name = "VABB1_1.95V";
+				regulator-min-microvolt = <1950000>;
+				regulator-max-microvolt = <1950000>;
+				regulator-always-on;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo12_reg: LDO12 {
+				regulator-name = "VUOTG_3.0V";
+				regulator-min-microvolt = <3000000>;
+				regulator-max-microvolt = <3000000>;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo13_reg: LDO13 {
+				status = "disabled";
+			};
+
+			ldo14_reg: LDO14 {
+				regulator-name = "VABB2_1.95V";
+				regulator-min-microvolt = <1950000>;
+				regulator-max-microvolt = <1950000>;
+				regulator-always-on;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			ldo15_reg: LDO15 {
+				regulator-name = "VHSIC_1.0V";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1000000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo16_reg: LDO16 {
+				regulator-name = "VHSIC_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			ldo17_reg: LDO17 {
+				status = "disabled";
+			};
+
+			ldo18_reg: LDO18 {
+				regulator-name = "CAM_ISP_SENSOR_IO_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+			};
+
+			ldo19_reg: LDO19 {
+				regulator-name = "VT_CAM_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+			};
+
+			ldo20_reg: LDO20 {
+				regulator-name = "VDDQ_PRE_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+			};
+
+			ldo21_reg: LDO21 {
+				regulator-name = "VTF_2.8V";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+				maxim,ena-gpios = <&gpy2 0 GPIO_ACTIVE_HIGH>;
+			};
+
+			ldo22_reg: LDO22 {
+				regulator-name = "VMEM_VDD_2.8V";
+				regulator-min-microvolt = <2800000>;
+				regulator-max-microvolt = <2800000>;
+				maxim,ena-gpios = <&gpk0 2 GPIO_ACTIVE_HIGH>;
+			};
+
+			ldo23_reg: LDO23 {
+				regulator-name = "TSP_AVDD_3.3V";
+				regulator-min-microvolt = <3300000>;
+				regulator-max-microvolt = <3300000>;
+			};
+
+			ldo24_reg: LDO24 {
+				regulator-name = "TSP_VDD_1.8V";
+				regulator-min-microvolt = <1800000>;
+				regulator-max-microvolt = <1800000>;
+			};
+
+			ldo25_reg: LDO25 {
+				status = "disabled";
+			};
+
+			ldo26_reg: LDO26 {
+				regulator-name = "MOTOR_VCC_3.0V";
+				regulator-min-microvolt = <3000000>;
+				regulator-max-microvolt = <3000000>;
+			};
+
+			buck1_reg: BUCK1 {
+				regulator-name = "vdd_mif";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1100000>;
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			buck2_reg: BUCK2 {
+				regulator-name = "vdd_arm";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1500000>;
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-state-mem {
+					regulator-on-in-suspend;
+				};
+			};
+
+			buck3_reg: BUCK3 {
+				regulator-name = "vdd_int";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1150000>;
+				regulator-always-on;
+				regulator-boot-on;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			buck4_reg: BUCK4 {
+				regulator-name = "vdd_g3d";
+				regulator-min-microvolt = <850000>;
+				regulator-max-microvolt = <1150000>;
+				regulator-boot-on;
+				regulator-state-mem {
+					regulator-off-in-suspend;
+				};
+			};
+
+			buck5_reg: BUCK5 {
+				regulator-name = "VMEM_1.2V_AP";
+				regulator-min-microvolt = <1200000>;
+				regulator-max-microvolt = <1200000>;
+				regulator-always-on;
+			};
+
+			buck6_reg: BUCK6 {
+				regulator-name = "VCC_SUB_1.35V";
+				regulator-min-microvolt = <1350000>;
+				regulator-max-microvolt = <1350000>;
+				regulator-always-on;
+			};
+
+			buck7_reg: BUCK7 {
+				regulator-name = "VCC_SUB_2.0V";
+				regulator-min-microvolt = <2000000>;
+				regulator-max-microvolt = <2000000>;
+				regulator-always-on;
+			};
+
+			buck8_reg: BUCK8 {
+				regulator-name = "VMEM_VDDF_3.0V";
+				regulator-min-microvolt = <2850000>;
+				regulator-max-microvolt = <2850000>;
+				maxim,ena-gpios = <&gpk0 2 GPIO_ACTIVE_HIGH>;
+			};
+
+			buck9_reg: BUCK9 {
+				regulator-name = "CAM_ISP_CORE_1.2V";
+				regulator-min-microvolt = <1000000>;
+				regulator-max-microvolt = <1200000>;
+			};
+		};
+	};
+};
+
+&i2c_8 {
+	status = "okay";
+};
+
+&i2s0 {
+	pinctrl-0 = <&i2s0_bus>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
+&mixer {
+	status = "okay";
+};
+
+&mshc_0 {
+	broken-cd;
+	non-removable;
+	card-detect-delay = <200>;
+	vmmc-supply = <&ldo22_reg>;
+	clock-frequency = <400000000>;
+	samsung,dw-mshc-ciu-div = <0>;
+	samsung,dw-mshc-sdr-timing = <2 3>;
+	samsung,dw-mshc-ddr-timing = <1 2>;
+	pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
+	pinctrl-names = "default";
+	status = "okay";
+	bus-width = <8>;
+	cap-mmc-highspeed;
+};
+
+&pmu_system_controller {
+	assigned-clocks = <&pmu_system_controller 0>;
+	assigned-clock-parents =  <&clock CLK_XUSBXTI>;
+};
+
+&pinctrl_0 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep0>;
+
+	mhl_int: mhl-int {
+		samsung,pins = "gpf3-5";
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+	};
+
+	i2c_mhl_bus: i2c-mhl-bus {
+		samsung,pins = "gpf0-4", "gpf0-6";
+		samsung,pin-function = <EXYNOS_PIN_FUNC_2>;
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+		samsung,pin-drv = <EXYNOS4_PIN_DRV_LV1>;
+	};
+
+	sleep0: sleep-states {
+		PIN_SLP(gpa0-0, INPUT, NONE);
+		PIN_SLP(gpa0-1, OUT0, NONE);
+		PIN_SLP(gpa0-2, INPUT, NONE);
+		PIN_SLP(gpa0-3, INPUT, UP);
+		PIN_SLP(gpa0-4, INPUT, NONE);
+		PIN_SLP(gpa0-5, INPUT, DOWN);
+		PIN_SLP(gpa0-6, INPUT, DOWN);
+		PIN_SLP(gpa0-7, INPUT, UP);
+
+		PIN_SLP(gpa1-0, INPUT, DOWN);
+		PIN_SLP(gpa1-1, INPUT, DOWN);
+		PIN_SLP(gpa1-2, INPUT, DOWN);
+		PIN_SLP(gpa1-3, INPUT, DOWN);
+		PIN_SLP(gpa1-4, INPUT, DOWN);
+		PIN_SLP(gpa1-5, INPUT, DOWN);
+
+		PIN_SLP(gpb-0, INPUT, NONE);
+		PIN_SLP(gpb-1, INPUT, NONE);
+		PIN_SLP(gpb-2, INPUT, NONE);
+		PIN_SLP(gpb-3, INPUT, NONE);
+		PIN_SLP(gpb-4, INPUT, DOWN);
+		PIN_SLP(gpb-5, INPUT, UP);
+		PIN_SLP(gpb-6, INPUT, DOWN);
+		PIN_SLP(gpb-7, INPUT, DOWN);
+
+		PIN_SLP(gpc0-0, INPUT, DOWN);
+		PIN_SLP(gpc0-1, INPUT, DOWN);
+		PIN_SLP(gpc0-2, INPUT, DOWN);
+		PIN_SLP(gpc0-3, INPUT, DOWN);
+		PIN_SLP(gpc0-4, INPUT, DOWN);
+
+		PIN_SLP(gpc1-0, INPUT, NONE);
+		PIN_SLP(gpc1-1, PREV, NONE);
+		PIN_SLP(gpc1-2, INPUT, NONE);
+		PIN_SLP(gpc1-3, INPUT, NONE);
+		PIN_SLP(gpc1-4, INPUT, NONE);
+
+		PIN_SLP(gpd0-0, INPUT, DOWN);
+		PIN_SLP(gpd0-1, INPUT, DOWN);
+		PIN_SLP(gpd0-2, INPUT, NONE);
+		PIN_SLP(gpd0-3, INPUT, NONE);
+
+		PIN_SLP(gpd1-0, INPUT, DOWN);
+		PIN_SLP(gpd1-1, INPUT, DOWN);
+		PIN_SLP(gpd1-2, INPUT, NONE);
+		PIN_SLP(gpd1-3, INPUT, NONE);
+
+		PIN_SLP(gpf0-0, INPUT, NONE);
+		PIN_SLP(gpf0-1, INPUT, NONE);
+		PIN_SLP(gpf0-2, INPUT, DOWN);
+		PIN_SLP(gpf0-3, INPUT, DOWN);
+		PIN_SLP(gpf0-4, INPUT, NONE);
+		PIN_SLP(gpf0-5, INPUT, DOWN);
+		PIN_SLP(gpf0-6, INPUT, NONE);
+		PIN_SLP(gpf0-7, INPUT, DOWN);
+
+		PIN_SLP(gpf1-0, INPUT, DOWN);
+		PIN_SLP(gpf1-1, INPUT, DOWN);
+		PIN_SLP(gpf1-2, INPUT, DOWN);
+		PIN_SLP(gpf1-3, INPUT, DOWN);
+		PIN_SLP(gpf1-4, INPUT, NONE);
+		PIN_SLP(gpf1-5, INPUT, NONE);
+		PIN_SLP(gpf1-6, INPUT, DOWN);
+		PIN_SLP(gpf1-7, PREV, NONE);
+
+		PIN_SLP(gpf2-0, PREV, NONE);
+		PIN_SLP(gpf2-1, INPUT, DOWN);
+		PIN_SLP(gpf2-2, INPUT, DOWN);
+		PIN_SLP(gpf2-3, INPUT, DOWN);
+		PIN_SLP(gpf2-4, INPUT, DOWN);
+		PIN_SLP(gpf2-5, INPUT, DOWN);
+		PIN_SLP(gpf2-6, INPUT, NONE);
+		PIN_SLP(gpf2-7, INPUT, NONE);
+
+		PIN_SLP(gpf3-0, INPUT, NONE);
+		PIN_SLP(gpf3-1, PREV, NONE);
+		PIN_SLP(gpf3-2, PREV, NONE);
+		PIN_SLP(gpf3-3, PREV, NONE);
+		PIN_SLP(gpf3-4, OUT1, NONE);
+		PIN_SLP(gpf3-5, INPUT, DOWN);
+
+		PIN_SLP(gpj0-0, PREV, NONE);
+		PIN_SLP(gpj0-1, PREV, NONE);
+		PIN_SLP(gpj0-2, PREV, NONE);
+		PIN_SLP(gpj0-3, INPUT, DOWN);
+		PIN_SLP(gpj0-4, PREV, NONE);
+		PIN_SLP(gpj0-5, PREV, NONE);
+		PIN_SLP(gpj0-6, INPUT, DOWN);
+		PIN_SLP(gpj0-7, INPUT, DOWN);
+
+		PIN_SLP(gpj1-0, INPUT, DOWN);
+		PIN_SLP(gpj1-1, PREV, NONE);
+		PIN_SLP(gpj1-2, PREV, NONE);
+		PIN_SLP(gpj1-3, INPUT, DOWN);
+		PIN_SLP(gpj1-4, INPUT, DOWN);
+	};
+};
+
+&pinctrl_1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep1>;
+
+	hdmi_hpd: hdmi-hpd {
+		samsung,pins = "gpx3-7";
+		samsung,pin-pud = <EXYNOS_PIN_PULL_DOWN>;
+	};
+
+	sleep1: sleep-states {
+		PIN_SLP(gpk0-0, PREV, NONE);
+		PIN_SLP(gpk0-1, PREV, NONE);
+		PIN_SLP(gpk0-2, OUT0, NONE);
+		PIN_SLP(gpk0-3, PREV, NONE);
+		PIN_SLP(gpk0-4, PREV, NONE);
+		PIN_SLP(gpk0-5, PREV, NONE);
+		PIN_SLP(gpk0-6, PREV, NONE);
+
+		PIN_SLP(gpk1-0, INPUT, DOWN);
+		PIN_SLP(gpk1-1, INPUT, DOWN);
+		PIN_SLP(gpk1-2, INPUT, DOWN);
+		PIN_SLP(gpk1-3, PREV, NONE);
+		PIN_SLP(gpk1-4, PREV, NONE);
+		PIN_SLP(gpk1-5, PREV, NONE);
+		PIN_SLP(gpk1-6, PREV, NONE);
+
+		PIN_SLP(gpk2-0, INPUT, DOWN);
+		PIN_SLP(gpk2-1, INPUT, DOWN);
+		PIN_SLP(gpk2-2, INPUT, DOWN);
+		PIN_SLP(gpk2-3, INPUT, DOWN);
+		PIN_SLP(gpk2-4, INPUT, DOWN);
+		PIN_SLP(gpk2-5, INPUT, DOWN);
+		PIN_SLP(gpk2-6, INPUT, DOWN);
+
+		PIN_SLP(gpk3-0, OUT0, NONE);
+		PIN_SLP(gpk3-1, INPUT, NONE);
+		PIN_SLP(gpk3-2, INPUT, DOWN);
+		PIN_SLP(gpk3-3, INPUT, NONE);
+		PIN_SLP(gpk3-4, INPUT, NONE);
+		PIN_SLP(gpk3-5, INPUT, NONE);
+		PIN_SLP(gpk3-6, INPUT, NONE);
+
+		PIN_SLP(gpl0-0, INPUT, DOWN);
+		PIN_SLP(gpl0-1, INPUT, DOWN);
+		PIN_SLP(gpl0-2, INPUT, DOWN);
+		PIN_SLP(gpl0-3, INPUT, DOWN);
+		PIN_SLP(gpl0-4, PREV, NONE);
+		PIN_SLP(gpl0-6, PREV, NONE);
+
+		PIN_SLP(gpl1-0, INPUT, DOWN);
+		PIN_SLP(gpl1-1, INPUT, DOWN);
+		PIN_SLP(gpl2-0, INPUT, DOWN);
+		PIN_SLP(gpl2-1, INPUT, DOWN);
+		PIN_SLP(gpl2-2, INPUT, DOWN);
+		PIN_SLP(gpl2-3, INPUT, DOWN);
+		PIN_SLP(gpl2-4, INPUT, DOWN);
+		PIN_SLP(gpl2-5, INPUT, DOWN);
+		PIN_SLP(gpl2-6, PREV, NONE);
+		PIN_SLP(gpl2-7, INPUT, DOWN);
+
+		PIN_SLP(gpm0-0, INPUT, DOWN);
+		PIN_SLP(gpm0-1, INPUT, DOWN);
+		PIN_SLP(gpm0-2, INPUT, DOWN);
+		PIN_SLP(gpm0-3, INPUT, DOWN);
+		PIN_SLP(gpm0-4, INPUT, DOWN);
+		PIN_SLP(gpm0-5, INPUT, DOWN);
+		PIN_SLP(gpm0-6, INPUT, DOWN);
+		PIN_SLP(gpm0-7, INPUT, DOWN);
+
+		PIN_SLP(gpm1-0, INPUT, DOWN);
+		PIN_SLP(gpm1-1, INPUT, DOWN);
+		PIN_SLP(gpm1-2, INPUT, NONE);
+		PIN_SLP(gpm1-3, INPUT, NONE);
+		PIN_SLP(gpm1-4, INPUT, NONE);
+		PIN_SLP(gpm1-5, INPUT, NONE);
+		PIN_SLP(gpm1-6, INPUT, DOWN);
+
+		PIN_SLP(gpm2-0, INPUT, NONE);
+		PIN_SLP(gpm2-1, INPUT, NONE);
+		PIN_SLP(gpm2-2, INPUT, DOWN);
+		PIN_SLP(gpm2-3, INPUT, DOWN);
+		PIN_SLP(gpm2-4, INPUT, DOWN);
+
+		PIN_SLP(gpm3-0, PREV, NONE);
+		PIN_SLP(gpm3-1, PREV, NONE);
+		PIN_SLP(gpm3-2, PREV, NONE);
+		PIN_SLP(gpm3-3, OUT1, NONE);
+		PIN_SLP(gpm3-4, INPUT, DOWN);
+		PIN_SLP(gpm3-5, INPUT, DOWN);
+		PIN_SLP(gpm3-6, INPUT, DOWN);
+		PIN_SLP(gpm3-7, INPUT, DOWN);
+
+		PIN_SLP(gpm4-0, INPUT, DOWN);
+		PIN_SLP(gpm4-1, INPUT, DOWN);
+		PIN_SLP(gpm4-2, INPUT, DOWN);
+		PIN_SLP(gpm4-3, INPUT, DOWN);
+		PIN_SLP(gpm4-4, INPUT, DOWN);
+		PIN_SLP(gpm4-5, INPUT, DOWN);
+		PIN_SLP(gpm4-6, INPUT, DOWN);
+		PIN_SLP(gpm4-7, INPUT, DOWN);
+
+		PIN_SLP(gpy0-0, INPUT, DOWN);
+		PIN_SLP(gpy0-1, INPUT, DOWN);
+		PIN_SLP(gpy0-2, INPUT, DOWN);
+		PIN_SLP(gpy0-3, INPUT, DOWN);
+		PIN_SLP(gpy0-4, INPUT, DOWN);
+		PIN_SLP(gpy0-5, INPUT, DOWN);
+
+		PIN_SLP(gpy1-0, INPUT, DOWN);
+		PIN_SLP(gpy1-1, INPUT, DOWN);
+		PIN_SLP(gpy1-2, INPUT, DOWN);
+		PIN_SLP(gpy1-3, INPUT, DOWN);
+
+		PIN_SLP(gpy2-0, PREV, NONE);
+		PIN_SLP(gpy2-1, INPUT, DOWN);
+		PIN_SLP(gpy2-2, INPUT, NONE);
+		PIN_SLP(gpy2-3, INPUT, NONE);
+		PIN_SLP(gpy2-4, INPUT, NONE);
+		PIN_SLP(gpy2-5, INPUT, NONE);
+
+		PIN_SLP(gpy3-0, INPUT, DOWN);
+		PIN_SLP(gpy3-1, INPUT, DOWN);
+		PIN_SLP(gpy3-2, INPUT, DOWN);
+		PIN_SLP(gpy3-3, INPUT, DOWN);
+		PIN_SLP(gpy3-4, INPUT, DOWN);
+		PIN_SLP(gpy3-5, INPUT, DOWN);
+		PIN_SLP(gpy3-6, INPUT, DOWN);
+		PIN_SLP(gpy3-7, INPUT, DOWN);
+
+		PIN_SLP(gpy4-0, INPUT, DOWN);
+		PIN_SLP(gpy4-1, INPUT, DOWN);
+		PIN_SLP(gpy4-2, INPUT, DOWN);
+		PIN_SLP(gpy4-3, INPUT, DOWN);
+		PIN_SLP(gpy4-4, INPUT, DOWN);
+		PIN_SLP(gpy4-5, INPUT, DOWN);
+		PIN_SLP(gpy4-6, INPUT, DOWN);
+		PIN_SLP(gpy4-7, INPUT, DOWN);
+
+		PIN_SLP(gpy5-0, INPUT, DOWN);
+		PIN_SLP(gpy5-1, INPUT, DOWN);
+		PIN_SLP(gpy5-2, INPUT, DOWN);
+		PIN_SLP(gpy5-3, INPUT, DOWN);
+		PIN_SLP(gpy5-4, INPUT, DOWN);
+		PIN_SLP(gpy5-5, INPUT, DOWN);
+		PIN_SLP(gpy5-6, INPUT, DOWN);
+		PIN_SLP(gpy5-7, INPUT, DOWN);
+
+		PIN_SLP(gpy6-0, INPUT, DOWN);
+		PIN_SLP(gpy6-1, INPUT, DOWN);
+		PIN_SLP(gpy6-2, INPUT, DOWN);
+		PIN_SLP(gpy6-3, INPUT, DOWN);
+		PIN_SLP(gpy6-4, INPUT, DOWN);
+		PIN_SLP(gpy6-5, INPUT, DOWN);
+		PIN_SLP(gpy6-6, INPUT, DOWN);
+		PIN_SLP(gpy6-7, INPUT, DOWN);
+	};
+};
+
+&pinctrl_2 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep2>;
+
+	sleep2: sleep-states {
+		PIN_SLP(gpz-0, INPUT, DOWN);
+		PIN_SLP(gpz-1, INPUT, DOWN);
+		PIN_SLP(gpz-2, INPUT, DOWN);
+		PIN_SLP(gpz-3, INPUT, DOWN);
+		PIN_SLP(gpz-4, INPUT, DOWN);
+		PIN_SLP(gpz-5, INPUT, DOWN);
+		PIN_SLP(gpz-6, INPUT, DOWN);
+	};
+};
+
+&pinctrl_3 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&sleep3>;
+
+	sleep3: sleep-states {
+		PIN_SLP(gpv0-0, INPUT, DOWN);
+		PIN_SLP(gpv0-1, INPUT, DOWN);
+		PIN_SLP(gpv0-2, INPUT, DOWN);
+		PIN_SLP(gpv0-3, INPUT, DOWN);
+		PIN_SLP(gpv0-4, INPUT, DOWN);
+		PIN_SLP(gpv0-5, INPUT, DOWN);
+		PIN_SLP(gpv0-6, INPUT, DOWN);
+		PIN_SLP(gpv0-7, INPUT, DOWN);
+
+		PIN_SLP(gpv1-0, INPUT, DOWN);
+		PIN_SLP(gpv1-1, INPUT, DOWN);
+		PIN_SLP(gpv1-2, INPUT, DOWN);
+		PIN_SLP(gpv1-3, INPUT, DOWN);
+		PIN_SLP(gpv1-4, INPUT, DOWN);
+		PIN_SLP(gpv1-5, INPUT, DOWN);
+		PIN_SLP(gpv1-6, INPUT, DOWN);
+		PIN_SLP(gpv1-7, INPUT, DOWN);
+
+		PIN_SLP(gpv2-0, INPUT, DOWN);
+		PIN_SLP(gpv2-1, INPUT, DOWN);
+		PIN_SLP(gpv2-2, INPUT, DOWN);
+		PIN_SLP(gpv2-3, INPUT, DOWN);
+		PIN_SLP(gpv2-4, INPUT, DOWN);
+		PIN_SLP(gpv2-5, INPUT, DOWN);
+		PIN_SLP(gpv2-6, INPUT, DOWN);
+		PIN_SLP(gpv2-7, INPUT, DOWN);
+
+		PIN_SLP(gpv3-0, INPUT, DOWN);
+		PIN_SLP(gpv3-1, INPUT, DOWN);
+		PIN_SLP(gpv3-2, INPUT, DOWN);
+		PIN_SLP(gpv3-3, INPUT, DOWN);
+		PIN_SLP(gpv3-4, INPUT, DOWN);
+		PIN_SLP(gpv3-5, INPUT, DOWN);
+		PIN_SLP(gpv3-6, INPUT, DOWN);
+		PIN_SLP(gpv3-7, INPUT, DOWN);
+
+		PIN_SLP(gpv4-0, INPUT, DOWN);
+	};
+};
+
+&pwm {
+	pinctrl-0 = <&pwm0_out>;
+	pinctrl-names = "default";
+	samsung,pwm-outputs = <0>;
+	status = "okay";
+};
+
+&rtc {
+	status = "okay";
+	clocks = <&clock CLK_RTC>, <&max77686 MAX77686_CLK_AP>;
+	clock-names = "rtc", "rtc_src";
+};
+
+&sdhci_2 {
+	bus-width = <4>;
+	cd-gpios = <&gpx3 4 GPIO_ACTIVE_HIGH>;
+	cd-inverted;
+	pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4>;
+	pinctrl-names = "default";
+	vmmc-supply = <&ldo21_reg>;
+	status = "okay";
+};
+
+&sdhci_3 {
+	#address-cells = <1>;
+	#size-cells = <0>;
+	pinctrl-names = "default";
+	pinctrl-0 = <&sd3_clk &sd3_cmd &sd3_bus4>;
+
+	broken-cd;
+
+	mmc-pwrseq = <&wlan_pwrseq>;
+
+	bus-width = <4>;
+	status = "okay";
+
+	brcmf: wifi@1 {
+		reg = <1>;
+		compatible = "brcm,bcm4329-fmac";
+		interrupt-parent = <&gpx2>;
+		interrupts = <5 IRQ_TYPE_NONE>;
+		interrupt-names = "host-wake";
+	};
+};
+
+&serial_0 {
+	status = "okay";
+};
+
+&serial_1 {
+	status = "okay";
+};
+
+&serial_2 {
+	status = "okay";
+};
+
+&serial_3 {
+	status = "okay";
+};
+
+&sleep0 {
+	gpf1-0 {
+		samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
+		samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
+	};
+};
+
+&spi_1 {
+	pinctrl-names = "default";
+	pinctrl-0 = <&spi1_bus>;
+	cs-gpios = <&gpb 5 GPIO_ACTIVE_HIGH>;
+	status = "okay";
+
+	s5c73m3_spi: s5c73m3@0 {
+		compatible = "samsung,s5c73m3";
+		spi-max-frequency = <50000000>;
+		reg = <0>;
+		controller-data {
+			samsung,spi-feedback-delay = <2>;
+		};
+	};
+};
+
+&tmu {
+	vtmu-supply = <&ldo10_reg>;
+	status = "okay";
+};
+
+&pmu_system_controller {
+	compatible = "samsung,exynos4210-pmu", "syscon", "simple-mfd";
+
+	reboot-mode {
+		compatible = "syscon-reboot-mode";
+		offset = <0x80c>;
+
+		mode-normal	 = <0x12345670>;
+		mode-bootloader	= <0x12345671>;
+		mode-download = <0x12345671>;
+		mode-recovery = <0x12345674>;
+	};
+};
diff --git a/arch/arm/boot/dts/exynos4412-t0.dts b/arch/arm/boot/dts/exynos4412-t0.dts
new file mode 100644
index 000000000000..c49abe857b6f
--- /dev/null
+++ b/arch/arm/boot/dts/exynos4412-t0.dts
@@ -0,0 +1,51 @@ 
+// SPDX-License-Identifier: GPL-2.0
+/dts-v1/;
+#include "exynos4412-midas.dtsi"
+
+/ {
+	compatible = "samsung,t0", "samsung,midas", "samsung,exynos4412", "samsung,exynos4";
+	model = "Samsung T0 (GT-N7100, GT-N7105) based on Exynos4412";
+
+	memory@40000000 {
+		device_type = "memory";
+		reg =  <0x40000000 0x80000000>;
+	};
+
+};
+
+&buck9_reg {
+	maxim,ena-gpios = <&gpm1 0 GPIO_ACTIVE_HIGH>;
+};
+
+&cam_io_reg {
+	gpio = <&gpm0 7 GPIO_ACTIVE_HIGH>;
+	status = "okay";
+};
+
+&cam_af_reg {
+	gpio = <&gpm1 1 GPIO_ACTIVE_HIGH>;
+	status = "okay";
+};
+
+&ldo13_reg {
+	regulator-name = "VCC_1.8V_LCD";
+	regulator-min-microvolt = <18000000>;
+	regulator-max-microvolt = <18000000>;
+	regulator-always-on;
+	status = "okay";
+};
+
+&ldo23_reg {
+	regulator-always-on;
+};
+
+&ldo24_reg {
+	regulator-always-on;
+};
+
+&ldo25_reg {
+	regulator-name = "VCI_3.0V_LCD";
+	regulator-min-microvolt = <3000000>;
+	regulator-max-microvolt = <3000000>;
+	status = "okay";
+};