Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
3a2ac12f
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
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看板
提交
3a2ac12f
编写于
8月 04, 2014
作者:
M
Mark Brown
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'asoc/topic/dma' into asoc-next
上级
7196be58
e4a899d9
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
41 addition
and
2 deletion
+41
-2
drivers/dma/edma.c
drivers/dma/edma.c
+1
-0
include/linux/dmaengine.h
include/linux/dmaengine.h
+1
-0
sound/core/pcm_dmaengine.c
sound/core/pcm_dmaengine.c
+3
-1
sound/soc/soc-generic-dmaengine-pcm.c
sound/soc/soc-generic-dmaengine-pcm.c
+36
-1
未找到文件。
drivers/dma/edma.c
浏览文件 @
3a2ac12f
...
...
@@ -982,6 +982,7 @@ static void __init edma_chan_init(struct edma_cc *ecc,
#define EDMA_DMA_BUSWIDTHS (BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
BIT(DMA_SLAVE_BUSWIDTH_3_BYTES) | \
BIT(DMA_SLAVE_BUSWIDTH_4_BYTES))
static
int
edma_dma_device_slave_caps
(
struct
dma_chan
*
dchan
,
...
...
include/linux/dmaengine.h
浏览文件 @
3a2ac12f
...
...
@@ -299,6 +299,7 @@ enum dma_slave_buswidth {
DMA_SLAVE_BUSWIDTH_UNDEFINED
=
0
,
DMA_SLAVE_BUSWIDTH_1_BYTE
=
1
,
DMA_SLAVE_BUSWIDTH_2_BYTES
=
2
,
DMA_SLAVE_BUSWIDTH_3_BYTES
=
3
,
DMA_SLAVE_BUSWIDTH_4_BYTES
=
4
,
DMA_SLAVE_BUSWIDTH_8_BYTES
=
8
,
};
...
...
sound/core/pcm_dmaengine.c
浏览文件 @
3a2ac12f
...
...
@@ -65,13 +65,15 @@ int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream,
enum
dma_slave_buswidth
buswidth
;
int
bits
;
bits
=
snd_pcm_format_physical_width
(
params_format
(
params
)
);
bits
=
params_physical_width
(
params
);
if
(
bits
<
8
||
bits
>
64
)
return
-
EINVAL
;
else
if
(
bits
==
8
)
buswidth
=
DMA_SLAVE_BUSWIDTH_1_BYTE
;
else
if
(
bits
==
16
)
buswidth
=
DMA_SLAVE_BUSWIDTH_2_BYTES
;
else
if
(
bits
==
24
)
buswidth
=
DMA_SLAVE_BUSWIDTH_3_BYTES
;
else
if
(
bits
<=
32
)
buswidth
=
DMA_SLAVE_BUSWIDTH_4_BYTES
;
else
...
...
sound/soc/soc-generic-dmaengine-pcm.c
浏览文件 @
3a2ac12f
...
...
@@ -119,7 +119,10 @@ static int dmaengine_pcm_set_runtime_hwparams(struct snd_pcm_substream *substrea
struct
snd_dmaengine_dai_dma_data
*
dma_data
;
struct
dma_slave_caps
dma_caps
;
struct
snd_pcm_hardware
hw
;
int
ret
;
u32
addr_widths
=
BIT
(
DMA_SLAVE_BUSWIDTH_1_BYTE
)
|
BIT
(
DMA_SLAVE_BUSWIDTH_2_BYTES
)
|
BIT
(
DMA_SLAVE_BUSWIDTH_4_BYTES
);
int
i
,
ret
;
if
(
pcm
->
config
&&
pcm
->
config
->
pcm_hardware
)
return
snd_soc_set_runtime_hwparams
(
substream
,
...
...
@@ -146,6 +149,38 @@ static int dmaengine_pcm_set_runtime_hwparams(struct snd_pcm_substream *substrea
hw
.
info
|=
SNDRV_PCM_INFO_PAUSE
|
SNDRV_PCM_INFO_RESUME
;
if
(
dma_caps
.
residue_granularity
<=
DMA_RESIDUE_GRANULARITY_SEGMENT
)
hw
.
info
|=
SNDRV_PCM_INFO_BATCH
;
if
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
addr_widths
=
dma_caps
.
dstn_addr_widths
;
else
addr_widths
=
dma_caps
.
src_addr_widths
;
}
/*
* Prepare formats mask for valid/allowed sample types. If the dma does
* not have support for the given physical word size, it needs to be
* masked out so user space can not use the format which produces
* corrupted audio.
* In case the dma driver does not implement the slave_caps the default
* assumption is that it supports 1, 2 and 4 bytes widths.
*/
for
(
i
=
0
;
i
<=
SNDRV_PCM_FORMAT_LAST
;
i
++
)
{
int
bits
=
snd_pcm_format_physical_width
(
i
);
/* Enable only samples with DMA supported physical widths */
switch
(
bits
)
{
case
8
:
case
16
:
case
24
:
case
32
:
case
64
:
if
(
addr_widths
&
(
1
<<
(
bits
/
8
)))
hw
.
formats
|=
(
1LL
<<
i
);
break
;
default:
/* Unsupported types */
break
;
}
}
return
snd_soc_set_runtime_hwparams
(
substream
,
&
hw
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录