Commit e8f2ca97 authored by Arnd Bergmann's avatar Arnd Bergmann

Merge tag 'soc-exynos5420-1' of...

Merge tag 'soc-exynos5420-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung into next/late

From Kukjin Kim:

based on tags/common-clk-audio
- add support for exynos5420 SoC

* tag 'soc-exynos5420-1' of git://git.kernel.org/pub/scm/linux/kernel/git/kgene/linux-samsung:

  ARM: EXYNOS: extend soft-reset support for EXYNOS5420
  ARM: EXYNOS: add secondary CPU boot base location for EXYNOS5420
  clocksource: exynos_mct: use (request/free)_irq calls for local timer registration
  ARM: dts: Add initial device tree support for EXYNOS5420
  clk: exynos5420: register clocks using common clock framework
  ARM: EXYNOS: use four additional chipid bits to identify EXYNOS family
  serial: samsung: select EXYNOS specific driver data if ARCH_EXYNOS is defined
  ARM: EXYNOS: Add support for EXYNOS5420 SoC
  ARM: dts: list the CPU nodes for EXYNOS5250
  ARM: dts: fork out common EXYNOS5 nodes
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 704b1005 eff4e7c7
* Samsung Audio Subsystem Clock Controller
The Samsung Audio Subsystem clock controller generates and supplies clocks
to Audio Subsystem block available in the S5PV210 and Exynos SoCs. The clock
binding described here is applicable to all SoC's in Exynos family.
Required Properties:
- compatible: should be one of the following:
- "samsung,exynos4210-audss-clock" - controller compatible with all Exynos4 SoCs.
- "samsung,exynos5250-audss-clock" - controller compatible with all Exynos5 SoCs.
- reg: physical base address and length of the controller's register set.
- #clock-cells: should be 1.
The following is the list of clocks generated by the controller. Each clock is
assigned an identifier and client nodes use this identifier to specify the
clock which they consume. Some of the clocks are available only on a particular
Exynos4 SoC and this is specified where applicable.
Provided clocks:
Clock ID SoC (if specific)
-----------------------------------------------
mout_audss 0
mout_i2s 1
dout_srp 2
dout_aud_bus 3
dout_i2s 4
srp_clk 5
i2s_bus 6
sclk_i2s 7
pcm_bus 8
sclk_pcm 9
Example 1: An example of a clock controller node is listed below.
clock_audss: audss-clock-controller@3810000 {
compatible = "samsung,exynos5250-audss-clock";
reg = <0x03810000 0x0C>;
#clock-cells = <1>;
};
Example 2: I2S controller node that consumes the clock generated by the clock
controller. Refer to the standard clock bindings for information
about 'clocks' and 'clock-names' property.
i2s0: i2s@03830000 {
compatible = "samsung,i2s-v5";
reg = <0x03830000 0x100>;
dmas = <&pdma0 10
&pdma0 9
&pdma0 8>;
dma-names = "tx", "rx", "tx-sec";
clocks = <&clock_audss EXYNOS_I2S_BUS>,
<&clock_audss EXYNOS_I2S_BUS>,
<&clock_audss EXYNOS_SCLK_I2S>,
<&clock_audss EXYNOS_MOUT_AUDSS>,
<&clock_audss EXYNOS_MOUT_I2S>;
clock-names = "iis", "i2s_opclk0", "i2s_opclk1",
"mout_audss", "mout_i2s";
};
...@@ -102,6 +102,7 @@ Exynos4 SoC and this is specified where applicable. ...@@ -102,6 +102,7 @@ Exynos4 SoC and this is specified where applicable.
sclk_spi0_isp 174 Exynos4x12 sclk_spi0_isp 174 Exynos4x12
sclk_spi1_isp 175 Exynos4x12 sclk_spi1_isp 175 Exynos4x12
sclk_uart_isp 176 Exynos4x12 sclk_uart_isp 176 Exynos4x12
sclk_fimg2d 177
[Peripheral Clock Gates] [Peripheral Clock Gates]
...@@ -129,7 +130,7 @@ Exynos4 SoC and this is specified where applicable. ...@@ -129,7 +130,7 @@ Exynos4 SoC and this is specified where applicable.
smmu_mfcl 274 smmu_mfcl 274
smmu_mfcr 275 smmu_mfcr 275
g3d 276 g3d 276
g2d 277 Exynos4210 g2d 277
rotator 278 Exynos4210 rotator 278 Exynos4210
mdma 279 Exynos4210 mdma 279 Exynos4210
smmu_g2d 280 Exynos4210 smmu_g2d 280 Exynos4210
......
* Samsung Exynos5420 Clock Controller
The Exynos5420 clock controller generates and supplies clock to various
controllers within the Exynos5420 SoC.
Required Properties:
- comptible: should be one of the following.
- "samsung,exynos5420-clock" - controller compatible with Exynos5420 SoC.
- reg: physical base address of the controller and length of memory mapped
region.
- #clock-cells: should be 1.
The following is the list of clocks generated by the controller. Each clock is
assigned an identifier and client nodes use this identifier to specify the
clock which they consume.
[Core Clocks]
Clock ID
----------------------------
fin_pll 1
[Clock Gate for Special Clocks]
Clock ID
----------------------------
sclk_uart0 128
sclk_uart1 129
sclk_uart2 130
sclk_uart3 131
sclk_mmc0 132
sclk_mmc1 133
sclk_mmc2 134
sclk_spi0 135
sclk_spi1 136
sclk_spi2 137
sclk_i2s1 138
sclk_i2s2 139
sclk_pcm1 140
sclk_pcm2 141
sclk_spdif 142
sclk_hdmi 143
sclk_pixel 144
sclk_dp1 145
sclk_mipi1 146
sclk_fimd1 147
sclk_maudio0 148
sclk_maupcm0 149
sclk_usbd300 150
sclk_usbd301 151
sclk_usbphy300 152
sclk_usbphy301 153
sclk_unipro 154
sclk_pwm 155
sclk_gscl_wa 156
sclk_gscl_wb 157
[Peripheral Clock Gates]
Clock ID
----------------------------
aclk66_peric 256
uart0 257
uart1 258
uart2 259
uart3 260
i2c0 261
i2c1 262
i2c2 263
i2c3 264
i2c4 265
i2c5 266
i2c6 267
i2c7 268
i2c_hdmi 269
tsadc 270
spi0 271
spi1 272
spi2 273
keyif 274
i2s1 275
i2s2 276
pcm1 277
pcm2 278
pwm 279
spdif 280
i2c8 281
i2c9 282
i2c10 283
aclk66_psgen 300
chipid 301
sysreg 302
tzpc0 303
tzpc1 304
tzpc2 305
tzpc3 306
tzpc4 307
tzpc5 308
tzpc6 309
tzpc7 310
tzpc8 311
tzpc9 312
hdmi_cec 313
seckey 314
mct 315
wdt 316
rtc 317
tmu 318
tmu_gpu 319
pclk66_gpio 330
aclk200_fsys2 350
mmc0 351
mmc1 352
mmc2 353
sromc 354
ufs 355
aclk200_fsys 360
tsi 361
pdma0 362
pdma1 363
rtic 364
usbh20 365
usbd300 366
usbd301 377
aclk400_mscl 380
mscl0 381
mscl1 382
mscl2 383
smmu_mscl0 384
smmu_mscl1 385
smmu_mscl2 386
aclk333 400
mfc 401
smmu_mfcl 402
smmu_mfcr 403
aclk200_disp1 410
dsim1 411
dp1 412
hdmi 413
aclk300_disp1 420
fimd1 421
smmu_fimd1 422
aclk166 430
mixer 431
aclk266 440
rotator 441
mdma1 442
smmu_rotator 443
smmu_mdma1 444
aclk300_jpeg 450
jpeg 451
jpeg2 452
smmu_jpeg 453
aclk300_gscl 460
smmu_gscl0 461
smmu_gscl1 462
gscl_wa 463
gscl_wb 464
gscl0 465
gscl1 466
clk_3aa 467
aclk266_g2d 470
sss 471
slim_sss 472
mdma0 473
aclk333_g2d 480
g2d 481
aclk333_432_gscl 490
smmu_3aa 491
smmu_fimcl0 492
smmu_fimcl1 493
smmu_fimcl3 494
fimc_lite3 495
aclk_g3d 500
g3d 501
Example 1: An example of a clock controller node is listed below.
clock: clock-controller@0x10010000 {
compatible = "samsung,exynos5420-clock";
reg = <0x10010000 0x30000>;
#clock-cells = <1>;
};
Example 2: UART controller node that consumes the clock generated by the clock
controller. Refer to the standard clock bindings for information
about 'clocks' and 'clock-names' property.
serial@13820000 {
compatible = "samsung,exynos4210-uart";
reg = <0x13820000 0x100>;
interrupts = <0 54 0>;
clocks = <&clock 259>, <&clock 130>;
clock-names = "uart", "clk_uart_baud0";
};
...@@ -10,11 +10,16 @@ Required properties: ...@@ -10,11 +10,16 @@ Required properties:
mapped region. mapped region.
- interrupts : G2D interrupt number to the CPU. - interrupts : G2D interrupt number to the CPU.
- clocks : from common clock binding: handle to G2D clocks.
- clock-names : from common clock binding: must contain "sclk_fimg2d" and
"fimg2d", corresponding to entries in the clocks property.
Example: Example:
g2d@12800000 { g2d@12800000 {
compatible = "samsung,s5pv210-g2d"; compatible = "samsung,s5pv210-g2d";
reg = <0x12800000 0x1000>; reg = <0x12800000 0x1000>;
interrupts = <0 89 0>; interrupts = <0 89 0>;
clocks = <&clock 177>, <&clock 277>;
clock-names = "sclk_fimg2d", "fimg2d";
status = "disabled"; status = "disabled";
}; };
...@@ -15,6 +15,9 @@ Required properties: ...@@ -15,6 +15,9 @@ Required properties:
mapped region. mapped region.
- interrupts : MFC interrupt number to the CPU. - interrupts : MFC interrupt number to the CPU.
- clocks : from common clock binding: handle to mfc clocks.
- clock-names : from common clock binding: must contain "sclk_mfc" and "mfc",
corresponding to entries in the clocks property.
- samsung,mfc-r : Base address of the first memory bank used by MFC - samsung,mfc-r : Base address of the first memory bank used by MFC
for DMA contiguous memory allocation and its size. for DMA contiguous memory allocation and its size.
...@@ -34,6 +37,8 @@ mfc: codec@13400000 { ...@@ -34,6 +37,8 @@ mfc: codec@13400000 {
reg = <0x13400000 0x10000>; reg = <0x13400000 0x10000>;
interrupts = <0 94 0>; interrupts = <0 94 0>;
samsung,power-domain = <&pd_mfc>; samsung,power-domain = <&pd_mfc>;
clocks = <&clock 170>, <&clock 273>;
clock-names = "sclk_mfc", "mfc";
}; };
Board specific DT entry: Board specific DT entry:
......
...@@ -21,8 +21,18 @@ Required Properties: ...@@ -21,8 +21,18 @@ Required Properties:
- gpio-controller: identifies the node as a gpio controller and pin bank. - gpio-controller: identifies the node as a gpio controller and pin bank.
- #gpio-cells: number of cells in GPIO specifier. Since the generic GPIO - #gpio-cells: number of cells in GPIO specifier. Since the generic GPIO
binding is used, the amount of cells must be specified as 2. See generic binding is used, the amount of cells must be specified as 2. See the below
GPIO binding documentation for description of particular cells. mentioned gpio binding representation for description of particular cells.
Eg: <&gpx2 6 0>
<[phandle of the gpio controller node]
[pin number within the gpio controller]
[flags]>
Values for gpio specifier:
- Pin number: is a value between 0 to 7.
- Flags: 0 - Active High
1 - Active Low
- Pin mux/config groups as child nodes: The pin mux (selecting pin function - Pin mux/config groups as child nodes: The pin mux (selecting pin function
mode) and pin config (pull up/down, driver strength) settings are represented mode) and pin config (pull up/down, driver strength) settings are represented
...@@ -266,3 +276,33 @@ Example 4: Set up the default pin state for uart controller. ...@@ -266,3 +276,33 @@ Example 4: Set up the default pin state for uart controller.
pinctrl = devm_pinctrl_get_select_default(&pdev->dev); pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
} }
Example 5: A display port client node that supports 'default' pinctrl state
and gpio binding.
display-port-controller {
/* ... */
samsung,hpd-gpio = <&gpx2 6 0>;
pinctrl-names = "default";
pinctrl-0 = <&dp_hpd>;
};
Example 6: Request the gpio for display port controller
static int exynos_dp_probe(struct platform_device *pdev)
{
int hpd_gpio, ret;
struct device *dev = &pdev->dev;
struct device_node *dp_node = dev->of_node;
/* ... */
hpd_gpio = of_get_named_gpio(dp_node, "samsung,hpd-gpio", 0);
/* ... */
ret = devm_gpio_request_one(&pdev->dev, hpd_gpio, GPIOF_IN,
"hpd_gpio");
/* ... */
}
...@@ -8,6 +8,16 @@ Required SoC Specific Properties: ...@@ -8,6 +8,16 @@ Required SoC Specific Properties:
- dmas: list of DMA controller phandle and DMA request line ordered pairs. - dmas: list of DMA controller phandle and DMA request line ordered pairs.
- dma-names: identifier string for each DMA request line in the dmas property. - dma-names: identifier string for each DMA request line in the dmas property.
These strings correspond 1:1 with the ordered pairs in dmas. These strings correspond 1:1 with the ordered pairs in dmas.
- clocks: Handle to iis clock and RCLK source clk.
- clock-names:
i2s0 uses some base clks from CMU and some are from audio subsystem internal
clock controller. The clock names for i2s0 should be "iis", "i2s_opclk0" and
"i2s_opclk1" as shown in the example below.
i2s1 and i2s2 uses clocks from CMU. The clock names for i2s1 and i2s2 should
be "iis" and "i2s_opclk0".
"iis" is the i2s bus clock and i2s_opclk0, i2s_opclk1 are sources of the root
clk. i2s0 has internal mux to select the source of root clk and i2s1 and i2s2
doesn't have any such mux.
Optional SoC Specific Properties: Optional SoC Specific Properties:
...@@ -20,44 +30,26 @@ Optional SoC Specific Properties: ...@@ -20,44 +30,26 @@ Optional SoC Specific Properties:
then this flag is enabled. then this flag is enabled.
- samsung,idma-addr: Internal DMA register base address of the audio - samsung,idma-addr: Internal DMA register base address of the audio
sub system(used in secondary sound source). sub system(used in secondary sound source).
- pinctrl-0: Should specify pin control groups used for this controller.
Required Board Specific Properties: - pinctrl-names: Should contain only one value - "default".
- gpios: The gpio specifier for data out,data in, LRCLK, CDCLK and SCLK
interface lines. The format of the gpio specifier depends on the gpio
controller.
The syntax of samsung gpio specifier is
<[phandle of the gpio controller node]
[pin number within the gpio controller]
[mux function]
[flags and pull up/down]
[drive strength]>
Example: Example:
- SoC Specific Portion: i2s0: i2s@03830000 {
i2s@03830000 {
compatible = "samsung,i2s-v5"; compatible = "samsung,i2s-v5";
reg = <0x03830000 0x100>; reg = <0x03830000 0x100>;
dmas = <&pdma0 10 dmas = <&pdma0 10
&pdma0 9 &pdma0 9
&pdma0 8>; &pdma0 8>;
dma-names = "tx", "rx", "tx-sec"; dma-names = "tx", "rx", "tx-sec";
clocks = <&clock_audss EXYNOS_I2S_BUS>,
<&clock_audss EXYNOS_I2S_BUS>,
<&clock_audss EXYNOS_SCLK_I2S>;
clock-names = "iis", "i2s_opclk0", "i2s_opclk1";
samsung,supports-6ch; samsung,supports-6ch;
samsung,supports-rstclr; samsung,supports-rstclr;
samsung,supports-secdai; samsung,supports-secdai;
samsung,idma-addr = <0x03000000>; samsung,idma-addr = <0x03000000>;
}; pinctrl-names = "default";
pinctrl-0 = <&i2s0_bus>;
- Board Specific Portion:
i2s@03830000 {
gpios = <&gpz 0 2 0 0>, /* I2S_0_SCLK */
<&gpz 1 2 0 0>, /* I2S_0_CDCLK */
<&gpz 2 2 0 0>, /* I2S_0_LRCK */
<&gpz 3 2 0 0>, /* I2S_0_SDI */
<&gpz 4 2 0 0>, /* I2S_0_SDO[1] */
<&gpz 5 2 0 0>, /* I2S_0_SDO[2] */
<&gpz 6 2 0 0>; /* I2S_0_SDO[3] */
}; };
...@@ -48,3 +48,37 @@ Example: ...@@ -48,3 +48,37 @@ Example:
clocks = <&clock 285>; clocks = <&clock 285>;
clock-names = "usbhost"; clock-names = "usbhost";
}; };
DWC3
Required properties:
- compatible: should be "samsung,exynos5250-dwusb3" for USB 3.0 DWC3
controller.
- #address-cells, #size-cells : should be '1' if the device has sub-nodes
with 'reg' property.
- ranges: allows valid 1:1 translation between child's address space and
parent's address space
- clocks: Clock IDs array as required by the controller.
- clock-names: names of clocks correseponding to IDs in the clock property
Sub-nodes:
The dwc3 core should be added as subnode to Exynos dwc3 glue.
- dwc3 :
The binding details of dwc3 can be found in:
Documentation/devicetree/bindings/usb/dwc3.txt
Example:
usb@12000000 {
compatible = "samsung,exynos5250-dwusb3";
clocks = <&clock 286>;
clock-names = "usbdrd30";
#address-cells = <1>;
#size-cells = <1>;
ranges;
dwc3 {
compatible = "synopsys,dwc3";
reg = <0x12000000 0x10000>;
interrupts = <0 72 0>;
usb-phy = <&usb2_phy &usb3_phy>;
};
};
...@@ -21,6 +21,10 @@ Required properties for dp-controller: ...@@ -21,6 +21,10 @@ Required properties for dp-controller:
of memory mapped region. of memory mapped region.
-interrupts: -interrupts:
interrupt combiner values. interrupt combiner values.
-clocks:
from common clock binding: handle to dp clock.
-clock-names:
from common clock binding: Shall be "dp".
-interrupt-parent: -interrupt-parent:
phandle to Interrupt combiner node. phandle to Interrupt combiner node.
-samsung,color-space: -samsung,color-space:
...@@ -61,6 +65,8 @@ SOC specific portion: ...@@ -61,6 +65,8 @@ SOC specific portion:
reg = <0x145b0000 0x10000>; reg = <0x145b0000 0x10000>;
interrupts = <10 3>; interrupts = <10 3>;
interrupt-parent = <&combiner>; interrupt-parent = <&combiner>;
clocks = <&clock 342>;
clock-names = "dp";
dptx-phy { dptx-phy {
reg = <0x10040720>; reg = <0x10040720>;
......
...@@ -57,6 +57,7 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \ ...@@ -57,6 +57,7 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
exynos5440-sd5v1.dtb \ exynos5440-sd5v1.dtb \
exynos5250-smdk5250.dtb \ exynos5250-smdk5250.dtb \
exynos5250-snow.dtb \ exynos5250-snow.dtb \
exynos5420-smdk5420.dtb \
exynos5440-ssdk5440.dtb exynos5440-ssdk5440.dtb
dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \ dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \
ecx-2000.dtb ecx-2000.dtb
...@@ -159,6 +160,7 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \ ...@@ -159,6 +160,7 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
hrefprev60.dtb \ hrefprev60.dtb \
hrefv60plus.dtb \ hrefv60plus.dtb \
ccu9540.dtb ccu9540.dtb
dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb
dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \ dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
r8a7740-armadillo800eva.dtb \ r8a7740-armadillo800eva.dtb \
r8a7778-bockw.dtb \ r8a7778-bockw.dtb \
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "skeleton.dtsi" #include "skeleton.dtsi"
/ { / {
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
...@@ -160,6 +160,8 @@ mfc: codec@13400000 { ...@@ -160,6 +160,8 @@ mfc: codec@13400000 {
reg = <0x13400000 0x10000>; reg = <0x13400000 0x10000>;
interrupts = <0 94 0>; interrupts = <0 94 0>;
samsung,power-domain = <&pd_mfc>; samsung,power-domain = <&pd_mfc>;
clocks = <&clock 170>, <&clock 273>;
clock-names = "sclk_mfc", "mfc";
status = "disabled"; status = "disabled";
}; };
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4210.dtsi" #include "exynos4210.dtsi"
/ { / {
model = "Insignal Origen evaluation board based on Exynos4210"; model = "Insignal Origen evaluation board based on Exynos4210";
...@@ -41,6 +41,10 @@ mmc_reg: voltage-regulator { ...@@ -41,6 +41,10 @@ mmc_reg: voltage-regulator {
enable-active-high; enable-active-high;
}; };
tmu@100C0000 {
status = "okay";
};
sdhci@12530000 { sdhci@12530000 {
bus-width = <4>; bus-width = <4>;
pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>; pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
...@@ -83,6 +87,150 @@ serial@13830000 { ...@@ -83,6 +87,150 @@ serial@13830000 {
status = "okay"; status = "okay";
}; };
i2c@13860000 {
status = "okay";
samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <20000>;
pinctrl-0 = <&i2c0_bus>;
pinctrl-names = "default";
max8997_pmic@66 {
compatible = "maxim,max8997-pmic";
reg = <0x66>;
interrupt-parent = <&gpx0>;
interrupts = <4 0>, <3 0>;
max8997,pmic-buck1-dvs-voltage = <1350000>;
max8997,pmic-buck2-dvs-voltage = <1100000>;
max8997,pmic-buck5-dvs-voltage = <1200000>;
regulators {
ldo1_reg: LDO1 {
regulator-name = "VDD_ABB_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
ldo2_reg: LDO2 {
regulator-name = "VDD_ALIVE_1.1V";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
regulator-always-on;
};
ldo3_reg: LDO3 {
regulator-name = "VMIPI_1.1V";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
};
ldo4_reg: LDO4 {
regulator-name = "VDD_RTC_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
ldo6_reg: LDO6 {
regulator-name = "VMIPI_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
ldo7_reg: LDO7 {
regulator-name = "VDD_AUD_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
};
ldo8_reg: LDO8 {
regulator-name = "VADC_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
};
ldo9_reg: LDO9 {
regulator-name = "DVDD_SWB_2.8V";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
};
ldo10_reg: LDO10 {
regulator-name = "VDD_PLL_1.1V";
regulator-min-microvolt = <1100000>;
regulator-max-microvolt = <1100000>;
regulator-always-on;
};
ldo11_reg: LDO11 {
regulator-name = "VDD_AUD_3V";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3000000>;
};
ldo14_reg: LDO14 {
regulator-name = "AVDD18_SWB_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
ldo17_reg: LDO17 {
regulator-name = "VDD_SWB_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
ldo21_reg: LDO21 {
regulator-name = "VDD_MIF_1.2V";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
};
buck1_reg: BUCK1 {
regulator-name = "VDD_ARM_1.2V";
regulator-min-microvolt = <950000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
regulator-boot-on;
};
buck2_reg: BUCK2 {
regulator-name = "VDD_INT_1.1V";
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1100000>;
regulator-always-on;
regulator-boot-on;
};
buck3_reg: BUCK3 {
regulator-name = "VDD_G3D_1.1V";
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1100000>;
};
buck5_reg: BUCK5 {
regulator-name = "VDDQ_M1M2_1.2V";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
};
buck7_reg: BUCK7 {
regulator-name = "VDD_LCD_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-boot-on;
regulator-always-on;
};
};
};
};
gpio_keys { gpio_keys {
compatible = "gpio-keys"; compatible = "gpio-keys";
#address-cells = <1>; #address-cells = <1>;
...@@ -143,4 +291,25 @@ xusbxti { ...@@ -143,4 +291,25 @@ xusbxti {
clock-frequency = <24000000>; clock-frequency = <24000000>;
}; };
}; };
fimd@11c00000 {
pinctrl-0 = <&lcd_en &lcd_clk &lcd_data24 &pwm0_out>;
pinctrl-names = "default";
status = "okay";
};
display-timings {
native-mode = <&timing0>;
timing0: timing {
clock-frequency = <50000>;
hactive = <1024>;
vactive = <600>;
hfront-porch = <64>;
hback-porch = <16>;
hsync-len = <48>;
vback-porch = <64>;
vfront-porch = <16>;
vsync-len = <3>;
};
};
}; };
...@@ -330,6 +330,95 @@ i2c1_bus: i2c1-bus { ...@@ -330,6 +330,95 @@ i2c1_bus: i2c1-bus {
samsung,pin-pud = <3>; samsung,pin-pud = <3>;
samsung,pin-drv = <0>; samsung,pin-drv = <0>;
}; };
pwm0_out: pwm0-out {
samsung,pins = "gpd0-0";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
pwm1_out: pwm1-out {
samsung,pins = "gpd0-1";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
pwm2_out: pwm2-out {
samsung,pins = "gpd0-2";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
pwm3_out: pwm3-out {
samsung,pins = "gpd0-3";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_ctrl: lcd-ctrl {
samsung,pins = "gpd0-0", "gpd0-1";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_sync: lcd-sync {
samsung,pins = "gpf0-0", "gpf0-1";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_en: lcd-en {
samsung,pins = "gpe3-4";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_clk: lcd-clk {
samsung,pins = "gpf0-0", "gpf0-1", "gpf0-2", "gpf0-3";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_data16: lcd-data-width16 {
samsung,pins = "gpf0-7", "gpf1-0", "gpf1-1", "gpf1-2",
"gpf1-3", "gpf1-6", "gpf1-7", "gpf2-0",
"gpf2-1", "gpf2-2", "gpf2-3", "gpf2-7",
"gpf3-0", "gpf3-1", "gpf3-2", "gpf3-3";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_data18: lcd-data-width18 {
samsung,pins = "gpf0-6", "gpf0-7", "gpf1-0", "gpf1-1",
"gpf1-2", "gpf1-3", "gpf1-6", "gpf1-7",
"gpf2-0", "gpf2-1", "gpf2-2", "gpf2-3",
"gpf2-6", "gpf2-7", "gpf3-0", "gpf3-1",
"gpf3-2", "gpf3-3";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
lcd_data24: lcd-data-width24 {
samsung,pins = "gpf0-4", "gpf0-5", "gpf0-6", "gpf0-7",
"gpf1-0", "gpf1-1", "gpf1-2", "gpf1-3",
"gpf1-4", "gpf1-5", "gpf1-6", "gpf1-7",
"gpf2-0", "gpf2-1", "gpf2-2", "gpf2-3",
"gpf2-4", "gpf2-5", "gpf2-6", "gpf2-7",
"gpf3-0", "gpf3-1", "gpf3-2", "gpf3-3";
samsung,pin-function = <2>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
}; };
pinctrl@11000000 { pinctrl@11000000 {
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4210.dtsi" #include "exynos4210.dtsi"
/ { / {
model = "Samsung smdkv310 evaluation board based on Exynos4210"; model = "Samsung smdkv310 evaluation board based on Exynos4210";
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4210.dtsi" #include "exynos4210.dtsi"
/ { / {
model = "Samsung Trats based on Exynos4210"; model = "Samsung Trats based on Exynos4210";
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4210.dtsi" #include "exynos4210.dtsi"
/ { / {
model = "Samsung Universal C210 based on Exynos4210 rev0"; model = "Samsung Universal C210 based on Exynos4210 rev0";
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "exynos4.dtsi" #include "exynos4.dtsi"
/include/ "exynos4210-pinctrl.dtsi" #include "exynos4210-pinctrl.dtsi"
/ { / {
compatible = "samsung,exynos4210"; compatible = "samsung,exynos4210";
...@@ -112,12 +112,17 @@ tmu@100C0000 { ...@@ -112,12 +112,17 @@ tmu@100C0000 {
interrupt-parent = <&combiner>; interrupt-parent = <&combiner>;
reg = <0x100C0000 0x100>; reg = <0x100C0000 0x100>;
interrupts = <2 4>; interrupts = <2 4>;
clocks = <&clock 383>;
clock-names = "tmu_apbif";
status = "disabled";
}; };
g2d@12800000 { g2d@12800000 {
compatible = "samsung,s5pv210-g2d"; compatible = "samsung,s5pv210-g2d";
reg = <0x12800000 0x1000>; reg = <0x12800000 0x1000>;
interrupts = <0 89 0>; interrupts = <0 89 0>;
clocks = <&clock 177>, <&clock 277>;
clock-names = "sclk_fimg2d", "fimg2d";
status = "disabled"; status = "disabled";
}; };
}; };
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "exynos4x12.dtsi" #include "exynos4x12.dtsi"
/ { / {
compatible = "samsung,exynos4212"; compatible = "samsung,exynos4212";
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4412.dtsi" #include "exynos4412.dtsi"
/ { / {
model = "Hardkernel ODROID-X board based on Exynos4412"; model = "Hardkernel ODROID-X board based on Exynos4412";
...@@ -43,6 +43,7 @@ mshc@12550000 { ...@@ -43,6 +43,7 @@ mshc@12550000 {
#size-cells = <0>; #size-cells = <0>;
pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>; pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
pinctrl-names = "default"; pinctrl-names = "default";
vmmc-supply = <&ldo20_reg &buck8_reg>;
status = "okay"; status = "okay";
num-slots = <1>; num-slots = <1>;
...@@ -78,6 +79,7 @@ sdhci@12530000 { ...@@ -78,6 +79,7 @@ sdhci@12530000 {
bus-width = <4>; bus-width = <4>;
pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>; pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;
pinctrl-names = "default"; pinctrl-names = "default";
vmmc-supply = <&ldo4_reg &ldo21_reg>;
status = "okay"; status = "okay";
}; };
...@@ -108,4 +110,199 @@ xusbxti { ...@@ -108,4 +110,199 @@ xusbxti {
clock-frequency = <24000000>; clock-frequency = <24000000>;
}; };
}; };
i2c@13860000 {
pinctrl-0 = <&i2c0_bus>;
pinctrl-names = "default";
status = "okay";
max77686: pmic@09 {
compatible = "maxim,max77686";
reg = <0x09>;
voltage-regulators {
ldo1_reg: LDO1 {
regulator-name = "VDD_ALIVE_1.0V";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
ldo2_reg: LDO2 {
regulator-name = "VDDQ_M1_2_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
ldo3_reg: LDO3 {
regulator-name = "VDDQ_EXT_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
ldo4_reg: LDO4 {
regulator-name = "VDDQ_MMC2_2.8V";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
regulator-boot-on;
};
ldo5_reg: LDO5 {
regulator-name = "VDDQ_MMC1_3_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
ldo6_reg: LDO6 {
regulator-name = "VDD10_MPLL_1.0V";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
ldo7_reg: LDO7 {
regulator-name = "VDD10_XPLL_1.0V";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
};
ldo11_reg: LDO11 {
regulator-name = "VDD18_ABB1_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
ldo12_reg: LDO12 {
regulator-name = "VDD33_USB_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
};
ldo13_reg: LDO13 {
regulator-name = "VDDQ_C2C_W_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
ldo14_reg: LDO14 {
regulator-name = "VDD18_ABB0_2_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
ldo15_reg: LDO15 {
regulator-name = "VDD10_HSIC_1.0V";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-boot-on;
};
ldo16_reg: LDO16 {
regulator-name = "VDD18_HSIC_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
ldo20_reg: LDO20 {
regulator-name = "LDO20_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-boot-on;
};
ldo21_reg: LDO21 {
regulator-name = "LDO21_3.3V";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
regulator-boot-on;
};
ldo25_reg: LDO25 {
regulator-name = "VDDQ_LCD_1.8V";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
regulator-boot-on;
};
buck1_reg: BUCK1 {
regulator-name = "vdd_mif";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-boot-on;
};
buck2_reg: BUCK2 {
regulator-name = "vdd_arm";
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1300000>;
regulator-always-on;
regulator-boot-on;
};
buck3_reg: BUCK3 {
regulator-name = "vdd_int";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <1000000>;
regulator-always-on;
regulator-boot-on;
};
buck4_reg: BUCK4 {
regulator-name = "vdd_g3d";
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1100000>;
regulator-microvolt-offset = <50000>;
};
buck5_reg: BUCK5 {
regulator-name = "VDDQ_CKEM1_2_1.2V";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <1200000>;
regulator-always-on;
regulator-boot-on;
};
buck6_reg: BUCK6 {
regulator-name = "BUCK6_1.35V";
regulator-min-microvolt = <1350000>;
regulator-max-microvolt = <1350000>;
regulator-always-on;
regulator-boot-on;
};
buck7_reg: BUCK7 {
regulator-name = "BUCK7_2.0V";
regulator-min-microvolt = <2000000>;
regulator-max-microvolt = <2000000>;
regulator-always-on;
};
buck8_reg: BUCK8 {
regulator-name = "BUCK8_2.8V";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-always-on;
};
};
};
};
}; };
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4412.dtsi" #include "exynos4412.dtsi"
/ { / {
model = "Insignal Origen evaluation board based on Exynos4412"; model = "Insignal Origen evaluation board based on Exynos4412";
...@@ -36,6 +36,72 @@ mmc_reg: voltage-regulator { ...@@ -36,6 +36,72 @@ mmc_reg: voltage-regulator {
enable-active-high; enable-active-high;
}; };
pinctrl@11000000 {
keypad_rows: keypad-rows {
samsung,pins = "gpx2-0", "gpx2-1", "gpx2-2";
samsung,pin-function = <3>;
samsung,pin-pud = <3>;
samsung,pin-drv = <0>;
};
keypad_cols: keypad-cols {
samsung,pins = "gpx1-0", "gpx1-1";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
};
keypad@100A0000 {
samsung,keypad-num-rows = <3>;
samsung,keypad-num-columns = <2>;
linux,keypad-no-autorepeat;
linux,keypad-wakeup;
pinctrl-0 = <&keypad_rows &keypad_cols>;
pinctrl-names = "default";
status = "okay";
key_home {
keypad,row = <0>;
keypad,column = <0>;
linux,code = <102>;
};
key_down {
keypad,row = <0>;
keypad,column = <1>;
linux,code = <108>;
};
key_up {
keypad,row = <1>;
keypad,column = <0>;
linux,code = <103>;
};
key_menu {
keypad,row = <1>;
keypad,column = <1>;
linux,code = <139>;
};
key_back {
keypad,row = <2>;
keypad,column = <0>;
linux,code = <158>;
};
key_enter {
keypad,row = <2>;
keypad,column = <1>;
linux,code = <28>;
};
};
g2d@10800000 {
status = "okay";
};
sdhci@12530000 { sdhci@12530000 {
bus-width = <4>; bus-width = <4>;
pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>; pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos4412.dtsi" #include "exynos4412.dtsi"
/ { / {
model = "Samsung SMDK evaluation board based on Exynos4412"; model = "Samsung SMDK evaluation board based on Exynos4412";
...@@ -31,8 +31,91 @@ g2d@10800000 { ...@@ -31,8 +31,91 @@ g2d@10800000 {
status = "okay"; status = "okay";
}; };
g2d@10800000 { pinctrl@11000000 {
keypad_rows: keypad-rows {
samsung,pins = "gpx2-0", "gpx2-1", "gpx2-2";
samsung,pin-function = <3>;
samsung,pin-pud = <3>;
samsung,pin-drv = <0>;
};
keypad_cols: keypad-cols {
samsung,pins = "gpx1-0", "gpx1-1", "gpx1-2", "gpx1-3",
"gpx1-4", "gpx1-5", "gpx1-6", "gpx1-7";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
};
keypad@100A0000 {
samsung,keypad-num-rows = <3>;
samsung,keypad-num-columns = <8>;
linux,keypad-no-autorepeat;
linux,keypad-wakeup;
pinctrl-0 = <&keypad_rows &keypad_cols>;
pinctrl-names = "default";
status = "okay"; status = "okay";
key_1 {
keypad,row = <1>;
keypad,column = <3>;
linux,code = <2>;
};
key_2 {
keypad,row = <1>;
keypad,column = <4>;
linux,code = <3>;
};
key_3 {
keypad,row = <1>;
keypad,column = <5>;
linux,code = <4>;
};
key_4 {
keypad,row = <1>;
keypad,column = <6>;
linux,code = <5>;
};
key_5 {
keypad,row = <1>;
keypad,column = <7>;
linux,code = <6>;
};
key_A {
keypad,row = <2>;
keypad,column = <6>;
linux,code = <30>;
};
key_B {
keypad,row = <2>;
keypad,column = <7>;
linux,code = <48>;
};
key_C {
keypad,row = <0>;
keypad,column = <5>;
linux,code = <46>;
};
key_D {
keypad,row = <2>;
keypad,column = <5>;
linux,code = <32>;
};
key_E {
keypad,row = <0>;
keypad,column = <7>;
linux,code = <18>;
};
}; };
sdhci@12530000 { sdhci@12530000 {
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "exynos4x12.dtsi" #include "exynos4x12.dtsi"
/ { / {
compatible = "samsung,exynos4412"; compatible = "samsung,exynos4412";
......
...@@ -778,62 +778,6 @@ sd3_bus4: sd3-bus-width4 { ...@@ -778,62 +778,6 @@ sd3_bus4: sd3-bus-width4 {
samsung,pin-drv = <3>; samsung,pin-drv = <3>;
}; };
keypad_col0: keypad-col0 {
samsung,pins = "gpl2-0";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col1: keypad-col1 {
samsung,pins = "gpl2-1";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col2: keypad-col2 {
samsung,pins = "gpl2-2";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col3: keypad-col3 {
samsung,pins = "gpl2-3";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col4: keypad-col4 {
samsung,pins = "gpl2-4";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col5: keypad-col5 {
samsung,pins = "gpl2-5";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col6: keypad-col6 {
samsung,pins = "gpl2-6";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
keypad_col7: keypad-col7 {
samsung,pins = "gpl2-7";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samsung,pin-drv = <0>;
};
cam_port_b: cam-port-b { cam_port_b: cam-port-b {
samsung,pins = "gpm0-0", "gpm0-1", "gpm0-2", "gpm0-3", samsung,pins = "gpm0-0", "gpm0-1", "gpm0-2", "gpm0-3",
"gpm0-4", "gpm0-5", "gpm0-6", "gpm0-7", "gpm0-4", "gpm0-5", "gpm0-6", "gpm0-7",
......
...@@ -17,8 +17,8 @@ ...@@ -17,8 +17,8 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "exynos4.dtsi" #include "exynos4.dtsi"
/include/ "exynos4x12-pinctrl.dtsi" #include "exynos4x12-pinctrl.dtsi"
/ { / {
aliases { aliases {
...@@ -28,14 +28,6 @@ aliases { ...@@ -28,14 +28,6 @@ aliases {
pinctrl3 = &pinctrl_3; pinctrl3 = &pinctrl_3;
}; };
combiner:interrupt-controller@10440000 {
interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>,
<0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>,
<0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>,
<0 12 0>, <0 13 0>, <0 14 0>, <0 15 0>,
<0 16 0>, <0 17 0>, <0 18 0>, <0 19 0>;
};
clock: clock-controller@0x10030000 { clock: clock-controller@0x10030000 {
compatible = "samsung,exynos4412-clock"; compatible = "samsung,exynos4412-clock";
reg = <0x10030000 0x20000>; reg = <0x10030000 0x20000>;
...@@ -77,6 +69,8 @@ g2d@10800000 { ...@@ -77,6 +69,8 @@ g2d@10800000 {
compatible = "samsung,exynos4212-g2d"; compatible = "samsung,exynos4212-g2d";
reg = <0x10800000 0x1000>; reg = <0x10800000 0x1000>;
interrupts = <0 89 0>; interrupts = <0 89 0>;
clocks = <&clock 177>, <&clock 277>;
clock-names = "sclk_fimg2d", "fimg2d";
status = "disabled"; status = "disabled";
}; };
}; };
/*
* Samsung's Exynos5 SoC series common device tree source
*
* Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* Samsung's Exynos5 SoC series device nodes are listed in this file. Particular
* SoCs from Exynos5 series can include this file and provide values for SoCs
* specfic bindings.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include "skeleton.dtsi"
/ {
interrupt-parent = <&gic>;
chipid@10000000 {
compatible = "samsung,exynos4210-chipid";
reg = <0x10000000 0x100>;
};
combiner:interrupt-controller@10440000 {
compatible = "samsung,exynos4210-combiner";
#interrupt-cells = <2>;
interrupt-controller;
samsung,combiner-nr = <32>;
reg = <0x10440000 0x1000>;
interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>,
<0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>,
<0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>,
<0 12 0>, <0 13 0>, <0 14 0>, <0 15 0>,
<0 16 0>, <0 17 0>, <0 18 0>, <0 19 0>,
<0 20 0>, <0 21 0>, <0 22 0>, <0 23 0>,
<0 24 0>, <0 25 0>, <0 26 0>, <0 27 0>,
<0 28 0>, <0 29 0>, <0 30 0>, <0 31 0>;
};
gic:interrupt-controller@10481000 {
compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic";
#interrupt-cells = <3>;
interrupt-controller;
reg = <0x10481000 0x1000>,
<0x10482000 0x1000>,
<0x10484000 0x2000>,
<0x10486000 0x2000>;
interrupts = <1 9 0xf04>;
};
dwmmc_0: dwmmc0@12200000 {
compatible = "samsung,exynos5250-dw-mshc";
interrupts = <0 75 0>;
#address-cells = <1>;
#size-cells = <0>;
};
dwmmc_1: dwmmc1@12210000 {
compatible = "samsung,exynos5250-dw-mshc";
interrupts = <0 76 0>;
#address-cells = <1>;
#size-cells = <0>;
};
dwmmc_2: dwmmc2@12220000 {
compatible = "samsung,exynos5250-dw-mshc";
interrupts = <0 77 0>;
#address-cells = <1>;
#size-cells = <0>;
};
serial@12C00000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C00000 0x100>;
interrupts = <0 51 0>;
};
serial@12C10000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C10000 0x100>;
interrupts = <0 52 0>;
};
serial@12C20000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C20000 0x100>;
interrupts = <0 53 0>;
};
serial@12C30000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C30000 0x100>;
interrupts = <0 54 0>;
};
rtc {
compatible = "samsung,s3c6410-rtc";
reg = <0x101E0000 0x100>;
interrupts = <0 43 0>, <0 44 0>;
status = "disabled";
};
watchdog {
compatible = "samsung,s3c2410-wdt";
reg = <0x101D0000 0x100>;
interrupts = <0 42 0>;
status = "disabled";
};
};
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos5250.dtsi" #include "exynos5250.dtsi"
/ { / {
model = "Insignal Arndale evaluation board based on EXYNOS5250"; model = "Insignal Arndale evaluation board based on EXYNOS5250";
...@@ -449,4 +449,35 @@ xxti { ...@@ -449,4 +449,35 @@ xxti {
clock-frequency = <24000000>; clock-frequency = <24000000>;
}; };
}; };
dp-controller {
samsung,color-space = <0>;
samsung,dynamic-range = <0>;
samsung,ycbcr-coeff = <0>;
samsung,color-depth = <1>;
samsung,link-rate = <0x0a>;
samsung,lane-count = <4>;
};
fimd: fimd@14400000 {
display-timings {
native-mode = <&timing0>;
timing0: timing@0 {
/* 2560x1600 DP panel */
clock-frequency = <50000>;
hactive = <2560>;
vactive = <1600>;
hfront-porch = <48>;
hback-porch = <80>;
hsync-len = <32>;
vback-porch = <16>;
vfront-porch = <8>;
vsync-len = <6>;
};
};
};
rtc {
status = "okay";
};
}; };
...@@ -553,6 +553,13 @@ uart1_fctl: uart1-fctl { ...@@ -553,6 +553,13 @@ uart1_fctl: uart1-fctl {
samsung,pin-pud = <0>; samsung,pin-pud = <0>;
samaung,pin-drv = <0>; samaung,pin-drv = <0>;
}; };
dp_hpd: dp_hpd {
samsung,pins = "gpx0-7";
samsung,pin-function = <3>;
samsung,pin-pud = <0>;
samaung,pin-drv = <0>;
};
}; };
pinctrl@13400000 { pinctrl@13400000 {
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos5250.dtsi" #include "exynos5250.dtsi"
/ { / {
model = "SAMSUNG SMDK5250 board based on EXYNOS5250"; model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
...@@ -37,6 +37,30 @@ eeprom@50 { ...@@ -37,6 +37,30 @@ eeprom@50 {
}; };
}; };
vdd:fixed-regulator@0 {
compatible = "regulator-fixed";
regulator-name = "vdd-supply";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <1800000>;
regulator-always-on;
};
dbvdd:fixed-regulator@1 {
compatible = "regulator-fixed";
regulator-name = "dbvdd-supply";
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
regulator-always-on;
};
spkvdd:fixed-regulator@2 {
compatible = "regulator-fixed";
regulator-name = "spkvdd-supply";
regulator-min-microvolt = <5000000>;
regulator-max-microvolt = <5000000>;
regulator-always-on;
};
i2c@12C70000 { i2c@12C70000 {
samsung,i2c-sda-delay = <100>; samsung,i2c-sda-delay = <100>;
samsung,i2c-max-bus-freq = <20000>; samsung,i2c-max-bus-freq = <20000>;
...@@ -47,8 +71,17 @@ eeprom@51 { ...@@ -47,8 +71,17 @@ eeprom@51 {
}; };
wm8994: wm8994@1a { wm8994: wm8994@1a {
compatible = "wlf,wm8994"; compatible = "wlf,wm8994";
reg = <0x1a>; reg = <0x1a>;
gpio-controller;
#gpio-cells = <2>;
AVDD2-supply = <&vdd>;
CPVDD-supply = <&vdd>;
DBVDD-supply = <&dbvdd>;
SPKVDD1-supply = <&spkvdd>;
SPKVDD2-supply = <&spkvdd>;
}; };
}; };
...@@ -224,6 +257,9 @@ dp-controller { ...@@ -224,6 +257,9 @@ dp-controller {
samsung,color-depth = <1>; samsung,color-depth = <1>;
samsung,link-rate = <0x0a>; samsung,link-rate = <0x0a>;
samsung,lane-count = <4>; samsung,lane-count = <4>;
pinctrl-names = "default";
pinctrl-0 = <&dp_hpd>;
}; };
display-timings { display-timings {
......
...@@ -9,8 +9,8 @@ ...@@ -9,8 +9,8 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos5250.dtsi" #include "exynos5250.dtsi"
/include/ "cros5250-common.dtsi" #include "cros5250-common.dtsi"
/ { / {
model = "Google Snow"; model = "Google Snow";
...@@ -171,6 +171,10 @@ keyboard-controller { ...@@ -171,6 +171,10 @@ keyboard-controller {
}; };
}; };
rtc {
status = "okay";
};
/* /*
* On Snow we've got SIP WiFi and so can keep drive strengths low to * On Snow we've got SIP WiFi and so can keep drive strengths low to
* reduce EMI. * reduce EMI.
......
...@@ -17,12 +17,13 @@ ...@@ -17,12 +17,13 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "skeleton.dtsi" #include "exynos5.dtsi"
/include/ "exynos5250-pinctrl.dtsi" #include "exynos5250-pinctrl.dtsi"
#include <dt-bindings/clk/exynos-audss-clk.h>
/ { / {
compatible = "samsung,exynos5250"; compatible = "samsung,exynos5250";
interrupt-parent = <&gic>;
aliases { aliases {
spi0 = &spi_0; spi0 = &spi_0;
...@@ -51,9 +52,20 @@ aliases { ...@@ -51,9 +52,20 @@ aliases {
pinctrl3 = &pinctrl_3; pinctrl3 = &pinctrl_3;
}; };
chipid@10000000 { cpus {
compatible = "samsung,exynos4210-chipid"; #address-cells = <1>;
reg = <0x10000000 0x100>; #size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0>;
};
cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <1>;
};
}; };
pd_gsc: gsc-power-domain@0x10044000 { pd_gsc: gsc-power-domain@0x10044000 {
...@@ -72,15 +84,10 @@ clock: clock-controller@0x10010000 { ...@@ -72,15 +84,10 @@ clock: clock-controller@0x10010000 {
#clock-cells = <1>; #clock-cells = <1>;
}; };
gic:interrupt-controller@10481000 { clock_audss: audss-clock-controller@3810000 {
compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; compatible = "samsung,exynos5250-audss-clock";
#interrupt-cells = <3>; reg = <0x03810000 0x0C>;
interrupt-controller; #clock-cells = <1>;
reg = <0x10481000 0x1000>,
<0x10482000 0x1000>,
<0x10484000 0x2000>,
<0x10486000 0x2000>;
interrupts = <1 9 0xf04>;
}; };
timer { timer {
...@@ -91,22 +98,6 @@ timer { ...@@ -91,22 +98,6 @@ timer {
<1 10 0xf08>; <1 10 0xf08>;
}; };
combiner:interrupt-controller@10440000 {
compatible = "samsung,exynos4210-combiner";
#interrupt-cells = <2>;
interrupt-controller;
samsung,combiner-nr = <32>;
reg = <0x10440000 0x1000>;
interrupts = <0 0 0>, <0 1 0>, <0 2 0>, <0 3 0>,
<0 4 0>, <0 5 0>, <0 6 0>, <0 7 0>,
<0 8 0>, <0 9 0>, <0 10 0>, <0 11 0>,
<0 12 0>, <0 13 0>, <0 14 0>, <0 15 0>,
<0 16 0>, <0 17 0>, <0 18 0>, <0 19 0>,
<0 20 0>, <0 21 0>, <0 22 0>, <0 23 0>,
<0 24 0>, <0 25 0>, <0 26 0>, <0 27 0>,
<0 28 0>, <0 29 0>, <0 30 0>, <0 31 0>;
};
mct@101C0000 { mct@101C0000 {
compatible = "samsung,exynos4210-mct"; compatible = "samsung,exynos4210-mct";
reg = <0x101C0000 0x800>; reg = <0x101C0000 0x800>;
...@@ -168,9 +159,6 @@ pinctrl_3: pinctrl@03680000 { ...@@ -168,9 +159,6 @@ pinctrl_3: pinctrl@03680000 {
}; };
watchdog { watchdog {
compatible = "samsung,s3c2410-wdt";
reg = <0x101D0000 0x100>;
interrupts = <0 42 0>;
clocks = <&clock 336>; clocks = <&clock 336>;
clock-names = "watchdog"; clock-names = "watchdog";
}; };
...@@ -183,12 +171,8 @@ codec@11000000 { ...@@ -183,12 +171,8 @@ codec@11000000 {
}; };
rtc { rtc {
compatible = "samsung,s3c6410-rtc";
reg = <0x101E0000 0x100>;
interrupts = <0 43 0>, <0 44 0>;
clocks = <&clock 337>; clocks = <&clock 337>;
clock-names = "rtc"; clock-names = "rtc";
status = "disabled";
}; };
tmu@10060000 { tmu@10060000 {
...@@ -200,33 +184,21 @@ tmu@10060000 { ...@@ -200,33 +184,21 @@ tmu@10060000 {
}; };
serial@12C00000 { serial@12C00000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C00000 0x100>;
interrupts = <0 51 0>;
clocks = <&clock 289>, <&clock 146>; clocks = <&clock 289>, <&clock 146>;
clock-names = "uart", "clk_uart_baud0"; clock-names = "uart", "clk_uart_baud0";
}; };
serial@12C10000 { serial@12C10000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C10000 0x100>;
interrupts = <0 52 0>;
clocks = <&clock 290>, <&clock 147>; clocks = <&clock 290>, <&clock 147>;
clock-names = "uart", "clk_uart_baud0"; clock-names = "uart", "clk_uart_baud0";
}; };
serial@12C20000 { serial@12C20000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C20000 0x100>;
interrupts = <0 53 0>;
clocks = <&clock 291>, <&clock 148>; clocks = <&clock 291>, <&clock 148>;
clock-names = "uart", "clk_uart_baud0"; clock-names = "uart", "clk_uart_baud0";
}; };
serial@12C30000 { serial@12C30000 {
compatible = "samsung,exynos4210-uart";
reg = <0x12C30000 0x100>;
interrupts = <0 54 0>;
clocks = <&clock 292>, <&clock 149>; clocks = <&clock 292>, <&clock 149>;
clock-names = "uart", "clk_uart_baud0"; clock-names = "uart", "clk_uart_baud0";
}; };
...@@ -405,31 +377,19 @@ spi_2: spi@12d40000 { ...@@ -405,31 +377,19 @@ spi_2: spi@12d40000 {
}; };
dwmmc_0: dwmmc0@12200000 { dwmmc_0: dwmmc0@12200000 {
compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12200000 0x1000>; reg = <0x12200000 0x1000>;
interrupts = <0 75 0>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&clock 280>, <&clock 139>; clocks = <&clock 280>, <&clock 139>;
clock-names = "biu", "ciu"; clock-names = "biu", "ciu";
}; };
dwmmc_1: dwmmc1@12210000 { dwmmc_1: dwmmc1@12210000 {
compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12210000 0x1000>; reg = <0x12210000 0x1000>;
interrupts = <0 76 0>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&clock 281>, <&clock 140>; clocks = <&clock 281>, <&clock 140>;
clock-names = "biu", "ciu"; clock-names = "biu", "ciu";
}; };
dwmmc_2: dwmmc2@12220000 { dwmmc_2: dwmmc2@12220000 {
compatible = "samsung,exynos5250-dw-mshc";
reg = <0x12220000 0x1000>; reg = <0x12220000 0x1000>;
interrupts = <0 77 0>;
#address-cells = <1>;
#size-cells = <0>;
clocks = <&clock 282>, <&clock 141>; clocks = <&clock 282>, <&clock 141>;
clock-names = "biu", "ciu"; clock-names = "biu", "ciu";
}; };
...@@ -451,6 +411,10 @@ i2s0: i2s@03830000 { ...@@ -451,6 +411,10 @@ i2s0: i2s@03830000 {
&pdma0 9 &pdma0 9
&pdma0 8>; &pdma0 8>;
dma-names = "tx", "rx", "tx-sec"; dma-names = "tx", "rx", "tx-sec";
clocks = <&clock_audss EXYNOS_I2S_BUS>,
<&clock_audss EXYNOS_I2S_BUS>,
<&clock_audss EXYNOS_SCLK_I2S>;
clock-names = "iis", "i2s_opclk0", "i2s_opclk1";
samsung,supports-6ch; samsung,supports-6ch;
samsung,supports-rstclr; samsung,supports-rstclr;
samsung,supports-secdai; samsung,supports-secdai;
...@@ -465,6 +429,8 @@ i2s1: i2s@12D60000 { ...@@ -465,6 +429,8 @@ i2s1: i2s@12D60000 {
dmas = <&pdma1 12 dmas = <&pdma1 12
&pdma1 11>; &pdma1 11>;
dma-names = "tx", "rx"; dma-names = "tx", "rx";
clocks = <&clock 307>, <&clock 157>;
clock-names = "iis", "i2s_opclk0";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2s1_bus>; pinctrl-0 = <&i2s1_bus>;
}; };
...@@ -475,10 +441,42 @@ i2s2: i2s@12D70000 { ...@@ -475,10 +441,42 @@ i2s2: i2s@12D70000 {
dmas = <&pdma0 12 dmas = <&pdma0 12
&pdma0 11>; &pdma0 11>;
dma-names = "tx", "rx"; dma-names = "tx", "rx";
clocks = <&clock 308>, <&clock 158>;
clock-names = "iis", "i2s_opclk0";
pinctrl-names = "default"; pinctrl-names = "default";
pinctrl-0 = <&i2s2_bus>; pinctrl-0 = <&i2s2_bus>;
}; };
usb@12000000 {
compatible = "samsung,exynos5250-dwusb3";
clocks = <&clock 286>;
clock-names = "usbdrd30";
#address-cells = <1>;
#size-cells = <1>;
ranges;
dwc3 {
compatible = "synopsys,dwc3";
reg = <0x12000000 0x10000>;
interrupts = <0 72 0>;
usb-phy = <&usb2_phy &usb3_phy>;
};
};
usb3_phy: usbphy@12100000 {
compatible = "samsung,exynos5250-usb3phy";
reg = <0x12100000 0x100>;
clocks = <&clock 1>, <&clock 286>;
clock-names = "ext_xtal", "usbdrd30";
#address-cells = <1>;
#size-cells = <1>;
ranges;
usbphy-sys {
reg = <0x10040704 0x8>;
};
};
usb@12110000 { usb@12110000 {
compatible = "samsung,exynos4210-ehci"; compatible = "samsung,exynos4210-ehci";
reg = <0x12110000 0x100>; reg = <0x12110000 0x100>;
...@@ -497,7 +495,7 @@ usb@12120000 { ...@@ -497,7 +495,7 @@ usb@12120000 {
clock-names = "usbhost"; clock-names = "usbhost";
}; };
usbphy@12130000 { usb2_phy: usbphy@12130000 {
compatible = "samsung,exynos5250-usb2phy"; compatible = "samsung,exynos5250-usb2phy";
reg = <0x12130000 0x100>; reg = <0x12130000 0x100>;
clocks = <&clock 1>, <&clock 285>; clocks = <&clock 1>, <&clock 285>;
...@@ -621,6 +619,8 @@ dp-controller { ...@@ -621,6 +619,8 @@ dp-controller {
reg = <0x145b0000 0x1000>; reg = <0x145b0000 0x1000>;
interrupts = <10 3>; interrupts = <10 3>;
interrupt-parent = <&combiner>; interrupt-parent = <&combiner>;
clocks = <&clock 342>;
clock-names = "dp";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
......
/*
* SAMSUNG SMDK5420 board device tree source
*
* Copyright (c) 2013 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
#include "exynos5420.dtsi"
/ {
model = "Samsung SMDK5420 board based on EXYNOS5420";
compatible = "samsung,smdk5420", "samsung,exynos5420";
memory {
reg = <0x20000000 0x80000000>;
};
chosen {
bootargs = "console=ttySAC2,115200 init=/linuxrc";
};
fixed-rate-clocks {
oscclk {
compatible = "samsung,exynos5420-oscclk";
clock-frequency = <24000000>;
};
};
};
/*
* SAMSUNG EXYNOS5420 SoC device tree source
*
* Copyright (c) 2013 Samsung Electronics Co., Ltd.
* http://www.samsung.com
*
* SAMSUNG EXYNOS54200 SoC device nodes are listed in this file.
* EXYNOS5420 based board files can include this file and provide
* values for board specfic bindings.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include "exynos5.dtsi"
/ {
compatible = "samsung,exynos5420";
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x0>;
clock-frequency = <1800000000>;
};
cpu1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x1>;
clock-frequency = <1800000000>;
};
cpu2: cpu@2 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x2>;
clock-frequency = <1800000000>;
};
cpu3: cpu@3 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x3>;
clock-frequency = <1800000000>;
};
};
clock: clock-controller@0x10010000 {
compatible = "samsung,exynos5420-clock";
reg = <0x10010000 0x30000>;
#clock-cells = <1>;
};
mct@101C0000 {
compatible = "samsung,exynos4210-mct";
reg = <0x101C0000 0x800>;
interrupt-controller;
#interrups-cells = <1>;
interrupt-parent = <&mct_map>;
interrupts = <0>, <1>, <2>, <3>, <4>, <5>, <6>, <7>;
clocks = <&clock 1>, <&clock 315>;
clock-names = "fin_pll", "mct";
mct_map: mct-map {
#interrupt-cells = <1>;
#address-cells = <0>;
#size-cells = <0>;
interrupt-map = <0 &combiner 23 3>,
<1 &combiner 23 4>,
<2 &combiner 25 2>,
<3 &combiner 25 3>,
<4 &gic 0 120 0>,
<5 &gic 0 121 0>,
<6 &gic 0 122 0>,
<7 &gic 0 123 0>;
};
};
serial@12C00000 {
clocks = <&clock 257>, <&clock 128>;
clock-names = "uart", "clk_uart_baud0";
};
serial@12C10000 {
clocks = <&clock 258>, <&clock 129>;
clock-names = "uart", "clk_uart_baud0";
};
serial@12C20000 {
clocks = <&clock 259>, <&clock 130>;
clock-names = "uart", "clk_uart_baud0";
};
serial@12C30000 {
clocks = <&clock 260>, <&clock 131>;
clock-names = "uart", "clk_uart_baud0";
};
};
...@@ -10,14 +10,14 @@ ...@@ -10,14 +10,14 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos5440.dtsi" #include "exynos5440.dtsi"
/ { / {
model = "SAMSUNG SD5v1 board based on EXYNOS5440"; model = "SAMSUNG SD5v1 board based on EXYNOS5440";
compatible = "samsung,sd5v1", "samsung,exynos5440"; compatible = "samsung,sd5v1", "samsung,exynos5440";
chosen { chosen {
bootargs = "root=/dev/sda2 rw rootwait ignore_loglevel early_printk no_console_suspend mem=2048M@0x80000000 console=ttySAC0,115200"; bootargs = "root=/dev/sda2 rw rootwait ignore_loglevel early_printk no_console_suspend mem=2048M@0x80000000 mem=6144M@0x100000000 console=ttySAC0,115200";
}; };
fixed-rate-clocks { fixed-rate-clocks {
......
...@@ -10,18 +10,53 @@ ...@@ -10,18 +10,53 @@
*/ */
/dts-v1/; /dts-v1/;
/include/ "exynos5440.dtsi" #include "exynos5440.dtsi"
/ { / {
model = "SAMSUNG SSDK5440 board based on EXYNOS5440"; model = "SAMSUNG SSDK5440 board based on EXYNOS5440";
compatible = "samsung,ssdk5440", "samsung,exynos5440"; compatible = "samsung,ssdk5440", "samsung,exynos5440";
chosen { chosen {
bootargs = "root=/dev/sda2 rw rootwait ignore_loglevel early_printk no_console_suspend mem=2048M@0x80000000 console=ttySAC0,115200"; bootargs = "root=/dev/sda2 rw rootwait ignore_loglevel early_printk no_console_suspend mem=2048M@0x80000000 mem=6144M@0x100000000 console=ttySAC0,115200";
}; };
spi { spi_0: spi@D0000 {
status = "disabled";
flash: w25q128@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "winbond,w25q128";
spi-max-frequency = <15625000>;
reg = <0>;
controller-data {
samsung,spi-feedback-delay = <0>;
};
partition@00000 {
label = "BootLoader";
reg = <0x60000 0x80000>;
read-only;
};
partition@e0000 {
label = "Recovery-Kernel";
reg = <0xe0000 0x300000>;
read-only;
};
partition@3e0000 {
label = "CRAM-FS";
reg = <0x3e0000 0x700000>;
read-only;
};
partition@ae0000 {
label = "User-Data";
reg = <0xae0000 0x520000>;
};
};
}; };
fixed-rate-clocks { fixed-rate-clocks {
......
...@@ -9,13 +9,17 @@ ...@@ -9,13 +9,17 @@
* published by the Free Software Foundation. * published by the Free Software Foundation.
*/ */
/include/ "skeleton.dtsi" #include "skeleton.dtsi"
/ { / {
compatible = "samsung,exynos5440"; compatible = "samsung,exynos5440";
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
aliases {
spi0 = &spi_0;
};
clock: clock-controller@0x160000 { clock: clock-controller@0x160000 {
compatible = "samsung,exynos5440-clock"; compatible = "samsung,exynos5440-clock";
reg = <0x160000 0x1000>; reg = <0x160000 0x1000>;
...@@ -79,8 +83,13 @@ cpufreq@160000 { ...@@ -79,8 +83,13 @@ cpufreq@160000 {
interrupts = <0 57 0>; interrupts = <0 57 0>;
operating-points = < operating-points = <
/* KHz uV */ /* KHz uV */
1500000 1100000
1400000 1075000
1300000 1050000
1200000 1025000 1200000 1025000
1100000 1000000
1000000 975000 1000000 975000
900000 950000
800000 925000 800000 925000
>; >;
}; };
...@@ -101,14 +110,14 @@ serial@C0000 { ...@@ -101,14 +110,14 @@ serial@C0000 {
clock-names = "uart", "clk_uart_baud0"; clock-names = "uart", "clk_uart_baud0";
}; };
spi { spi_0: spi@D0000 {
compatible = "samsung,exynos4210-spi"; compatible = "samsung,exynos5440-spi";
reg = <0xD0000 0x1000>; reg = <0xD0000 0x100>;
interrupts = <0 4 0>; interrupts = <0 4 0>;
tx-dma-channel = <&pdma0 5>; /* preliminary */
rx-dma-channel = <&pdma0 4>; /* preliminary */
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
samsung,spi-src-clk = <0>;
num-cs = <1>;
clocks = <&clock 21>, <&clock 16>; clocks = <&clock 21>, <&clock 16>;
clock-names = "spi", "spi_busclk0"; clock-names = "spi", "spi_busclk0";
}; };
...@@ -184,28 +193,6 @@ amba { ...@@ -184,28 +193,6 @@ amba {
compatible = "arm,amba-bus"; compatible = "arm,amba-bus";
interrupt-parent = <&gic>; interrupt-parent = <&gic>;
ranges; ranges;
pdma0: pdma@00121000 {
compatible = "arm,pl330", "arm,primecell";
reg = <0x121000 0x1000>;
interrupts = <0 46 0>;
clocks = <&clock 8>;
clock-names = "apb_pclk";
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
};
pdma1: pdma@00120000 {
compatible = "arm,pl330", "arm,primecell";
reg = <0x120000 0x1000>;
interrupts = <0 47 0>;
clocks = <&clock 8>;
clock-names = "apb_pclk";
#dma-cells = <1>;
#dma-channels = <8>;
#dma-requests = <32>;
};
}; };
rtc { rtc {
...@@ -214,6 +201,29 @@ rtc { ...@@ -214,6 +201,29 @@ rtc {
interrupts = <0 17 0>, <0 16 0>; interrupts = <0 17 0>, <0 16 0>;
clocks = <&clock 21>; clocks = <&clock 21>;
clock-names = "rtc"; clock-names = "rtc";
status = "disabled"; };
sata@210000 {
compatible = "snps,exynos5440-ahci";
reg = <0x210000 0x10000>;
interrupts = <0 30 0>;
clocks = <&clock 23>;
clock-names = "sata";
};
ohci@220000 {
compatible = "samsung,exynos5440-ohci";
reg = <0x220000 0x1000>;
interrupts = <0 29 0>;
clocks = <&clock 24>;
clock-names = "usbhost";
};
ehci@221000 {
compatible = "samsung,exynos5440-ehci";
reg = <0x221000 0x1000>;
interrupts = <0 29 0>;
clocks = <&clock 24>;
clock-names = "usbhost";
}; };
}; };
/*
* Samsung S3C2416 pinctrl settings
*
* Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
&pinctrl_0 {
/*
* Pin banks
*/
gpa: gpa {
gpio-controller;
#gpio-cells = <2>;
};
gpb: gpb {
gpio-controller;
#gpio-cells = <2>;
};
gpc: gpc {
gpio-controller;
#gpio-cells = <2>;
};
gpd: gpd {
gpio-controller;
#gpio-cells = <2>;
};
gpe: gpe {
gpio-controller;
#gpio-cells = <2>;
};
gpf: gpf {
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
};
gpg: gpg {
gpio-controller;
#gpio-cells = <2>;
interrupt-controller;
#interrupt-cells = <2>;
};
gph: gph {
gpio-controller;
#gpio-cells = <2>;
};
gpj: gpj {
gpio-controller;
#gpio-cells = <2>;
};
gpk: gpk {
gpio-controller;
#gpio-cells = <2>;
};
gpl: gpl {
gpio-controller;
#gpio-cells = <2>;
};
gpm: gpm {
gpio-controller;
#gpio-cells = <2>;
};
/*
* Pin groups
*/
uart0_data: uart0-data {
samsung,pins = "gph-0", "gph-1";
samsung,pin-function = <2>;
};
uart0_fctl: uart0-fctl {
samsung,pins = "gph-8", "gph-9";
samsung,pin-function = <2>;
};
uart1_data: uart1-data {
samsung,pins = "gph-2", "gph-3";
samsung,pin-function = <2>;
};
uart1_fctl: uart1-fctl {
samsung,pins = "gph-10", "gph-11";
samsung,pin-function = <2>;
};
uart2_data: uart2-data {
samsung,pins = "gph-4", "gph-5";
samsung,pin-function = <2>;
};
uart2_fctl: uart2-fctl {
samsung,pins = "gph-6", "gph-7";
samsung,pin-function = <2>;
};
uart3_data: uart3-data {
samsung,pins = "gph-6", "gph-7";
samsung,pin-function = <2>;
};
extuart_clk: extuart-clk {
samsung,pins = "gph-12";
samsung,pin-function = <2>;
};
i2c0_bus: i2c0-bus {
samsung,pins = "gpe-14", "gpe-15";
samsung,pin-function = <2>;
};
spi0_bus: spi0-bus {
samsung,pins = "gpe-11", "gpe-12", "gpe-13";
samsung,pin-function = <2>;
};
sd0_clk: sd0-clk {
samsung,pins = "gpe-5";
samsung,pin-function = <2>;
};
sd0_cmd: sd0-cmd {
samsung,pins = "gpe-6";
samsung,pin-function = <2>;
};
sd0_bus1: sd0-bus1 {
samsung,pins = "gpe-7";
samsung,pin-function = <2>;
};
sd0_bus4: sd0-bus4 {
samsung,pins = "gpe-8", "gpe-9", "gpe-10";
samsung,pin-function = <2>;
};
sd1_cmd: sd1-cmd {
samsung,pins = "gpl-8";
samsung,pin-function = <2>;
};
sd1_clk: sd1-clk {
samsung,pins = "gpl-9";
samsung,pin-function = <2>;
};
sd1_bus1: sd1-bus1 {
samsung,pins = "gpl-0";
samsung,pin-function = <2>;
};
sd1_bus4: sd1-bus4 {
samsung,pins = "gpl-1", "gpl-2", "gpl-3";
samsung,pin-function = <2>;
};
};
/*
* SAMSUNG SMDK2416 board device tree source
*
* Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
/dts-v1/;
#include "s3c2416.dtsi"
/ {
model = "SMDK2416";
compatible = "samsung,s3c2416";
memory {
reg = <0x30000000 0x4000000>;
};
serial@50000000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart0_data>, <&uart0_fctl>;
};
serial@50004000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart1_data>, <&uart1_fctl>;
};
serial@50008000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart2_data>;
};
serial@5000C000 {
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <&uart3_data>;
};
watchdog@53000000 {
status = "okay";
};
rtc@57000000 {
status = "okay";
};
sdhci@4AC00000 {
pinctrl-names = "default";
pinctrl-0 = <&sd0_clk>, <&sd0_cmd>,
<&sd0_bus1>, <&sd0_bus4>;
bus-width = <4>;
cd-gpios = <&gpf 1 0>;
cd-inverted;
status = "okay";
};
sdhci@4A800000 {
pinctrl-names = "default";
pinctrl-0 = <&sd1_clk>, <&sd1_cmd>,
<&sd1_bus1>, <&sd1_bus4>;
bus-width = <4>;
broken-cd;
status = "okay";
};
};
/*
* Samsung's S3C2416 SoC device tree source
*
* Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include "s3c24xx.dtsi"
#include "s3c2416-pinctrl.dtsi"
/ {
model = "Samsung S3C2416 SoC";
compatible = "samsung,s3c2416";
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu {
compatible = "arm,arm926ejs";
};
};
interrupt-controller@4a000000 {
compatible = "samsung,s3c2416-irq";
};
pinctrl@56000000 {
compatible = "samsung,s3c2416-pinctrl";
};
serial@50000000 {
compatible = "samsung,s3c2440-uart";
};
serial@50004000 {
compatible = "samsung,s3c2440-uart";
};
serial@50008000 {
compatible = "samsung,s3c2440-uart";
};
serial@5000C000 {
compatible = "samsung,s3c2440-uart";
reg = <0x5000C000 0x4000>;
interrupts = <1 18 24 4>, <1 18 25 4>;
status = "disabled";
};
sdhci@4AC00000 {
compatible = "samsung,s3c6410-sdhci";
reg = <0x4AC00000 0x100>;
interrupts = <0 0 21 3>;
status = "disabled";
};
sdhci@4A800000 {
compatible = "samsung,s3c6410-sdhci";
reg = <0x4A800000 0x100>;
interrupts = <0 0 20 3>;
status = "disabled";
};
watchdog@53000000 {
interrupts = <1 9 27 3>;
};
rtc@57000000 {
compatible = "samsung,s3c2416-rtc";
};
i2c@54000000 {
compatible = "samsung,s3c2440-i2c";
};
};
/*
* Samsung's S3C24XX family device tree source
*
* Copyright (c) 2013 Heiko Stuebner <heiko@sntech.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include "skeleton.dtsi"
/ {
compatible = "samsung,s3c24xx";
interrupt-parent = <&intc>;
aliases {
pinctrl0 = &pinctrl_0;
};
intc:interrupt-controller@4a000000 {
compatible = "samsung,s3c2410-irq";
reg = <0x4a000000 0x100>;
interrupt-controller;
#interrupt-cells = <4>;
};
pinctrl_0: pinctrl@56000000 {
reg = <0x56000000 0x1000>;
wakeup-interrupt-controller {
compatible = "samsung,s3c2410-wakeup-eint";
interrupts = <0 0 0 3>,
<0 0 1 3>,
<0 0 2 3>,
<0 0 3 3>,
<0 0 4 4>,
<0 0 5 4>;
};
};
timer@51000000 {
compatible = "samsung,s3c2410-pwm";
reg = <0x51000000 0x1000>;
interrupts = <0 0 10 3>, <0 0 11 3>, <0 0 12 3>, <0 0 13 3>, <0 0 14 3>;
#pwm-cells = <4>;
};
serial@50000000 {
compatible = "samsung,s3c2410-uart";
reg = <0x50000000 0x4000>;
interrupts = <1 28 0 4>, <1 28 1 4>;
status = "disabled";
};
serial@50004000 {
compatible = "samsung,s3c2410-uart";
reg = <0x50004000 0x4000>;
interrupts = <1 23 3 4>, <1 23 4 4>;
status = "disabled";
};
serial@50008000 {
compatible = "samsung,s3c2410-uart";
reg = <0x50008000 0x4000>;
interrupts = <1 15 6 4>, <1 15 7 4>;
status = "disabled";
};
watchdog@53000000 {
compatible = "samsung,s3c2410-wdt";
reg = <0x53000000 0x100>;
interrupts = <0 0 9 3>;
status = "disabled";
};
rtc@57000000 {
compatible = "samsung,s3c2410-rtc";
reg = <0x57000000 0x100>;
interrupts = <0 0 30 3>, <0 0 8 3>;
status = "disabled";
};
i2c@54000000 {
compatible = "samsung,s3c2410-i2c";
reg = <0x54000000 0x100>;
interrupts = <0 0 27 3>;
#address-cells = <1>;
#size-cells = <0>;
status = "disabled";
};
};
...@@ -71,6 +71,16 @@ config SOC_EXYNOS5250 ...@@ -71,6 +71,16 @@ config SOC_EXYNOS5250
help help
Enable EXYNOS5250 SoC support Enable EXYNOS5250 SoC support
config SOC_EXYNOS5420
bool "SAMSUNG EXYNOS5420"
default y
depends on ARCH_EXYNOS5
select PM_GENERIC_DOMAINS if PM
select S5P_PM if PM
select S5P_SLEEP if PM
help
Enable EXYNOS5420 SoC support
config SOC_EXYNOS5440 config SOC_EXYNOS5440
bool "SAMSUNG EXYNOS5440" bool "SAMSUNG EXYNOS5440"
default y default y
......
...@@ -64,6 +64,7 @@ static const char name_exynos4210[] = "EXYNOS4210"; ...@@ -64,6 +64,7 @@ static const char name_exynos4210[] = "EXYNOS4210";
static const char name_exynos4212[] = "EXYNOS4212"; static const char name_exynos4212[] = "EXYNOS4212";
static const char name_exynos4412[] = "EXYNOS4412"; static const char name_exynos4412[] = "EXYNOS4412";
static const char name_exynos5250[] = "EXYNOS5250"; static const char name_exynos5250[] = "EXYNOS5250";
static const char name_exynos5420[] = "EXYNOS5420";
static const char name_exynos5440[] = "EXYNOS5440"; static const char name_exynos5440[] = "EXYNOS5440";
static void exynos4_map_io(void); static void exynos4_map_io(void);
...@@ -102,6 +103,12 @@ static struct cpu_table cpu_ids[] __initdata = { ...@@ -102,6 +103,12 @@ static struct cpu_table cpu_ids[] __initdata = {
.map_io = exynos5_map_io, .map_io = exynos5_map_io,
.init = exynos_init, .init = exynos_init,
.name = name_exynos5250, .name = name_exynos5250,
}, {
.idcode = EXYNOS5420_SOC_ID,
.idmask = EXYNOS5_SOC_MASK,
.map_io = exynos5_map_io,
.init = exynos_init,
.name = name_exynos5420,
}, { }, {
.idcode = EXYNOS5440_SOC_ID, .idcode = EXYNOS5440_SOC_ID,
.idmask = EXYNOS5_SOC_MASK, .idmask = EXYNOS5_SOC_MASK,
...@@ -322,10 +329,10 @@ void exynos5_restart(char mode, const char *cmd) ...@@ -322,10 +329,10 @@ void exynos5_restart(char mode, const char *cmd)
u32 val; u32 val;
void __iomem *addr; void __iomem *addr;
if (of_machine_is_compatible("samsung,exynos5250")) { val = 0x1;
val = 0x1; addr = EXYNOS_SWRESET;
addr = EXYNOS_SWRESET;
} else if (of_machine_is_compatible("samsung,exynos5440")) { if (of_machine_is_compatible("samsung,exynos5440")) {
u32 status; u32 status;
np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock"); np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock");
...@@ -336,9 +343,6 @@ void exynos5_restart(char mode, const char *cmd) ...@@ -336,9 +343,6 @@ void exynos5_restart(char mode, const char *cmd)
val = __raw_readl(addr); val = __raw_readl(addr);
val = (val & 0xffff0000) | (status & 0xffff); val = (val & 0xffff0000) | (status & 0xffff);
} else {
pr_err("%s: cannot support non-DT\n", __func__);
return;
} }
__raw_writel(val, addr); __raw_writel(val, addr);
......
...@@ -31,13 +31,12 @@ static void arch_detect_cpu(void) ...@@ -31,13 +31,12 @@ static void arch_detect_cpu(void)
/* /*
* product_id is bits 31:12 * product_id is bits 31:12
* bits 23:20 describe the exynosX family * bits 23:20 describe the exynosX family
* * bits 27:24 describe the exynosX family in exynos5420
*/ */
chip_id >>= 20; chip_id >>= 20;
chip_id &= 0xf;
if (chip_id == 0x5) if ((chip_id & 0x0f) == 0x5 || (chip_id & 0xf0) == 0x50)
uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT); uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
else else
uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT); uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
......
...@@ -57,6 +57,7 @@ static void __init exynos5_dt_machine_init(void) ...@@ -57,6 +57,7 @@ static void __init exynos5_dt_machine_init(void)
static char const *exynos5_dt_compat[] __initdata = { static char const *exynos5_dt_compat[] __initdata = {
"samsung,exynos5250", "samsung,exynos5250",
"samsung,exynos5420",
"samsung,exynos5440", "samsung,exynos5440",
NULL NULL
}; };
......
...@@ -50,6 +50,8 @@ static inline void __iomem *cpu_boot_reg(int cpu) ...@@ -50,6 +50,8 @@ static inline void __iomem *cpu_boot_reg(int cpu)
boot_reg = cpu_boot_reg_base(); boot_reg = cpu_boot_reg_base();
if (soc_is_exynos4412()) if (soc_is_exynos4412())
boot_reg += 4*cpu; boot_reg += 4*cpu;
else if (soc_is_exynos5420())
boot_reg += 4;
return boot_reg; return boot_reg;
} }
...@@ -180,10 +182,14 @@ static void __init exynos_smp_init_cpus(void) ...@@ -180,10 +182,14 @@ static void __init exynos_smp_init_cpus(void)
void __iomem *scu_base = scu_base_addr(); void __iomem *scu_base = scu_base_addr();
unsigned int i, ncores; unsigned int i, ncores;
if (soc_is_exynos5250()) if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
ncores = 2;
else
ncores = scu_base ? scu_get_core_count(scu_base) : 1; ncores = scu_base ? scu_get_core_count(scu_base) : 1;
else
/*
* CPU Nodes are passed thru DT and set_cpu_possible
* is set by "arm_dt_init_cpu_maps".
*/
return;
/* sanity check */ /* sanity check */
if (ncores > nr_cpu_ids) { if (ncores > nr_cpu_ids) {
......
...@@ -490,6 +490,18 @@ config MACH_SMDK2416 ...@@ -490,6 +490,18 @@ config MACH_SMDK2416
help help
Say Y here if you are using an SMDK2416 Say Y here if you are using an SMDK2416
config MACH_S3C2416_DT
bool "Samsung S3C2416 machine using devicetree"
select CLKSRC_OF
select USE_OF
select PINCTRL
select PINCTRL_S3C24XX
help
Machine support for Samsung S3C2416 machines with device tree enabled.
Select this if a fdt blob is available for the S3C2416 SoC based board.
Note: This is under development and not all peripherals can be supported
with this machine file.
endif # CPU_S3C2416 endif # CPU_S3C2416
if CPU_S3C2440 if CPU_S3C2440
......
...@@ -85,6 +85,7 @@ obj-$(CONFIG_MACH_SMDK2413) += mach-smdk2413.o ...@@ -85,6 +85,7 @@ obj-$(CONFIG_MACH_SMDK2413) += mach-smdk2413.o
obj-$(CONFIG_MACH_VSTMS) += mach-vstms.o obj-$(CONFIG_MACH_VSTMS) += mach-vstms.o
obj-$(CONFIG_MACH_SMDK2416) += mach-smdk2416.o obj-$(CONFIG_MACH_SMDK2416) += mach-smdk2416.o
obj-$(CONFIG_MACH_S3C2416_DT) += mach-s3c2416-dt.o
obj-$(CONFIG_MACH_ANUBIS) += mach-anubis.o obj-$(CONFIG_MACH_ANUBIS) += mach-anubis.o
obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o obj-$(CONFIG_MACH_AT2440EVB) += mach-at2440evb.o
......
/*
* Samsung's S3C2416 flattened device tree enabled machine
*
* Copyright (c) 2012 Heiko Stuebner <heiko@sntech.de>
*
* based on mach-exynos/mach-exynos4-dt.c
*
* Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
* http://www.samsung.com
* Copyright (c) 2010-2011 Linaro Ltd.
* www.linaro.org
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/clocksource.h>
#include <linux/irqchip.h>
#include <linux/of_platform.h>
#include <linux/serial_core.h>
#include <asm/mach/arch.h>
#include <mach/map.h>
#include <plat/cpu.h>
#include <plat/pm.h>
#include <plat/regs-serial.h>
#include "common.h"
/*
* The following lookup table is used to override device names when devices
* are registered from device tree. This is temporarily added to enable
* device tree support addition for the S3C2416 architecture.
*
* For drivers that require platform data to be provided from the machine
* file, a platform data pointer can also be supplied along with the
* devices names. Usually, the platform data elements that cannot be parsed
* from the device tree by the drivers (example: function pointers) are
* supplied. But it should be noted that this is a temporary mechanism and
* at some point, the drivers should be capable of parsing all the platform
* data from the device tree.
*/
static const struct of_dev_auxdata s3c2416_auxdata_lookup[] __initconst = {
OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C24XX_PA_UART,
"s3c2440-uart.0", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C24XX_PA_UART + 0x4000,
"s3c2440-uart.1", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C24XX_PA_UART + 0x8000,
"s3c2440-uart.2", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-uart", S3C24XX_PA_UART + 0xC000,
"s3c2440-uart.3", NULL),
OF_DEV_AUXDATA("samsung,s3c6410-sdhci", S3C_PA_HSMMC0,
"s3c-sdhci.0", NULL),
OF_DEV_AUXDATA("samsung,s3c6410-sdhci", S3C_PA_HSMMC1,
"s3c-sdhci.1", NULL),
OF_DEV_AUXDATA("samsung,s3c2440-i2c", S3C_PA_IIC,
"s3c2440-i2c.0", NULL),
{},
};
static void __init s3c2416_dt_map_io(void)
{
s3c24xx_init_io(NULL, 0);
s3c24xx_init_clocks(12000000);
}
static void __init s3c2416_dt_machine_init(void)
{
of_platform_populate(NULL, of_default_bus_match_table,
s3c2416_auxdata_lookup, NULL);
s3c_pm_init();
}
static char const *s3c2416_dt_compat[] __initdata = {
"samsung,s3c2416",
"samsung,s3c2450",
NULL
};
DT_MACHINE_START(S3C2416_DT, "Samsung S3C2416 (Flattened Device Tree)")
/* Maintainer: Heiko Stuebner <heiko@sntech.de> */
.dt_compat = s3c2416_dt_compat,
.map_io = s3c2416_dt_map_io,
.init_irq = irqchip_init,
.init_machine = s3c2416_dt_machine_init,
.init_time = clocksource_of_init,
.restart = s3c2416_restart,
MACHINE_END
...@@ -46,6 +46,7 @@ extern unsigned long samsung_cpu_id; ...@@ -46,6 +46,7 @@ extern unsigned long samsung_cpu_id;
#define EXYNOS4_CPU_MASK 0xFFFE0000 #define EXYNOS4_CPU_MASK 0xFFFE0000
#define EXYNOS5250_SOC_ID 0x43520000 #define EXYNOS5250_SOC_ID 0x43520000
#define EXYNOS5420_SOC_ID 0xE5420000
#define EXYNOS5440_SOC_ID 0xE5440000 #define EXYNOS5440_SOC_ID 0xE5440000
#define EXYNOS5_SOC_MASK 0xFFFFF000 #define EXYNOS5_SOC_MASK 0xFFFFF000
...@@ -67,6 +68,7 @@ IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK) ...@@ -67,6 +68,7 @@ IS_SAMSUNG_CPU(exynos4210, EXYNOS4210_CPU_ID, EXYNOS4_CPU_MASK)
IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK) IS_SAMSUNG_CPU(exynos4212, EXYNOS4212_CPU_ID, EXYNOS4_CPU_MASK)
IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK) IS_SAMSUNG_CPU(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_MASK)
IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK) IS_SAMSUNG_CPU(exynos5250, EXYNOS5250_SOC_ID, EXYNOS5_SOC_MASK)
IS_SAMSUNG_CPU(exynos5420, EXYNOS5420_SOC_ID, EXYNOS5_SOC_MASK)
IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK) IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK)
#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \ #if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \
...@@ -142,6 +144,12 @@ IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK) ...@@ -142,6 +144,12 @@ IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK)
# define soc_is_exynos5250() 0 # define soc_is_exynos5250() 0
#endif #endif
#if defined(CONFIG_SOC_EXYNOS5420)
# define soc_is_exynos5420() is_samsung_exynos5420()
#else
# define soc_is_exynos5420() 0
#endif
#if defined(CONFIG_SOC_EXYNOS5440) #if defined(CONFIG_SOC_EXYNOS5440)
# define soc_is_exynos5440() is_samsung_exynos5440() # define soc_is_exynos5440() is_samsung_exynos5440()
#else #else
......
...@@ -5,4 +5,6 @@ ...@@ -5,4 +5,6 @@
obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o
obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o
obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o
obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o
obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o
obj-$(CONFIG_ARCH_EXYNOS) += clk-exynos-audss.o
/*
* Copyright (c) 2013 Samsung Electronics Co., Ltd.
* Author: Padmavathi Venna <padma.v@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Common Clock Framework support for Audio Subsystem Clock Controller.
*/
#include <linux/clkdev.h>
#include <linux/io.h>
#include <linux/clk-provider.h>
#include <linux/of_address.h>
#include <linux/syscore_ops.h>
#include <dt-bindings/clk/exynos-audss-clk.h>
static DEFINE_SPINLOCK(lock);
static struct clk **clk_table;
static void __iomem *reg_base;
static struct clk_onecell_data clk_data;
#define ASS_CLK_SRC 0x0
#define ASS_CLK_DIV 0x4
#define ASS_CLK_GATE 0x8
static unsigned long reg_save[][2] = {
{ASS_CLK_SRC, 0},
{ASS_CLK_DIV, 0},
{ASS_CLK_GATE, 0},
};
/* list of all parent clock list */
static const char *mout_audss_p[] = { "fin_pll", "fout_epll" };
static const char *mout_i2s_p[] = { "mout_audss", "cdclk0", "sclk_audio0" };
#ifdef CONFIG_PM_SLEEP
static int exynos_audss_clk_suspend(void)
{
int i;
for (i = 0; i < ARRAY_SIZE(reg_save); i++)
reg_save[i][1] = readl(reg_base + reg_save[i][0]);
return 0;
}
static void exynos_audss_clk_resume(void)
{
int i;
for (i = 0; i < ARRAY_SIZE(reg_save); i++)
writel(reg_save[i][1], reg_base + reg_save[i][0]);
}
static struct syscore_ops exynos_audss_clk_syscore_ops = {
.suspend = exynos_audss_clk_suspend,
.resume = exynos_audss_clk_resume,
};
#endif /* CONFIG_PM_SLEEP */
/* register exynos_audss clocks */
void __init exynos_audss_clk_init(struct device_node *np)
{
reg_base = of_iomap(np, 0);
if (!reg_base) {
pr_err("%s: failed to map audss registers\n", __func__);
return;
}
clk_table = kzalloc(sizeof(struct clk *) * EXYNOS_AUDSS_MAX_CLKS,
GFP_KERNEL);
if (!clk_table) {
pr_err("%s: could not allocate clk lookup table\n", __func__);
return;
}
clk_data.clks = clk_table;
clk_data.clk_num = EXYNOS_AUDSS_MAX_CLKS;
of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
clk_table[EXYNOS_MOUT_AUDSS] = clk_register_mux(NULL, "mout_audss",
mout_audss_p, ARRAY_SIZE(mout_audss_p), 0,
reg_base + ASS_CLK_SRC, 0, 1, 0, &lock);
clk_table[EXYNOS_MOUT_I2S] = clk_register_mux(NULL, "mout_i2s",
mout_i2s_p, ARRAY_SIZE(mout_i2s_p), 0,
reg_base + ASS_CLK_SRC, 2, 2, 0, &lock);
clk_table[EXYNOS_DOUT_SRP] = clk_register_divider(NULL, "dout_srp",
"mout_audss", 0, reg_base + ASS_CLK_DIV, 0, 4,
0, &lock);
clk_table[EXYNOS_DOUT_AUD_BUS] = clk_register_divider(NULL,
"dout_aud_bus", "dout_srp", 0,
reg_base + ASS_CLK_DIV, 4, 4, 0, &lock);
clk_table[EXYNOS_DOUT_I2S] = clk_register_divider(NULL, "dout_i2s",
"mout_i2s", 0, reg_base + ASS_CLK_DIV, 8, 4, 0,
&lock);
clk_table[EXYNOS_SRP_CLK] = clk_register_gate(NULL, "srp_clk",
"dout_srp", CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_GATE, 0, 0, &lock);
clk_table[EXYNOS_I2S_BUS] = clk_register_gate(NULL, "i2s_bus",
"dout_aud_bus", CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_GATE, 2, 0, &lock);
clk_table[EXYNOS_SCLK_I2S] = clk_register_gate(NULL, "sclk_i2s",
"dout_i2s", CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_GATE, 3, 0, &lock);
clk_table[EXYNOS_PCM_BUS] = clk_register_gate(NULL, "pcm_bus",
"sclk_pcm", CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_GATE, 4, 0, &lock);
clk_table[EXYNOS_SCLK_PCM] = clk_register_gate(NULL, "sclk_pcm",
"div_pcm0", CLK_SET_RATE_PARENT,
reg_base + ASS_CLK_GATE, 5, 0, &lock);
#ifdef CONFIG_PM_SLEEP
register_syscore_ops(&exynos_audss_clk_syscore_ops);
#endif
pr_info("Exynos: Audss: clock setup completed\n");
}
CLK_OF_DECLARE(exynos4210_audss_clk, "samsung,exynos4210-audss-clock",
exynos_audss_clk_init);
CLK_OF_DECLARE(exynos5250_audss_clk, "samsung,exynos5250-audss-clock",
exynos_audss_clk_init);
...@@ -151,7 +151,7 @@ enum exynos4_clks { ...@@ -151,7 +151,7 @@ enum exynos4_clks {
sclk_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2, sclk_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2,
sclk_slimbus, sclk_fimd1, sclk_mipi1, sclk_pcm1, sclk_pcm2, sclk_i2s1, sclk_slimbus, sclk_fimd1, sclk_mipi1, sclk_pcm1, sclk_pcm2, sclk_i2s1,
sclk_i2s2, sclk_mipihsi, sclk_mfc, sclk_pcm0, sclk_g3d, sclk_pwm_isp, sclk_i2s2, sclk_mipihsi, sclk_mfc, sclk_pcm0, sclk_g3d, sclk_pwm_isp,
sclk_spi0_isp, sclk_spi1_isp, sclk_uart_isp, sclk_spi0_isp, sclk_spi1_isp, sclk_uart_isp, sclk_fimg2d,
/* gate clocks */ /* gate clocks */
fimc0 = 256, fimc1, fimc2, fimc3, csis0, csis1, jpeg, smmu_fimc0, fimc0 = 256, fimc1, fimc2, fimc3, csis0, csis1, jpeg, smmu_fimc0,
...@@ -484,6 +484,9 @@ struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = { ...@@ -484,6 +484,9 @@ struct samsung_mux_clock exynos4x12_mux_clks[] __initdata = {
MUX(none, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4), MUX(none, "mout_spi0_isp", group1_p4x12, E4X12_SRC_ISP, 4, 4),
MUX(none, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4), MUX(none, "mout_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 4),
MUX(none, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4), MUX(none, "mout_uart_isp", group1_p4x12, E4X12_SRC_ISP, 12, 4),
MUX(none, "mout_g2d0", sclk_ampll_p4210, SRC_DMC, 20, 1),
MUX(none, "mout_g2d1", sclk_evpll_p, SRC_DMC, 24, 1),
MUX(none, "mout_g2d", mout_g2d_p, SRC_DMC, 28, 1),
}; };
/* list of divider clocks supported in all exynos4 soc's */ /* list of divider clocks supported in all exynos4 soc's */
...@@ -552,7 +555,7 @@ struct samsung_div_clock exynos4_div_clks[] __initdata = { ...@@ -552,7 +555,7 @@ struct samsung_div_clock exynos4_div_clks[] __initdata = {
/* list of divider clocks supported in exynos4210 soc */ /* list of divider clocks supported in exynos4210 soc */
struct samsung_div_clock exynos4210_div_clks[] __initdata = { struct samsung_div_clock exynos4210_div_clks[] __initdata = {
DIV(aclk200, "aclk200", "mout_aclk200", DIV_TOP, 0, 3), DIV(aclk200, "aclk200", "mout_aclk200", DIV_TOP, 0, 3),
DIV(none, "div_g2d", "mout_g2d", DIV_IMAGE, 0, 4), DIV(sclk_fimg2d, "sclk_fimg2d", "mout_g2d", DIV_IMAGE, 0, 4),
DIV(none, "div_fimd1", "mout_fimd1", E4210_DIV_LCD1, 0, 4), DIV(none, "div_fimd1", "mout_fimd1", E4210_DIV_LCD1, 0, 4),
DIV(none, "div_mipi1", "mout_mipi1", E4210_DIV_LCD1, 16, 4), DIV(none, "div_mipi1", "mout_mipi1", E4210_DIV_LCD1, 16, 4),
DIV(none, "div_sata", "mout_sata", DIV_FSYS0, 20, 4), DIV(none, "div_sata", "mout_sata", DIV_FSYS0, 20, 4),
...@@ -582,6 +585,7 @@ struct samsung_div_clock exynos4x12_div_clks[] __initdata = { ...@@ -582,6 +585,7 @@ struct samsung_div_clock exynos4x12_div_clks[] __initdata = {
DIV(none, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3), DIV(none, "div_mpwm", "div_isp1", E4X12_DIV_ISP1, 0, 3),
DIV(div_mcuisp0, "div_mcuisp0", "aclk400_mcuisp", E4X12_DIV_ISP1, 4, 3), DIV(div_mcuisp0, "div_mcuisp0", "aclk400_mcuisp", E4X12_DIV_ISP1, 4, 3),
DIV(div_mcuisp1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1, 8, 3), DIV(div_mcuisp1, "div_mcuisp1", "div_mcuisp0", E4X12_DIV_ISP1, 8, 3),
DIV(sclk_fimg2d, "sclk_fimg2d", "mout_g2d", DIV_DMC1, 0, 4),
}; };
/* list of gate clocks supported in all exynos4 soc's */ /* list of gate clocks supported in all exynos4 soc's */
...@@ -909,6 +913,7 @@ struct samsung_gate_clock exynos4x12_gate_clks[] __initdata = { ...@@ -909,6 +913,7 @@ struct samsung_gate_clock exynos4x12_gate_clks[] __initdata = {
CLK_IGNORE_UNUSED, 0), CLK_IGNORE_UNUSED, 0),
GATE(spi1_isp, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13, GATE(spi1_isp, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
CLK_IGNORE_UNUSED, 0), CLK_IGNORE_UNUSED, 0),
GATE(g2d, "g2d", "aclk200", GATE_IP_DMC, 23, 0, 0),
}; };
/* /*
......
...@@ -87,6 +87,7 @@ enum exynos5250_clks { ...@@ -87,6 +87,7 @@ enum exynos5250_clks {
sclk_mmc0, sclk_mmc1, sclk_mmc2, sclk_mmc3, sclk_sata, sclk_usb3, sclk_mmc0, sclk_mmc1, sclk_mmc2, sclk_mmc3, sclk_sata, sclk_usb3,
sclk_jpeg, sclk_uart0, sclk_uart1, sclk_uart2, sclk_uart3, sclk_pwm, sclk_jpeg, sclk_uart0, sclk_uart1, sclk_uart2, sclk_uart3, sclk_pwm,
sclk_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2, sclk_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2,
div_i2s1, div_i2s2,
/* gate clocks */ /* gate clocks */
gscl0 = 256, gscl1, gscl2, gscl3, gscl_wa, gscl_wb, smmu_gscl0, gscl0 = 256, gscl1, gscl2, gscl3, gscl_wa, gscl_wb, smmu_gscl0,
...@@ -291,8 +292,8 @@ struct samsung_div_clock exynos5250_div_clks[] __initdata = { ...@@ -291,8 +292,8 @@ struct samsung_div_clock exynos5250_div_clks[] __initdata = {
DIV(none, "div_pcm1", "sclk_audio1", DIV_PERIC4, 4, 8), DIV(none, "div_pcm1", "sclk_audio1", DIV_PERIC4, 4, 8),
DIV(none, "div_audio2", "mout_audio2", DIV_PERIC4, 16, 4), DIV(none, "div_audio2", "mout_audio2", DIV_PERIC4, 16, 4),
DIV(none, "div_pcm2", "sclk_audio2", DIV_PERIC4, 20, 8), DIV(none, "div_pcm2", "sclk_audio2", DIV_PERIC4, 20, 8),
DIV(none, "div_i2s1", "sclk_audio1", DIV_PERIC5, 0, 6), DIV(div_i2s1, "div_i2s1", "sclk_audio1", DIV_PERIC5, 0, 6),
DIV(none, "div_i2s2", "sclk_audio2", DIV_PERIC5, 8, 6), DIV(div_i2s2, "div_i2s2", "sclk_audio2", DIV_PERIC5, 8, 6),
DIV(sclk_pixel, "div_hdmi_pixel", "sclk_vpll", DIV_DISP1_0, 28, 4), DIV(sclk_pixel, "div_hdmi_pixel", "sclk_vpll", DIV_DISP1_0, 28, 4),
DIV_A(none, "armclk", "div_arm", DIV_CPU0, 28, 3, "armclk"), DIV_A(none, "armclk", "div_arm", DIV_CPU0, 28, 3, "armclk"),
DIV_F(none, "div_mipi1_pre", "div_mipi1", DIV_F(none, "div_mipi1_pre", "div_mipi1",
......
This diff is collapsed.
...@@ -400,18 +400,6 @@ static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id) ...@@ -400,18 +400,6 @@ static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static struct irqaction mct_tick0_event_irq = {
.name = "mct_tick0_irq",
.flags = IRQF_TIMER | IRQF_NOBALANCING,
.handler = exynos4_mct_tick_isr,
};
static struct irqaction mct_tick1_event_irq = {
.name = "mct_tick1_irq",
.flags = IRQF_TIMER | IRQF_NOBALANCING,
.handler = exynos4_mct_tick_isr,
};
static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt) static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
{ {
struct mct_clock_event_device *mevt; struct mct_clock_event_device *mevt;
...@@ -435,16 +423,15 @@ static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt) ...@@ -435,16 +423,15 @@ static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET); exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
if (mct_int_type == MCT_INT_SPI) { if (mct_int_type == MCT_INT_SPI) {
if (cpu == 0) { evt->irq = mct_irqs[MCT_L0_IRQ + cpu];
mct_tick0_event_irq.dev_id = mevt; if (request_irq(evt->irq, exynos4_mct_tick_isr,
evt->irq = mct_irqs[MCT_L0_IRQ]; IRQF_TIMER | IRQF_NOBALANCING,
setup_irq(evt->irq, &mct_tick0_event_irq); evt->name, mevt)) {
} else { pr_err("exynos-mct: cannot register IRQ %d\n",
mct_tick1_event_irq.dev_id = mevt; evt->irq);
evt->irq = mct_irqs[MCT_L1_IRQ]; return -EIO;
setup_irq(evt->irq, &mct_tick1_event_irq);
irq_set_affinity(evt->irq, cpumask_of(1));
} }
irq_set_affinity(evt->irq, cpumask_of(cpu));
} else { } else {
enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0); enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0);
} }
...@@ -454,13 +441,9 @@ static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt) ...@@ -454,13 +441,9 @@ static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
static void exynos4_local_timer_stop(struct clock_event_device *evt) static void exynos4_local_timer_stop(struct clock_event_device *evt)
{ {
unsigned int cpu = smp_processor_id();
evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt); evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);
if (mct_int_type == MCT_INT_SPI) if (mct_int_type == MCT_INT_SPI)
if (cpu == 0) free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick));
remove_irq(evt->irq, &mct_tick0_event_irq);
else
remove_irq(evt->irq, &mct_tick1_event_irq);
else else
disable_percpu_irq(mct_irqs[MCT_L0_IRQ]); disable_percpu_irq(mct_irqs[MCT_L0_IRQ]);
} }
......
...@@ -1713,9 +1713,7 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { ...@@ -1713,9 +1713,7 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = {
#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL #define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL
#endif #endif
#if defined(CONFIG_CPU_EXYNOS4210) || defined(CONFIG_SOC_EXYNOS4212) || \ #if defined(CONFIG_ARCH_EXYNOS)
defined(CONFIG_SOC_EXYNOS4412) || defined(CONFIG_SOC_EXYNOS5250) || \
defined(CONFIG_SOC_EXYNOS5440)
static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = { static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = {
.info = &(struct s3c24xx_uart_info) { .info = &(struct s3c24xx_uart_info) {
.name = "Samsung Exynos4 UART", .name = "Samsung Exynos4 UART",
......
/*
* This header provides constants for Samsung audio subsystem
* clock controller.
*
* The constants defined in this header are being used in dts
* and exynos audss driver.
*/
#ifndef _DT_BINDINGS_CLK_EXYNOS_AUDSS_H
#define _DT_BINDINGS_CLK_EXYNOS_AUDSS_H
#define EXYNOS_MOUT_AUDSS 0
#define EXYNOS_MOUT_I2S 1
#define EXYNOS_DOUT_SRP 2
#define EXYNOS_DOUT_AUD_BUS 3
#define EXYNOS_DOUT_I2S 4
#define EXYNOS_SRP_CLK 5
#define EXYNOS_I2S_BUS 6
#define EXYNOS_SCLK_I2S 7
#define EXYNOS_PCM_BUS 8
#define EXYNOS_SCLK_PCM 9
#define EXYNOS_AUDSS_MAX_CLKS 10
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment