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
45d39cbf
Commit
45d39cbf
authored
Feb 23, 2014
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/fix/dapm' into asoc-linus
parents
d9fb50e4
11391100
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
134 additions
and
44 deletions
+134
-44
drivers/extcon/extcon-arizona.c
drivers/extcon/extcon-arizona.c
+0
-12
drivers/input/misc/arizona-haptics.c
drivers/input/misc/arizona-haptics.c
+0
-19
include/sound/soc-dapm.h
include/sound/soc-dapm.h
+8
-0
sound/soc/soc-dapm.c
sound/soc/soc-dapm.c
+126
-13
No files found.
drivers/extcon/extcon-arizona.c
View file @
45d39cbf
...
...
@@ -222,27 +222,19 @@ static void arizona_extcon_pulse_micbias(struct arizona_extcon_info *info)
struct
snd_soc_dapm_context
*
dapm
=
arizona
->
dapm
;
int
ret
;
mutex_lock
(
&
dapm
->
card
->
dapm_mutex
);
ret
=
snd_soc_dapm_force_enable_pin
(
dapm
,
widget
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to enable %s: %d
\n
"
,
widget
,
ret
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
snd_soc_dapm_sync
(
dapm
);
if
(
!
arizona
->
pdata
.
micd_force_micbias
)
{
mutex_lock
(
&
dapm
->
card
->
dapm_mutex
);
ret
=
snd_soc_dapm_disable_pin
(
arizona
->
dapm
,
widget
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to disable %s: %d
\n
"
,
widget
,
ret
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
snd_soc_dapm_sync
(
dapm
);
}
}
...
...
@@ -304,16 +296,12 @@ static void arizona_stop_mic(struct arizona_extcon_info *info)
ARIZONA_MICD_ENA
,
0
,
&
change
);
mutex_lock
(
&
dapm
->
card
->
dapm_mutex
);
ret
=
snd_soc_dapm_disable_pin
(
dapm
,
widget
);
if
(
ret
!=
0
)
dev_warn
(
arizona
->
dev
,
"Failed to disable %s: %d
\n
"
,
widget
,
ret
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
snd_soc_dapm_sync
(
dapm
);
if
(
info
->
micd_reva
)
{
...
...
drivers/input/misc/arizona-haptics.c
View file @
45d39cbf
...
...
@@ -37,7 +37,6 @@ static void arizona_haptics_work(struct work_struct *work)
struct
arizona_haptics
,
work
);
struct
arizona
*
arizona
=
haptics
->
arizona
;
struct
mutex
*
dapm_mutex
=
&
arizona
->
dapm
->
card
->
dapm_mutex
;
int
ret
;
if
(
!
haptics
->
arizona
->
dapm
)
{
...
...
@@ -67,13 +66,10 @@ static void arizona_haptics_work(struct work_struct *work)
return
;
}
mutex_lock_nested
(
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
snd_soc_dapm_enable_pin
(
arizona
->
dapm
,
"HAPTICS"
);
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to start HAPTICS: %d
\n
"
,
ret
);
mutex_unlock
(
dapm_mutex
);
return
;
}
...
...
@@ -81,21 +77,14 @@ static void arizona_haptics_work(struct work_struct *work)
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to sync DAPM: %d
\n
"
,
ret
);
mutex_unlock
(
dapm_mutex
);
return
;
}
mutex_unlock
(
dapm_mutex
);
}
else
{
/* This disable sequence will be a noop if already enabled */
mutex_lock_nested
(
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
snd_soc_dapm_disable_pin
(
arizona
->
dapm
,
"HAPTICS"
);
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to disable HAPTICS: %d
\n
"
,
ret
);
mutex_unlock
(
dapm_mutex
);
return
;
}
...
...
@@ -103,12 +92,9 @@ static void arizona_haptics_work(struct work_struct *work)
if
(
ret
!=
0
)
{
dev_err
(
arizona
->
dev
,
"Failed to sync DAPM: %d
\n
"
,
ret
);
mutex_unlock
(
dapm_mutex
);
return
;
}
mutex_unlock
(
dapm_mutex
);
ret
=
regmap_update_bits
(
arizona
->
regmap
,
ARIZONA_HAPTICS_CONTROL_1
,
ARIZONA_HAP_CTRL_MASK
,
...
...
@@ -155,16 +141,11 @@ static int arizona_haptics_play(struct input_dev *input, void *data,
static
void
arizona_haptics_close
(
struct
input_dev
*
input
)
{
struct
arizona_haptics
*
haptics
=
input_get_drvdata
(
input
);
struct
mutex
*
dapm_mutex
=
&
haptics
->
arizona
->
dapm
->
card
->
dapm_mutex
;
cancel_work_sync
(
&
haptics
->
work
);
mutex_lock_nested
(
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
if
(
haptics
->
arizona
->
dapm
)
snd_soc_dapm_disable_pin
(
haptics
->
arizona
->
dapm
,
"HAPTICS"
);
mutex_unlock
(
dapm_mutex
);
}
static
int
arizona_haptics_probe
(
struct
platform_device
*
pdev
)
...
...
include/sound/soc-dapm.h
View file @
45d39cbf
...
...
@@ -449,14 +449,22 @@ void snd_soc_dapm_debugfs_init(struct snd_soc_dapm_context *dapm,
/* dapm audio pin control and status */
int
snd_soc_dapm_enable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_enable_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_disable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_disable_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_nc_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_nc_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_get_pin_status
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_sync
(
struct
snd_soc_dapm_context
*
dapm
);
int
snd_soc_dapm_force_enable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_force_enable_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
int
snd_soc_dapm_ignore_suspend
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
);
void
snd_soc_dapm_auto_nc_codec_pins
(
struct
snd_soc_codec
*
codec
);
...
...
sound/soc/soc-dapm.c
View file @
45d39cbf
...
...
@@ -1218,7 +1218,7 @@ int dapm_regulator_event(struct snd_soc_dapm_widget *w,
ret
=
regulator_allow_bypass
(
w
->
regulator
,
false
);
if
(
ret
!=
0
)
dev_warn
(
w
->
dapm
->
dev
,
"ASoC: Failed to bypass %s: %d
\n
"
,
"ASoC: Failed to
un
bypass %s: %d
\n
"
,
w
->
name
,
ret
);
}
...
...
@@ -1228,7 +1228,7 @@ int dapm_regulator_event(struct snd_soc_dapm_widget *w,
ret
=
regulator_allow_bypass
(
w
->
regulator
,
true
);
if
(
ret
!=
0
)
dev_warn
(
w
->
dapm
->
dev
,
"ASoC: Failed to
un
bypass %s: %d
\n
"
,
"ASoC: Failed to bypass %s: %d
\n
"
,
w
->
name
,
ret
);
}
...
...
@@ -3210,15 +3210,11 @@ int snd_soc_dapm_put_pin_switch(struct snd_kcontrol *kcontrol,
struct
snd_soc_card
*
card
=
snd_kcontrol_chip
(
kcontrol
);
const
char
*
pin
=
(
const
char
*
)
kcontrol
->
private_value
;
mutex_lock_nested
(
&
card
->
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
if
(
ucontrol
->
value
.
integer
.
value
[
0
])
snd_soc_dapm_enable_pin
(
&
card
->
dapm
,
pin
);
else
snd_soc_dapm_disable_pin
(
&
card
->
dapm
,
pin
);
mutex_unlock
(
&
card
->
dapm_mutex
);
snd_soc_dapm_sync
(
&
card
->
dapm
);
return
0
;
}
...
...
@@ -3248,7 +3244,7 @@ snd_soc_dapm_new_control(struct snd_soc_dapm_context *dapm,
ret
=
regulator_allow_bypass
(
w
->
regulator
,
true
);
if
(
ret
!=
0
)
dev_warn
(
w
->
dapm
->
dev
,
"ASoC: Failed to
un
bypass %s: %d
\n
"
,
"ASoC: Failed to bypass %s: %d
\n
"
,
w
->
name
,
ret
);
}
break
;
...
...
@@ -3766,6 +3762,26 @@ void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
mutex_unlock
(
&
card
->
dapm_mutex
);
}
/**
* snd_soc_dapm_enable_pin_unlocked - enable pin.
* @dapm: DAPM context
* @pin: pin name
*
* Enables input/output pin and its parents or children widgets iff there is
* a valid audio route and active audio stream.
*
* Requires external locking.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_enable_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
return
snd_soc_dapm_set_pin
(
dapm
,
pin
,
1
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_enable_pin_unlocked
);
/**
* snd_soc_dapm_enable_pin - enable pin.
* @dapm: DAPM context
...
...
@@ -3773,17 +3789,26 @@ void snd_soc_dapm_stream_event(struct snd_soc_pcm_runtime *rtd, int stream,
*
* Enables input/output pin and its parents or children widgets iff there is
* a valid audio route and active audio stream.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_enable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
return
snd_soc_dapm_set_pin
(
dapm
,
pin
,
1
);
int
ret
;
mutex_lock_nested
(
&
dapm
->
card
->
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
snd_soc_dapm_set_pin
(
dapm
,
pin
,
1
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_enable_pin
);
/**
* snd_soc_dapm_force_enable_pin - force a pin to be enabled
* snd_soc_dapm_force_enable_pin
_unlocked
- force a pin to be enabled
* @dapm: DAPM context
* @pin: pin name
*
...
...
@@ -3791,11 +3816,13 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_enable_pin);
* intended for use with microphone bias supplies used in microphone
* jack detection.
*
* Requires external locking.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_force_enable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
int
snd_soc_dapm_force_enable_pin
_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
struct
snd_soc_dapm_widget
*
w
=
dapm_find_widget
(
dapm
,
pin
,
true
);
...
...
@@ -3811,24 +3838,102 @@ int snd_soc_dapm_force_enable_pin(struct snd_soc_dapm_context *dapm,
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_force_enable_pin_unlocked
);
/**
* snd_soc_dapm_force_enable_pin - force a pin to be enabled
* @dapm: DAPM context
* @pin: pin name
*
* Enables input/output pin regardless of any other state. This is
* intended for use with microphone bias supplies used in microphone
* jack detection.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_force_enable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
int
ret
;
mutex_lock_nested
(
&
dapm
->
card
->
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
snd_soc_dapm_force_enable_pin_unlocked
(
dapm
,
pin
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_force_enable_pin
);
/**
* snd_soc_dapm_disable_pin_unlocked - disable pin.
* @dapm: DAPM context
* @pin: pin name
*
* Disables input/output pin and its parents or children widgets.
*
* Requires external locking.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_disable_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
return
snd_soc_dapm_set_pin
(
dapm
,
pin
,
0
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_disable_pin_unlocked
);
/**
* snd_soc_dapm_disable_pin - disable pin.
* @dapm: DAPM context
* @pin: pin name
*
* Disables input/output pin and its parents or children widgets.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_disable_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
return
snd_soc_dapm_set_pin
(
dapm
,
pin
,
0
);
int
ret
;
mutex_lock_nested
(
&
dapm
->
card
->
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
snd_soc_dapm_set_pin
(
dapm
,
pin
,
0
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_disable_pin
);
/**
* snd_soc_dapm_nc_pin_unlocked - permanently disable pin.
* @dapm: DAPM context
* @pin: pin name
*
* Marks the specified pin as being not connected, disabling it along
* any parent or child widgets. At present this is identical to
* snd_soc_dapm_disable_pin() but in future it will be extended to do
* additional things such as disabling controls which only affect
* paths through the pin.
*
* Requires external locking.
*
* NOTE: snd_soc_dapm_sync() needs to be called after this for DAPM to
* do any widget power switching.
*/
int
snd_soc_dapm_nc_pin_unlocked
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
return
snd_soc_dapm_set_pin
(
dapm
,
pin
,
0
);
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_nc_pin_unlocked
);
/**
* snd_soc_dapm_nc_pin - permanently disable pin.
* @dapm: DAPM context
...
...
@@ -3845,7 +3950,15 @@ EXPORT_SYMBOL_GPL(snd_soc_dapm_disable_pin);
*/
int
snd_soc_dapm_nc_pin
(
struct
snd_soc_dapm_context
*
dapm
,
const
char
*
pin
)
{
return
snd_soc_dapm_set_pin
(
dapm
,
pin
,
0
);
int
ret
;
mutex_lock_nested
(
&
dapm
->
card
->
dapm_mutex
,
SND_SOC_DAPM_CLASS_RUNTIME
);
ret
=
snd_soc_dapm_set_pin
(
dapm
,
pin
,
0
);
mutex_unlock
(
&
dapm
->
card
->
dapm_mutex
);
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_dapm_nc_pin
);
...
...
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