ASoC: rsrc-card: enable to use tdm_slot on DT
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 17 Dec 2015 02:48:23 +0000 (02:48 +0000)
committerMark Brown <broonie@kernel.org>
Thu, 17 Dec 2015 12:14:31 +0000 (12:14 +0000)
Renesas sound driver will use tdm slot on TDM Multi Mode support.
This patch enables tdm slot on rsrc card driver on DT.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sh/rcar/rsrc-card.c

index a3ec13f6271eccdb965c49e167097aac2b83a062..3c308e2d696e377f35f13ea87857915d11c6859c 100644 (file)
@@ -50,6 +50,10 @@ MODULE_DEVICE_TABLE(of, rsrc_card_of_match);
 struct rsrc_card_dai {
        unsigned int fmt;
        unsigned int sysclk;
+       unsigned int tx_slot_mask;
+       unsigned int rx_slot_mask;
+       int slots;
+       int slot_width;
        struct clk *clk;
        char dai_name[DAI_NAME_NUM];
 };
@@ -126,6 +130,18 @@ static int rsrc_card_dai_init(struct snd_soc_pcm_runtime *rtd)
                }
        }
 
+       if (dai_props->slots) {
+               ret = snd_soc_dai_set_tdm_slot(dai,
+                                              dai_props->tx_slot_mask,
+                                              dai_props->rx_slot_mask,
+                                              dai_props->slots,
+                                              dai_props->slot_width);
+               if (ret && ret != -ENOTSUPP) {
+                       dev_err(dai->dev, "set_tdm_slot error\n");
+                       goto err;
+               }
+       }
+
        ret = 0;
 
 err:
@@ -198,6 +214,15 @@ static int rsrc_card_parse_links(struct device_node *np,
        if (ret)
                return 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) {
                /* BE is dummy */
                dai_link->codec_of_node         = NULL;