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
9805fe39
Commit
9805fe39
authored
Jun 17, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/dapm' into asoc-next
parents
70fe99d8
656ca9d3
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
30 additions
and
32 deletions
+30
-32
include/sound/soc-dapm.h
include/sound/soc-dapm.h
+0
-1
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+30
-31
No files found.
include/sound/soc-dapm.h
View file @
9805fe39
...
...
@@ -481,7 +481,6 @@ struct snd_soc_dapm_route {
/* dapm audio path between two widgets */
struct
snd_soc_dapm_path
{
const
char
*
name
;
const
char
*
long_name
;
/* source (input) and sink (output) widgets */
struct
snd_soc_dapm_widget
*
source
;
...
...
sound/soc/soc-dapm.c
View file @
9805fe39
...
...
@@ -367,11 +367,10 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
val
=
soc_widget_read
(
w
,
e
->
reg
);
item
=
(
val
>>
e
->
shift_l
)
&
e
->
mask
;
p
->
connect
=
0
;
for
(
i
=
0
;
i
<
e
->
max
;
i
++
)
{
if
(
!
(
strcmp
(
p
->
name
,
e
->
texts
[
i
]))
&&
item
==
i
)
if
(
item
<
e
->
max
&&
!
strcmp
(
p
->
name
,
e
->
texts
[
item
]))
p
->
connect
=
1
;
}
else
p
->
connect
=
0
;
}
break
;
case
snd_soc_dapm_virt_mux
:
{
...
...
@@ -401,11 +400,10 @@ static void dapm_set_path_status(struct snd_soc_dapm_widget *w,
break
;
}
p
->
connect
=
0
;
for
(
i
=
0
;
i
<
e
->
max
;
i
++
)
{
if
(
!
(
strcmp
(
p
->
name
,
e
->
texts
[
i
]))
&&
item
==
i
)
if
(
item
<
e
->
max
&&
!
strcmp
(
p
->
name
,
e
->
texts
[
item
]))
p
->
connect
=
1
;
}
else
p
->
connect
=
0
;
}
break
;
/* does not affect routing - always connected */
...
...
@@ -509,6 +507,11 @@ static int dapm_is_shared_kcontrol(struct snd_soc_dapm_context *dapm,
return
0
;
}
static
void
dapm_kcontrol_free
(
struct
snd_kcontrol
*
kctl
)
{
kfree
(
kctl
->
private_data
);
}
/*
* Determine if a kcontrol is shared. If it is, look it up. If it isn't,
* create it. Either way, add the widget into the control's widget list
...
...
@@ -615,17 +618,16 @@ static int dapm_create_or_share_mixmux_kcontrol(struct snd_soc_dapm_widget *w,
kcontrol
=
snd_soc_cnew
(
&
w
->
kcontrol_news
[
kci
],
wlist
,
name
,
prefix
);
kcontrol
->
private_free
=
dapm_kcontrol_free
;
kfree
(
long_name
);
ret
=
snd_ctl_add
(
card
,
kcontrol
);
if
(
ret
<
0
)
{
dev_err
(
dapm
->
dev
,
"ASoC: failed to add widget %s dapm kcontrol %s: %d
\n
"
,
w
->
name
,
name
,
ret
);
kfree
(
wlist
);
kfree
(
long_name
);
return
ret
;
}
path
->
long_name
=
long_name
;
}
kcontrol
->
private_data
=
wlist
;
...
...
@@ -2105,6 +2107,14 @@ static void snd_soc_dapm_sys_remove(struct device *dev)
device_remove_file
(
dev
,
&
dev_attr_dapm_widget
);
}
static
void
dapm_free_path
(
struct
snd_soc_dapm_path
*
path
)
{
list_del
(
&
path
->
list_sink
);
list_del
(
&
path
->
list_source
);
list_del
(
&
path
->
list
);
kfree
(
path
);
}
/* free all dapm widgets and resources */
static
void
dapm_free_widgets
(
struct
snd_soc_dapm_context
*
dapm
)
{
...
...
@@ -2120,20 +2130,12 @@ static void dapm_free_widgets(struct snd_soc_dapm_context *dapm)
* While removing the path, remove reference to it from both
* source and sink widgets so that path is removed only once.
*/
list_for_each_entry_safe
(
p
,
next_p
,
&
w
->
sources
,
list_sink
)
{
list_del
(
&
p
->
list_sink
);
list_del
(
&
p
->
list_source
);
list_del
(
&
p
->
list
);
kfree
(
p
->
long_name
);
kfree
(
p
);
}
list_for_each_entry_safe
(
p
,
next_p
,
&
w
->
sinks
,
list_source
)
{
list_del
(
&
p
->
list_sink
);
list_del
(
&
p
->
list_source
);
list_del
(
&
p
->
list
);
kfree
(
p
->
long_name
);
kfree
(
p
);
}
list_for_each_entry_safe
(
p
,
next_p
,
&
w
->
sources
,
list_sink
)
dapm_free_path
(
p
);
list_for_each_entry_safe
(
p
,
next_p
,
&
w
->
sinks
,
list_source
)
dapm_free_path
(
p
);
kfree
(
w
->
kcontrols
);
kfree
(
w
->
name
);
kfree
(
w
);
...
...
@@ -2409,10 +2411,7 @@ static int snd_soc_dapm_del_route(struct snd_soc_dapm_context *dapm,
dapm_mark_dirty
(
path
->
source
,
"Route removed"
);
dapm_mark_dirty
(
path
->
sink
,
"Route removed"
);
list_del
(
&
path
->
list
);
list_del
(
&
path
->
list_sink
);
list_del
(
&
path
->
list_source
);
kfree
(
path
);
dapm_free_path
(
path
);
}
else
{
dev_warn
(
dapm
->
dev
,
"ASoC: Route %s->%s does not exist
\n
"
,
source
,
sink
);
...
...
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