hi
I'm trying to get audio working on the TI AM3517EVM (which uses the
tlv320aic23) on the 2.6.37, and I get the following error message while trying
to bind:
CODEC tlv320aic23-codec not registered
This is despite of the having gotten this msg before:
Registered codec 'tlv320aic23-codec.2-001a'
Digging deeper and putting a printk in soc_bind_dai_link(),I realized that
while finding this codec from the registered codecs, the names were not
matching:
soc_bind_dai_link:1249:codec->name is tlv320aic23-codec.2-001a,
dai_link->codec_name is tlv320aic23-codec
Now, I realized that earlier while calling snd_soc_register_codec() from
tlv320aic23_codec_probe(), the dev is passed in as the i2c client device and
the name of this device is 2-001a (I2C ID 0x1a on i2c bus 2), this I think is
the name generated by the i2c client from the following board-info entry (in
arch/arm/mach-omap2/board-am3517evm.c) :
static struct i2c_board_info __initdata am3517evm_i2c2_boardinfo[] = {
{
I2C_BOARD_INFO("tlv320aic23", 0x1A),
},
Now, when assigning the name to the codec through fmt_single_name(), the else
of the following is getting taken:
found = strstr(name, dev->driver->name);
if (found) {
:
} else {
:
snprintf(tmp, NAME_SIZE, "%s.%s", dev->driver->name, name);
:
This prepends the driver name (I,e. tlv320aic23-codec) to the device name (
2-001a) and registers the codec with that name. While, during
snd_soc_register_card(),dai_link->codec_name is taken from its init value in
sound/soc/omap/am3517evm.c :
static struct snd_soc_dai_link am3517evm_dai = {
:
.codec_name = "tlv320aic23-codec",
:
};
Now, this whole sequence used to work fine on 2.6.32. So, my question is
where/why is this change that automatically assigns the device ID, because of
which the else in the "if (found)" tends to be taken and finally there is a
name mismatch.
On Omap3 EVM (which uses the TWL4030 codec - sound/soc/codecs/twl4030.c), this
works fine as:
snd_soc_register_codec(&pdev->dev, &soc_codec_dev_twl4030,
twl4030_dai, ARRAY_SIZE(twl4030_dai));
Is called instead of
snd_soc_register_codec(&i2c->dev,
&soc_codec_dev_tlv320aic23, &tlv320aic23_dai, 1);
as in tlv320aic23 (sound/soc/codecs/tlv320aic23.c).
If I force the names to match (e,g. by appending 2-001a to
am3517evm_dai.codec_name) - the card gets registered and I can see the device
nodes getting created.
-Abhilash
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html