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
81af7261
Commit
81af7261
authored
Sep 29, 2016
by
Mark Brown
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'asoc/topic/rcar' into asoc-next
parents
60955521
4b9c75ea
Changes
10
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
682 additions
and
161 deletions
+682
-161
Documentation/devicetree/bindings/sound/simple-scu-card.txt
Documentation/devicetree/bindings/sound/simple-scu-card.txt
+110
-0
include/sound/simple_card_utils.h
include/sound/simple_card_utils.h
+34
-0
sound/soc/generic/Kconfig
sound/soc/generic/Kconfig
+8
-0
sound/soc/generic/Makefile
sound/soc/generic/Makefile
+2
-0
sound/soc/generic/simple-card-utils.c
sound/soc/generic/simple-card-utils.c
+141
-0
sound/soc/generic/simple-card.c
sound/soc/generic/simple-card.c
+38
-152
sound/soc/generic/simple-scu-card.c
sound/soc/generic/simple-scu-card.c
+345
-0
sound/soc/sh/Kconfig
sound/soc/sh/Kconfig
+0
-6
sound/soc/sh/rcar/Makefile
sound/soc/sh/rcar/Makefile
+0
-3
sound/soc/sh/rcar/core.c
sound/soc/sh/rcar/core.c
+4
-0
No files found.
Documentation/devicetree/bindings/sound/
renesas,rsrc
-card.txt
→
Documentation/devicetree/bindings/sound/
simple-scu
-card.txt
View file @
81af7261
Renesas Sampling Rate Convert Sound Card:
ASoC simple SCU Sound Card
Renesas Sampling Rate Convert Sound
Card specifies audio DAI connections of SoC <-> codec.
Simple-
Card specifies audio DAI connections of SoC <-> codec.
Required properties:
- compatible : "renesas,rsrc-card{,<board>}"
Examples with boards are:
- "renesas,rsrc-card"
- "renesas,rsrc-card,lager"
- "renesas,rsrc-card,koelsch"
- compatible : "simple-scu-audio-card"
"renesas,rsrc-card"
Optional properties:
-
card_name
: User specified audio sound card name, one string
-
simple-audio-card,name
: User specified audio sound card name, one string
property.
-
cpu
: CPU sub-node
-
codec
: CODEC sub-node
-
simple-audio-card,cpu
: CPU sub-node
-
simple-audio-card,codec
: CODEC sub-node
Optional subnode properties:
-
format
: CPU/CODEC common audio format.
-
simple-audio-card,format
: CPU/CODEC common audio format.
"i2s", "right_j", "left_j" , "dsp_a"
"dsp_b", "ac97", "pdm", "msb", "lsb"
-
frame-master
: Indicates dai-link frame master.
-
simple-audio-card,frame-master
: Indicates dai-link frame master.
phandle to a cpu or codec subnode.
-
bitclock-master
: Indicates dai-link bit clock master.
-
simple-audio-card,bitclock-master
: Indicates dai-link bit clock master.
phandle to a cpu or codec subnode.
-
bitclock-inversion
: bool property. Add this if the
-
simple-audio-card,bitclock-inversion
: bool property. Add this if the
dai-link uses bit clock inversion.
-
frame-inversion
: bool property. Add this if the
-
simple-audio-card,frame-inversion
: bool property. Add this if the
dai-link uses frame clock inversion.
-
convert-rate
: platform specified sampling rate convert
-
convert-channels
: platform specified converted channel size (2 - 8 ch)
-
audio-prefix
: see audio-routing
-
audio-routing
: A list of the connections between audio components.
-
simple-audio-card,convert-rate
: platform specified sampling rate convert
-
simple-audio-card,convert-channels
: platform specified converted channel size (2 - 8 ch)
-
simple-audio-card,prefix
: see audio-routing
-
simple-audio-card,routing
: A list of the connections between audio components.
Each entry is a pair of strings, the first being the connection's sink,
the second being the connection's source. Valid names for sources.
use audio-prefix if some components is using same sink/sources naming.
...
...
@@ -54,22 +52,59 @@ Optional CPU/CODEC subnodes properties:
clk_disable_unprepare() in dai
shutdown().
Example
Example
1. Sampling Rate Covert
sound {
compatible = "
renesas,rsrc-card,lager
";
compatible = "
simple-scu-audio-card
";
card-name = "rsnd-ak4643";
format = "left_j";
bitclock-master = <&sndcodec>;
frame-master = <&sndcodec>;
simple-audio-card,name = "rsnd-ak4643";
simple-audio-card,format = "left_j";
simple-audio-card,format = "left_j";
simple-audio-card,bitclock-master = <&sndcodec>;
simple-audio-card,frame-master = <&sndcodec>;
sndcpu: cpu {
simple-audio-card,convert-rate = <48000>; /* see audio_clk_a */
simple-audio-card,prefix = "ak4642";
simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
"DAI0 Capture", "ak4642 Capture";
sndcpu: simple-audio-card,cpu {
sound-dai = <&rcar_sound>;
};
sndcodec: codec {
sndcodec:
simple-audio-card,
codec {
sound-dai = <&ak4643>;
system-clock-frequency = <11289600>;
};
};
Example 2. 2 CPU 1 Codec
sound {
compatible = "renesas,rsrc-card";
card-name = "rsnd-ak4643";
format = "left_j";
bitclock-master = <&dpcmcpu>;
frame-master = <&dpcmcpu>;
convert-rate = <48000>; /* see audio_clk_a */
audio-prefix = "ak4642";
audio-routing = "ak4642 Playback", "DAI0 Playback",
"ak4642 Playback", "DAI1 Playback";
dpcmcpu: cpu@0 {
sound-dai = <&rcar_sound 0>;
};
cpu@1 {
sound-dai = <&rcar_sound 1>;
};
codec {
sound-dai = <&ak4643>;
clocks = <&audio_clock>;
};
};
include/sound/simple_card_utils.h
View file @
81af7261
...
...
@@ -33,4 +33,38 @@ int asoc_simple_card_set_dailink_name(struct device *dev,
int
asoc_simple_card_parse_card_name
(
struct
snd_soc_card
*
card
,
char
*
prefix
);
#define asoc_simple_card_parse_clk_cpu(node, dai_link, simple_dai) \
asoc_simple_card_parse_clk(node, dai_link->cpu_of_node, simple_dai)
#define asoc_simple_card_parse_clk_codec(node, dai_link, simple_dai) \
asoc_simple_card_parse_clk(node, dai_link->codec_of_node, simple_dai)
int
asoc_simple_card_parse_clk
(
struct
device_node
*
node
,
struct
device_node
*
dai_of_node
,
struct
asoc_simple_dai
*
simple_dai
);
#define asoc_simple_card_parse_cpu(node, dai_link, \
list_name, cells_name, is_single_link) \
asoc_simple_card_parse_dai(node, &dai_link->cpu_of_node, \
&dai_link->cpu_dai_name, list_name, cells_name, is_single_link)
#define asoc_simple_card_parse_codec(node, dai_link, list_name, cells_name) \
asoc_simple_card_parse_dai(node, &dai_link->codec_of_node, \
&dai_link->codec_dai_name, list_name, cells_name, NULL)
#define asoc_simple_card_parse_platform(node, dai_link, list_name, cells_name) \
asoc_simple_card_parse_dai(node, &dai_link->platform_of_node, \
NULL, list_name, cells_name, NULL)
int
asoc_simple_card_parse_dai
(
struct
device_node
*
node
,
struct
device_node
**
endpoint_np
,
const
char
**
dai_name
,
const
char
*
list_name
,
const
char
*
cells_name
,
int
*
is_single_links
);
int
asoc_simple_card_init_dai
(
struct
snd_soc_dai
*
dai
,
struct
asoc_simple_dai
*
simple_dai
);
int
asoc_simple_card_canonicalize_dailink
(
struct
snd_soc_dai_link
*
dai_link
);
void
asoc_simple_card_canonicalize_cpu
(
struct
snd_soc_dai_link
*
dai_link
,
int
is_single_links
);
int
asoc_simple_card_clean_reference
(
struct
snd_soc_card
*
card
);
#endif
/* __SIMPLE_CARD_CORE_H */
sound/soc/generic/Kconfig
View file @
81af7261
...
...
@@ -6,3 +6,11 @@ config SND_SIMPLE_CARD
select SND_SIMPLE_CARD_UTILS
help
This option enables generic simple sound card support
config SND_SIMPLE_SCU_CARD
tristate "ASoC Simple SCU sound card support"
depends on OF
select SND_SIMPLE_CARD_UTILS
help
This option enables generic simple SCU sound card support.
It supports DPCM of multi CPU single Codec system.
sound/soc/generic/Makefile
View file @
81af7261
snd-soc-simple-card-utils-objs
:=
simple-card-utils.o
snd-soc-simple-card-objs
:=
simple-card.o
snd-soc-simple-scu-card-objs
:=
simple-scu-card.o
obj-$(CONFIG_SND_SIMPLE_CARD_UTILS)
+=
snd-soc-simple-card-utils.o
obj-$(CONFIG_SND_SIMPLE_CARD)
+=
snd-soc-simple-card.o
obj-$(CONFIG_SND_SIMPLE_SCU_CARD)
+=
snd-soc-simple-scu-card.o
sound/soc/generic/simple-card-utils.c
View file @
81af7261
...
...
@@ -7,6 +7,7 @@
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include <linux/clk.h>
#include <linux/module.h>
#include <linux/of.h>
#include <sound/simple_card_utils.h>
...
...
@@ -97,6 +98,146 @@ int asoc_simple_card_parse_card_name(struct snd_soc_card *card,
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_parse_card_name
);
int
asoc_simple_card_parse_clk
(
struct
device_node
*
node
,
struct
device_node
*
dai_of_node
,
struct
asoc_simple_dai
*
simple_dai
)
{
struct
clk
*
clk
;
u32
val
;
/*
* Parse dai->sysclk come from "clocks = <&xxx>"
* (if system has common clock)
* or "system-clock-frequency = <xxx>"
* or device's module clock.
*/
clk
=
of_clk_get
(
node
,
0
);
if
(
!
IS_ERR
(
clk
))
{
simple_dai
->
sysclk
=
clk_get_rate
(
clk
);
simple_dai
->
clk
=
clk
;
}
else
if
(
!
of_property_read_u32
(
node
,
"system-clock-frequency"
,
&
val
))
{
simple_dai
->
sysclk
=
val
;
}
else
{
clk
=
of_clk_get
(
dai_of_node
,
0
);
if
(
!
IS_ERR
(
clk
))
simple_dai
->
sysclk
=
clk_get_rate
(
clk
);
}
return
0
;
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_parse_clk
);
int
asoc_simple_card_parse_dai
(
struct
device_node
*
node
,
struct
device_node
**
dai_of_node
,
const
char
**
dai_name
,
const
char
*
list_name
,
const
char
*
cells_name
,
int
*
is_single_link
)
{
struct
of_phandle_args
args
;
int
ret
;
if
(
!
node
)
return
0
;
/*
* Get node via "sound-dai = <&phandle port>"
* it will be used as xxx_of_node on soc_bind_dai_link()
*/
ret
=
of_parse_phandle_with_args
(
node
,
list_name
,
cells_name
,
0
,
&
args
);
if
(
ret
)
return
ret
;
/* Get dai->name */
if
(
dai_name
)
{
ret
=
snd_soc_of_get_dai_name
(
node
,
dai_name
);
if
(
ret
<
0
)
return
ret
;
}
*
dai_of_node
=
args
.
np
;
if
(
is_single_link
)
*
is_single_link
=
!
args
.
args_count
;
return
0
;
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_parse_dai
);
int
asoc_simple_card_init_dai
(
struct
snd_soc_dai
*
dai
,
struct
asoc_simple_dai
*
simple_dai
)
{
int
ret
;
if
(
simple_dai
->
sysclk
)
{
ret
=
snd_soc_dai_set_sysclk
(
dai
,
0
,
simple_dai
->
sysclk
,
0
);
if
(
ret
&&
ret
!=
-
ENOTSUPP
)
{
dev_err
(
dai
->
dev
,
"simple-card: set_sysclk error
\n
"
);
return
ret
;
}
}
if
(
simple_dai
->
slots
)
{
ret
=
snd_soc_dai_set_tdm_slot
(
dai
,
simple_dai
->
tx_slot_mask
,
simple_dai
->
rx_slot_mask
,
simple_dai
->
slots
,
simple_dai
->
slot_width
);
if
(
ret
&&
ret
!=
-
ENOTSUPP
)
{
dev_err
(
dai
->
dev
,
"simple-card: set_tdm_slot error
\n
"
);
return
ret
;
}
}
return
0
;
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_init_dai
);
int
asoc_simple_card_canonicalize_dailink
(
struct
snd_soc_dai_link
*
dai_link
)
{
if
(
!
dai_link
->
cpu_dai_name
||
!
dai_link
->
codec_dai_name
)
return
-
EINVAL
;
/* Assumes platform == cpu */
if
(
!
dai_link
->
platform_of_node
)
dai_link
->
platform_of_node
=
dai_link
->
cpu_of_node
;
return
0
;
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_canonicalize_dailink
);
void
asoc_simple_card_canonicalize_cpu
(
struct
snd_soc_dai_link
*
dai_link
,
int
is_single_links
)
{
/*
* In soc_bind_dai_link() will check cpu name after
* of_node matching if dai_link has cpu_dai_name.
* but, it will never match if name was created by
* fmt_single_name() remove cpu_dai_name if cpu_args
* was 0. See:
* fmt_single_name()
* fmt_multiple_name()
*/
if
(
is_single_links
)
dai_link
->
cpu_dai_name
=
NULL
;
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_canonicalize_cpu
);
int
asoc_simple_card_clean_reference
(
struct
snd_soc_card
*
card
)
{
struct
snd_soc_dai_link
*
dai_link
;
int
num_links
;
for
(
num_links
=
0
,
dai_link
=
card
->
dai_link
;
num_links
<
card
->
num_links
;
num_links
++
,
dai_link
++
)
{
of_node_put
(
dai_link
->
cpu_of_node
);
of_node_put
(
dai_link
->
codec_of_node
);
}
return
0
;
}
EXPORT_SYMBOL_GPL
(
asoc_simple_card_clean_reference
);
/* Module information */
MODULE_AUTHOR
(
"Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>"
);
MODULE_DESCRIPTION
(
"ALSA SoC Simple Card Utils"
);
...
...
sound/soc/generic/simple-card.c
View file @
81af7261
...
...
@@ -44,6 +44,8 @@ struct simple_card_data {
#define simple_priv_to_link(priv, i) ((priv)->snd_card.dai_link + i)
#define simple_priv_to_props(priv, i) ((priv)->dai_props + i)
#define DAI "sound-dai"
#define CELL "#sound-dai-cells"
#define PREFIX "simple-audio-card,"
#define asoc_simple_card_init_hp(card, sjack, prefix)\
...
...
@@ -177,51 +179,19 @@ static struct snd_soc_ops asoc_simple_card_ops = {
.
hw_params
=
asoc_simple_card_hw_params
,
};
static
int
__asoc_simple_card_dai_init
(
struct
snd_soc_dai
*
dai
,
struct
asoc_simple_dai
*
set
)
{
int
ret
;
if
(
set
->
sysclk
)
{
ret
=
snd_soc_dai_set_sysclk
(
dai
,
0
,
set
->
sysclk
,
0
);
if
(
ret
&&
ret
!=
-
ENOTSUPP
)
{
dev_err
(
dai
->
dev
,
"simple-card: set_sysclk error
\n
"
);
goto
err
;
}
}
if
(
set
->
slots
)
{
ret
=
snd_soc_dai_set_tdm_slot
(
dai
,
set
->
tx_slot_mask
,
set
->
rx_slot_mask
,
set
->
slots
,
set
->
slot_width
);
if
(
ret
&&
ret
!=
-
ENOTSUPP
)
{
dev_err
(
dai
->
dev
,
"simple-card: set_tdm_slot error
\n
"
);
goto
err
;
}
}
ret
=
0
;
err:
return
ret
;
}
static
int
asoc_simple_card_dai_init
(
struct
snd_soc_pcm_runtime
*
rtd
)
{
struct
simple_card_data
*
priv
=
snd_soc_card_get_drvdata
(
rtd
->
card
);
struct
snd_soc_dai
*
codec
=
rtd
->
codec_dai
;
struct
snd_soc_dai
*
cpu
=
rtd
->
cpu_dai
;
struct
simple_dai_props
*
dai_props
;
struct
simple_dai_props
*
dai_props
=
&
priv
->
dai_props
[
rtd
->
num
]
;
int
ret
;
dai_props
=
&
priv
->
dai_props
[
rtd
->
num
];
ret
=
__asoc_simple_card_dai_init
(
codec
,
&
dai_props
->
codec_dai
);
ret
=
asoc_simple_card_init_dai
(
codec
,
&
dai_props
->
codec_dai
);
if
(
ret
<
0
)
return
ret
;
ret
=
__asoc_simple_card_dai_init
(
cpu
,
&
dai_props
->
cpu_dai
);
ret
=
asoc_simple_card_init_dai
(
cpu
,
&
dai_props
->
cpu_dai
);
if
(
ret
<
0
)
return
ret
;
...
...
@@ -236,78 +206,6 @@ static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd)
return
0
;
}
static
int
asoc_simple_card_sub_parse_of
(
struct
device_node
*
np
,
struct
asoc_simple_dai
*
dai
,
struct
device_node
**
p_node
,
const
char
**
name
,
int
*
args_count
)
{
struct
of_phandle_args
args
;
struct
clk
*
clk
;
u32
val
;
int
ret
;
if
(
!
np
)
return
0
;
/*
* Get node via "sound-dai = <&phandle port>"
* it will be used as xxx_of_node on soc_bind_dai_link()
*/
ret
=
of_parse_phandle_with_args
(
np
,
"sound-dai"
,
"#sound-dai-cells"
,
0
,
&
args
);
if
(
ret
)
return
ret
;
*
p_node
=
args
.
np
;
if
(
args_count
)
*
args_count
=
args
.
args_count
;
/* Get dai->name */
if
(
name
)
{
ret
=
snd_soc_of_get_dai_name
(
np
,
name
);
if
(
ret
<
0
)
return
ret
;
}
if
(
!
dai
)
return
0
;
/* Parse TDM slot */
ret
=
snd_soc_of_parse_tdm_slot
(
np
,
&
dai
->
tx_slot_mask
,
&
dai
->
rx_slot_mask
,
&
dai
->
slots
,
&
dai
->
slot_width
);
if
(
ret
)
return
ret
;
/*
* Parse dai->sysclk come from "clocks = <&xxx>"
* (if system has common clock)
* or "system-clock-frequency = <xxx>"
* or device's module clock.
*/
if
(
of_property_read_bool
(
np
,
"clocks"
))
{
clk
=
of_clk_get
(
np
,
0
);
if
(
IS_ERR
(
clk
))
{
ret
=
PTR_ERR
(
clk
);
return
ret
;
}
dai
->
sysclk
=
clk_get_rate
(
clk
);
dai
->
clk
=
clk
;
}
else
if
(
!
of_property_read_u32
(
np
,
"system-clock-frequency"
,
&
val
))
{
dai
->
sysclk
=
val
;
}
else
{
clk
=
of_clk_get
(
args
.
np
,
0
);
if
(
!
IS_ERR
(
clk
))
dai
->
sysclk
=
clk_get_rate
(
clk
);
}
return
0
;
}
static
int
asoc_simple_card_dai_link_of
(
struct
device_node
*
node
,
struct
simple_card_data
*
priv
,
int
idx
,
...
...
@@ -316,12 +214,14 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
struct
device
*
dev
=
simple_priv_to_dev
(
priv
);
struct
snd_soc_dai_link
*
dai_link
=
simple_priv_to_link
(
priv
,
idx
);
struct
simple_dai_props
*
dai_props
=
simple_priv_to_props
(
priv
,
idx
);
struct
asoc_simple_dai
*
cpu_dai
=
&
dai_props
->
cpu_dai
;
struct
asoc_simple_dai
*
codec_dai
=
&
dai_props
->
codec_dai
;
struct
device_node
*
cpu
=
NULL
;
struct
device_node
*
plat
=
NULL
;
struct
device_node
*
codec
=
NULL
;
char
prop
[
128
];
char
*
prefix
=
""
;
int
ret
,
cpu_args
;
int
ret
,
single_cpu
;
u32
val
;
/* For single DAI link & old style of DT node */
...
...
@@ -351,33 +251,44 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
if
(
!
of_property_read_u32
(
node
,
"mclk-fs"
,
&
val
))
dai_props
->
mclk_fs
=
val
;
ret
=
asoc_simple_card_sub_parse_of
(
cpu
,
&
dai_props
->
cpu_dai
,
&
dai_link
->
cpu_of_node
,
&
dai_link
->
cpu_dai_name
,
&
cpu_args
);
ret
=
asoc_simple_card_parse_cpu
(
cpu
,
dai_link
,
DAI
,
CELL
,
&
single_cpu
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
ret
=
asoc_simple_card_sub_parse_of
(
codec
,
&
dai_props
->
codec_dai
,
&
dai_link
->
codec_of_node
,
&
dai_link
->
codec_dai_name
,
NULL
);
ret
=
asoc_simple_card_parse_codec
(
codec
,
dai_link
,
DAI
,
CELL
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
ret
=
asoc_simple_card_sub_parse_of
(
plat
,
NULL
,
&
dai_link
->
platform_of_node
,
NULL
,
NULL
);
ret
=
asoc_simple_card_parse_platform
(
plat
,
dai_link
,
DAI
,
CELL
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
if
(
!
dai_link
->
cpu_dai_name
||
!
dai_link
->
codec_dai_name
)
{
ret
=
-
EINVAL
;
ret
=
snd_soc_of_parse_tdm_slot
(
cpu
,
&
cpu_dai
->
tx_slot_mask
,
&
cpu_dai
->
rx_slot_mask
,
&
cpu_dai
->
slots
,
&
cpu_dai
->
slot_width
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
ret
=
snd_soc_of_parse_tdm_slot
(
codec
,
&
codec_dai
->
tx_slot_mask
,
&
codec_dai
->
rx_slot_mask
,
&
codec_dai
->
slots
,
&
codec_dai
->
slot_width
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
ret
=
asoc_simple_card_parse_clk_cpu
(
cpu
,
dai_link
,
cpu_dai
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
}
/* Assumes platform == cpu */
if
(
!
dai_link
->
platform_of_node
)
dai_link
->
platform_of_node
=
dai_link
->
cpu_of_node
;
ret
=
asoc_simple_card_parse_clk_codec
(
codec
,
dai_link
,
codec_dai
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
ret
=
asoc_simple_card_canonicalize_dailink
(
dai_link
);
if
(
ret
<
0
)
goto
dai_link_of_err
;
ret
=
asoc_simple_card_set_dailink_name
(
dev
,
dai_link
,
"%s-%s"
,
...
...
@@ -398,17 +309,7 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
dai_link
->
codec_dai_name
,
dai_props
->
codec_dai
.
sysclk
);
/*
* In soc_bind_dai_link() will check cpu name after
* of_node matching if dai_link has cpu_dai_name.
* but, it will never match if name was created by
* fmt_single_name() remove cpu_dai_name if cpu_args
* was 0. See:
* fmt_single_name()
* fmt_multiple_name()
*/
if
(
!
cpu_args
)
dai_link
->
cpu_dai_name
=
NULL
;
asoc_simple_card_canonicalize_cpu
(
dai_link
,
single_cpu
);
dai_link_of_err:
of_node_put
(
cpu
);
...
...
@@ -477,21 +378,6 @@ static int asoc_simple_card_parse_of(struct device_node *node,
return
0
;
}
/* Decrease the reference count of the device nodes */
static
int
asoc_simple_card_unref
(
struct
snd_soc_card
*
card
)
{
struct
snd_soc_dai_link
*
dai_link
;
int
num_links
;
for
(
num_links
=
0
,
dai_link
=
card
->
dai_link
;
num_links
<
card
->
num_links
;
num_links
++
,
dai_link
++
)
{
of_node_put
(
dai_link
->
cpu_of_node
);
of_node_put
(
dai_link
->
codec_of_node
);
}
return
0
;
}
static
int
asoc_simple_card_probe
(
struct
platform_device
*
pdev
)
{
struct
simple_card_data
*
priv
;
...
...
@@ -577,7 +463,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
return
ret
;
err:
asoc_simple_card_
unref
(
&
priv
->
snd_card
);
asoc_simple_card_
clean_reference
(
&
priv
->
snd_card
);
return
ret
;
}
...
...
@@ -589,7 +475,7 @@ static int asoc_simple_card_remove(struct platform_device *pdev)
asoc_simple_card_remove_jack
(
&
priv
->
hp_jack
);
asoc_simple_card_remove_jack
(
&
priv
->
mic_jack
);
return
asoc_simple_card_
unref
(
card
);
return
asoc_simple_card_
clean_reference
(
card
);
}
static
const
struct
of_device_id
asoc_simple_of_match
[]
=
{
...
...
sound/soc/
sh/rcar/rsrc
-card.c
→
sound/soc/
generic/simple-scu
-card.c
View file @
81af7261
This diff is collapsed.
Click to expand it.
sound/soc/sh/Kconfig
View file @
81af7261
...
...
@@ -42,12 +42,6 @@ config SND_SOC_RCAR
help
This option enables R-Car SRU/SCU/SSIU/SSI sound support
config SND_SOC_RSRC_CARD
tristate "Renesas Sampling Rate Convert Sound Card"
select SND_SIMPLE_CARD_UTILS
help
This option enables simple sound if you need sampling rate convert
##
## Boards
##
...
...
sound/soc/sh/rcar/Makefile
View file @
81af7261
snd-soc-rcar-objs
:=
core.o gen.o dma.o adg.o ssi.o ssiu.o src.o ctu.o mix.o dvc.o cmd.o
obj-$(CONFIG_SND_SOC_RCAR)
+=
snd-soc-rcar.o
snd-soc-rsrc-card-objs
:=
rsrc-card.o
obj-$(CONFIG_SND_SOC_RSRC_CARD)
+=
snd-soc-rsrc-card.o
sound/soc/sh/rcar/core.c
View file @
81af7261
...
...
@@ -110,6 +110,7 @@ MODULE_DEVICE_TABLE(of, rsnd_of_match);
/*
* rsnd_mod functions
*/
#ifdef DEBUG
void
rsnd_mod_make_sure
(
struct
rsnd_mod
*
mod
,
enum
rsnd_mod_type
type
)
{
if
(
mod
->
type
!=
type
)
{
...
...
@@ -120,6 +121,7 @@ void rsnd_mod_make_sure(struct rsnd_mod *mod, enum rsnd_mod_type type)
rsnd_mod_name
(
mod
),
rsnd_mod_id
(
mod
));
}
}
#endif
char
*
rsnd_mod_name
(
struct
rsnd_mod
*
mod
)
{
...
...
@@ -574,6 +576,7 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
switch
(
cmd
)
{
case
SNDRV_PCM_TRIGGER_START
:
case
SNDRV_PCM_TRIGGER_RESUME
:
rsnd_dai_stream_init
(
io
,
substream
);
ret
=
rsnd_dai_call
(
init
,
io
,
priv
);
...
...
@@ -590,6 +593,7 @@ static int rsnd_soc_dai_trigger(struct snd_pcm_substream *substream, int cmd,
break
;
case
SNDRV_PCM_TRIGGER_STOP
:
case
SNDRV_PCM_TRIGGER_SUSPEND
:
ret
=
rsnd_dai_call
(
irq
,
io
,
priv
,
0
);
ret
|=
rsnd_dai_call
(
stop
,
io
,
priv
);
...
...
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