Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
b909005c
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b909005c
编写于
6月 16, 2009
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'topic/intel8x0' into for-linus
* topic/intel8x0: ALSA: intel8x0 - Fix PCM position craziness
上级
7998d90a
f708eb1d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
12 addition
and
12 deletion
+12
-12
sound/pci/intel8x0.c
sound/pci/intel8x0.c
+12
-12
未找到文件。
sound/pci/intel8x0.c
浏览文件 @
b909005c
...
...
@@ -356,8 +356,6 @@ struct ichdev {
unsigned
int
position
;
unsigned
int
pos_shift
;
unsigned
int
last_pos
;
unsigned
long
last_pos_jiffies
;
unsigned
int
jiffy_to_bytes
;
int
frags
;
int
lvi
;
int
lvi_frag
;
...
...
@@ -844,7 +842,6 @@ static int snd_intel8x0_pcm_trigger(struct snd_pcm_substream *substream, int cmd
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
val
=
ICH_IOCE
|
ICH_STARTBM
;
ichdev
->
last_pos
=
ichdev
->
position
;
ichdev
->
last_pos_jiffies
=
jiffies
;
break
;
case
SNDRV_PCM_TRIGGER_SUSPEND
:
ichdev
->
suspended
=
1
;
...
...
@@ -1048,7 +1045,6 @@ static int snd_intel8x0_pcm_prepare(struct snd_pcm_substream *substream)
ichdev
->
pos_shift
=
(
runtime
->
sample_bits
>
16
)
?
2
:
1
;
}
snd_intel8x0_setup_periods
(
chip
,
ichdev
);
ichdev
->
jiffy_to_bytes
=
(
runtime
->
rate
*
4
*
ichdev
->
pos_shift
)
/
HZ
;
return
0
;
}
...
...
@@ -1073,19 +1069,23 @@ static snd_pcm_uframes_t snd_intel8x0_pcm_pointer(struct snd_pcm_substream *subs
ptr1
==
igetword
(
chip
,
ichdev
->
reg_offset
+
ichdev
->
roff_picb
))
break
;
}
while
(
timeout
--
);
ptr
=
ichdev
->
last_pos
;
if
(
ptr1
!=
0
)
{
ptr1
<<=
ichdev
->
pos_shift
;
ptr
=
ichdev
->
fragsize1
-
ptr1
;
ptr
+=
position
;
ichdev
->
last_pos
=
ptr
;
ichdev
->
last_pos_jiffies
=
jiffies
;
}
else
{
ptr1
=
jiffies
-
ichdev
->
last_pos_jiffies
;
if
(
ptr1
)
ptr1
-=
1
;
ptr
=
ichdev
->
last_pos
+
ptr1
*
ichdev
->
jiffy_to_bytes
;
ptr
%=
ichdev
->
size
;
if
(
ptr
<
ichdev
->
last_pos
)
{
unsigned
int
pos_base
,
last_base
;
pos_base
=
position
/
ichdev
->
fragsize1
;
last_base
=
ichdev
->
last_pos
/
ichdev
->
fragsize1
;
/* another sanity check; ptr1 can go back to full
* before the base position is updated
*/
if
(
pos_base
==
last_base
)
ptr
=
ichdev
->
last_pos
;
}
}
ichdev
->
last_pos
=
ptr
;
spin_unlock
(
&
chip
->
reg_lock
);
if
(
ptr
>=
ichdev
->
size
)
return
0
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录