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

Reply via email to