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
342fd472
Commit
342fd472
authored
Mar 28, 2018
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/dapm' into asoc-next
parents
9914574d
5b2d15bb
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
58 additions
and
0 deletions
+58
-0
include/sound/soc-dapm.h
include/sound/soc-dapm.h
+16
-0
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+42
-0
No files found.
include/sound/soc-dapm.h
View file @
342fd472
...
...
@@ -269,6 +269,13 @@ struct device;
.reg = SND_SOC_NOPM, .shift = wdelay, .event = dapm_regulator_event, \
.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD, \
.on_val = wflags}
#define SND_SOC_DAPM_PINCTRL(wname, active, sleep) \
{ .id = snd_soc_dapm_pinctrl, .name = wname, \
.priv = (&(struct snd_soc_dapm_pinctrl_priv) \
{ .active_state = active, .sleep_state = sleep,}), \
.reg = SND_SOC_NOPM, .event = dapm_pinctrl_event, \
.event_flags = SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD }
/* dapm kcontrol types */
...
...
@@ -374,6 +381,8 @@ int dapm_regulator_event(struct snd_soc_dapm_widget *w,
struct
snd_kcontrol
*
kcontrol
,
int
event
);
int
dapm_clock_event
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
);
int
dapm_pinctrl_event
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
);
/* dapm controls */
int
snd_soc_dapm_put_volsw
(
struct
snd_kcontrol
*
kcontrol
,
...
...
@@ -500,6 +509,7 @@ enum snd_soc_dapm_type {
snd_soc_dapm_pre
,
/* machine specific pre widget - exec first */
snd_soc_dapm_post
,
/* machine specific post widget - exec last */
snd_soc_dapm_supply
,
/* power/clock supply */
snd_soc_dapm_pinctrl
,
/* pinctrl */
snd_soc_dapm_regulator_supply
,
/* external regulator */
snd_soc_dapm_clock_supply
,
/* external clock */
snd_soc_dapm_aif_in
,
/* audio interface input */
...
...
@@ -581,6 +591,7 @@ struct snd_soc_dapm_widget {
void
*
priv
;
/* widget specific data */
struct
regulator
*
regulator
;
/* attached regulator */
struct
pinctrl
*
pinctrl
;
/* attached pinctrl */
const
struct
snd_soc_pcm_stream
*
params
;
/* params for dai links */
unsigned
int
num_params
;
/* number of params for dai links */
unsigned
int
params_select
;
/* currently selected param for dai link */
...
...
@@ -683,6 +694,11 @@ struct snd_soc_dapm_stats {
int
neighbour_checks
;
};
struct
snd_soc_dapm_pinctrl_priv
{
const
char
*
active_state
;
const
char
*
sleep_state
;
};
/**
* snd_soc_dapm_init_bias_level() - Initialize DAPM bias level
* @dapm: The DAPM context to initialize
...
...
sound/soc/soc-dapm.c
View file @
342fd472
...
...
@@ -35,6 +35,7 @@
#include <linux/debugfs.h>
#include <linux/pm_runtime.h>
#include <linux/regulator/consumer.h>
#include <linux/pinctrl/consumer.h>
#include <linux/clk.h>
#include <linux/slab.h>
#include <sound/core.h>
...
...
@@ -72,6 +73,7 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
static
int
dapm_up_seq
[]
=
{
[
snd_soc_dapm_pre
]
=
0
,
[
snd_soc_dapm_regulator_supply
]
=
1
,
[
snd_soc_dapm_pinctrl
]
=
1
,
[
snd_soc_dapm_clock_supply
]
=
1
,
[
snd_soc_dapm_supply
]
=
2
,
[
snd_soc_dapm_micbias
]
=
3
,
...
...
@@ -121,6 +123,7 @@ static int dapm_down_seq[] = {
[
snd_soc_dapm_dai_link
]
=
11
,
[
snd_soc_dapm_supply
]
=
12
,
[
snd_soc_dapm_clock_supply
]
=
13
,
[
snd_soc_dapm_pinctrl
]
=
13
,
[
snd_soc_dapm_regulator_supply
]
=
13
,
[
snd_soc_dapm_post
]
=
14
,
};
...
...
@@ -1289,6 +1292,31 @@ int dapm_regulator_event(struct snd_soc_dapm_widget *w,
}
EXPORT_SYMBOL_GPL
(
dapm_regulator_event
);
/*
* Handler for pinctrl widget.
*/
int
dapm_pinctrl_event
(
struct
snd_soc_dapm_widget
*
w
,
struct
snd_kcontrol
*
kcontrol
,
int
event
)
{
struct
snd_soc_dapm_pinctrl_priv
*
priv
=
w
->
priv
;
struct
pinctrl
*
p
=
w
->
pinctrl
;
struct
pinctrl_state
*
s
;
if
(
!
p
||
!
priv
)
return
-
EIO
;
if
(
SND_SOC_DAPM_EVENT_ON
(
event
))
s
=
pinctrl_lookup_state
(
p
,
priv
->
active_state
);
else
s
=
pinctrl_lookup_state
(
p
,
priv
->
sleep_state
);
if
(
IS_ERR
(
s
))
return
PTR_ERR
(
s
);
return
pinctrl_select_state
(
p
,
s
);
}
EXPORT_SYMBOL_GPL
(
dapm_pinctrl_event
);
/*
* Handler for clock supply widget.
*/
...
...
@@ -1902,6 +1930,7 @@ static int dapm_power_widgets(struct snd_soc_card *card, int event)
break
;
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_regulator_supply
:
case
snd_soc_dapm_pinctrl
:
case
snd_soc_dapm_clock_supply
:
case
snd_soc_dapm_micbias
:
if
(
d
->
target_bias_level
<
SND_SOC_BIAS_STANDBY
)
...
...
@@ -2315,6 +2344,7 @@ static ssize_t dapm_widget_show_component(struct snd_soc_component *cmpnt,
case
snd_soc_dapm_mixer_named_ctl
:
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_regulator_supply
:
case
snd_soc_dapm_pinctrl
:
case
snd_soc_dapm_clock_supply
:
if
(
w
->
name
)
count
+=
sprintf
(
buf
+
count
,
"%s: %s
\n
"
,
...
...
@@ -3464,6 +3494,17 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
w
->
name
,
ret
);
}
break
;
case
snd_soc_dapm_pinctrl
:
w
->
pinctrl
=
devm_pinctrl_get
(
dapm
->
dev
);
if
(
IS_ERR_OR_NULL
(
w
->
pinctrl
))
{
ret
=
PTR_ERR
(
w
->
pinctrl
);
if
(
ret
==
-
EPROBE_DEFER
)
return
ERR_PTR
(
ret
);
dev_err
(
dapm
->
dev
,
"ASoC: Failed to request %s: %d
\n
"
,
w
->
name
,
ret
);
return
NULL
;
}
break
;
case
snd_soc_dapm_clock_supply
:
#ifdef CONFIG_CLKDEV_LOOKUP
w
->
clk
=
devm_clk_get
(
dapm
->
dev
,
w
->
name
);
...
...
@@ -3543,6 +3584,7 @@ snd_soc_dapm_new_control_unlocked(struct snd_soc_dapm_context *dapm,
break
;
case
snd_soc_dapm_supply
:
case
snd_soc_dapm_regulator_supply
:
case
snd_soc_dapm_pinctrl
:
case
snd_soc_dapm_clock_supply
:
case
snd_soc_dapm_kcontrol
:
w
->
is_supply
=
1
;
...
...
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