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
Kirill Smelkov
linux
Commits
2924c962
Commit
2924c962
authored
Jun 22, 2015
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/davinci' into asoc-next
parents
95baa281
9fbd58cf
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
66 additions
and
11 deletions
+66
-11
sound/soc/davinci/davinci-mcasp.c
sound/soc/davinci/davinci-mcasp.c
+62
-10
sound/soc/davinci/davinci-mcasp.h
sound/soc/davinci/davinci-mcasp.h
+4
-1
No files found.
sound/soc/davinci/davinci-mcasp.c
View file @
2924c962
...
...
@@ -686,6 +686,8 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
if
(
mcasp
->
serial_dir
[
i
]
==
TX_MODE
&&
tx_ser
<
max_active_serializers
)
{
mcasp_set_bits
(
mcasp
,
DAVINCI_MCASP_PDIR_REG
,
AXR
(
i
));
mcasp_mod_bits
(
mcasp
,
DAVINCI_MCASP_XRSRCTL_REG
(
i
),
DISMOD_LOW
,
DISMOD_MASK
);
tx_ser
++
;
}
else
if
(
mcasp
->
serial_dir
[
i
]
==
RX_MODE
&&
rx_ser
<
max_active_serializers
)
{
...
...
@@ -1565,6 +1567,49 @@ static int davinci_mcasp_init_ch_constraints(struct davinci_mcasp *mcasp)
return
ret
;
}
enum
{
PCM_EDMA
,
PCM_SDMA
,
};
static
const
char
*
sdma_prefix
=
"ti,omap"
;
static
int
davinci_mcasp_get_dma_type
(
struct
davinci_mcasp
*
mcasp
)
{
struct
dma_chan
*
chan
;
const
char
*
tmp
;
int
ret
=
PCM_EDMA
;
if
(
!
mcasp
->
dev
->
of_node
)
return
PCM_EDMA
;
tmp
=
mcasp
->
dma_data
[
SNDRV_PCM_STREAM_PLAYBACK
].
filter_data
;
chan
=
dma_request_slave_channel_reason
(
mcasp
->
dev
,
tmp
);
if
(
IS_ERR
(
chan
))
{
if
(
PTR_ERR
(
chan
)
!=
-
EPROBE_DEFER
)
dev_err
(
mcasp
->
dev
,
"Can't verify DMA configuration (%ld)
\n
"
,
PTR_ERR
(
chan
));
return
PTR_ERR
(
chan
);
}
BUG_ON
(
!
chan
->
device
||
!
chan
->
device
->
dev
);
if
(
chan
->
device
->
dev
->
of_node
)
ret
=
of_property_read_string
(
chan
->
device
->
dev
->
of_node
,
"compatible"
,
&
tmp
);
else
dev_dbg
(
mcasp
->
dev
,
"DMA controller has no of-node
\n
"
);
dma_release_channel
(
chan
);
if
(
ret
)
return
ret
;
dev_dbg
(
mcasp
->
dev
,
"DMA controller compatible =
\"
%s
\"\n
"
,
tmp
);
if
(
!
strncmp
(
tmp
,
sdma_prefix
,
strlen
(
sdma_prefix
)))
return
PCM_SDMA
;
return
PCM_EDMA
;
}
static
int
davinci_mcasp_probe
(
struct
platform_device
*
pdev
)
{
struct
snd_dmaengine_dai_dma_data
*
dma_data
;
...
...
@@ -1763,27 +1808,34 @@ static int davinci_mcasp_probe(struct platform_device *pdev)
if
(
ret
!=
0
)
goto
err
;
switch
(
mcasp
->
version
)
{
ret
=
davinci_mcasp_get_dma_type
(
mcasp
);
switch
(
ret
)
{
case
PCM_EDMA
:
#if IS_BUILTIN(CONFIG_SND_EDMA_SOC) || \
(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
IS_MODULE(CONFIG_SND_EDMA_SOC))
case
MCASP_VERSION_1
:
case
MCASP_VERSION_2
:
case
MCASP_VERSION_3
:
ret
=
edma_pcm_platform_register
(
&
pdev
->
dev
);
break
;
#else
dev_err
(
&
pdev
->
dev
,
"Missing SND_EDMA_SOC
\n
"
);
ret
=
-
EINVAL
;
goto
err
;
#endif
break
;
case
PCM_SDMA
:
#if IS_BUILTIN(CONFIG_SND_OMAP_SOC) || \
(IS_MODULE(CONFIG_SND_DAVINCI_SOC_MCASP) && \
IS_MODULE(CONFIG_SND_OMAP_SOC))
case
MCASP_VERSION_4
:
ret
=
omap_pcm_platform_register
(
&
pdev
->
dev
);
break
;
#else
dev_err
(
&
pdev
->
dev
,
"Missing SND_SDMA_SOC
\n
"
);
ret
=
-
EINVAL
;
goto
err
;
#endif
break
;
default:
dev_err
(
&
pdev
->
dev
,
"
Invalid McASP version: %d
\n
"
,
mcasp
->
version
);
ret
=
-
EINVAL
;
dev_err
(
&
pdev
->
dev
,
"
No DMA controller found (%d)
\n
"
,
ret
);
case
-
EPROBE_DEFER
:
goto
err
;
break
;
}
...
...
sound/soc/davinci/davinci-mcasp.h
View file @
2924c962
...
...
@@ -215,7 +215,10 @@
* DAVINCI_MCASP_XRSRCTL_BASE_REG - Serializer Control Register Bits
*/
#define MODE(val) (val)
#define DISMOD (val)(val<<2)
#define DISMOD_3STATE (0x0)
#define DISMOD_LOW (0x2 << 2)
#define DISMOD_HIGH (0x3 << 2)
#define DISMOD_MASK DISMOD_HIGH
#define TXSTATE BIT(4)
#define RXSTATE BIT(5)
#define SRMOD_MASK 3
...
...
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