Hi Takashi-san
Thank you for your feedback
Right, you can't cancel or return an error at that point. That is, you'd need to sync (wait) until the all top-level operations are canceled at remove callback.
For example, snd_card_free() processes the disconnection procedure at first, then waits for the completion. That's how the hot-unplug works safely. It's implemented, at least, in the top-level driver removal.
Now for the lower level driver, you'd need a similar strategy; notify to the toplevel for hot-unplug (disconnect in ALSA), and sync with the stop operation, then continue the rest of its own remove procedure.
OK, it needs ALSA SoC framework side new feature. But can I confirm current situation ?
In ALSA SoC, it has Card/CPU/Codec/Platform drivers, and we can unbind these randomly. Now, if I unbind CPU first, it checks connected Card, and will disconnect it if needed (Then, other drivers are as-is). Because of this, Card will be disconnected automatically, and we can't use it again if user didn't remove all other remaining drivers and re-bind all drivers again. This is current ALSA SoC I think.
If my understanding was correct, your idea is that we want to call remove function for all connected drivers somehow. And then, Card want to wait all drivers are removed. Correct ?
I'm happy to work for it. But adding new unplug feature is for sync with all "drivers", and this patch is sync for "clk" for my CPU driver. Can we separate these ?
Morimoto