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
nexedi
linux
Commits
e641d158
Commit
e641d158
authored
Dec 30, 2010
by
Kukjin Kim
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'next-samsung-asoc2' into for-next-new
parents
387c31c7
d8a2d39d
Changes
28
Hide whitespace changes
Inline
Side-by-side
Showing
28 changed files
with
986 additions
and
100 deletions
+986
-100
arch/arm/mach-s3c64xx/clock.c
arch/arm/mach-s3c64xx/clock.c
+1
-1
arch/arm/mach-s3c64xx/dev-audio.c
arch/arm/mach-s3c64xx/dev-audio.c
+34
-26
arch/arm/mach-s5p6442/dev-audio.c
arch/arm/mach-s5p6442/dev-audio.c
+37
-7
arch/arm/mach-s5p6442/mach-smdk6442.c
arch/arm/mach-s5p6442/mach-smdk6442.c
+10
-0
arch/arm/mach-s5p6442/setup-i2c0.c
arch/arm/mach-s5p6442/setup-i2c0.c
+4
-1
arch/arm/mach-s5p64x0/clock-s5p6440.c
arch/arm/mach-s5p64x0/clock-s5p6440.c
+1
-1
arch/arm/mach-s5p64x0/clock-s5p6450.c
arch/arm/mach-s5p64x0/clock-s5p6450.c
+13
-1
arch/arm/mach-s5p64x0/dev-audio.c
arch/arm/mach-s5p64x0/dev-audio.c
+114
-30
arch/arm/mach-s5p64x0/include/mach/map.h
arch/arm/mach-s5p64x0/include/mach/map.h
+2
-0
arch/arm/mach-s5p64x0/mach-smdk6440.c
arch/arm/mach-s5p64x0/mach-smdk6440.c
+1
-0
arch/arm/mach-s5p64x0/mach-smdk6450.c
arch/arm/mach-s5p64x0/mach-smdk6450.c
+1
-0
arch/arm/mach-s5pc100/dev-audio.c
arch/arm/mach-s5pc100/dev-audio.c
+41
-13
arch/arm/mach-s5pv210/clock.c
arch/arm/mach-s5pv210/clock.c
+5
-5
arch/arm/mach-s5pv210/dev-audio.c
arch/arm/mach-s5pv210/dev-audio.c
+42
-14
arch/arm/mach-s5pv210/mach-smdkc110.c
arch/arm/mach-s5pv210/mach-smdkc110.c
+1
-0
arch/arm/mach-s5pv210/mach-smdkv210.c
arch/arm/mach-s5pv210/mach-smdkv210.c
+1
-0
arch/arm/mach-s5pv310/Kconfig
arch/arm/mach-s5pv310/Kconfig
+5
-0
arch/arm/mach-s5pv310/Makefile
arch/arm/mach-s5pv310/Makefile
+2
-1
arch/arm/mach-s5pv310/clock.c
arch/arm/mach-s5pv310/clock.c
+30
-0
arch/arm/mach-s5pv310/dev-audio.c
arch/arm/mach-s5pv310/dev-audio.c
+364
-0
arch/arm/mach-s5pv310/dma.c
arch/arm/mach-s5pv310/dma.c
+168
-0
arch/arm/mach-s5pv310/include/mach/dma.h
arch/arm/mach-s5pv310/include/mach/dma.h
+26
-0
arch/arm/mach-s5pv310/include/mach/irqs.h
arch/arm/mach-s5pv310/include/mach/irqs.h
+3
-0
arch/arm/mach-s5pv310/include/mach/map.h
arch/arm/mach-s5pv310/include/mach/map.h
+21
-0
arch/arm/mach-s5pv310/mach-smdkc210.c
arch/arm/mach-s5pv310/mach-smdkc210.c
+12
-0
arch/arm/mach-s5pv310/mach-smdkv310.c
arch/arm/mach-s5pv310/mach-smdkv310.c
+12
-0
arch/arm/plat-samsung/include/plat/audio.h
arch/arm/plat-samsung/include/plat/audio.h
+24
-0
arch/arm/plat-samsung/include/plat/devs.h
arch/arm/plat-samsung/include/plat/devs.h
+11
-0
No files found.
arch/arm/mach-s3c64xx/clock.c
View file @
e641d158
...
...
@@ -695,7 +695,7 @@ static struct clksrc_clk clksrcs[] = {
},
{
.
clk
=
{
.
name
=
"audio-bus"
,
.
id
=
-
1
,
/* There's only one IISv4 port */
.
id
=
2
,
.
ctrlbit
=
S3C6410_CLKCON_SCLK_AUDIO2
,
.
enable
=
s3c64xx_sclk_ctrl
,
},
...
...
arch/arm/mach-s3c64xx/dev-audio.c
View file @
e641d158
...
...
@@ -22,7 +22,12 @@
#include <plat/audio.h>
#include <plat/gpio-cfg.h>
static
int
s3c64xx_i2sv3_cfg_gpio
(
struct
platform_device
*
pdev
)
static
const
char
*
rclksrc
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"audio-bus"
,
};
static
int
s3c64xx_i2s_cfg_gpio
(
struct
platform_device
*
pdev
)
{
unsigned
int
base
;
...
...
@@ -33,6 +38,12 @@ static int s3c64xx_i2sv3_cfg_gpio(struct platform_device *pdev)
case
1
:
base
=
S3C64XX_GPE
(
0
);
break
;
case
2
:
s3c_gpio_cfgpin
(
S3C64XX_GPC
(
4
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin
(
S3C64XX_GPC
(
5
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin
(
S3C64XX_GPC
(
7
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S3C64XX_GPH
(
6
),
4
,
S3C_GPIO_SFN
(
5
));
return
0
;
default:
printk
(
KERN_DEBUG
"Invalid I2S Controller number: %d
\n
"
,
pdev
->
id
);
...
...
@@ -44,16 +55,6 @@ static int s3c64xx_i2sv3_cfg_gpio(struct platform_device *pdev)
return
0
;
}
static
int
s3c64xx_i2sv4_cfg_gpio
(
struct
platform_device
*
pdev
)
{
s3c_gpio_cfgpin
(
S3C64XX_GPC
(
4
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin
(
S3C64XX_GPC
(
5
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin
(
S3C64XX_GPC
(
7
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S3C64XX_GPH
(
6
),
4
,
S3C_GPIO_SFN
(
5
));
return
0
;
}
static
struct
resource
s3c64xx_iis0_resource
[]
=
{
[
0
]
=
{
.
start
=
S3C64XX_PA_IIS0
,
...
...
@@ -72,17 +73,22 @@ static struct resource s3c64xx_iis0_resource[] = {
},
};
static
struct
s3c_audio_pdata
s3c_i2s0_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2sv3_cfg_gpio
,
static
struct
s3c_audio_pdata
i2sv3_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2s_cfg_gpio
,
.
type
=
{
.
i2s
=
{
.
src_clk
=
rclksrc
,
},
},
};
struct
platform_device
s3c64xx_device_iis0
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis0_resource
),
.
resource
=
s3c64xx_iis0_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s0
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
EXPORT_SYMBOL
(
s3c64xx_device_iis0
);
...
...
@@ -105,17 +111,13 @@ static struct resource s3c64xx_iis1_resource[] = {
},
};
static
struct
s3c_audio_pdata
s3c_i2s1_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2sv3_cfg_gpio
,
};
struct
platform_device
s3c64xx_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis1_resource
),
.
resource
=
s3c64xx_iis1_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s1
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
EXPORT_SYMBOL
(
s3c64xx_device_iis1
);
...
...
@@ -138,17 +140,23 @@ static struct resource s3c64xx_iisv4_resource[] = {
},
};
static
struct
s3c_audio_pdata
s3c_i2sv4_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2sv4_cfg_gpio
,
static
struct
s3c_audio_pdata
i2sv4_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2s_cfg_gpio
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
,
.
src_clk
=
rclksrc
,
},
},
};
struct
platform_device
s3c64xx_device_iisv4
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
id
=
-
1
,
.
name
=
"samsung-i2s
"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iisv4_resource
),
.
resource
=
s3c64xx_iisv4_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_
i2sv4_pdata
,
.
platform_data
=
&
i2sv4_pdata
,
},
};
EXPORT_SYMBOL
(
s3c64xx_device_iisv4
);
...
...
arch/arm/mach-s5p6442/dev-audio.c
View file @
e641d158
...
...
@@ -29,7 +29,7 @@ static int s5p6442_cfg_i2s(struct platform_device *pdev)
base
=
S5P6442_GPC1
(
0
);
break
;
case
-
1
:
case
0
:
base
=
S5P6442_GPC0
(
0
);
break
;
...
...
@@ -42,8 +42,19 @@ static int s5p6442_cfg_i2s(struct platform_device *pdev)
return
0
;
}
static
struct
s3c_audio_pdata
s3c_i2s_pdata
=
{
static
const
char
*
rclksrc_v35
[]
=
{
[
0
]
=
"busclk"
,
[
1
]
=
"i2sclk"
,
};
static
struct
s3c_audio_pdata
i2sv35_pdata
=
{
.
cfg_gpio
=
s5p6442_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_SEC_DAI
|
QUIRK_NEED_RSTCLR
,
.
src_clk
=
rclksrc_v35
,
},
},
};
static
struct
resource
s5p6442_iis0_resource
[]
=
{
...
...
@@ -62,15 +73,34 @@ static struct resource s5p6442_iis0_resource[] = {
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5p6442_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
id
=
-
1
,
.
name
=
"samsung-i2s
"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5p6442_iis0_resource
),
.
resource
=
s5p6442_iis0_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s_pdata
,
.
platform_data
=
&
i2sv35_pdata
,
},
};
static
const
char
*
rclksrc_v3
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"sclk_audio"
,
};
static
struct
s3c_audio_pdata
i2sv3_pdata
=
{
.
cfg_gpio
=
s5p6442_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
src_clk
=
rclksrc_v3
,
},
},
};
...
...
@@ -93,12 +123,12 @@ static struct resource s5p6442_iis1_resource[] = {
};
struct
platform_device
s5p6442_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5p6442_iis1_resource
),
.
resource
=
s5p6442_iis1_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
...
...
arch/arm/mach-s5p6442/mach-smdk6442.c
View file @
e641d158
...
...
@@ -12,6 +12,7 @@
#include <linux/types.h>
#include <linux/init.h>
#include <linux/serial_core.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
...
...
@@ -25,6 +26,7 @@
#include <plat/s5p6442.h>
#include <plat/devs.h>
#include <plat/cpu.h>
#include <plat/iic.h>
/* Following are default values for UCON, ULCON and UFCON UART registers */
#define SMDK6442_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
...
...
@@ -65,10 +67,15 @@ static struct s3c2410_uartcfg smdk6442_uartcfgs[] __initdata = {
};
static
struct
platform_device
*
smdk6442_devices
[]
__initdata
=
{
&
s3c_device_i2c0
,
&
s5p6442_device_iis0
,
&
s3c_device_wdt
,
};
static
struct
i2c_board_info
smdk6442_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
static
void
__init
smdk6442_map_io
(
void
)
{
s5p_init_io
(
NULL
,
0
,
S5P_VA_CHIPID
);
...
...
@@ -78,6 +85,9 @@ static void __init smdk6442_map_io(void)
static
void
__init
smdk6442_machine_init
(
void
)
{
s3c_i2c0_set_platdata
(
NULL
);
i2c_register_board_info
(
0
,
smdk6442_i2c_devs0
,
ARRAY_SIZE
(
smdk6442_i2c_devs0
));
platform_add_devices
(
smdk6442_devices
,
ARRAY_SIZE
(
smdk6442_devices
));
}
...
...
arch/arm/mach-s5p6442/setup-i2c0.c
View file @
e641d158
...
...
@@ -14,12 +14,15 @@
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/gpio.h>
struct
platform_device
;
/* don't need the contents */
#include <plat/gpio-cfg.h>
#include <plat/iic.h>
void
s3c_i2c0_cfg_gpio
(
struct
platform_device
*
dev
)
{
/* Will be populated later */
s3c_gpio_cfgall_range
(
S5P6442_GPD1
(
0
),
2
,
S3C_GPIO_SFN
(
2
),
S3C_GPIO_PULL_UP
);
}
arch/arm/mach-s5p64x0/clock-s5p6440.c
View file @
e641d158
...
...
@@ -261,7 +261,7 @@ static struct clk init_clocks_disable[] = {
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
25
),
},
{
.
name
=
"i
2s_v40
"
,
.
name
=
"i
is
"
,
.
id
=
0
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
...
...
arch/arm/mach-s5p64x0/clock-s5p6450.c
View file @
e641d158
...
...
@@ -256,10 +256,22 @@ static struct clk init_clocks_disable[] = {
.
ctrlbit
=
(
1
<<
22
),
},
{
.
name
=
"iis"
,
.
id
=
-
1
,
.
id
=
0
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
26
),
},
{
.
name
=
"iis"
,
.
id
=
1
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
15
),
},
{
.
name
=
"iis"
,
.
id
=
2
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
16
),
},
{
.
name
=
"i2c"
,
.
id
=
1
,
...
...
arch/arm/mach-s5p64x0/dev-audio.c
View file @
e641d158
...
...
@@ -19,15 +19,19 @@
#include <mach/dma.h>
#include <mach/irqs.h>
static
const
char
*
rclksrc
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"sclk_audio2"
,
};
static
int
s5p6440_cfg_i2s
(
struct
platform_device
*
pdev
)
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
case
-
1
:
s3c_gpio_cfgpin_range
(
S5P6440_GPR
(
4
),
5
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6440_GPR
(
13
),
2
,
S3C_GPIO_SFN
(
5
));
case
0
:
s3c_gpio_cfgpin_range
(
S5P6440_GPC
(
4
),
2
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin
(
S5P6440_GPC
(
7
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6440_GPH
(
6
),
4
,
S3C_GPIO_SFN
(
5
));
break
;
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
...
...
@@ -36,17 +40,58 @@ static int s5p6440_cfg_i2s(struct platform_device *pdev)
return
0
;
}
static
struct
s3c_audio_pdata
s5p6440_i2s_pdata
=
{
.
cfg_gpio
=
s5p6440_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
,
.
src_clk
=
rclksrc
,
},
},
};
static
struct
resource
s5p64x0_i2s0_resource
[]
=
{
[
0
]
=
{
.
start
=
S5P64X0_PA_I2S
,
.
end
=
S5P64X0_PA_I2S
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_I2S0_TX
,
.
end
=
DMACH_I2S0_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_I2S0_RX
,
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5p6440_device_iis
=
{
.
name
=
"samsung-i2s"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5p64x0_i2s0_resource
),
.
resource
=
s5p64x0_i2s0_resource
,
.
dev
=
{
.
platform_data
=
&
s5p6440_i2s_pdata
,
},
};
static
int
s5p6450_cfg_i2s
(
struct
platform_device
*
pdev
)
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
case
-
1
:
s3c_gpio_cfgpin
(
S5P6450_GPB
(
4
),
S3C_GPIO_SFN
(
5
));
case
0
:
s3c_gpio_cfgpin_range
(
S5P6450_GPR
(
4
),
5
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6450_GPR
(
13
),
2
,
S3C_GPIO_SFN
(
5
));
break
;
case
1
:
s3c_gpio_cfgpin
(
S5P6440_GPB
(
4
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6450_GPC
(
0
),
4
,
S3C_GPIO_SFN
(
5
));
break
;
case
2
:
s3c_gpio_cfgpin_range
(
S5P6450_GPK
(
0
),
5
,
S3C_GPIO_SFN
(
5
));
break
;
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
...
...
@@ -55,47 +100,86 @@ static int s5p6450_cfg_i2s(struct platform_device *pdev)
return
0
;
}
static
struct
s3c_audio_pdata
s5p6440_i2s_pdata
=
{
.
cfg_gpio
=
s5p6440_cfg_i2s
,
static
struct
s3c_audio_pdata
s5p6450_i2s0_pdata
=
{
.
cfg_gpio
=
s5p6450_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
,
.
src_clk
=
rclksrc
,
},
},
};
struct
platform_device
s5p6450_device_iis0
=
{
.
name
=
"samsung-i2s"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5p64x0_i2s0_resource
),
.
resource
=
s5p64x0_i2s0_resource
,
.
dev
=
{
.
platform_data
=
&
s5p6450_i2s0_pdata
,
},
};
static
struct
s3c_audio_pdata
s5p6450_i2s_pdata
=
{
.
cfg_gpio
=
s5p6450_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
src_clk
=
rclksrc
,
},
},
};
static
struct
resource
s5p64
x0_iis0
_resource
[]
=
{
static
struct
resource
s5p64
50_i2s1
_resource
[]
=
{
[
0
]
=
{
.
start
=
S5P64
X0_PA_I2S
,
.
end
=
S5P64
X0_PA_I2S
+
0x100
-
1
,
.
start
=
S5P64
50_PA_I2S1
,
.
end
=
S5P64
50_PA_I2S1
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_I2S
0
_TX
,
.
end
=
DMACH_I2S
0
_TX
,
.
start
=
DMACH_I2S
1
_TX
,
.
end
=
DMACH_I2S
1
_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_I2S
0
_RX
,
.
end
=
DMACH_I2S
0
_RX
,
.
start
=
DMACH_I2S
1
_RX
,
.
end
=
DMACH_I2S
1
_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5p64
40_device_iis
=
{
.
name
=
"s
3c64xx-iis-v4
"
,
.
id
=
-
1
,
.
num_resources
=
ARRAY_SIZE
(
s5p64
x0_iis0
_resource
),
.
resource
=
s5p64
x0_iis0
_resource
,
struct
platform_device
s5p64
50_device_iis1
=
{
.
name
=
"s
amsung-i2s
"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5p64
50_i2s1
_resource
),
.
resource
=
s5p64
50_i2s1
_resource
,
.
dev
=
{
.
platform_data
=
&
s5p64
4
0_i2s_pdata
,
.
platform_data
=
&
s5p64
5
0_i2s_pdata
,
},
};
struct
platform_device
s5p6450_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4"
,
.
id
=
-
1
,
.
num_resources
=
ARRAY_SIZE
(
s5p64x0_iis0_resource
),
.
resource
=
s5p64x0_iis0_resource
,
static
struct
resource
s5p6450_i2s2_resource
[]
=
{
[
0
]
=
{
.
start
=
S5P6450_PA_I2S2
,
.
end
=
S5P6450_PA_I2S2
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_I2S2_TX
,
.
end
=
DMACH_I2S2_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_I2S2_RX
,
.
end
=
DMACH_I2S2_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5p6450_device_iis2
=
{
.
name
=
"samsung-i2s"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5p6450_i2s2_resource
),
.
resource
=
s5p6450_i2s2_resource
,
.
dev
=
{
.
platform_data
=
&
s5p6450_i2s_pdata
,
},
...
...
arch/arm/mach-s5p64x0/include/mach/map.h
View file @
e641d158
...
...
@@ -63,6 +63,8 @@
#define S5P64X0_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
#define S5P64X0_PA_I2S (0xF2000000)
#define S5P6450_PA_I2S1 0xF2800000
#define S5P6450_PA_I2S2 0xF2900000
#define S5P64X0_PA_PCM (0xF2100000)
...
...
arch/arm/mach-s5p64x0/mach-smdk6440.c
View file @
e641d158
...
...
@@ -117,6 +117,7 @@ static struct s3c2410_platform_i2c s5p6440_i2c1_data __initdata = {
static
struct
i2c_board_info
smdk6440_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
static
struct
i2c_board_info
smdk6440_i2c_devs1
[]
__initdata
=
{
...
...
arch/arm/mach-s5p64x0/mach-smdk6450.c
View file @
e641d158
...
...
@@ -135,6 +135,7 @@ static struct s3c2410_platform_i2c s5p6450_i2c1_data __initdata = {
};
static
struct
i2c_board_info
smdk6450_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung KS24C080C EEPROM */
};
...
...
arch/arm/mach-s5pc100/dev-audio.c
View file @
e641d158
...
...
@@ -23,17 +23,14 @@ static int s5pc100_cfg_i2s(struct platform_device *pdev)
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
case
0
:
/* Dedicated pins */
break
;
case
1
:
s3c_gpio_cfgpin_range
(
S5PC100_GPC
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
break
;
case
2
:
s3c_gpio_cfgpin_range
(
S5PC100_GPG3
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
break
;
case
-
1
:
/* Dedicated pins */
break
;
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
...
...
@@ -42,8 +39,20 @@ static int s5pc100_cfg_i2s(struct platform_device *pdev)
return
0
;
}
static
struct
s3c_audio_pdata
s3c_i2s_pdata
=
{
static
const
char
*
rclksrc_v5
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"i2sclkd2"
,
};
static
struct
s3c_audio_pdata
i2sv5_pdata
=
{
.
cfg_gpio
=
s5pc100_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
|
QUIRK_SEC_DAI
|
QUIRK_NEED_RSTCLR
,
.
src_clk
=
rclksrc_v5
,
},
},
};
static
struct
resource
s5pc100_iis0_resource
[]
=
{
...
...
@@ -62,15 +71,34 @@ static struct resource s5pc100_iis0_resource[] = {
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pc100_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
id
=
-
1
,
.
name
=
"samsung-i2s
"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis0_resource
),
.
resource
=
s5pc100_iis0_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s_pdata
,
.
platform_data
=
&
i2sv5_pdata
,
},
};
static
const
char
*
rclksrc_v3
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"sclk_audio"
,
};
static
struct
s3c_audio_pdata
i2sv3_pdata
=
{
.
cfg_gpio
=
s5pc100_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
src_clk
=
rclksrc_v3
,
},
},
};
...
...
@@ -93,12 +121,12 @@ static struct resource s5pc100_iis1_resource[] = {
};
struct
platform_device
s5pc100_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis1_resource
),
.
resource
=
s5pc100_iis1_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
...
...
@@ -121,12 +149,12 @@ static struct resource s5pc100_iis2_resource[] = {
};
struct
platform_device
s5pc100_device_iis2
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis2_resource
),
.
resource
=
s5pc100_iis2_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
...
...
arch/arm/mach-s5pv210/clock.c
View file @
e641d158
...
...
@@ -467,20 +467,20 @@ static struct clk init_clocks_disable[] = {
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
21
),
},
{
.
name
=
"i
2s_v50
"
,
.
name
=
"i
is
"
,
.
id
=
0
,
.
parent
=
&
clk_p
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
4
),
},
{
.
name
=
"i
2s_v32
"
,
.
id
=
0
,
.
name
=
"i
is
"
,
.
id
=
1
,
.
parent
=
&
clk_p
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
5
),
},
{
.
name
=
"i
2s_v32
"
,
.
id
=
1
,
.
name
=
"i
is
"
,
.
id
=
2
,
.
parent
=
&
clk_p
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
6
),
...
...
arch/arm/mach-s5pv210/dev-audio.c
View file @
e641d158
...
...
@@ -19,22 +19,24 @@
#include <mach/dma.h>
#include <mach/irqs.h>
static
const
char
*
rclksrc
[]
=
{
[
0
]
=
"busclk"
,
[
1
]
=
"i2sclk"
,
};
static
int
s5pv210_cfg_i2s
(
struct
platform_device
*
pdev
)
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
case
0
:
s3c_gpio_cfgpin_range
(
S5PV210_GPI
(
0
),
7
,
S3C_GPIO_SFN
(
2
));
break
;
case
1
:
s3c_gpio_cfgpin_range
(
S5PV210_GPC0
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
break
;
case
2
:
s3c_gpio_cfgpin_range
(
S5PV210_GPC1
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
break
;
case
-
1
:
s3c_gpio_cfgpin_range
(
S5PV210_GPI
(
0
),
7
,
S3C_GPIO_SFN
(
2
));
break
;
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
...
...
@@ -43,8 +45,15 @@ static int s5pv210_cfg_i2s(struct platform_device *pdev)
return
0
;
}
static
struct
s3c_audio_pdata
s3c_i2s
_pdata
=
{
static
struct
s3c_audio_pdata
i2sv5
_pdata
=
{
.
cfg_gpio
=
s5pv210_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
|
QUIRK_SEC_DAI
|
QUIRK_NEED_RSTCLR
,
.
src_clk
=
rclksrc
,
},
},
};
static
struct
resource
s5pv210_iis0_resource
[]
=
{
...
...
@@ -63,15 +72,34 @@ static struct resource s5pv210_iis0_resource[] = {
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv210_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
id
=
-
1
,
.
name
=
"samsung-i2s
"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis0_resource
),
.
resource
=
s5pv210_iis0_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s_pdata
,
.
platform_data
=
&
i2sv5_pdata
,
},
};
static
const
char
*
rclksrc_v3
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"audio-bus"
,
};
static
struct
s3c_audio_pdata
i2sv3_pdata
=
{
.
cfg_gpio
=
s5pv210_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
src_clk
=
rclksrc_v3
,
},
},
};
...
...
@@ -94,12 +122,12 @@ static struct resource s5pv210_iis1_resource[] = {
};
struct
platform_device
s5pv210_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis1_resource
),
.
resource
=
s5pv210_iis1_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
...
...
@@ -122,12 +150,12 @@ static struct resource s5pv210_iis2_resource[] = {
};
struct
platform_device
s5pv210_device_iis2
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis2_resource
),
.
resource
=
s5pv210_iis2_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
};
...
...
arch/arm/mach-s5pv210/mach-smdkc110.c
View file @
e641d158
...
...
@@ -94,6 +94,7 @@ static struct platform_device *smdkc110_devices[] __initdata = {
static
struct
i2c_board_info
smdkc110_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung S524AD0XD1 */
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
static
struct
i2c_board_info
smdkc110_i2c_devs1
[]
__initdata
=
{
...
...
arch/arm/mach-s5pv210/mach-smdkv210.c
View file @
e641d158
...
...
@@ -123,6 +123,7 @@ static struct platform_device *smdkv210_devices[] __initdata = {
static
struct
i2c_board_info
smdkv210_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung S524AD0XD1 */
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
static
struct
i2c_board_info
smdkv210_i2c_devs1
[]
__initdata
=
{
...
...
arch/arm/mach-s5pv310/Kconfig
View file @
e641d158
...
...
@@ -11,6 +11,7 @@ if ARCH_S5PV310
config CPU_S5PV310
bool
select S3C_PL330_DMA
help
Enable S5PV310 CPU support
...
...
@@ -69,10 +70,12 @@ config MACH_SMDKC210
select CPU_S5PV310
select S3C_DEV_RTC
select S3C_DEV_WDT
select S3C_DEV_I2C1
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1
select S3C_DEV_HSMMC2
select S3C_DEV_HSMMC3
select S5PV310_SETUP_I2C1
select S5PV310_SETUP_SDHCI
help
Machine support for Samsung SMDKC210
...
...
@@ -97,10 +100,12 @@ config MACH_SMDKV310
select CPU_S5PV310
select S3C_DEV_RTC
select S3C_DEV_WDT
select S3C_DEV_I2C1
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1
select S3C_DEV_HSMMC2
select S3C_DEV_HSMMC3
select S5PV310_SETUP_I2C1
select S5PV310_SETUP_SDHCI
help
Machine support for Samsung SMDKV310
...
...
arch/arm/mach-s5pv310/Makefile
View file @
e641d158
...
...
@@ -13,7 +13,7 @@ obj- :=
# Core support for S5PV310 system
obj-$(CONFIG_CPU_S5PV310)
+=
cpu.o init.o clock.o irq-combiner.o
obj-$(CONFIG_CPU_S5PV310)
+=
setup-i2c0.o time.o gpiolib.o irq-eint.o
obj-$(CONFIG_CPU_S5PV310)
+=
setup-i2c0.o time.o gpiolib.o irq-eint.o
dma.o
obj-$(CONFIG_SMP)
+=
platsmp.o headsmp.o
obj-$(CONFIG_LOCAL_TIMERS)
+=
localtimer.o
...
...
@@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) += mach-universal_c210.o
# device support
obj-y
+=
dev-audio.o
obj-$(CONFIG_S5PV310_SETUP_I2C1)
+=
setup-i2c1.o
obj-$(CONFIG_S5PV310_SETUP_I2C2)
+=
setup-i2c2.o
obj-$(CONFIG_S5PV310_SETUP_I2C3)
+=
setup-i2c3.o
...
...
arch/arm/mach-s5pv310/clock.c
View file @
e641d158
...
...
@@ -466,6 +466,16 @@ static struct clk init_clocks_disable[] = {
.
id
=
-
1
,
.
enable
=
s5pv310_clk_ip_fsys_ctrl
,
.
ctrlbit
=
(
1
<<
10
),
},
{
.
name
=
"pdma"
,
.
id
=
0
,
.
enable
=
s5pv310_clk_ip_fsys_ctrl
,
.
ctrlbit
=
(
1
<<
0
),
},
{
.
name
=
"pdma"
,
.
id
=
1
,
.
enable
=
s5pv310_clk_ip_fsys_ctrl
,
.
ctrlbit
=
(
1
<<
1
),
},
{
.
name
=
"adc"
,
.
id
=
-
1
,
...
...
@@ -506,6 +516,26 @@ static struct clk init_clocks_disable[] = {
.
id
=
2
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
ctrlbit
=
(
1
<<
18
),
},
{
.
name
=
"iis"
,
.
id
=
0
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
ctrlbit
=
(
1
<<
19
),
},
{
.
name
=
"iis"
,
.
id
=
1
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
ctrlbit
=
(
1
<<
20
),
},
{
.
name
=
"iis"
,
.
id
=
2
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
ctrlbit
=
(
1
<<
21
),
},
{
.
name
=
"ac97"
,
.
id
=
-
1
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
ctrlbit
=
(
1
<<
27
),
},
{
.
name
=
"fimg2d"
,
.
id
=
-
1
,
...
...
arch/arm/mach-s5pv310/dev-audio.c
0 → 100644
View file @
e641d158
/* linux/arch/arm/mach-s5pv310/dev-audio.c
*
* Copyright (c) 2010 Samsung Electronics Co. Ltd
* Jaswinder Singh <jassi.brar@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.
*/
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/gpio.h>
#include <plat/gpio-cfg.h>
#include <plat/audio.h>
#include <mach/map.h>
#include <mach/dma.h>
#include <mach/irqs.h>
static
const
char
*
rclksrc
[]
=
{
[
0
]
=
"busclk"
,
[
1
]
=
"i2sclk"
,
};
static
int
s5pv310_cfg_i2s
(
struct
platform_device
*
pdev
)
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
case
0
:
s3c_gpio_cfgpin_range
(
S5PV310_GPZ
(
0
),
7
,
S3C_GPIO_SFN
(
2
));
break
;
case
1
:
s3c_gpio_cfgpin_range
(
S5PV310_GPC0
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
break
;
case
2
:
s3c_gpio_cfgpin_range
(
S5PV310_GPC1
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
break
;
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
}
return
0
;
}
static
struct
s3c_audio_pdata
i2sv5_pdata
=
{
.
cfg_gpio
=
s5pv310_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
|
QUIRK_SEC_DAI
|
QUIRK_NEED_RSTCLR
,
.
src_clk
=
rclksrc
,
},
},
};
static
struct
resource
s5pv310_i2s0_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_I2S0
,
.
end
=
S5PV310_PA_I2S0
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_I2S0_TX
,
.
end
=
DMACH_I2S0_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_I2S0_RX
,
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv310_device_i2s0
=
{
.
name
=
"samsung-i2s"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_i2s0_resource
),
.
resource
=
s5pv310_i2s0_resource
,
.
dev
=
{
.
platform_data
=
&
i2sv5_pdata
,
},
};
static
const
char
*
rclksrc_v3
[]
=
{
[
0
]
=
"sclk_i2s"
,
[
1
]
=
"no_such_clock"
,
};
static
struct
s3c_audio_pdata
i2sv3_pdata
=
{
.
cfg_gpio
=
s5pv310_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_NO_MUXPSR
,
.
src_clk
=
rclksrc_v3
,
},
},
};
static
struct
resource
s5pv310_i2s1_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_I2S1
,
.
end
=
S5PV310_PA_I2S1
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_I2S1_TX
,
.
end
=
DMACH_I2S1_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_I2S1_RX
,
.
end
=
DMACH_I2S1_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv310_device_i2s1
=
{
.
name
=
"samsung-i2s"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_i2s1_resource
),
.
resource
=
s5pv310_i2s1_resource
,
.
dev
=
{
.
platform_data
=
&
i2sv3_pdata
,
},
};
static
struct
resource
s5pv310_i2s2_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_I2S2
,
.
end
=
S5PV310_PA_I2S2
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_I2S2_TX
,
.
end
=
DMACH_I2S2_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_I2S2_RX
,
.
end
=
DMACH_I2S2_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv310_device_i2s2
=
{
.
name
=
"samsung-i2s"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_i2s2_resource
),
.
resource
=
s5pv310_i2s2_resource
,
.
dev
=
{
.
platform_data
=
&
i2sv3_pdata
,
},
};
/* PCM Controller platform_devices */
static
int
s5pv310_pcm_cfg_gpio
(
struct
platform_device
*
pdev
)
{
switch
(
pdev
->
id
)
{
case
0
:
s3c_gpio_cfgpin_range
(
S5PV310_GPZ
(
0
),
5
,
S3C_GPIO_SFN
(
3
));
break
;
case
1
:
s3c_gpio_cfgpin_range
(
S5PV310_GPC0
(
0
),
5
,
S3C_GPIO_SFN
(
3
));
break
;
case
2
:
s3c_gpio_cfgpin_range
(
S5PV310_GPC1
(
0
),
5
,
S3C_GPIO_SFN
(
3
));
break
;
default:
printk
(
KERN_DEBUG
"Invalid PCM Controller number!"
);
return
-
EINVAL
;
}
return
0
;
}
static
struct
s3c_audio_pdata
s3c_pcm_pdata
=
{
.
cfg_gpio
=
s5pv310_pcm_cfg_gpio
,
};
static
struct
resource
s5pv310_pcm0_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_PCM0
,
.
end
=
S5PV310_PA_PCM0
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_PCM0_TX
,
.
end
=
DMACH_PCM0_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_PCM0_RX
,
.
end
=
DMACH_PCM0_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv310_device_pcm0
=
{
.
name
=
"samsung-pcm"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_pcm0_resource
),
.
resource
=
s5pv310_pcm0_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_pcm_pdata
,
},
};
static
struct
resource
s5pv310_pcm1_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_PCM1
,
.
end
=
S5PV310_PA_PCM1
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_PCM1_TX
,
.
end
=
DMACH_PCM1_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_PCM1_RX
,
.
end
=
DMACH_PCM1_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv310_device_pcm1
=
{
.
name
=
"samsung-pcm"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_pcm1_resource
),
.
resource
=
s5pv310_pcm1_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_pcm_pdata
,
},
};
static
struct
resource
s5pv310_pcm2_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_PCM2
,
.
end
=
S5PV310_PA_PCM2
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_PCM2_TX
,
.
end
=
DMACH_PCM2_TX
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_PCM2_RX
,
.
end
=
DMACH_PCM2_RX
,
.
flags
=
IORESOURCE_DMA
,
},
};
struct
platform_device
s5pv310_device_pcm2
=
{
.
name
=
"samsung-pcm"
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_pcm2_resource
),
.
resource
=
s5pv310_pcm2_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_pcm_pdata
,
},
};
/* AC97 Controller platform devices */
static
int
s5pv310_ac97_cfg_gpio
(
struct
platform_device
*
pdev
)
{
return
s3c_gpio_cfgpin_range
(
S5PV310_GPC0
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
}
static
struct
resource
s5pv310_ac97_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_AC97
,
.
end
=
S5PV310_PA_AC97
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_AC97_PCMOUT
,
.
end
=
DMACH_AC97_PCMOUT
,
.
flags
=
IORESOURCE_DMA
,
},
[
2
]
=
{
.
start
=
DMACH_AC97_PCMIN
,
.
end
=
DMACH_AC97_PCMIN
,
.
flags
=
IORESOURCE_DMA
,
},
[
3
]
=
{
.
start
=
DMACH_AC97_MICIN
,
.
end
=
DMACH_AC97_MICIN
,
.
flags
=
IORESOURCE_DMA
,
},
[
4
]
=
{
.
start
=
IRQ_AC97
,
.
end
=
IRQ_AC97
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
s3c_audio_pdata
s3c_ac97_pdata
=
{
.
cfg_gpio
=
s5pv310_ac97_cfg_gpio
,
};
static
u64
s5pv310_ac97_dmamask
=
DMA_BIT_MASK
(
32
);
struct
platform_device
s5pv310_device_ac97
=
{
.
name
=
"samsung-ac97"
,
.
id
=
-
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_ac97_resource
),
.
resource
=
s5pv310_ac97_resource
,
.
dev
=
{
.
platform_data
=
&
s3c_ac97_pdata
,
.
dma_mask
=
&
s5pv310_ac97_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
};
/* S/PDIF Controller platform_device */
static
int
s5pv310_spdif_cfg_gpio
(
struct
platform_device
*
pdev
)
{
s3c_gpio_cfgpin_range
(
S5PV310_GPC1
(
0
),
2
,
S3C_GPIO_SFN
(
3
));
return
0
;
}
static
struct
resource
s5pv310_spdif_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_SPDIF
,
.
end
=
S5PV310_PA_SPDIF
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
DMACH_SPDIF
,
.
end
=
DMACH_SPDIF
,
.
flags
=
IORESOURCE_DMA
,
},
};
static
struct
s3c_audio_pdata
samsung_spdif_pdata
=
{
.
cfg_gpio
=
s5pv310_spdif_cfg_gpio
,
};
static
u64
s5pv310_spdif_dmamask
=
DMA_BIT_MASK
(
32
);
struct
platform_device
s5pv310_device_spdif
=
{
.
name
=
"samsung-spdif"
,
.
id
=
-
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_spdif_resource
),
.
resource
=
s5pv310_spdif_resource
,
.
dev
=
{
.
platform_data
=
&
samsung_spdif_pdata
,
.
dma_mask
=
&
s5pv310_spdif_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
},
};
arch/arm/mach-s5pv310/dma.c
0 → 100644
View file @
e641d158
/*
* Copyright (C) 2010 Samsung Electronics Co. Ltd.
* Jaswinder Singh <jassi.brar@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <plat/devs.h>
#include <plat/irqs.h>
#include <mach/map.h>
#include <mach/irqs.h>
#include <plat/s3c-pl330-pdata.h>
static
u64
dma_dmamask
=
DMA_BIT_MASK
(
32
);
static
struct
resource
s5pv310_pdma0_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_PDMA0
,
.
end
=
S5PV310_PA_PDMA0
+
SZ_4K
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
IRQ_PDMA0
,
.
end
=
IRQ_PDMA0
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
s3c_pl330_platdata
s5pv310_pdma0_pdata
=
{
.
peri
=
{
[
0
]
=
DMACH_PCM0_RX
,
[
1
]
=
DMACH_PCM0_TX
,
[
2
]
=
DMACH_PCM2_RX
,
[
3
]
=
DMACH_PCM2_TX
,
[
4
]
=
DMACH_MSM_REQ0
,
[
5
]
=
DMACH_MSM_REQ2
,
[
6
]
=
DMACH_SPI0_RX
,
[
7
]
=
DMACH_SPI0_TX
,
[
8
]
=
DMACH_SPI2_RX
,
[
9
]
=
DMACH_SPI2_TX
,
[
10
]
=
DMACH_I2S0S_TX
,
[
11
]
=
DMACH_I2S0_RX
,
[
12
]
=
DMACH_I2S0_TX
,
[
13
]
=
DMACH_I2S2_RX
,
[
14
]
=
DMACH_I2S2_TX
,
[
15
]
=
DMACH_UART0_RX
,
[
16
]
=
DMACH_UART0_TX
,
[
17
]
=
DMACH_UART2_RX
,
[
18
]
=
DMACH_UART2_TX
,
[
19
]
=
DMACH_UART4_RX
,
[
20
]
=
DMACH_UART4_TX
,
[
21
]
=
DMACH_SLIMBUS0_RX
,
[
22
]
=
DMACH_SLIMBUS0_TX
,
[
23
]
=
DMACH_SLIMBUS2_RX
,
[
24
]
=
DMACH_SLIMBUS2_TX
,
[
25
]
=
DMACH_SLIMBUS4_RX
,
[
26
]
=
DMACH_SLIMBUS4_TX
,
[
27
]
=
DMACH_AC97_MICIN
,
[
28
]
=
DMACH_AC97_PCMIN
,
[
29
]
=
DMACH_AC97_PCMOUT
,
[
30
]
=
DMACH_MAX
,
[
31
]
=
DMACH_MAX
,
},
};
static
struct
platform_device
s5pv310_device_pdma0
=
{
.
name
=
"s3c-pl330"
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_pdma0_resource
),
.
resource
=
s5pv310_pdma0_resource
,
.
dev
=
{
.
dma_mask
=
&
dma_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
s5pv310_pdma0_pdata
,
},
};
static
struct
resource
s5pv310_pdma1_resource
[]
=
{
[
0
]
=
{
.
start
=
S5PV310_PA_PDMA1
,
.
end
=
S5PV310_PA_PDMA1
+
SZ_4K
,
.
flags
=
IORESOURCE_MEM
,
},
[
1
]
=
{
.
start
=
IRQ_PDMA1
,
.
end
=
IRQ_PDMA1
,
.
flags
=
IORESOURCE_IRQ
,
},
};
static
struct
s3c_pl330_platdata
s5pv310_pdma1_pdata
=
{
.
peri
=
{
[
0
]
=
DMACH_PCM0_RX
,
[
1
]
=
DMACH_PCM0_TX
,
[
2
]
=
DMACH_PCM1_RX
,
[
3
]
=
DMACH_PCM1_TX
,
[
4
]
=
DMACH_MSM_REQ1
,
[
5
]
=
DMACH_MSM_REQ3
,
[
6
]
=
DMACH_SPI1_RX
,
[
7
]
=
DMACH_SPI1_TX
,
[
8
]
=
DMACH_I2S0S_TX
,
[
9
]
=
DMACH_I2S0_RX
,
[
10
]
=
DMACH_I2S0_TX
,
[
11
]
=
DMACH_I2S1_RX
,
[
12
]
=
DMACH_I2S1_TX
,
[
13
]
=
DMACH_UART0_RX
,
[
14
]
=
DMACH_UART0_TX
,
[
15
]
=
DMACH_UART1_RX
,
[
16
]
=
DMACH_UART1_TX
,
[
17
]
=
DMACH_UART3_RX
,
[
18
]
=
DMACH_UART3_TX
,
[
19
]
=
DMACH_SLIMBUS1_RX
,
[
20
]
=
DMACH_SLIMBUS1_TX
,
[
21
]
=
DMACH_SLIMBUS3_RX
,
[
22
]
=
DMACH_SLIMBUS3_TX
,
[
23
]
=
DMACH_SLIMBUS5_RX
,
[
24
]
=
DMACH_SLIMBUS5_TX
,
[
25
]
=
DMACH_SLIMBUS0AUX_RX
,
[
26
]
=
DMACH_SLIMBUS0AUX_TX
,
[
27
]
=
DMACH_SPDIF
,
[
28
]
=
DMACH_MAX
,
[
29
]
=
DMACH_MAX
,
[
30
]
=
DMACH_MAX
,
[
31
]
=
DMACH_MAX
,
},
};
static
struct
platform_device
s5pv310_device_pdma1
=
{
.
name
=
"s3c-pl330"
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv310_pdma1_resource
),
.
resource
=
s5pv310_pdma1_resource
,
.
dev
=
{
.
dma_mask
=
&
dma_dmamask
,
.
coherent_dma_mask
=
DMA_BIT_MASK
(
32
),
.
platform_data
=
&
s5pv310_pdma1_pdata
,
},
};
static
struct
platform_device
*
s5pv310_dmacs
[]
__initdata
=
{
&
s5pv310_device_pdma0
,
&
s5pv310_device_pdma1
,
};
static
int
__init
s5pv310_dma_init
(
void
)
{
platform_add_devices
(
s5pv310_dmacs
,
ARRAY_SIZE
(
s5pv310_dmacs
));
return
0
;
}
arch_initcall
(
s5pv310_dma_init
);
arch/arm/mach-s5pv310/include/mach/dma.h
0 → 100644
View file @
e641d158
/*
* Copyright (C) 2010 Samsung Electronics Co. Ltd.
* Jaswinder Singh <jassi.brar@samsung.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __MACH_DMA_H
#define __MACH_DMA_H
/* This platform uses the common S3C DMA API driver for PL330 */
#include <plat/s3c-dma-pl330.h>
#endif
/* __MACH_DMA_H */
arch/arm/mach-s5pv310/include/mach/irqs.h
View file @
e641d158
...
...
@@ -54,6 +54,9 @@
#define COMBINER_GROUP(x) ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(64))
#define COMBINER_IRQ(x, y) (COMBINER_GROUP(x) + y)
#define IRQ_PDMA0 COMBINER_IRQ(21, 0)
#define IRQ_PDMA1 COMBINER_IRQ(21, 1)
#define IRQ_TIMER0_VIC COMBINER_IRQ(22, 0)
#define IRQ_TIMER1_VIC COMBINER_IRQ(22, 1)
#define IRQ_TIMER2_VIC COMBINER_IRQ(22, 2)
...
...
arch/arm/mach-s5pv310/include/mach/map.h
View file @
e641d158
...
...
@@ -52,6 +52,11 @@
#define S5PV310_PA_GIC_DIST (0x10501000)
#define S5PV310_PA_L2CC (0x10502000)
/* DMA */
#define S5PV310_PA_MDMA 0x10810000
#define S5PV310_PA_PDMA0 0x12680000
#define S5PV310_PA_PDMA1 0x12690000
#define S5PV310_PA_GPIO1 (0x11400000)
#define S5PV310_PA_GPIO2 (0x11000000)
#define S5PV310_PA_GPIO3 (0x03860000)
...
...
@@ -60,6 +65,22 @@
#define S5PV310_PA_SROMC (0x12570000)
/* S/PDIF */
#define S5PV310_PA_SPDIF 0xE1100000
/* I2S */
#define S5PV310_PA_I2S0 0x03830000
#define S5PV310_PA_I2S1 0xE3100000
#define S5PV310_PA_I2S2 0xE2A00000
/* PCM */
#define S5PV310_PA_PCM0 0x03840000
#define S5PV310_PA_PCM1 0x13980000
#define S5PV310_PA_PCM2 0x13990000
/* AC97 */
#define S5PV310_PA_AC97 0x139A0000
#define S5PV310_PA_UART (0x13800000)
#define S5P_PA_UART(x) (S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
...
...
arch/arm/mach-s5pv310/mach-smdkc210.c
View file @
e641d158
...
...
@@ -14,6 +14,7 @@
#include <linux/platform_device.h>
#include <linux/smsc911x.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach-types.h>
...
...
@@ -23,6 +24,7 @@
#include <plat/cpu.h>
#include <plat/devs.h>
#include <plat/sdhci.h>
#include <plat/iic.h>
#include <mach/map.h>
#include <mach/regs-srom.h>
...
...
@@ -139,7 +141,12 @@ static struct platform_device smdkc210_smsc911x = {
},
};
static
struct
i2c_board_info
i2c_devs1
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"wm8994"
,
0x1a
),},
};
static
struct
platform_device
*
smdkc210_devices
[]
__initdata
=
{
&
s3c_device_i2c1
,
&
s3c_device_hsmmc0
,
&
s3c_device_hsmmc1
,
&
s3c_device_hsmmc2
,
...
...
@@ -147,6 +154,8 @@ static struct platform_device *smdkc210_devices[] __initdata = {
&
s3c_device_rtc
,
&
s3c_device_wdt
,
&
smdkc210_smsc911x
,
&
s5pv310_device_ac97
,
&
s5pv310_device_i2s0
,
};
static
void
__init
smdkc210_smsc911x_init
(
void
)
...
...
@@ -182,6 +191,9 @@ static void __init smdkc210_map_io(void)
static
void
__init
smdkc210_machine_init
(
void
)
{
s3c_i2c1_set_platdata
(
NULL
);
i2c_register_board_info
(
1
,
i2c_devs1
,
ARRAY_SIZE
(
i2c_devs1
));
smdkc210_smsc911x_init
();
s3c_sdhci0_set_platdata
(
&
smdkc210_hsmmc0_pdata
);
...
...
arch/arm/mach-s5pv310/mach-smdkv310.c
View file @
e641d158
...
...
@@ -14,6 +14,7 @@
#include <linux/platform_device.h>
#include <linux/smsc911x.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach-types.h>
...
...
@@ -23,6 +24,7 @@
#include <plat/cpu.h>
#include <plat/devs.h>
#include <plat/sdhci.h>
#include <plat/iic.h>
#include <mach/map.h>
#include <mach/regs-srom.h>
...
...
@@ -139,7 +141,12 @@ static struct platform_device smdkv310_smsc911x = {
},
};
static
struct
i2c_board_info
i2c_devs1
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"wm8994"
,
0x1a
),},
};
static
struct
platform_device
*
smdkv310_devices
[]
__initdata
=
{
&
s3c_device_i2c1
,
&
s3c_device_hsmmc0
,
&
s3c_device_hsmmc1
,
&
s3c_device_hsmmc2
,
...
...
@@ -147,6 +154,8 @@ static struct platform_device *smdkv310_devices[] __initdata = {
&
s3c_device_rtc
,
&
s3c_device_wdt
,
&
smdkv310_smsc911x
,
&
s5pv310_device_ac97
,
&
s5pv310_device_i2s0
,
};
static
void
__init
smdkv310_smsc911x_init
(
void
)
...
...
@@ -182,6 +191,9 @@ static void __init smdkv310_map_io(void)
static
void
__init
smdkv310_machine_init
(
void
)
{
s3c_i2c1_set_platdata
(
NULL
);
i2c_register_board_info
(
1
,
i2c_devs1
,
ARRAY_SIZE
(
i2c_devs1
));
smdkv310_smsc911x_init
();
s3c_sdhci0_set_platdata
(
&
smdkv310_hsmmc0_pdata
);
...
...
arch/arm/plat-samsung/include/plat/audio.h
View file @
e641d158
...
...
@@ -25,10 +25,34 @@ extern void s3c64xx_ac97_setup_gpio(int);
#define S5PC100_SPDIF_GPG3 1
extern
void
s5pc100_spdif_setup_gpio
(
int
);
struct
samsung_i2s
{
/* If the Primary DAI has 5.1 Channels */
#define QUIRK_PRI_6CHAN (1 << 0)
/* If the I2S block has a Stereo Overlay Channel */
#define QUIRK_SEC_DAI (1 << 1)
/*
* If the I2S block has no internal prescalar or MUX (I2SMOD[10] bit)
* The Machine driver must provide suitably set clock to the I2S block.
*/
#define QUIRK_NO_MUXPSR (1 << 2)
#define QUIRK_NEED_RSTCLR (1 << 3)
/* Quirks of the I2S controller */
u32
quirks
;
/*
* Array of clock names that can be used to generate I2S signals.
* Also corresponds to clocks of I2SMOD[10]
*/
const
char
**
src_clk
;
};
/**
* struct s3c_audio_pdata - common platform data for audio device drivers
* @cfg_gpio: Callback function to setup mux'ed pins in I2S/PCM/AC97 mode
*/
struct
s3c_audio_pdata
{
int
(
*
cfg_gpio
)(
struct
platform_device
*
);
union
{
struct
samsung_i2s
i2s
;
}
type
;
};
arch/arm/plat-samsung/include/plat/devs.h
View file @
e641d158
...
...
@@ -96,6 +96,15 @@ extern struct platform_device s5pv210_device_iis1;
extern
struct
platform_device
s5pv210_device_iis2
;
extern
struct
platform_device
s5pv210_device_spdif
;
extern
struct
platform_device
s5pv310_device_ac97
;
extern
struct
platform_device
s5pv310_device_pcm0
;
extern
struct
platform_device
s5pv310_device_pcm1
;
extern
struct
platform_device
s5pv310_device_pcm2
;
extern
struct
platform_device
s5pv310_device_i2s0
;
extern
struct
platform_device
s5pv310_device_i2s1
;
extern
struct
platform_device
s5pv310_device_i2s2
;
extern
struct
platform_device
s5pv310_device_spdif
;
extern
struct
platform_device
s5p6442_device_pcm0
;
extern
struct
platform_device
s5p6442_device_pcm1
;
extern
struct
platform_device
s5p6442_device_iis0
;
...
...
@@ -106,6 +115,8 @@ extern struct platform_device s5p6440_device_pcm;
extern
struct
platform_device
s5p6440_device_iis
;
extern
struct
platform_device
s5p6450_device_iis0
;
extern
struct
platform_device
s5p6450_device_iis1
;
extern
struct
platform_device
s5p6450_device_iis2
;
extern
struct
platform_device
s5p6450_device_pcm0
;
extern
struct
platform_device
s5pc100_device_ac97
;
...
...
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