ASoC: simpe-card/audio-graph fixups
Merge series from Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>: These are simpe-card/audio-graph fixup patches.
This commit is contained in:
Коммит
c2c60eafb2
|
@ -173,8 +173,6 @@ void asoc_simple_canonicalize_cpu(struct snd_soc_dai_link_component *cpus,
|
|||
|
||||
void asoc_simple_clean_reference(struct snd_soc_card *card);
|
||||
|
||||
void asoc_simple_convert_fixup(struct asoc_simple_data *data,
|
||||
struct snd_pcm_hw_params *params);
|
||||
void asoc_simple_parse_convert(struct device_node *np, char *prefix,
|
||||
struct asoc_simple_data *data);
|
||||
bool asoc_simple_is_convert_required(const struct asoc_simple_data *data);
|
||||
|
|
|
@ -49,10 +49,13 @@
|
|||
* +-+ +-+
|
||||
*
|
||||
* [DPCM]
|
||||
*
|
||||
* CPU3/CPU4 are converting rate to 44100
|
||||
*
|
||||
* FE BE
|
||||
* ****
|
||||
* cpu3 <-@--* *--@-> codec3
|
||||
* cpu4 <-@--* *
|
||||
* cpu4 <-@--* * (44.1kHz)
|
||||
* ****
|
||||
*
|
||||
* [DPCM-Multi]
|
||||
|
@ -286,7 +289,10 @@
|
|||
port@2 { codec2_ep: endpoint { remote-endpoint = <&mcodec2_ep>; }; };
|
||||
|
||||
/* [DPCM]::BE */
|
||||
port@3 { codec3_ep: endpoint { remote-endpoint = <&be00_ep>; }; };
|
||||
port@3 {
|
||||
convert-rate = <44100>;
|
||||
codec3_ep: endpoint { remote-endpoint = <&be00_ep>; };
|
||||
};
|
||||
|
||||
/* [DPCM-Multi]::BE */
|
||||
port@4 { codec4_ep: endpoint { remote-endpoint = <&mbe1_ep>; }; };
|
||||
|
|
|
@ -849,7 +849,8 @@ int audio_graph2_link_dpcm(struct asoc_simple_priv *priv,
|
|||
goto err;
|
||||
}
|
||||
|
||||
graph_parse_convert(rep, dai_props);
|
||||
graph_parse_convert(ep, dai_props); /* at node of <dpcm> */
|
||||
graph_parse_convert(rep, dai_props); /* at node of <CPU/Codec> */
|
||||
|
||||
snd_soc_dai_link_set_capabilities(dai_link);
|
||||
|
||||
|
|
|
@ -41,27 +41,6 @@ static void asoc_simple_fixup_sample_fmt(struct asoc_simple_data *data,
|
|||
}
|
||||
}
|
||||
|
||||
void asoc_simple_convert_fixup(struct asoc_simple_data *data,
|
||||
struct snd_pcm_hw_params *params)
|
||||
{
|
||||
struct snd_interval *rate = hw_param_interval(params,
|
||||
SNDRV_PCM_HW_PARAM_RATE);
|
||||
struct snd_interval *channels = hw_param_interval(params,
|
||||
SNDRV_PCM_HW_PARAM_CHANNELS);
|
||||
|
||||
if (data->convert_rate)
|
||||
rate->min =
|
||||
rate->max = data->convert_rate;
|
||||
|
||||
if (data->convert_channels)
|
||||
channels->min =
|
||||
channels->max = data->convert_channels;
|
||||
|
||||
if (data->convert_sample_format)
|
||||
asoc_simple_fixup_sample_fmt(data, params);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(asoc_simple_convert_fixup);
|
||||
|
||||
void asoc_simple_parse_convert(struct device_node *np,
|
||||
char *prefix,
|
||||
struct asoc_simple_data *data)
|
||||
|
@ -522,8 +501,20 @@ int asoc_simple_be_hw_params_fixup(struct snd_soc_pcm_runtime *rtd,
|
|||
{
|
||||
struct asoc_simple_priv *priv = snd_soc_card_get_drvdata(rtd->card);
|
||||
struct simple_dai_props *dai_props = simple_priv_to_props(priv, rtd->num);
|
||||
struct asoc_simple_data *data = &dai_props->adata;
|
||||
struct snd_interval *rate = hw_param_interval(params, SNDRV_PCM_HW_PARAM_RATE);
|
||||
struct snd_interval *channels = hw_param_interval(params, SNDRV_PCM_HW_PARAM_CHANNELS);
|
||||
|
||||
asoc_simple_convert_fixup(&dai_props->adata, params);
|
||||
if (data->convert_rate)
|
||||
rate->min =
|
||||
rate->max = data->convert_rate;
|
||||
|
||||
if (data->convert_channels)
|
||||
channels->min =
|
||||
channels->max = data->convert_channels;
|
||||
|
||||
if (data->convert_sample_format)
|
||||
asoc_simple_fixup_sample_fmt(data, params);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче