We use many global variables in asoc now, except defining two/multi groups of global variables to fulfill two/multi codecs work at the same time in one system, is there any other way?
On Tue, Oct 6, 2009 at 6:20 PM, Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Mon, Oct 05, 2009 at 08:18:03PM -0400, Mike Frysinger wrote:
am i doing something wrong or are the dev_* output functions kind of useless with ASoC codecs ? it seems like the error output is prefixed by the generic "soc-audio" but no info related to the exact codec is included.
You're missing something here.
as an example, the typical behavior is for the machine driver to call platform_device_alloc("soc-audio", -1). this struct device is then
This is the device for the ASoC card, not for the CODEC. The ASoC card is built up from several different devices, the main ones being the devices for the CPU and for the CODEC.
passed down to the relevant subsystem driver register/probe (i2c/spi/etc...) to the codec driver. these functions typically then set the snd_soc_codec's dev member to the allocated platform device.
No, nothing should ever be setting codec->dev to the soc-audio device. If anything is that's a bug and should be fixed. That should be set to whatever the device model struct device is for the CODEC, normally an I2C or SPI device.
if there are multiple codecs, things obviously fall apart quickly. the question is how to address this. werent there snd_* output funcs before ? or are those now deprecated/dead ? or perhaps we should
Those have never really been used within ASoC.
encourage people to stop doing platform_device_alloc("soc-audio") and start doing platform_device_alloc(snd_soc_card.name) ?
At some point, probably before the end of the year, it should be possible to have any device registered as the card. However, this is a separate issue to the device used for the CODEC itself.
also, there seems to be a semi-common bug in the codec/machine drivers where they dont actually initialize the dev member. perhaps it's time to upgrade the snd_soc_register_codec() check from a KERN_WARNING to a BUG_ON() ? clearly the current warning isnt getting its message through ...
That would make all the existing drivers instabuggy which isn't a helpful way of dealing with things. At some point where this becomes a blocker to doing further core work someone will have to go through and convert all the remaining CODEC drivers over to use the device model. The main problem here is that most of the affected CODEC drivers are essentially unmaintained.