Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
30ede1b9
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
30ede1b9
编写于
2月 01, 2010
作者:
T
Takashi Iwai
浏览文件
操作
浏览文件
下载
差异文件
Merge remote branch 'alsa/devel' into topic/misc
上级
d0d2c38e
6123637f
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
40 addition
and
6 deletion
+40
-6
sound/core/control.c
sound/core/control.c
+4
-3
sound/core/pcm_native.c
sound/core/pcm_native.c
+36
-3
未找到文件。
sound/core/control.c
浏览文件 @
30ede1b9
...
...
@@ -237,8 +237,9 @@ struct snd_kcontrol *snd_ctl_new1(const struct snd_kcontrol_new *ncontrol,
access
=
ncontrol
->
access
==
0
?
SNDRV_CTL_ELEM_ACCESS_READWRITE
:
(
ncontrol
->
access
&
(
SNDRV_CTL_ELEM_ACCESS_READWRITE
|
SNDRV_CTL_ELEM_ACCESS_INACTIVE
|
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE
|
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK
));
SNDRV_CTL_ELEM_ACCESS_TLV_READWRITE
|
SNDRV_CTL_ELEM_ACCESS_TLV_COMMAND
|
SNDRV_CTL_ELEM_ACCESS_TLV_CALLBACK
));
kctl
.
info
=
ncontrol
->
info
;
kctl
.
get
=
ncontrol
->
get
;
kctl
.
put
=
ncontrol
->
put
;
...
...
@@ -1099,7 +1100,7 @@ static int snd_ctl_tlv_ioctl(struct snd_ctl_file *file,
if
(
copy_from_user
(
&
tlv
,
_tlv
,
sizeof
(
tlv
)))
return
-
EFAULT
;
if
(
tlv
.
length
<
sizeof
(
unsigned
int
)
*
3
)
if
(
tlv
.
length
<
sizeof
(
unsigned
int
)
*
2
)
return
-
EINVAL
;
down_read
(
&
card
->
controls_rwsem
);
kctl
=
snd_ctl_find_numid
(
card
,
tlv
.
numid
);
...
...
sound/core/pcm_native.c
浏览文件 @
30ede1b9
...
...
@@ -27,6 +27,7 @@
#include <linux/pm_qos_params.h>
#include <linux/uio.h>
#include <linux/dma-mapping.h>
#include <linux/math64.h>
#include <sound/core.h>
#include <sound/control.h>
#include <sound/info.h>
...
...
@@ -366,6 +367,38 @@ static int period_to_usecs(struct snd_pcm_runtime *runtime)
return
usecs
;
}
static
int
calc_boundary
(
struct
snd_pcm_runtime
*
runtime
)
{
u_int64_t
boundary
;
boundary
=
(
u_int64_t
)
runtime
->
buffer_size
*
(
u_int64_t
)
runtime
->
period_size
;
#if BITS_PER_LONG < 64
/* try to find lowest common multiple for buffer and period */
if
(
boundary
>
LONG_MAX
-
runtime
->
buffer_size
)
{
u_int32_t
remainder
=
-
1
;
u_int32_t
divident
=
runtime
->
buffer_size
;
u_int32_t
divisor
=
runtime
->
period_size
;
while
(
remainder
)
{
remainder
=
divident
%
divisor
;
if
(
remainder
)
{
divident
=
divisor
;
divisor
=
remainder
;
}
}
boundary
=
div_u64
(
boundary
,
divisor
);
if
(
boundary
>
LONG_MAX
-
runtime
->
buffer_size
)
return
-
ERANGE
;
}
#endif
if
(
boundary
==
0
)
return
-
ERANGE
;
runtime
->
boundary
=
boundary
;
while
(
runtime
->
boundary
*
2
<=
LONG_MAX
-
runtime
->
buffer_size
)
runtime
->
boundary
*=
2
;
return
0
;
}
static
int
snd_pcm_hw_params
(
struct
snd_pcm_substream
*
substream
,
struct
snd_pcm_hw_params
*
params
)
{
...
...
@@ -441,9 +474,9 @@ static int snd_pcm_hw_params(struct snd_pcm_substream *substream,
runtime
->
stop_threshold
=
runtime
->
buffer_size
;
runtime
->
silence_threshold
=
0
;
runtime
->
silence_size
=
0
;
runtime
->
boundary
=
runtime
->
buffer_size
;
while
(
runtime
->
boundary
*
2
<=
LONG_MAX
-
runtime
->
buffer_size
)
runtime
->
boundary
*=
2
;
err
=
calc_boundary
(
runtime
)
;
if
(
err
<
0
)
goto
_error
;
snd_pcm_timer_resolution_change
(
substream
);
runtime
->
status
->
state
=
SNDRV_PCM_STATE_SETUP
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录