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
10abe843
Commit
10abe843
authored
Oct 24, 2013
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/mxs' into asoc-next
parents
07797e9b
863ebdde
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
40 additions
and
22 deletions
+40
-22
include/sound/soc-dai.h
include/sound/soc-dai.h
+7
-0
sound/soc/mxs/mxs-saif.c
sound/soc/mxs/mxs-saif.c
+25
-5
sound/soc/mxs/mxs-saif.h
sound/soc/mxs/mxs-saif.h
+5
-0
sound/soc/mxs/mxs-sgtl5000.c
sound/soc/mxs/mxs-sgtl5000.c
+3
-17
No files found.
include/sound/soc-dai.h
View file @
10abe843
...
...
@@ -169,6 +169,13 @@ struct snd_soc_dai_ops {
struct
snd_soc_dai
*
);
int
(
*
prepare
)(
struct
snd_pcm_substream
*
,
struct
snd_soc_dai
*
);
/*
* NOTE: Commands passed to the trigger function are not necessarily
* compatible with the current state of the dai. For example this
* sequence of commands is possible: START STOP STOP.
* So do not unconditionally use refcounting functions in the trigger
* function, e.g. clk_enable/disable.
*/
int
(
*
trigger
)(
struct
snd_pcm_substream
*
,
int
,
struct
snd_soc_dai
*
);
int
(
*
bespoke_trigger
)(
struct
snd_pcm_substream
*
,
int
,
...
...
sound/soc/mxs/mxs-saif.c
View file @
10abe843
...
...
@@ -494,6 +494,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
struct
mxs_saif
*
saif
=
snd_soc_dai_get_drvdata
(
cpu_dai
);
struct
mxs_saif
*
master_saif
;
u32
delay
;
int
ret
;
master_saif
=
mxs_saif_get_master
(
saif
);
if
(
!
master_saif
)
...
...
@@ -503,23 +504,37 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_RESUME
:
case
SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
if
(
saif
->
state
==
MXS_SAIF_STATE_RUNNING
)
return
0
;
dev_dbg
(
cpu_dai
->
dev
,
"start
\n
"
);
clk_enable
(
master_saif
->
clk
);
if
(
!
master_saif
->
mclk_in_use
)
__raw_writel
(
BM_SAIF_CTRL_RUN
,
master_saif
->
base
+
SAIF_CTRL
+
MXS_SET_ADDR
);
ret
=
clk_enable
(
master_saif
->
clk
);
if
(
ret
)
{
dev_err
(
saif
->
dev
,
"Failed to enable master clock
\n
"
);
return
ret
;
}
/*
* If the saif's master is not himself, we also need to enable
* itself clk for its internal basic logic to work.
*/
if
(
saif
!=
master_saif
)
{
clk_enable
(
saif
->
clk
);
ret
=
clk_enable
(
saif
->
clk
);
if
(
ret
)
{
dev_err
(
saif
->
dev
,
"Failed to enable master clock
\n
"
);
clk_disable
(
master_saif
->
clk
);
return
ret
;
}
__raw_writel
(
BM_SAIF_CTRL_RUN
,
saif
->
base
+
SAIF_CTRL
+
MXS_SET_ADDR
);
}
if
(
!
master_saif
->
mclk_in_use
)
__raw_writel
(
BM_SAIF_CTRL_RUN
,
master_saif
->
base
+
SAIF_CTRL
+
MXS_SET_ADDR
);
if
(
substream
->
stream
==
SNDRV_PCM_STREAM_PLAYBACK
)
{
/*
* write data to saif data register to trigger
...
...
@@ -543,6 +558,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
}
master_saif
->
ongoing
=
1
;
saif
->
state
=
MXS_SAIF_STATE_RUNNING
;
dev_dbg
(
saif
->
dev
,
"CTRL 0x%x STAT 0x%x
\n
"
,
__raw_readl
(
saif
->
base
+
SAIF_CTRL
),
...
...
@@ -555,6 +571,9 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
case
SNDRV_PCM_TRIGGER_SUSPEND
:
case
SNDRV_PCM_TRIGGER_STOP
:
case
SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
if
(
saif
->
state
==
MXS_SAIF_STATE_STOPPED
)
return
0
;
dev_dbg
(
cpu_dai
->
dev
,
"stop
\n
"
);
/* wait a while for the current sample to complete */
...
...
@@ -575,6 +594,7 @@ static int mxs_saif_trigger(struct snd_pcm_substream *substream, int cmd,
}
master_saif
->
ongoing
=
0
;
saif
->
state
=
MXS_SAIF_STATE_STOPPED
;
break
;
default:
...
...
sound/soc/mxs/mxs-saif.h
View file @
10abe843
...
...
@@ -124,6 +124,11 @@ struct mxs_saif {
u32
fifo_underrun
;
u32
fifo_overrun
;
enum
{
MXS_SAIF_STATE_STOPPED
,
MXS_SAIF_STATE_RUNNING
,
}
state
;
};
extern
int
mxs_saif_put_mclk
(
unsigned
int
saif_id
);
...
...
sound/soc/mxs/mxs-sgtl5000.c
View file @
10abe843
...
...
@@ -122,14 +122,12 @@ static struct snd_soc_card mxs_sgtl5000 = {
.
num_links
=
ARRAY_SIZE
(
mxs_sgtl5000_dai
),
};
static
int
mxs_sgtl5000_probe
_dt
(
struct
platform_device
*
pdev
)
static
int
mxs_sgtl5000_probe
(
struct
platform_device
*
pdev
)
{
struct
snd_soc_card
*
card
=
&
mxs_sgtl5000
;
int
ret
,
i
;
struct
device_node
*
np
=
pdev
->
dev
.
of_node
;
struct
device_node
*
saif_np
[
2
],
*
codec_np
;
int
i
;
if
(
!
np
)
return
1
;
/* no device tree */
saif_np
[
0
]
=
of_parse_phandle
(
np
,
"saif-controllers"
,
0
);
saif_np
[
1
]
=
of_parse_phandle
(
np
,
"saif-controllers"
,
1
);
...
...
@@ -152,18 +150,6 @@ static int mxs_sgtl5000_probe_dt(struct platform_device *pdev)
of_node_put
(
saif_np
[
0
]);
of_node_put
(
saif_np
[
1
]);
return
0
;
}
static
int
mxs_sgtl5000_probe
(
struct
platform_device
*
pdev
)
{
struct
snd_soc_card
*
card
=
&
mxs_sgtl5000
;
int
ret
;
ret
=
mxs_sgtl5000_probe_dt
(
pdev
);
if
(
ret
<
0
)
return
ret
;
/*
* Set an init clock(11.28Mhz) for sgtl5000 initialization(i2c r/w).
* The Sgtl5000 sysclk is derived from saif0 mclk and it's range
...
...
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