Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
f2777c13
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
161
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看板
提交
f2777c13
编写于
12月 16, 2015
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/firewire-update' into for-next
上级
5ce8cc48
4d2c50a0
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
46 addition
and
34 deletion
+46
-34
sound/firewire/fireworks/fireworks.h
sound/firewire/fireworks/fireworks.h
+2
-2
sound/firewire/fireworks/fireworks_midi.c
sound/firewire/fireworks/fireworks_midi.c
+12
-4
sound/firewire/fireworks/fireworks_pcm.c
sound/firewire/fireworks/fireworks_pcm.c
+20
-8
sound/firewire/fireworks/fireworks_stream.c
sound/firewire/fireworks/fireworks_stream.c
+12
-20
未找到文件。
sound/firewire/fireworks/fireworks.h
浏览文件 @
f2777c13
...
...
@@ -86,8 +86,8 @@ struct snd_efw {
struct
amdtp_stream
rx_stream
;
struct
cmp_connection
out_conn
;
struct
cmp_connection
in_conn
;
atomic_
t
capture_substreams
;
atomic_
t
playback_substreams
;
unsigned
in
t
capture_substreams
;
unsigned
in
t
playback_substreams
;
/* hardware metering parameters */
unsigned
int
phys_out
;
...
...
sound/firewire/fireworks/fireworks_midi.c
浏览文件 @
f2777c13
...
...
@@ -17,8 +17,10 @@ static int midi_capture_open(struct snd_rawmidi_substream *substream)
if
(
err
<
0
)
goto
end
;
atomic_inc
(
&
efw
->
capture_substreams
);
mutex_lock
(
&
efw
->
mutex
);
efw
->
capture_substreams
++
;
err
=
snd_efw_stream_start_duplex
(
efw
,
0
);
mutex_unlock
(
&
efw
->
mutex
);
if
(
err
<
0
)
snd_efw_stream_lock_release
(
efw
);
...
...
@@ -35,8 +37,10 @@ static int midi_playback_open(struct snd_rawmidi_substream *substream)
if
(
err
<
0
)
goto
end
;
atomic_inc
(
&
efw
->
playback_substreams
);
mutex_lock
(
&
efw
->
mutex
);
efw
->
playback_substreams
++
;
err
=
snd_efw_stream_start_duplex
(
efw
,
0
);
mutex_unlock
(
&
efw
->
mutex
);
if
(
err
<
0
)
snd_efw_stream_lock_release
(
efw
);
end:
...
...
@@ -47,8 +51,10 @@ static int midi_capture_close(struct snd_rawmidi_substream *substream)
{
struct
snd_efw
*
efw
=
substream
->
rmidi
->
private_data
;
atomic_dec
(
&
efw
->
capture_substreams
);
mutex_lock
(
&
efw
->
mutex
);
efw
->
capture_substreams
--
;
snd_efw_stream_stop_duplex
(
efw
);
mutex_unlock
(
&
efw
->
mutex
);
snd_efw_stream_lock_release
(
efw
);
return
0
;
...
...
@@ -58,8 +64,10 @@ static int midi_playback_close(struct snd_rawmidi_substream *substream)
{
struct
snd_efw
*
efw
=
substream
->
rmidi
->
private_data
;
atomic_dec
(
&
efw
->
playback_substreams
);
mutex_lock
(
&
efw
->
mutex
);
efw
->
playback_substreams
--
;
snd_efw_stream_stop_duplex
(
efw
);
mutex_unlock
(
&
efw
->
mutex
);
snd_efw_stream_lock_release
(
efw
);
return
0
;
...
...
sound/firewire/fireworks/fireworks_pcm.c
浏览文件 @
f2777c13
...
...
@@ -251,8 +251,11 @@ static int pcm_capture_hw_params(struct snd_pcm_substream *substream,
if
(
err
<
0
)
return
err
;
if
(
substream
->
runtime
->
status
->
state
==
SNDRV_PCM_STATE_OPEN
)
atomic_inc
(
&
efw
->
capture_substreams
);
if
(
substream
->
runtime
->
status
->
state
==
SNDRV_PCM_STATE_OPEN
)
{
mutex_lock
(
&
efw
->
mutex
);
efw
->
capture_substreams
++
;
mutex_unlock
(
&
efw
->
mutex
);
}
amdtp_am824_set_pcm_format
(
&
efw
->
tx_stream
,
params_format
(
hw_params
));
...
...
@@ -269,8 +272,11 @@ static int pcm_playback_hw_params(struct snd_pcm_substream *substream,
if
(
err
<
0
)
return
err
;
if
(
substream
->
runtime
->
status
->
state
==
SNDRV_PCM_STATE_OPEN
)
atomic_inc
(
&
efw
->
playback_substreams
);
if
(
substream
->
runtime
->
status
->
state
==
SNDRV_PCM_STATE_OPEN
)
{
mutex_lock
(
&
efw
->
mutex
);
efw
->
playback_substreams
++
;
mutex_unlock
(
&
efw
->
mutex
);
}
amdtp_am824_set_pcm_format
(
&
efw
->
rx_stream
,
params_format
(
hw_params
));
...
...
@@ -281,8 +287,11 @@ static int pcm_capture_hw_free(struct snd_pcm_substream *substream)
{
struct
snd_efw
*
efw
=
substream
->
private_data
;
if
(
substream
->
runtime
->
status
->
state
!=
SNDRV_PCM_STATE_OPEN
)
atomic_dec
(
&
efw
->
capture_substreams
);
if
(
substream
->
runtime
->
status
->
state
!=
SNDRV_PCM_STATE_OPEN
)
{
mutex_lock
(
&
efw
->
mutex
);
efw
->
capture_substreams
--
;
mutex_unlock
(
&
efw
->
mutex
);
}
snd_efw_stream_stop_duplex
(
efw
);
...
...
@@ -292,8 +301,11 @@ static int pcm_playback_hw_free(struct snd_pcm_substream *substream)
{
struct
snd_efw
*
efw
=
substream
->
private_data
;
if
(
substream
->
runtime
->
status
->
state
!=
SNDRV_PCM_STATE_OPEN
)
atomic_dec
(
&
efw
->
playback_substreams
);
if
(
substream
->
runtime
->
status
->
state
!=
SNDRV_PCM_STATE_OPEN
)
{
mutex_lock
(
&
efw
->
mutex
);
efw
->
playback_substreams
--
;
mutex_unlock
(
&
efw
->
mutex
);
}
snd_efw_stream_stop_duplex
(
efw
);
...
...
sound/firewire/fireworks/fireworks_stream.c
浏览文件 @
f2777c13
...
...
@@ -209,16 +209,13 @@ int snd_efw_stream_init_duplex(struct snd_efw *efw)
int
snd_efw_stream_start_duplex
(
struct
snd_efw
*
efw
,
unsigned
int
rate
)
{
struct
amdtp_stream
*
master
,
*
slave
;
atomic_t
*
slave_substreams
;
unsigned
int
slave_substreams
;
enum
cip_flags
sync_mode
;
unsigned
int
curr_rate
;
int
err
=
0
;
mutex_lock
(
&
efw
->
mutex
);
/* Need no substreams */
if
((
atomic_read
(
&
efw
->
playback_substreams
)
==
0
)
&&
(
atomic_read
(
&
efw
->
capture_substreams
)
==
0
))
if
(
efw
->
playback_substreams
==
0
&&
efw
->
capture_substreams
==
0
)
goto
end
;
err
=
get_sync_mode
(
efw
,
&
sync_mode
);
...
...
@@ -227,11 +224,11 @@ int snd_efw_stream_start_duplex(struct snd_efw *efw, unsigned int rate)
if
(
sync_mode
==
CIP_SYNC_TO_DEVICE
)
{
master
=
&
efw
->
tx_stream
;
slave
=
&
efw
->
rx_stream
;
slave_substreams
=
&
efw
->
playback_substreams
;
slave_substreams
=
efw
->
playback_substreams
;
}
else
{
master
=
&
efw
->
rx_stream
;
slave
=
&
efw
->
tx_stream
;
slave_substreams
=
&
efw
->
capture_substreams
;
slave_substreams
=
efw
->
capture_substreams
;
}
/*
...
...
@@ -277,7 +274,7 @@ int snd_efw_stream_start_duplex(struct snd_efw *efw, unsigned int rate)
}
/* start slave if needed */
if
(
atomic_read
(
slave_substreams
)
>
0
&&
!
amdtp_stream_running
(
slave
))
{
if
(
slave_substreams
>
0
&&
!
amdtp_stream_running
(
slave
))
{
err
=
start_stream
(
efw
,
slave
,
rate
);
if
(
err
<
0
)
{
dev_err
(
&
efw
->
unit
->
device
,
...
...
@@ -286,37 +283,32 @@ int snd_efw_stream_start_duplex(struct snd_efw *efw, unsigned int rate)
}
}
end:
mutex_unlock
(
&
efw
->
mutex
);
return
err
;
}
void
snd_efw_stream_stop_duplex
(
struct
snd_efw
*
efw
)
{
struct
amdtp_stream
*
master
,
*
slave
;
atomic_t
*
master_substreams
,
*
slave_substreams
;
unsigned
int
master_substreams
,
slave_substreams
;
if
(
efw
->
master
==
&
efw
->
rx_stream
)
{
slave
=
&
efw
->
tx_stream
;
master
=
&
efw
->
rx_stream
;
slave_substreams
=
&
efw
->
capture_substreams
;
master_substreams
=
&
efw
->
playback_substreams
;
slave_substreams
=
efw
->
capture_substreams
;
master_substreams
=
efw
->
playback_substreams
;
}
else
{
slave
=
&
efw
->
rx_stream
;
master
=
&
efw
->
tx_stream
;
slave_substreams
=
&
efw
->
playback_substreams
;
master_substreams
=
&
efw
->
capture_substreams
;
slave_substreams
=
efw
->
playback_substreams
;
master_substreams
=
efw
->
capture_substreams
;
}
mutex_lock
(
&
efw
->
mutex
);
if
(
atomic_read
(
slave_substreams
)
==
0
)
{
if
(
slave_substreams
==
0
)
{
stop_stream
(
efw
,
slave
);
if
(
atomic_read
(
master_substreams
)
==
0
)
if
(
master_substreams
==
0
)
stop_stream
(
efw
,
master
);
}
mutex_unlock
(
&
efw
->
mutex
);
}
void
snd_efw_stream_update_duplex
(
struct
snd_efw
*
efw
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录