Hi ALSA SoC My current headache is ALSA SoC's each modules (= Card/Codec/CPU/Platform) doesn't care about "unbind/rmmod". For example, if someone unbinded/rmmoded "Codec", Card or other modules doesn't know about it. Thus, user can continue to use this sound card, and kernel will be Oops. So, I would like to solve this issue, and for this purpose, now I'm investigating about ALSA SoC structures. It is now super complex, and I noticed that it is having duplicated struct members. If possible, I would like to cleanup this issue. During this investigating, I noticed 1 strange operation ${LINUX}/sound/soc/soc-core.c :: snd_soc_runtime_set_dai_fmt int snd_soc_runtime_set_dai_fmt(xxx) { ... /* Flip the polarity for the "CPU" end of a CODEC<->CODEC link */ if (cpu_dai->codec) { ... } ... } struct snd_soc_dai { ... /* parent platform/codec */ struct snd_soc_codec *codec; struct snd_soc_component *component; ... } According to snd_soc_dai, *codec is its "parent". I wonder does "cpu_dai" really can have "codec" parent ?? I think this is not correct, and we can remove this operation ?