On Fri, 31 May 2013, Takashi Iwai wrote:
I don't see the complexity/hell in adding functions for specific types of struct * to reduce the complexity of the code though. Centralizing those indirections into functions also generally reduces overall code size.
I don't mind to add the struct pointer to new snd_*() -- if we really introduce them. The bigger question is whether we really need to introduce such, and if yes, what variants. And for that, I don't think we need to add many functions. Maybe snd_card_<level>() would be good. But others don't seem to make sense to me (remember that I suggest dropping CONFIG_SND_VERBOSE_PRINTK).
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.
I guess defining snd_card_*() to use card->card_dev makes the most sense. If some code wants to use card->dev instead, it can pass that as the first argument to dev_*().
The most commonly used levels seem to be err, warn, info, and dbg. Those ought to be enough. In fact, you probably could getting along without warn -- just err, info, and dbg.
Alan Stern