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
c7bb6d80
Commit
c7bb6d80
authored
Feb 19, 2017
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/dmaengine' into asoc-next
parents
4ae8be8e
9bfa24e9
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
30 additions
and
3 deletions
+30
-3
include/sound/dmaengine_pcm.h
include/sound/dmaengine_pcm.h
+6
-0
sound/soc/samsung/dmaengine.c
sound/soc/samsung/dmaengine.c
+6
-2
sound/soc/samsung/i2s.c
sound/soc/samsung/i2s.c
+3
-0
sound/soc/samsung/s3c2412-i2s.c
sound/soc/samsung/s3c2412-i2s.c
+2
-0
sound/soc/samsung/s3c24xx-i2s.c
sound/soc/samsung/s3c24xx-i2s.c
+2
-0
sound/soc/soc-generic-dmaengine-pcm.c
sound/soc/soc-generic-dmaengine-pcm.c
+11
-1
No files found.
include/sound/dmaengine_pcm.h
View file @
c7bb6d80
...
@@ -71,6 +71,7 @@ struct dma_chan *snd_dmaengine_pcm_get_chan(struct snd_pcm_substream *substream)
...
@@ -71,6 +71,7 @@ struct dma_chan *snd_dmaengine_pcm_get_chan(struct snd_pcm_substream *substream)
* @slave_id: Slave requester id for the DMA channel.
* @slave_id: Slave requester id for the DMA channel.
* @filter_data: Custom DMA channel filter data, this will usually be used when
* @filter_data: Custom DMA channel filter data, this will usually be used when
* requesting the DMA channel.
* requesting the DMA channel.
* @chan_name: Custom channel name to use when requesting DMA channel.
* @fifo_size: FIFO size of the DAI controller in bytes
* @fifo_size: FIFO size of the DAI controller in bytes
* @flags: PCM_DAI flags, only SND_DMAENGINE_PCM_DAI_FLAG_PACK for now
* @flags: PCM_DAI flags, only SND_DMAENGINE_PCM_DAI_FLAG_PACK for now
*/
*/
...
@@ -80,6 +81,7 @@ struct snd_dmaengine_dai_dma_data {
...
@@ -80,6 +81,7 @@ struct snd_dmaengine_dai_dma_data {
u32
maxburst
;
u32
maxburst
;
unsigned
int
slave_id
;
unsigned
int
slave_id
;
void
*
filter_data
;
void
*
filter_data
;
const
char
*
chan_name
;
unsigned
int
fifo_size
;
unsigned
int
fifo_size
;
unsigned
int
flags
;
unsigned
int
flags
;
};
};
...
@@ -105,6 +107,10 @@ void snd_dmaengine_pcm_set_config_from_dai_data(
...
@@ -105,6 +107,10 @@ void snd_dmaengine_pcm_set_config_from_dai_data(
* playback.
* playback.
*/
*/
#define SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX BIT(3)
#define SND_DMAENGINE_PCM_FLAG_HALF_DUPLEX BIT(3)
/*
* The PCM streams have custom channel names specified.
*/
#define SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME BIT(4)
/**
/**
* struct snd_dmaengine_pcm_config - Configuration data for dmaengine based PCM
* struct snd_dmaengine_pcm_config - Configuration data for dmaengine based PCM
...
...
sound/soc/samsung/dmaengine.c
View file @
c7bb6d80
...
@@ -37,8 +37,12 @@ int samsung_asoc_dma_platform_register(struct device *dev, dma_filter_fn filter,
...
@@ -37,8 +37,12 @@ int samsung_asoc_dma_platform_register(struct device *dev, dma_filter_fn filter,
pcm_conf
->
prepare_slave_config
=
snd_dmaengine_pcm_prepare_slave_config
;
pcm_conf
->
prepare_slave_config
=
snd_dmaengine_pcm_prepare_slave_config
;
pcm_conf
->
compat_filter_fn
=
filter
;
pcm_conf
->
compat_filter_fn
=
filter
;
if
(
dev
->
of_node
)
{
pcm_conf
->
chan_names
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
tx
;
pcm_conf
->
chan_names
[
SNDRV_PCM_STREAM_PLAYBACK
]
=
tx
;
pcm_conf
->
chan_names
[
SNDRV_PCM_STREAM_CAPTURE
]
=
rx
;
pcm_conf
->
chan_names
[
SNDRV_PCM_STREAM_CAPTURE
]
=
rx
;
}
else
{
flags
|=
SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME
;
}
return
devm_snd_dmaengine_pcm_register
(
dev
,
pcm_conf
,
flags
);
return
devm_snd_dmaengine_pcm_register
(
dev
,
pcm_conf
,
flags
);
}
}
...
...
sound/soc/samsung/i2s.c
View file @
c7bb6d80
...
@@ -1305,6 +1305,8 @@ static int samsung_i2s_probe(struct platform_device *pdev)
...
@@ -1305,6 +1305,8 @@ static int samsung_i2s_probe(struct platform_device *pdev)
}
}
pri_dai
->
dma_playback
.
addr
=
regs_base
+
I2STXD
;
pri_dai
->
dma_playback
.
addr
=
regs_base
+
I2STXD
;
pri_dai
->
dma_capture
.
addr
=
regs_base
+
I2SRXD
;
pri_dai
->
dma_capture
.
addr
=
regs_base
+
I2SRXD
;
pri_dai
->
dma_playback
.
chan_name
=
"tx"
;
pri_dai
->
dma_capture
.
chan_name
=
"rx"
;
pri_dai
->
dma_playback
.
addr_width
=
4
;
pri_dai
->
dma_playback
.
addr_width
=
4
;
pri_dai
->
dma_capture
.
addr_width
=
4
;
pri_dai
->
dma_capture
.
addr_width
=
4
;
pri_dai
->
quirks
=
quirks
;
pri_dai
->
quirks
=
quirks
;
...
@@ -1329,6 +1331,7 @@ static int samsung_i2s_probe(struct platform_device *pdev)
...
@@ -1329,6 +1331,7 @@ static int samsung_i2s_probe(struct platform_device *pdev)
sec_dai
->
lock
=
&
pri_dai
->
spinlock
;
sec_dai
->
lock
=
&
pri_dai
->
spinlock
;
sec_dai
->
variant_regs
=
pri_dai
->
variant_regs
;
sec_dai
->
variant_regs
=
pri_dai
->
variant_regs
;
sec_dai
->
dma_playback
.
addr
=
regs_base
+
I2STXDS
;
sec_dai
->
dma_playback
.
addr
=
regs_base
+
I2STXDS
;
sec_dai
->
dma_playback
.
chan_name
=
"tx-sec"
;
if
(
!
np
)
{
if
(
!
np
)
{
sec_dai
->
dma_playback
.
filter_data
=
i2s_pdata
->
dma_play_sec
;
sec_dai
->
dma_playback
.
filter_data
=
i2s_pdata
->
dma_play_sec
;
...
...
sound/soc/samsung/s3c2412-i2s.c
View file @
c7bb6d80
...
@@ -35,10 +35,12 @@
...
@@ -35,10 +35,12 @@
#include <linux/platform_data/asoc-s3c.h>
#include <linux/platform_data/asoc-s3c.h>
static
struct
snd_dmaengine_dai_dma_data
s3c2412_i2s_pcm_stereo_out
=
{
static
struct
snd_dmaengine_dai_dma_data
s3c2412_i2s_pcm_stereo_out
=
{
.
chan_name
=
"tx"
,
.
addr_width
=
4
,
.
addr_width
=
4
,
};
};
static
struct
snd_dmaengine_dai_dma_data
s3c2412_i2s_pcm_stereo_in
=
{
static
struct
snd_dmaengine_dai_dma_data
s3c2412_i2s_pcm_stereo_in
=
{
.
chan_name
=
"rx"
,
.
addr_width
=
4
,
.
addr_width
=
4
,
};
};
...
...
sound/soc/samsung/s3c24xx-i2s.c
View file @
c7bb6d80
...
@@ -31,10 +31,12 @@
...
@@ -31,10 +31,12 @@
#include "s3c24xx-i2s.h"
#include "s3c24xx-i2s.h"
static
struct
snd_dmaengine_dai_dma_data
s3c24xx_i2s_pcm_stereo_out
=
{
static
struct
snd_dmaengine_dai_dma_data
s3c24xx_i2s_pcm_stereo_out
=
{
.
chan_name
=
"tx"
,
.
addr_width
=
2
,
.
addr_width
=
2
,
};
};
static
struct
snd_dmaengine_dai_dma_data
s3c24xx_i2s_pcm_stereo_in
=
{
static
struct
snd_dmaengine_dai_dma_data
s3c24xx_i2s_pcm_stereo_in
=
{
.
chan_name
=
"rx"
,
.
addr_width
=
2
,
.
addr_width
=
2
,
};
};
...
...
sound/soc/soc-generic-dmaengine-pcm.c
View file @
c7bb6d80
...
@@ -263,6 +263,7 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
...
@@ -263,6 +263,7 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
struct
dmaengine_pcm
*
pcm
=
soc_platform_to_pcm
(
rtd
->
platform
);
struct
dmaengine_pcm
*
pcm
=
soc_platform_to_pcm
(
rtd
->
platform
);
const
struct
snd_dmaengine_pcm_config
*
config
=
pcm
->
config
;
const
struct
snd_dmaengine_pcm_config
*
config
=
pcm
->
config
;
struct
device
*
dev
=
rtd
->
platform
->
dev
;
struct
device
*
dev
=
rtd
->
platform
->
dev
;
struct
snd_dmaengine_dai_dma_data
*
dma_data
;
struct
snd_pcm_substream
*
substream
;
struct
snd_pcm_substream
*
substream
;
size_t
prealloc_buffer_size
;
size_t
prealloc_buffer_size
;
size_t
max_buffer_size
;
size_t
max_buffer_size
;
...
@@ -282,6 +283,13 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
...
@@ -282,6 +283,13 @@ static int dmaengine_pcm_new(struct snd_soc_pcm_runtime *rtd)
if
(
!
substream
)
if
(
!
substream
)
continue
;
continue
;
dma_data
=
snd_soc_dai_get_dma_data
(
rtd
->
cpu_dai
,
substream
);
if
(
!
pcm
->
chan
[
i
]
&&
(
pcm
->
flags
&
SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME
))
pcm
->
chan
[
i
]
=
dma_request_slave_channel
(
dev
,
dma_data
->
chan_name
);
if
(
!
pcm
->
chan
[
i
]
&&
(
pcm
->
flags
&
SND_DMAENGINE_PCM_FLAG_COMPAT
))
{
if
(
!
pcm
->
chan
[
i
]
&&
(
pcm
->
flags
&
SND_DMAENGINE_PCM_FLAG_COMPAT
))
{
pcm
->
chan
[
i
]
=
dmaengine_pcm_compat_request_channel
(
rtd
,
pcm
->
chan
[
i
]
=
dmaengine_pcm_compat_request_channel
(
rtd
,
substream
);
substream
);
...
@@ -350,7 +358,9 @@ static int dmaengine_pcm_request_chan_of(struct dmaengine_pcm *pcm,
...
@@ -350,7 +358,9 @@ static int dmaengine_pcm_request_chan_of(struct dmaengine_pcm *pcm,
const
char
*
name
;
const
char
*
name
;
struct
dma_chan
*
chan
;
struct
dma_chan
*
chan
;
if
((
pcm
->
flags
&
SND_DMAENGINE_PCM_FLAG_NO_DT
)
||
!
dev
->
of_node
)
if
((
pcm
->
flags
&
(
SND_DMAENGINE_PCM_FLAG_NO_DT
|
SND_DMAENGINE_PCM_FLAG_CUSTOM_CHANNEL_NAME
))
||
!
dev
->
of_node
)
return
0
;
return
0
;
if
(
config
&&
config
->
dma_dev
)
{
if
(
config
&&
config
->
dma_dev
)
{
...
...
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