Merge remote-tracking branch 'sound/for-next'
[deliverable/linux.git] / sound / soc / generic / simple-card.c
index 8d0311ceded1b5c3a3fd3b413abaf567d4a5d50e..43295f02498239ef0578168f281f2856e38f6b5a 100644 (file)
@@ -308,48 +308,6 @@ asoc_simple_card_sub_parse_of(struct device_node *np,
        return 0;
 }
 
-static int asoc_simple_card_parse_daifmt(struct device_node *node,
-                                        struct simple_card_data *priv,
-                                        struct device_node *codec,
-                                        char *prefix, int idx)
-{
-       struct snd_soc_dai_link *dai_link = simple_priv_to_link(priv, idx);
-       struct device *dev = simple_priv_to_dev(priv);
-       struct device_node *bitclkmaster = NULL;
-       struct device_node *framemaster = NULL;
-       unsigned int daifmt;
-
-       daifmt = snd_soc_of_parse_daifmt(node, prefix,
-                                        &bitclkmaster, &framemaster);
-       daifmt &= ~SND_SOC_DAIFMT_MASTER_MASK;
-
-       if (strlen(prefix) && !bitclkmaster && !framemaster) {
-               /*
-                * No dai-link level and master setting was not found from
-                * sound node level, revert back to legacy DT parsing and
-                * take the settings from codec node.
-                */
-               dev_dbg(dev, "Revert to legacy daifmt parsing\n");
-
-               daifmt = snd_soc_of_parse_daifmt(codec, NULL, NULL, NULL) |
-                       (daifmt & ~SND_SOC_DAIFMT_CLOCK_MASK);
-       } else {
-               if (codec == bitclkmaster)
-                       daifmt |= (codec == framemaster) ?
-                               SND_SOC_DAIFMT_CBM_CFM : SND_SOC_DAIFMT_CBM_CFS;
-               else
-                       daifmt |= (codec == framemaster) ?
-                               SND_SOC_DAIFMT_CBS_CFM : SND_SOC_DAIFMT_CBS_CFS;
-       }
-
-       dai_link->dai_fmt = daifmt;
-
-       of_node_put(bitclkmaster);
-       of_node_put(framemaster);
-
-       return 0;
-}
-
 static int asoc_simple_card_dai_link_of(struct device_node *node,
                                        struct simple_card_data *priv,
                                        int idx,
@@ -361,7 +319,6 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
        struct device_node *cpu = NULL;
        struct device_node *plat = NULL;
        struct device_node *codec = NULL;
-       char *name;
        char prop[128];
        char *prefix = "";
        int ret, cpu_args;
@@ -386,8 +343,8 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
                goto dai_link_of_err;
        }
 
-       ret = asoc_simple_card_parse_daifmt(node, priv,
-                                           codec, prefix, idx);
+       ret = asoc_simple_card_parse_daifmt(dev, node, codec,
+                                           prefix, &dai_link->dai_fmt);
        if (ret < 0)
                goto dai_link_of_err;
 
@@ -422,19 +379,13 @@ static int asoc_simple_card_dai_link_of(struct device_node *node,
        if (!dai_link->platform_of_node)
                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;
+       ret = asoc_simple_card_set_dailink_name(dev, dai_link,
+                                               "%s-%s",
+                                               dai_link->cpu_dai_name,
+                                               dai_link->codec_dai_name);
+       if (ret < 0)
                goto dai_link_of_err;
-       }
 
-       sprintf(name, "%s-%s", dai_link->cpu_dai_name,
-                               dai_link->codec_dai_name);
-       dai_link->name = dai_link->stream_name = name;
        dai_link->ops = &asoc_simple_card_ops;
        dai_link->init = asoc_simple_card_dai_init;
 
@@ -476,9 +427,6 @@ static int asoc_simple_card_parse_of(struct device_node *node,
        if (!node)
                return -EINVAL;
 
-       /* Parse the card name from DT */
-       snd_soc_of_parse_card_name(&priv->snd_card, PREFIX "name");
-
        /* The off-codec widgets */
        if (of_property_read_bool(node, PREFIX "widgets")) {
                ret = snd_soc_of_parse_audio_simple_widgets(&priv->snd_card,
@@ -500,9 +448,6 @@ static int asoc_simple_card_parse_of(struct device_node *node,
        if (ret == 0)
                priv->mclk_fs = val;
 
-       dev_dbg(dev, "New simple-card: %s\n", priv->snd_card.name ?
-               priv->snd_card.name : "");
-
        /* Single/Muti DAI link(s) & New style of DT node */
        if (of_get_child_by_name(node, PREFIX "dai-link")) {
                struct device_node *np = NULL;
@@ -525,8 +470,9 @@ static int asoc_simple_card_parse_of(struct device_node *node,
                        return ret;
        }
 
-       if (!priv->snd_card.name)
-               priv->snd_card.name = priv->snd_card.dai_link->name;
+       ret = asoc_simple_card_parse_card_name(&priv->snd_card, PREFIX);
+       if (ret)
+               return ret;
 
        return 0;
 }
This page took 0.02578 seconds and 5 git commands to generate.