Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
3a2ac12f
Commit
3a2ac12f
authored
Aug 04, 2014
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/dma' into asoc-next
parents
7196be58
e4a899d9
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
41 additions
and
2 deletions
+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
No files found.
drivers/dma/edma.c
View file @
3a2ac12f
...
@@ -982,6 +982,7 @@ static void __init edma_chan_init(struct edma_cc *ecc,
...
@@ -982,6 +982,7 @@ static void __init edma_chan_init(struct edma_cc *ecc,
#define EDMA_DMA_BUSWIDTHS (BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
#define EDMA_DMA_BUSWIDTHS (BIT(DMA_SLAVE_BUSWIDTH_1_BYTE) | \
BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
BIT(DMA_SLAVE_BUSWIDTH_2_BYTES) | \
BIT(DMA_SLAVE_BUSWIDTH_3_BYTES) | \
BIT(DMA_SLAVE_BUSWIDTH_4_BYTES))
BIT(DMA_SLAVE_BUSWIDTH_4_BYTES))
static
int
edma_dma_device_slave_caps
(
struct
dma_chan
*
dchan
,
static
int
edma_dma_device_slave_caps
(
struct
dma_chan
*
dchan
,
...
...
include/linux/dmaengine.h
View file @
3a2ac12f
...
@@ -299,6 +299,7 @@ enum dma_slave_buswidth {
...
@@ -299,6 +299,7 @@ enum dma_slave_buswidth {
DMA_SLAVE_BUSWIDTH_UNDEFINED
=
0
,
DMA_SLAVE_BUSWIDTH_UNDEFINED
=
0
,
DMA_SLAVE_BUSWIDTH_1_BYTE
=
1
,
DMA_SLAVE_BUSWIDTH_1_BYTE
=
1
,
DMA_SLAVE_BUSWIDTH_2_BYTES
=
2
,
DMA_SLAVE_BUSWIDTH_2_BYTES
=
2
,
DMA_SLAVE_BUSWIDTH_3_BYTES
=
3
,
DMA_SLAVE_BUSWIDTH_4_BYTES
=
4
,
DMA_SLAVE_BUSWIDTH_4_BYTES
=
4
,
DMA_SLAVE_BUSWIDTH_8_BYTES
=
8
,
DMA_SLAVE_BUSWIDTH_8_BYTES
=
8
,
};
};
...
...
sound/core/pcm_dmaengine.c
View file @
3a2ac12f
...
@@ -65,13 +65,15 @@ int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream,
...
@@ -65,13 +65,15 @@ int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream,
enum
dma_slave_buswidth
buswidth
;
enum
dma_slave_buswidth
buswidth
;
int
bits
;
int
bits
;
bits
=
snd_pcm_format_physical_width
(
params_format
(
params
)
);
bits
=
params_physical_width
(
params
);
if
(
bits
<
8
||
bits
>
64
)
if
(
bits
<
8
||
bits
>
64
)
return
-
EINVAL
;
return
-
EINVAL
;
else
if
(
bits
==
8
)
else
if
(
bits
==
8
)
buswidth
=
DMA_SLAVE_BUSWIDTH_1_BYTE
;
buswidth
=
DMA_SLAVE_BUSWIDTH_1_BYTE
;
else
if
(
bits
==
16
)
else
if
(
bits
==
16
)
buswidth
=
DMA_SLAVE_BUSWIDTH_2_BYTES
;
buswidth
=
DMA_SLAVE_BUSWIDTH_2_BYTES
;
else
if
(
bits
==
24
)
buswidth
=
DMA_SLAVE_BUSWIDTH_3_BYTES
;
else
if
(
bits
<=
32
)
else
if
(
bits
<=
32
)
buswidth
=
DMA_SLAVE_BUSWIDTH_4_BYTES
;
buswidth
=
DMA_SLAVE_BUSWIDTH_4_BYTES
;
else
else
...
...
sound/soc/soc-generic-dmaengine-pcm.c
View file @
3a2ac12f
...
@@ -119,7 +119,10 @@ static int dmaengine_pcm_set_runtime_hwparams(struct snd_pcm_substream *substrea
...
@@ -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
snd_dmaengine_dai_dma_data
*
dma_data
;
struct
dma_slave_caps
dma_caps
;
struct
dma_slave_caps
dma_caps
;
struct
snd_pcm_hardware
hw
;
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
)
if
(
pcm
->
config
&&
pcm
->
config
->
pcm_hardware
)
return
snd_soc_set_runtime_hwparams
(
substream
,
return
snd_soc_set_runtime_hwparams
(
substream
,
...
@@ -146,6 +149,38 @@ static int dmaengine_pcm_set_runtime_hwparams(struct snd_pcm_substream *substrea
...
@@ -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
;
hw
.
info
|=
SNDRV_PCM_INFO_PAUSE
|
SNDRV_PCM_INFO_RESUME
;
if
(
dma_caps
.
residue_granularity
<=
DMA_RESIDUE_GRANULARITY_SEGMENT
)
if
(
dma_caps
.
residue_granularity
<=
DMA_RESIDUE_GRANULARITY_SEGMENT
)
hw
.
info
|=
SNDRV_PCM_INFO_BATCH
;
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
);
return
snd_soc_set_runtime_hwparams
(
substream
,
&
hw
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment