Hi Mark Thank you for your feedback > > To avoid Sound Card crash in (2) case, what we can do now is, add dirty > > flag on Sound Card, and avoid to open Sound Card. > > This patch solved this issue. > > I think this is a good direction to at least start to mitigate these > problems (which we really should be doing) and hopefully make it easier > to do further improvements in future. There's obviously more places > where we should be checking the flag (controls for example) but they can > be added later. One thing I would like to see is instead of setting the > flag directly when we see a problem call a function to do it. That way > if we want to improve things in the future we can do that without having > to update the callers again. I guess you are pointing about snd_soc_dapm_shutdown() in snd_soc_unregister_card() ? If so, I agree. Actually, I don't like this kind of adhoc handling. I want to explain about it. Order [1] Disable Sound Card -> Disable CPU/Codec/Platform or do nothing [2] Disable CPU/Codec/Platform -> Disable Card or do nothing Operation 1) shutdown all Card connected DAPM 2) cleanup Card resource. In case of order [1], operation 1) -> 2) is no problem, because all card connected DAPM exists on Card. But, in case of order [2], operation 1) will try to call disconnected DAPM. The DAPM disconnection from Card is done by snd_soc_dapm_free() which is called from soc_remove_component(). This soc_remove_component() will be called with "remove_order" from operation 2). One note is that reordering operation to 2) -> 1) will avoid this crash issue, but it is no meaning, because 1) will do nothing ;) Here, other solution is calling soc_remove_component() without "remove_order" or calling snd_soc_dapm_free() when CPU/Codec/Platform are disabled. But, 1 bad-point is that disabled CPU/Codec/Platform have no chance to be called about snd_soc_dapm_set_bias_level() (= 1) operation). Of course, adhoc function can solve this issue too. If you are OK, I can work for this idea and remove adhoc operation from snd_soc_unregister_card() Best regards --- Kuninori Morimoto