[PATCH 06/13] ASoC: rsnd-dpcm-card: add .be_hw_params_fixup support for convert rate
From: Kuninori Morimoto <hidden>
Date: 2015-03-13 01:24:09
Also in:
alsa-devel
Subsystem:
open firmware and flattened device tree bindings, sound, sound - soc layer / dynamic audio power management (asoc), the rest · Maintainers:
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela, Takashi Iwai, Liam Girdwood, Mark Brown, Linus Torvalds
From: Kuninori Morimoto <redacted> 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 <redacted> --- .../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 f3e70bf..1470af3 100644
--- a/sound/soc/sh/rcar/rsnd-dpcm-card.c
+++ b/sound/soc/sh/rcar/rsnd-dpcm-card.c@@ -36,6 +36,7 @@ struct rdpcm_card_data { struct rdpcm_dai cpu_dai; struct rdpcm_dai codec_dai; } dai_props[RDPCM_FB_NUM]; + u32 convert_rate; struct snd_soc_dai_link dai_link[RDPCM_FB_NUM]; };
@@ -127,6 +128,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 device_node *np, struct rdpcm_dai *dai,
@@ -319,6 +335,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,
@@ -369,8 +388,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
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html