Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
05cf9dd8
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
05cf9dd8
编写于
12月 02, 2012
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/samsung' into asoc-next
上级
897074d8
1974a042
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
190 addition
and
88 deletion
+190
-88
include/linux/platform_data/asoc-s3c.h
include/linux/platform_data/asoc-s3c.h
+0
-6
sound/soc/samsung/ac97.c
sound/soc/samsung/ac97.c
+3
-3
sound/soc/samsung/bells.c
sound/soc/samsung/bells.c
+165
-57
sound/soc/samsung/i2s.c
sound/soc/samsung/i2s.c
+10
-10
sound/soc/samsung/pcm.c
sound/soc/samsung/pcm.c
+6
-6
sound/soc/samsung/spdif.c
sound/soc/samsung/spdif.c
+6
-6
未找到文件。
include/linux/platform_data/asoc-s3c.h
浏览文件 @
05cf9dd8
...
...
@@ -38,12 +38,6 @@ struct samsung_i2s {
#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
;
dma_addr_t
idma_addr
;
};
...
...
sound/soc/samsung/ac97.c
浏览文件 @
05cf9dd8
...
...
@@ -442,7 +442,7 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
ret
=
-
ENODEV
;
goto
err2
;
}
clk_enable
(
s3c_ac97
.
ac97_clk
);
clk_
prepare_
enable
(
s3c_ac97
.
ac97_clk
);
if
(
ac97_pdata
->
cfg_gpio
(
pdev
))
{
dev_err
(
&
pdev
->
dev
,
"Unable to configure gpio
\n
"
);
...
...
@@ -468,7 +468,7 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
free_irq
(
irq_res
->
start
,
NULL
);
err4:
err3:
clk_disable
(
s3c_ac97
.
ac97_clk
);
clk_disable
_unprepare
(
s3c_ac97
.
ac97_clk
);
clk_put
(
s3c_ac97
.
ac97_clk
);
err2:
iounmap
(
s3c_ac97
.
regs
);
...
...
@@ -488,7 +488,7 @@ static __devexit int s3c_ac97_remove(struct platform_device *pdev)
if
(
irq_res
)
free_irq
(
irq_res
->
start
,
NULL
);
clk_disable
(
s3c_ac97
.
ac97_clk
);
clk_disable
_unprepare
(
s3c_ac97
.
ac97_clk
);
clk_put
(
s3c_ac97
.
ac97_clk
);
iounmap
(
s3c_ac97
.
regs
);
...
...
sound/soc/samsung/bells.c
浏览文件 @
05cf9dd8
...
...
@@ -18,15 +18,6 @@
#include "../codecs/wm5102.h"
#include "../codecs/wm9081.h"
/*
* 44.1kHz based clocks for the SYSCLK domain, use a very high clock
* to allow all the DSP functionality to be enabled if desired.
*/
#define SYSCLK_RATE (44100 * 1024)
/* 48kHz based clocks for the ASYNC domain */
#define ASYNCCLK_RATE (48000 * 512)
/* BCLK2 is fixed at this currently */
#define BCLK2_RATE (64 * 8000)
...
...
@@ -36,15 +27,40 @@
*/
#define MCLK_RATE 24576000
#define WM9081_AUDIO_RATE 44100
#define WM9081_MCLK_RATE (WM9081_AUDIO_RATE * 256)
#define SYS_AUDIO_RATE 44100
#define SYS_MCLK_RATE (SYS_AUDIO_RATE * 512)
#define DAI_AP_DSP 0
#define DAI_DSP_CODEC 1
#define DAI_CODEC_CP 2
#define DAI_CODEC_SUB 3
struct
bells_drvdata
{
int
sysclk_rate
;
int
asyncclk_rate
;
};
static
struct
bells_drvdata
wm2200_drvdata
=
{
.
sysclk_rate
=
22579200
,
};
static
struct
bells_drvdata
wm5102_drvdata
=
{
.
sysclk_rate
=
45158400
,
.
asyncclk_rate
=
49152000
,
};
static
struct
bells_drvdata
wm5110_drvdata
=
{
.
sysclk_rate
=
135475200
,
.
asyncclk_rate
=
147456000
,
};
static
int
bells_set_bias_level
(
struct
snd_soc_card
*
card
,
struct
snd_soc_dapm_context
*
dapm
,
enum
snd_soc_bias_level
level
)
{
struct
snd_soc_dai
*
codec_dai
=
card
->
rtd
[
0
].
codec_dai
;
struct
snd_soc_dai
*
codec_dai
=
card
->
rtd
[
DAI_DSP_CODEC
].
codec_dai
;
struct
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
struct
bells_drvdata
*
bells
=
card
->
drvdata
;
int
ret
;
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
...
...
@@ -52,18 +68,21 @@ static int bells_set_bias_level(struct snd_soc_card *card,
switch
(
level
)
{
case
SND_SOC_BIAS_PREPARE
:
if
(
dapm
->
bias_level
==
SND_SOC_BIAS_STANDBY
)
{
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL1
,
ARIZONA_FLL_SRC_MCLK1
,
MCLK_RATE
,
SYSCLK_RATE
);
if
(
ret
<
0
)
pr_err
(
"Failed to start FLL: %d
\n
"
,
ret
);
if
(
dapm
->
bias_level
!=
SND_SOC_BIAS_STANDBY
)
break
;
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL1
,
ARIZONA_FLL_SRC_MCLK1
,
MCLK_RATE
,
bells
->
sysclk_rate
);
if
(
ret
<
0
)
pr_err
(
"Failed to start FLL: %d
\n
"
,
ret
);
if
(
bells
->
asyncclk_rate
)
{
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL2
,
ARIZONA_FLL_SRC_AIF2BCLK
,
BCLK2_RATE
,
ASYNCCLK_RATE
);
bells
->
asyncclk_rate
);
if
(
ret
<
0
)
pr_err
(
"Failed to start FLL: %d
\n
"
,
ret
);
}
...
...
@@ -80,8 +99,9 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
struct
snd_soc_dapm_context
*
dapm
,
enum
snd_soc_bias_level
level
)
{
struct
snd_soc_dai
*
codec_dai
=
card
->
rtd
[
0
].
codec_dai
;
struct
snd_soc_dai
*
codec_dai
=
card
->
rtd
[
DAI_DSP_CODEC
].
codec_dai
;
struct
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
struct
bells_drvdata
*
bells
=
card
->
drvdata
;
int
ret
;
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
...
...
@@ -95,10 +115,13 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
return
ret
;
}
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL2
,
0
,
0
,
0
);
if
(
ret
<
0
)
{
pr_err
(
"Failed to stop FLL: %d
\n
"
,
ret
);
return
ret
;
if
(
bells
->
asyncclk_rate
)
{
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL2
,
0
,
0
,
0
);
if
(
ret
<
0
)
{
pr_err
(
"Failed to stop FLL: %d
\n
"
,
ret
);
return
ret
;
}
}
break
;
...
...
@@ -113,56 +136,73 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
static
int
bells_late_probe
(
struct
snd_soc_card
*
card
)
{
struct
snd_soc_codec
*
codec
=
card
->
rtd
[
0
].
codec
;
struct
snd_soc_dai
*
aif1_dai
=
card
->
rtd
[
0
].
codec_dai
;
struct
snd_soc_dai
*
aif2_dai
=
card
->
rtd
[
1
].
cpu_dai
;
struct
snd_soc_dai
*
aif3_dai
=
card
->
rtd
[
2
].
cpu_dai
;
struct
snd_soc_dai
*
wm9081_dai
=
card
->
rtd
[
2
].
codec_dai
;
struct
bells_drvdata
*
bells
=
card
->
drvdata
;
struct
snd_soc_codec
*
wm0010
=
card
->
rtd
[
DAI_AP_DSP
].
codec
;
struct
snd_soc_codec
*
codec
=
card
->
rtd
[
DAI_DSP_CODEC
].
codec
;
struct
snd_soc_dai
*
aif1_dai
=
card
->
rtd
[
DAI_DSP_CODEC
].
codec_dai
;
struct
snd_soc_dai
*
aif2_dai
;
struct
snd_soc_dai
*
aif3_dai
;
struct
snd_soc_dai
*
wm9081_dai
;
int
ret
;
ret
=
snd_soc_dai_set_sysclk
(
aif1_dai
,
ARIZONA_CLK_SYSCLK
,
0
,
0
);
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_SYSCLK
,
ARIZONA_CLK_SRC_FLL1
,
bells
->
sysclk_rate
,
SND_SOC_CLOCK_IN
);
if
(
ret
!=
0
)
{
dev_err
(
aif1_dai
->
dev
,
"Failed to set AIF1 clock
: %d
\n
"
,
ret
);
dev_err
(
codec
->
dev
,
"Failed to set SYSCLK
: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
snd_soc_
dai_set_sysclk
(
aif2_dai
,
ARIZONA_CLK_ASYNCCLK
,
0
,
0
);
ret
=
snd_soc_
codec_set_sysclk
(
wm0010
,
0
,
0
,
SYS_MCLK_RATE
,
0
);
if
(
ret
!=
0
)
{
dev_err
(
aif2_dai
->
dev
,
"Failed to set AIF2
clock: %d
\n
"
,
ret
);
dev_err
(
wm0010
->
dev
,
"Failed to set WM0010
clock: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
snd_soc_dai_set_sysclk
(
aif
3
_dai
,
ARIZONA_CLK_SYSCLK
,
0
,
0
);
if
(
ret
!=
0
)
{
ret
=
snd_soc_dai_set_sysclk
(
aif
1
_dai
,
ARIZONA_CLK_SYSCLK
,
0
,
0
);
if
(
ret
!=
0
)
dev_err
(
aif1_dai
->
dev
,
"Failed to set AIF1 clock: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_SYSCLK
,
ARIZONA_CLK_SRC_FLL1
,
SYSCLK_RATE
,
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_OPCLK
,
0
,
SYS_MCLK_RATE
,
SND_SOC_CLOCK_OUT
);
if
(
ret
!=
0
)
dev_err
(
codec
->
dev
,
"Failed to set OPCLK: %d
\n
"
,
ret
);
if
(
card
->
num_rtd
==
DAI_CODEC_CP
)
return
0
;
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_ASYNCCLK
,
ARIZONA_CLK_SRC_FLL2
,
bells
->
asyncclk_rate
,
SND_SOC_CLOCK_IN
);
if
(
ret
!=
0
)
{
dev_err
(
codec
->
dev
,
"Failed to set
SYS
CLK: %d
\n
"
,
ret
);
dev_err
(
codec
->
dev
,
"Failed to set
ASYNC
CLK: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_OPCLK
,
0
,
WM9081_MCLK_RATE
,
SND_SOC_CLOCK_OUT
);
aif2_dai
=
card
->
rtd
[
DAI_CODEC_CP
].
cpu_dai
;
ret
=
snd_soc_dai_set_sysclk
(
aif2_dai
,
ARIZONA_CLK_ASYNCCLK
,
0
,
0
);
if
(
ret
!=
0
)
{
dev_err
(
codec
->
dev
,
"Failed to set OPCLK
: %d
\n
"
,
ret
);
dev_err
(
aif2_dai
->
dev
,
"Failed to set AIF2 clock
: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_ASYNCCLK
,
ARIZONA_CLK_SRC_FLL2
,
ASYNCCLK_RATE
,
SND_SOC_CLOCK_IN
);
if
(
card
->
num_rtd
==
DAI_CODEC_SUB
)
return
0
;
aif3_dai
=
card
->
rtd
[
DAI_CODEC_SUB
].
cpu_dai
;
wm9081_dai
=
card
->
rtd
[
DAI_CODEC_SUB
].
codec_dai
;
ret
=
snd_soc_dai_set_sysclk
(
aif3_dai
,
ARIZONA_CLK_SYSCLK
,
0
,
0
);
if
(
ret
!=
0
)
{
dev_err
(
codec
->
dev
,
"Failed to set SYSCLK
: %d
\n
"
,
ret
);
dev_err
(
aif1_dai
->
dev
,
"Failed to set AIF1 clock
: %d
\n
"
,
ret
);
return
ret
;
}
ret
=
snd_soc_codec_set_sysclk
(
wm9081_dai
->
codec
,
WM9081_SYSCLK_MCLK
,
0
,
WM9081
_MCLK_RATE
,
0
);
0
,
SYS
_MCLK_RATE
,
0
);
if
(
ret
!=
0
)
{
dev_err
(
wm9081_dai
->
dev
,
"Failed to set MCLK: %d
\n
"
,
ret
);
return
ret
;
...
...
@@ -181,22 +221,57 @@ static const struct snd_soc_pcm_stream baseband_params = {
static
const
struct
snd_soc_pcm_stream
sub_params
=
{
.
formats
=
SNDRV_PCM_FMTBIT_S32_LE
,
.
rate_min
=
WM9081
_AUDIO_RATE
,
.
rate_max
=
WM9081
_AUDIO_RATE
,
.
rate_min
=
SYS
_AUDIO_RATE
,
.
rate_max
=
SYS
_AUDIO_RATE
,
.
channels_min
=
2
,
.
channels_max
=
2
,
};
static
struct
snd_soc_dai_link
bells_dai_wm2200
[]
=
{
{
.
name
=
"CPU-DSP"
,
.
stream_name
=
"CPU-DSP"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
codec_dai_name
=
"wm0010-sdi1"
,
.
platform_name
=
"samsung-audio"
,
.
codec_name
=
"spi0.0"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
},
{
.
name
=
"DSP-CODEC"
,
.
stream_name
=
"DSP-CODEC"
,
.
cpu_dai_name
=
"wm0010-sdi2"
,
.
codec_dai_name
=
"wm2200"
,
.
codec_name
=
"wm2200.1-003a"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
params
=
&
sub_params
,
.
ignore_suspend
=
1
,
},
};
static
struct
snd_soc_dai_link
bells_dai_wm5102
[]
=
{
{
.
name
=
"CPU"
,
.
stream_name
=
"CPU"
,
.
name
=
"CPU
-DSP
"
,
.
stream_name
=
"CPU
-DSP
"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
codec_dai_name
=
"wm
5102-aif
1"
,
.
codec_dai_name
=
"wm
0010-sdi
1"
,
.
platform_name
=
"samsung-audio"
,
.
codec_name
=
"spi0.0"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
},
{
.
name
=
"DSP-CODEC"
,
.
stream_name
=
"DSP-CODEC"
,
.
cpu_dai_name
=
"wm0010-sdi2"
,
.
codec_dai_name
=
"wm5102-aif1"
,
.
codec_name
=
"wm5102-codec"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
params
=
&
sub_params
,
.
ignore_suspend
=
1
,
},
{
.
name
=
"Baseband"
,
...
...
@@ -224,14 +299,25 @@ static struct snd_soc_dai_link bells_dai_wm5102[] = {
static
struct
snd_soc_dai_link
bells_dai_wm5110
[]
=
{
{
.
name
=
"CPU"
,
.
stream_name
=
"CPU"
,
.
name
=
"CPU
-DSP
"
,
.
stream_name
=
"CPU
-DSP
"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
codec_dai_name
=
"wm
5110-aif
1"
,
.
codec_dai_name
=
"wm
0010-sdi
1"
,
.
platform_name
=
"samsung-audio"
,
.
codec_name
=
"spi0.0"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
},
{
.
name
=
"DSP-CODEC"
,
.
stream_name
=
"DSP-CODEC"
,
.
cpu_dai_name
=
"wm0010-sdi2"
,
.
codec_dai_name
=
"wm5110-aif1"
,
.
codec_name
=
"wm5110-codec"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
.
params
=
&
sub_params
,
.
ignore_suspend
=
1
,
},
{
.
name
=
"Baseband"
,
...
...
@@ -269,6 +355,24 @@ static struct snd_soc_dapm_route bells_routes[] = {
};
static
struct
snd_soc_card
bells_cards
[]
=
{
{
.
name
=
"Bells WM2200"
,
.
owner
=
THIS_MODULE
,
.
dai_link
=
bells_dai_wm2200
,
.
num_links
=
ARRAY_SIZE
(
bells_dai_wm2200
),
.
codec_conf
=
bells_codec_conf
,
.
num_configs
=
ARRAY_SIZE
(
bells_codec_conf
),
.
late_probe
=
bells_late_probe
,
.
dapm_routes
=
bells_routes
,
.
num_dapm_routes
=
ARRAY_SIZE
(
bells_routes
),
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
drvdata
=
&
wm2200_drvdata
,
},
{
.
name
=
"Bells WM5102"
,
.
owner
=
THIS_MODULE
,
...
...
@@ -284,6 +388,8 @@ static struct snd_soc_card bells_cards[] = {
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
drvdata
=
&
wm5102_drvdata
,
},
{
.
name
=
"Bells WM5110"
,
...
...
@@ -300,6 +406,8 @@ static struct snd_soc_card bells_cards[] = {
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
drvdata
=
&
wm5110_drvdata
,
},
};
...
...
sound/soc/samsung/i2s.c
浏览文件 @
05cf9dd8
...
...
@@ -49,8 +49,6 @@ struct i2s_dai {
struct
clk
*
clk
;
/* Clock for generating I2S signals */
struct
clk
*
op_clk
;
/* Array of clock names for op_clk */
const
char
**
src_clk
;
/* Pointer to the Primary_Fifo if this is Sec_Fifo, NULL otherwise */
struct
i2s_dai
*
pri_dai
;
/* Pointer to the Secondary_Fifo if it has one, NULL otherwise */
...
...
@@ -423,7 +421,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
if
(
i2s
->
op_clk
)
{
if
((
clk_id
&&
!
(
mod
&
MOD_IMS_SYSMUX
))
||
(
!
clk_id
&&
(
mod
&
MOD_IMS_SYSMUX
)))
{
clk_disable
(
i2s
->
op_clk
);
clk_disable
_unprepare
(
i2s
->
op_clk
);
clk_put
(
i2s
->
op_clk
);
}
else
{
i2s
->
rclk_srcrate
=
...
...
@@ -432,9 +430,13 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
}
}
i2s
->
op_clk
=
clk_get
(
&
i2s
->
pdev
->
dev
,
i2s
->
src_clk
[
clk_id
]);
clk_enable
(
i2s
->
op_clk
);
if
(
clk_id
)
i2s
->
op_clk
=
clk_get
(
&
i2s
->
pdev
->
dev
,
"i2s_opclk1"
);
else
i2s
->
op_clk
=
clk_get
(
&
i2s
->
pdev
->
dev
,
"i2s_opclk0"
);
clk_prepare_enable
(
i2s
->
op_clk
);
i2s
->
rclk_srcrate
=
clk_get_rate
(
i2s
->
op_clk
);
/* Over-ride the other's */
...
...
@@ -880,7 +882,7 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai)
iounmap
(
i2s
->
addr
);
return
-
ENOENT
;
}
clk_enable
(
i2s
->
clk
);
clk_
prepare_
enable
(
i2s
->
clk
);
if
(
other
)
{
other
->
addr
=
i2s
->
addr
;
...
...
@@ -922,7 +924,7 @@ static int samsung_i2s_dai_remove(struct snd_soc_dai *dai)
if
(
i2s
->
quirks
&
QUIRK_NEED_RSTCLR
)
writel
(
0
,
i2s
->
addr
+
I2SCON
);
clk_disable
(
i2s
->
clk
);
clk_disable
_unprepare
(
i2s
->
clk
);
clk_put
(
i2s
->
clk
);
iounmap
(
i2s
->
addr
);
...
...
@@ -1067,7 +1069,6 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
(
struct
s3c2410_dma_client
*
)
&
pri_dai
->
dma_capture
;
pri_dai
->
dma_playback
.
channel
=
dma_pl_chan
;
pri_dai
->
dma_capture
.
channel
=
dma_cp_chan
;
pri_dai
->
src_clk
=
i2s_cfg
->
src_clk
;
pri_dai
->
dma_playback
.
dma_size
=
4
;
pri_dai
->
dma_capture
.
dma_size
=
4
;
pri_dai
->
base
=
regs_base
;
...
...
@@ -1088,7 +1089,6 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
(
struct
s3c2410_dma_client
*
)
&
sec_dai
->
dma_playback
;
/* Use iDMA always if SysDMA not provided */
sec_dai
->
dma_playback
.
channel
=
dma_pl_sec_chan
?
:
-
1
;
sec_dai
->
src_clk
=
i2s_cfg
->
src_clk
;
sec_dai
->
dma_playback
.
dma_size
=
4
;
sec_dai
->
base
=
regs_base
;
sec_dai
->
quirks
=
quirks
;
...
...
sound/soc/samsung/pcm.c
浏览文件 @
05cf9dd8
...
...
@@ -543,7 +543,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
ret
=
PTR_ERR
(
pcm
->
cclk
);
goto
err1
;
}
clk_enable
(
pcm
->
cclk
);
clk_
prepare_
enable
(
pcm
->
cclk
);
/* record our pcm structure for later use in the callbacks */
dev_set_drvdata
(
&
pdev
->
dev
,
pcm
);
...
...
@@ -568,7 +568,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
ret
=
-
ENOENT
;
goto
err4
;
}
clk_enable
(
pcm
->
pclk
);
clk_
prepare_
enable
(
pcm
->
pclk
);
s3c_pcm_stereo_in
[
pdev
->
id
].
dma_addr
=
mem_res
->
start
+
S3C_PCM_RXFIFO
;
...
...
@@ -592,14 +592,14 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
return
0
;
err5:
clk_disable
(
pcm
->
pclk
);
clk_disable
_unprepare
(
pcm
->
pclk
);
clk_put
(
pcm
->
pclk
);
err4:
iounmap
(
pcm
->
regs
);
err3:
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
err2:
clk_disable
(
pcm
->
cclk
);
clk_disable
_unprepare
(
pcm
->
cclk
);
clk_put
(
pcm
->
cclk
);
err1:
return
ret
;
...
...
@@ -619,8 +619,8 @@ static __devexit int s3c_pcm_dev_remove(struct platform_device *pdev)
mem_res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
clk_disable
(
pcm
->
cclk
);
clk_disable
(
pcm
->
pclk
);
clk_disable
_unprepare
(
pcm
->
cclk
);
clk_disable
_unprepare
(
pcm
->
pclk
);
clk_put
(
pcm
->
pclk
);
clk_put
(
pcm
->
cclk
);
...
...
sound/soc/samsung/spdif.c
浏览文件 @
05cf9dd8
...
...
@@ -397,7 +397,7 @@ static __devinit int spdif_probe(struct platform_device *pdev)
ret
=
-
ENOENT
;
goto
err0
;
}
clk_enable
(
spdif
->
pclk
);
clk_
prepare_
enable
(
spdif
->
pclk
);
spdif
->
sclk
=
clk_get
(
&
pdev
->
dev
,
"sclk_spdif"
);
if
(
IS_ERR
(
spdif
->
sclk
))
{
...
...
@@ -405,7 +405,7 @@ static __devinit int spdif_probe(struct platform_device *pdev)
ret
=
-
ENOENT
;
goto
err1
;
}
clk_enable
(
spdif
->
sclk
);
clk_
prepare_
enable
(
spdif
->
sclk
);
/* Request S/PDIF Register's memory region */
if
(
!
request_mem_region
(
mem_res
->
start
,
...
...
@@ -444,10 +444,10 @@ static __devinit int spdif_probe(struct platform_device *pdev)
err3:
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
err2:
clk_disable
(
spdif
->
sclk
);
clk_disable
_unprepare
(
spdif
->
sclk
);
clk_put
(
spdif
->
sclk
);
err1:
clk_disable
(
spdif
->
pclk
);
clk_disable
_unprepare
(
spdif
->
pclk
);
clk_put
(
spdif
->
pclk
);
err0:
return
ret
;
...
...
@@ -466,9 +466,9 @@ static __devexit int spdif_remove(struct platform_device *pdev)
if
(
mem_res
)
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
clk_disable
(
spdif
->
sclk
);
clk_disable
_unprepare
(
spdif
->
sclk
);
clk_put
(
spdif
->
sclk
);
clk_disable
(
spdif
->
pclk
);
clk_disable
_unprepare
(
spdif
->
pclk
);
clk_put
(
spdif
->
pclk
);
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录