]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - sound/soc/sh/rcar/rsrc-card.c
ASoC: rsrc-card: tidyup priv->snd_card setup timing
[mirror_ubuntu-bionic-kernel.git] / sound / soc / sh / rcar / rsrc-card.c
index a68517afe61596ce674582ba5170caff9a7b8cd9..cdd005b826600e7dd9f8b2b71aff24da30235b74 100644 (file)
@@ -55,11 +55,13 @@ struct rsrc_card_dai {
 #define RSRC_FB_NUM    2 /* FE/BE */
 #define IDX_CPU                0
 #define IDX_CODEC      1
+#define DAI_NAME_NUM   32
 struct rsrc_card_priv {
        struct snd_soc_card snd_card;
        struct rsrc_card_dai_props {
                struct rsrc_card_dai cpu_dai;
                struct rsrc_card_dai codec_dai;
+               char dai_name[DAI_NAME_NUM];
        } dai_props[RSRC_FB_NUM];
        struct snd_soc_codec_conf codec_conf;
        struct snd_soc_dai_link dai_link[RSRC_FB_NUM];
@@ -232,6 +234,7 @@ rsrc_card_sub_parse_of(struct rsrc_card_priv *priv,
        if (args_count) {
                *args_count = args.args_count;
                dai_link->dynamic = 1;
+               dai_link->dpcm_merged_format = 1;
        } else {
                dai_link->no_pcm = 1;
                priv->codec_conf.of_node = (*p_node);
@@ -308,7 +311,7 @@ static int rsrc_card_dai_link_of(struct device_node *node,
        struct rsrc_card_dai_props *dai_props = rsrc_priv_to_props(priv, idx);
        struct device_node *cpu = NULL;
        struct device_node *codec = NULL;
-       char *name;
+       char *name = dai_props->dai_name;
        char prop[128];
        int ret, cpu_args;
 
@@ -347,18 +350,10 @@ static int rsrc_card_dai_link_of(struct device_node *node,
        /* Simple Card assumes platform == cpu */
        dai_link->platform_of_node = dai_link->cpu_of_node;
 
-       /* DAI link name is created from CPU/CODEC dai name */
-       name = devm_kzalloc(dev,
-                           strlen(dai_link->cpu_dai_name)   +
-                           strlen(dai_link->codec_dai_name) + 2,
-                           GFP_KERNEL);
-       if (!name) {
-               ret = -ENOMEM;
-               goto dai_link_of_err;
-       }
-
-       sprintf(name, "%s-%s", dai_link->cpu_dai_name,
-               dai_link->codec_dai_name);
+       snprintf(name, DAI_NAME_NUM, "%s.%s",
+               dai_link->dynamic ? "fe" : "be",
+               dai_link->dynamic ? dai_link->cpu_dai_name :
+                                   dai_link->codec_dai_name);
        dai_link->name = dai_link->stream_name = name;
        dai_link->ops = &rsrc_card_ops;
        dai_link->init = rsrc_card_dai_init;
@@ -396,9 +391,9 @@ dai_link_of_err:
 }
 
 static int rsrc_card_parse_of(struct device_node *node,
-                             struct rsrc_card_priv *priv)
+                             struct rsrc_card_priv *priv,
+                             struct device *dev)
 {
-       struct device *dev = rsrc_priv_to_dev(priv);
        const struct rsrc_card_of_data *of_data = rsrc_dev_to_of_data(dev);
        int ret;
        int i;
@@ -409,7 +404,13 @@ static int rsrc_card_parse_of(struct device_node *node,
        /* Parse the card name from DT */
        snd_soc_of_parse_card_name(&priv->snd_card, "card-name");
 
-       /* DAPM routes */
+       /* Init snd_soc_card */
+       priv->snd_card.owner                    = THIS_MODULE;
+       priv->snd_card.dev                      = dev;
+       priv->snd_card.dai_link                 = priv->dai_link;
+       priv->snd_card.num_links                = RSRC_FB_NUM;
+       priv->snd_card.codec_conf               = &priv->codec_conf;
+       priv->snd_card.num_configs              = 1;
        priv->snd_card.of_dapm_routes           = of_data->routes;
        priv->snd_card.num_of_dapm_routes       = of_data->num_routes;
 
@@ -451,7 +452,6 @@ static int rsrc_card_unref(struct snd_soc_card *card)
 static int rsrc_card_probe(struct platform_device *pdev)
 {
        struct rsrc_card_priv *priv;
-       struct snd_soc_dai_link *dai_link;
        struct device_node *np = pdev->dev.of_node;
        struct device *dev = &pdev->dev;
        int ret;
@@ -461,16 +461,7 @@ static int rsrc_card_probe(struct platform_device *pdev)
        if (!priv)
                return -ENOMEM;
 
-       /* Init snd_soc_card */
-       priv->snd_card.owner = THIS_MODULE;
-       priv->snd_card.dev = dev;
-       dai_link = priv->dai_link;
-       priv->snd_card.dai_link = dai_link;
-       priv->snd_card.num_links = RSRC_FB_NUM;
-       priv->snd_card.codec_conf = &priv->codec_conf;
-       priv->snd_card.num_configs = 1;
-
-       ret = rsrc_card_parse_of(np, priv);
+       ret = rsrc_card_parse_of(np, priv, dev);
        if (ret < 0) {
                if (ret != -EPROBE_DEFER)
                        dev_err(dev, "parse error %d\n", ret);