Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
f9ed561e
Commit
f9ed561e
authored
Jul 19, 2012
by
Kukjin Kim
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next/dt-samsung' into next/devel-samsung-spi
parents
84a1caf1
79989ba3
Changes
35
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
1057 additions
and
406 deletions
+1057
-406
Documentation/devicetree/bindings/spi/spi-samsung.txt
Documentation/devicetree/bindings/spi/spi-samsung.txt
+113
-0
arch/arm/boot/dts/exynos4210-origen.dts
arch/arm/boot/dts/exynos4210-origen.dts
+12
-0
arch/arm/boot/dts/exynos4210-smdkv310.dts
arch/arm/boot/dts/exynos4210-smdkv310.dts
+38
-0
arch/arm/boot/dts/exynos4210.dtsi
arch/arm/boot/dts/exynos4210.dtsi
+47
-0
arch/arm/boot/dts/exynos5250-smdk5250.dts
arch/arm/boot/dts/exynos5250-smdk5250.dts
+38
-0
arch/arm/boot/dts/exynos5250.dtsi
arch/arm/boot/dts/exynos5250.dtsi
+36
-0
arch/arm/mach-exynos/clock-exynos4.c
arch/arm/mach-exynos/clock-exynos4.c
+48
-19
arch/arm/mach-exynos/clock-exynos5.c
arch/arm/mach-exynos/clock-exynos5.c
+95
-0
arch/arm/mach-exynos/include/mach/irqs.h
arch/arm/mach-exynos/include/mach/irqs.h
+4
-0
arch/arm/mach-exynos/include/mach/map.h
arch/arm/mach-exynos/include/mach/map.h
+3
-0
arch/arm/mach-exynos/mach-exynos4-dt.c
arch/arm/mach-exynos/mach-exynos4-dt.c
+6
-0
arch/arm/mach-exynos/mach-exynos5-dt.c
arch/arm/mach-exynos/mach-exynos5-dt.c
+6
-0
arch/arm/mach-exynos/setup-spi.c
arch/arm/mach-exynos/setup-spi.c
+3
-30
arch/arm/mach-s3c24xx/clock-s3c2416.c
arch/arm/mach-s3c24xx/clock-s3c2416.c
+2
-1
arch/arm/mach-s3c24xx/clock-s3c2443.c
arch/arm/mach-s3c24xx/clock-s3c2443.c
+1
-1
arch/arm/mach-s3c24xx/common-s3c2443.c
arch/arm/mach-s3c24xx/common-s3c2443.c
+2
-2
arch/arm/mach-s3c24xx/setup-spi.c
arch/arm/mach-s3c24xx/setup-spi.c
+1
-9
arch/arm/mach-s3c64xx/clock.c
arch/arm/mach-s3c64xx/clock.c
+10
-10
arch/arm/mach-s3c64xx/include/mach/dma.h
arch/arm/mach-s3c64xx/include/mach/dma.h
+1
-0
arch/arm/mach-s3c64xx/mach-crag6410.c
arch/arm/mach-s3c64xx/mach-crag6410.c
+1
-1
arch/arm/mach-s3c64xx/setup-spi.c
arch/arm/mach-s3c64xx/setup-spi.c
+2
-17
arch/arm/mach-s5p64x0/clock-s5p6440.c
arch/arm/mach-s5p64x0/clock-s5p6440.c
+6
-6
arch/arm/mach-s5p64x0/clock-s5p6450.c
arch/arm/mach-s5p64x0/clock-s5p6450.c
+6
-6
arch/arm/mach-s5p64x0/setup-spi.c
arch/arm/mach-s5p64x0/setup-spi.c
+2
-19
arch/arm/mach-s5pc100/clock.c
arch/arm/mach-s5pc100/clock.c
+15
-15
arch/arm/mach-s5pc100/setup-spi.c
arch/arm/mach-s5pc100/setup-spi.c
+3
-27
arch/arm/mach-s5pv210/clock.c
arch/arm/mach-s5pv210/clock.c
+7
-7
arch/arm/mach-s5pv210/setup-spi.c
arch/arm/mach-s5pv210/setup-spi.c
+2
-19
arch/arm/plat-samsung/devs.c
arch/arm/plat-samsung/devs.c
+23
-37
arch/arm/plat-samsung/dma-ops.c
arch/arm/plat-samsung/dma-ops.c
+42
-34
arch/arm/plat-samsung/include/plat/dma-ops.h
arch/arm/plat-samsung/include/plat/dma-ops.h
+12
-8
arch/arm/plat-samsung/include/plat/s3c64xx-spi.h
arch/arm/plat-samsung/include/plat/s3c64xx-spi.h
+11
-28
arch/arm/plat-samsung/s3c-dma-ops.c
arch/arm/plat-samsung/s3c-dma-ops.c
+22
-17
drivers/spi/spi-s3c64xx.c
drivers/spi/spi-s3c64xx.c
+427
-85
sound/soc/samsung/dma.c
sound/soc/samsung/dma.c
+10
-8
No files found.
Documentation/devicetree/bindings/spi/spi-samsung.txt
0 → 100644
View file @
f9ed561e
* 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>;
};
};
};
arch/arm/boot/dts/exynos4210-origen.dts
View file @
f9ed561e
...
...
@@ -134,4 +134,16 @@ i2c@138C0000 {
i2c@138D0000 {
status = "disabled";
};
spi_0: spi@13920000 {
status = "disabled";
};
spi_1: spi@13930000 {
status = "disabled";
};
spi_2: spi@13940000 {
status = "disabled";
};
};
arch/arm/boot/dts/exynos4210-smdkv310.dts
View file @
f9ed561e
...
...
@@ -179,4 +179,42 @@ i2c@138C0000 {
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>;
};
};
};
};
arch/arm/boot/dts/exynos4210.dtsi
View file @
f9ed561e
...
...
@@ -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 @@ gic:interrupt-controller@10490000 {
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 @@ i2c@138D0000 {
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>;
...
...
arch/arm/boot/dts/exynos5250-smdk5250.dts
View file @
f9ed561e
...
...
@@ -71,4 +71,42 @@ i2c@12CC0000 {
i2c
@
12
CD0000
{
status
=
"disabled"
;
};
spi_0
:
spi
@
12
d20000
{
status
=
"disabled"
;
};
spi_1
:
spi
@
12
d30000
{
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
@
12
d40000
{
status
=
"disabled"
;
};
};
arch/arm/boot/dts/exynos5250.dtsi
View file @
f9ed561e
...
...
@@ -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 @@ i2c@12CD0000 {
#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>;
...
...
arch/arm/mach-exynos/clock-exynos4.c
View file @
f9ed561e
...
...
@@ -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,40 +1242,67 @@ static struct clksrc_clk exynos4_clk_sclk_mmc3 = {
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_FSYS2
,
.
shift
=
24
,
.
size
=
8
},
};
static
struct
clksrc_clk
exynos4_clk_mdout_spi0
=
{
.
clk
=
{
.
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_mdout_spi1
=
{
.
clk
=
{
.
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_mdout_spi2
=
{
.
clk
=
{
.
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
=
"s3c64xx-spi.0"
,
.
devname
=
"exynos4210-spi.0"
,
.
parent
=
&
exynos4_clk_mdout_spi0
.
clk
,
.
enable
=
exynos4_clksrc_mask_peril1_ctrl
,
.
ctrlbit
=
(
1
<<
16
),
},
.
sources
=
&
exynos4_clkset_group
,
.
reg_src
=
{
.
reg
=
EXYNOS4_CLKSRC_PERIL1
,
.
shift
=
16
,
.
size
=
4
},
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_PERIL1
,
.
shift
=
0
,
.
size
=
4
},
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_PERIL1
,
.
shift
=
8
,
.
size
=
8
},
};
static
struct
clksrc_clk
exynos4_clk_sclk_spi1
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s3c64xx-spi.1"
,
.
devname
=
"exynos4210-spi.1"
,
.
parent
=
&
exynos4_clk_mdout_spi1
.
clk
,
.
enable
=
exynos4_clksrc_mask_peril1_ctrl
,
.
ctrlbit
=
(
1
<<
20
),
},
.
sources
=
&
exynos4_clkset_group
,
.
reg_src
=
{
.
reg
=
EXYNOS4_CLKSRC_PERIL1
,
.
shift
=
20
,
.
size
=
4
},
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_PERIL1
,
.
shift
=
16
,
.
size
=
4
},
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_PERIL1
,
.
shift
=
24
,
.
size
=
8
},
};
static
struct
clksrc_clk
exynos4_clk_sclk_spi2
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s3c64xx-spi.2"
,
.
devname
=
"exynos4210-spi.2"
,
.
parent
=
&
exynos4_clk_mdout_spi2
.
clk
,
.
enable
=
exynos4_clksrc_mask_peril1_ctrl
,
.
ctrlbit
=
(
1
<<
24
),
},
.
sources
=
&
exynos4_clkset_group
,
.
reg_src
=
{
.
reg
=
EXYNOS4_CLKSRC_PERIL1
,
.
shift
=
24
,
.
size
=
4
},
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_PERIL2
,
.
shift
=
0
,
.
size
=
4
},
.
reg_div
=
{
.
reg
=
EXYNOS4_CLKDIV_PERIL2
,
.
shift
=
8
,
.
size
=
8
},
};
/* Clock initialization code */
...
...
@@ -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
;
...
...
arch/arm/mach-exynos/clock-exynos5.c
View file @
f9ed561e
...
...
@@ -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
),
...
...
arch/arm/mach-exynos/include/mach/irqs.h
View file @
f9ed561e
...
...
@@ -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
...
...
arch/arm/mach-exynos/include/mach/map.h
View file @
f9ed561e
...
...
@@ -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
...
...
arch/arm/mach-exynos/mach-exynos4-dt.c
View file @
f9ed561e
...
...
@@ -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
),
{},
...
...
arch/arm/mach-exynos/mach-exynos5-dt.c
View file @
f9ed561e
...
...
@@ -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
),
...
...
arch/arm/mach-exynos/setup-spi.c
View file @
f9ed561e
...
...
@@ -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
);
...
...
arch/arm/mach-s3c24xx/clock-s3c2416.c
View file @
f9ed561e
...
...
@@ -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
)
...
...
arch/arm/mach-s3c24xx/clock-s3c2443.c
View file @
f9ed561e
...
...
@@ -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
(
"s3c
64xx
-spi.0"
,
"spi_busclk2"
,
&
clk_hsspi
.
clk
),
CLKDEV_INIT
(
"s3c
2443
-spi.0"
,
"spi_busclk2"
,
&
clk_hsspi
.
clk
),
};
void
__init
s3c2443_init_clocks
(
int
xtal
)
...
...
arch/arm/mach-s3c24xx/common-s3c2443.c
View file @
f9ed561e
...
...
@@ -559,7 +559,7 @@ static struct clk hsmmc1_clk = {
static
struct
clk
hsspi_clk
=
{
.
name
=
"spi"
,
.
devname
=
"s3c
64xx
-spi.0"
,
.
devname
=
"s3c
2443
-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
(
"s3c
64xx
-spi.0"
,
"spi_busclk0"
,
&
hsspi_clk
),
CLKDEV_INIT
(
"s3c
2443
-spi.0"
,
"spi_busclk0"
,
&
hsspi_clk
),
};
void
__init
s3c2443_common_init_clocks
(
int
xtal
,
pll_fn
get_mpll
,
...
...
arch/arm/mach-s3c24xx/setup-spi.c
View file @
f9ed561e
...
...
@@ -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
);
...
...
arch/arm/mach-s3c64xx/clock.c
View file @
f9ed561e
...
...
@@ -178,13 +178,13 @@ static struct clk init_clocks_off[] = {
.
ctrlbit
=
S3C_CLKCON_PCLK_KEYPAD
,
},
{
.
name
=
"spi"
,
.
devname
=
"s3c64
xx
-spi.0"
,
.
devname
=
"s3c64
10
-spi.0"
,
.
parent
=
&
clk_p
,
.
enable
=
s3c64xx_pclk_ctrl
,
.
ctrlbit
=
S3C_CLKCON_PCLK_SPI0
,
},
{
.
name
=
"spi"
,
.
devname
=
"s3c64
xx
-spi.1"
,
.
devname
=
"s3c64
10
-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
=
"s3c64
xx
-spi.0"
,
.
devname
=
"s3c64
10
-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
=
"s3c64
xx
-spi.1"
,
.
devname
=
"s3c64
10
-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
=
"s3c64
xx
-spi.0"
,
.
devname
=
"s3c64
10
-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
=
"s3c64
xx
-spi.1"
,
.
devname
=
"s3c64
10
-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
(
"s3c64
xx
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s3c64
xx
-spi.0"
,
"spi_busclk2"
,
&
clk_48m_spi0
),
CLKDEV_INIT
(
"s3c64
xx
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s3c64
xx
-spi.1"
,
"spi_busclk2"
,
&
clk_48m_spi1
),
CLKDEV_INIT
(
"s3c64
10
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s3c64
10
-spi.0"
,
"spi_busclk2"
,
&
clk_48m_spi0
),
CLKDEV_INIT
(
"s3c64
10
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s3c64
10
-spi.1"
,
"spi_busclk2"
,
&
clk_48m_spi1
),
};
#define GET_DIV(clk, field) ((((clk) & field##_MASK) >> field##_SHIFT) + 1)
...
...
arch/arm/mach-s3c64xx/include/mach/dma.h
View file @
f9ed561e
...
...
@@ -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
,
...
...
arch/arm/mach-s3c64xx/mach-crag6410.c
View file @
f9ed561e
...
...
@@ -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
));
...
...
arch/arm/mach-s3c64xx/setup-spi.c
View file @
f9ed561e
...
...
@@ -9,19 +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
=
0x7f
,
.
rx_lvl_offset
=
13
,
.
tx_st_done
=
21
,
};
int
s3c64xx_spi0_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi0_cfg_gpio
(
void
)
{
s3c_gpio_cfgall_range
(
S3C64XX_GPC
(
0
),
3
,
S3C_GPIO_SFN
(
2
),
S3C_GPIO_PULL_UP
);
...
...
@@ -30,13 +21,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
=
13
,
.
tx_st_done
=
21
,
};
int
s3c64xx_spi1_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi1_cfg_gpio
(
void
)
{
s3c_gpio_cfgall_range
(
S3C64XX_GPC
(
4
),
3
,
S3C_GPIO_SFN
(
2
),
S3C_GPIO_PULL_UP
);
...
...
arch/arm/mach-s5p64x0/clock-s5p6440.c
View file @
f9ed561e
...
...
@@ -227,13 +227,13 @@ static struct clk init_clocks_off[] = {
.
ctrlbit
=
(
1
<<
17
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5p64x0
-spi.0"
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
21
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5p64x0
-spi.1"
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
22
),
...
...
@@ -467,7 +467,7 @@ static struct clksrc_clk clk_sclk_uclk = {
static
struct
clksrc_clk
clk_sclk_spi0
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5p64x0
-spi.0"
,
.
ctrlbit
=
(
1
<<
20
),
.
enable
=
s5p64x0_sclk_ctrl
,
},
...
...
@@ -479,7 +479,7 @@ static struct clksrc_clk clk_sclk_spi0 = {
static
struct
clksrc_clk
clk_sclk_spi1
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5p64x0
-spi.1"
,
.
ctrlbit
=
(
1
<<
21
),
.
enable
=
s5p64x0_sclk_ctrl
,
},
...
...
@@ -519,8 +519,8 @@ static struct clk_lookup s5p6440_clk_lookup[] = {
CLKDEV_INIT
(
NULL
,
"clk_uart_baud2"
,
&
clk_pclk_low
.
clk
),
CLKDEV_INIT
(
NULL
,
"clk_uart_baud3"
,
&
clk_sclk_uclk
.
clk
),
CLKDEV_INIT
(
NULL
,
"spi_busclk0"
,
&
clk_p
),
CLKDEV_INIT
(
"s
3c64xx
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
3c64xx
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s
5p64x0
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
5p64x0
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.0"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc0
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.1"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc1
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.2"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc2
.
clk
),
...
...
arch/arm/mach-s5p64x0/clock-s5p6450.c
View file @
f9ed561e
...
...
@@ -236,13 +236,13 @@ static struct clk init_clocks_off[] = {
.
ctrlbit
=
(
1
<<
17
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5p64x0
-spi.0"
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
21
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5p64x0
-spi.1"
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
22
),
...
...
@@ -528,7 +528,7 @@ static struct clksrc_clk clk_sclk_uclk = {
static
struct
clksrc_clk
clk_sclk_spi0
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5p64x0
-spi.0"
,
.
ctrlbit
=
(
1
<<
20
),
.
enable
=
s5p64x0_sclk_ctrl
,
},
...
...
@@ -540,7 +540,7 @@ static struct clksrc_clk clk_sclk_spi0 = {
static
struct
clksrc_clk
clk_sclk_spi1
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5p64x0
-spi.1"
,
.
ctrlbit
=
(
1
<<
21
),
.
enable
=
s5p64x0_sclk_ctrl
,
},
...
...
@@ -562,8 +562,8 @@ static struct clk_lookup s5p6450_clk_lookup[] = {
CLKDEV_INIT
(
NULL
,
"clk_uart_baud2"
,
&
clk_pclk_low
.
clk
),
CLKDEV_INIT
(
NULL
,
"clk_uart_baud3"
,
&
clk_sclk_uclk
.
clk
),
CLKDEV_INIT
(
NULL
,
"spi_busclk0"
,
&
clk_p
),
CLKDEV_INIT
(
"s
3c64xx
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
3c64xx
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s
5p64x0
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
5p64x0
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.0"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc0
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.1"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc1
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.2"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc2
.
clk
),
...
...
arch/arm/mach-s5p64x0/setup-spi.c
View file @
f9ed561e
...
...
@@ -9,21 +9,10 @@
*/
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/io.h>
#include <plat/gpio-cfg.h>
#include <plat/cpu.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
,
.
tx_st_done
=
25
,
};
int
s3c64xx_spi0_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi0_cfg_gpio
(
void
)
{
if
(
soc_is_s5p6450
())
s3c_gpio_cfgall_range
(
S5P6450_GPC
(
0
),
3
,
...
...
@@ -36,13 +25,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
,
.
tx_st_done
=
25
,
};
int
s3c64xx_spi1_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi1_cfg_gpio
(
void
)
{
if
(
soc_is_s5p6450
())
s3c_gpio_cfgall_range
(
S5P6450_GPC
(
4
),
3
,
...
...
arch/arm/mach-s5pc100/clock.c
View file @
f9ed561e
...
...
@@ -564,19 +564,19 @@ static struct clk init_clocks_off[] = {
.
ctrlbit
=
(
1
<<
5
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5pc100
-spi.0"
,
.
parent
=
&
clk_div_d1_bus
.
clk
,
.
enable
=
s5pc100_d1_4_ctrl
,
.
ctrlbit
=
(
1
<<
6
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5pc100
-spi.1"
,
.
parent
=
&
clk_div_d1_bus
.
clk
,
.
enable
=
s5pc100_d1_4_ctrl
,
.
ctrlbit
=
(
1
<<
7
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.2"
,
.
devname
=
"s
5pc100
-spi.2"
,
.
parent
=
&
clk_div_d1_bus
.
clk
,
.
enable
=
s5pc100_d1_4_ctrl
,
.
ctrlbit
=
(
1
<<
8
),
...
...
@@ -702,7 +702,7 @@ static struct clk clk_hsmmc0 = {
static
struct
clk
clk_48m_spi0
=
{
.
name
=
"spi_48m"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5pc100
-spi.0"
,
.
parent
=
&
clk_mout_48m
.
clk
,
.
enable
=
s5pc100_sclk0_ctrl
,
.
ctrlbit
=
(
1
<<
7
),
...
...
@@ -710,7 +710,7 @@ static struct clk clk_48m_spi0 = {
static
struct
clk
clk_48m_spi1
=
{
.
name
=
"spi_48m"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5pc100
-spi.1"
,
.
parent
=
&
clk_mout_48m
.
clk
,
.
enable
=
s5pc100_sclk0_ctrl
,
.
ctrlbit
=
(
1
<<
8
),
...
...
@@ -718,7 +718,7 @@ static struct clk clk_48m_spi1 = {
static
struct
clk
clk_48m_spi2
=
{
.
name
=
"spi_48m"
,
.
devname
=
"s
3c64xx
-spi.2"
,
.
devname
=
"s
5pc100
-spi.2"
,
.
parent
=
&
clk_mout_48m
.
clk
,
.
enable
=
s5pc100_sclk0_ctrl
,
.
ctrlbit
=
(
1
<<
9
),
...
...
@@ -1085,7 +1085,7 @@ static struct clksrc_clk clk_sclk_mmc2 = {
static
struct
clksrc_clk
clk_sclk_spi0
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5pc100
-spi.0"
,
.
ctrlbit
=
(
1
<<
4
),
.
enable
=
s5pc100_sclk0_ctrl
,
},
...
...
@@ -1097,7 +1097,7 @@ static struct clksrc_clk clk_sclk_spi0 = {
static
struct
clksrc_clk
clk_sclk_spi1
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5pc100
-spi.1"
,
.
ctrlbit
=
(
1
<<
5
),
.
enable
=
s5pc100_sclk0_ctrl
,
},
...
...
@@ -1109,7 +1109,7 @@ static struct clksrc_clk clk_sclk_spi1 = {
static
struct
clksrc_clk
clk_sclk_spi2
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.2"
,
.
devname
=
"s
5pc100
-spi.2"
,
.
ctrlbit
=
(
1
<<
6
),
.
enable
=
s5pc100_sclk0_ctrl
,
},
...
...
@@ -1315,12 +1315,12 @@ static struct clk_lookup s5pc100_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
(
"s
3c64xx
-spi.0"
,
"spi_busclk1"
,
&
clk_48m_spi0
),
CLKDEV_INIT
(
"s
3c64xx
-spi.0"
,
"spi_busclk2"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
3c64xx
-spi.1"
,
"spi_busclk1"
,
&
clk_48m_spi1
),
CLKDEV_INIT
(
"s
3c64xx
-spi.1"
,
"spi_busclk2"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s
3c64xx
-spi.2"
,
"spi_busclk1"
,
&
clk_48m_spi2
),
CLKDEV_INIT
(
"s
3c64xx
-spi.2"
,
"spi_busclk2"
,
&
clk_sclk_spi2
.
clk
),
CLKDEV_INIT
(
"s
5pc100
-spi.0"
,
"spi_busclk1"
,
&
clk_48m_spi0
),
CLKDEV_INIT
(
"s
5pc100
-spi.0"
,
"spi_busclk2"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
5pc100
-spi.1"
,
"spi_busclk1"
,
&
clk_48m_spi1
),
CLKDEV_INIT
(
"s
5pc100
-spi.1"
,
"spi_busclk2"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s
5pc100
-spi.2"
,
"spi_busclk1"
,
&
clk_48m_spi2
),
CLKDEV_INIT
(
"s
5pc100
-spi.2"
,
"spi_busclk2"
,
&
clk_sclk_spi2
.
clk
),
};
void
__init
s5pc100_register_clocks
(
void
)
...
...
arch/arm/mach-s5pc100/setup-spi.c
View file @
f9ed561e
...
...
@@ -9,20 +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
=
0x7f
,
.
rx_lvl_offset
=
13
,
.
high_speed
=
1
,
.
tx_st_done
=
21
,
};
int
s3c64xx_spi0_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi0_cfg_gpio
(
void
)
{
s3c_gpio_cfgall_range
(
S5PC100_GPB
(
0
),
3
,
S3C_GPIO_SFN
(
2
),
S3C_GPIO_PULL_UP
);
...
...
@@ -31,14 +21,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
=
13
,
.
high_speed
=
1
,
.
tx_st_done
=
21
,
};
int
s3c64xx_spi1_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi1_cfg_gpio
(
void
)
{
s3c_gpio_cfgall_range
(
S5PC100_GPB
(
4
),
3
,
S3C_GPIO_SFN
(
2
),
S3C_GPIO_PULL_UP
);
...
...
@@ -47,14 +30,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
=
13
,
.
high_speed
=
1
,
.
tx_st_done
=
21
,
};
int
s3c64xx_spi2_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi2_cfg_gpio
(
void
)
{
s3c_gpio_cfgpin
(
S5PC100_GPG3
(
0
),
S3C_GPIO_SFN
(
3
));
s3c_gpio_setpull
(
S5PC100_GPG3
(
0
),
S3C_GPIO_PULL_UP
);
...
...
arch/arm/mach-s5pv210/clock.c
View file @
f9ed561e
...
...
@@ -445,19 +445,19 @@ static struct clk init_clocks_off[] = {
.
ctrlbit
=
(
1
<<
11
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5pv210
-spi.0"
,
.
parent
=
&
clk_pclk_psys
.
clk
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
12
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5pv210
-spi.1"
,
.
parent
=
&
clk_pclk_psys
.
clk
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
13
),
},
{
.
name
=
"spi"
,
.
devname
=
"s
3c64xx
-spi.2"
,
.
devname
=
"s
5pv210
-spi.2"
,
.
parent
=
&
clk_pclk_psys
.
clk
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
14
),
...
...
@@ -1035,7 +1035,7 @@ static struct clksrc_clk clk_sclk_mmc3 = {
static
struct
clksrc_clk
clk_sclk_spi0
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.0"
,
.
devname
=
"s
5pv210
-spi.0"
,
.
enable
=
s5pv210_clk_mask0_ctrl
,
.
ctrlbit
=
(
1
<<
16
),
},
...
...
@@ -1047,7 +1047,7 @@ static struct clksrc_clk clk_sclk_spi0 = {
static
struct
clksrc_clk
clk_sclk_spi1
=
{
.
clk
=
{
.
name
=
"sclk_spi"
,
.
devname
=
"s
3c64xx
-spi.1"
,
.
devname
=
"s
5pv210
-spi.1"
,
.
enable
=
s5pv210_clk_mask0_ctrl
,
.
ctrlbit
=
(
1
<<
17
),
},
...
...
@@ -1331,8 +1331,8 @@ static struct clk_lookup s5pv210_clk_lookup[] = {
CLKDEV_INIT
(
"s3c-sdhci.2"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc2
.
clk
),
CLKDEV_INIT
(
"s3c-sdhci.3"
,
"mmc_busclk.2"
,
&
clk_sclk_mmc3
.
clk
),
CLKDEV_INIT
(
NULL
,
"spi_busclk0"
,
&
clk_p
),
CLKDEV_INIT
(
"s
3c64xx
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
3c64xx
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
CLKDEV_INIT
(
"s
5pv210
-spi.0"
,
"spi_busclk1"
,
&
clk_sclk_spi0
.
clk
),
CLKDEV_INIT
(
"s
5pv210
-spi.1"
,
"spi_busclk1"
,
&
clk_sclk_spi1
.
clk
),
};
void
__init
s5pv210_register_clocks
(
void
)
...
...
arch/arm/mach-s5pv210/setup-spi.c
View file @
f9ed561e
...
...
@@ -9,20 +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
=
{
.
fifo_lvl_mask
=
0x1ff
,
.
rx_lvl_offset
=
15
,
.
high_speed
=
1
,
.
tx_st_done
=
25
,
};
int
s3c64xx_spi0_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi0_cfg_gpio
(
void
)
{
s3c_gpio_cfgpin
(
S5PV210_GPB
(
0
),
S3C_GPIO_SFN
(
2
));
s3c_gpio_setpull
(
S5PV210_GPB
(
0
),
S3C_GPIO_PULL_UP
);
...
...
@@ -33,14 +23,7 @@ int s3c64xx_spi0_cfg_gpio(struct platform_device *dev)
#endif
#ifdef CONFIG_S3C64XX_DEV_SPI1
struct
s3c64xx_spi_info
s3c64xx_spi1_pdata
=
{
.
fifo_lvl_mask
=
0x7f
,
.
rx_lvl_offset
=
15
,
.
high_speed
=
1
,
.
tx_st_done
=
25
,
};
int
s3c64xx_spi1_cfg_gpio
(
struct
platform_device
*
dev
)
int
s3c64xx_spi1_cfg_gpio
(
void
)
{
s3c_gpio_cfgpin
(
S5PV210_GPB
(
4
),
S3C_GPIO_SFN
(
2
));
s3c_gpio_setpull
(
S5PV210_GPB
(
4
),
S3C_GPIO_PULL_UP
);
...
...
arch/arm/plat-samsung/devs.c
View file @
f9ed561e
...
...
@@ -1513,7 +1513,7 @@ static struct resource s3c64xx_spi0_resource[] = {
};
struct
platform_device
s3c64xx_device_spi0
=
{
.
name
=
"s3c64
xx
-spi"
,
.
name
=
"s3c64
10
-spi"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_spi0_resource
),
.
resource
=
s3c64xx_spi0_resource
,
...
...
@@ -1523,13 +1523,10 @@ struct platform_device s3c64xx_device_spi0 = {
},
};
void
__init
s3c64xx_spi0_set_platdata
(
struct
s3c64xx_spi_info
*
pd
,
int
src_clk_nr
,
int
num_cs
)
void
__init
s3c64xx_spi0_set_platdata
(
int
(
*
cfg_gpio
)(
void
),
int
src_clk_nr
,
int
num_cs
)
{
if
(
!
pd
)
{
pr_err
(
"%s:Need to pass platform data
\n
"
,
__func__
);
return
;
}
struct
s3c64xx_spi_info
pd
;
/* Reject invalid configuration */
if
(
!
num_cs
||
src_clk_nr
<
0
)
{
...
...
@@ -1537,12 +1534,11 @@ void __init s3c64xx_spi0_set_platdata(struct s3c64xx_spi_info *pd,
return
;
}
pd
->
num_cs
=
num_cs
;
pd
->
src_clk_nr
=
src_clk_nr
;
if
(
!
pd
->
cfg_gpio
)
pd
->
cfg_gpio
=
s3c64xx_spi0_cfg_gpio
;
pd
.
num_cs
=
num_cs
;
pd
.
src_clk_nr
=
src_clk_nr
;
pd
.
cfg_gpio
=
(
cfg_gpio
)
?
cfg_gpio
:
s3c64xx_spi0_cfg_gpio
;
s3c_set_platdata
(
pd
,
sizeof
(
*
pd
),
&
s3c64xx_device_spi0
);
s3c_set_platdata
(
&
pd
,
sizeof
(
pd
),
&
s3c64xx_device_spi0
);
}
#endif
/* CONFIG_S3C64XX_DEV_SPI0 */
...
...
@@ -1555,7 +1551,7 @@ static struct resource s3c64xx_spi1_resource[] = {
};
struct
platform_device
s3c64xx_device_spi1
=
{
.
name
=
"s3c64
xx
-spi"
,
.
name
=
"s3c64
10
-spi"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_spi1_resource
),
.
resource
=
s3c64xx_spi1_resource
,
...
...
@@ -1565,26 +1561,20 @@ struct platform_device s3c64xx_device_spi1 = {
},
};
void
__init
s3c64xx_spi1_set_platdata
(
struct
s3c64xx_spi_info
*
pd
,
int
src_clk_nr
,
int
num_cs
)
void
__init
s3c64xx_spi1_set_platdata
(
int
(
*
cfg_gpio
)(
void
),
int
src_clk_nr
,
int
num_cs
)
{
if
(
!
pd
)
{
pr_err
(
"%s:Need to pass platform data
\n
"
,
__func__
);
return
;
}
/* Reject invalid configuration */
if
(
!
num_cs
||
src_clk_nr
<
0
)
{
pr_err
(
"%s: Invalid SPI configuration
\n
"
,
__func__
);
return
;
}
pd
->
num_cs
=
num_cs
;
pd
->
src_clk_nr
=
src_clk_nr
;
if
(
!
pd
->
cfg_gpio
)
pd
->
cfg_gpio
=
s3c64xx_spi1_cfg_gpio
;
pd
.
num_cs
=
num_cs
;
pd
.
src_clk_nr
=
src_clk_nr
;
pd
.
cfg_gpio
=
(
cfg_gpio
)
?
cfg_gpio
:
s3c64xx_spi1_cfg_gpio
;
s3c_set_platdata
(
pd
,
sizeof
(
*
pd
),
&
s3c64xx_device_spi1
);
s3c_set_platdata
(
&
pd
,
sizeof
(
pd
),
&
s3c64xx_device_spi1
);
}
#endif
/* CONFIG_S3C64XX_DEV_SPI1 */
...
...
@@ -1597,7 +1587,7 @@ static struct resource s3c64xx_spi2_resource[] = {
};
struct
platform_device
s3c64xx_device_spi2
=
{
.
name
=
"s3c64
xx
-spi"
,
.
name
=
"s3c64
10
-spi"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_spi2_resource
),
.
resource
=
s3c64xx_spi2_resource
,
...
...
@@ -1607,13 +1597,10 @@ struct platform_device s3c64xx_device_spi2 = {
},
};
void
__init
s3c64xx_spi2_set_platdata
(
struct
s3c64xx_spi_info
*
pd
,
int
src_clk_nr
,
int
num_cs
)
void
__init
s3c64xx_spi2_set_platdata
(
int
(
*
cfg_gpio
)(
void
),
int
src_clk_nr
,
int
num_cs
)
{
if
(
!
pd
)
{
pr_err
(
"%s:Need to pass platform data
\n
"
,
__func__
);
return
;
}
struct
s3c64xx_spi_info
pd
;
/* Reject invalid configuration */
if
(
!
num_cs
||
src_clk_nr
<
0
)
{
...
...
@@ -1621,11 +1608,10 @@ void __init s3c64xx_spi2_set_platdata(struct s3c64xx_spi_info *pd,
return
;
}
pd
->
num_cs
=
num_cs
;
pd
->
src_clk_nr
=
src_clk_nr
;
if
(
!
pd
->
cfg_gpio
)
pd
->
cfg_gpio
=
s3c64xx_spi2_cfg_gpio
;
pd
.
num_cs
=
num_cs
;
pd
.
src_clk_nr
=
src_clk_nr
;
pd
.
cfg_gpio
=
(
cfg_gpio
)
?
cfg_gpio
:
s3c64xx_spi2_cfg_gpio
;
s3c_set_platdata
(
pd
,
sizeof
(
*
pd
),
&
s3c64xx_device_spi2
);
s3c_set_platdata
(
&
pd
,
sizeof
(
pd
),
&
s3c64xx_device_spi2
);
}
#endif
/* CONFIG_S3C64XX_DEV_SPI2 */
arch/arm/plat-samsung/dma-ops.c
View file @
f9ed561e
...
...
@@ -19,72 +19,79 @@
#include <mach/dma.h>
static
unsigned
samsung_dmadev_request
(
enum
dma_ch
dma_ch
,
struct
samsung_dma_
info
*
info
)
struct
samsung_dma_
req
*
param
)
{
struct
dma_chan
*
chan
;
dma_cap_mask_t
mask
;
struct
dma_slave_config
slave_config
;
void
*
filter_param
;
dma_cap_zero
(
mask
);
dma_cap_set
(
info
->
cap
,
mask
);
dma_cap_set
(
param
->
cap
,
mask
);
/*
* If a dma channel property of a device node from device tree is
* specified, use that as the fliter parameter.
*/
filter_param
=
(
dma_ch
==
DMACH_DT_PROP
)
?
(
void
*
)
info
->
dt_dmach_prop
:
(
void
*
)
dma_ch
;
chan
=
dma_request_channel
(
mask
,
pl330_filter
,
filter_param
);
filter_param
=
(
dma_ch
==
DMACH_DT_PROP
)
?
(
void
*
)
param
->
dt_dmach_prop
:
(
void
*
)
dma_ch
;
return
(
unsigned
)
dma_request_channel
(
mask
,
pl330_filter
,
filter_param
);
}
static
int
samsung_dmadev_release
(
unsigned
ch
,
void
*
param
)
{
dma_release_channel
((
struct
dma_chan
*
)
ch
);
if
(
info
->
direction
==
DMA_DEV_TO_MEM
)
{
return
0
;
}
static
int
samsung_dmadev_config
(
unsigned
ch
,
struct
samsung_dma_config
*
param
)
{
struct
dma_chan
*
chan
=
(
struct
dma_chan
*
)
ch
;
struct
dma_slave_config
slave_config
;
if
(
param
->
direction
==
DMA_DEV_TO_MEM
)
{
memset
(
&
slave_config
,
0
,
sizeof
(
struct
dma_slave_config
));
slave_config
.
direction
=
info
->
direction
;
slave_config
.
src_addr
=
info
->
fifo
;
slave_config
.
src_addr_width
=
info
->
width
;
slave_config
.
direction
=
param
->
direction
;
slave_config
.
src_addr
=
param
->
fifo
;
slave_config
.
src_addr_width
=
param
->
width
;
slave_config
.
src_maxburst
=
1
;
dmaengine_slave_config
(
chan
,
&
slave_config
);
}
else
if
(
info
->
direction
==
DMA_MEM_TO_DEV
)
{
}
else
if
(
param
->
direction
==
DMA_MEM_TO_DEV
)
{
memset
(
&
slave_config
,
0
,
sizeof
(
struct
dma_slave_config
));
slave_config
.
direction
=
info
->
direction
;
slave_config
.
dst_addr
=
info
->
fifo
;
slave_config
.
dst_addr_width
=
info
->
width
;
slave_config
.
direction
=
param
->
direction
;
slave_config
.
dst_addr
=
param
->
fifo
;
slave_config
.
dst_addr_width
=
param
->
width
;
slave_config
.
dst_maxburst
=
1
;
dmaengine_slave_config
(
chan
,
&
slave_config
);
}
else
{
pr_warn
(
"unsupported direction
\n
"
);
return
-
EINVAL
;
}
return
(
unsigned
)
chan
;
}
static
int
samsung_dmadev_release
(
unsigned
ch
,
struct
s3c2410_dma_client
*
client
)
{
dma_release_channel
((
struct
dma_chan
*
)
ch
);
return
0
;
}
static
int
samsung_dmadev_prepare
(
unsigned
ch
,
struct
samsung_dma_prep
_info
*
info
)
struct
samsung_dma_prep
*
param
)
{
struct
scatterlist
sg
;
struct
dma_chan
*
chan
=
(
struct
dma_chan
*
)
ch
;
struct
dma_async_tx_descriptor
*
desc
;
switch
(
info
->
cap
)
{
switch
(
param
->
cap
)
{
case
DMA_SLAVE
:
sg_init_table
(
&
sg
,
1
);
sg_dma_len
(
&
sg
)
=
info
->
len
;
sg_set_page
(
&
sg
,
pfn_to_page
(
PFN_DOWN
(
info
->
buf
)),
info
->
len
,
offset_in_page
(
info
->
buf
));
sg_dma_address
(
&
sg
)
=
info
->
buf
;
sg_dma_len
(
&
sg
)
=
param
->
len
;
sg_set_page
(
&
sg
,
pfn_to_page
(
PFN_DOWN
(
param
->
buf
)),
param
->
len
,
offset_in_page
(
param
->
buf
));
sg_dma_address
(
&
sg
)
=
param
->
buf
;
desc
=
dmaengine_prep_slave_sg
(
chan
,
&
sg
,
1
,
info
->
direction
,
DMA_PREP_INTERRUPT
);
&
sg
,
1
,
param
->
direction
,
DMA_PREP_INTERRUPT
);
break
;
case
DMA_CYCLIC
:
desc
=
dmaengine_prep_dma_cyclic
(
chan
,
info
->
buf
,
info
->
len
,
info
->
period
,
info
->
direction
);
desc
=
dmaengine_prep_dma_cyclic
(
chan
,
param
->
buf
,
param
->
len
,
param
->
period
,
param
->
direction
);
break
;
default:
dev_err
(
&
chan
->
dev
->
device
,
"unsupported format
\n
"
);
...
...
@@ -96,8 +103,8 @@ static int samsung_dmadev_prepare(unsigned ch,
return
-
EFAULT
;
}
desc
->
callback
=
info
->
fp
;
desc
->
callback_param
=
info
->
fp_param
;
desc
->
callback
=
param
->
fp
;
desc
->
callback_param
=
param
->
fp_param
;
dmaengine_submit
((
struct
dma_async_tx_descriptor
*
)
desc
);
...
...
@@ -119,6 +126,7 @@ static inline int samsung_dmadev_flush(unsigned ch)
static
struct
samsung_dma_ops
dmadev_ops
=
{
.
request
=
samsung_dmadev_request
,
.
release
=
samsung_dmadev_release
,
.
config
=
samsung_dmadev_config
,
.
prepare
=
samsung_dmadev_prepare
,
.
trigger
=
samsung_dmadev_trigger
,
.
started
=
NULL
,
...
...
arch/arm/plat-samsung/include/plat/dma-ops.h
View file @
f9ed561e
...
...
@@ -16,7 +16,13 @@
#include <linux/dmaengine.h>
#include <mach/dma.h>
struct
samsung_dma_prep_info
{
struct
samsung_dma_req
{
enum
dma_transaction_type
cap
;
struct
property
*
dt_dmach_prop
;
struct
s3c2410_dma_client
*
client
;
};
struct
samsung_dma_prep
{
enum
dma_transaction_type
cap
;
enum
dma_transfer_direction
direction
;
dma_addr_t
buf
;
...
...
@@ -26,19 +32,17 @@ struct samsung_dma_prep_info {
void
*
fp_param
;
};
struct
samsung_dma_info
{
enum
dma_transaction_type
cap
;
struct
samsung_dma_config
{
enum
dma_transfer_direction
direction
;
enum
dma_slave_buswidth
width
;
dma_addr_t
fifo
;
struct
s3c2410_dma_client
*
client
;
struct
property
*
dt_dmach_prop
;
};
struct
samsung_dma_ops
{
unsigned
(
*
request
)(
enum
dma_ch
ch
,
struct
samsung_dma_info
*
info
);
int
(
*
release
)(
unsigned
ch
,
struct
s3c2410_dma_client
*
client
);
int
(
*
prepare
)(
unsigned
ch
,
struct
samsung_dma_prep_info
*
info
);
unsigned
(
*
request
)(
enum
dma_ch
ch
,
struct
samsung_dma_req
*
param
);
int
(
*
release
)(
unsigned
ch
,
void
*
param
);
int
(
*
config
)(
unsigned
ch
,
struct
samsung_dma_config
*
param
);
int
(
*
prepare
)(
unsigned
ch
,
struct
samsung_dma_prep
*
param
);
int
(
*
trigger
)(
unsigned
ch
);
int
(
*
started
)(
unsigned
ch
);
int
(
*
flush
)(
unsigned
ch
);
...
...
arch/arm/plat-samsung/include/plat/s3c64xx-spi.h
View file @
f9ed561e
...
...
@@ -18,7 +18,6 @@ struct platform_device;
* @fb_delay: Slave specific feedback delay.
* Refer to FB_CLK_SEL register definition in SPI chapter.
* @line: Custom 'identity' of the CS line.
* @set_level: CS line control.
*
* This is per SPI-Slave Chipselect information.
* Allocate and initialize one in machine init code and make the
...
...
@@ -27,57 +26,41 @@ struct platform_device;
struct
s3c64xx_spi_csinfo
{
u8
fb_delay
;
unsigned
line
;
void
(
*
set_level
)(
unsigned
line_id
,
int
lvl
);
};
/**
* struct s3c64xx_spi_info - SPI Controller defining structure
* @src_clk_nr: Clock source index for the CLK_CFG[SPI_CLKSEL] field.
* @clk_from_cmu: If the SPI clock/prescalar control block is present
* by the platform's clock-management-unit and not in SPI controller.
* @num_cs: Number of CS this controller emulates.
* @cfg_gpio: Configure pins for this SPI controller.
* @fifo_lvl_mask: All tx fifo_lvl fields start at offset-6
* @rx_lvl_offset: Depends on tx fifo_lvl field and bus number
* @high_speed: If the controller supports HIGH_SPEED_EN bit
* @tx_st_done: Depends on tx fifo_lvl field
*/
struct
s3c64xx_spi_info
{
int
src_clk_nr
;
bool
clk_from_cmu
;
int
num_cs
;
int
(
*
cfg_gpio
)(
struct
platform_device
*
pdev
);
/* Following two fields are for future compatibility */
int
fifo_lvl_mask
;
int
rx_lvl_offset
;
int
high_speed
;
int
tx_st_done
;
int
(
*
cfg_gpio
)(
void
);
};
/**
* s3c64xx_spi_set_platdata - SPI Controller configure callback by the board
* initialization code.
* @
pd: SPI platform data to set
.
* @
cfg_gpio: Pointer to gpio setup function
.
* @src_clk_nr: Clock the SPI controller is to use to generate SPI clocks.
* @num_cs: Number of elements in the 'cs' array.
*
* Call this from machine init code for each SPI Controller that
* has some chips attached to it.
*/
extern
void
s3c64xx_spi0_set_platdata
(
struct
s3c64xx_spi_info
*
pd
,
int
src_clk_nr
,
int
num_cs
);
extern
void
s3c64xx_spi1_set_platdata
(
struct
s3c64xx_spi_info
*
pd
,
int
src_clk_nr
,
int
num_cs
);
extern
void
s3c64xx_spi2_set_platdata
(
struct
s3c64xx_spi_info
*
pd
,
int
src_clk_nr
,
int
num_cs
);
extern
void
s3c64xx_spi0_set_platdata
(
int
(
*
cfg_gpio
)(
void
),
int
src_clk_nr
,
int
num_cs
);
extern
void
s3c64xx_spi1_set_platdata
(
int
(
*
cfg_gpio
)(
void
),
int
src_clk_nr
,
int
num_cs
);
extern
void
s3c64xx_spi2_set_platdata
(
int
(
*
cfg_gpio
)(
void
),
int
src_clk_nr
,
int
num_cs
);
/* defined by architecture to configure gpio */
extern
int
s3c64xx_spi0_cfg_gpio
(
struct
platform_device
*
dev
);
extern
int
s3c64xx_spi1_cfg_gpio
(
struct
platform_device
*
dev
);
extern
int
s3c64xx_spi2_cfg_gpio
(
struct
platform_device
*
dev
);
extern
int
s3c64xx_spi0_cfg_gpio
(
void
);
extern
int
s3c64xx_spi1_cfg_gpio
(
void
);
extern
int
s3c64xx_spi2_cfg_gpio
(
void
);
extern
struct
s3c64xx_spi_info
s3c64xx_spi0_pdata
;
extern
struct
s3c64xx_spi_info
s3c64xx_spi1_pdata
;
...
...
arch/arm/plat-samsung/s3c-dma-ops.c
View file @
f9ed561e
...
...
@@ -36,30 +36,26 @@ static void s3c_dma_cb(struct s3c2410_dma_chan *channel, void *param,
}
static
unsigned
s3c_dma_request
(
enum
dma_ch
dma_ch
,
struct
samsung_dma_info
*
info
)
struct
samsung_dma_req
*
param
)
{
struct
cb_data
*
data
;
if
(
s3c2410_dma_request
(
dma_ch
,
info
->
client
,
NULL
)
<
0
)
{
s3c2410_dma_free
(
dma_ch
,
info
->
client
);
if
(
s3c2410_dma_request
(
dma_ch
,
param
->
client
,
NULL
)
<
0
)
{
s3c2410_dma_free
(
dma_ch
,
param
->
client
);
return
0
;
}
if
(
param
->
cap
==
DMA_CYCLIC
)
s3c2410_dma_setflags
(
dma_ch
,
S3C2410_DMAF_CIRCULAR
);
data
=
kzalloc
(
sizeof
(
struct
cb_data
),
GFP_KERNEL
);
data
->
ch
=
dma_ch
;
list_add_tail
(
&
data
->
node
,
&
dma_list
);
s3c2410_dma_devconfig
(
dma_ch
,
info
->
direction
,
info
->
fifo
);
if
(
info
->
cap
==
DMA_CYCLIC
)
s3c2410_dma_setflags
(
dma_ch
,
S3C2410_DMAF_CIRCULAR
);
s3c2410_dma_config
(
dma_ch
,
info
->
width
);
return
(
unsigned
)
dma_ch
;
}
static
int
s3c_dma_release
(
unsigned
ch
,
struct
s3c2410_dma_client
*
client
)
static
int
s3c_dma_release
(
unsigned
ch
,
void
*
param
)
{
struct
cb_data
*
data
;
...
...
@@ -68,16 +64,24 @@ static int s3c_dma_release(unsigned ch, struct s3c2410_dma_client *client)
break
;
list_del
(
&
data
->
node
);
s3c2410_dma_free
(
ch
,
client
);
s3c2410_dma_free
(
ch
,
param
);
kfree
(
data
);
return
0
;
}
static
int
s3c_dma_prepare
(
unsigned
ch
,
struct
samsung_dma_prep_info
*
info
)
static
int
s3c_dma_config
(
unsigned
ch
,
struct
samsung_dma_config
*
param
)
{
s3c2410_dma_devconfig
(
ch
,
param
->
direction
,
param
->
fifo
);
s3c2410_dma_config
(
ch
,
param
->
width
);
return
0
;
}
static
int
s3c_dma_prepare
(
unsigned
ch
,
struct
samsung_dma_prep
*
param
)
{
struct
cb_data
*
data
;
int
len
=
(
info
->
cap
==
DMA_CYCLIC
)
?
info
->
period
:
info
->
len
;
int
len
=
(
param
->
cap
==
DMA_CYCLIC
)
?
param
->
period
:
param
->
len
;
list_for_each_entry
(
data
,
&
dma_list
,
node
)
if
(
data
->
ch
==
ch
)
...
...
@@ -85,11 +89,11 @@ static int s3c_dma_prepare(unsigned ch, struct samsung_dma_prep_info *info)
if
(
!
data
->
fp
)
{
s3c2410_dma_set_buffdone_fn
(
ch
,
s3c_dma_cb
);
data
->
fp
=
info
->
fp
;
data
->
fp_param
=
info
->
fp_param
;
data
->
fp
=
param
->
fp
;
data
->
fp_param
=
param
->
fp_param
;
}
s3c2410_dma_enqueue
(
ch
,
(
void
*
)
data
,
info
->
buf
,
len
);
s3c2410_dma_enqueue
(
ch
,
(
void
*
)
data
,
param
->
buf
,
len
);
return
0
;
}
...
...
@@ -117,6 +121,7 @@ static inline int s3c_dma_stop(unsigned ch)
static
struct
samsung_dma_ops
s3c_dma_ops
=
{
.
request
=
s3c_dma_request
,
.
release
=
s3c_dma_release
,
.
config
=
s3c_dma_config
,
.
prepare
=
s3c_dma_prepare
,
.
trigger
=
s3c_dma_trigger
,
.
started
=
s3c_dma_started
,
...
...
drivers/spi/spi-s3c64xx.c
View file @
f9ed561e
This diff is collapsed.
Click to expand it.
sound/soc/samsung/dma.c
View file @
f9ed561e
...
...
@@ -74,7 +74,7 @@ static void dma_enqueue(struct snd_pcm_substream *substream)
struct
runtime_data
*
prtd
=
substream
->
runtime
->
private_data
;
dma_addr_t
pos
=
prtd
->
dma_pos
;
unsigned
int
limit
;
struct
samsung_dma_prep
_info
dma_info
;
struct
samsung_dma_prep
dma_info
;
pr_debug
(
"Entered %s
\n
"
,
__func__
);
...
...
@@ -146,7 +146,8 @@ static int dma_hw_params(struct snd_pcm_substream *substream,
unsigned
long
totbytes
=
params_buffer_bytes
(
params
);
struct
s3c_dma_params
*
dma
=
snd_soc_dai_get_dma_data
(
rtd
->
cpu_dai
,
substream
);
struct
samsung_dma_info
dma_info
;
struct
samsung_dma_req
req
;
struct
samsung_dma_config
config
;
pr_debug
(
"Entered %s
\n
"
,
__func__
);
...
...
@@ -166,16 +167,17 @@ static int dma_hw_params(struct snd_pcm_substream *substream,
prtd
->
params
->
ops
=
samsung_dma_get_ops
();
dma_info
.
cap
=
(
samsung_dma_has_circular
()
?
req
.
cap
=
(
samsung_dma_has_circular
()
?
DMA_CYCLIC
:
DMA_SLAVE
);
dma_info
.
client
=
prtd
->
params
->
client
;
dma_info
.
direction
=
req
.
client
=
prtd
->
params
->
client
;
config
.
direction
=
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
?
DMA_MEM_TO_DEV
:
DMA_DEV_TO_MEM
);
dma_info
.
width
=
prtd
->
params
->
dma_size
;
dma_info
.
fifo
=
prtd
->
params
->
dma_addr
;
config
.
width
=
prtd
->
params
->
dma_size
;
config
.
fifo
=
prtd
->
params
->
dma_addr
;
prtd
->
params
->
ch
=
prtd
->
params
->
ops
->
request
(
prtd
->
params
->
channel
,
&
dma_info
);
prtd
->
params
->
channel
,
&
req
);
prtd
->
params
->
ops
->
config
(
prtd
->
params
->
ch
,
&
config
);
}
snd_pcm_set_runtime_buffer
(
substream
,
&
substream
->
dma_buffer
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment