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@0 { pcm0: endpoint { remote-endpoint = <&dsp_f0>; }; }; PCM1: port@1 { pcm1: endpoint { remote-endpoint = <&dai2>; }; }; }; }; dsp { compatible = "audio-graph-card2-dsp"; ports { /* Front End side */ port@0 { dsp_f0: endpoint { remote-endpoint = <&pcm0>; }; }; /* Back End side */ port@4 { dsp_b0: endpoint { remote-endpoint = <&dai0>; }; }; port@5 { dsp_b1: endpoint { remote-endpoint = <&dai1>; }; }; }; }; back-end { ports { port@0 { dai0: endpoint { remote-endpoint = <&dsp_b0>; }; }; port@1 { dai1: endpoint { remote-endpoint = <&dsp_b1>; }; }; }; }; codec { port { dai2: endpoint { remote-endpoint = <&pcm1>; }; }; }; Thank you for your help !! Best regards --- Kuninori Morimoto