[alsa-devel] [PATCH 04/12 v2] ASoC: rsnd-dpcm-card: add .be_hw_params_fixup support for convert rate
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Mon Mar 16 05:45:38 CET 2015
From: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
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 <kuninori.morimoto.gx at renesas.com>
---
v1 -> v2
- no change
.../bindings/sound/renesas,rsnd-dpcm-card.txt | 1 +
sound/soc/sh/rcar/rsnd-dpcm-card.c | 27 ++++++++++++++++++++--
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/Documentation/devicetree/bindings/sound/renesas,rsnd-dpcm-card.txt b/Documentation/devicetree/bindings/sound/renesas,rsnd-dpcm-card.txt
index c79fe72..23b45d7 100644
--- a/Documentation/devicetree/bindings/sound/renesas,rsnd-dpcm-card.txt
+++ b/Documentation/devicetree/bindings/sound/renesas,rsnd-dpcm-card.txt
@@ -30,6 +30,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/rsnd-dpcm-card.c b/sound/soc/sh/rcar/rsnd-dpcm-card.c
index 3381b9e..c2f2a3c 100644
--- a/sound/soc/sh/rcar/rsnd-dpcm-card.c
+++ b/sound/soc/sh/rcar/rsnd-dpcm-card.c
@@ -38,6 +38,7 @@ struct rdpcm_card_data {
} dai_props[RDPCM_FB_NUM];
struct snd_soc_codec_conf codec_conf;
struct snd_soc_dai_link dai_link[RDPCM_FB_NUM];
+ u32 convert_rate;
};
#define rdpcm_priv_to_dev(priv) ((priv)->snd_card.dev)
@@ -128,6 +129,21 @@ static int rdpcm_card_dai_init(struct snd_soc_pcm_runtime *rtd)
return 0;
}
+static int rdpcm_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
+ struct snd_pcm_hw_params *params)
+{
+ struct rdpcm_card_data *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
rdpcm_card_sub_parse_of(struct rdpcm_card_data *priv,
struct device_node *np,
@@ -322,6 +338,9 @@ static int rdpcm_card_dai_link_of(struct device_node *node,
dai_link->ops = &rdpcm_card_ops;
dai_link->init = rdpcm_card_dai_init;
+ if (idx == IDX_CODEC)
+ dai_link->be_hw_params_fixup = rdpcm_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,
@@ -372,8 +391,12 @@ static int rdpcm_card_parse_of(struct device_node *node,
return ret;
}
- dev_dbg(dev, "New rsnd-dpcm-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 rsnd-dpcm-card: %s (%d)\n",
+ priv->snd_card.name ? priv->snd_card.name : "",
+ priv->convert_rate);
/* FE/BE */
for (i = 0; i < RDPCM_FB_NUM; i++) {
--
1.9.1
More information about the Alsa-devel
mailing list