[alsa-devel] [PATCH] ASoC: rsnd: stop all working stream when .remove
Takashi Iwai
tiwai at suse.de
Tue Sep 5 11:33:42 CEST 2017
On Tue, 05 Sep 2017 10:58:37 +0200,
Kuninori Morimoto wrote:
>
> 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.
Not only ASoC but also in all ALSA component generally.
The component-level hot unplug isn't implemented yet properly.
> 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 ?
Right. Unless we really want to support the hog-plug/unplug of each
component, it'd be more straightforward to do the full hot-unplug upon
every component unbind action.
> 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 ?
It belongs with the same thing. Basically you're tweaking clk per PCM
stream status. By handling the full hot-plug properly, the PCM stream
is assured to be stopped, thus you don't have to fiddle with clk in
the remove callback at all.
Takashi
More information about the Alsa-devel
mailing list