You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'next/dt-samsung' into next/devel-samsung-spi
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
* Samsung SPI Controller
|
||||
|
||||
The Samsung SPI controller is used to interface with various devices such as flash
|
||||
and display controllers using the SPI communication interface.
|
||||
|
||||
Required SoC Specific Properties:
|
||||
|
||||
- compatible: should be one of the following.
|
||||
- samsung,s3c2443-spi: for s3c2443, s3c2416 and s3c2450 platforms
|
||||
- samsung,s3c6410-spi: for s3c6410 platforms
|
||||
- samsung,s5p6440-spi: for s5p6440 and s5p6450 platforms
|
||||
- samsung,s5pv210-spi: for s5pv210 and s5pc110 platforms
|
||||
- samsung,exynos4210-spi: for exynos4 and exynos5 platforms
|
||||
|
||||
- reg: physical base address of the controller and length of memory mapped
|
||||
region.
|
||||
|
||||
- interrupts: The interrupt number to the cpu. The interrupt specifier format
|
||||
depends on the interrupt controller.
|
||||
|
||||
- tx-dma-channel: The dma channel specifier for tx operations. The format of
|
||||
the dma specifier depends on the dma controller.
|
||||
|
||||
- rx-dma-channel: The dma channel specifier for rx operations. The format of
|
||||
the dma specifier depends on the dma controller.
|
||||
|
||||
Required Board Specific Properties:
|
||||
|
||||
- #address-cells: should be 1.
|
||||
- #size-cells: should be 0.
|
||||
- gpios: The gpio specifier for clock, mosi and miso interface lines (in the
|
||||
order specified). The format of the gpio specifier depends on the gpio
|
||||
controller.
|
||||
|
||||
Optional Board Specific Properties:
|
||||
|
||||
- samsung,spi-src-clk: If the spi controller includes a internal clock mux to
|
||||
select the clock source for the spi bus clock, this property can be used to
|
||||
indicate the clock to be used for driving the spi bus clock. If not specified,
|
||||
the clock number 0 is used as default.
|
||||
|
||||
- num-cs: Specifies the number of chip select lines supported. If
|
||||
not specified, the default number of chip select lines is set to 1.
|
||||
|
||||
SPI Controller specific data in SPI slave nodes:
|
||||
|
||||
- The spi slave nodes should provide the following information which is required
|
||||
by the spi controller.
|
||||
|
||||
- cs-gpio: A gpio specifier that specifies the gpio line used as
|
||||
the slave select line by the spi controller. The format of the gpio
|
||||
specifier depends on the gpio controller.
|
||||
|
||||
- samsung,spi-feedback-delay: The sampling phase shift to be applied on the
|
||||
miso line (to account for any lag in the miso line). The following are the
|
||||
valid values.
|
||||
|
||||
- 0: No phase shift.
|
||||
- 1: 90 degree phase shift sampling.
|
||||
- 2: 180 degree phase shift sampling.
|
||||
- 3: 270 degree phase shift sampling.
|
||||
|
||||
Aliases:
|
||||
|
||||
- All the SPI controller nodes should be represented in the aliases node using
|
||||
the following format 'spi{n}' where n is a unique number for the alias.
|
||||
|
||||
|
||||
Example:
|
||||
|
||||
- SoC Specific Portion:
|
||||
|
||||
spi_0: spi@12d20000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x12d20000 0x100>;
|
||||
interrupts = <0 66 0>;
|
||||
tx-dma-channel = <&pdma0 5>;
|
||||
rx-dma-channel = <&pdma0 4>;
|
||||
};
|
||||
|
||||
- Board Specific Portion:
|
||||
|
||||
spi_0: spi@12d20000 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
gpios = <&gpa2 4 2 3 0>,
|
||||
<&gpa2 6 2 3 0>,
|
||||
<&gpa2 7 2 3 0>;
|
||||
|
||||
w25q80bw@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "w25x80";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <10000>;
|
||||
|
||||
controller-data {
|
||||
cs-gpio = <&gpa2 5 1 0 3>;
|
||||
samsung,spi-feedback-delay = <0>;
|
||||
};
|
||||
|
||||
partition@0 {
|
||||
label = "U-Boot";
|
||||
reg = <0x0 0x40000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@40000 {
|
||||
label = "Kernel";
|
||||
reg = <0x40000 0xc0000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -134,4 +134,16 @@
|
||||
i2c@138D0000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_0: spi@13920000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_1: spi@13930000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_2: spi@13940000 {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -179,4 +179,42 @@
|
||||
i2c@138D0000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_0: spi@13920000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_1: spi@13930000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_2: spi@13940000 {
|
||||
gpios = <&gpc1 1 5 3 0>,
|
||||
<&gpc1 3 5 3 0>,
|
||||
<&gpc1 4 5 3 0>;
|
||||
|
||||
w25x80@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "w25x80";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <1000000>;
|
||||
|
||||
controller-data {
|
||||
cs-gpio = <&gpc1 2 1 0 3>;
|
||||
samsung,spi-feedback-delay = <0>;
|
||||
};
|
||||
|
||||
partition@0 {
|
||||
label = "U-Boot";
|
||||
reg = <0x0 0x40000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@40000 {
|
||||
label = "Kernel";
|
||||
reg = <0x40000 0xc0000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -25,6 +25,12 @@
|
||||
compatible = "samsung,exynos4210";
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
aliases {
|
||||
spi0 = &spi_0;
|
||||
spi1 = &spi_1;
|
||||
spi2 = &spi_2;
|
||||
};
|
||||
|
||||
gic:interrupt-controller@10490000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
#interrupt-cells = <3>;
|
||||
@@ -33,6 +39,17 @@
|
||||
reg = <0x10490000 0x1000>, <0x10480000 0x100>;
|
||||
};
|
||||
|
||||
combiner:interrupt-controller@10440000 {
|
||||
compatible = "samsung,exynos4210-combiner";
|
||||
#interrupt-cells = <2>;
|
||||
interrupt-controller;
|
||||
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>;
|
||||
};
|
||||
|
||||
watchdog@10060000 {
|
||||
compatible = "samsung,s3c2410-wdt";
|
||||
reg = <0x10060000 0x100>;
|
||||
@@ -147,6 +164,36 @@
|
||||
interrupts = <0 65 0>;
|
||||
};
|
||||
|
||||
spi_0: spi@13920000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x13920000 0x100>;
|
||||
interrupts = <0 66 0>;
|
||||
tx-dma-channel = <&pdma0 7>;
|
||||
rx-dma-channel = <&pdma0 6>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
spi_1: spi@13930000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x13930000 0x100>;
|
||||
interrupts = <0 67 0>;
|
||||
tx-dma-channel = <&pdma1 7>;
|
||||
rx-dma-channel = <&pdma1 6>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
spi_2: spi@13940000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x13940000 0x100>;
|
||||
interrupts = <0 68 0>;
|
||||
tx-dma-channel = <&pdma0 9>;
|
||||
rx-dma-channel = <&pdma0 8>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
amba {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@@ -71,4 +71,42 @@
|
||||
i2c@12CD0000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_0: spi@12d20000 {
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
spi_1: spi@12d30000 {
|
||||
gpios = <&gpa2 4 2 3 0>,
|
||||
<&gpa2 6 2 3 0>,
|
||||
<&gpa2 7 2 3 0>;
|
||||
|
||||
w25q80bw@0 {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
compatible = "w25x80";
|
||||
reg = <0>;
|
||||
spi-max-frequency = <1000000>;
|
||||
|
||||
controller-data {
|
||||
cs-gpio = <&gpa2 5 1 0 3>;
|
||||
samsung,spi-feedback-delay = <0>;
|
||||
};
|
||||
|
||||
partition@0 {
|
||||
label = "U-Boot";
|
||||
reg = <0x0 0x40000>;
|
||||
read-only;
|
||||
};
|
||||
|
||||
partition@40000 {
|
||||
label = "Kernel";
|
||||
reg = <0x40000 0xc0000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
spi_2: spi@12d40000 {
|
||||
status = "disabled";
|
||||
};
|
||||
};
|
||||
|
||||
@@ -23,6 +23,12 @@
|
||||
compatible = "samsung,exynos5250";
|
||||
interrupt-parent = <&gic>;
|
||||
|
||||
aliases {
|
||||
spi0 = &spi_0;
|
||||
spi1 = &spi_1;
|
||||
spi2 = &spi_2;
|
||||
};
|
||||
|
||||
gic:interrupt-controller@10481000 {
|
||||
compatible = "arm,cortex-a9-gic";
|
||||
#interrupt-cells = <3>;
|
||||
@@ -146,6 +152,36 @@
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
spi_0: spi@12d20000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x12d20000 0x100>;
|
||||
interrupts = <0 66 0>;
|
||||
tx-dma-channel = <&pdma0 5>;
|
||||
rx-dma-channel = <&pdma0 4>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
spi_1: spi@12d30000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x12d30000 0x100>;
|
||||
interrupts = <0 67 0>;
|
||||
tx-dma-channel = <&pdma1 5>;
|
||||
rx-dma-channel = <&pdma1 4>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
spi_2: spi@12d40000 {
|
||||
compatible = "samsung,exynos4210-spi";
|
||||
reg = <0x12d40000 0x100>;
|
||||
interrupts = <0 68 0>;
|
||||
tx-dma-channel = <&pdma0 7>;
|
||||
rx-dma-channel = <&pdma0 6>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
|
||||
amba {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@@ -586,17 +586,17 @@ static struct clk exynos4_init_clocks_off[] = {
|
||||
.ctrlbit = (1 << 13),
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "s3c64xx-spi.0",
|
||||
.devname = "exynos4210-spi.0",
|
||||
.enable = exynos4_clk_ip_peril_ctrl,
|
||||
.ctrlbit = (1 << 16),
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "s3c64xx-spi.1",
|
||||
.devname = "exynos4210-spi.1",
|
||||
.enable = exynos4_clk_ip_peril_ctrl,
|
||||
.ctrlbit = (1 << 17),
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "s3c64xx-spi.2",
|
||||
.devname = "exynos4210-spi.2",
|
||||
.enable = exynos4_clk_ip_peril_ctrl,
|
||||
.ctrlbit = (1 << 18),
|
||||
}, {
|
||||
@@ -1242,42 +1242,69 @@ static struct clksrc_clk exynos4_clk_sclk_mmc3 = {
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_FSYS2, .shift = 24, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos4_clk_sclk_spi0 = {
|
||||
static struct clksrc_clk exynos4_clk_mdout_spi0 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "s3c64xx-spi.0",
|
||||
.enable = exynos4_clksrc_mask_peril1_ctrl,
|
||||
.ctrlbit = (1 << 16),
|
||||
.name = "mdout_spi",
|
||||
.devname = "exynos4210-spi.0",
|
||||
},
|
||||
.sources = &exynos4_clkset_group,
|
||||
.reg_src = { .reg = EXYNOS4_CLKSRC_PERIL1, .shift = 16, .size = 4 },
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_PERIL1, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos4_clk_sclk_spi1 = {
|
||||
static struct clksrc_clk exynos4_clk_mdout_spi1 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "s3c64xx-spi.1",
|
||||
.enable = exynos4_clksrc_mask_peril1_ctrl,
|
||||
.ctrlbit = (1 << 20),
|
||||
.name = "mdout_spi",
|
||||
.devname = "exynos4210-spi.1",
|
||||
},
|
||||
.sources = &exynos4_clkset_group,
|
||||
.reg_src = { .reg = EXYNOS4_CLKSRC_PERIL1, .shift = 20, .size = 4 },
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_PERIL1, .shift = 16, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos4_clk_sclk_spi2 = {
|
||||
static struct clksrc_clk exynos4_clk_mdout_spi2 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "s3c64xx-spi.2",
|
||||
.enable = exynos4_clksrc_mask_peril1_ctrl,
|
||||
.ctrlbit = (1 << 24),
|
||||
.name = "mdout_spi",
|
||||
.devname = "exynos4210-spi.2",
|
||||
},
|
||||
.sources = &exynos4_clkset_group,
|
||||
.reg_src = { .reg = EXYNOS4_CLKSRC_PERIL1, .shift = 24, .size = 4 },
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_PERIL2, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos4_clk_sclk_spi0 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "exynos4210-spi.0",
|
||||
.parent = &exynos4_clk_mdout_spi0.clk,
|
||||
.enable = exynos4_clksrc_mask_peril1_ctrl,
|
||||
.ctrlbit = (1 << 16),
|
||||
},
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_PERIL1, .shift = 8, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos4_clk_sclk_spi1 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "exynos4210-spi.1",
|
||||
.parent = &exynos4_clk_mdout_spi1.clk,
|
||||
.enable = exynos4_clksrc_mask_peril1_ctrl,
|
||||
.ctrlbit = (1 << 20),
|
||||
},
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_PERIL1, .shift = 24, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos4_clk_sclk_spi2 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "exynos4210-spi.2",
|
||||
.parent = &exynos4_clk_mdout_spi2.clk,
|
||||
.enable = exynos4_clksrc_mask_peril1_ctrl,
|
||||
.ctrlbit = (1 << 24),
|
||||
},
|
||||
.reg_div = { .reg = EXYNOS4_CLKDIV_PERIL2, .shift = 8, .size = 8 },
|
||||
};
|
||||
|
||||
/* Clock initialization code */
|
||||
static struct clksrc_clk *exynos4_sysclks[] = {
|
||||
&exynos4_clk_mout_apll,
|
||||
@@ -1331,7 +1358,9 @@ static struct clksrc_clk *exynos4_clksrc_cdev[] = {
|
||||
&exynos4_clk_sclk_spi0,
|
||||
&exynos4_clk_sclk_spi1,
|
||||
&exynos4_clk_sclk_spi2,
|
||||
|
||||
&exynos4_clk_mdout_spi0,
|
||||
&exynos4_clk_mdout_spi1,
|
||||
&exynos4_clk_mdout_spi2,
|
||||
};
|
||||
|
||||
static struct clk_lookup exynos4_clk_lookup[] = {
|
||||
@@ -1347,9 +1376,9 @@ static struct clk_lookup exynos4_clk_lookup[] = {
|
||||
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos4_clk_pdma0),
|
||||
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos4_clk_pdma1),
|
||||
CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos4_clk_mdma1),
|
||||
CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk0", &exynos4_clk_sclk_spi0.clk),
|
||||
CLKDEV_INIT("s3c64xx-spi.1", "spi_busclk0", &exynos4_clk_sclk_spi1.clk),
|
||||
CLKDEV_INIT("s3c64xx-spi.2", "spi_busclk0", &exynos4_clk_sclk_spi2.clk),
|
||||
CLKDEV_INIT("exynos4210-spi.0", "spi_busclk0", &exynos4_clk_sclk_spi0.clk),
|
||||
CLKDEV_INIT("exynos4210-spi.1", "spi_busclk0", &exynos4_clk_sclk_spi1.clk),
|
||||
CLKDEV_INIT("exynos4210-spi.2", "spi_busclk0", &exynos4_clk_sclk_spi2.clk),
|
||||
};
|
||||
|
||||
static int xtal_rate;
|
||||
|
||||
@@ -131,6 +131,11 @@ static int exynos5_clksrc_mask_peric0_ctrl(struct clk *clk, int enable)
|
||||
return s5p_gatectrl(EXYNOS5_CLKSRC_MASK_PERIC0, clk, enable);
|
||||
}
|
||||
|
||||
static int exynos5_clksrc_mask_peric1_ctrl(struct clk *clk, int enable)
|
||||
{
|
||||
return s5p_gatectrl(EXYNOS5_CLKSRC_MASK_PERIC1, clk, enable);
|
||||
}
|
||||
|
||||
static int exynos5_clk_ip_acp_ctrl(struct clk *clk, int enable)
|
||||
{
|
||||
return s5p_gatectrl(EXYNOS5_CLKGATE_IP_ACP, clk, enable);
|
||||
@@ -740,6 +745,24 @@ static struct clk exynos5_init_clocks_off[] = {
|
||||
.parent = &exynos5_clk_aclk_66.clk,
|
||||
.enable = exynos5_clk_ip_peric_ctrl,
|
||||
.ctrlbit = (1 << 14),
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "exynos4210-spi.0",
|
||||
.parent = &exynos5_clk_aclk_66.clk,
|
||||
.enable = exynos5_clk_ip_peric_ctrl,
|
||||
.ctrlbit = (1 << 16),
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "exynos4210-spi.1",
|
||||
.parent = &exynos5_clk_aclk_66.clk,
|
||||
.enable = exynos5_clk_ip_peric_ctrl,
|
||||
.ctrlbit = (1 << 17),
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "exynos4210-spi.2",
|
||||
.parent = &exynos5_clk_aclk_66.clk,
|
||||
.enable = exynos5_clk_ip_peric_ctrl,
|
||||
.ctrlbit = (1 << 18),
|
||||
}, {
|
||||
.name = SYSMMU_CLOCK_NAME,
|
||||
.devname = SYSMMU_CLOCK_DEVNAME(mfc_l, 0),
|
||||
@@ -1034,6 +1057,69 @@ static struct clksrc_clk exynos5_clk_sclk_mmc3 = {
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_FSYS2, .shift = 24, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clk_mdout_spi0 = {
|
||||
.clk = {
|
||||
.name = "mdout_spi",
|
||||
.devname = "exynos4210-spi.0",
|
||||
},
|
||||
.sources = &exynos5_clkset_group,
|
||||
.reg_src = { .reg = EXYNOS5_CLKSRC_PERIC1, .shift = 16, .size = 4 },
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC1, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clk_mdout_spi1 = {
|
||||
.clk = {
|
||||
.name = "mdout_spi",
|
||||
.devname = "exynos4210-spi.1",
|
||||
},
|
||||
.sources = &exynos5_clkset_group,
|
||||
.reg_src = { .reg = EXYNOS5_CLKSRC_PERIC1, .shift = 20, .size = 4 },
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC1, .shift = 16, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clk_mdout_spi2 = {
|
||||
.clk = {
|
||||
.name = "mdout_spi",
|
||||
.devname = "exynos4210-spi.2",
|
||||
},
|
||||
.sources = &exynos5_clkset_group,
|
||||
.reg_src = { .reg = EXYNOS5_CLKSRC_PERIC1, .shift = 24, .size = 4 },
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC2, .shift = 0, .size = 4 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clk_sclk_spi0 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "exynos4210-spi.0",
|
||||
.parent = &exynos5_clk_mdout_spi0.clk,
|
||||
.enable = exynos5_clksrc_mask_peric1_ctrl,
|
||||
.ctrlbit = (1 << 16),
|
||||
},
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC1, .shift = 8, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clk_sclk_spi1 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "exynos4210-spi.1",
|
||||
.parent = &exynos5_clk_mdout_spi1.clk,
|
||||
.enable = exynos5_clksrc_mask_peric1_ctrl,
|
||||
.ctrlbit = (1 << 20),
|
||||
},
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC1, .shift = 24, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clk_sclk_spi2 = {
|
||||
.clk = {
|
||||
.name = "sclk_spi",
|
||||
.devname = "exynos4210-spi.2",
|
||||
.parent = &exynos5_clk_mdout_spi2.clk,
|
||||
.enable = exynos5_clksrc_mask_peric1_ctrl,
|
||||
.ctrlbit = (1 << 24),
|
||||
},
|
||||
.reg_div = { .reg = EXYNOS5_CLKDIV_PERIC2, .shift = 8, .size = 8 },
|
||||
};
|
||||
|
||||
static struct clksrc_clk exynos5_clksrcs[] = {
|
||||
{
|
||||
.clk = {
|
||||
@@ -1148,6 +1234,12 @@ static struct clksrc_clk *exynos5_sysclks[] = {
|
||||
&exynos5_clk_dout_mmc4,
|
||||
&exynos5_clk_aclk_acp,
|
||||
&exynos5_clk_pclk_acp,
|
||||
&exynos5_clk_sclk_spi0,
|
||||
&exynos5_clk_sclk_spi1,
|
||||
&exynos5_clk_sclk_spi2,
|
||||
&exynos5_clk_mdout_spi0,
|
||||
&exynos5_clk_mdout_spi1,
|
||||
&exynos5_clk_mdout_spi2,
|
||||
};
|
||||
|
||||
static struct clk *exynos5_clk_cdev[] = {
|
||||
@@ -1176,6 +1268,9 @@ static struct clk_lookup exynos5_clk_lookup[] = {
|
||||
CLKDEV_INIT("exynos4-sdhci.1", "mmc_busclk.2", &exynos5_clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("exynos4-sdhci.2", "mmc_busclk.2", &exynos5_clk_sclk_mmc2.clk),
|
||||
CLKDEV_INIT("exynos4-sdhci.3", "mmc_busclk.2", &exynos5_clk_sclk_mmc3.clk),
|
||||
CLKDEV_INIT("exynos4210-spi.0", "spi_busclk0", &exynos5_clk_sclk_spi0.clk),
|
||||
CLKDEV_INIT("exynos4210-spi.1", "spi_busclk0", &exynos5_clk_sclk_spi1.clk),
|
||||
CLKDEV_INIT("exynos4210-spi.2", "spi_busclk0", &exynos5_clk_sclk_spi2.clk),
|
||||
CLKDEV_INIT("dma-pl330.0", "apb_pclk", &exynos5_clk_pdma0),
|
||||
CLKDEV_INIT("dma-pl330.1", "apb_pclk", &exynos5_clk_pdma1),
|
||||
CLKDEV_INIT("dma-pl330.2", "apb_pclk", &exynos5_clk_mdma1),
|
||||
|
||||
@@ -195,6 +195,10 @@
|
||||
#define IRQ_IIC6 EXYNOS4_IRQ_IIC6
|
||||
#define IRQ_IIC7 EXYNOS4_IRQ_IIC7
|
||||
|
||||
#define IRQ_SPI0 EXYNOS4_IRQ_SPI0
|
||||
#define IRQ_SPI1 EXYNOS4_IRQ_SPI1
|
||||
#define IRQ_SPI2 EXYNOS4_IRQ_SPI2
|
||||
|
||||
#define IRQ_USB_HOST EXYNOS4_IRQ_USB_HOST
|
||||
#define IRQ_OTG EXYNOS4_IRQ_USB_HSOTG
|
||||
|
||||
|
||||
@@ -154,6 +154,9 @@
|
||||
#define EXYNOS4_PA_SPI0 0x13920000
|
||||
#define EXYNOS4_PA_SPI1 0x13930000
|
||||
#define EXYNOS4_PA_SPI2 0x13940000
|
||||
#define EXYNOS5_PA_SPI0 0x12D20000
|
||||
#define EXYNOS5_PA_SPI1 0x12D30000
|
||||
#define EXYNOS5_PA_SPI2 0x12D40000
|
||||
|
||||
#define EXYNOS4_PA_GPIO1 0x11400000
|
||||
#define EXYNOS4_PA_GPIO2 0x11000000
|
||||
|
||||
@@ -55,6 +55,12 @@ static const struct of_dev_auxdata exynos4210_auxdata_lookup[] __initconst = {
|
||||
"exynos4-sdhci.3", NULL),
|
||||
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS4_PA_IIC(0),
|
||||
"s3c2440-i2c.0", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI0,
|
||||
"exynos4210-spi.0", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI1,
|
||||
"exynos4210-spi.1", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS4_PA_SPI2,
|
||||
"exynos4210-spi.2", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_PDMA0, "dma-pl330.0", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS4_PA_PDMA1, "dma-pl330.1", NULL),
|
||||
{},
|
||||
|
||||
@@ -47,6 +47,12 @@ static const struct of_dev_auxdata exynos5250_auxdata_lookup[] __initconst = {
|
||||
"s3c2440-i2c.0", NULL),
|
||||
OF_DEV_AUXDATA("samsung,s3c2440-i2c", EXYNOS5_PA_IIC(1),
|
||||
"s3c2440-i2c.1", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI0,
|
||||
"exynos4210-spi.0", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI1,
|
||||
"exynos4210-spi.1", NULL),
|
||||
OF_DEV_AUXDATA("samsung,exynos4210-spi", EXYNOS5_PA_SPI2,
|
||||
"exynos4210-spi.2", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA0, "dma-pl330.0", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_PDMA1, "dma-pl330.1", NULL),
|
||||
OF_DEV_AUXDATA("arm,pl330", EXYNOS5_PA_MDMA1, "dma-pl330.2", NULL),
|
||||
|
||||
@@ -9,21 +9,10 @@
|
||||
*/
|
||||
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <plat/gpio-cfg.h>
|
||||
#include <plat/s3c64xx-spi.h>
|
||||
|
||||
#ifdef CONFIG_S3C64XX_DEV_SPI0
|
||||
struct s3c64xx_spi_info s3c64xx_spi0_pdata __initdata = {
|
||||
.fifo_lvl_mask = 0x1ff,
|
||||
.rx_lvl_offset = 15,
|
||||
.high_speed = 1,
|
||||
.clk_from_cmu = true,
|
||||
.tx_st_done = 25,
|
||||
};
|
||||
|
||||
int s3c64xx_spi0_cfg_gpio(struct platform_device *dev)
|
||||
int s3c64xx_spi0_cfg_gpio(void)
|
||||
{
|
||||
s3c_gpio_cfgpin(EXYNOS4_GPB(0), S3C_GPIO_SFN(2));
|
||||
s3c_gpio_setpull(EXYNOS4_GPB(0), S3C_GPIO_PULL_UP);
|
||||
@@ -34,15 +23,7 @@ int s3c64xx_spi0_cfg_gpio(struct platform_device *dev)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_S3C64XX_DEV_SPI1
|
||||
struct s3c64xx_spi_info s3c64xx_spi1_pdata __initdata = {
|
||||
.fifo_lvl_mask = 0x7f,
|
||||
.rx_lvl_offset = 15,
|
||||
.high_speed = 1,
|
||||
.clk_from_cmu = true,
|
||||
.tx_st_done = 25,
|
||||
};
|
||||
|
||||
int s3c64xx_spi1_cfg_gpio(struct platform_device *dev)
|
||||
int s3c64xx_spi1_cfg_gpio(void)
|
||||
{
|
||||
s3c_gpio_cfgpin(EXYNOS4_GPB(4), S3C_GPIO_SFN(2));
|
||||
s3c_gpio_setpull(EXYNOS4_GPB(4), S3C_GPIO_PULL_UP);
|
||||
@@ -53,15 +34,7 @@ int s3c64xx_spi1_cfg_gpio(struct platform_device *dev)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_S3C64XX_DEV_SPI2
|
||||
struct s3c64xx_spi_info s3c64xx_spi2_pdata __initdata = {
|
||||
.fifo_lvl_mask = 0x7f,
|
||||
.rx_lvl_offset = 15,
|
||||
.high_speed = 1,
|
||||
.clk_from_cmu = true,
|
||||
.tx_st_done = 25,
|
||||
};
|
||||
|
||||
int s3c64xx_spi2_cfg_gpio(struct platform_device *dev)
|
||||
int s3c64xx_spi2_cfg_gpio(void)
|
||||
{
|
||||
s3c_gpio_cfgpin(EXYNOS4_GPC1(1), S3C_GPIO_SFN(5));
|
||||
s3c_gpio_setpull(EXYNOS4_GPC1(1), S3C_GPIO_PULL_UP);
|
||||
|
||||
@@ -144,7 +144,8 @@ static struct clk_lookup s3c2416_clk_lookup[] = {
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.0", &hsmmc0_clk),
|
||||
CLKDEV_INIT("s3c-sdhci.0", "mmc_busclk.2", &hsmmc_mux0.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &hsmmc_mux1.clk),
|
||||
CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk2", &hsspi_mux.clk),
|
||||
/* s3c2443-spi.0 is used on s3c2416 and s3c2450 as well */
|
||||
CLKDEV_INIT("s3c2443-spi.0", "spi_busclk2", &hsspi_mux.clk),
|
||||
};
|
||||
|
||||
void __init s3c2416_init_clocks(int xtal)
|
||||
|
||||
@@ -181,7 +181,7 @@ static struct clk *clks[] __initdata = {
|
||||
|
||||
static struct clk_lookup s3c2443_clk_lookup[] = {
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_hsmmc),
|
||||
CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk2", &clk_hsspi.clk),
|
||||
CLKDEV_INIT("s3c2443-spi.0", "spi_busclk2", &clk_hsspi.clk),
|
||||
};
|
||||
|
||||
void __init s3c2443_init_clocks(int xtal)
|
||||
|
||||
@@ -559,7 +559,7 @@ static struct clk hsmmc1_clk = {
|
||||
|
||||
static struct clk hsspi_clk = {
|
||||
.name = "spi",
|
||||
.devname = "s3c64xx-spi.0",
|
||||
.devname = "s3c2443-spi.0",
|
||||
.parent = &clk_p,
|
||||
.enable = s3c2443_clkcon_enable_p,
|
||||
.ctrlbit = S3C2443_PCLKCON_HSSPI,
|
||||
@@ -633,7 +633,7 @@ static struct clk_lookup s3c2443_clk_lookup[] = {
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud2", &clk_p),
|
||||
CLKDEV_INIT(NULL, "clk_uart_baud3", &clk_esys_uart.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.0", &hsmmc1_clk),
|
||||
CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk0", &hsspi_clk),
|
||||
CLKDEV_INIT("s3c2443-spi.0", "spi_busclk0", &hsspi_clk),
|
||||
};
|
||||
|
||||
void __init s3c2443_common_init_clocks(int xtal, pll_fn get_mpll,
|
||||
|
||||
@@ -13,20 +13,12 @@
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <plat/gpio-cfg.h>
|
||||
#include <plat/s3c64xx-spi.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/regs-gpio.h>
|
||||
|
||||
#ifdef CONFIG_S3C64XX_DEV_SPI0
|
||||
struct s3c64xx_spi_info s3c64xx_spi0_pdata __initdata = {
|
||||
.fifo_lvl_mask = 0x7f,
|
||||
.rx_lvl_offset = 13,
|
||||
.tx_st_done = 21,
|
||||
.high_speed = 1,
|
||||
};
|
||||
|
||||
int s3c64xx_spi0_cfg_gpio(struct platform_device *pdev)
|
||||
int s3c64xx_spi0_cfg_gpio(void)
|
||||
{
|
||||
/* enable hsspi bit in misccr */
|
||||
s3c2410_modify_misccr(S3C2416_MISCCR_HSSPI_EN2, 1);
|
||||
|
||||
@@ -178,13 +178,13 @@ static struct clk init_clocks_off[] = {
|
||||
.ctrlbit = S3C_CLKCON_PCLK_KEYPAD,
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "s3c64xx-spi.0",
|
||||
.devname = "s3c6410-spi.0",
|
||||
.parent = &clk_p,
|
||||
.enable = s3c64xx_pclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_SPI0,
|
||||
}, {
|
||||
.name = "spi",
|
||||
.devname = "s3c64xx-spi.1",
|
||||
.devname = "s3c6410-spi.1",
|
||||
.parent = &clk_p,
|
||||
.enable = s3c64xx_pclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_SPI1,
|
||||
@@ -331,7 +331,7 @@ static struct clk init_clocks_off[] = {
|
||||
|
||||
static struct clk clk_48m_spi0 = {
|
||||
.name = "spi_48m",
|
||||
.devname = "s3c64xx-spi.0",
|
||||
.devname = "s3c6410-spi.0",
|
||||
.parent = &clk_48m,
|
||||
.enable = s3c64xx_sclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_SCLK_SPI0_48,
|
||||
@@ -339,7 +339,7 @@ static struct clk clk_48m_spi0 = {
|
||||
|
||||
static struct clk clk_48m_spi1 = {
|
||||
.name = "spi_48m",
|
||||
.devname = "s3c64xx-spi.1",
|
||||
.devname = "s3c6410-spi.1",
|
||||
.parent = &clk_48m,
|
||||
.enable = s3c64xx_sclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_SCLK_SPI1_48,
|
||||
@@ -802,7 +802,7 @@ static struct clksrc_clk clk_sclk_mmc2 = {
|
||||
static struct clksrc_clk clk_sclk_spi0 = {
|
||||
.clk = {
|
||||
.name = "spi-bus",
|
||||
.devname = "s3c64xx-spi.0",
|
||||
.devname = "s3c6410-spi.0",
|
||||
.ctrlbit = S3C_CLKCON_SCLK_SPI0,
|
||||
.enable = s3c64xx_sclk_ctrl,
|
||||
},
|
||||
@@ -814,7 +814,7 @@ static struct clksrc_clk clk_sclk_spi0 = {
|
||||
static struct clksrc_clk clk_sclk_spi1 = {
|
||||
.clk = {
|
||||
.name = "spi-bus",
|
||||
.devname = "s3c64xx-spi.1",
|
||||
.devname = "s3c6410-spi.1",
|
||||
.ctrlbit = S3C_CLKCON_SCLK_SPI1,
|
||||
.enable = s3c64xx_sclk_ctrl,
|
||||
},
|
||||
@@ -858,10 +858,10 @@ static struct clk_lookup s3c64xx_clk_lookup[] = {
|
||||
CLKDEV_INIT("s3c-sdhci.1", "mmc_busclk.2", &clk_sclk_mmc1.clk),
|
||||
CLKDEV_INIT("s3c-sdhci.2", "mmc_busclk.2", &clk_sclk_mmc2.clk),
|
||||
CLKDEV_INIT(NULL, "spi_busclk0", &clk_p),
|
||||
CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk1", &clk_sclk_spi0.clk),
|
||||
CLKDEV_INIT("s3c64xx-spi.0", "spi_busclk2", &clk_48m_spi0),
|
||||
CLKDEV_INIT("s3c64xx-spi.1", "spi_busclk1", &clk_sclk_spi1.clk),
|
||||
CLKDEV_INIT("s3c64xx-spi.1", "spi_busclk2", &clk_48m_spi1),
|
||||
CLKDEV_INIT("s3c6410-spi.0", "spi_busclk1", &clk_sclk_spi0.clk),
|
||||
CLKDEV_INIT("s3c6410-spi.0", "spi_busclk2", &clk_48m_spi0),
|
||||
CLKDEV_INIT("s3c6410-spi.1", "spi_busclk1", &clk_sclk_spi1.clk),
|
||||
CLKDEV_INIT("s3c6410-spi.1", "spi_busclk2", &clk_48m_spi1),
|
||||
};
|
||||
|
||||
#define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1)
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
*/
|
||||
enum dma_ch {
|
||||
/* DMA0/SDMA0 */
|
||||
DMACH_DT_PROP = -1, /* not yet supported, do not use */
|
||||
DMACH_UART0 = 0,
|
||||
DMACH_UART0_SRC2,
|
||||
DMACH_UART1,
|
||||
|
||||
@@ -799,7 +799,7 @@ static void __init crag6410_machine_init(void)
|
||||
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
|
||||
|
||||
samsung_keypad_set_platdata(&crag6410_keypad_data);
|
||||
s3c64xx_spi0_set_platdata(&s3c64xx_spi0_pdata, 0, 1);
|
||||
s3c64xx_spi0_set_platdata(NULL, 0, 1);
|
||||
|
||||
platform_add_devices(crag6410_devices, ARRAY_SIZE(crag6410_devices));
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user