More Generic Audio Graph Sound Card idea
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Tue Aug 25 08:35:18 CEST 2020
Hi Sameer
> If we plan to go this way, I think we need to consider board specific
> configuration at init time and one at runtime. In that case there
> could be multiple compatibles that would get added to the driver and
> various other requirements can be managed with behavioral flags
> instead from DT?
This is still just idea though...
But for example, if you want to
1) basically, DT is almost audio-graph
2) but want to have customized operation for some part
And if "audio-graph-card2" driver has graph_init() exported function,
you can create your own drviver, and use customized audio-graph
by using .hooks.
This is just idea/sample, but I'm not sure this is enough or not,
and/or if I can do what I want.
But do you think it can solve your issue ?
-- own driver ---
static const struct of_device_id graph_of_match[] = {
=> { .compatible = "sameer-audio-graph" },
{},
};
static audio_graph_hooks hooks = {
.parse_of_hook_pre = xxx,
=> .parse_of_hook_post = sameer_parse_of_post,
.dai_link_of_pre = xxx,
.dai_link_of_post = xxx,
=> .init = sameer_init,
...
};
=> int sameer_init(struct snd_soc_pcm_runtime *rtd)
{
/*
* This will be called runtime init timing.
* Call original asoc_simple_dai_init() first
* and do own init, for example.
*/
asoc_simple_dai_init(rtd);
do_something_own_settings(rtd->xxx);
}
=> static int sameer_parse_of_post(struct asoc_simple_priv *priv)
{
struct sameer_priv *my_priv = graph_priv_to_my_priv(priv);
/*
* This will be called after audio_graph's graph_parse_of()
*/
/*
* Customize own settings here.
*
* Special connection ?
* Special Setings ?
* Calculate something ?
* Overwrite something ?
*/
}
static int sameer_probe(...)
{
struct sameer_priv *my_priv;
struct asoc_simple_priv *graph_priv;
my_priv = zalloc();
graph_priv = my_priv_to_graph_priv(my_priv);
=> graph_priv->hooks = hooks
/*
* Basically, it will do same as audio_graph,
* but .hooks will be called if you specified
*/
=> return graph_init(graph_priv);
}
--- Kconfig ----
config SND_SAMEER_AUDIO_GRAPH_CARD
tristate "Sameer's Audio Graph sound card support"
=> depends on SND_AUDIO_GRAPH_CARD
...
---- my-dt ----------
/*
* DT setting is almost same as audio_graph
* which is supporting normal and DPCM.
* You can add own property which will be handled under .hook
*/
*************
PCM0 <------------> * * <----DAI0----->
* DSP *
* * <----DAI1----->
*************
PCM1 <------------------------------------------> DAI2
sound {
compatible = "sameer-audio-graph";
dais = <&PCM0, /* for DPCM */
&PCM1> /* for normal*/
};
front-end {
ports {
PCM0: port at 0 { pcm0: endpoint { remote-endpoint = <&dsp_f0>; }; };
PCM1: port at 1 { pcm1: endpoint { remote-endpoint = <&dai2>; }; };
};
};
dsp {
compatible = "audio-graph-card2-dsp";
ports {
/* Front End side */
port at 0 { dsp_f0: endpoint { remote-endpoint = <&pcm0>; }; };
/* Back End side */
port at 4 { dsp_b0: endpoint { remote-endpoint = <&dai0>; }; };
port at 5 { dsp_b1: endpoint { remote-endpoint = <&dai1>; }; };
};
};
back-end {
ports {
port at 0 { dai0: endpoint { remote-endpoint = <&dsp_b0>; }; };
port at 1 { dai1: endpoint { remote-endpoint = <&dsp_b1>; }; };
};
};
codec {
port { dai2: endpoint { remote-endpoint = <&pcm1>; }; };
};
Thank you for your help !!
Best regards
---
Kuninori Morimoto
More information about the Alsa-devel
mailing list