On Fri, 31 May 2013, Takashi Iwai wrote:
struct snd_card contains pointers to two different devices: dev and card_dev. Some contexts might want to use one of them for log messages while other contexts might want to use the other.
Yes, there are some corner cases, indeed.
Also, another expected problem is that neither card->card_dev nor card->dev are set when snd_card_err() is called. Many drivers set the device pointers at the late stage just before the device registration. So, systematic replacements won't work as expected in many cases. (The same is applied for replacement with dev_*(), too.)
Given that the drivers would have to be edited to fix up the snd_printk calls, the device pointer assignments can be moved to an earlier stage at the same time. But doing this would require understanding how the driver works to some extent; it couldn't be done blindly.
Alan Stern