@@ -1,38 +1,35 @@
-Renesas Sampling Rate Convert Sound Card:
+ASoC simple DPCM 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-dpcm-audio-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.
@@ -57,18 +54,25 @@ Optional CPU/CODEC subnodes properties:
Example
sound {
- compatible = "renesas,rsrc-card,lager";
+ compatible = "simple-dpcm-audio-card";
+
+ 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>;
+
+ simple-audio-card,convert-rate = <48000>; /* see audio_clk_a */
- card-name = "rsnd-ak4643";
- format = "left_j";
- bitclock-master = <&sndcodec>;
- frame-master = <&sndcodec>;
+ simple-audio-card,prefix = "ak4642";
+ simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
+ "DAI0 Capture", "ak4642 Capture";
- sndcpu: cpu {
+ sndcpu: simple-audio-card,cpu {
sound-dai = <&rcar_sound>;
};
- sndcodec: codec {
+ sndcodec: simple-audio-card,codec {
sound-dai = <&ak4643>;
system-clock-frequency = <11289600>;
};
@@ -28,21 +28,8 @@ struct asoc_simple_card_of_data {
int num_routes;
};
-static const struct snd_soc_dapm_route routes_ssi0_ak4642[] = {
- {"ak4642 Playback", NULL, "DAI0 Playback"},
- {"DAI0 Capture", NULL, "ak4642 Capture"},
-};
-
-static const struct asoc_simple_card_of_data routes_of_ssi0_ak4642 = {
- .prefix = "ak4642",
- .routes = routes_ssi0_ak4642,
- .num_routes = ARRAY_SIZE(routes_ssi0_ak4642),
-};
-
static const struct of_device_id asoc_simple_card_of_match[] = {
- { .compatible = "renesas,rsrc-card,lager", .data = &routes_of_ssi0_ak4642 },
- { .compatible = "renesas,rsrc-card,koelsch", .data = &routes_of_ssi0_ak4642 },
- { .compatible = "renesas,rsrc-card", },
+ { .compatible = "simple-dpcm-audio-card", },
{},
};
MODULE_DEVICE_TABLE(of, asoc_simple_card_of_match);
@@ -64,6 +51,7 @@ struct asoc_simple_card_priv {
#define DAI "sound-dai"
#define CELL "#sound-dai-cells"
+#define PREFIX "simple-audio-card,"
static int asoc_simple_card_startup(struct snd_pcm_substream *substream)
{
@@ -157,10 +145,6 @@ static int asoc_simple_card_parse_links(struct device_node *np,
return ret;
} else {
- const struct asoc_simple_card_of_data *of_data;
-
- of_data = of_device_get_match_data(dev);
-
/* FE is dummy */
dai_link->cpu_of_node = NULL;
dai_link->cpu_dai_name = "snd-soc-dummy-dai";
@@ -178,17 +162,11 @@ static int asoc_simple_card_parse_links(struct device_node *np,
if (ret < 0)
return ret;
- /* additional name prefix */
- if (of_data) {
- priv->codec_conf.of_node = dai_link->codec_of_node;
- priv->codec_conf.name_prefix = of_data->prefix;
- } else {
- ret = asoc_simple_card_parse_card_prefix(&priv->snd_card,
- dai_link, &priv->codec_conf,
- "audio-");
- if (ret < 0)
- return ret;
- }
+ ret = asoc_simple_card_parse_card_prefix(&priv->snd_card,
+ dai_link, &priv->codec_conf,
+ PREFIX);
+ if (ret < 0)
+ return ret;
}
ret = asoc_simple_card_parse_tdm(np, dai_props);
@@ -236,9 +214,9 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
for_each_child_of_node(node, np) {
dai_link = simple_priv_to_link(priv, i);
- if (strcmp(np->name, "codec") == 0) {
+ if (strcmp(np->name, PREFIX "codec") == 0) {
ret = asoc_simple_card_parse_daifmt(dev, node, np,
- NULL, &daifmt);
+ PREFIX, &daifmt);
if (ret < 0)
return ret;
break;
@@ -252,7 +230,7 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
dai_link->dai_fmt = daifmt;
is_fe = false;
- if (strcmp(np->name, "cpu") == 0)
+ if (strcmp(np->name, PREFIX "cpu") == 0)
is_fe = true;
ret = asoc_simple_card_parse_links(np, priv, i, is_fe);
@@ -268,7 +246,6 @@ static int asoc_simple_card_parse_of(struct device_node *node,
struct asoc_simple_card_priv *priv,
struct device *dev)
{
- const struct asoc_simple_card_of_data *of_data = of_device_get_match_data(dev);
struct asoc_simple_dai *props;
struct snd_soc_dai_link *links;
int ret;
@@ -294,33 +271,29 @@ static int asoc_simple_card_parse_of(struct device_node *node,
priv->snd_card.codec_conf = &priv->codec_conf;
priv->snd_card.num_configs = 1;
- if (of_data) {
- priv->snd_card.of_dapm_routes = of_data->routes;
- priv->snd_card.num_of_dapm_routes = of_data->num_routes;
- } else {
- snd_soc_of_parse_audio_routing(&priv->snd_card,
- "audio-routing");
- }
+ ret = snd_soc_of_parse_audio_routing(&priv->snd_card, PREFIX "routing");
+ if (ret < 0)
+ return ret;
/* sampling rate convert */
- of_property_read_u32(node, "convert-rate", &priv->convert_rate);
+ of_property_read_u32(node, PREFIX "convert-rate", &priv->convert_rate);
/* channels transfer */
- of_property_read_u32(node, "convert-channels", &priv->convert_channels);
-
- dev_dbg(dev, "New rsrc-audio-card: %s\n",
- priv->snd_card.name ? priv->snd_card.name : "");
- dev_dbg(dev, "SRC : convert_rate %d\n", priv->convert_rate);
- dev_dbg(dev, "CTU : convert_channels %d\n", priv->convert_channels);
+ of_property_read_u32(node, PREFIX "convert-channels", &priv->convert_channels);
ret = asoc_simple_card_dai_link_of(node, priv);
if (ret < 0)
return ret;
- ret = asoc_simple_card_parse_card_name(&priv->snd_card, "card-");
+ ret = asoc_simple_card_parse_card_name(&priv->snd_card, PREFIX);
if (ret < 0)
return ret;
+ dev_dbg(dev, "New card: %s\n",
+ priv->snd_card.name ? priv->snd_card.name : "");
+ dev_dbg(dev, "convert_rate %d\n", priv->convert_rate);
+ dev_dbg(dev, "convert_channels %d\n", priv->convert_channels);
+
return 0;
}
@@ -363,7 +336,7 @@ static int asoc_simple_card_remove(struct platform_device *pdev)
static struct platform_driver asoc_simple_card = {
.driver = {
- .name = "renesas-src-audio-card",
+ .name = "simple-dpcm-audio-card",
.of_match_table = asoc_simple_card_of_match,
},
.probe = asoc_simple_card_probe,