Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
05cf9dd8
Commit
05cf9dd8
authored
Dec 02, 2012
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/samsung' into asoc-next
parents
897074d8
1974a042
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
190 additions
and
88 deletions
+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
No files found.
include/linux/platform_data/asoc-s3c.h
View file @
05cf9dd8
...
@@ -38,12 +38,6 @@ struct samsung_i2s {
...
@@ -38,12 +38,6 @@ struct samsung_i2s {
#define QUIRK_NEED_RSTCLR (1 << 3)
#define QUIRK_NEED_RSTCLR (1 << 3)
/* Quirks of the I2S controller */
/* Quirks of the I2S controller */
u32
quirks
;
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
;
dma_addr_t
idma_addr
;
};
};
...
...
sound/soc/samsung/ac97.c
View file @
05cf9dd8
...
@@ -442,7 +442,7 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
...
@@ -442,7 +442,7 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
ret
=
-
ENODEV
;
ret
=
-
ENODEV
;
goto
err2
;
goto
err2
;
}
}
clk_enable
(
s3c_ac97
.
ac97_clk
);
clk_
prepare_
enable
(
s3c_ac97
.
ac97_clk
);
if
(
ac97_pdata
->
cfg_gpio
(
pdev
))
{
if
(
ac97_pdata
->
cfg_gpio
(
pdev
))
{
dev_err
(
&
pdev
->
dev
,
"Unable to configure gpio
\n
"
);
dev_err
(
&
pdev
->
dev
,
"Unable to configure gpio
\n
"
);
...
@@ -468,7 +468,7 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
...
@@ -468,7 +468,7 @@ static __devinit int s3c_ac97_probe(struct platform_device *pdev)
free_irq
(
irq_res
->
start
,
NULL
);
free_irq
(
irq_res
->
start
,
NULL
);
err4:
err4:
err3:
err3:
clk_disable
(
s3c_ac97
.
ac97_clk
);
clk_disable
_unprepare
(
s3c_ac97
.
ac97_clk
);
clk_put
(
s3c_ac97
.
ac97_clk
);
clk_put
(
s3c_ac97
.
ac97_clk
);
err2:
err2:
iounmap
(
s3c_ac97
.
regs
);
iounmap
(
s3c_ac97
.
regs
);
...
@@ -488,7 +488,7 @@ static __devexit int s3c_ac97_remove(struct platform_device *pdev)
...
@@ -488,7 +488,7 @@ static __devexit int s3c_ac97_remove(struct platform_device *pdev)
if
(
irq_res
)
if
(
irq_res
)
free_irq
(
irq_res
->
start
,
NULL
);
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
);
clk_put
(
s3c_ac97
.
ac97_clk
);
iounmap
(
s3c_ac97
.
regs
);
iounmap
(
s3c_ac97
.
regs
);
...
...
sound/soc/samsung/bells.c
View file @
05cf9dd8
...
@@ -18,15 +18,6 @@
...
@@ -18,15 +18,6 @@
#include "../codecs/wm5102.h"
#include "../codecs/wm5102.h"
#include "../codecs/wm9081.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 */
/* BCLK2 is fixed at this currently */
#define BCLK2_RATE (64 * 8000)
#define BCLK2_RATE (64 * 8000)
...
@@ -36,15 +27,40 @@
...
@@ -36,15 +27,40 @@
*/
*/
#define MCLK_RATE 24576000
#define MCLK_RATE 24576000
#define WM9081_AUDIO_RATE 44100
#define SYS_AUDIO_RATE 44100
#define WM9081_MCLK_RATE (WM9081_AUDIO_RATE * 256)
#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
,
static
int
bells_set_bias_level
(
struct
snd_soc_card
*
card
,
struct
snd_soc_dapm_context
*
dapm
,
struct
snd_soc_dapm_context
*
dapm
,
enum
snd_soc_bias_level
level
)
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
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
struct
bells_drvdata
*
bells
=
card
->
drvdata
;
int
ret
;
int
ret
;
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
...
@@ -52,18 +68,21 @@ static int bells_set_bias_level(struct snd_soc_card *card,
...
@@ -52,18 +68,21 @@ static int bells_set_bias_level(struct snd_soc_card *card,
switch
(
level
)
{
switch
(
level
)
{
case
SND_SOC_BIAS_PREPARE
:
case
SND_SOC_BIAS_PREPARE
:
if
(
dapm
->
bias_level
==
SND_SOC_BIAS_STANDBY
)
{
if
(
dapm
->
bias_level
!=
SND_SOC_BIAS_STANDBY
)
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL1
,
break
;
ARIZONA_FLL_SRC_MCLK1
,
MCLK_RATE
,
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL1
,
SYSCLK_RATE
);
ARIZONA_FLL_SRC_MCLK1
,
if
(
ret
<
0
)
MCLK_RATE
,
pr_err
(
"Failed to start FLL: %d
\n
"
,
ret
);
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
,
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL2
,
ARIZONA_FLL_SRC_AIF2BCLK
,
ARIZONA_FLL_SRC_AIF2BCLK
,
BCLK2_RATE
,
BCLK2_RATE
,
ASYNCCLK_RATE
);
bells
->
asyncclk_rate
);
if
(
ret
<
0
)
if
(
ret
<
0
)
pr_err
(
"Failed to start FLL: %d
\n
"
,
ret
);
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,
...
@@ -80,8 +99,9 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
struct
snd_soc_dapm_context
*
dapm
,
struct
snd_soc_dapm_context
*
dapm
,
enum
snd_soc_bias_level
level
)
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
snd_soc_codec
*
codec
=
codec_dai
->
codec
;
struct
bells_drvdata
*
bells
=
card
->
drvdata
;
int
ret
;
int
ret
;
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
if
(
dapm
->
dev
!=
codec_dai
->
dev
)
...
@@ -95,10 +115,13 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
...
@@ -95,10 +115,13 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
return
ret
;
return
ret
;
}
}
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL2
,
0
,
0
,
0
);
if
(
bells
->
asyncclk_rate
)
{
if
(
ret
<
0
)
{
ret
=
snd_soc_codec_set_pll
(
codec
,
WM5102_FLL2
,
pr_err
(
"Failed to stop FLL: %d
\n
"
,
ret
);
0
,
0
,
0
);
return
ret
;
if
(
ret
<
0
)
{
pr_err
(
"Failed to stop FLL: %d
\n
"
,
ret
);
return
ret
;
}
}
}
break
;
break
;
...
@@ -113,56 +136,73 @@ static int bells_set_bias_level_post(struct snd_soc_card *card,
...
@@ -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
)
static
int
bells_late_probe
(
struct
snd_soc_card
*
card
)
{
{
struct
snd_soc_codec
*
codec
=
card
->
rtd
[
0
].
codec
;
struct
bells_drvdata
*
bells
=
card
->
drvdata
;
struct
snd_soc_dai
*
aif1_dai
=
card
->
rtd
[
0
].
codec_dai
;
struct
snd_soc_codec
*
wm0010
=
card
->
rtd
[
DAI_AP_DSP
].
codec
;
struct
snd_soc_dai
*
aif2_dai
=
card
->
rtd
[
1
].
cpu_dai
;
struct
snd_soc_codec
*
codec
=
card
->
rtd
[
DAI_DSP_CODEC
].
codec
;
struct
snd_soc_dai
*
aif3_dai
=
card
->
rtd
[
2
].
cpu_dai
;
struct
snd_soc_dai
*
aif1_dai
=
card
->
rtd
[
DAI_DSP_CODEC
].
codec_dai
;
struct
snd_soc_dai
*
wm9081_dai
=
card
->
rtd
[
2
].
codec_dai
;
struct
snd_soc_dai
*
aif2_dai
;
struct
snd_soc_dai
*
aif3_dai
;
struct
snd_soc_dai
*
wm9081_dai
;
int
ret
;
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
)
{
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
;
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
)
{
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
;
return
ret
;
}
}
ret
=
snd_soc_dai_set_sysclk
(
aif
3
_dai
,
ARIZONA_CLK_SYSCLK
,
0
,
0
);
ret
=
snd_soc_dai_set_sysclk
(
aif
1
_dai
,
ARIZONA_CLK_SYSCLK
,
0
,
0
);
if
(
ret
!=
0
)
{
if
(
ret
!=
0
)
dev_err
(
aif1_dai
->
dev
,
"Failed to set AIF1 clock: %d
\n
"
,
ret
);
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
,
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_OPCLK
,
0
,
ARIZONA_CLK_SRC_FLL1
,
SYSCLK_RATE
,
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
);
SND_SOC_CLOCK_IN
);
if
(
ret
!=
0
)
{
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
;
return
ret
;
}
}
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_OPCLK
,
0
,
aif2_dai
=
card
->
rtd
[
DAI_CODEC_CP
].
cpu_dai
;
WM9081_MCLK_RATE
,
SND_SOC_CLOCK_OUT
);
ret
=
snd_soc_dai_set_sysclk
(
aif2_dai
,
ARIZONA_CLK_ASYNCCLK
,
0
,
0
);
if
(
ret
!=
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
;
return
ret
;
}
}
ret
=
snd_soc_codec_set_sysclk
(
codec
,
ARIZONA_CLK_ASYNCCLK
,
if
(
card
->
num_rtd
==
DAI_CODEC_SUB
)
ARIZONA_CLK_SRC_FLL2
,
ASYNCCLK_RATE
,
return
0
;
SND_SOC_CLOCK_IN
);
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
)
{
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
;
return
ret
;
}
}
ret
=
snd_soc_codec_set_sysclk
(
wm9081_dai
->
codec
,
WM9081_SYSCLK_MCLK
,
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
)
{
if
(
ret
!=
0
)
{
dev_err
(
wm9081_dai
->
dev
,
"Failed to set MCLK: %d
\n
"
,
ret
);
dev_err
(
wm9081_dai
->
dev
,
"Failed to set MCLK: %d
\n
"
,
ret
);
return
ret
;
return
ret
;
...
@@ -181,22 +221,57 @@ static const struct snd_soc_pcm_stream baseband_params = {
...
@@ -181,22 +221,57 @@ static const struct snd_soc_pcm_stream baseband_params = {
static
const
struct
snd_soc_pcm_stream
sub_params
=
{
static
const
struct
snd_soc_pcm_stream
sub_params
=
{
.
formats
=
SNDRV_PCM_FMTBIT_S32_LE
,
.
formats
=
SNDRV_PCM_FMTBIT_S32_LE
,
.
rate_min
=
WM9081
_AUDIO_RATE
,
.
rate_min
=
SYS
_AUDIO_RATE
,
.
rate_max
=
WM9081
_AUDIO_RATE
,
.
rate_max
=
SYS
_AUDIO_RATE
,
.
channels_min
=
2
,
.
channels_min
=
2
,
.
channels_max
=
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
[]
=
{
static
struct
snd_soc_dai_link
bells_dai_wm5102
[]
=
{
{
{
.
name
=
"CPU"
,
.
name
=
"CPU
-DSP
"
,
.
stream_name
=
"CPU"
,
.
stream_name
=
"CPU
-DSP
"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
codec_dai_name
=
"wm
5102-aif
1"
,
.
codec_dai_name
=
"wm
0010-sdi
1"
,
.
platform_name
=
"samsung-audio"
,
.
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"
,
.
codec_name
=
"wm5102-codec"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
|
SND_SOC_DAIFMT_CBM_CFM
,
.
params
=
&
sub_params
,
.
ignore_suspend
=
1
,
},
},
{
{
.
name
=
"Baseband"
,
.
name
=
"Baseband"
,
...
@@ -224,14 +299,25 @@ static struct snd_soc_dai_link bells_dai_wm5102[] = {
...
@@ -224,14 +299,25 @@ static struct snd_soc_dai_link bells_dai_wm5102[] = {
static
struct
snd_soc_dai_link
bells_dai_wm5110
[]
=
{
static
struct
snd_soc_dai_link
bells_dai_wm5110
[]
=
{
{
{
.
name
=
"CPU"
,
.
name
=
"CPU
-DSP
"
,
.
stream_name
=
"CPU"
,
.
stream_name
=
"CPU
-DSP
"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
cpu_dai_name
=
"samsung-i2s.0"
,
.
codec_dai_name
=
"wm
5110-aif
1"
,
.
codec_dai_name
=
"wm
0010-sdi
1"
,
.
platform_name
=
"samsung-audio"
,
.
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"
,
.
codec_name
=
"wm5110-codec"
,
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
.
dai_fmt
=
SND_SOC_DAIFMT_I2S
|
SND_SOC_DAIFMT_NB_NF
|
SND_SOC_DAIFMT_CBM_CFM
,
|
SND_SOC_DAIFMT_CBM_CFM
,
.
params
=
&
sub_params
,
.
ignore_suspend
=
1
,
},
},
{
{
.
name
=
"Baseband"
,
.
name
=
"Baseband"
,
...
@@ -269,6 +355,24 @@ static struct snd_soc_dapm_route bells_routes[] = {
...
@@ -269,6 +355,24 @@ static struct snd_soc_dapm_route bells_routes[] = {
};
};
static
struct
snd_soc_card
bells_cards
[]
=
{
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"
,
.
name
=
"Bells WM5102"
,
.
owner
=
THIS_MODULE
,
.
owner
=
THIS_MODULE
,
...
@@ -284,6 +388,8 @@ static struct snd_soc_card bells_cards[] = {
...
@@ -284,6 +388,8 @@ static struct snd_soc_card bells_cards[] = {
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
drvdata
=
&
wm5102_drvdata
,
},
},
{
{
.
name
=
"Bells WM5110"
,
.
name
=
"Bells WM5110"
,
...
@@ -300,6 +406,8 @@ static struct snd_soc_card bells_cards[] = {
...
@@ -300,6 +406,8 @@ static struct snd_soc_card bells_cards[] = {
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level
=
bells_set_bias_level
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
set_bias_level_post
=
bells_set_bias_level_post
,
.
drvdata
=
&
wm5110_drvdata
,
},
},
};
};
...
...
sound/soc/samsung/i2s.c
View file @
05cf9dd8
...
@@ -49,8 +49,6 @@ struct i2s_dai {
...
@@ -49,8 +49,6 @@ struct i2s_dai {
struct
clk
*
clk
;
struct
clk
*
clk
;
/* Clock for generating I2S signals */
/* Clock for generating I2S signals */
struct
clk
*
op_clk
;
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 */
/* Pointer to the Primary_Fifo if this is Sec_Fifo, NULL otherwise */
struct
i2s_dai
*
pri_dai
;
struct
i2s_dai
*
pri_dai
;
/* Pointer to the Secondary_Fifo if it has one, NULL otherwise */
/* 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,
...
@@ -423,7 +421,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
if
(
i2s
->
op_clk
)
{
if
(
i2s
->
op_clk
)
{
if
((
clk_id
&&
!
(
mod
&
MOD_IMS_SYSMUX
))
||
if
((
clk_id
&&
!
(
mod
&
MOD_IMS_SYSMUX
))
||
(
!
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
);
clk_put
(
i2s
->
op_clk
);
}
else
{
}
else
{
i2s
->
rclk_srcrate
=
i2s
->
rclk_srcrate
=
...
@@ -432,9 +430,13 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
...
@@ -432,9 +430,13 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
}
}
}
}
i2s
->
op_clk
=
clk_get
(
&
i2s
->
pdev
->
dev
,
if
(
clk_id
)
i2s
->
src_clk
[
clk_id
]);
i2s
->
op_clk
=
clk_get
(
&
i2s
->
pdev
->
dev
,
clk_enable
(
i2s
->
op_clk
);
"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
);
i2s
->
rclk_srcrate
=
clk_get_rate
(
i2s
->
op_clk
);
/* Over-ride the other's */
/* Over-ride the other's */
...
@@ -880,7 +882,7 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai)
...
@@ -880,7 +882,7 @@ static int samsung_i2s_dai_probe(struct snd_soc_dai *dai)
iounmap
(
i2s
->
addr
);
iounmap
(
i2s
->
addr
);
return
-
ENOENT
;
return
-
ENOENT
;
}
}
clk_enable
(
i2s
->
clk
);
clk_
prepare_
enable
(
i2s
->
clk
);
if
(
other
)
{
if
(
other
)
{
other
->
addr
=
i2s
->
addr
;
other
->
addr
=
i2s
->
addr
;
...
@@ -922,7 +924,7 @@ static int samsung_i2s_dai_remove(struct snd_soc_dai *dai)
...
@@ -922,7 +924,7 @@ static int samsung_i2s_dai_remove(struct snd_soc_dai *dai)
if
(
i2s
->
quirks
&
QUIRK_NEED_RSTCLR
)
if
(
i2s
->
quirks
&
QUIRK_NEED_RSTCLR
)
writel
(
0
,
i2s
->
addr
+
I2SCON
);
writel
(
0
,
i2s
->
addr
+
I2SCON
);
clk_disable
(
i2s
->
clk
);
clk_disable
_unprepare
(
i2s
->
clk
);
clk_put
(
i2s
->
clk
);
clk_put
(
i2s
->
clk
);
iounmap
(
i2s
->
addr
);
iounmap
(
i2s
->
addr
);
...
@@ -1067,7 +1069,6 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
...
@@ -1067,7 +1069,6 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
(
struct
s3c2410_dma_client
*
)
&
pri_dai
->
dma_capture
;
(
struct
s3c2410_dma_client
*
)
&
pri_dai
->
dma_capture
;
pri_dai
->
dma_playback
.
channel
=
dma_pl_chan
;
pri_dai
->
dma_playback
.
channel
=
dma_pl_chan
;
pri_dai
->
dma_capture
.
channel
=
dma_cp_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_playback
.
dma_size
=
4
;
pri_dai
->
dma_capture
.
dma_size
=
4
;
pri_dai
->
dma_capture
.
dma_size
=
4
;
pri_dai
->
base
=
regs_base
;
pri_dai
->
base
=
regs_base
;
...
@@ -1088,7 +1089,6 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
...
@@ -1088,7 +1089,6 @@ static __devinit int samsung_i2s_probe(struct platform_device *pdev)
(
struct
s3c2410_dma_client
*
)
&
sec_dai
->
dma_playback
;
(
struct
s3c2410_dma_client
*
)
&
sec_dai
->
dma_playback
;
/* Use iDMA always if SysDMA not provided */
/* Use iDMA always if SysDMA not provided */
sec_dai
->
dma_playback
.
channel
=
dma_pl_sec_chan
?
:
-
1
;
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
->
dma_playback
.
dma_size
=
4
;
sec_dai
->
base
=
regs_base
;
sec_dai
->
base
=
regs_base
;
sec_dai
->
quirks
=
quirks
;
sec_dai
->
quirks
=
quirks
;
...
...
sound/soc/samsung/pcm.c
View file @
05cf9dd8
...
@@ -543,7 +543,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
...
@@ -543,7 +543,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
ret
=
PTR_ERR
(
pcm
->
cclk
);
ret
=
PTR_ERR
(
pcm
->
cclk
);
goto
err1
;
goto
err1
;
}
}
clk_enable
(
pcm
->
cclk
);
clk_
prepare_
enable
(
pcm
->
cclk
);
/* record our pcm structure for later use in the callbacks */
/* record our pcm structure for later use in the callbacks */
dev_set_drvdata
(
&
pdev
->
dev
,
pcm
);
dev_set_drvdata
(
&
pdev
->
dev
,
pcm
);
...
@@ -568,7 +568,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
...
@@ -568,7 +568,7 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
ret
=
-
ENOENT
;
ret
=
-
ENOENT
;
goto
err4
;
goto
err4
;
}
}
clk_enable
(
pcm
->
pclk
);
clk_
prepare_
enable
(
pcm
->
pclk
);
s3c_pcm_stereo_in
[
pdev
->
id
].
dma_addr
=
mem_res
->
start
s3c_pcm_stereo_in
[
pdev
->
id
].
dma_addr
=
mem_res
->
start
+
S3C_PCM_RXFIFO
;
+
S3C_PCM_RXFIFO
;
...
@@ -592,14 +592,14 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
...
@@ -592,14 +592,14 @@ static __devinit int s3c_pcm_dev_probe(struct platform_device *pdev)
return
0
;
return
0
;
err5:
err5:
clk_disable
(
pcm
->
pclk
);
clk_disable
_unprepare
(
pcm
->
pclk
);
clk_put
(
pcm
->
pclk
);
clk_put
(
pcm
->
pclk
);
err4:
err4:
iounmap
(
pcm
->
regs
);
iounmap
(
pcm
->
regs
);
err3:
err3:
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
err2:
err2:
clk_disable
(
pcm
->
cclk
);
clk_disable
_unprepare
(
pcm
->
cclk
);
clk_put
(
pcm
->
cclk
);
clk_put
(
pcm
->
cclk
);
err1:
err1:
return
ret
;
return
ret
;
...
@@ -619,8 +619,8 @@ static __devexit int s3c_pcm_dev_remove(struct platform_device *pdev)
...
@@ -619,8 +619,8 @@ static __devexit int s3c_pcm_dev_remove(struct platform_device *pdev)
mem_res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
mem_res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
clk_disable
(
pcm
->
cclk
);
clk_disable
_unprepare
(
pcm
->
cclk
);
clk_disable
(
pcm
->
pclk
);
clk_disable
_unprepare
(
pcm
->
pclk
);
clk_put
(
pcm
->
pclk
);
clk_put
(
pcm
->
pclk
);
clk_put
(
pcm
->
cclk
);
clk_put
(
pcm
->
cclk
);
...
...
sound/soc/samsung/spdif.c
View file @
05cf9dd8
...
@@ -397,7 +397,7 @@ static __devinit int spdif_probe(struct platform_device *pdev)
...
@@ -397,7 +397,7 @@ static __devinit int spdif_probe(struct platform_device *pdev)
ret
=
-
ENOENT
;
ret
=
-
ENOENT
;
goto
err0
;
goto
err0
;
}
}
clk_enable
(
spdif
->
pclk
);
clk_
prepare_
enable
(
spdif
->
pclk
);
spdif
->
sclk
=
clk_get
(
&
pdev
->
dev
,
"sclk_spdif"
);
spdif
->
sclk
=
clk_get
(
&
pdev
->
dev
,
"sclk_spdif"
);
if
(
IS_ERR
(
spdif
->
sclk
))
{
if
(
IS_ERR
(
spdif
->
sclk
))
{
...
@@ -405,7 +405,7 @@ static __devinit int spdif_probe(struct platform_device *pdev)
...
@@ -405,7 +405,7 @@ static __devinit int spdif_probe(struct platform_device *pdev)
ret
=
-
ENOENT
;
ret
=
-
ENOENT
;
goto
err1
;
goto
err1
;
}
}
clk_enable
(
spdif
->
sclk
);
clk_
prepare_
enable
(
spdif
->
sclk
);
/* Request S/PDIF Register's memory region */
/* Request S/PDIF Register's memory region */
if
(
!
request_mem_region
(
mem_res
->
start
,
if
(
!
request_mem_region
(
mem_res
->
start
,
...
@@ -444,10 +444,10 @@ static __devinit int spdif_probe(struct platform_device *pdev)
...
@@ -444,10 +444,10 @@ static __devinit int spdif_probe(struct platform_device *pdev)
err3:
err3:
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
release_mem_region
(
mem_res
->
start
,
resource_size
(
mem_res
));
err2:
err2:
clk_disable
(
spdif
->
sclk
);
clk_disable
_unprepare
(
spdif
->
sclk
);
clk_put
(
spdif
->
sclk
);
clk_put
(
spdif
->
sclk
);
err1:
err1:
clk_disable
(
spdif
->
pclk
);
clk_disable
_unprepare
(
spdif
->
pclk
);
clk_put
(
spdif
->
pclk
);
clk_put
(
spdif
->
pclk
);
err0:
err0:
return
ret
;
return
ret
;
...
@@ -466,9 +466,9 @@ static __devexit int spdif_remove(struct platform_device *pdev)
...
@@ -466,9 +466,9 @@ static __devexit int spdif_remove(struct platform_device *pdev)
if
(
mem_res
)
if
(
mem_res
)
release_mem_region
(
mem_res
->
start
,
resource_size
(
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_put
(
spdif
->
sclk
);
clk_disable
(
spdif
->
pclk
);
clk_disable
_unprepare
(
spdif
->
pclk
);
clk_put
(
spdif
->
pclk
);
clk_put
(
spdif
->
pclk
);
return
0
;
return
0
;
...
...
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