Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
e641d158
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
e641d158
编写于
12月 30, 2010
作者:
K
Kukjin Kim
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'next-samsung-asoc2' into for-next-new
上级
387c31c7
d8a2d39d
变更
28
隐藏空白更改
内联
并排
Showing
28 changed file
with
986 addition
and
100 deletion
+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
未找到文件。
arch/arm/mach-s3c64xx/clock.c
浏览文件 @
e641d158
...
@@ -695,7 +695,7 @@ static struct clksrc_clk clksrcs[] = {
...
@@ -695,7 +695,7 @@ static struct clksrc_clk clksrcs[] = {
},
{
},
{
.
clk
=
{
.
clk
=
{
.
name
=
"audio-bus"
,
.
name
=
"audio-bus"
,
.
id
=
-
1
,
/* There's only one IISv4 port */
.
id
=
2
,
.
ctrlbit
=
S3C6410_CLKCON_SCLK_AUDIO2
,
.
ctrlbit
=
S3C6410_CLKCON_SCLK_AUDIO2
,
.
enable
=
s3c64xx_sclk_ctrl
,
.
enable
=
s3c64xx_sclk_ctrl
,
},
},
...
...
arch/arm/mach-s3c64xx/dev-audio.c
浏览文件 @
e641d158
...
@@ -22,7 +22,12 @@
...
@@ -22,7 +22,12 @@
#include <plat/audio.h>
#include <plat/audio.h>
#include <plat/gpio-cfg.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
;
unsigned
int
base
;
...
@@ -33,6 +38,12 @@ static int s3c64xx_i2sv3_cfg_gpio(struct platform_device *pdev)
...
@@ -33,6 +38,12 @@ static int s3c64xx_i2sv3_cfg_gpio(struct platform_device *pdev)
case
1
:
case
1
:
base
=
S3C64XX_GPE
(
0
);
base
=
S3C64XX_GPE
(
0
);
break
;
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:
default:
printk
(
KERN_DEBUG
"Invalid I2S Controller number: %d
\n
"
,
printk
(
KERN_DEBUG
"Invalid I2S Controller number: %d
\n
"
,
pdev
->
id
);
pdev
->
id
);
...
@@ -44,16 +55,6 @@ static int s3c64xx_i2sv3_cfg_gpio(struct platform_device *pdev)
...
@@ -44,16 +55,6 @@ static int s3c64xx_i2sv3_cfg_gpio(struct platform_device *pdev)
return
0
;
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
[]
=
{
static
struct
resource
s3c64xx_iis0_resource
[]
=
{
[
0
]
=
{
[
0
]
=
{
.
start
=
S3C64XX_PA_IIS0
,
.
start
=
S3C64XX_PA_IIS0
,
...
@@ -72,17 +73,22 @@ static struct resource s3c64xx_iis0_resource[] = {
...
@@ -72,17 +73,22 @@ static struct resource s3c64xx_iis0_resource[] = {
},
},
};
};
static
struct
s3c_audio_pdata
s3c_i2s0_pdata
=
{
static
struct
s3c_audio_pdata
i2sv3_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2sv3_cfg_gpio
,
.
cfg_gpio
=
s3c64xx_i2s_cfg_gpio
,
.
type
=
{
.
i2s
=
{
.
src_clk
=
rclksrc
,
},
},
};
};
struct
platform_device
s3c64xx_device_iis0
=
{
struct
platform_device
s3c64xx_device_iis0
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
0
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis0_resource
),
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis0_resource
),
.
resource
=
s3c64xx_iis0_resource
,
.
resource
=
s3c64xx_iis0_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s0
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
EXPORT_SYMBOL
(
s3c64xx_device_iis0
);
EXPORT_SYMBOL
(
s3c64xx_device_iis0
);
...
@@ -105,17 +111,13 @@ static struct resource s3c64xx_iis1_resource[] = {
...
@@ -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
=
{
struct
platform_device
s3c64xx_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis1_resource
),
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iis1_resource
),
.
resource
=
s3c64xx_iis1_resource
,
.
resource
=
s3c64xx_iis1_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s1
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
EXPORT_SYMBOL
(
s3c64xx_device_iis1
);
EXPORT_SYMBOL
(
s3c64xx_device_iis1
);
...
@@ -138,17 +140,23 @@ static struct resource s3c64xx_iisv4_resource[] = {
...
@@ -138,17 +140,23 @@ static struct resource s3c64xx_iisv4_resource[] = {
},
},
};
};
static
struct
s3c_audio_pdata
s3c_i2sv4_pdata
=
{
static
struct
s3c_audio_pdata
i2sv4_pdata
=
{
.
cfg_gpio
=
s3c64xx_i2sv4_cfg_gpio
,
.
cfg_gpio
=
s3c64xx_i2s_cfg_gpio
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_PRI_6CHAN
,
.
src_clk
=
rclksrc
,
},
},
};
};
struct
platform_device
s3c64xx_device_iisv4
=
{
struct
platform_device
s3c64xx_device_iisv4
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
name
=
"samsung-i2s
"
,
.
id
=
-
1
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iisv4_resource
),
.
num_resources
=
ARRAY_SIZE
(
s3c64xx_iisv4_resource
),
.
resource
=
s3c64xx_iisv4_resource
,
.
resource
=
s3c64xx_iisv4_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_
i2sv4_pdata
,
.
platform_data
=
&
i2sv4_pdata
,
},
},
};
};
EXPORT_SYMBOL
(
s3c64xx_device_iisv4
);
EXPORT_SYMBOL
(
s3c64xx_device_iisv4
);
...
...
arch/arm/mach-s5p6442/dev-audio.c
浏览文件 @
e641d158
...
@@ -29,7 +29,7 @@ static int s5p6442_cfg_i2s(struct platform_device *pdev)
...
@@ -29,7 +29,7 @@ static int s5p6442_cfg_i2s(struct platform_device *pdev)
base
=
S5P6442_GPC1
(
0
);
base
=
S5P6442_GPC1
(
0
);
break
;
break
;
case
-
1
:
case
0
:
base
=
S5P6442_GPC0
(
0
);
base
=
S5P6442_GPC0
(
0
);
break
;
break
;
...
@@ -42,8 +42,19 @@ static int s5p6442_cfg_i2s(struct platform_device *pdev)
...
@@ -42,8 +42,19 @@ static int s5p6442_cfg_i2s(struct platform_device *pdev)
return
0
;
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
,
.
cfg_gpio
=
s5p6442_cfg_i2s
,
.
type
=
{
.
i2s
=
{
.
quirks
=
QUIRK_SEC_DAI
|
QUIRK_NEED_RSTCLR
,
.
src_clk
=
rclksrc_v35
,
},
},
};
};
static
struct
resource
s5p6442_iis0_resource
[]
=
{
static
struct
resource
s5p6442_iis0_resource
[]
=
{
...
@@ -62,15 +73,34 @@ static struct resource s5p6442_iis0_resource[] = {
...
@@ -62,15 +73,34 @@ static struct resource s5p6442_iis0_resource[] = {
.
end
=
DMACH_I2S0_RX
,
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
.
flags
=
IORESOURCE_DMA
,
},
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
};
struct
platform_device
s5p6442_device_iis0
=
{
struct
platform_device
s5p6442_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
name
=
"samsung-i2s
"
,
.
id
=
-
1
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5p6442_iis0_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5p6442_iis0_resource
),
.
resource
=
s5p6442_iis0_resource
,
.
resource
=
s5p6442_iis0_resource
,
.
dev
=
{
.
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[] = {
...
@@ -93,12 +123,12 @@ static struct resource s5p6442_iis1_resource[] = {
};
};
struct
platform_device
s5p6442_device_iis1
=
{
struct
platform_device
s5p6442_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5p6442_iis1_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5p6442_iis1_resource
),
.
resource
=
s5p6442_iis1_resource
,
.
resource
=
s5p6442_iis1_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
...
...
arch/arm/mach-s5p6442/mach-smdk6442.c
浏览文件 @
e641d158
...
@@ -12,6 +12,7 @@
...
@@ -12,6 +12,7 @@
#include <linux/types.h>
#include <linux/types.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/serial_core.h>
#include <linux/serial_core.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>
#include <asm/mach/map.h>
...
@@ -25,6 +26,7 @@
...
@@ -25,6 +26,7 @@
#include <plat/s5p6442.h>
#include <plat/s5p6442.h>
#include <plat/devs.h>
#include <plat/devs.h>
#include <plat/cpu.h>
#include <plat/cpu.h>
#include <plat/iic.h>
/* Following are default values for UCON, ULCON and UFCON UART registers */
/* Following are default values for UCON, ULCON and UFCON UART registers */
#define SMDK6442_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
#define SMDK6442_UCON_DEFAULT (S3C2410_UCON_TXILEVEL | \
...
@@ -65,10 +67,15 @@ static struct s3c2410_uartcfg smdk6442_uartcfgs[] __initdata = {
...
@@ -65,10 +67,15 @@ static struct s3c2410_uartcfg smdk6442_uartcfgs[] __initdata = {
};
};
static
struct
platform_device
*
smdk6442_devices
[]
__initdata
=
{
static
struct
platform_device
*
smdk6442_devices
[]
__initdata
=
{
&
s3c_device_i2c0
,
&
s5p6442_device_iis0
,
&
s5p6442_device_iis0
,
&
s3c_device_wdt
,
&
s3c_device_wdt
,
};
};
static
struct
i2c_board_info
smdk6442_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
static
void
__init
smdk6442_map_io
(
void
)
static
void
__init
smdk6442_map_io
(
void
)
{
{
s5p_init_io
(
NULL
,
0
,
S5P_VA_CHIPID
);
s5p_init_io
(
NULL
,
0
,
S5P_VA_CHIPID
);
...
@@ -78,6 +85,9 @@ static void __init smdk6442_map_io(void)
...
@@ -78,6 +85,9 @@ static void __init smdk6442_map_io(void)
static
void
__init
smdk6442_machine_init
(
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
));
platform_add_devices
(
smdk6442_devices
,
ARRAY_SIZE
(
smdk6442_devices
));
}
}
...
...
arch/arm/mach-s5p6442/setup-i2c0.c
浏览文件 @
e641d158
...
@@ -14,12 +14,15 @@
...
@@ -14,12 +14,15 @@
#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/types.h>
#include <linux/gpio.h>
struct
platform_device
;
/* don't need the contents */
struct
platform_device
;
/* don't need the contents */
#include <plat/gpio-cfg.h>
#include <plat/iic.h>
#include <plat/iic.h>
void
s3c_i2c0_cfg_gpio
(
struct
platform_device
*
dev
)
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
浏览文件 @
e641d158
...
@@ -261,7 +261,7 @@ static struct clk init_clocks_disable[] = {
...
@@ -261,7 +261,7 @@ static struct clk init_clocks_disable[] = {
.
enable
=
s5p64x0_pclk_ctrl
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
25
),
.
ctrlbit
=
(
1
<<
25
),
},
{
},
{
.
name
=
"i
2s_v40
"
,
.
name
=
"i
is
"
,
.
id
=
0
,
.
id
=
0
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
enable
=
s5p64x0_pclk_ctrl
,
...
...
arch/arm/mach-s5p64x0/clock-s5p6450.c
浏览文件 @
e641d158
...
@@ -256,10 +256,22 @@ static struct clk init_clocks_disable[] = {
...
@@ -256,10 +256,22 @@ static struct clk init_clocks_disable[] = {
.
ctrlbit
=
(
1
<<
22
),
.
ctrlbit
=
(
1
<<
22
),
},
{
},
{
.
name
=
"iis"
,
.
name
=
"iis"
,
.
id
=
-
1
,
.
id
=
0
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
parent
=
&
clk_pclk_low
.
clk
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
enable
=
s5p64x0_pclk_ctrl
,
.
ctrlbit
=
(
1
<<
26
),
.
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"
,
.
name
=
"i2c"
,
.
id
=
1
,
.
id
=
1
,
...
...
arch/arm/mach-s5p64x0/dev-audio.c
浏览文件 @
e641d158
...
@@ -19,15 +19,19 @@
...
@@ -19,15 +19,19 @@
#include <mach/dma.h>
#include <mach/dma.h>
#include <mach/irqs.h>
#include <mach/irqs.h>
static
const
char
*
rclksrc
[]
=
{
[
0
]
=
"iis"
,
[
1
]
=
"sclk_audio2"
,
};
static
int
s5p6440_cfg_i2s
(
struct
platform_device
*
pdev
)
static
int
s5p6440_cfg_i2s
(
struct
platform_device
*
pdev
)
{
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
switch
(
pdev
->
id
)
{
case
-
1
:
case
0
:
s3c_gpio_cfgpin_range
(
S5P6440_GPR
(
4
),
5
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6440_GPC
(
4
),
2
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6440_GPR
(
13
),
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
;
break
;
default:
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -36,17 +40,58 @@ static int s5p6440_cfg_i2s(struct platform_device *pdev)
...
@@ -36,17 +40,58 @@ static int s5p6440_cfg_i2s(struct platform_device *pdev)
return
0
;
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
)
static
int
s5p6450_cfg_i2s
(
struct
platform_device
*
pdev
)
{
{
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
switch
(
pdev
->
id
)
{
case
-
1
:
case
0
:
s3c_gpio_cfgpin
(
S5P6450_GPB
(
4
),
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6450_GPR
(
4
),
5
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6450_GPR
(
4
),
5
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6450_GPR
(
13
),
2
,
S3C_GPIO_SFN
(
5
));
s3c_gpio_cfgpin_range
(
S5P6450_GPR
(
13
),
2
,
S3C_GPIO_SFN
(
5
));
break
;
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:
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -55,47 +100,86 @@ static int s5p6450_cfg_i2s(struct platform_device *pdev)
...
@@ -55,47 +100,86 @@ static int s5p6450_cfg_i2s(struct platform_device *pdev)
return
0
;
return
0
;
}
}
static
struct
s3c_audio_pdata
s5p6440_i2s_pdata
=
{
static
struct
s3c_audio_pdata
s5p6450_i2s0_pdata
=
{
.
cfg_gpio
=
s5p6440_cfg_i2s
,
.
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
=
{
static
struct
s3c_audio_pdata
s5p6450_i2s_pdata
=
{
.
cfg_gpio
=
s5p6450_cfg_i2s
,
.
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
]
=
{
[
0
]
=
{
.
start
=
S5P64
X0_PA_I2S
,
.
start
=
S5P64
50_PA_I2S1
,
.
end
=
S5P64
X0_PA_I2S
+
0x100
-
1
,
.
end
=
S5P64
50_PA_I2S1
+
0x100
-
1
,
.
flags
=
IORESOURCE_MEM
,
.
flags
=
IORESOURCE_MEM
,
},
},
[
1
]
=
{
[
1
]
=
{
.
start
=
DMACH_I2S
0
_TX
,
.
start
=
DMACH_I2S
1
_TX
,
.
end
=
DMACH_I2S
0
_TX
,
.
end
=
DMACH_I2S
1
_TX
,
.
flags
=
IORESOURCE_DMA
,
.
flags
=
IORESOURCE_DMA
,
},
},
[
2
]
=
{
[
2
]
=
{
.
start
=
DMACH_I2S
0
_RX
,
.
start
=
DMACH_I2S
1
_RX
,
.
end
=
DMACH_I2S
0
_RX
,
.
end
=
DMACH_I2S
1
_RX
,
.
flags
=
IORESOURCE_DMA
,
.
flags
=
IORESOURCE_DMA
,
},
},
};
};
struct
platform_device
s5p64
40_device_iis
=
{
struct
platform_device
s5p64
50_device_iis1
=
{
.
name
=
"s
3c64xx-iis-v4
"
,
.
name
=
"s
amsung-i2s
"
,
.
id
=
-
1
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5p64
x0_iis0
_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5p64
50_i2s1
_resource
),
.
resource
=
s5p64
x0_iis0
_resource
,
.
resource
=
s5p64
50_i2s1
_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s5p64
4
0_i2s_pdata
,
.
platform_data
=
&
s5p64
5
0_i2s_pdata
,
},
},
};
};
struct
platform_device
s5p6450_device_iis0
=
{
static
struct
resource
s5p6450_i2s2_resource
[]
=
{
.
name
=
"s3c64xx-iis-v4"
,
[
0
]
=
{
.
id
=
-
1
,
.
start
=
S5P6450_PA_I2S2
,
.
num_resources
=
ARRAY_SIZE
(
s5p64x0_iis0_resource
),
.
end
=
S5P6450_PA_I2S2
+
0x100
-
1
,
.
resource
=
s5p64x0_iis0_resource
,
.
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
=
{
.
dev
=
{
.
platform_data
=
&
s5p6450_i2s_pdata
,
.
platform_data
=
&
s5p6450_i2s_pdata
,
},
},
...
...
arch/arm/mach-s5p64x0/include/mach/map.h
浏览文件 @
e641d158
...
@@ -63,6 +63,8 @@
...
@@ -63,6 +63,8 @@
#define S5P64X0_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
#define S5P64X0_PA_HSMMC(x) (0xED800000 + ((x) * 0x100000))
#define S5P64X0_PA_I2S (0xF2000000)
#define S5P64X0_PA_I2S (0xF2000000)
#define S5P6450_PA_I2S1 0xF2800000
#define S5P6450_PA_I2S2 0xF2900000
#define S5P64X0_PA_PCM (0xF2100000)
#define S5P64X0_PA_PCM (0xF2100000)
...
...
arch/arm/mach-s5p64x0/mach-smdk6440.c
浏览文件 @
e641d158
...
@@ -117,6 +117,7 @@ static struct s3c2410_platform_i2c s5p6440_i2c1_data __initdata = {
...
@@ -117,6 +117,7 @@ static struct s3c2410_platform_i2c s5p6440_i2c1_data __initdata = {
static
struct
i2c_board_info
smdk6440_i2c_devs0
[]
__initdata
=
{
static
struct
i2c_board_info
smdk6440_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
};
static
struct
i2c_board_info
smdk6440_i2c_devs1
[]
__initdata
=
{
static
struct
i2c_board_info
smdk6440_i2c_devs1
[]
__initdata
=
{
...
...
arch/arm/mach-s5p64x0/mach-smdk6450.c
浏览文件 @
e641d158
...
@@ -135,6 +135,7 @@ static struct s3c2410_platform_i2c s5p6450_i2c1_data __initdata = {
...
@@ -135,6 +135,7 @@ static struct s3c2410_platform_i2c s5p6450_i2c1_data __initdata = {
};
};
static
struct
i2c_board_info
smdk6450_i2c_devs0
[]
__initdata
=
{
static
struct
i2c_board_info
smdk6450_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung KS24C080C EEPROM */
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung KS24C080C EEPROM */
};
};
...
...
arch/arm/mach-s5pc100/dev-audio.c
浏览文件 @
e641d158
...
@@ -23,17 +23,14 @@ static int s5pc100_cfg_i2s(struct platform_device *pdev)
...
@@ -23,17 +23,14 @@ static int s5pc100_cfg_i2s(struct platform_device *pdev)
{
{
/* configure GPIO for i2s port */
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
switch
(
pdev
->
id
)
{
case
0
:
/* Dedicated pins */
break
;
case
1
:
case
1
:
s3c_gpio_cfgpin_range
(
S5PC100_GPC
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
s3c_gpio_cfgpin_range
(
S5PC100_GPC
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
break
;
break
;
case
2
:
case
2
:
s3c_gpio_cfgpin_range
(
S5PC100_GPG3
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
s3c_gpio_cfgpin_range
(
S5PC100_GPG3
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
break
;
break
;
case
-
1
:
/* Dedicated pins */
break
;
default:
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -42,8 +39,20 @@ static int s5pc100_cfg_i2s(struct platform_device *pdev)
...
@@ -42,8 +39,20 @@ static int s5pc100_cfg_i2s(struct platform_device *pdev)
return
0
;
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
,
.
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
[]
=
{
static
struct
resource
s5pc100_iis0_resource
[]
=
{
...
@@ -62,15 +71,34 @@ static struct resource s5pc100_iis0_resource[] = {
...
@@ -62,15 +71,34 @@ static struct resource s5pc100_iis0_resource[] = {
.
end
=
DMACH_I2S0_RX
,
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
.
flags
=
IORESOURCE_DMA
,
},
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
};
struct
platform_device
s5pc100_device_iis0
=
{
struct
platform_device
s5pc100_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
name
=
"samsung-i2s
"
,
.
id
=
-
1
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis0_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis0_resource
),
.
resource
=
s5pc100_iis0_resource
,
.
resource
=
s5pc100_iis0_resource
,
.
dev
=
{
.
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[] = {
...
@@ -93,12 +121,12 @@ static struct resource s5pc100_iis1_resource[] = {
};
};
struct
platform_device
s5pc100_device_iis1
=
{
struct
platform_device
s5pc100_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis1_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis1_resource
),
.
resource
=
s5pc100_iis1_resource
,
.
resource
=
s5pc100_iis1_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
...
@@ -121,12 +149,12 @@ static struct resource s5pc100_iis2_resource[] = {
...
@@ -121,12 +149,12 @@ static struct resource s5pc100_iis2_resource[] = {
};
};
struct
platform_device
s5pc100_device_iis2
=
{
struct
platform_device
s5pc100_device_iis2
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
2
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis2_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5pc100_iis2_resource
),
.
resource
=
s5pc100_iis2_resource
,
.
resource
=
s5pc100_iis2_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
...
...
arch/arm/mach-s5pv210/clock.c
浏览文件 @
e641d158
...
@@ -467,20 +467,20 @@ static struct clk init_clocks_disable[] = {
...
@@ -467,20 +467,20 @@ static struct clk init_clocks_disable[] = {
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
21
),
.
ctrlbit
=
(
1
<<
21
),
},
{
},
{
.
name
=
"i
2s_v50
"
,
.
name
=
"i
is
"
,
.
id
=
0
,
.
id
=
0
,
.
parent
=
&
clk_p
,
.
parent
=
&
clk_p
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
4
),
.
ctrlbit
=
(
1
<<
4
),
},
{
},
{
.
name
=
"i
2s_v32
"
,
.
name
=
"i
is
"
,
.
id
=
0
,
.
id
=
1
,
.
parent
=
&
clk_p
,
.
parent
=
&
clk_p
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
5
),
.
ctrlbit
=
(
1
<<
5
),
},
{
},
{
.
name
=
"i
2s_v32
"
,
.
name
=
"i
is
"
,
.
id
=
1
,
.
id
=
2
,
.
parent
=
&
clk_p
,
.
parent
=
&
clk_p
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
enable
=
s5pv210_clk_ip3_ctrl
,
.
ctrlbit
=
(
1
<<
6
),
.
ctrlbit
=
(
1
<<
6
),
...
...
arch/arm/mach-s5pv210/dev-audio.c
浏览文件 @
e641d158
...
@@ -19,22 +19,24 @@
...
@@ -19,22 +19,24 @@
#include <mach/dma.h>
#include <mach/dma.h>
#include <mach/irqs.h>
#include <mach/irqs.h>
static
const
char
*
rclksrc
[]
=
{
[
0
]
=
"busclk"
,
[
1
]
=
"i2sclk"
,
};
static
int
s5pv210_cfg_i2s
(
struct
platform_device
*
pdev
)
static
int
s5pv210_cfg_i2s
(
struct
platform_device
*
pdev
)
{
{
/* configure GPIO for i2s port */
/* configure GPIO for i2s port */
switch
(
pdev
->
id
)
{
switch
(
pdev
->
id
)
{
case
0
:
s3c_gpio_cfgpin_range
(
S5PV210_GPI
(
0
),
7
,
S3C_GPIO_SFN
(
2
));
break
;
case
1
:
case
1
:
s3c_gpio_cfgpin_range
(
S5PV210_GPC0
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
s3c_gpio_cfgpin_range
(
S5PV210_GPC0
(
0
),
5
,
S3C_GPIO_SFN
(
2
));
break
;
break
;
case
2
:
case
2
:
s3c_gpio_cfgpin_range
(
S5PV210_GPC1
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
s3c_gpio_cfgpin_range
(
S5PV210_GPC1
(
0
),
5
,
S3C_GPIO_SFN
(
4
));
break
;
break
;
case
-
1
:
s3c_gpio_cfgpin_range
(
S5PV210_GPI
(
0
),
7
,
S3C_GPIO_SFN
(
2
));
break
;
default:
default:
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
printk
(
KERN_ERR
"Invalid Device %d
\n
"
,
pdev
->
id
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -43,8 +45,15 @@ static int s5pv210_cfg_i2s(struct platform_device *pdev)
...
@@ -43,8 +45,15 @@ static int s5pv210_cfg_i2s(struct platform_device *pdev)
return
0
;
return
0
;
}
}
static
struct
s3c_audio_pdata
s3c_i2s
_pdata
=
{
static
struct
s3c_audio_pdata
i2sv5
_pdata
=
{
.
cfg_gpio
=
s5pv210_cfg_i2s
,
.
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
[]
=
{
static
struct
resource
s5pv210_iis0_resource
[]
=
{
...
@@ -63,15 +72,34 @@ static struct resource s5pv210_iis0_resource[] = {
...
@@ -63,15 +72,34 @@ static struct resource s5pv210_iis0_resource[] = {
.
end
=
DMACH_I2S0_RX
,
.
end
=
DMACH_I2S0_RX
,
.
flags
=
IORESOURCE_DMA
,
.
flags
=
IORESOURCE_DMA
,
},
},
[
3
]
=
{
.
start
=
DMACH_I2S0S_TX
,
.
end
=
DMACH_I2S0S_TX
,
.
flags
=
IORESOURCE_DMA
,
},
};
};
struct
platform_device
s5pv210_device_iis0
=
{
struct
platform_device
s5pv210_device_iis0
=
{
.
name
=
"s3c64xx-iis-v4
"
,
.
name
=
"samsung-i2s
"
,
.
id
=
-
1
,
.
id
=
0
,
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis0_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis0_resource
),
.
resource
=
s5pv210_iis0_resource
,
.
resource
=
s5pv210_iis0_resource
,
.
dev
=
{
.
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[] = {
...
@@ -94,12 +122,12 @@ static struct resource s5pv210_iis1_resource[] = {
};
};
struct
platform_device
s5pv210_device_iis1
=
{
struct
platform_device
s5pv210_device_iis1
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
1
,
.
id
=
1
,
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis1_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis1_resource
),
.
resource
=
s5pv210_iis1_resource
,
.
resource
=
s5pv210_iis1_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
...
@@ -122,12 +150,12 @@ static struct resource s5pv210_iis2_resource[] = {
...
@@ -122,12 +150,12 @@ static struct resource s5pv210_iis2_resource[] = {
};
};
struct
platform_device
s5pv210_device_iis2
=
{
struct
platform_device
s5pv210_device_iis2
=
{
.
name
=
"s
3c64xx-ii
s"
,
.
name
=
"s
amsung-i2
s"
,
.
id
=
2
,
.
id
=
2
,
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis2_resource
),
.
num_resources
=
ARRAY_SIZE
(
s5pv210_iis2_resource
),
.
resource
=
s5pv210_iis2_resource
,
.
resource
=
s5pv210_iis2_resource
,
.
dev
=
{
.
dev
=
{
.
platform_data
=
&
s3c_i2s
_pdata
,
.
platform_data
=
&
i2sv3
_pdata
,
},
},
};
};
...
...
arch/arm/mach-s5pv210/mach-smdkc110.c
浏览文件 @
e641d158
...
@@ -94,6 +94,7 @@ static struct platform_device *smdkc110_devices[] __initdata = {
...
@@ -94,6 +94,7 @@ static struct platform_device *smdkc110_devices[] __initdata = {
static
struct
i2c_board_info
smdkc110_i2c_devs0
[]
__initdata
=
{
static
struct
i2c_board_info
smdkc110_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung S524AD0XD1 */
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung S524AD0XD1 */
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
};
static
struct
i2c_board_info
smdkc110_i2c_devs1
[]
__initdata
=
{
static
struct
i2c_board_info
smdkc110_i2c_devs1
[]
__initdata
=
{
...
...
arch/arm/mach-s5pv210/mach-smdkv210.c
浏览文件 @
e641d158
...
@@ -123,6 +123,7 @@ static struct platform_device *smdkv210_devices[] __initdata = {
...
@@ -123,6 +123,7 @@ static struct platform_device *smdkv210_devices[] __initdata = {
static
struct
i2c_board_info
smdkv210_i2c_devs0
[]
__initdata
=
{
static
struct
i2c_board_info
smdkv210_i2c_devs0
[]
__initdata
=
{
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung S524AD0XD1 */
{
I2C_BOARD_INFO
(
"24c08"
,
0x50
),
},
/* Samsung S524AD0XD1 */
{
I2C_BOARD_INFO
(
"wm8580"
,
0x1b
),
},
};
};
static
struct
i2c_board_info
smdkv210_i2c_devs1
[]
__initdata
=
{
static
struct
i2c_board_info
smdkv210_i2c_devs1
[]
__initdata
=
{
...
...
arch/arm/mach-s5pv310/Kconfig
浏览文件 @
e641d158
...
@@ -11,6 +11,7 @@ if ARCH_S5PV310
...
@@ -11,6 +11,7 @@ if ARCH_S5PV310
config CPU_S5PV310
config CPU_S5PV310
bool
bool
select S3C_PL330_DMA
help
help
Enable S5PV310 CPU support
Enable S5PV310 CPU support
...
@@ -69,10 +70,12 @@ config MACH_SMDKC210
...
@@ -69,10 +70,12 @@ config MACH_SMDKC210
select CPU_S5PV310
select CPU_S5PV310
select S3C_DEV_RTC
select S3C_DEV_RTC
select S3C_DEV_WDT
select S3C_DEV_WDT
select S3C_DEV_I2C1
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1
select S3C_DEV_HSMMC1
select S3C_DEV_HSMMC2
select S3C_DEV_HSMMC2
select S3C_DEV_HSMMC3
select S3C_DEV_HSMMC3
select S5PV310_SETUP_I2C1
select S5PV310_SETUP_SDHCI
select S5PV310_SETUP_SDHCI
help
help
Machine support for Samsung SMDKC210
Machine support for Samsung SMDKC210
...
@@ -97,10 +100,12 @@ config MACH_SMDKV310
...
@@ -97,10 +100,12 @@ config MACH_SMDKV310
select CPU_S5PV310
select CPU_S5PV310
select S3C_DEV_RTC
select S3C_DEV_RTC
select S3C_DEV_WDT
select S3C_DEV_WDT
select S3C_DEV_I2C1
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC
select S3C_DEV_HSMMC1
select S3C_DEV_HSMMC1
select S3C_DEV_HSMMC2
select S3C_DEV_HSMMC2
select S3C_DEV_HSMMC3
select S3C_DEV_HSMMC3
select S5PV310_SETUP_I2C1
select S5PV310_SETUP_SDHCI
select S5PV310_SETUP_SDHCI
help
help
Machine support for Samsung SMDKV310
Machine support for Samsung SMDKV310
...
...
arch/arm/mach-s5pv310/Makefile
浏览文件 @
e641d158
...
@@ -13,7 +13,7 @@ obj- :=
...
@@ -13,7 +13,7 @@ obj- :=
# Core support for S5PV310 system
# Core support for S5PV310 system
obj-$(CONFIG_CPU_S5PV310)
+=
cpu.o init.o clock.o irq-combiner.o
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_SMP)
+=
platsmp.o headsmp.o
obj-$(CONFIG_LOCAL_TIMERS)
+=
localtimer.o
obj-$(CONFIG_LOCAL_TIMERS)
+=
localtimer.o
...
@@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) += mach-universal_c210.o
...
@@ -27,6 +27,7 @@ obj-$(CONFIG_MACH_UNIVERSAL_C210) += mach-universal_c210.o
# device support
# device support
obj-y
+=
dev-audio.o
obj-$(CONFIG_S5PV310_SETUP_I2C1)
+=
setup-i2c1.o
obj-$(CONFIG_S5PV310_SETUP_I2C1)
+=
setup-i2c1.o
obj-$(CONFIG_S5PV310_SETUP_I2C2)
+=
setup-i2c2.o
obj-$(CONFIG_S5PV310_SETUP_I2C2)
+=
setup-i2c2.o
obj-$(CONFIG_S5PV310_SETUP_I2C3)
+=
setup-i2c3.o
obj-$(CONFIG_S5PV310_SETUP_I2C3)
+=
setup-i2c3.o
...
...
arch/arm/mach-s5pv310/clock.c
浏览文件 @
e641d158
...
@@ -466,6 +466,16 @@ static struct clk init_clocks_disable[] = {
...
@@ -466,6 +466,16 @@ static struct clk init_clocks_disable[] = {
.
id
=
-
1
,
.
id
=
-
1
,
.
enable
=
s5pv310_clk_ip_fsys_ctrl
,
.
enable
=
s5pv310_clk_ip_fsys_ctrl
,
.
ctrlbit
=
(
1
<<
10
),
.
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"
,
.
name
=
"adc"
,
.
id
=
-
1
,
.
id
=
-
1
,
...
@@ -506,6 +516,26 @@ static struct clk init_clocks_disable[] = {
...
@@ -506,6 +516,26 @@ static struct clk init_clocks_disable[] = {
.
id
=
2
,
.
id
=
2
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
enable
=
s5pv310_clk_ip_peril_ctrl
,
.
ctrlbit
=
(
1
<<
18
),
.
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"
,
.
name
=
"fimg2d"
,
.
id
=
-
1
,
.
id
=
-
1
,
...
...
arch/arm/mach-s5pv310/dev-audio.c
0 → 100644
浏览文件 @
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
浏览文件 @
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
浏览文件 @
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
浏览文件 @
e641d158
...
@@ -54,6 +54,9 @@
...
@@ -54,6 +54,9 @@
#define COMBINER_GROUP(x) ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(64))
#define COMBINER_GROUP(x) ((x) * MAX_IRQ_IN_COMBINER + IRQ_SPI(64))
#define COMBINER_IRQ(x, y) (COMBINER_GROUP(x) + y)
#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_TIMER0_VIC COMBINER_IRQ(22, 0)
#define IRQ_TIMER1_VIC COMBINER_IRQ(22, 1)
#define IRQ_TIMER1_VIC COMBINER_IRQ(22, 1)
#define IRQ_TIMER2_VIC COMBINER_IRQ(22, 2)
#define IRQ_TIMER2_VIC COMBINER_IRQ(22, 2)
...
...
arch/arm/mach-s5pv310/include/mach/map.h
浏览文件 @
e641d158
...
@@ -52,6 +52,11 @@
...
@@ -52,6 +52,11 @@
#define S5PV310_PA_GIC_DIST (0x10501000)
#define S5PV310_PA_GIC_DIST (0x10501000)
#define S5PV310_PA_L2CC (0x10502000)
#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_GPIO1 (0x11400000)
#define S5PV310_PA_GPIO2 (0x11000000)
#define S5PV310_PA_GPIO2 (0x11000000)
#define S5PV310_PA_GPIO3 (0x03860000)
#define S5PV310_PA_GPIO3 (0x03860000)
...
@@ -60,6 +65,22 @@
...
@@ -60,6 +65,22 @@
#define S5PV310_PA_SROMC (0x12570000)
#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 S5PV310_PA_UART (0x13800000)
#define S5P_PA_UART(x) (S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
#define S5P_PA_UART(x) (S5PV310_PA_UART + ((x) * S3C_UART_OFFSET))
...
...
arch/arm/mach-s5pv310/mach-smdkc210.c
浏览文件 @
e641d158
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/smsc911x.h>
#include <linux/smsc911x.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
...
@@ -23,6 +24,7 @@
...
@@ -23,6 +24,7 @@
#include <plat/cpu.h>
#include <plat/cpu.h>
#include <plat/devs.h>
#include <plat/devs.h>
#include <plat/sdhci.h>
#include <plat/sdhci.h>
#include <plat/iic.h>
#include <mach/map.h>
#include <mach/map.h>
#include <mach/regs-srom.h>
#include <mach/regs-srom.h>
...
@@ -139,7 +141,12 @@ static struct platform_device smdkc210_smsc911x = {
...
@@ -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
=
{
static
struct
platform_device
*
smdkc210_devices
[]
__initdata
=
{
&
s3c_device_i2c1
,
&
s3c_device_hsmmc0
,
&
s3c_device_hsmmc0
,
&
s3c_device_hsmmc1
,
&
s3c_device_hsmmc1
,
&
s3c_device_hsmmc2
,
&
s3c_device_hsmmc2
,
...
@@ -147,6 +154,8 @@ static struct platform_device *smdkc210_devices[] __initdata = {
...
@@ -147,6 +154,8 @@ static struct platform_device *smdkc210_devices[] __initdata = {
&
s3c_device_rtc
,
&
s3c_device_rtc
,
&
s3c_device_wdt
,
&
s3c_device_wdt
,
&
smdkc210_smsc911x
,
&
smdkc210_smsc911x
,
&
s5pv310_device_ac97
,
&
s5pv310_device_i2s0
,
};
};
static
void
__init
smdkc210_smsc911x_init
(
void
)
static
void
__init
smdkc210_smsc911x_init
(
void
)
...
@@ -182,6 +191,9 @@ static void __init smdkc210_map_io(void)
...
@@ -182,6 +191,9 @@ static void __init smdkc210_map_io(void)
static
void
__init
smdkc210_machine_init
(
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
();
smdkc210_smsc911x_init
();
s3c_sdhci0_set_platdata
(
&
smdkc210_hsmmc0_pdata
);
s3c_sdhci0_set_platdata
(
&
smdkc210_hsmmc0_pdata
);
...
...
arch/arm/mach-s5pv310/mach-smdkv310.c
浏览文件 @
e641d158
...
@@ -14,6 +14,7 @@
...
@@ -14,6 +14,7 @@
#include <linux/platform_device.h>
#include <linux/platform_device.h>
#include <linux/smsc911x.h>
#include <linux/smsc911x.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <asm/mach/arch.h>
#include <asm/mach/arch.h>
#include <asm/mach-types.h>
#include <asm/mach-types.h>
...
@@ -23,6 +24,7 @@
...
@@ -23,6 +24,7 @@
#include <plat/cpu.h>
#include <plat/cpu.h>
#include <plat/devs.h>
#include <plat/devs.h>
#include <plat/sdhci.h>
#include <plat/sdhci.h>
#include <plat/iic.h>
#include <mach/map.h>
#include <mach/map.h>
#include <mach/regs-srom.h>
#include <mach/regs-srom.h>
...
@@ -139,7 +141,12 @@ static struct platform_device smdkv310_smsc911x = {
...
@@ -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
=
{
static
struct
platform_device
*
smdkv310_devices
[]
__initdata
=
{
&
s3c_device_i2c1
,
&
s3c_device_hsmmc0
,
&
s3c_device_hsmmc0
,
&
s3c_device_hsmmc1
,
&
s3c_device_hsmmc1
,
&
s3c_device_hsmmc2
,
&
s3c_device_hsmmc2
,
...
@@ -147,6 +154,8 @@ static struct platform_device *smdkv310_devices[] __initdata = {
...
@@ -147,6 +154,8 @@ static struct platform_device *smdkv310_devices[] __initdata = {
&
s3c_device_rtc
,
&
s3c_device_rtc
,
&
s3c_device_wdt
,
&
s3c_device_wdt
,
&
smdkv310_smsc911x
,
&
smdkv310_smsc911x
,
&
s5pv310_device_ac97
,
&
s5pv310_device_i2s0
,
};
};
static
void
__init
smdkv310_smsc911x_init
(
void
)
static
void
__init
smdkv310_smsc911x_init
(
void
)
...
@@ -182,6 +191,9 @@ static void __init smdkv310_map_io(void)
...
@@ -182,6 +191,9 @@ static void __init smdkv310_map_io(void)
static
void
__init
smdkv310_machine_init
(
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
();
smdkv310_smsc911x_init
();
s3c_sdhci0_set_platdata
(
&
smdkv310_hsmmc0_pdata
);
s3c_sdhci0_set_platdata
(
&
smdkv310_hsmmc0_pdata
);
...
...
arch/arm/plat-samsung/include/plat/audio.h
浏览文件 @
e641d158
...
@@ -25,10 +25,34 @@ extern void s3c64xx_ac97_setup_gpio(int);
...
@@ -25,10 +25,34 @@ extern void s3c64xx_ac97_setup_gpio(int);
#define S5PC100_SPDIF_GPG3 1
#define S5PC100_SPDIF_GPG3 1
extern
void
s5pc100_spdif_setup_gpio
(
int
);
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
* 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
* @cfg_gpio: Callback function to setup mux'ed pins in I2S/PCM/AC97 mode
*/
*/
struct
s3c_audio_pdata
{
struct
s3c_audio_pdata
{
int
(
*
cfg_gpio
)(
struct
platform_device
*
);
int
(
*
cfg_gpio
)(
struct
platform_device
*
);
union
{
struct
samsung_i2s
i2s
;
}
type
;
};
};
arch/arm/plat-samsung/include/plat/devs.h
浏览文件 @
e641d158
...
@@ -96,6 +96,15 @@ extern struct platform_device s5pv210_device_iis1;
...
@@ -96,6 +96,15 @@ extern struct platform_device s5pv210_device_iis1;
extern
struct
platform_device
s5pv210_device_iis2
;
extern
struct
platform_device
s5pv210_device_iis2
;
extern
struct
platform_device
s5pv210_device_spdif
;
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_pcm0
;
extern
struct
platform_device
s5p6442_device_pcm1
;
extern
struct
platform_device
s5p6442_device_pcm1
;
extern
struct
platform_device
s5p6442_device_iis0
;
extern
struct
platform_device
s5p6442_device_iis0
;
...
@@ -106,6 +115,8 @@ extern struct platform_device s5p6440_device_pcm;
...
@@ -106,6 +115,8 @@ extern struct platform_device s5p6440_device_pcm;
extern
struct
platform_device
s5p6440_device_iis
;
extern
struct
platform_device
s5p6440_device_iis
;
extern
struct
platform_device
s5p6450_device_iis0
;
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
s5p6450_device_pcm0
;
extern
struct
platform_device
s5pc100_device_ac97
;
extern
struct
platform_device
s5pc100_device_ac97
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录