Hi Sameer > > This is just an idea, > > but can we use hooks here somehow ? > > > > .ops_hook_pre > > .ops_hook_func > > .ops_hook_post > > > > if (priv->ops_hook_pre->func) > > priv->ops_hook_pre->func_pre(...); > > > > if (priv->ops_hook_func->func) > > priv->ops_hook_func->func(...); /* driver's function */ > > else > > graph_func(...); /* audio-graph function */ > > > > if (priv->ops_hook_post->func) > > priv->ops_hook_post->func(...); > > Right now I just required to populate some flags or structures and do > not have any specific pre()/post() functions to be called. Can this be > reserved for later? Yeah, of course :) > > These are almost same as graph_probe(). > > Maybe we can separate graph_probe() and export function ? > > Yes possible, I can move more stuff into graph_parse_of() which is > already an exported function in the current series. This can be > utilized by both generic audio graph and Tegra audio graph. > > Something like below, > > static int tegra_audio_graph_probe(struct platform_device *pdev) > { > struct tegra_audio_priv *priv; > struct device *dev = &pdev->dev; > struct snd_soc_card *card; > > priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); > if (!priv) > return -ENOMEM; > > card = simple_priv_to_card(&priv->simple); > > card->owner = THIS_MODULE; > card->dev = dev; > card->probe = tegra_audio_graph_card_probe; > > /* graph_parse_of() depends on below */ > card->component_chaining = 1; > priv->simple.ops = &tegra_audio_graph_ops; > priv->simple.force_dpcm = 1; > > return graph_parse_of(&priv->simple); > } I think graph side can handle card->owner / card->dev, but, it looks good to me Thank you for your help !! Best regards --- Kuninori Morimoto