Hi Kai
Thank you for your feedback
int snd_soc_component_open(struct snd_soc_component *component, » » » struct snd_pcm_substream *substream)
(snip)
int snd_soc_component_prepare(struct snd_soc_component *component, » » » struct snd_pcm_substream *substream) { » if (component->driver->prepare) » » return component->driver->prepare(component, substream); » return 0; }
I guess you are thinking more big scale tracking/solution (?). Indeed it is needed, but my indicated one is not for it. It is just for "we want to use soc_pcm_close() as soc_pcm_open() error handling".
int soc_pcm_open(...) { static u8 id;
/* update ID */ id++; if (id == 0) id++;
... this really isn't solid. If you have a complex scenario and something goes wrong, debugging the ids is going to be painful if they are assigned this way.
Maybe the naming of "ID" makes you confused ? It is just "mark" for this "soc_pcm_open()". If error happen during open, "error handling soc_pcm_close()" cares only this mark. It is just for avoiding mismatch close.
Your big scale tracking (open/prepare/...) is maybe next step / more advanced problem. My got feeling is that it is similar to SND_SOC_DPCM_STATE_xxx ?
Thank you for your help !! Best regards --- Kuninori Morimoto