Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
e4aa8dd5
Commit
e4aa8dd5
authored
Aug 24, 2009
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'topic/digital-mixing' into for-2.6.32
parents
239a22aa
59ae07a5
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
133 additions
and
21 deletions
+133
-21
include/sound/soc-dapm.h
include/sound/soc-dapm.h
+8
-0
sound/soc/codecs/wm8993.c
sound/soc/codecs/wm8993.c
+84
-4
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+41
-17
No files found.
include/sound/soc-dapm.h
View file @
e4aa8dd5
...
@@ -137,6 +137,12 @@
...
@@ -137,6 +137,12 @@
.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}
.event_flags = SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD}
/* stream domain */
/* stream domain */
#define SND_SOC_DAPM_AIF_IN(wname, stname, wslot, wreg, wshift, winvert) \
{ .id = snd_soc_dapm_aif_in, .name = wname, .sname = stname, \
.reg = wreg, .shift = wshift, .invert = winvert }
#define SND_SOC_DAPM_AIF_OUT(wname, stname, wslot, wreg, wshift, winvert) \
{ .id = snd_soc_dapm_aif_out, .name = wname, .sname = stname, \
.reg = wreg, .shift = wshift, .invert = winvert }
#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
#define SND_SOC_DAPM_DAC(wname, stname, wreg, wshift, winvert) \
{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
{ .id = snd_soc_dapm_dac, .name = wname, .sname = stname, .reg = wreg, \
.shift = wshift, .invert = winvert}
.shift = wshift, .invert = winvert}
...
@@ -313,6 +319,8 @@ enum snd_soc_dapm_type {
...
@@ -313,6 +319,8 @@ enum snd_soc_dapm_type {
snd_soc_dapm_pre
,
/* machine specific pre widget - exec first */
snd_soc_dapm_pre
,
/* machine specific pre widget - exec first */
snd_soc_dapm_post
,
/* machine specific post widget - exec last */
snd_soc_dapm_post
,
/* machine specific post widget - exec last */
snd_soc_dapm_supply
,
/* power/clock supply */
snd_soc_dapm_supply
,
/* power/clock supply */
snd_soc_dapm_aif_in
,
/* audio interface input */
snd_soc_dapm_aif_out
,
/* audio interface output */
};
};
/*
/*
...
...
sound/soc/codecs/wm8993.c
View file @
e4aa8dd5
...
@@ -846,18 +846,76 @@ SOC_DAPM_SINGLE("Output Switch", WM8993_SPEAKER_MIXER, 2, 1, 0),
...
@@ -846,18 +846,76 @@ SOC_DAPM_SINGLE("Output Switch", WM8993_SPEAKER_MIXER, 2, 1, 0),
SOC_DAPM_SINGLE
(
"DAC Switch"
,
WM8993_SPEAKER_MIXER
,
0
,
1
,
0
),
SOC_DAPM_SINGLE
(
"DAC Switch"
,
WM8993_SPEAKER_MIXER
,
0
,
1
,
0
),
};
};
static
const
char
*
aif_text
[]
=
{
"Left"
,
"Right"
};
static
const
struct
soc_enum
aifoutl_enum
=
SOC_ENUM_SINGLE
(
WM8993_AUDIO_INTERFACE_1
,
15
,
2
,
aif_text
);
static
const
struct
snd_kcontrol_new
aifoutl_mux
=
SOC_DAPM_ENUM
(
"AIFOUTL Mux"
,
aifoutl_enum
);
static
const
struct
soc_enum
aifoutr_enum
=
SOC_ENUM_SINGLE
(
WM8993_AUDIO_INTERFACE_1
,
14
,
2
,
aif_text
);
static
const
struct
snd_kcontrol_new
aifoutr_mux
=
SOC_DAPM_ENUM
(
"AIFOUTR Mux"
,
aifoutr_enum
);
static
const
struct
soc_enum
aifinl_enum
=
SOC_ENUM_SINGLE
(
WM8993_AUDIO_INTERFACE_2
,
15
,
2
,
aif_text
);
static
const
struct
snd_kcontrol_new
aifinl_mux
=
SOC_DAPM_ENUM
(
"AIFINL Mux"
,
aifinl_enum
);
static
const
struct
soc_enum
aifinr_enum
=
SOC_ENUM_SINGLE
(
WM8993_AUDIO_INTERFACE_2
,
14
,
2
,
aif_text
);
static
const
struct
snd_kcontrol_new
aifinr_mux
=
SOC_DAPM_ENUM
(
"AIFINR Mux"
,
aifinr_enum
);
static
const
char
*
sidetone_text
[]
=
{
"None"
,
"Left"
,
"Right"
};
static
const
struct
soc_enum
sidetonel_enum
=
SOC_ENUM_SINGLE
(
WM8993_DIGITAL_SIDE_TONE
,
2
,
3
,
sidetone_text
);
static
const
struct
snd_kcontrol_new
sidetonel_mux
=
SOC_DAPM_ENUM
(
"Left Sidetone"
,
sidetonel_enum
);
static
const
struct
soc_enum
sidetoner_enum
=
SOC_ENUM_SINGLE
(
WM8993_DIGITAL_SIDE_TONE
,
0
,
3
,
sidetone_text
);
static
const
struct
snd_kcontrol_new
sidetoner_mux
=
SOC_DAPM_ENUM
(
"Right Sidetone"
,
sidetoner_enum
);
static
const
struct
snd_soc_dapm_widget
wm8993_dapm_widgets
[]
=
{
static
const
struct
snd_soc_dapm_widget
wm8993_dapm_widgets
[]
=
{
SND_SOC_DAPM_SUPPLY
(
"CLK_SYS"
,
WM8993_BUS_CONTROL_1
,
1
,
0
,
clk_sys_event
,
SND_SOC_DAPM_SUPPLY
(
"CLK_SYS"
,
WM8993_BUS_CONTROL_1
,
1
,
0
,
clk_sys_event
,
SND_SOC_DAPM_PRE_PMU
|
SND_SOC_DAPM_POST_PMD
),
SND_SOC_DAPM_PRE_PMU
|
SND_SOC_DAPM_POST_PMD
),
SND_SOC_DAPM_SUPPLY
(
"TOCLK"
,
WM8993_CLOCKING_1
,
14
,
0
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"TOCLK"
,
WM8993_CLOCKING_1
,
14
,
0
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"CLK_DSP"
,
WM8993_CLOCKING_3
,
0
,
0
,
NULL
,
0
),
SND_SOC_DAPM_SUPPLY
(
"CLK_DSP"
,
WM8993_CLOCKING_3
,
0
,
0
,
NULL
,
0
),
SND_SOC_DAPM_ADC
(
"ADCL"
,
NULL
,
WM8993_POWER_MANAGEMENT_2
,
1
,
0
),
SND_SOC_DAPM_ADC
(
"ADCR"
,
NULL
,
WM8993_POWER_MANAGEMENT_2
,
0
,
0
),
SND_SOC_DAPM_MUX
(
"AIFOUTL Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
aifoutl_mux
),
SND_SOC_DAPM_MUX
(
"AIFOUTR Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
aifoutr_mux
),
SND_SOC_DAPM_AIF_OUT
(
"AIFOUTL"
,
"Capture"
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_AIF_OUT
(
"AIFOUTR"
,
"Capture"
,
1
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_A
DC
(
"ADCL"
,
"Capture"
,
WM8993_POWER_MANAGEMENT_2
,
1
,
0
),
SND_SOC_DAPM_A
IF_IN
(
"AIFINL"
,
"Playback"
,
0
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_A
DC
(
"ADCR"
,
"Capture"
,
WM8993_POWER_MANAGEMENT_2
,
0
,
0
),
SND_SOC_DAPM_A
IF_IN
(
"AIFINR"
,
"Playback"
,
1
,
SND_SOC_NOPM
,
0
,
0
),
SND_SOC_DAPM_DAC
(
"DACL"
,
"Playback"
,
WM8993_POWER_MANAGEMENT_3
,
1
,
0
),
SND_SOC_DAPM_MUX
(
"DACL Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
aifinl_mux
),
SND_SOC_DAPM_DAC
(
"DACR"
,
"Playback"
,
WM8993_POWER_MANAGEMENT_3
,
0
,
0
),
SND_SOC_DAPM_MUX
(
"DACR Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
aifinr_mux
),
SND_SOC_DAPM_MUX
(
"DACL Sidetone"
,
SND_SOC_NOPM
,
0
,
0
,
&
sidetonel_mux
),
SND_SOC_DAPM_MUX
(
"DACR Sidetone"
,
SND_SOC_NOPM
,
0
,
0
,
&
sidetoner_mux
),
SND_SOC_DAPM_DAC
(
"DACL"
,
NULL
,
WM8993_POWER_MANAGEMENT_3
,
1
,
0
),
SND_SOC_DAPM_DAC
(
"DACR"
,
NULL
,
WM8993_POWER_MANAGEMENT_3
,
0
,
0
),
SND_SOC_DAPM_MUX
(
"Left Headphone Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
hpl_mux
),
SND_SOC_DAPM_MUX
(
"Left Headphone Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
hpl_mux
),
SND_SOC_DAPM_MUX
(
"Right Headphone Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
hpr_mux
),
SND_SOC_DAPM_MUX
(
"Right Headphone Mux"
,
SND_SOC_NOPM
,
0
,
0
,
&
hpr_mux
),
...
@@ -875,10 +933,32 @@ static const struct snd_soc_dapm_route routes[] = {
...
@@ -875,10 +933,32 @@ static const struct snd_soc_dapm_route routes[] = {
{
"ADCR"
,
NULL
,
"CLK_SYS"
},
{
"ADCR"
,
NULL
,
"CLK_SYS"
},
{
"ADCR"
,
NULL
,
"CLK_DSP"
},
{
"ADCR"
,
NULL
,
"CLK_DSP"
},
{
"AIFOUTL Mux"
,
"Left"
,
"ADCL"
},
{
"AIFOUTL Mux"
,
"Right"
,
"ADCR"
},
{
"AIFOUTR Mux"
,
"Left"
,
"ADCL"
},
{
"AIFOUTR Mux"
,
"Right"
,
"ADCR"
},
{
"AIFOUTL"
,
NULL
,
"AIFOUTL Mux"
},
{
"AIFOUTR"
,
NULL
,
"AIFOUTR Mux"
},
{
"DACL Mux"
,
"Left"
,
"AIFINL"
},
{
"DACL Mux"
,
"Right"
,
"AIFINR"
},
{
"DACR Mux"
,
"Left"
,
"AIFINL"
},
{
"DACR Mux"
,
"Right"
,
"AIFINR"
},
{
"DACL Sidetone"
,
"Left"
,
"ADCL"
},
{
"DACL Sidetone"
,
"Right"
,
"ADCR"
},
{
"DACR Sidetone"
,
"Left"
,
"ADCL"
},
{
"DACR Sidetone"
,
"Right"
,
"ADCR"
},
{
"DACL"
,
NULL
,
"CLK_SYS"
},
{
"DACL"
,
NULL
,
"CLK_SYS"
},
{
"DACL"
,
NULL
,
"CLK_DSP"
},
{
"DACL"
,
NULL
,
"CLK_DSP"
},
{
"DACL"
,
NULL
,
"DACL Mux"
},
{
"DACL"
,
NULL
,
"DACL Sidetone"
},
{
"DACR"
,
NULL
,
"CLK_SYS"
},
{
"DACR"
,
NULL
,
"CLK_SYS"
},
{
"DACR"
,
NULL
,
"CLK_DSP"
},
{
"DACR"
,
NULL
,
"CLK_DSP"
},
{
"DACR"
,
NULL
,
"DACR Mux"
},
{
"DACR"
,
NULL
,
"DACR Sidetone"
},
{
"Left Output Mixer"
,
"DAC Switch"
,
"DACL"
},
{
"Left Output Mixer"
,
"DAC Switch"
,
"DACL"
},
...
...
sound/soc/soc-dapm.c
View file @
e4aa8dd5
...
@@ -56,17 +56,19 @@ static int dapm_up_seq[] = {
...
@@ -56,17 +56,19 @@ static int dapm_up_seq[] = {
[
snd_soc_dapm_pre
]
=
0
,
[
snd_soc_dapm_pre
]
=
0
,
[
snd_soc_dapm_supply
]
=
1
,
[
snd_soc_dapm_supply
]
=
1
,
[
snd_soc_dapm_micbias
]
=
2
,
[
snd_soc_dapm_micbias
]
=
2
,
[
snd_soc_dapm_mic
]
=
3
,
[
snd_soc_dapm_aif_in
]
=
3
,
[
snd_soc_dapm_mux
]
=
4
,
[
snd_soc_dapm_aif_out
]
=
3
,
[
snd_soc_dapm_value_mux
]
=
4
,
[
snd_soc_dapm_mic
]
=
4
,
[
snd_soc_dapm_dac
]
=
5
,
[
snd_soc_dapm_mux
]
=
5
,
[
snd_soc_dapm_mixer
]
=
6
,
[
snd_soc_dapm_value_mux
]
=
5
,
[
snd_soc_dapm_mixer_named_ctl
]
=
6
,
[
snd_soc_dapm_dac
]
=
6
,
[
snd_soc_dapm_pga
]
=
7
,
[
snd_soc_dapm_mixer
]
=
7
,
[
snd_soc_dapm_adc
]
=
8
,
[
snd_soc_dapm_mixer_named_ctl
]
=
7
,
[
snd_soc_dapm_hp
]
=
9
,
[
snd_soc_dapm_pga
]
=
8
,
[
snd_soc_dapm_spk
]
=
9
,
[
snd_soc_dapm_adc
]
=
9
,
[
snd_soc_dapm_post
]
=
10
,
[
snd_soc_dapm_hp
]
=
10
,
[
snd_soc_dapm_spk
]
=
10
,
[
snd_soc_dapm_post
]
=
11
,
};
};
static
int
dapm_down_seq
[]
=
{
static
int
dapm_down_seq
[]
=
{
...
@@ -82,8 +84,10 @@ static int dapm_down_seq[] = {
...
@@ -82,8 +84,10 @@ static int dapm_down_seq[] = {
[
snd_soc_dapm_micbias
]
=
8
,
[
snd_soc_dapm_micbias
]
=
8
,
[
snd_soc_dapm_mux
]
=
9
,
[
snd_soc_dapm_mux
]
=
9
,
[
snd_soc_dapm_value_mux
]
=
9
,
[
snd_soc_dapm_value_mux
]
=
9
,
[
snd_soc_dapm_supply
]
=
10
,
[
snd_soc_dapm_aif_in
]
=
10
,
[
snd_soc_dapm_post
]
=
11
,
[
snd_soc_dapm_aif_out
]
=
10
,
[
snd_soc_dapm_supply
]
=
11
,
[
snd_soc_dapm_post
]
=
12
,
};
};
static
void
pop_wait
(
u32
pop_time
)
static
void
pop_wait
(
u32
pop_time
)
...
@@ -229,6 +233,8 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
...
@@ -229,6 +233,8 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
case
snd_soc_dapm_micbias
:
case
snd_soc_dapm_micbias
:
case
snd_soc_dapm_vmid
:
case
snd_soc_dapm_vmid
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_aif_in
:
case
snd_soc_dapm_aif_out
:
p
->
connect
=
1
;
p
->
connect
=
1
;
break
;
break
;
/* does effect routing - dynamically connected */
/* does effect routing - dynamically connected */
...
@@ -502,8 +508,14 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget)
...
@@ -502,8 +508,14 @@ static int is_connected_output_ep(struct snd_soc_dapm_widget *widget)
if
(
widget
->
id
==
snd_soc_dapm_supply
)
if
(
widget
->
id
==
snd_soc_dapm_supply
)
return
0
;
return
0
;
if
(
widget
->
id
==
snd_soc_dapm_adc
&&
widget
->
active
)
switch
(
widget
->
id
)
{
case
snd_soc_dapm_adc
:
case
snd_soc_dapm_aif_out
:
if
(
widget
->
active
)
return
1
;
return
1
;
default:
break
;
}
if
(
widget
->
connected
)
{
if
(
widget
->
connected
)
{
/* connected pin ? */
/* connected pin ? */
...
@@ -542,8 +554,14 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget)
...
@@ -542,8 +554,14 @@ static int is_connected_input_ep(struct snd_soc_dapm_widget *widget)
return
0
;
return
0
;
/* active stream ? */
/* active stream ? */
if
(
widget
->
id
==
snd_soc_dapm_dac
&&
widget
->
active
)
switch
(
widget
->
id
)
{
case
snd_soc_dapm_dac
:
case
snd_soc_dapm_aif_in
:
if
(
widget
->
active
)
return
1
;
return
1
;
default:
break
;
}
if
(
widget
->
connected
)
{
if
(
widget
->
connected
)
{
/* connected pin ? */
/* connected pin ? */
...
@@ -1057,6 +1075,8 @@ static void dbg_dump_dapm(struct snd_soc_codec* codec, const char *action)
...
@@ -1057,6 +1075,8 @@ static void dbg_dump_dapm(struct snd_soc_codec* codec, const char *action)
case
snd_soc_dapm_mixer
:
case
snd_soc_dapm_mixer
:
case
snd_soc_dapm_mixer_named_ctl
:
case
snd_soc_dapm_mixer_named_ctl
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_aif_in
:
case
snd_soc_dapm_aif_out
:
if
(
w
->
name
)
{
if
(
w
->
name
)
{
in
=
is_connected_input_ep
(
w
);
in
=
is_connected_input_ep
(
w
);
dapm_clear_walk
(
w
->
codec
);
dapm_clear_walk
(
w
->
codec
);
...
@@ -1433,6 +1453,8 @@ static int snd_soc_dapm_add_route(struct snd_soc_codec *codec,
...
@@ -1433,6 +1453,8 @@ static int snd_soc_dapm_add_route(struct snd_soc_codec *codec,
case
snd_soc_dapm_pre
:
case
snd_soc_dapm_pre
:
case
snd_soc_dapm_post
:
case
snd_soc_dapm_post
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_aif_in
:
case
snd_soc_dapm_aif_out
:
list_add
(
&
path
->
list
,
&
codec
->
dapm_paths
);
list_add
(
&
path
->
list
,
&
codec
->
dapm_paths
);
list_add
(
&
path
->
list_sink
,
&
wsink
->
sources
);
list_add
(
&
path
->
list_sink
,
&
wsink
->
sources
);
list_add
(
&
path
->
list_source
,
&
wsource
->
sinks
);
list_add
(
&
path
->
list_source
,
&
wsource
->
sinks
);
...
@@ -1535,9 +1557,11 @@ int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec)
...
@@ -1535,9 +1557,11 @@ int snd_soc_dapm_new_widgets(struct snd_soc_codec *codec)
dapm_new_mux
(
codec
,
w
);
dapm_new_mux
(
codec
,
w
);
break
;
break
;
case
snd_soc_dapm_adc
:
case
snd_soc_dapm_adc
:
case
snd_soc_dapm_aif_out
:
w
->
power_check
=
dapm_adc_check_power
;
w
->
power_check
=
dapm_adc_check_power
;
break
;
break
;
case
snd_soc_dapm_dac
:
case
snd_soc_dapm_dac
:
case
snd_soc_dapm_aif_in
:
w
->
power_check
=
dapm_dac_check_power
;
w
->
power_check
=
dapm_dac_check_power
;
break
;
break
;
case
snd_soc_dapm_pga
:
case
snd_soc_dapm_pga
:
...
...
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