based on tags/common-clk-audio
- add support for exynos5420 SoC -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) iQIcBAABAgAGBQJRwLDWAAoJEA0Cl+kVi2xqTAwP/iSe9eYS4OeNmmURH4hmeD+Q OTADXGs/CWzTeHBAXbJx/KUDtdRqvUDg38hwNZnuSTkyj8LLeGbqFn637mtVHZb0 i3NuGDv5W1WcBrqplmrGPOGyKfb0eNxPNCdK0g6w6eapHRmH/iNgbBE6ybEbAVyF RjWIOb+zcLfVW6w8VVPVFKhVo9yh0JPJxT7evc0tjWrTHstljDQDDLmx1owAQWna jKNL0S34fkDRJVGF1ehPhv33RFPkUljU0zSEKCyixg6RaU0/YAMnf6YooFS9xP1a YFgIZsoIqNQJv2rj/TgWn8MA0HhESYORTw/UEB1q3TvxM3GMxrF/W0o2tcIyawVb W94TnzQHDVyPIdm6rAgUbosZdRp0WxIg65st+w/A+uWySDn2V3+UE0ZBFLIMZsFu oHJh4vZFDBX8E2SkypkJo3oEZTBN7pTFsLzo1+0H76BMGz34fXtYFnMRDOWKvudQ 88tKJduZyuedZqvaLckdaLrJA1iLCM2x+lXkxlvy3FMn8EAmRoKdV1fefqpqpDCC iGgGzBWIVvRm2xUQ3SkW0cIny8S1lh1vwln9F2Vl/ZyoGlH/zr6IACrJuuMBNw/m yeZJ3qnMm4kRaANUm+W7wFiT8bQGRm9gFzBpPfMET/xu9MXO5+FTBCTp8qScIlHC 538ZZfg0N0mOgx4IQ2Xn =l2mp -----END PGP SIGNATURE----- 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: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
commit
e8f2ca9715
64
Documentation/devicetree/bindings/clock/clk-exynos-audss.txt
Normal file
64
Documentation/devicetree/bindings/clock/clk-exynos-audss.txt
Normal file
@ -0,0 +1,64 @@
|
||||
* 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.
|
||||
sclk_spi0_isp 174 Exynos4x12
|
||||
sclk_spi1_isp 175 Exynos4x12
|
||||
sclk_uart_isp 176 Exynos4x12
|
||||
sclk_fimg2d 177
|
||||
|
||||
[Peripheral Clock Gates]
|
||||
|
||||
@ -129,7 +130,7 @@ Exynos4 SoC and this is specified where applicable.
|
||||
smmu_mfcl 274
|
||||
smmu_mfcr 275
|
||||
g3d 276
|
||||
g2d 277 Exynos4210
|
||||
g2d 277
|
||||
rotator 278 Exynos4210
|
||||
mdma 279 Exynos4210
|
||||
smmu_g2d 280 Exynos4210
|
||||
|
201
Documentation/devicetree/bindings/clock/exynos5420-clock.txt
Normal file
201
Documentation/devicetree/bindings/clock/exynos5420-clock.txt
Normal file
@ -0,0 +1,201 @@
|
||||
* 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:
|
||||
mapped region.
|
||||
|
||||
- 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:
|
||||
g2d@12800000 {
|
||||
compatible = "samsung,s5pv210-g2d";
|
||||
reg = <0x12800000 0x1000>;
|
||||
interrupts = <0 89 0>;
|
||||
clocks = <&clock 177>, <&clock 277>;
|
||||
clock-names = "sclk_fimg2d", "fimg2d";
|
||||
status = "disabled";
|
||||
};
|
||||
|
@ -15,6 +15,9 @@ Required properties:
|
||||
mapped region.
|
||||
|
||||
- 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
|
||||
for DMA contiguous memory allocation and its size.
|
||||
@ -34,6 +37,8 @@ mfc: codec@13400000 {
|
||||
reg = <0x13400000 0x10000>;
|
||||
interrupts = <0 94 0>;
|
||||
samsung,power-domain = <&pd_mfc>;
|
||||
clocks = <&clock 170>, <&clock 273>;
|
||||
clock-names = "sclk_mfc", "mfc";
|
||||
};
|
||||
|
||||
Board specific DT entry:
|
||||
|
@ -21,8 +21,18 @@ Required Properties:
|
||||
|
||||
- gpio-controller: identifies the node as a gpio controller and pin bank.
|
||||
- #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
|
||||
GPIO binding documentation for description of particular cells.
|
||||
binding is used, the amount of cells must be specified as 2. See the below
|
||||
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
|
||||
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.
|
||||
|
||||
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:
|
||||
- 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.
|
||||
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:
|
||||
|
||||
@ -20,44 +30,26 @@ Optional SoC Specific Properties:
|
||||
then this flag is enabled.
|
||||
- samsung,idma-addr: Internal DMA register base address of the audio
|
||||
sub system(used in secondary sound source).
|
||||
|
||||
Required Board Specific Properties:
|
||||
|
||||
- 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]>
|
||||
- pinctrl-0: Should specify pin control groups used for this controller.
|
||||
- pinctrl-names: Should contain only one value - "default".
|
||||
|
||||
Example:
|
||||
|
||||
- SoC Specific Portion:
|
||||
|
||||
i2s@03830000 {
|
||||
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-names = "iis", "i2s_opclk0", "i2s_opclk1";
|
||||
samsung,supports-6ch;
|
||||
samsung,supports-rstclr;
|
||||
samsung,supports-secdai;
|
||||
samsung,idma-addr = <0x03000000>;
|
||||
};
|
||||
|
||||
- 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] */
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2s0_bus>;
|
||||
};
|
||||
|
@ -48,3 +48,37 @@ Example:
|
||||
clocks = <&clock 285>;
|
||||
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:
|
||||
of memory mapped region.
|
||||
-interrupts:
|
||||
interrupt combiner values.
|
||||
-clocks:
|
||||
from common clock binding: handle to dp clock.
|
||||
-clock-names:
|
||||
from common clock binding: Shall be "dp".
|
||||
-interrupt-parent:
|
||||
phandle to Interrupt combiner node.
|
||||
-samsung,color-space:
|
||||
@ -61,6 +65,8 @@ SOC specific portion:
|
||||
reg = <0x145b0000 0x10000>;
|
||||
interrupts = <10 3>;
|
||||
interrupt-parent = <&combiner>;
|
||||
clocks = <&clock 342>;
|
||||
clock-names = "dp";
|
||||
|
||||
dptx-phy {
|
||||
reg = <0x10040720>;
|
||||
|
@ -57,6 +57,7 @@ dtb-$(CONFIG_ARCH_EXYNOS) += exynos4210-origen.dtb \
|
||||
exynos5440-sd5v1.dtb \
|
||||
exynos5250-smdk5250.dtb \
|
||||
exynos5250-snow.dtb \
|
||||
exynos5420-smdk5420.dtb \
|
||||
exynos5440-ssdk5440.dtb
|
||||
dtb-$(CONFIG_ARCH_HIGHBANK) += highbank.dtb \
|
||||
ecx-2000.dtb
|
||||
@ -159,6 +160,7 @@ dtb-$(CONFIG_ARCH_U8500) += snowball.dtb \
|
||||
hrefprev60.dtb \
|
||||
hrefv60plus.dtb \
|
||||
ccu9540.dtb
|
||||
dtb-$(CONFIG_ARCH_S3C24XX) += s3c2416-smdk2416.dtb
|
||||
dtb-$(CONFIG_ARCH_SHMOBILE) += emev2-kzm9d.dtb \
|
||||
r8a7740-armadillo800eva.dtb \
|
||||
r8a7778-bockw.dtb \
|
||||
|
@ -19,7 +19,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
#include "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
interrupt-parent = <&gic>;
|
||||
@ -160,6 +160,8 @@
|
||||
reg = <0x13400000 0x10000>;
|
||||
interrupts = <0 94 0>;
|
||||
samsung,power-domain = <&pd_mfc>;
|
||||
clocks = <&clock 170>, <&clock 273>;
|
||||
clock-names = "sclk_mfc", "mfc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4210.dtsi"
|
||||
#include "exynos4210.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Insignal Origen evaluation board based on Exynos4210";
|
||||
@ -41,6 +41,10 @@
|
||||
enable-active-high;
|
||||
};
|
||||
|
||||
tmu@100C0000 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
sdhci@12530000 {
|
||||
bus-width = <4>;
|
||||
pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
|
||||
@ -83,6 +87,150 @@
|
||||
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 {
|
||||
compatible = "gpio-keys";
|
||||
#address-cells = <1>;
|
||||
@ -143,4 +291,25 @@
|
||||
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 @@
|
||||
samsung,pin-pud = <3>;
|
||||
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 {
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4210.dtsi"
|
||||
#include "exynos4210.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Samsung smdkv310 evaluation board based on Exynos4210";
|
||||
|
@ -13,7 +13,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4210.dtsi"
|
||||
#include "exynos4210.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Samsung Trats based on Exynos4210";
|
||||
|
@ -13,7 +13,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4210.dtsi"
|
||||
#include "exynos4210.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Samsung Universal C210 based on Exynos4210 rev0";
|
||||
|
@ -19,8 +19,8 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "exynos4.dtsi"
|
||||
/include/ "exynos4210-pinctrl.dtsi"
|
||||
#include "exynos4.dtsi"
|
||||
#include "exynos4210-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "samsung,exynos4210";
|
||||
@ -112,12 +112,17 @@
|
||||
interrupt-parent = <&combiner>;
|
||||
reg = <0x100C0000 0x100>;
|
||||
interrupts = <2 4>;
|
||||
clocks = <&clock 383>;
|
||||
clock-names = "tmu_apbif";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
g2d@12800000 {
|
||||
compatible = "samsung,s5pv210-g2d";
|
||||
reg = <0x12800000 0x1000>;
|
||||
interrupts = <0 89 0>;
|
||||
clocks = <&clock 177>, <&clock 277>;
|
||||
clock-names = "sclk_fimg2d", "fimg2d";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
@ -17,7 +17,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "exynos4x12.dtsi"
|
||||
#include "exynos4x12.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "samsung,exynos4212";
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4412.dtsi"
|
||||
#include "exynos4412.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Hardkernel ODROID-X board based on Exynos4412";
|
||||
@ -43,6 +43,7 @@
|
||||
#size-cells = <0>;
|
||||
pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
|
||||
pinctrl-names = "default";
|
||||
vmmc-supply = <&ldo20_reg &buck8_reg>;
|
||||
status = "okay";
|
||||
|
||||
num-slots = <1>;
|
||||
@ -78,6 +79,7 @@
|
||||
bus-width = <4>;
|
||||
pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;
|
||||
pinctrl-names = "default";
|
||||
vmmc-supply = <&ldo4_reg &ldo21_reg>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@ -108,4 +110,199 @@
|
||||
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 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4412.dtsi"
|
||||
#include "exynos4412.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Insignal Origen evaluation board based on Exynos4412";
|
||||
@ -36,6 +36,72 @@
|
||||
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 {
|
||||
bus-width = <4>;
|
||||
pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
|
||||
|
@ -13,7 +13,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos4412.dtsi"
|
||||
#include "exynos4412.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Samsung SMDK evaluation board based on Exynos4412";
|
||||
@ -31,8 +31,91 @@
|
||||
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";
|
||||
|
||||
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 {
|
||||
|
@ -17,7 +17,7 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "exynos4x12.dtsi"
|
||||
#include "exynos4x12.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "samsung,exynos4412";
|
||||
|
@ -778,62 +778,6 @@
|
||||
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 {
|
||||
samsung,pins = "gpm0-0", "gpm0-1", "gpm0-2", "gpm0-3",
|
||||
"gpm0-4", "gpm0-5", "gpm0-6", "gpm0-7",
|
||||
|
@ -17,8 +17,8 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "exynos4.dtsi"
|
||||
/include/ "exynos4x12-pinctrl.dtsi"
|
||||
#include "exynos4.dtsi"
|
||||
#include "exynos4x12-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
aliases {
|
||||
@ -28,14 +28,6 @@
|
||||
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 {
|
||||
compatible = "samsung,exynos4412-clock";
|
||||
reg = <0x10030000 0x20000>;
|
||||
@ -77,6 +69,8 @@
|
||||
compatible = "samsung,exynos4212-g2d";
|
||||
reg = <0x10800000 0x1000>;
|
||||
interrupts = <0 89 0>;
|
||||
clocks = <&clock 177>, <&clock 277>;
|
||||
clock-names = "sclk_fimg2d", "fimg2d";
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
111
arch/arm/boot/dts/exynos5.dtsi
Normal file
111
arch/arm/boot/dts/exynos5.dtsi
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* 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 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos5250.dtsi"
|
||||
#include "exynos5250.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Insignal Arndale evaluation board based on EXYNOS5250";
|
||||
@ -449,4 +449,35 @@
|
||||
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 @@
|
||||
samsung,pin-pud = <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 {
|
||||
|
@ -10,7 +10,7 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos5250.dtsi"
|
||||
#include "exynos5250.dtsi"
|
||||
|
||||
/ {
|
||||
model = "SAMSUNG SMDK5250 board based on EXYNOS5250";
|
||||
@ -37,6 +37,30 @@
|
||||
};
|
||||
};
|
||||
|
||||
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 {
|
||||
samsung,i2c-sda-delay = <100>;
|
||||
samsung,i2c-max-bus-freq = <20000>;
|
||||
@ -47,8 +71,17 @@
|
||||
};
|
||||
|
||||
wm8994: wm8994@1a {
|
||||
compatible = "wlf,wm8994";
|
||||
reg = <0x1a>;
|
||||
compatible = "wlf,wm8994";
|
||||
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 @@
|
||||
samsung,color-depth = <1>;
|
||||
samsung,link-rate = <0x0a>;
|
||||
samsung,lane-count = <4>;
|
||||
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&dp_hpd>;
|
||||
};
|
||||
|
||||
display-timings {
|
||||
|
@ -9,8 +9,8 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos5250.dtsi"
|
||||
/include/ "cros5250-common.dtsi"
|
||||
#include "exynos5250.dtsi"
|
||||
#include "cros5250-common.dtsi"
|
||||
|
||||
/ {
|
||||
model = "Google Snow";
|
||||
@ -171,6 +171,10 @@
|
||||
};
|
||||
};
|
||||
|
||||
rtc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
/*
|
||||
* On Snow we've got SIP WiFi and so can keep drive strengths low to
|
||||
* reduce EMI.
|
||||
|
@ -17,12 +17,13 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
/include/ "exynos5250-pinctrl.dtsi"
|
||||
#include "exynos5.dtsi"
|
||||
#include "exynos5250-pinctrl.dtsi"
|
||||
|
||||
#include <dt-bindings/clk/exynos-audss-clk.h>
|
||||
|
||||
/ {
|
||||
compatible = "samsung,exynos5250";
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
aliases {
|
||||
spi0 = &spi_0;
|
||||
@ -51,9 +52,20 @@
|
||||
pinctrl3 = &pinctrl_3;
|
||||
};
|
||||
|
||||
chipid@10000000 {
|
||||
compatible = "samsung,exynos4210-chipid";
|
||||
reg = <0x10000000 0x100>;
|
||||
cpus {
|
||||
#address-cells = <1>;
|
||||
#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 {
|
||||
@ -72,15 +84,10 @@
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
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>;
|
||||
clock_audss: audss-clock-controller@3810000 {
|
||||
compatible = "samsung,exynos5250-audss-clock";
|
||||
reg = <0x03810000 0x0C>;
|
||||
#clock-cells = <1>;
|
||||
};
|
||||
|
||||
timer {
|
||||
@ -91,22 +98,6 @@
|
||||
<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 {
|
||||
compatible = "samsung,exynos4210-mct";
|
||||
reg = <0x101C0000 0x800>;
|
||||
@ -168,9 +159,6 @@
|
||||
};
|
||||
|
||||
watchdog {
|
||||
compatible = "samsung,s3c2410-wdt";
|
||||
reg = <0x101D0000 0x100>;
|
||||
interrupts = <0 42 0>;
|
||||
clocks = <&clock 336>;
|
||||
clock-names = "watchdog";
|
||||
};
|
||||
@ -183,12 +171,8 @@
|
||||
};
|
||||
|
||||
rtc {
|
||||
compatible = "samsung,s3c6410-rtc";
|
||||
reg = <0x101E0000 0x100>;
|
||||
interrupts = <0 43 0>, <0 44 0>;
|
||||
clocks = <&clock 337>;
|
||||
clock-names = "rtc";
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
tmu@10060000 {
|
||||
@ -200,33 +184,21 @@
|
||||
};
|
||||
|
||||
serial@12C00000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C00000 0x100>;
|
||||
interrupts = <0 51 0>;
|
||||
clocks = <&clock 289>, <&clock 146>;
|
||||
clock-names = "uart", "clk_uart_baud0";
|
||||
};
|
||||
|
||||
serial@12C10000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C10000 0x100>;
|
||||
interrupts = <0 52 0>;
|
||||
clocks = <&clock 290>, <&clock 147>;
|
||||
clock-names = "uart", "clk_uart_baud0";
|
||||
};
|
||||
|
||||
serial@12C20000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C20000 0x100>;
|
||||
interrupts = <0 53 0>;
|
||||
clocks = <&clock 291>, <&clock 148>;
|
||||
clock-names = "uart", "clk_uart_baud0";
|
||||
};
|
||||
|
||||
serial@12C30000 {
|
||||
compatible = "samsung,exynos4210-uart";
|
||||
reg = <0x12C30000 0x100>;
|
||||
interrupts = <0 54 0>;
|
||||
clocks = <&clock 292>, <&clock 149>;
|
||||
clock-names = "uart", "clk_uart_baud0";
|
||||
};
|
||||
@ -405,31 +377,19 @@
|
||||
};
|
||||
|
||||
dwmmc_0: dwmmc0@12200000 {
|
||||
compatible = "samsung,exynos5250-dw-mshc";
|
||||
reg = <0x12200000 0x1000>;
|
||||
interrupts = <0 75 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&clock 280>, <&clock 139>;
|
||||
clock-names = "biu", "ciu";
|
||||
};
|
||||
|
||||
dwmmc_1: dwmmc1@12210000 {
|
||||
compatible = "samsung,exynos5250-dw-mshc";
|
||||
reg = <0x12210000 0x1000>;
|
||||
interrupts = <0 76 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&clock 281>, <&clock 140>;
|
||||
clock-names = "biu", "ciu";
|
||||
};
|
||||
|
||||
dwmmc_2: dwmmc2@12220000 {
|
||||
compatible = "samsung,exynos5250-dw-mshc";
|
||||
reg = <0x12220000 0x1000>;
|
||||
interrupts = <0 77 0>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
clocks = <&clock 282>, <&clock 141>;
|
||||
clock-names = "biu", "ciu";
|
||||
};
|
||||
@ -451,6 +411,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-names = "iis", "i2s_opclk0", "i2s_opclk1";
|
||||
samsung,supports-6ch;
|
||||
samsung,supports-rstclr;
|
||||
samsung,supports-secdai;
|
||||
@ -465,6 +429,8 @@
|
||||
dmas = <&pdma1 12
|
||||
&pdma1 11>;
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&clock 307>, <&clock 157>;
|
||||
clock-names = "iis", "i2s_opclk0";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&i2s1_bus>;
|
||||
};
|
||||
@ -475,10 +441,42 @@
|
||||
dmas = <&pdma0 12
|
||||
&pdma0 11>;
|
||||
dma-names = "tx", "rx";
|
||||
clocks = <&clock 308>, <&clock 158>;
|
||||
clock-names = "iis", "i2s_opclk0";
|
||||
pinctrl-names = "default";
|
||||
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 {
|
||||
compatible = "samsung,exynos4210-ehci";
|
||||
reg = <0x12110000 0x100>;
|
||||
@ -497,7 +495,7 @@
|
||||
clock-names = "usbhost";
|
||||
};
|
||||
|
||||
usbphy@12130000 {
|
||||
usb2_phy: usbphy@12130000 {
|
||||
compatible = "samsung,exynos5250-usb2phy";
|
||||
reg = <0x12130000 0x100>;
|
||||
clocks = <&clock 1>, <&clock 285>;
|
||||
@ -621,6 +619,8 @@
|
||||
reg = <0x145b0000 0x1000>;
|
||||
interrupts = <10 3>;
|
||||
interrupt-parent = <&combiner>;
|
||||
clocks = <&clock 342>;
|
||||
clock-names = "dp";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
|
33
arch/arm/boot/dts/exynos5420-smdk5420.dts
Normal file
33
arch/arm/boot/dts/exynos5420-smdk5420.dts
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* 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>;
|
||||
};
|
||||
};
|
||||
};
|
103
arch/arm/boot/dts/exynos5420.dtsi
Normal file
103
arch/arm/boot/dts/exynos5420.dtsi
Normal file
@ -0,0 +1,103 @@
|
||||
/*
|
||||
* 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 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos5440.dtsi"
|
||||
#include "exynos5440.dtsi"
|
||||
|
||||
/ {
|
||||
model = "SAMSUNG SD5v1 board based on EXYNOS5440";
|
||||
compatible = "samsung,sd5v1", "samsung,exynos5440";
|
||||
|
||||
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 {
|
||||
|
@ -10,18 +10,53 @@
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
/include/ "exynos5440.dtsi"
|
||||
#include "exynos5440.dtsi"
|
||||
|
||||
/ {
|
||||
model = "SAMSUNG SSDK5440 board based on EXYNOS5440";
|
||||
compatible = "samsung,ssdk5440", "samsung,exynos5440";
|
||||
|
||||
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 {
|
||||
status = "disabled";
|
||||
spi_0: spi@D0000 {
|
||||
|
||||
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 {
|
||||
|
@ -9,13 +9,17 @@
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
/include/ "skeleton.dtsi"
|
||||
#include "skeleton.dtsi"
|
||||
|
||||
/ {
|
||||
compatible = "samsung,exynos5440";
|
||||
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
aliases {
|
||||
spi0 = &spi_0;
|
||||
};
|
||||
|
||||
clock: clock-controller@0x160000 {
|
||||
compatible = "samsung,exynos5440-clock";
|
||||
reg = <0x160000 0x1000>;
|
||||
@ -79,8 +83,13 @@
|
||||
interrupts = <0 57 0>;
|
||||
operating-points = <
|
||||
/* KHz uV */
|
||||
1500000 1100000
|
||||
1400000 1075000
|
||||
1300000 1050000
|
||||
1200000 1025000
|
||||
1100000 1000000
|
||||
1000000 975000
|
||||
900000 950000
|
||||
800000 925000
|
||||
>;
|
||||
};
|
||||
@ -101,14 +110,14 @@
|
||||
clock-names = "uart", "clk_uart_baud0";
|
||||
};
|
||||
|
||||
spi {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0xD0000 0x1000>;
|
||||
spi_0: spi@D0000 {
|
||||
compatible = "samsung,exynos5440-spi";
|
||||
reg = <0xD0000 0x100>;
|
||||
interrupts = <0 4 0>;
|
||||
tx-dma-channel = <&pdma0 5>; /* preliminary */
|
||||
rx-dma-channel = <&pdma0 4>; /* preliminary */
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
samsung,spi-src-clk = <0>;
|
||||
num-cs = <1>;
|
||||
clocks = <&clock 21>, <&clock 16>;
|
||||
clock-names = "spi", "spi_busclk0";
|
||||
};
|
||||
@ -184,28 +193,6 @@
|
||||
compatible = "arm,amba-bus";
|
||||
interrupt-parent = <&gic>;
|
||||
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 {
|
||||
@ -214,6 +201,29 @@
|
||||
interrupts = <0 17 0>, <0 16 0>;
|
||||
clocks = <&clock 21>;
|
||||
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";
|
||||
};
|
||||
};
|
||||
|
173
arch/arm/boot/dts/s3c2416-pinctrl.dtsi
Normal file
173
arch/arm/boot/dts/s3c2416-pinctrl.dtsi
Normal file
@ -0,0 +1,173 @@
|
||||
/*
|
||||
* 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>;
|
||||
};
|
||||
};
|
72
arch/arm/boot/dts/s3c2416-smdk2416.dts
Normal file
72
arch/arm/boot/dts/s3c2416-smdk2416.dts
Normal file
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* 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";
|
||||
};
|
||||
};
|
79
arch/arm/boot/dts/s3c2416.dtsi
Normal file
79
arch/arm/boot/dts/s3c2416.dtsi
Normal file
@ -0,0 +1,79 @@
|
||||
/*
|
||||
* 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";
|
||||
};
|
||||
};
|
92
arch/arm/boot/dts/s3c24xx.dtsi
Normal file
92
arch/arm/boot/dts/s3c24xx.dtsi
Normal file
@ -0,0 +1,92 @@
|
||||
/*
|
||||
* 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
|
||||
help
|
||||
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
|
||||
bool "SAMSUNG EXYNOS5440"
|
||||
default y
|
||||
|
@ -64,6 +64,7 @@ static const char name_exynos4210[] = "EXYNOS4210";
|
||||
static const char name_exynos4212[] = "EXYNOS4212";
|
||||
static const char name_exynos4412[] = "EXYNOS4412";
|
||||
static const char name_exynos5250[] = "EXYNOS5250";
|
||||
static const char name_exynos5420[] = "EXYNOS5420";
|
||||
static const char name_exynos5440[] = "EXYNOS5440";
|
||||
|
||||
static void exynos4_map_io(void);
|
||||
@ -102,6 +103,12 @@ static struct cpu_table cpu_ids[] __initdata = {
|
||||
.map_io = exynos5_map_io,
|
||||
.init = exynos_init,
|
||||
.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,
|
||||
.idmask = EXYNOS5_SOC_MASK,
|
||||
@ -322,10 +329,10 @@ void exynos5_restart(char mode, const char *cmd)
|
||||
u32 val;
|
||||
void __iomem *addr;
|
||||
|
||||
if (of_machine_is_compatible("samsung,exynos5250")) {
|
||||
val = 0x1;
|
||||
addr = EXYNOS_SWRESET;
|
||||
} else if (of_machine_is_compatible("samsung,exynos5440")) {
|
||||
val = 0x1;
|
||||
addr = EXYNOS_SWRESET;
|
||||
|
||||
if (of_machine_is_compatible("samsung,exynos5440")) {
|
||||
u32 status;
|
||||
np = of_find_compatible_node(NULL, NULL, "samsung,exynos5440-clock");
|
||||
|
||||
@ -336,9 +343,6 @@ void exynos5_restart(char mode, const char *cmd)
|
||||
val = __raw_readl(addr);
|
||||
|
||||
val = (val & 0xffff0000) | (status & 0xffff);
|
||||
} else {
|
||||
pr_err("%s: cannot support non-DT\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
__raw_writel(val, addr);
|
||||
|
@ -31,13 +31,12 @@ static void arch_detect_cpu(void)
|
||||
|
||||
/*
|
||||
* 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 &= 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);
|
||||
else
|
||||
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)
|
||||
|
||||
static char const *exynos5_dt_compat[] __initdata = {
|
||||
"samsung,exynos5250",
|
||||
"samsung,exynos5420",
|
||||
"samsung,exynos5440",
|
||||
NULL
|
||||
};
|
||||
|
@ -50,6 +50,8 @@ static inline void __iomem *cpu_boot_reg(int cpu)
|
||||
boot_reg = cpu_boot_reg_base();
|
||||
if (soc_is_exynos4412())
|
||||
boot_reg += 4*cpu;
|
||||
else if (soc_is_exynos5420())
|
||||
boot_reg += 4;
|
||||
return boot_reg;
|
||||
}
|
||||
|
||||
@ -180,10 +182,14 @@ static void __init exynos_smp_init_cpus(void)
|
||||
void __iomem *scu_base = scu_base_addr();
|
||||
unsigned int i, ncores;
|
||||
|
||||
if (soc_is_exynos5250())
|
||||
ncores = 2;
|
||||
else
|
||||
if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9)
|
||||
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 */
|
||||
if (ncores > nr_cpu_ids) {
|
||||
|
@ -490,6 +490,18 @@ config MACH_SMDK2416
|
||||
help
|
||||
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
|
||||
|
||||
if CPU_S3C2440
|
||||
|
@ -85,6 +85,7 @@ obj-$(CONFIG_MACH_SMDK2413) += mach-smdk2413.o
|
||||
obj-$(CONFIG_MACH_VSTMS) += mach-vstms.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_AT2440EVB) += mach-at2440evb.o
|
||||
|
91
arch/arm/mach-s3c24xx/mach-s3c2416-dt.c
Normal file
91
arch/arm/mach-s3c24xx/mach-s3c2416-dt.c
Normal file
@ -0,0 +1,91 @@
|
||||
/*
|
||||
* 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;
|
||||
#define EXYNOS4_CPU_MASK 0xFFFE0000
|
||||
|
||||
#define EXYNOS5250_SOC_ID 0x43520000
|
||||
#define EXYNOS5420_SOC_ID 0xE5420000
|
||||
#define EXYNOS5440_SOC_ID 0xE5440000
|
||||
#define EXYNOS5_SOC_MASK 0xFFFFF000
|
||||
|
||||
@ -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(exynos4412, EXYNOS4412_CPU_ID, EXYNOS4_CPU_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)
|
||||
|
||||
#if defined(CONFIG_CPU_S3C2410) || defined(CONFIG_CPU_S3C2412) || \
|
||||
@ -142,6 +144,12 @@ IS_SAMSUNG_CPU(exynos5440, EXYNOS5440_SOC_ID, EXYNOS5_SOC_MASK)
|
||||
# define soc_is_exynos5250() 0
|
||||
#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)
|
||||
# define soc_is_exynos5440() is_samsung_exynos5440()
|
||||
#else
|
||||
|
@ -5,4 +5,6 @@
|
||||
obj-$(CONFIG_COMMON_CLK) += clk.o clk-pll.o
|
||||
obj-$(CONFIG_ARCH_EXYNOS4) += clk-exynos4.o
|
||||
obj-$(CONFIG_SOC_EXYNOS5250) += clk-exynos5250.o
|
||||
obj-$(CONFIG_SOC_EXYNOS5420) += clk-exynos5420.o
|
||||
obj-$(CONFIG_SOC_EXYNOS5440) += clk-exynos5440.o
|
||||
obj-$(CONFIG_ARCH_EXYNOS) += clk-exynos-audss.o
|
||||
|
133
drivers/clk/samsung/clk-exynos-audss.c
Normal file
133
drivers/clk/samsung/clk-exynos-audss.c
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* 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 {
|
||||
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_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 */
|
||||
fimc0 = 256, fimc1, fimc2, fimc3, csis0, csis1, jpeg, smmu_fimc0,
|
||||
@ -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_spi1_isp", group1_p4x12, E4X12_SRC_ISP, 8, 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 */
|
||||
@ -552,7 +555,7 @@ struct samsung_div_clock exynos4_div_clks[] __initdata = {
|
||||
/* list of divider clocks supported in exynos4210 soc */
|
||||
struct samsung_div_clock exynos4210_div_clks[] __initdata = {
|
||||
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_mipi1", "mout_mipi1", E4210_DIV_LCD1, 16, 4),
|
||||
DIV(none, "div_sata", "mout_sata", DIV_FSYS0, 20, 4),
|
||||
@ -582,6 +585,7 @@ struct samsung_div_clock exynos4x12_div_clks[] __initdata = {
|
||||
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_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 */
|
||||
@ -909,6 +913,7 @@ struct samsung_gate_clock exynos4x12_gate_clks[] __initdata = {
|
||||
CLK_IGNORE_UNUSED, 0),
|
||||
GATE(spi1_isp, "spi1_isp", "aclk200", E4X12_GATE_ISP1, 13,
|
||||
CLK_IGNORE_UNUSED, 0),
|
||||
GATE(g2d, "g2d", "aclk200", GATE_IP_DMC, 23, 0, 0),
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -87,6 +87,7 @@ enum exynos5250_clks {
|
||||
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_audio1, sclk_audio2, sclk_spdif, sclk_spi0, sclk_spi1, sclk_spi2,
|
||||
div_i2s1, div_i2s2,
|
||||
|
||||
/* gate clocks */
|
||||
gscl0 = 256, gscl1, gscl2, gscl3, gscl_wa, gscl_wb, smmu_gscl0,
|
||||
@ -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_audio2", "mout_audio2", DIV_PERIC4, 16, 4),
|
||||
DIV(none, "div_pcm2", "sclk_audio2", DIV_PERIC4, 20, 8),
|
||||
DIV(none, "div_i2s1", "sclk_audio1", DIV_PERIC5, 0, 6),
|
||||
DIV(none, "div_i2s2", "sclk_audio2", DIV_PERIC5, 8, 6),
|
||||
DIV(div_i2s1, "div_i2s1", "sclk_audio1", DIV_PERIC5, 0, 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_A(none, "armclk", "div_arm", DIV_CPU0, 28, 3, "armclk"),
|
||||
DIV_F(none, "div_mipi1_pre", "div_mipi1",
|
||||
|
762
drivers/clk/samsung/clk-exynos5420.c
Normal file
762
drivers/clk/samsung/clk-exynos5420.c
Normal file
@ -0,0 +1,762 @@
|
||||
/*
|
||||
* Copyright (c) 2013 Samsung Electronics Co., Ltd.
|
||||
* Authors: Thomas Abraham <thomas.ab@samsung.com>
|
||||
* Chander Kashyap <k.chander@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 Exynos5420 SoC.
|
||||
*/
|
||||
|
||||
#include <linux/clk.h>
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_address.h>
|
||||
|
||||
#include "clk.h"
|
||||
#include "clk-pll.h"
|
||||
|
||||
#define SRC_CPU 0x200
|
||||
#define DIV_CPU0 0x500
|
||||
#define DIV_CPU1 0x504
|
||||
#define GATE_BUS_CPU 0x700
|
||||
#define GATE_SCLK_CPU 0x800
|
||||
#define SRC_TOP0 0x10200
|
||||
#define SRC_TOP1 0x10204
|
||||
#define SRC_TOP2 0x10208
|
||||
#define SRC_TOP3 0x1020c
|
||||
#define SRC_TOP4 0x10210
|
||||
#define SRC_TOP5 0x10214
|
||||
#define SRC_TOP6 0x10218
|
||||
#define SRC_TOP7 0x1021c
|
||||
#define SRC_DISP10 0x1022c
|
||||
#define SRC_MAU 0x10240
|
||||
#define SRC_FSYS 0x10244
|
||||
#define SRC_PERIC0 0x10250
|
||||
#define SRC_PERIC1 0x10254
|
||||
#define SRC_TOP10 0x10280
|
||||
#define SRC_TOP11 0x10284
|
||||
#define SRC_TOP12 0x10288
|
||||
#define SRC_MASK_DISP10 0x1032c
|
||||
#define SRC_MASK_FSYS 0x10340
|
||||
#define SRC_MASK_PERIC0 0x10350
|
||||
#define SRC_MASK_PERIC1 0x10354
|
||||
#define DIV_TOP0 0x10500
|
||||
#define DIV_TOP1 0x10504
|
||||
#define DIV_TOP2 0x10508
|
||||
#define DIV_DISP10 0x1052c
|
||||
#define DIV_MAU 0x10544
|
||||
#define DIV_FSYS0 0x10548
|
||||
#define DIV_FSYS1 0x1054c
|
||||
#define DIV_FSYS2 0x10550
|
||||
#define DIV_PERIC0 0x10558
|
||||
#define DIV_PERIC1 0x1055c
|
||||
#define DIV_PERIC2 0x10560
|
||||
#define DIV_PERIC3 0x10564
|
||||
#define DIV_PERIC4 0x10568
|
||||
#define GATE_BUS_TOP 0x10700
|
||||
#define GATE_BUS_FSYS0 0x10740
|
||||
#define GATE_BUS_PERIC 0x10750
|
||||
#define GATE_BUS_PERIC1 0x10754
|
||||
#define GATE_BUS_PERIS0 0x10760
|
||||
#define GATE_BUS_PERIS1 0x10764
|
||||
#define GATE_IP_GSCL0 0x10910
|
||||
#define GATE_IP_GSCL1 0x10920
|
||||
#define GATE_IP_MFC 0x1092c
|
||||
#define GATE_IP_DISP1 0x10928
|
||||
#define GATE_IP_G3D 0x10930
|
||||
#define GATE_IP_GEN 0x10934
|
||||
#define GATE_IP_MSCL 0x10970
|
||||
#define GATE_TOP_SCLK_GSCL 0x10820
|
||||
#define GATE_TOP_SCLK_DISP1 0x10828
|
||||
#define GATE_TOP_SCLK_MAU 0x1083c
|
||||
#define GATE_TOP_SCLK_FSYS 0x10840
|
||||
#define GATE_TOP_SCLK_PERIC 0x10850
|
||||
#define SRC_CDREX 0x20200
|
||||
#define SRC_KFC 0x28200
|
||||
#define DIV_KFC0 0x28500
|
||||
|
||||
enum exynos5420_clks {
|
||||
none,
|
||||
|
||||
/* core clocks */
|
||||
fin_pll,
|
||||
|
||||
/* gate for special clocks (sclk) */
|
||||
sclk_uart0 = 128, sclk_uart1, sclk_uart2, sclk_uart3, sclk_mmc0,
|
||||
sclk_mmc1, sclk_mmc2, sclk_spi0, sclk_spi1, sclk_spi2, sclk_i2s1,
|
||||
sclk_i2s2, sclk_pcm1, sclk_pcm2, sclk_spdif, sclk_hdmi, sclk_pixel,
|
||||
sclk_dp1, sclk_mipi1, sclk_fimd1, sclk_maudio0, sclk_maupcm0,
|
||||
sclk_usbd300, sclk_usbd301, sclk_usbphy300, sclk_usbphy301, sclk_unipro,
|
||||
sclk_pwm, sclk_gscl_wa, sclk_gscl_wb,
|
||||
|
||||
/* gate clocks */
|
||||
aclk66_peric = 256, uart0, uart1, uart2, uart3, i2c0, i2c1, i2c2, i2c3,
|
||||
i2c4, i2c5, i2c6, i2c7, i2c_hdmi, tsadc, spi0, spi1, spi2, keyif, i2s1,
|
||||
i2s2, pcm1, pcm2, pwm, spdif, i2c8, i2c9, i2c10, aclk66_psgen = 300,
|
||||
chipid, sysreg, tzpc0, tzpc1, tzpc2, tzpc3, tzpc4, tzpc5, tzpc6, tzpc7,
|
||||
tzpc8, tzpc9, hdmi_cec, seckey, mct, wdt, rtc, tmu, tmu_gpu,
|
||||
pclk66_gpio = 330, aclk200_fsys2 = 350, mmc0, mmc1, mmc2, sromc, ufs,
|
||||
aclk200_fsys = 360, tsi, pdma0, pdma1, rtic, usbh20, usbd300, usbd301,
|
||||
aclk400_mscl = 380, mscl0, mscl1, mscl2, smmu_mscl0, smmu_mscl1,
|
||||
smmu_mscl2, aclk333 = 400, mfc, smmu_mfcl, smmu_mfcr,
|
||||
aclk200_disp1 = 410, dsim1, dp1, hdmi, aclk300_disp1 = 420, fimd1,
|
||||
smmu_fimd1, aclk166 = 430, mixer, aclk266 = 440, rotator, mdma1,
|
||||
smmu_rotator, smmu_mdma1, aclk300_jpeg = 450, jpeg, jpeg2, smmu_jpeg,
|
||||
aclk300_gscl = 460, smmu_gscl0, smmu_gscl1, gscl_wa, gscl_wb, gscl0,
|
||||
gscl1, clk_3aa, aclk266_g2d = 470, sss, slim_sss, mdma0,
|
||||
aclk333_g2d = 480, g2d, aclk333_432_gscl = 490, smmu_3aa, smmu_fimcl0,
|
||||
smmu_fimcl1, smmu_fimcl3, fimc_lite3, aclk_g3d = 500, g3d,
|
||||
|
||||
nr_clks,
|
||||
};
|
||||
|
||||
/*
|
||||
* list of controller registers to be saved and restored during a
|
||||
* suspend/resume cycle.
|
||||
*/
|
||||
static __initdata unsigned long exynos5420_clk_regs[] = {
|
||||
SRC_CPU,
|
||||
DIV_CPU0,
|
||||
DIV_CPU1,
|
||||
GATE_BUS_CPU,
|
||||
GATE_SCLK_CPU,
|
||||
SRC_TOP0,
|
||||
SRC_TOP1,
|
||||
SRC_TOP2,
|
||||
SRC_TOP3,
|
||||
SRC_TOP4,
|
||||
SRC_TOP5,
|
||||
SRC_TOP6,
|
||||
SRC_TOP7,
|
||||
SRC_DISP10,
|
||||
SRC_MAU,
|
||||
SRC_FSYS,
|
||||
SRC_PERIC0,
|
||||
SRC_PERIC1,
|
||||
SRC_TOP10,
|
||||
SRC_TOP11,
|
||||
SRC_TOP12,
|
||||
SRC_MASK_DISP10,
|
||||
SRC_MASK_FSYS,
|
||||
SRC_MASK_PERIC0,
|
||||
SRC_MASK_PERIC1,
|
||||
DIV_TOP0,
|
||||
DIV_TOP1,
|
||||
DIV_TOP2,
|
||||
DIV_DISP10,
|
||||
DIV_MAU,
|
||||
DIV_FSYS0,
|
||||
DIV_FSYS1,
|
||||
DIV_FSYS2,
|
||||
DIV_PERIC0,
|
||||
DIV_PERIC1,
|
||||
DIV_PERIC2,
|
||||
DIV_PERIC3,
|
||||
DIV_PERIC4,
|
||||
GATE_BUS_TOP,
|
||||
GATE_BUS_FSYS0,
|
||||
GATE_BUS_PERIC,
|
||||
GATE_BUS_PERIC1,
|
||||
GATE_BUS_PERIS0,
|
||||
GATE_BUS_PERIS1,
|
||||
GATE_IP_GSCL0,
|
||||
GATE_IP_GSCL1,
|
||||
GATE_IP_MFC,
|
||||
GATE_IP_DISP1,
|
||||
GATE_IP_G3D,
|
||||
GATE_IP_GEN,
|
||||
GATE_IP_MSCL,
|
||||
GATE_TOP_SCLK_GSCL,
|
||||
GATE_TOP_SCLK_DISP1,
|
||||
GATE_TOP_SCLK_MAU,
|
||||
GATE_TOP_SCLK_FSYS,
|
||||
GATE_TOP_SCLK_PERIC,
|
||||
SRC_CDREX,
|
||||
SRC_KFC,
|
||||
DIV_KFC0,
|
||||
};
|
||||
|
||||
/* list of all parent clocks */
|
||||
PNAME(mspll_cpu_p) = { "sclk_cpll", "sclk_dpll",
|
||||
"sclk_mpll", "sclk_spll" };
|
||||
PNAME(cpu_p) = { "mout_apll" , "mout_mspll_cpu" };
|
||||
PNAME(kfc_p) = { "mout_kpll" , "mout_mspll_kfc" };
|
||||
PNAME(apll_p) = { "fin_pll", "fout_apll", };
|
||||
PNAME(bpll_p) = { "fin_pll", "fout_bpll", };
|
||||
PNAME(cpll_p) = { "fin_pll", "fout_cpll", };
|
||||
PNAME(dpll_p) = { "fin_pll", "fout_dpll", };
|
||||
PNAME(epll_p) = { "fin_pll", "fout_epll", };
|
||||
PNAME(ipll_p) = { "fin_pll", "fout_ipll", };
|
||||
PNAME(kpll_p) = { "fin_pll", "fout_kpll", };
|
||||
PNAME(mpll_p) = { "fin_pll", "fout_mpll", };
|
||||
PNAME(rpll_p) = { "fin_pll", "fout_rpll", };
|
||||
PNAME(spll_p) = { "fin_pll", "fout_spll", };
|
||||
PNAME(vpll_p) = { "fin_pll", "fout_vpll", };
|
||||
|
||||
PNAME(group1_p) = { "sclk_cpll", "sclk_dpll", "sclk_mpll" };
|
||||
PNAME(group2_p) = { "fin_pll", "sclk_cpll", "sclk_dpll", "sclk_mpll",
|
||||
"sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" };
|
||||
PNAME(group3_p) = { "sclk_rpll", "sclk_spll" };
|
||||
PNAME(group4_p) = { "sclk_ipll", "sclk_dpll", "sclk_mpll" };
|
||||
PNAME(group5_p) = { "sclk_vpll", "sclk_dpll" };
|
||||
|
||||
PNAME(sw_aclk66_p) = { "dout_aclk66", "sclk_spll" };
|
||||
PNAME(aclk66_peric_p) = { "fin_pll", "mout_sw_aclk66" };
|
||||
|
||||
PNAME(sw_aclk200_fsys_p) = { "dout_aclk200_fsys", "sclk_spll"};
|
||||
PNAME(user_aclk200_fsys_p) = { "fin_pll", "mout_sw_aclk200_fsys" };
|
||||
|
||||
PNAME(sw_aclk200_fsys2_p) = { "dout_aclk200_fsys2", "sclk_spll"};
|
||||
PNAME(user_aclk200_fsys2_p) = { "fin_pll", "mout_sw_aclk200_fsys2" };
|
||||
|
||||
PNAME(sw_aclk200_p) = { "dout_aclk200", "sclk_spll"};
|
||||
PNAME(aclk200_disp1_p) = { "fin_pll", "mout_sw_aclk200" };
|
||||
|
||||
PNAME(sw_aclk400_mscl_p) = { "dout_aclk400_mscl", "sclk_spll"};
|
||||
PNAME(user_aclk400_mscl_p) = { "fin_pll", "mout_sw_aclk400_mscl" };
|
||||
|
||||
PNAME(sw_aclk333_p) = { "dout_aclk333", "sclk_spll"};
|
||||
PNAME(user_aclk333_p) = { "fin_pll", "mout_sw_aclk333" };
|
||||
|
||||
PNAME(sw_aclk166_p) = { "dout_aclk166", "sclk_spll"};
|
||||
PNAME(user_aclk166_p) = { "fin_pll", "mout_sw_aclk166" };
|
||||
|
||||
PNAME(sw_aclk266_p) = { "dout_aclk266", "sclk_spll"};
|
||||
PNAME(user_aclk266_p) = { "fin_pll", "mout_sw_aclk266" };
|
||||
|
||||
PNAME(sw_aclk333_432_gscl_p) = { "dout_aclk333_432_gscl", "sclk_spll"};
|
||||
PNAME(user_aclk333_432_gscl_p) = { "fin_pll", "mout_sw_aclk333_432_gscl" };
|
||||
|
||||
PNAME(sw_aclk300_gscl_p) = { "dout_aclk300_gscl", "sclk_spll"};
|
||||
PNAME(user_aclk300_gscl_p) = { "fin_pll", "mout_sw_aclk300_gscl" };
|
||||
|
||||
PNAME(sw_aclk300_disp1_p) = { "dout_aclk300_disp1", "sclk_spll"};
|
||||
PNAME(user_aclk300_disp1_p) = { "fin_pll", "mout_sw_aclk300_disp1" };
|
||||
|
||||
PNAME(sw_aclk300_jpeg_p) = { "dout_aclk300_jpeg", "sclk_spll"};
|
||||
PNAME(user_aclk300_jpeg_p) = { "fin_pll", "mout_sw_aclk300_jpeg" };
|
||||
|
||||
PNAME(sw_aclk_g3d_p) = { "dout_aclk_g3d", "sclk_spll"};
|
||||
PNAME(user_aclk_g3d_p) = { "fin_pll", "mout_sw_aclk_g3d" };
|
||||
|
||||
PNAME(sw_aclk266_g2d_p) = { "dout_aclk266_g2d", "sclk_spll"};
|
||||
PNAME(user_aclk266_g2d_p) = { "fin_pll", "mout_sw_aclk266_g2d" };
|
||||
|
||||
PNAME(sw_aclk333_g2d_p) = { "dout_aclk333_g2d", "sclk_spll"};
|
||||
PNAME(user_aclk333_g2d_p) = { "fin_pll", "mout_sw_aclk333_g2d" };
|
||||
|
||||
PNAME(audio0_p) = { "fin_pll", "cdclk0", "sclk_dpll", "sclk_mpll",
|
||||
"sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" };
|
||||
PNAME(audio1_p) = { "fin_pll", "cdclk1", "sclk_dpll", "sclk_mpll",
|
||||
"sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" };
|
||||
PNAME(audio2_p) = { "fin_pll", "cdclk2", "sclk_dpll", "sclk_mpll",
|
||||
"sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" };
|
||||
PNAME(spdif_p) = { "fin_pll", "dout_audio0", "dout_audio1", "dout_audio2",
|
||||
"spdif_extclk", "sclk_ipll", "sclk_epll", "sclk_rpll" };
|
||||
PNAME(hdmi_p) = { "sclk_hdmiphy", "dout_hdmi_pixel" };
|
||||
PNAME(maudio0_p) = { "fin_pll", "maudio_clk", "sclk_dpll", "sclk_mpll",
|
||||
"sclk_spll", "sclk_ipll", "sclk_epll", "sclk_rpll" };
|
||||
|
||||
/* fixed rate clocks generated outside the soc */
|
||||
struct samsung_fixed_rate_clock exynos5420_fixed_rate_ext_clks[] __initdata = {
|
||||
FRATE(fin_pll, "fin_pll", NULL, CLK_IS_ROOT, 0),
|
||||
};
|
||||
|
||||
/* fixed rate clocks generated inside the soc */
|
||||
struct samsung_fixed_rate_clock exynos5420_fixed_rate_clks[] __initdata = {
|
||||
FRATE(none, "sclk_hdmiphy", NULL, CLK_IS_ROOT, 24000000),
|
||||
FRATE(none, "sclk_pwi", NULL, CLK_IS_ROOT, 24000000),
|
||||
FRATE(none, "sclk_usbh20", NULL, CLK_IS_ROOT, 48000000),
|
||||
FRATE(none, "mphy_refclk_ixtal24", NULL, CLK_IS_ROOT, 48000000),
|
||||
FRATE(none, "sclk_usbh20_scan_clk", NULL, CLK_IS_ROOT, 480000000),
|
||||
};
|
||||
|
||||
struct samsung_fixed_factor_clock exynos5420_fixed_factor_clks[] __initdata = {
|
||||
FFACTOR(none, "sclk_hsic_12m", "fin_pll", 1, 2, 0),
|
||||
};
|
||||
|
||||
struct samsung_mux_clock exynos5420_mux_clks[] __initdata = {
|
||||
MUX(none, "mout_mspll_kfc", mspll_cpu_p, SRC_TOP7, 8, 2),
|
||||
MUX(none, "mout_mspll_cpu", mspll_cpu_p, SRC_TOP7, 12, 2),
|
||||
MUX(none, "mout_apll", apll_p, SRC_CPU, 0, 1),
|
||||
MUX(none, "mout_cpu", cpu_p, SRC_CPU, 16, 1),
|
||||
MUX(none, "mout_kpll", kpll_p, SRC_KFC, 0, 1),
|
||||
MUX(none, "mout_cpu_kfc", kfc_p, SRC_KFC, 16, 1),
|
||||
|
||||
MUX(none, "sclk_bpll", bpll_p, SRC_CDREX, 0, 1),
|
||||
|
||||
MUX_A(none, "mout_aclk400_mscl", group1_p,
|
||||
SRC_TOP0, 4, 2, "aclk400_mscl"),
|
||||
MUX(none, "mout_aclk200", group1_p, SRC_TOP0, 8, 2),
|
||||
MUX(none, "mout_aclk200_fsys2", group1_p, SRC_TOP0, 12, 2),
|
||||
MUX(none, "mout_aclk200_fsys", group1_p, SRC_TOP0, 28, 2),
|
||||
|
||||
MUX(none, "mout_aclk333_432_gscl", group4_p, SRC_TOP1, 0, 2),
|
||||
MUX(none, "mout_aclk66", group1_p, SRC_TOP1, 8, 2),
|
||||
MUX(none, "mout_aclk266", group1_p, SRC_TOP1, 20, 2),
|
||||
MUX(none, "mout_aclk166", group1_p, SRC_TOP1, 24, 2),
|
||||
MUX(none, "mout_aclk333", group1_p, SRC_TOP1, 28, 2),
|
||||
|
||||
MUX(none, "mout_aclk333_g2d", group1_p, SRC_TOP2, 8, 2),
|
||||
MUX(none, "mout_aclk266_g2d", group1_p, SRC_TOP2, 12, 2),
|
||||
MUX(none, "mout_aclk_g3d", group5_p, SRC_TOP2, 16, 1),
|
||||
MUX(none, "mout_aclk300_jpeg", group1_p, SRC_TOP2, 20, 2),
|
||||
MUX(none, "mout_aclk300_disp1", group1_p, SRC_TOP2, 24, 2),
|
||||
MUX(none, "mout_aclk300_gscl", group1_p, SRC_TOP2, 28, 2),
|
||||
|
||||
MUX(none, "mout_user_aclk400_mscl", user_aclk400_mscl_p,
|
||||
SRC_TOP3, 4, 1),
|
||||
MUX_A(none, "mout_aclk200_disp1", aclk200_disp1_p,
|
||||
SRC_TOP3, 8, 1, "aclk200_disp1"),
|
||||
MUX(none, "mout_user_aclk200_fsys2", user_aclk200_fsys2_p,
|
||||
SRC_TOP3, 12, 1),
|
||||
MUX(none, "mout_user_aclk200_fsys", user_aclk200_fsys_p,
|
||||
SRC_TOP3, 28, 1),
|
||||
|
||||
MUX(none, "mout_user_aclk333_432_gscl", user_aclk333_432_gscl_p,
|
||||
SRC_TOP4, 0, 1),
|
||||
MUX(none, "mout_aclk66_peric", aclk66_peric_p, SRC_TOP4, 8, 1),
|
||||
MUX(none, "mout_user_aclk266", user_aclk266_p, SRC_TOP4, 20, 1),
|
||||
MUX(none, "mout_user_aclk166", user_aclk166_p, SRC_TOP4, 24, 1),
|
||||
MUX(none, "mout_user_aclk333", user_aclk333_p, SRC_TOP4, 28, 1),
|
||||
|
||||
MUX(none, "mout_aclk66_psgen", aclk66_peric_p, SRC_TOP5, 4, 1),
|
||||
MUX(none, "mout_user_aclk333_g2d", user_aclk333_g2d_p, SRC_TOP5, 8, 1),
|
||||
MUX(none, "mout_user_aclk266_g2d", user_aclk266_g2d_p, SRC_TOP5, 12, 1),
|
||||
MUX_A(none, "mout_user_aclk_g3d", user_aclk_g3d_p,
|
||||
SRC_TOP5, 16, 1, "aclkg3d"),
|
||||
MUX(none, "mout_user_aclk300_jpeg", user_aclk300_jpeg_p,
|
||||
SRC_TOP5, 20, 1),
|
||||
MUX(none, "mout_user_aclk300_disp1", user_aclk300_disp1_p,
|
||||
SRC_TOP5, 24, 1),
|
||||
MUX(none, "mout_user_aclk300_gscl", user_aclk300_gscl_p,
|
||||
SRC_TOP5, 28, 1),
|
||||
|
||||
MUX(none, "sclk_mpll", mpll_p, SRC_TOP6, 0, 1),
|
||||
MUX(none, "sclk_vpll", vpll_p, SRC_TOP6, 4, 1),
|
||||
MUX(none, "sclk_spll", spll_p, SRC_TOP6, 8, 1),
|
||||
MUX(none, "sclk_ipll", ipll_p, SRC_TOP6, 12, 1),
|
||||
MUX(none, "sclk_rpll", rpll_p, SRC_TOP6, 16, 1),
|
||||
MUX(none, "sclk_epll", epll_p, SRC_TOP6, 20, 1),
|
||||
MUX(none, "sclk_dpll", dpll_p, SRC_TOP6, 24, 1),
|
||||
MUX(none, "sclk_cpll", cpll_p, SRC_TOP6, 28, 1),
|
||||
|
||||
MUX(none, "mout_sw_aclk400_mscl", sw_aclk400_mscl_p, SRC_TOP10, 4, 1),
|
||||
MUX(none, "mout_sw_aclk200", sw_aclk200_p, SRC_TOP10, 8, 1),
|
||||
MUX(none, "mout_sw_aclk200_fsys2", sw_aclk200_fsys2_p,
|
||||
SRC_TOP10, 12, 1),
|
||||
MUX(none, "mout_sw_aclk200_fsys", sw_aclk200_fsys_p, SRC_TOP10, 28, 1),
|
||||
|
||||
MUX(none, "mout_sw_aclk333_432_gscl", sw_aclk333_432_gscl_p,
|
||||
SRC_TOP11, 0, 1),
|
||||
MUX(none, "mout_sw_aclk66", sw_aclk66_p, SRC_TOP11, 8, 1),
|
||||
MUX(none, "mout_sw_aclk266", sw_aclk266_p, SRC_TOP11, 20, 1),
|
||||
MUX(none, "mout_sw_aclk166", sw_aclk166_p, SRC_TOP11, 24, 1),
|
||||
MUX(none, "mout_sw_aclk333", sw_aclk333_p, SRC_TOP11, 28, 1),
|
||||
|
||||
MUX(none, "mout_sw_aclk333_g2d", sw_aclk333_g2d_p, SRC_TOP12, 8, 1),
|
||||
MUX(none, "mout_sw_aclk266_g2d", sw_aclk266_g2d_p, SRC_TOP12, 12, 1),
|
||||
MUX(none, "mout_sw_aclk_g3d", sw_aclk_g3d_p, SRC_TOP12, 16, 1),
|
||||
MUX(none, "mout_sw_aclk300_jpeg", sw_aclk300_jpeg_p, SRC_TOP12, 20, 1),
|
||||
MUX(none, "mout_sw_aclk300_disp1", sw_aclk300_disp1_p,
|
||||
SRC_TOP12, 24, 1),
|
||||
MUX(none, "mout_sw_aclk300_gscl", sw_aclk300_gscl_p, SRC_TOP12, 28, 1),
|
||||
|
||||
/* DISP1 Block */
|
||||
MUX(none, "mout_fimd1", group3_p, SRC_DISP10, 4, 1),
|
||||
MUX(none, "mout_mipi1", group2_p, SRC_DISP10, 16, 3),
|
||||
MUX(none, "mout_dp1", group2_p, SRC_DISP10, 20, 3),
|
||||
MUX(none, "mout_pixel", group2_p, SRC_DISP10, 24, 3),
|
||||
MUX(none, "mout_hdmi", hdmi_p, SRC_DISP10, 28, 1),
|
||||
|
||||
/* MAU Block */
|
||||
MUX(none, "mout_maudio0", maudio0_p, SRC_MAU, 28, 3),
|
||||
|
||||
/* FSYS Block */
|
||||
MUX(none, "mout_usbd301", group2_p, SRC_FSYS, 4, 3),
|
||||
MUX(none, "mout_mmc0", group2_p, SRC_FSYS, 8, 3),
|
||||
MUX(none, "mout_mmc1", group2_p, SRC_FSYS, 12, 3),
|
||||
MUX(none, "mout_mmc2", group2_p, SRC_FSYS, 16, 3),
|
||||
MUX(none, "mout_usbd300", group2_p, SRC_FSYS, 20, 3),
|
||||
MUX(none, "mout_unipro", group2_p, SRC_FSYS, 24, 3),
|
||||
|
||||
/* PERIC Block */
|
||||
MUX(none, "mout_uart0", group2_p, SRC_PERIC0, 4, 3),
|
||||
MUX(none, "mout_uart1", group2_p, SRC_PERIC0, 8, 3),
|
||||
MUX(none, "mout_uart2", group2_p, SRC_PERIC0, 12, 3),
|
||||
MUX(none, "mout_uart3", group2_p, SRC_PERIC0, 16, 3),
|
||||
MUX(none, "mout_pwm", group2_p, SRC_PERIC0, 24, 3),
|
||||
MUX(none, "mout_spdif", spdif_p, SRC_PERIC0, 28, 3),
|
||||
MUX(none, "mout_audio0", audio0_p, SRC_PERIC1, 8, 3),
|
||||
MUX(none, "mout_audio1", audio1_p, SRC_PERIC1, 12, 3),
|
||||
MUX(none, "mout_audio2", audio2_p, SRC_PERIC1, 16, 3),
|
||||
MUX(none, "mout_spi0", group2_p, SRC_PERIC1, 20, 3),
|
||||
MUX(none, "mout_spi1", group2_p, SRC_PERIC1, 24, 3),
|
||||
MUX(none, "mout_spi2", group2_p, SRC_PERIC1, 28, 3),
|
||||
};
|
||||
|
||||
struct samsung_div_clock exynos5420_div_clks[] __initdata = {
|
||||
DIV(none, "div_arm", "mout_cpu", DIV_CPU0, 0, 3),
|
||||
DIV(none, "sclk_apll", "mout_apll", DIV_CPU0, 24, 3),
|
||||
DIV(none, "armclk2", "div_arm", DIV_CPU0, 28, 3),
|
||||
DIV(none, "div_kfc", "mout_cpu_kfc", DIV_KFC0, 0, 3),
|
||||
DIV(none, "sclk_kpll", "mout_kpll", DIV_KFC0, 24, 3),
|
||||
|
||||
DIV(none, "dout_aclk400_mscl", "mout_aclk400_mscl", DIV_TOP0, 4, 3),
|
||||
DIV(none, "dout_aclk200", "mout_aclk200", DIV_TOP0, 8, 3),
|
||||
DIV(none, "dout_aclk200_fsys2", "mout_aclk200_fsys2", DIV_TOP0, 12, 3),
|
||||
DIV(none, "dout_pclk200_fsys", "mout_pclk200_fsys", DIV_TOP0, 24, 3),
|
||||
DIV(none, "dout_aclk200_fsys", "mout_aclk200_fsys", DIV_TOP0, 28, 3),
|
||||
|
||||
DIV(none, "dout_aclk333_432_gscl", "mout_aclk333_432_gscl",
|
||||
DIV_TOP1, 0, 3),
|
||||
DIV(none, "dout_aclk66", "mout_aclk66", DIV_TOP1, 8, 6),
|
||||
DIV(none, "dout_aclk266", "mout_aclk266", DIV_TOP1, 20, 3),
|
||||
DIV(none, "dout_aclk166", "mout_aclk166", DIV_TOP1, 24, 3),
|
||||
DIV(none, "dout_aclk333", "mout_aclk333", DIV_TOP1, 28, 3),
|
||||
|
||||
DIV(none, "dout_aclk333_g2d", "mout_aclk333_g2d", DIV_TOP2, 8, 3),
|
||||
DIV(none, "dout_aclk266_g2d", "mout_aclk266_g2d", DIV_TOP2, 12, 3),
|
||||
DIV(none, "dout_aclk_g3d", "mout_aclk_g3d", DIV_TOP2, 16, 3),
|
||||
DIV(none, "dout_aclk300_jpeg", "mout_aclk300_jpeg", DIV_TOP2, 20, 3),
|
||||
DIV_A(none, "dout_aclk300_disp1", "mout_aclk300_disp1",
|
||||
DIV_TOP2, 24, 3, "aclk300_disp1"),
|
||||
DIV(none, "dout_aclk300_gscl", "mout_aclk300_gscl", DIV_TOP2, 28, 3),
|
||||
|
||||
/* DISP1 Block */
|
||||
DIV(none, "dout_fimd1", "mout_fimd1", DIV_DISP10, 0, 4),
|
||||
DIV(none, "dout_mipi1", "mout_mipi1", DIV_DISP10, 16, 8),
|
||||
DIV(none, "dout_dp1", "mout_dp1", DIV_DISP10, 24, 4),
|
||||
DIV(none, "dout_hdmi_pixel", "mout_pixel", DIV_DISP10, 28, 4),
|
||||
|
||||
/* Audio Block */
|
||||
DIV(none, "dout_maudio0", "mout_maudio0", DIV_MAU, 20, 4),
|
||||
DIV(none, "dout_maupcm0", "dout_maudio0", DIV_MAU, 24, 8),
|
||||
|
||||
/* USB3.0 */
|
||||
DIV(none, "dout_usbphy301", "mout_usbd301", DIV_FSYS0, 12, 4),
|
||||
DIV(none, "dout_usbphy300", "mout_usbd300", DIV_FSYS0, 16, 4),
|
||||
DIV(none, "dout_usbd301", "mout_usbd301", DIV_FSYS0, 20, 4),
|
||||
DIV(none, "dout_usbd300", "mout_usbd300", DIV_FSYS0, 24, 4),
|
||||
|
||||
/* MMC */
|
||||
DIV(none, "dout_mmc0", "mout_mmc0", DIV_FSYS1, 0, 10),
|
||||
DIV(none, "dout_mmc1", "mout_mmc1", DIV_FSYS1, 10, 10),
|
||||
DIV(none, "dout_mmc2", "mout_mmc2", DIV_FSYS1, 20, 10),
|
||||
|
||||
DIV(none, "dout_unipro", "mout_unipro", DIV_FSYS2, 24, 8),
|
||||
|
||||
/* UART and PWM */
|
||||
DIV(none, "dout_uart0", "mout_uart0", DIV_PERIC0, 8, 4),
|
||||
DIV(none, "dout_uart1", "mout_uart1", DIV_PERIC0, 12, 4),
|
||||
DIV(none, "dout_uart2", "mout_uart2", DIV_PERIC0, 16, 4),
|
||||
DIV(none, "dout_uart3", "mout_uart3", DIV_PERIC0, 20, 4),
|
||||
DIV(none, "dout_pwm", "mout_pwm", DIV_PERIC0, 28, 4),
|
||||
|
||||
/* SPI */
|
||||
DIV(none, "dout_spi0", "mout_spi0", DIV_PERIC1, 20, 4),
|
||||
DIV(none, "dout_spi1", "mout_spi1", DIV_PERIC1, 24, 4),
|
||||
DIV(none, "dout_spi2", "mout_spi2", DIV_PERIC1, 28, 4),
|
||||
|
||||
/* PCM */
|
||||
DIV(none, "dout_pcm1", "dout_audio1", DIV_PERIC2, 16, 8),
|
||||
DIV(none, "dout_pcm2", "dout_audio2", DIV_PERIC2, 24, 8),
|
||||
|
||||
/* Audio - I2S */
|
||||
DIV(none, "dout_i2s1", "dout_audio1", DIV_PERIC3, 6, 6),
|
||||
DIV(none, "dout_i2s2", "dout_audio2", DIV_PERIC3, 12, 6),
|
||||
DIV(none, "dout_audio0", "mout_audio0", DIV_PERIC3, 20, 4),
|
||||
DIV(none, "dout_audio1", "mout_audio1", DIV_PERIC3, 24, 4),
|
||||
DIV(none, "dout_audio2", "mout_audio2", DIV_PERIC3, 28, 4),
|
||||
|
||||
/* SPI Pre-Ratio */
|
||||
DIV(none, "dout_pre_spi0", "dout_spi0", DIV_PERIC4, 8, 8),
|
||||
DIV(none, "dout_pre_spi1", "dout_spi1", DIV_PERIC4, 16, 8),
|
||||
DIV(none, "dout_pre_spi2", "dout_spi2", DIV_PERIC4, 24, 8),
|
||||
};
|
||||
|
||||
struct samsung_gate_clock exynos5420_gate_clks[] __initdata = {
|
||||
/* TODO: Re-verify the CG bits for all the gate clocks */
|
||||
GATE_A(mct, "pclk_st", "aclk66_psgen", GATE_BUS_PERIS1, 2, 0, 0, "mct"),
|
||||
|
||||
GATE(0, "aclk200_fsys", "mout_user_aclk200_fsys",
|
||||
GATE_BUS_FSYS0, 9, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk200_fsys2", "mout_user_aclk200_fsys2",
|
||||
GATE_BUS_FSYS0, 10, CLK_IGNORE_UNUSED, 0),
|
||||
|
||||
GATE(0, "aclk333_g2d", "mout_user_aclk333_g2d",
|
||||
GATE_BUS_TOP, 0, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk266_g2d", "mout_user_aclk266_g2d",
|
||||
GATE_BUS_TOP, 1, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk300_jpeg", "mout_user_aclk300_jpeg",
|
||||
GATE_BUS_TOP, 4, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk300_gscl", "mout_user_aclk300_gscl",
|
||||
GATE_BUS_TOP, 6, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk333_432_gscl", "mout_user_aclk333_432_gscl",
|
||||
GATE_BUS_TOP, 7, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "pclk66_gpio", "mout_sw_aclk66",
|
||||
GATE_BUS_TOP, 9, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk66_psgen", "mout_aclk66_psgen",
|
||||
GATE_BUS_TOP, 10, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk66_peric", "mout_aclk66_peric",
|
||||
GATE_BUS_TOP, 11, 0, 0),
|
||||
GATE(0, "aclk166", "mout_user_aclk166",
|
||||
GATE_BUS_TOP, 14, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(0, "aclk333", "mout_aclk333",
|
||||
GATE_BUS_TOP, 15, CLK_IGNORE_UNUSED, 0),
|
||||
|
||||
/* sclk */
|
||||
GATE(sclk_uart0, "sclk_uart0", "dout_uart0",
|
||||
GATE_TOP_SCLK_PERIC, 0, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_uart1, "sclk_uart1", "dout_uart1",
|
||||
GATE_TOP_SCLK_PERIC, 1, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_uart2, "sclk_uart2", "dout_uart2",
|
||||
GATE_TOP_SCLK_PERIC, 2, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_uart3, "sclk_uart3", "dout_uart3",
|
||||
GATE_TOP_SCLK_PERIC, 3, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_spi0, "sclk_spi0", "dout_pre_spi0",
|
||||
GATE_TOP_SCLK_PERIC, 6, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_spi1, "sclk_spi1", "dout_pre_spi1",
|
||||
GATE_TOP_SCLK_PERIC, 7, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_spi2, "sclk_spi2", "dout_pre_spi2",
|
||||
GATE_TOP_SCLK_PERIC, 8, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_spdif, "sclk_spdif", "mout_spdif",
|
||||
GATE_TOP_SCLK_PERIC, 9, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_pwm, "sclk_pwm", "dout_pwm",
|
||||
GATE_TOP_SCLK_PERIC, 11, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_pcm1, "sclk_pcm1", "dout_pcm1",
|
||||
GATE_TOP_SCLK_PERIC, 15, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_pcm2, "sclk_pcm2", "dout_pcm2",
|
||||
GATE_TOP_SCLK_PERIC, 16, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_i2s1, "sclk_i2s1", "dout_i2s1",
|
||||
GATE_TOP_SCLK_PERIC, 17, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_i2s2, "sclk_i2s2", "dout_i2s2",
|
||||
GATE_TOP_SCLK_PERIC, 18, CLK_SET_RATE_PARENT, 0),
|
||||
|
||||
GATE(sclk_mmc0, "sclk_mmc0", "dout_mmc0",
|
||||
GATE_TOP_SCLK_FSYS, 0, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_mmc1, "sclk_mmc1", "dout_mmc1",
|
||||
GATE_TOP_SCLK_FSYS, 1, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_mmc2, "sclk_mmc2", "dout_mmc2",
|
||||
GATE_TOP_SCLK_FSYS, 2, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_usbphy301, "sclk_usbphy301", "dout_usbphy301",
|
||||
GATE_TOP_SCLK_FSYS, 7, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_usbphy300, "sclk_usbphy300", "dout_usbphy300",
|
||||
GATE_TOP_SCLK_FSYS, 8, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_usbd300, "sclk_usbd300", "dout_usbd300",
|
||||
GATE_TOP_SCLK_FSYS, 9, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_usbd301, "sclk_usbd301", "dout_usbd301",
|
||||
GATE_TOP_SCLK_FSYS, 10, CLK_SET_RATE_PARENT, 0),
|
||||
|
||||
GATE(sclk_usbd301, "sclk_unipro", "dout_unipro",
|
||||
SRC_MASK_FSYS, 24, CLK_SET_RATE_PARENT, 0),
|
||||
|
||||
GATE(sclk_gscl_wa, "sclk_gscl_wa", "aclK333_432_gscl",
|
||||
GATE_TOP_SCLK_GSCL, 6, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_gscl_wb, "sclk_gscl_wb", "aclk333_432_gscl",
|
||||
GATE_TOP_SCLK_GSCL, 7, CLK_SET_RATE_PARENT, 0),
|
||||
|
||||
/* Display */
|
||||
GATE(sclk_fimd1, "sclk_fimd1", "dout_fimd1",
|
||||
GATE_TOP_SCLK_DISP1, 0, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_mipi1, "sclk_mipi1", "dout_mipi1",
|
||||
GATE_TOP_SCLK_DISP1, 3, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_hdmi, "sclk_hdmi", "mout_hdmi",
|
||||
GATE_TOP_SCLK_DISP1, 9, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_pixel, "sclk_pixel", "dout_hdmi_pixel",
|
||||
GATE_TOP_SCLK_DISP1, 10, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_dp1, "sclk_dp1", "dout_dp1",
|
||||
GATE_TOP_SCLK_DISP1, 20, CLK_SET_RATE_PARENT, 0),
|
||||
|
||||
/* Maudio Block */
|
||||
GATE(sclk_maudio0, "sclk_maudio0", "dout_maudio0",
|
||||
GATE_TOP_SCLK_MAU, 0, CLK_SET_RATE_PARENT, 0),
|
||||
GATE(sclk_maupcm0, "sclk_maupcm0", "dout_maupcm0",
|
||||
GATE_TOP_SCLK_MAU, 1, CLK_SET_RATE_PARENT, 0),
|
||||
/* FSYS */
|
||||
GATE(tsi, "tsi", "aclk200_fsys", GATE_BUS_FSYS0, 0, 0, 0),
|
||||
GATE(pdma0, "pdma0", "aclk200_fsys", GATE_BUS_FSYS0, 1, 0, 0),
|
||||
GATE(pdma1, "pdma1", "aclk200_fsys", GATE_BUS_FSYS0, 2, 0, 0),
|
||||
GATE(ufs, "ufs", "aclk200_fsys2", GATE_BUS_FSYS0, 3, 0, 0),
|
||||
GATE(rtic, "rtic", "aclk200_fsys", GATE_BUS_FSYS0, 5, 0, 0),
|
||||
GATE(mmc0, "mmc0", "aclk200_fsys2", GATE_BUS_FSYS0, 12, 0, 0),
|
||||
GATE(mmc1, "mmc1", "aclk200_fsys2", GATE_BUS_FSYS0, 13, 0, 0),
|
||||
GATE(mmc2, "mmc2", "aclk200_fsys2", GATE_BUS_FSYS0, 14, 0, 0),
|
||||
GATE(sromc, "sromc", "aclk200_fsys2",
|
||||
GATE_BUS_FSYS0, 19, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(usbh20, "usbh20", "aclk200_fsys", GATE_BUS_FSYS0, 20, 0, 0),
|
||||
GATE(usbd300, "usbd300", "aclk200_fsys", GATE_BUS_FSYS0, 21, 0, 0),
|
||||
GATE(usbd301, "usbd301", "aclk200_fsys", GATE_BUS_FSYS0, 28, 0, 0),
|
||||
|
||||
/* UART */
|
||||
GATE(uart0, "uart0", "aclk66_peric", GATE_BUS_PERIC, 4, 0, 0),
|
||||
GATE(uart1, "uart1", "aclk66_peric", GATE_BUS_PERIC, 5, 0, 0),
|
||||
GATE_A(uart2, "uart2", "aclk66_peric",
|
||||
GATE_BUS_PERIC, 6, CLK_IGNORE_UNUSED, 0, "uart2"),
|
||||
GATE(uart3, "uart3", "aclk66_peric", GATE_BUS_PERIC, 7, 0, 0),
|
||||
/* I2C */
|
||||
GATE(i2c0, "i2c0", "aclk66_peric", GATE_BUS_PERIC, 9, 0, 0),
|
||||
GATE(i2c1, "i2c1", "aclk66_peric", GATE_BUS_PERIC, 10, 0, 0),
|
||||
GATE(i2c2, "i2c2", "aclk66_peric", GATE_BUS_PERIC, 11, 0, 0),
|
||||
GATE(i2c3, "i2c3", "aclk66_peric", GATE_BUS_PERIC, 12, 0, 0),
|
||||
GATE(i2c4, "i2c4", "aclk66_peric", GATE_BUS_PERIC, 13, 0, 0),
|
||||
GATE(i2c5, "i2c5", "aclk66_peric", GATE_BUS_PERIC, 14, 0, 0),
|
||||
GATE(i2c6, "i2c6", "aclk66_peric", GATE_BUS_PERIC, 15, 0, 0),
|
||||
GATE(i2c7, "i2c7", "aclk66_peric", GATE_BUS_PERIC, 16, 0, 0),
|
||||
GATE(i2c_hdmi, "i2c_hdmi", "aclk66_peric", GATE_BUS_PERIC, 17, 0, 0),
|
||||
GATE(tsadc, "tsadc", "aclk66_peric", GATE_BUS_PERIC, 18, 0, 0),
|
||||
/* SPI */
|
||||
GATE(spi0, "spi0", "aclk66_peric", GATE_BUS_PERIC, 19, 0, 0),
|
||||
GATE(spi1, "spi1", "aclk66_peric", GATE_BUS_PERIC, 20, 0, 0),
|
||||
GATE(spi2, "spi2", "aclk66_peric", GATE_BUS_PERIC, 21, 0, 0),
|
||||
GATE(keyif, "keyif", "aclk66_peric", GATE_BUS_PERIC, 22, 0, 0),
|
||||
/* I2S */
|
||||
GATE(i2s1, "i2s1", "aclk66_peric", GATE_BUS_PERIC, 23, 0, 0),
|
||||
GATE(i2s2, "i2s2", "aclk66_peric", GATE_BUS_PERIC, 24, 0, 0),
|
||||
/* PCM */
|
||||
GATE(pcm1, "pcm1", "aclk66_peric", GATE_BUS_PERIC, 25, 0, 0),
|
||||
GATE(pcm2, "pcm2", "aclk66_peric", GATE_BUS_PERIC, 26, 0, 0),
|
||||
/* PWM */
|
||||
GATE(pwm, "pwm", "aclk66_peric", GATE_BUS_PERIC, 27, 0, 0),
|
||||
/* SPDIF */
|
||||
GATE(spdif, "spdif", "aclk66_peric", GATE_BUS_PERIC, 29, 0, 0),
|
||||
|
||||
GATE(i2c8, "i2c8", "aclk66_peric", GATE_BUS_PERIC1, 0, 0, 0),
|
||||
GATE(i2c9, "i2c9", "aclk66_peric", GATE_BUS_PERIC1, 1, 0, 0),
|
||||
GATE(i2c10, "i2c10", "aclk66_peric", GATE_BUS_PERIC1, 2, 0, 0),
|
||||
|
||||
GATE(chipid, "chipid", "aclk66_psgen",
|
||||
GATE_BUS_PERIS0, 12, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(sysreg, "sysreg", "aclk66_psgen",
|
||||
GATE_BUS_PERIS0, 13, CLK_IGNORE_UNUSED, 0),
|
||||
GATE(tzpc0, "tzpc0", "aclk66_psgen", GATE_BUS_PERIS0, 18, 0, 0),
|
||||
GATE(tzpc1, "tzpc1", "aclk66_psgen", GATE_BUS_PERIS0, 19, 0, 0),
|
||||
GATE(tzpc2, "tzpc2", "aclk66_psgen", GATE_BUS_PERIS0, 20, 0, 0),
|
||||
GATE(tzpc3, "tzpc3", "aclk66_psgen", GATE_BUS_PERIS0, 21, 0, 0),
|
||||
GATE(tzpc4, "tzpc4", "aclk66_psgen", GATE_BUS_PERIS0, 22, 0, 0),
|
||||
GATE(tzpc5, "tzpc5", "aclk66_psgen", GATE_BUS_PERIS0, 23, 0, 0),
|
||||
GATE(tzpc6, "tzpc6", "aclk66_psgen", GATE_BUS_PERIS0, 24, 0, 0),
|
||||
GATE(tzpc7, "tzpc7", "aclk66_psgen", GATE_BUS_PERIS0, 25, 0, 0),
|
||||
GATE(tzpc8, "tzpc8", "aclk66_psgen", GATE_BUS_PERIS0, 26, 0, 0),
|
||||
GATE(tzpc9, "tzpc9", "aclk66_psgen", GATE_BUS_PERIS0, 27, 0, 0),
|
||||
|
||||
GATE(hdmi_cec, "hdmi_cec", "aclk66_psgen", GATE_BUS_PERIS1, 0, 0, 0),
|
||||
GATE(seckey, "seckey", "aclk66_psgen", GATE_BUS_PERIS1, 1, 0, 0),
|
||||
GATE(wdt, "wdt", "aclk66_psgen", GATE_BUS_PERIS1, 3, 0, 0),
|
||||
GATE(rtc, "rtc", "aclk66_psgen", GATE_BUS_PERIS1, 4, 0, 0),
|
||||
GATE(tmu, "tmu", "aclk66_psgen", GATE_BUS_PERIS1, 5, 0, 0),
|
||||
GATE(tmu_gpu, "tmu_gpu", "aclk66_psgen", GATE_BUS_PERIS1, 6, 0, 0),
|
||||
|
||||
GATE(gscl0, "gscl0", "aclk300_gscl", GATE_IP_GSCL0, 0, 0, 0),
|
||||
GATE(gscl1, "gscl1", "aclk300_gscl", GATE_IP_GSCL0, 1, 0, 0),
|
||||
GATE(clk_3aa, "clk_3aa", "aclk300_gscl", GATE_IP_GSCL0, 4, 0, 0),
|
||||
|
||||
GATE(smmu_3aa, "smmu_3aa", "aclk333_432_gscl", GATE_IP_GSCL1, 2, 0, 0),
|
||||
GATE(smmu_fimcl0, "smmu_fimcl0", "aclk333_432_gscl",
|
||||
GATE_IP_GSCL1, 3, 0, 0),
|
||||
GATE(smmu_fimcl1, "smmu_fimcl1", "aclk333_432_gscl",
|
||||
GATE_IP_GSCL1, 4, 0, 0),
|
||||
GATE(smmu_gscl0, "smmu_gscl0", "aclk300_gscl", GATE_IP_GSCL1, 6, 0, 0),
|
||||
GATE(smmu_gscl1, "smmu_gscl1", "aclk300_gscl", GATE_IP_GSCL1, 7, 0, 0),
|
||||
GATE(gscl_wa, "gscl_wa", "aclk300_gscl", GATE_IP_GSCL1, 12, 0, 0),
|
||||
GATE(gscl_wb, "gscl_wb", "aclk300_gscl", GATE_IP_GSCL1, 13, 0, 0),
|
||||
GATE(smmu_fimcl3, "smmu_fimcl3,", "aclk333_432_gscl",
|
||||
GATE_IP_GSCL1, 16, 0, 0),
|
||||
GATE(fimc_lite3, "fimc_lite3", "aclk333_432_gscl",
|
||||
GATE_IP_GSCL1, 17, 0, 0),
|
||||
|
||||
GATE(fimd1, "fimd1", "aclk300_disp1", GATE_IP_DISP1, 0, 0, 0),
|
||||
GATE(dsim1, "dsim1", "aclk200_disp1", GATE_IP_DISP1, 3, 0, 0),
|
||||
GATE(dp1, "dp1", "aclk200_disp1", GATE_IP_DISP1, 4, 0, 0),
|
||||
GATE(mixer, "mixer", "aclk166", GATE_IP_DISP1, 5, 0, 0),
|
||||
GATE(hdmi, "hdmi", "aclk200_disp1", GATE_IP_DISP1, 6, 0, 0),
|
||||
GATE(smmu_fimd1, "smmu_fimd1", "aclk300_disp1", GATE_IP_DISP1, 8, 0, 0),
|
||||
|
||||
GATE(mfc, "mfc", "aclk333", GATE_IP_MFC, 0, 0, 0),
|
||||
GATE(smmu_mfcl, "smmu_mfcl", "aclk333", GATE_IP_MFC, 1, 0, 0),
|
||||
GATE(smmu_mfcr, "smmu_mfcr", "aclk333", GATE_IP_MFC, 2, 0, 0),
|
||||
|
||||
GATE(g3d, "g3d", "aclkg3d", GATE_IP_G3D, 9, 0, 0),
|
||||
|
||||
GATE(rotator, "rotator", "aclk266", GATE_IP_GEN, 1, 0, 0),
|
||||
GATE(jpeg, "jpeg", "aclk300_jpeg", GATE_IP_GEN, 2, 0, 0),
|
||||
GATE(jpeg2, "jpeg2", "aclk300_jpeg", GATE_IP_GEN, 3, 0, 0),
|
||||
GATE(mdma1, "mdma1", "aclk266", GATE_IP_GEN, 4, 0, 0),
|
||||
GATE(smmu_rotator, "smmu_rotator", "aclk266", GATE_IP_GEN, 6, 0, 0),
|
||||
GATE(smmu_jpeg, "smmu_jpeg", "aclk300_jpeg", GATE_IP_GEN, 7, 0, 0),
|
||||
GATE(smmu_mdma1, "smmu_mdma1", "aclk266", GATE_IP_GEN, 9, 0, 0),
|
||||
|
||||
GATE(mscl0, "mscl0", "aclk400_mscl", GATE_IP_MSCL, 0, 0, 0),
|
||||
GATE(mscl1, "mscl1", "aclk400_mscl", GATE_IP_MSCL, 1, 0, 0),
|
||||
GATE(mscl2, "mscl2", "aclk400_mscl", GATE_IP_MSCL, 2, 0, 0),
|
||||
GATE(smmu_mscl0, "smmu_mscl0", "aclk400_mscl", GATE_IP_MSCL, 8, 0, 0),
|
||||
GATE(smmu_mscl1, "smmu_mscl1", "aclk400_mscl", GATE_IP_MSCL, 9, 0, 0),
|
||||
GATE(smmu_mscl2, "smmu_mscl2", "aclk400_mscl", GATE_IP_MSCL, 10, 0, 0),
|
||||
};
|
||||
|
||||
static __initdata struct of_device_id ext_clk_match[] = {
|
||||
{ .compatible = "samsung,exynos5420-oscclk", .data = (void *)0, },
|
||||
{ },
|
||||
};
|
||||
|
||||
/* register exynos5420 clocks */
|
||||
void __init exynos5420_clk_init(struct device_node *np)
|
||||
{
|
||||
void __iomem *reg_base;
|
||||
struct clk *apll, *bpll, *cpll, *dpll, *epll, *ipll, *kpll, *mpll;
|
||||
struct clk *rpll, *spll, *vpll;
|
||||
|
||||
if (np) {
|
||||
reg_base = of_iomap(np, 0);
|
||||
if (!reg_base)
|
||||
panic("%s: failed to map registers\n", __func__);
|
||||
} else {
|
||||
panic("%s: unable to determine soc\n", __func__);
|
||||
}
|
||||
|
||||
samsung_clk_init(np, reg_base, nr_clks,
|
||||
exynos5420_clk_regs, ARRAY_SIZE(exynos5420_clk_regs),
|
||||
NULL, 0);
|
||||
samsung_clk_of_register_fixed_ext(exynos5420_fixed_rate_ext_clks,
|
||||
ARRAY_SIZE(exynos5420_fixed_rate_ext_clks),
|
||||
ext_clk_match);
|
||||
|
||||
apll = samsung_clk_register_pll35xx("fout_apll", "fin_pll",
|
||||
reg_base + 0x100);
|
||||
bpll = samsung_clk_register_pll35xx("fout_bpll", "fin_pll",
|
||||
reg_base + 0x20110);
|
||||
cpll = samsung_clk_register_pll35xx("fout_cpll", "fin_pll",
|
||||
reg_base + 0x10120);
|
||||
dpll = samsung_clk_register_pll35xx("fout_dpll", "fin_pll",
|
||||
reg_base + 0x10128);
|
||||
epll = samsung_clk_register_pll36xx("fout_epll", "fin_pll",
|
||||
reg_base + 0x10130);
|
||||
ipll = samsung_clk_register_pll35xx("fout_ipll", "fin_pll",
|
||||
reg_base + 0x10150);
|
||||
kpll = samsung_clk_register_pll35xx("fout_kpll", "fin_pll",
|
||||
reg_base + 0x28100);
|
||||
mpll = samsung_clk_register_pll35xx("fout_mpll", "fin_pll",
|
||||
reg_base + 0x10180);
|
||||
rpll = samsung_clk_register_pll36xx("fout_rpll", "fin_pll",
|
||||
reg_base + 0x10140);
|
||||
spll = samsung_clk_register_pll35xx("fout_spll", "fin_pll",
|
||||
reg_base + 0x10160);
|
||||
vpll = samsung_clk_register_pll35xx("fout_vpll", "fin_pll",
|
||||
reg_base + 0x10170);
|
||||
|
||||
samsung_clk_register_fixed_rate(exynos5420_fixed_rate_clks,
|
||||
ARRAY_SIZE(exynos5420_fixed_rate_clks));
|
||||
samsung_clk_register_fixed_factor(exynos5420_fixed_factor_clks,
|
||||
ARRAY_SIZE(exynos5420_fixed_factor_clks));
|
||||
samsung_clk_register_mux(exynos5420_mux_clks,
|
||||
ARRAY_SIZE(exynos5420_mux_clks));
|
||||
samsung_clk_register_div(exynos5420_div_clks,
|
||||
ARRAY_SIZE(exynos5420_div_clks));
|
||||
samsung_clk_register_gate(exynos5420_gate_clks,
|
||||
ARRAY_SIZE(exynos5420_gate_clks));
|
||||
}
|
||||
CLK_OF_DECLARE(exynos5420_clk, "samsung,exynos5420-clock", exynos5420_clk_init);
|
@ -400,18 +400,6 @@ static irqreturn_t exynos4_mct_tick_isr(int irq, void *dev_id)
|
||||
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)
|
||||
{
|
||||
struct mct_clock_event_device *mevt;
|
||||
@ -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);
|
||||
|
||||
if (mct_int_type == MCT_INT_SPI) {
|
||||
if (cpu == 0) {
|
||||
mct_tick0_event_irq.dev_id = mevt;
|
||||
evt->irq = mct_irqs[MCT_L0_IRQ];
|
||||
setup_irq(evt->irq, &mct_tick0_event_irq);
|
||||
} else {
|
||||
mct_tick1_event_irq.dev_id = mevt;
|
||||
evt->irq = mct_irqs[MCT_L1_IRQ];
|
||||
setup_irq(evt->irq, &mct_tick1_event_irq);
|
||||
irq_set_affinity(evt->irq, cpumask_of(1));
|
||||
evt->irq = mct_irqs[MCT_L0_IRQ + cpu];
|
||||
if (request_irq(evt->irq, exynos4_mct_tick_isr,
|
||||
IRQF_TIMER | IRQF_NOBALANCING,
|
||||
evt->name, mevt)) {
|
||||
pr_err("exynos-mct: cannot register IRQ %d\n",
|
||||
evt->irq);
|
||||
return -EIO;
|
||||
}
|
||||
irq_set_affinity(evt->irq, cpumask_of(cpu));
|
||||
} else {
|
||||
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)
|
||||
|
||||
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);
|
||||
if (mct_int_type == MCT_INT_SPI)
|
||||
if (cpu == 0)
|
||||
remove_irq(evt->irq, &mct_tick0_event_irq);
|
||||
else
|
||||
remove_irq(evt->irq, &mct_tick1_event_irq);
|
||||
free_irq(evt->irq, this_cpu_ptr(&percpu_mct_tick));
|
||||
else
|
||||
disable_percpu_irq(mct_irqs[MCT_L0_IRQ]);
|
||||
}
|
||||
|
@ -1713,9 +1713,7 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = {
|
||||
#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_CPU_EXYNOS4210) || defined(CONFIG_SOC_EXYNOS4212) || \
|
||||
defined(CONFIG_SOC_EXYNOS4412) || defined(CONFIG_SOC_EXYNOS5250) || \
|
||||
defined(CONFIG_SOC_EXYNOS5440)
|
||||
#if defined(CONFIG_ARCH_EXYNOS)
|
||||
static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = {
|
||||
.info = &(struct s3c24xx_uart_info) {
|
||||
.name = "Samsung Exynos4 UART",
|
||||
|
25
include/dt-bindings/clk/exynos-audss-clk.h
Normal file
25
include/dt-bindings/clk/exynos-audss-clk.h
Normal file
@ -0,0 +1,25 @@
|
||||
/*
|
||||
* 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
|
Loading…
Reference in New Issue
Block a user