#include <sound/soc-dai.h>
#include <sound/simple_card_utils.h>
-struct asoc_simple_card_of_data {
- const char *prefix;
- const struct snd_soc_dapm_route *routes;
- int num_routes;
-};
-
-static const struct of_device_id asoc_simple_card_of_match[] = {
- { .compatible = "renesas,rsrc-card", },
- { .compatible = "simple-scu-audio-card", },
- {},
-};
-MODULE_DEVICE_TABLE(of, asoc_simple_card_of_match);
-
-#define IDX_CPU 0
-#define IDX_CODEC 1
struct asoc_simple_card_priv {
struct snd_soc_card snd_card;
struct snd_soc_codec_conf codec_conf;
static int asoc_simple_card_parse_links(struct device_node *np,
struct asoc_simple_card_priv *priv,
+ unsigned int daifmt,
int idx, bool is_fe)
{
struct device *dev = simple_priv_to_dev(priv);
struct asoc_simple_dai *dai_props = simple_priv_to_props(priv, idx);
int ret;
- /* Parse TDM slot */
- ret = snd_soc_of_parse_tdm_slot(np,
- &dai_props->tx_slot_mask,
- &dai_props->rx_slot_mask,
- &dai_props->slots,
- &dai_props->slot_width);
- if (ret)
- return ret;
-
if (is_fe) {
int is_single_links = 0;
PREFIX "prefix");
}
+ ret = snd_soc_of_parse_tdm_slot(np,
+ &dai_props->tx_slot_mask,
+ &dai_props->rx_slot_mask,
+ &dai_props->slots,
+ &dai_props->slot_width);
+ if (ret)
+ return ret;
+
ret = asoc_simple_card_canonicalize_dailink(dai_link);
if (ret < 0)
return ret;
+ dai_link->dai_fmt = daifmt;
dai_link->dpcm_playback = 1;
dai_link->dpcm_capture = 1;
dai_link->ops = &asoc_simple_card_ops;
struct asoc_simple_card_priv *priv)
{
struct device *dev = simple_priv_to_dev(priv);
- struct snd_soc_dai_link *dai_link;
struct device_node *np;
unsigned int daifmt = 0;
int ret, i;
bool is_fe;
/* find 1st codec */
- i = 0;
- for_each_child_of_node(node, np) {
- dai_link = simple_priv_to_link(priv, i);
-
- if (strcmp(np->name, PREFIX "codec") == 0) {
- ret = asoc_simple_card_parse_daifmt(dev, node, np,
- PREFIX, &daifmt);
- if (ret < 0)
- return ret;
- break;
- }
- i++;
- }
+ np = of_get_child_by_name(node, PREFIX "codec");
+ if (!np)
+ return -ENODEV;
+
+ ret = asoc_simple_card_parse_daifmt(dev, node, np,
+ PREFIX, &daifmt);
+ if (ret < 0)
+ return ret;
i = 0;
for_each_child_of_node(node, np) {
- dai_link = simple_priv_to_link(priv, i);
- dai_link->dai_fmt = daifmt;
-
is_fe = false;
if (strcmp(np->name, PREFIX "cpu") == 0)
is_fe = true;
- ret = asoc_simple_card_parse_links(np, priv, i, is_fe);
+ ret = asoc_simple_card_parse_links(np, priv, daifmt, i, is_fe);
if (ret < 0)
return ret;
i++;
return asoc_simple_card_clean_reference(card);
}
+static const struct of_device_id asoc_simple_of_match[] = {
+ { .compatible = "renesas,rsrc-card", },
+ { .compatible = "simple-scu-audio-card", },
+ {},
+};
+MODULE_DEVICE_TABLE(of, asoc_simple_of_match);
+
static struct platform_driver asoc_simple_card = {
.driver = {
.name = "simple-scu-audio-card",
- .of_match_table = asoc_simple_card_of_match,
+ .of_match_table = asoc_simple_of_match,
},
.probe = asoc_simple_card_probe,
.remove = asoc_simple_card_remove,
module_platform_driver(asoc_simple_card);
MODULE_ALIAS("platform:asoc-simple-scu-card");
-MODULE_LICENSE("GPL");
+MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("ASoC Simple SCU Sound Card");
MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");