Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
ac6d7c48
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
162
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
ac6d7c48
编写于
11年前
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/compress' into asoc-next
上级
31824e65
2a99ef0f
master
alk-4.19.24
alk-4.19.30
alk-4.19.34
alk-4.19.36
alk-4.19.43
alk-4.19.48
alk-4.19.57
ck-4.19.67
ck-4.19.81
ck-4.19.91
github/fork/deepanshu1422/fix-typo-in-comment
github/fork/haosdent/fix-typo
linux-next
v4.19.91
v4.19.90
v4.19.89
v4.19.88
v4.19.87
v4.19.86
v4.19.85
v4.19.84
v4.19.83
v4.19.82
v4.19.81
v4.19.80
v4.19.79
v4.19.78
v4.19.77
v4.19.76
v4.19.75
v4.19.74
v4.19.73
v4.19.72
v4.19.71
v4.19.70
v4.19.69
v4.19.68
v4.19.67
v4.19.66
v4.19.65
v4.19.64
v4.19.63
v4.19.62
v4.19.61
v4.19.60
v4.19.59
v4.19.58
v4.19.57
v4.19.56
v4.19.55
v4.19.54
v4.19.53
v4.19.52
v4.19.51
v4.19.50
v4.19.49
v4.19.48
v4.19.47
v4.19.46
v4.19.45
v4.19.44
v4.19.43
v4.19.42
v4.19.41
v4.19.40
v4.19.39
v4.19.38
v4.19.37
v4.19.36
v4.19.35
v4.19.34
v4.19.33
v4.19.32
v4.19.31
v4.19.30
v4.19.29
v4.19.28
v4.19.27
v4.19.26
v4.19.25
v4.19.24
v4.19.23
v4.19.22
v4.19.21
v4.19.20
v4.19.19
v4.19.18
v4.19.17
v4.19.16
v4.19.15
v4.19.14
v4.19.13
v4.19.12
v4.19.11
v4.19.10
v4.19.9
v4.19.8
v4.19.7
v4.19.6
v4.19.5
v4.19.4
v4.19.3
v4.19.2
v4.19.1
v4.19
v4.19-rc8
v4.19-rc7
v4.19-rc6
v4.19-rc5
v4.19-rc4
v4.19-rc3
v4.19-rc2
v4.19-rc1
ck-release-21
ck-release-20
ck-release-19.2
ck-release-19.1
ck-release-19
ck-release-18
ck-release-17.2
ck-release-17.1
ck-release-17
ck-release-16
ck-release-15.1
ck-release-15
ck-release-14
ck-release-13.2
ck-release-13
ck-release-12
ck-release-11
ck-release-10
ck-release-9
ck-release-7
alk-release-15
alk-release-14
alk-release-13.2
alk-release-13
alk-release-12
alk-release-11
alk-release-10
alk-release-9
alk-release-7
无相关合并请求
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
335 addition
and
18 deletion
+335
-18
include/sound/soc-dpcm.h
include/sound/soc-dpcm.h
+22
-0
include/sound/soc.h
include/sound/soc.h
+1
-0
sound/soc/soc-compress.c
sound/soc/soc-compress.c
+300
-1
sound/soc/soc-pcm.c
sound/soc/soc-pcm.c
+12
-17
未找到文件。
include/sound/soc-dpcm.h
浏览文件 @
ac6d7c48
...
...
@@ -11,6 +11,7 @@
#ifndef __LINUX_SND_SOC_DPCM_H
#define __LINUX_SND_SOC_DPCM_H
#include <linux/slab.h>
#include <linux/list.h>
#include <sound/pcm.h>
...
...
@@ -135,4 +136,25 @@ int soc_dpcm_be_digital_mute(struct snd_soc_pcm_runtime *fe, int mute);
int
soc_dpcm_debugfs_add
(
struct
snd_soc_pcm_runtime
*
rtd
);
int
soc_dpcm_runtime_update
(
struct
snd_soc_card
*
);
int
dpcm_path_get
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
struct
snd_soc_dapm_widget_list
**
list_
);
int
dpcm_process_paths
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
struct
snd_soc_dapm_widget_list
**
list
,
int
new
);
int
dpcm_be_dai_startup
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
);
int
dpcm_be_dai_shutdown
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
);
void
dpcm_be_disconnect
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
);
void
dpcm_clear_pending_state
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
);
int
dpcm_be_dai_hw_free
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
);
int
dpcm_be_dai_hw_params
(
struct
snd_soc_pcm_runtime
*
fe
,
int
tream
);
int
dpcm_be_dai_trigger
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
int
cmd
);
int
dpcm_be_dai_prepare
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
);
int
dpcm_dapm_stream_event
(
struct
snd_soc_pcm_runtime
*
fe
,
int
dir
,
int
event
);
static
inline
void
dpcm_path_put
(
struct
snd_soc_dapm_widget_list
**
list
)
{
kfree
(
*
list
);
}
#endif
This diff is collapsed.
Click to expand it.
include/sound/soc.h
浏览文件 @
ac6d7c48
...
...
@@ -1042,6 +1042,7 @@ struct snd_soc_pcm_runtime {
/* Dynamic PCM BE runtime data */
struct
snd_soc_dpcm_runtime
dpcm
[
2
];
int
fe_compr
;
long
pmdown_time
;
unsigned
char
pop_wait
:
1
;
...
...
This diff is collapsed.
Click to expand it.
sound/soc/soc-compress.c
浏览文件 @
ac6d7c48
...
...
@@ -24,6 +24,7 @@
#include <sound/compress_driver.h>
#include <sound/soc.h>
#include <sound/initval.h>
#include <sound/soc-dpcm.h>
static
int
soc_compr_open
(
struct
snd_compr_stream
*
cstream
)
{
...
...
@@ -75,6 +76,98 @@ static int soc_compr_open(struct snd_compr_stream *cstream)
return
ret
;
}
static
int
soc_compr_open_fe
(
struct
snd_compr_stream
*
cstream
)
{
struct
snd_soc_pcm_runtime
*
fe
=
cstream
->
private_data
;
struct
snd_pcm_substream
*
fe_substream
=
fe
->
pcm
->
streams
[
0
].
substream
;
struct
snd_soc_platform
*
platform
=
fe
->
platform
;
struct
snd_soc_dai
*
cpu_dai
=
fe
->
cpu_dai
;
struct
snd_soc_dai
*
codec_dai
=
fe
->
codec_dai
;
struct
snd_soc_dpcm
*
dpcm
;
struct
snd_soc_dapm_widget_list
*
list
;
int
stream
;
int
ret
=
0
;
if
(
cstream
->
direction
==
SND_COMPRESS_PLAYBACK
)
stream
=
SNDRV_PCM_STREAM_PLAYBACK
;
else
stream
=
SNDRV_PCM_STREAM_CAPTURE
;
mutex_lock_nested
(
&
fe
->
card
->
mutex
,
SND_SOC_CARD_CLASS_RUNTIME
);
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
open
)
{
ret
=
platform
->
driver
->
compr_ops
->
open
(
cstream
);
if
(
ret
<
0
)
{
pr_err
(
"compress asoc: can't open platform %s
\n
"
,
platform
->
name
);
goto
out
;
}
}
if
(
fe
->
dai_link
->
compr_ops
&&
fe
->
dai_link
->
compr_ops
->
startup
)
{
ret
=
fe
->
dai_link
->
compr_ops
->
startup
(
cstream
);
if
(
ret
<
0
)
{
pr_err
(
"compress asoc: %s startup failed
\n
"
,
fe
->
dai_link
->
name
);
goto
machine_err
;
}
}
fe
->
dpcm
[
stream
].
runtime
=
fe_substream
->
runtime
;
if
(
dpcm_path_get
(
fe
,
stream
,
&
list
)
<=
0
)
{
dev_dbg
(
fe
->
dev
,
"ASoC: %s no valid %s route
\n
"
,
fe
->
dai_link
->
name
,
stream
?
"capture"
:
"playback"
);
}
/* calculate valid and active FE <-> BE dpcms */
dpcm_process_paths
(
fe
,
stream
,
&
list
,
1
);
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_FE
;
ret
=
dpcm_be_dai_startup
(
fe
,
stream
);
if
(
ret
<
0
)
{
/* clean up all links */
list_for_each_entry
(
dpcm
,
&
fe
->
dpcm
[
stream
].
be_clients
,
list_be
)
dpcm
->
state
=
SND_SOC_DPCM_LINK_STATE_FREE
;
dpcm_be_disconnect
(
fe
,
stream
);
fe
->
dpcm
[
stream
].
runtime
=
NULL
;
goto
fe_err
;
}
dpcm_clear_pending_state
(
fe
,
stream
);
dpcm_path_put
(
&
list
);
fe
->
dpcm
[
stream
].
state
=
SND_SOC_DPCM_STATE_OPEN
;
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_NO
;
if
(
cstream
->
direction
==
SND_COMPRESS_PLAYBACK
)
{
cpu_dai
->
playback_active
++
;
codec_dai
->
playback_active
++
;
}
else
{
cpu_dai
->
capture_active
++
;
codec_dai
->
capture_active
++
;
}
cpu_dai
->
active
++
;
codec_dai
->
active
++
;
fe
->
codec
->
active
++
;
mutex_unlock
(
&
fe
->
card
->
mutex
);
return
0
;
fe_err:
if
(
fe
->
dai_link
->
compr_ops
&&
fe
->
dai_link
->
compr_ops
->
shutdown
)
fe
->
dai_link
->
compr_ops
->
shutdown
(
cstream
);
machine_err:
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
free
)
platform
->
driver
->
compr_ops
->
free
(
cstream
);
out:
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_NO
;
mutex_unlock
(
&
fe
->
card
->
mutex
);
return
ret
;
}
/*
* Power down the audio subsystem pmdown_time msecs after close is called.
* This is to ensure there are no pops or clicks in between any music tracks
...
...
@@ -164,6 +257,65 @@ static int soc_compr_free(struct snd_compr_stream *cstream)
return
0
;
}
static
int
soc_compr_free_fe
(
struct
snd_compr_stream
*
cstream
)
{
struct
snd_soc_pcm_runtime
*
fe
=
cstream
->
private_data
;
struct
snd_soc_platform
*
platform
=
fe
->
platform
;
struct
snd_soc_dai
*
cpu_dai
=
fe
->
cpu_dai
;
struct
snd_soc_dai
*
codec_dai
=
fe
->
codec_dai
;
struct
snd_soc_dpcm
*
dpcm
;
int
stream
,
ret
;
mutex_lock_nested
(
&
fe
->
card
->
mutex
,
SND_SOC_CARD_CLASS_RUNTIME
);
if
(
cstream
->
direction
==
SND_COMPRESS_PLAYBACK
)
{
stream
=
SNDRV_PCM_STREAM_PLAYBACK
;
cpu_dai
->
playback_active
--
;
codec_dai
->
playback_active
--
;
}
else
{
stream
=
SNDRV_PCM_STREAM_CAPTURE
;
cpu_dai
->
capture_active
--
;
codec_dai
->
capture_active
--
;
}
cpu_dai
->
active
--
;
codec_dai
->
active
--
;
fe
->
codec
->
active
--
;
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_FE
;
ret
=
dpcm_be_dai_hw_free
(
fe
,
stream
);
if
(
ret
<
0
)
dev_err
(
fe
->
dev
,
"compressed hw_free failed %d
\n
"
,
ret
);
ret
=
dpcm_be_dai_shutdown
(
fe
,
stream
);
/* mark FE's links ready to prune */
list_for_each_entry
(
dpcm
,
&
fe
->
dpcm
[
stream
].
be_clients
,
list_be
)
dpcm
->
state
=
SND_SOC_DPCM_LINK_STATE_FREE
;
if
(
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
dpcm_dapm_stream_event
(
fe
,
stream
,
SND_SOC_DAPM_STREAM_STOP
);
else
dpcm_dapm_stream_event
(
fe
,
stream
,
SND_SOC_DAPM_STREAM_STOP
);
fe
->
dpcm
[
stream
].
state
=
SND_SOC_DPCM_STATE_CLOSE
;
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_NO
;
dpcm_be_disconnect
(
fe
,
stream
);
fe
->
dpcm
[
stream
].
runtime
=
NULL
;
if
(
fe
->
dai_link
->
compr_ops
&&
fe
->
dai_link
->
compr_ops
->
shutdown
)
fe
->
dai_link
->
compr_ops
->
shutdown
(
cstream
);
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
free
)
platform
->
driver
->
compr_ops
->
free
(
cstream
);
mutex_unlock
(
&
fe
->
card
->
mutex
);
return
0
;
}
static
int
soc_compr_trigger
(
struct
snd_compr_stream
*
cstream
,
int
cmd
)
{
...
...
@@ -194,6 +346,59 @@ static int soc_compr_trigger(struct snd_compr_stream *cstream, int cmd)
return
ret
;
}
static
int
soc_compr_trigger_fe
(
struct
snd_compr_stream
*
cstream
,
int
cmd
)
{
struct
snd_soc_pcm_runtime
*
fe
=
cstream
->
private_data
;
struct
snd_soc_platform
*
platform
=
fe
->
platform
;
int
ret
=
0
,
stream
;
if
(
cmd
==
SND_COMPR_TRIGGER_PARTIAL_DRAIN
||
cmd
==
SND_COMPR_TRIGGER_DRAIN
)
{
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
trigger
)
return
platform
->
driver
->
compr_ops
->
trigger
(
cstream
,
cmd
);
}
if
(
cstream
->
direction
==
SND_COMPRESS_PLAYBACK
)
stream
=
SNDRV_PCM_STREAM_PLAYBACK
;
else
stream
=
SNDRV_PCM_STREAM_CAPTURE
;
mutex_lock_nested
(
&
fe
->
card
->
mutex
,
SND_SOC_CARD_CLASS_RUNTIME
);
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
trigger
)
{
ret
=
platform
->
driver
->
compr_ops
->
trigger
(
cstream
,
cmd
);
if
(
ret
<
0
)
goto
out
;
}
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_FE
;
ret
=
dpcm_be_dai_trigger
(
fe
,
stream
,
cmd
);
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_RESUME
:
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
fe
->
dpcm
[
stream
].
state
=
SND_SOC_DPCM_STATE_START
;
break
;
case
SNDRV_PCM_TRIGGER_STOP
:
case
SNDRV_PCM_TRIGGER_SUSPEND
:
fe
->
dpcm
[
stream
].
state
=
SND_SOC_DPCM_STATE_STOP
;
break
;
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
fe
->
dpcm
[
stream
].
state
=
SND_SOC_DPCM_STATE_PAUSED
;
break
;
}
out:
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_NO
;
mutex_unlock
(
&
fe
->
card
->
mutex
);
return
ret
;
}
static
int
soc_compr_set_params
(
struct
snd_compr_stream
*
cstream
,
struct
snd_compr_params
*
params
)
{
...
...
@@ -241,6 +446,64 @@ static int soc_compr_set_params(struct snd_compr_stream *cstream,
return
ret
;
}
static
int
soc_compr_set_params_fe
(
struct
snd_compr_stream
*
cstream
,
struct
snd_compr_params
*
params
)
{
struct
snd_soc_pcm_runtime
*
fe
=
cstream
->
private_data
;
struct
snd_pcm_substream
*
fe_substream
=
fe
->
pcm
->
streams
[
0
].
substream
;
struct
snd_soc_platform
*
platform
=
fe
->
platform
;
int
ret
=
0
,
stream
;
if
(
cstream
->
direction
==
SND_COMPRESS_PLAYBACK
)
stream
=
SNDRV_PCM_STREAM_PLAYBACK
;
else
stream
=
SNDRV_PCM_STREAM_CAPTURE
;
mutex_lock_nested
(
&
fe
->
card
->
mutex
,
SND_SOC_CARD_CLASS_RUNTIME
);
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
set_params
)
{
ret
=
platform
->
driver
->
compr_ops
->
set_params
(
cstream
,
params
);
if
(
ret
<
0
)
goto
out
;
}
if
(
fe
->
dai_link
->
compr_ops
&&
fe
->
dai_link
->
compr_ops
->
set_params
)
{
ret
=
fe
->
dai_link
->
compr_ops
->
set_params
(
cstream
);
if
(
ret
<
0
)
goto
out
;
}
/*
* Create an empty hw_params for the BE as the machine driver must
* fix this up to match DSP decoder and ASRC configuration.
* I.e. machine driver fixup for compressed BE is mandatory.
*/
memset
(
&
fe
->
dpcm
[
fe_substream
->
stream
].
hw_params
,
0
,
sizeof
(
struct
snd_pcm_hw_params
));
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_FE
;
ret
=
dpcm_be_dai_hw_params
(
fe
,
stream
);
if
(
ret
<
0
)
goto
out
;
ret
=
dpcm_be_dai_prepare
(
fe
,
stream
);
if
(
ret
<
0
)
goto
out
;
if
(
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
dpcm_dapm_stream_event
(
fe
,
stream
,
SND_SOC_DAPM_STREAM_START
);
else
dpcm_dapm_stream_event
(
fe
,
stream
,
SND_SOC_DAPM_STREAM_START
);
fe
->
dpcm
[
stream
].
state
=
SND_SOC_DPCM_STATE_PREPARE
;
out:
fe
->
dpcm
[
stream
].
runtime_update
=
SND_SOC_DPCM_UPDATE_NO
;
mutex_unlock
(
&
fe
->
card
->
mutex
);
return
ret
;
}
static
int
soc_compr_get_params
(
struct
snd_compr_stream
*
cstream
,
struct
snd_codec
*
params
)
{
...
...
@@ -360,6 +623,7 @@ static int soc_compr_get_metadata(struct snd_compr_stream *cstream,
return
ret
;
}
/* ASoC Compress operations */
static
struct
snd_compr_ops
soc_compr_ops
=
{
.
open
=
soc_compr_open
,
...
...
@@ -375,6 +639,21 @@ static struct snd_compr_ops soc_compr_ops = {
.
get_codec_caps
=
soc_compr_get_codec_caps
};
/* ASoC Dynamic Compress operations */
static
struct
snd_compr_ops
soc_compr_dyn_ops
=
{
.
open
=
soc_compr_open_fe
,
.
free
=
soc_compr_free_fe
,
.
set_params
=
soc_compr_set_params_fe
,
.
get_params
=
soc_compr_get_params
,
.
set_metadata
=
soc_compr_set_metadata
,
.
get_metadata
=
soc_compr_get_metadata
,
.
trigger
=
soc_compr_trigger_fe
,
.
pointer
=
soc_compr_pointer
,
.
ack
=
soc_compr_ack
,
.
get_caps
=
soc_compr_get_caps
,
.
get_codec_caps
=
soc_compr_get_codec_caps
};
/* create a new compress */
int
soc_new_compress
(
struct
snd_soc_pcm_runtime
*
rtd
,
int
num
)
{
...
...
@@ -383,6 +662,7 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
struct
snd_soc_dai
*
codec_dai
=
rtd
->
codec_dai
;
struct
snd_soc_dai
*
cpu_dai
=
rtd
->
cpu_dai
;
struct
snd_compr
*
compr
;
struct
snd_pcm
*
be_pcm
;
char
new_name
[
64
];
int
ret
=
0
,
direction
=
0
;
...
...
@@ -410,7 +690,26 @@ int soc_new_compress(struct snd_soc_pcm_runtime *rtd, int num)
ret
=
-
ENOMEM
;
goto
compr_err
;
}
memcpy
(
compr
->
ops
,
&
soc_compr_ops
,
sizeof
(
soc_compr_ops
));
if
(
rtd
->
dai_link
->
dynamic
)
{
snprintf
(
new_name
,
sizeof
(
new_name
),
"(%s)"
,
rtd
->
dai_link
->
stream_name
);
ret
=
snd_pcm_new_internal
(
rtd
->
card
->
snd_card
,
new_name
,
num
,
1
,
0
,
&
be_pcm
);
if
(
ret
<
0
)
{
dev_err
(
rtd
->
card
->
dev
,
"ASoC: can't create compressed for %s
\n
"
,
rtd
->
dai_link
->
name
);
goto
compr_err
;
}
rtd
->
pcm
=
be_pcm
;
rtd
->
fe_compr
=
1
;
be_pcm
->
streams
[
SNDRV_PCM_STREAM_PLAYBACK
].
substream
->
private_data
=
rtd
;
be_pcm
->
streams
[
SNDRV_PCM_STREAM_CAPTURE
].
substream
->
private_data
=
rtd
;
memcpy
(
compr
->
ops
,
&
soc_compr_dyn_ops
,
sizeof
(
soc_compr_dyn_ops
));
}
else
memcpy
(
compr
->
ops
,
&
soc_compr_ops
,
sizeof
(
soc_compr_ops
));
/* Add copy callback for not memory mapped DSPs */
if
(
platform
->
driver
->
compr_ops
&&
platform
->
driver
->
compr_ops
->
copy
)
...
...
This diff is collapsed.
Click to expand it.
sound/soc/soc-pcm.c
浏览文件 @
ac6d7c48
...
...
@@ -58,7 +58,7 @@ int snd_soc_set_runtime_hwparams(struct snd_pcm_substream *substream,
EXPORT_SYMBOL_GPL
(
snd_soc_set_runtime_hwparams
);
/* DPCM stream event, send event to FE and all active BEs. */
static
int
dpcm_dapm_stream_event
(
struct
snd_soc_pcm_runtime
*
fe
,
int
dir
,
int
dpcm_dapm_stream_event
(
struct
snd_soc_pcm_runtime
*
fe
,
int
dir
,
int
event
)
{
struct
snd_soc_dpcm
*
dpcm
;
...
...
@@ -885,7 +885,7 @@ static void dpcm_be_reparent(struct snd_soc_pcm_runtime *fe,
}
/* disconnect a BE and FE */
static
void
dpcm_be_disconnect
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
void
dpcm_be_disconnect
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
,
*
d
;
...
...
@@ -981,7 +981,7 @@ static int widget_in_list(struct snd_soc_dapm_widget_list *list,
return
0
;
}
static
int
dpcm_path_get
(
struct
snd_soc_pcm_runtime
*
fe
,
int
dpcm_path_get
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
struct
snd_soc_dapm_widget_list
**
list_
)
{
struct
snd_soc_dai
*
cpu_dai
=
fe
->
cpu_dai
;
...
...
@@ -1003,11 +1003,6 @@ static int dpcm_path_get(struct snd_soc_pcm_runtime *fe,
return
paths
;
}
static
inline
void
dpcm_path_put
(
struct
snd_soc_dapm_widget_list
**
list
)
{
kfree
(
*
list
);
}
static
int
dpcm_prune_paths
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
struct
snd_soc_dapm_widget_list
**
list_
)
{
...
...
@@ -1077,7 +1072,7 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
continue
;
/* don't connect if FE is not running */
if
(
!
fe
->
dpcm
[
stream
].
runtime
)
if
(
!
fe
->
dpcm
[
stream
].
runtime
&&
!
fe
->
fe_compr
)
continue
;
/* newly connected FE and BE */
...
...
@@ -1102,7 +1097,7 @@ static int dpcm_add_paths(struct snd_soc_pcm_runtime *fe, int stream,
* Find the corresponding BE DAIs that source or sink audio to this
* FE substream.
*/
static
int
dpcm_process_paths
(
struct
snd_soc_pcm_runtime
*
fe
,
int
dpcm_process_paths
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
struct
snd_soc_dapm_widget_list
**
list
,
int
new
)
{
if
(
new
)
...
...
@@ -1111,7 +1106,7 @@ static int dpcm_process_paths(struct snd_soc_pcm_runtime *fe,
return
dpcm_prune_paths
(
fe
,
stream
,
list
);
}
static
void
dpcm_clear_pending_state
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
void
dpcm_clear_pending_state
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
;
...
...
@@ -1149,7 +1144,7 @@ static void dpcm_be_dai_startup_unwind(struct snd_soc_pcm_runtime *fe,
}
}
static
int
dpcm_be_dai_startup
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
int
dpcm_be_dai_startup
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
;
int
err
,
count
=
0
;
...
...
@@ -1301,7 +1296,7 @@ static int dpcm_fe_dai_startup(struct snd_pcm_substream *fe_substream)
return
ret
;
}
static
int
dpcm_be_dai_shutdown
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
int
dpcm_be_dai_shutdown
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
;
...
...
@@ -1362,7 +1357,7 @@ static int dpcm_fe_dai_shutdown(struct snd_pcm_substream *substream)
return
0
;
}
static
int
dpcm_be_dai_hw_free
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
int
dpcm_be_dai_hw_free
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
;
...
...
@@ -1427,7 +1422,7 @@ static int dpcm_fe_dai_hw_free(struct snd_pcm_substream *substream)
return
0
;
}
static
int
dpcm_be_dai_hw_params
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
int
dpcm_be_dai_hw_params
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
;
int
ret
;
...
...
@@ -1557,7 +1552,7 @@ static int dpcm_do_trigger(struct snd_soc_dpcm *dpcm,
return
ret
;
}
static
int
dpcm_be_dai_trigger
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
int
dpcm_be_dai_trigger
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
,
int
cmd
)
{
struct
snd_soc_dpcm
*
dpcm
;
...
...
@@ -1725,7 +1720,7 @@ static int dpcm_fe_dai_trigger(struct snd_pcm_substream *substream, int cmd)
return
ret
;
}
static
int
dpcm_be_dai_prepare
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
int
dpcm_be_dai_prepare
(
struct
snd_soc_pcm_runtime
*
fe
,
int
stream
)
{
struct
snd_soc_dpcm
*
dpcm
;
int
ret
=
0
;
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部