ASoC: rsrc-card: add convert channels support
Renesas sound device has CTU (= Channel Transfer Unit), and sound card needs its support. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:

committed by
Mark Brown

parent
d728956548
commit
f90432fc6e
@@ -30,6 +30,7 @@ Optional subnode properties:
|
|||||||
- frame-inversion : bool property. Add this if the
|
- frame-inversion : bool property. Add this if the
|
||||||
dai-link uses frame clock inversion.
|
dai-link uses frame clock inversion.
|
||||||
- convert-rate : platform specified sampling rate convert
|
- convert-rate : platform specified sampling rate convert
|
||||||
|
- convert-channels : platform specified channel size convert
|
||||||
- audio-prefix : see audio-routing
|
- audio-prefix : see audio-routing
|
||||||
- audio-routing : A list of the connections between audio components.
|
- audio-routing : A list of the connections between audio components.
|
||||||
Each entry is a pair of strings, the first being the connection's sink,
|
Each entry is a pair of strings, the first being the connection's sink,
|
||||||
|
@@ -66,6 +66,7 @@ struct rsrc_card_priv {
|
|||||||
struct snd_soc_dai_link *dai_link;
|
struct snd_soc_dai_link *dai_link;
|
||||||
int dai_num;
|
int dai_num;
|
||||||
u32 convert_rate;
|
u32 convert_rate;
|
||||||
|
u32 convert_channels;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define rsrc_priv_to_dev(priv) ((priv)->snd_card.dev)
|
#define rsrc_priv_to_dev(priv) ((priv)->snd_card.dev)
|
||||||
@@ -144,11 +145,16 @@ static int rsrc_card_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
|||||||
struct rsrc_card_priv *priv = snd_soc_card_get_drvdata(rtd->card);
|
struct rsrc_card_priv *priv = snd_soc_card_get_drvdata(rtd->card);
|
||||||
struct snd_interval *rate = hw_param_interval(params,
|
struct snd_interval *rate = hw_param_interval(params,
|
||||||
SNDRV_PCM_HW_PARAM_RATE);
|
SNDRV_PCM_HW_PARAM_RATE);
|
||||||
|
struct snd_interval *channels = hw_param_interval(params,
|
||||||
|
SNDRV_PCM_HW_PARAM_CHANNELS);
|
||||||
|
|
||||||
if (!priv->convert_rate)
|
if (priv->convert_rate)
|
||||||
return 0;
|
rate->min =
|
||||||
|
rate->max = priv->convert_rate;
|
||||||
|
|
||||||
rate->min = rate->max = priv->convert_rate;
|
if (priv->convert_channels)
|
||||||
|
channels->min =
|
||||||
|
channels->max = priv->convert_channels;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -436,9 +442,13 @@ static int rsrc_card_parse_of(struct device_node *node,
|
|||||||
/* sampling rate convert */
|
/* sampling rate convert */
|
||||||
of_property_read_u32(node, "convert-rate", &priv->convert_rate);
|
of_property_read_u32(node, "convert-rate", &priv->convert_rate);
|
||||||
|
|
||||||
dev_dbg(dev, "New rsrc-audio-card: %s (%d)\n",
|
/* channels transfer */
|
||||||
priv->snd_card.name ? priv->snd_card.name : "",
|
of_property_read_u32(node, "convert-channels", &priv->convert_channels);
|
||||||
priv->convert_rate);
|
|
||||||
|
dev_dbg(dev, "New rsrc-audio-card: %s\n",
|
||||||
|
priv->snd_card.name ? priv->snd_card.name : "");
|
||||||
|
dev_dbg(dev, "SRC : convert_rate %d\n", priv->convert_rate);
|
||||||
|
dev_dbg(dev, "CTU : convert_channels %d\n", priv->convert_channels);
|
||||||
|
|
||||||
ret = rsrc_card_dai_link_of(node, priv);
|
ret = rsrc_card_dai_link_of(node, priv);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
Reference in New Issue
Block a user