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
e22c3980
Commit
e22c3980
authored
Mar 23, 2014
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/davinci' into asoc-next
parents
b4d032b3
8de131f2
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
106 additions
and
19 deletions
+106
-19
sound/soc/davinci/davinci-evm.c
sound/soc/davinci/davinci-evm.c
+8
-14
sound/soc/davinci/davinci-mcasp.c
sound/soc/davinci/davinci-mcasp.c
+16
-5
sound/soc/davinci/edma-pcm.c
sound/soc/davinci/edma-pcm.c
+57
-0
sound/soc/davinci/edma-pcm.h
sound/soc/davinci/edma-pcm.h
+25
-0
No files found.
sound/soc/davinci/davinci-evm.c
View file @
e22c3980
...
@@ -123,35 +123,29 @@ static const struct snd_soc_dapm_route audio_map[] = {
...
@@ -123,35 +123,29 @@ static const struct snd_soc_dapm_route audio_map[] = {
/* Logic for a aic3x as connected on a davinci-evm */
/* Logic for a aic3x as connected on a davinci-evm */
static
int
evm_aic3x_init
(
struct
snd_soc_pcm_runtime
*
rtd
)
static
int
evm_aic3x_init
(
struct
snd_soc_pcm_runtime
*
rtd
)
{
{
struct
snd_soc_card
*
card
=
rtd
->
card
;
struct
snd_soc_codec
*
codec
=
rtd
->
codec
;
struct
snd_soc_codec
*
codec
=
rtd
->
codec
;
struct
snd_soc_dapm_context
*
dapm
=
&
codec
->
dapm
;
struct
device_node
*
np
=
codec
->
card
->
dev
->
of_node
;
struct
device_node
*
np
=
codec
->
card
->
dev
->
of_node
;
int
ret
;
int
ret
;
/* Add davinci-evm specific widgets */
/* Add davinci-evm specific widgets */
snd_soc_dapm_new_controls
(
dapm
,
aic3x_dapm_widgets
,
snd_soc_dapm_new_controls
(
&
card
->
dapm
,
aic3x_dapm_widgets
,
ARRAY_SIZE
(
aic3x_dapm_widgets
));
ARRAY_SIZE
(
aic3x_dapm_widgets
));
if
(
np
)
{
if
(
np
)
{
ret
=
snd_soc_of_parse_audio_routing
(
codec
->
card
,
ret
=
snd_soc_of_parse_audio_routing
(
card
,
"ti,audio-routing"
);
"ti,audio-routing"
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
}
else
{
}
else
{
/* Set up davinci-evm specific audio path audio_map */
/* Set up davinci-evm specific audio path audio_map */
snd_soc_dapm_add_routes
(
dapm
,
audio_map
,
ARRAY_SIZE
(
audio_map
));
snd_soc_dapm_add_routes
(
&
card
->
dapm
,
audio_map
,
ARRAY_SIZE
(
audio_map
));
}
}
/* not connected */
/* not connected */
snd_soc_dapm_disable_pin
(
dapm
,
"MONO_LOUT"
);
snd_soc_dapm_nc_pin
(
&
codec
->
dapm
,
"MONO_LOUT"
);
snd_soc_dapm_disable_pin
(
dapm
,
"HPLCOM"
);
snd_soc_dapm_nc_pin
(
&
codec
->
dapm
,
"HPLCOM"
);
snd_soc_dapm_disable_pin
(
dapm
,
"HPRCOM"
);
snd_soc_dapm_nc_pin
(
&
codec
->
dapm
,
"HPRCOM"
);
/* always connected */
snd_soc_dapm_enable_pin
(
dapm
,
"Headphone Jack"
);
snd_soc_dapm_enable_pin
(
dapm
,
"Line Out"
);
snd_soc_dapm_enable_pin
(
dapm
,
"Mic Jack"
);
snd_soc_dapm_enable_pin
(
dapm
,
"Line In"
);
return
0
;
return
0
;
}
}
...
...
sound/soc/davinci/davinci-mcasp.c
View file @
e22c3980
...
@@ -1026,6 +1026,7 @@ static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
...
@@ -1026,6 +1026,7 @@ static struct davinci_mcasp_pdata *davinci_mcasp_set_pdata_from_of(
static
int
davinci_mcasp_probe
(
struct
platform_device
*
pdev
)
static
int
davinci_mcasp_probe
(
struct
platform_device
*
pdev
)
{
{
struct
davinci_pcm_dma_params
*
dma_params
;
struct
davinci_pcm_dma_params
*
dma_params
;
struct
snd_dmaengine_dai_dma_data
*
dma_data
;
struct
resource
*
mem
,
*
ioarea
,
*
res
,
*
dat
;
struct
resource
*
mem
,
*
ioarea
,
*
res
,
*
dat
;
struct
davinci_mcasp_pdata
*
pdata
;
struct
davinci_mcasp_pdata
*
pdata
;
struct
davinci_mcasp
*
mcasp
;
struct
davinci_mcasp
*
mcasp
;
...
@@ -1095,6 +1096,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
...
@@ -1095,6 +1096,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
mcasp
->
dat_port
=
true
;
mcasp
->
dat_port
=
true
;
dma_params
=
&
mcasp
->
dma_params
[
SNDRV_PCM_STREAM_PLAYBACK
];
dma_params
=
&
mcasp
->
dma_params
[
SNDRV_PCM_STREAM_PLAYBACK
];
dma_data
=
&
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_PLAYBACK
];
dma_params
->
asp_chan_q
=
pdata
->
asp_chan_q
;
dma_params
->
asp_chan_q
=
pdata
->
asp_chan_q
;
dma_params
->
ram_chan_q
=
pdata
->
ram_chan_q
;
dma_params
->
ram_chan_q
=
pdata
->
ram_chan_q
;
dma_params
->
sram_pool
=
pdata
->
sram_pool
;
dma_params
->
sram_pool
=
pdata
->
sram_pool
;
...
@@ -1105,7 +1107,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
...
@@ -1105,7 +1107,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
dma_params
->
dma_addr
=
mem
->
start
+
pdata
->
tx_dma_offset
;
dma_params
->
dma_addr
=
mem
->
start
+
pdata
->
tx_dma_offset
;
/* Unconditional dmaengine stuff */
/* Unconditional dmaengine stuff */
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_PLAYBACK
].
addr
=
dma_params
->
dma_addr
;
dma_data
->
addr
=
dma_params
->
dma_addr
;
res
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
0
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_DMA
,
0
);
if
(
res
)
if
(
res
)
...
@@ -1113,7 +1115,14 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
...
@@ -1113,7 +1115,14 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
else
else
dma_params
->
channel
=
pdata
->
tx_dma_channel
;
dma_params
->
channel
=
pdata
->
tx_dma_channel
;
/* dmaengine filter data for DT and non-DT boot */
if
(
pdev
->
dev
.
of_node
)
dma_data
->
filter_data
=
"tx"
;
else
dma_data
->
filter_data
=
&
dma_params
->
channel
;
dma_params
=
&
mcasp
->
dma_params
[
SNDRV_PCM_STREAM_CAPTURE
];
dma_params
=
&
mcasp
->
dma_params
[
SNDRV_PCM_STREAM_CAPTURE
];
dma_data
=
&
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_CAPTURE
];
dma_params
->
asp_chan_q
=
pdata
->
asp_chan_q
;
dma_params
->
asp_chan_q
=
pdata
->
asp_chan_q
;
dma_params
->
ram_chan_q
=
pdata
->
ram_chan_q
;
dma_params
->
ram_chan_q
=
pdata
->
ram_chan_q
;
dma_params
->
sram_pool
=
pdata
->
sram_pool
;
dma_params
->
sram_pool
=
pdata
->
sram_pool
;
...
@@ -1124,7 +1133,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
...
@@ -1124,7 +1133,7 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
dma_params
->
dma_addr
=
mem
->
start
+
pdata
->
rx_dma_offset
;
dma_params
->
dma_addr
=
mem
->
start
+
pdata
->
rx_dma_offset
;
/* Unconditional dmaengine stuff */
/* Unconditional dmaengine stuff */
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_CAPTURE
].
addr
=
dma_params
->
dma_addr
;
dma_data
->
addr
=
dma_params
->
dma_addr
;
if
(
mcasp
->
version
<
MCASP_VERSION_3
)
{
if
(
mcasp
->
version
<
MCASP_VERSION_3
)
{
mcasp
->
fifo_base
=
DAVINCI_MCASP_V2_AFIFO_BASE
;
mcasp
->
fifo_base
=
DAVINCI_MCASP_V2_AFIFO_BASE
;
...
@@ -1140,9 +1149,11 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
...
@@ -1140,9 +1149,11 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
else
else
dma_params
->
channel
=
pdata
->
rx_dma_channel
;
dma_params
->
channel
=
pdata
->
rx_dma_channel
;
/* Unconditional dmaengine stuff */
/* dmaengine filter data for DT and non-DT boot */
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_PLAYBACK
].
filter_data
=
"tx"
;
if
(
pdev
->
dev
.
of_node
)
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_CAPTURE
].
filter_data
=
"rx"
;
dma_data
->
filter_data
=
"rx"
;
else
dma_data
->
filter_data
=
&
dma_params
->
channel
;
dev_set_drvdata
(
&
pdev
->
dev
,
mcasp
);
dev_set_drvdata
(
&
pdev
->
dev
,
mcasp
);
...
...
sound/soc/davinci/edma-pcm.c
0 → 100644
View file @
e22c3980
/*
* edma-pcm.c - eDMA PCM driver using dmaengine for AM3xxx, AM4xxx
*
* Copyright (C) 2014 Texas Instruments, Inc.
*
* Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* Based on: sound/soc/tegra/tegra_pcm.c
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
#include <linux/module.h>
#include <sound/core.h>
#include <sound/pcm.h>
#include <sound/pcm_params.h>
#include <sound/soc.h>
#include <sound/dmaengine_pcm.h>
#include <linux/edma.h>
static
const
struct
snd_pcm_hardware
edma_pcm_hardware
=
{
.
info
=
SNDRV_PCM_INFO_MMAP
|
SNDRV_PCM_INFO_MMAP_VALID
|
SNDRV_PCM_INFO_BATCH
|
SNDRV_PCM_INFO_PAUSE
|
SNDRV_PCM_INFO_RESUME
|
SNDRV_PCM_INFO_INTERLEAVED
,
.
buffer_bytes_max
=
128
*
1024
,
.
period_bytes_min
=
32
,
.
period_bytes_max
=
64
*
1024
,
.
periods_min
=
2
,
.
periods_max
=
19
,
/* Limit by edma dmaengine driver */
};
static
const
struct
snd_dmaengine_pcm_config
edma_dmaengine_pcm_config
=
{
.
pcm_hardware
=
&
edma_pcm_hardware
,
.
prepare_slave_config
=
snd_dmaengine_pcm_prepare_slave_config
,
.
compat_filter_fn
=
edma_filter_fn
,
.
prealloc_buffer_size
=
128
*
1024
,
};
int
edma_pcm_platform_register
(
struct
device
*
dev
)
{
return
devm_snd_dmaengine_pcm_register
(
dev
,
&
edma_dmaengine_pcm_config
,
SND_DMAENGINE_PCM_FLAG_COMPAT
);
}
EXPORT_SYMBOL_GPL
(
edma_pcm_platform_register
);
MODULE_AUTHOR
(
"Peter Ujfalusi <peter.ujfalusi@ti.com>"
);
MODULE_DESCRIPTION
(
"eDMA PCM ASoC platform driver"
);
MODULE_LICENSE
(
"GPL"
);
sound/soc/davinci/edma-pcm.h
0 → 100644
View file @
e22c3980
/*
* edma-pcm.h - eDMA PCM driver using dmaengine for AM3xxx, AM4xxx
*
* Copyright (C) 2014 Texas Instruments, Inc.
*
* Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
*
* Based on: sound/soc/tegra/tegra_pcm.h
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*/
#ifndef __EDMA_PCM_H__
#define __EDMA_PCM_H__
int
edma_pcm_platform_register
(
struct
device
*
dev
);
#endif
/* __EDMA_PCM_H__ */
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