From: Kuninori Morimoto <[email protected]>

Current rsnd-dpcm-card is supporting DPCM FE/BE sound card.
This patch adds .be_hw_params_fixup and enabled sampling convert rate.

Signed-off-by: Kuninori Morimoto <[email protected]>
---
v1 -> v2

 - no change

 .../bindings/sound/renesas,rsrc-card.txt           |  1 +
 sound/soc/sh/rcar/rsrc-card.c                      | 27 ++++++++++++++++++++--
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/Documentation/devicetree/bindings/sound/renesas,rsrc-card.txt 
b/Documentation/devicetree/bindings/sound/renesas,rsrc-card.txt
index 12e287e..c641550 100644
--- a/Documentation/devicetree/bindings/sound/renesas,rsrc-card.txt
+++ b/Documentation/devicetree/bindings/sound/renesas,rsrc-card.txt
@@ -28,6 +28,7 @@ Optional subnode properties:
                                          dai-link uses bit clock inversion.
 - frame-inversion                      : bool property. Add this if the
                                          dai-link uses frame clock inversion.
+- convert-rate                         : platform specified sampling rate 
convert
 
 Required CPU/CODEC subnodes properties:
 
diff --git a/sound/soc/sh/rcar/rsrc-card.c b/sound/soc/sh/rcar/rsrc-card.c
index 3baeab7..a68517a 100644
--- a/sound/soc/sh/rcar/rsrc-card.c
+++ b/sound/soc/sh/rcar/rsrc-card.c
@@ -63,6 +63,7 @@ struct rsrc_card_priv {
        } dai_props[RSRC_FB_NUM];
        struct snd_soc_codec_conf codec_conf;
        struct snd_soc_dai_link dai_link[RSRC_FB_NUM];
+       u32 convert_rate;
 };
 
 #define rsrc_priv_to_dev(priv) ((priv)->snd_card.dev)
@@ -154,6 +155,21 @@ static int rsrc_card_dai_init(struct snd_soc_pcm_runtime 
*rtd)
        return 0;
 }
 
+static int rsrc_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+                                       struct snd_pcm_hw_params *params)
+{
+       struct rsrc_card_priv *priv = snd_soc_card_get_drvdata(rtd->card);
+       struct snd_interval *rate = hw_param_interval(params,
+                                                     SNDRV_PCM_HW_PARAM_RATE);
+
+       if (!priv->convert_rate)
+               return 0;
+
+       rate->min = rate->max = priv->convert_rate;
+
+       return 0;
+}
+
 static int
 rsrc_card_sub_parse_of(struct rsrc_card_priv *priv,
                       struct device_node *np,
@@ -347,6 +363,9 @@ static int rsrc_card_dai_link_of(struct device_node *node,
        dai_link->ops = &rsrc_card_ops;
        dai_link->init = rsrc_card_dai_init;
 
+       if (idx == IDX_CODEC)
+               dai_link->be_hw_params_fixup = rsrc_card_be_hw_params_fixup;
+
        dev_dbg(dev, "\tname : %s\n", dai_link->stream_name);
        dev_dbg(dev, "\tcpu : %s / %04x / %d\n",
                dai_link->cpu_dai_name,
@@ -394,8 +413,12 @@ static int rsrc_card_parse_of(struct device_node *node,
        priv->snd_card.of_dapm_routes           = of_data->routes;
        priv->snd_card.num_of_dapm_routes       = of_data->num_routes;
 
-       dev_dbg(dev, "New rsrc-audio-card: %s\n", priv->snd_card.name ?
-               priv->snd_card.name : "");
+       /* sampling rate convert */
+       of_property_read_u32(node, "convert-rate", &priv->convert_rate);
+
+       dev_dbg(dev, "New rsrc-audio-card: %s (%d)\n",
+               priv->snd_card.name ? priv->snd_card.name : "",
+               priv->convert_rate);
 
        /* FE/BE */
        for (i = 0; i < RSRC_FB_NUM; i++) {
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to