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
a18a31a1
Commit
a18a31a1
authored
Jan 10, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/fix/core' into tmp
parents
ae1abb0c
d3bf1561
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
39 additions
and
7 deletions
+39
-7
include/sound/soc.h
include/sound/soc.h
+6
-4
sound/soc/soc-core.c
sound/soc/soc-core.c
+32
-3
sound/soc/soc-pcm.c
sound/soc/soc-pcm.c
+1
-0
No files found.
include/sound/soc.h
View file @
a18a31a1
...
...
@@ -58,8 +58,9 @@
.info = snd_soc_info_volsw_range, .get = snd_soc_get_volsw_range, \
.put = snd_soc_put_volsw_range, \
.private_value = (unsigned long)&(struct soc_mixer_control) \
{.reg = xreg, .shift = xshift, .min = xmin,\
.max = xmax, .platform_max = xmax, .invert = xinvert} }
{.reg = xreg, .rreg = xreg, .shift = xshift, \
.rshift = xshift, .min = xmin, .max = xmax, \
.platform_max = xmax, .invert = xinvert} }
#define SOC_SINGLE_TLV(xname, reg, shift, max, invert, tlv_array) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \
.access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\
...
...
@@ -88,8 +89,9 @@
.info = snd_soc_info_volsw_range, \
.get = snd_soc_get_volsw_range, .put = snd_soc_put_volsw_range, \
.private_value = (unsigned long)&(struct soc_mixer_control) \
{.reg = xreg, .shift = xshift, .min = xmin,\
.max = xmax, .platform_max = xmax, .invert = xinvert} }
{.reg = xreg, .rreg = xreg, .shift = xshift, \
.rshift = xshift, .min = xmin, .max = xmax, \
.platform_max = xmax, .invert = xinvert} }
#define SOC_DOUBLE(xname, reg, shift_left, shift_right, max, invert) \
{ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname),\
.info = snd_soc_info_volsw, .get = snd_soc_get_volsw, \
...
...
sound/soc/soc-core.c
View file @
a18a31a1
...
...
@@ -1255,6 +1255,8 @@ static int soc_post_component_init(struct snd_soc_card *card,
INIT_LIST_HEAD
(
&
rtd
->
dpcm
[
SNDRV_PCM_STREAM_CAPTURE
].
fe_clients
);
ret
=
device_add
(
rtd
->
dev
);
if
(
ret
<
0
)
{
/* calling put_device() here to free the rtd->dev */
put_device
(
rtd
->
dev
);
dev_err
(
card
->
dev
,
"ASoC: failed to register runtime device: %d
\n
"
,
ret
);
return
ret
;
...
...
@@ -1554,7 +1556,7 @@ static void soc_remove_aux_dev(struct snd_soc_card *card, int num)
/* unregister the rtd device */
if
(
rtd
->
dev_registered
)
{
device_remove_file
(
rtd
->
dev
,
&
dev_attr_codec_reg
);
device_
del
(
rtd
->
dev
);
device_
unregister
(
rtd
->
dev
);
rtd
->
dev_registered
=
0
;
}
...
...
@@ -2917,7 +2919,7 @@ int snd_soc_info_volsw_range(struct snd_kcontrol *kcontrol,
platform_max
=
mc
->
platform_max
;
uinfo
->
type
=
SNDRV_CTL_ELEM_TYPE_INTEGER
;
uinfo
->
count
=
1
;
uinfo
->
count
=
snd_soc_volsw_is_stereo
(
mc
)
?
2
:
1
;
uinfo
->
value
.
integer
.
min
=
0
;
uinfo
->
value
.
integer
.
max
=
platform_max
-
min
;
...
...
@@ -2941,12 +2943,14 @@ int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
(
struct
soc_mixer_control
*
)
kcontrol
->
private_value
;
struct
snd_soc_codec
*
codec
=
snd_kcontrol_chip
(
kcontrol
);
unsigned
int
reg
=
mc
->
reg
;
unsigned
int
rreg
=
mc
->
rreg
;
unsigned
int
shift
=
mc
->
shift
;
int
min
=
mc
->
min
;
int
max
=
mc
->
max
;
unsigned
int
mask
=
(
1
<<
fls
(
max
))
-
1
;
unsigned
int
invert
=
mc
->
invert
;
unsigned
int
val
,
val_mask
;
int
ret
;
val
=
((
ucontrol
->
value
.
integer
.
value
[
0
]
+
min
)
&
mask
);
if
(
invert
)
...
...
@@ -2954,7 +2958,21 @@ int snd_soc_put_volsw_range(struct snd_kcontrol *kcontrol,
val_mask
=
mask
<<
shift
;
val
=
val
<<
shift
;
return
snd_soc_update_bits_locked
(
codec
,
reg
,
val_mask
,
val
);
ret
=
snd_soc_update_bits_locked
(
codec
,
reg
,
val_mask
,
val
);
if
(
ret
!=
0
)
return
ret
;
if
(
snd_soc_volsw_is_stereo
(
mc
))
{
val
=
((
ucontrol
->
value
.
integer
.
value
[
1
]
+
min
)
&
mask
);
if
(
invert
)
val
=
max
-
val
;
val_mask
=
mask
<<
shift
;
val
=
val
<<
shift
;
ret
=
snd_soc_update_bits_locked
(
codec
,
rreg
,
val_mask
,
val
);
}
return
ret
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_put_volsw_range
);
...
...
@@ -2974,6 +2992,7 @@ int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
(
struct
soc_mixer_control
*
)
kcontrol
->
private_value
;
struct
snd_soc_codec
*
codec
=
snd_kcontrol_chip
(
kcontrol
);
unsigned
int
reg
=
mc
->
reg
;
unsigned
int
rreg
=
mc
->
rreg
;
unsigned
int
shift
=
mc
->
shift
;
int
min
=
mc
->
min
;
int
max
=
mc
->
max
;
...
...
@@ -2988,6 +3007,16 @@ int snd_soc_get_volsw_range(struct snd_kcontrol *kcontrol,
ucontrol
->
value
.
integer
.
value
[
0
]
=
ucontrol
->
value
.
integer
.
value
[
0
]
-
min
;
if
(
snd_soc_volsw_is_stereo
(
mc
))
{
ucontrol
->
value
.
integer
.
value
[
1
]
=
(
snd_soc_read
(
codec
,
rreg
)
>>
shift
)
&
mask
;
if
(
invert
)
ucontrol
->
value
.
integer
.
value
[
1
]
=
max
-
ucontrol
->
value
.
integer
.
value
[
1
];
ucontrol
->
value
.
integer
.
value
[
1
]
=
ucontrol
->
value
.
integer
.
value
[
1
]
-
min
;
}
return
0
;
}
EXPORT_SYMBOL_GPL
(
snd_soc_get_volsw_range
);
...
...
sound/soc/soc-pcm.c
View file @
a18a31a1
...
...
@@ -1243,6 +1243,7 @@ static int dpcm_be_dai_hw_free(struct snd_soc_pcm_runtime *fe, int stream)
if
((
be
->
dpcm
[
stream
].
state
!=
SND_SOC_DPCM_STATE_HW_PARAMS
)
&&
(
be
->
dpcm
[
stream
].
state
!=
SND_SOC_DPCM_STATE_PREPARE
)
&&
(
be
->
dpcm
[
stream
].
state
!=
SND_SOC_DPCM_STATE_HW_FREE
)
&&
(
be
->
dpcm
[
stream
].
state
!=
SND_SOC_DPCM_STATE_PAUSED
)
&&
(
be
->
dpcm
[
stream
].
state
!=
SND_SOC_DPCM_STATE_STOP
))
continue
;
...
...
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