sound / soc / codec i2c驱动程序不会探测

时间:2014-01-10 11:15:06

标签: c linux linux-kernel linux-device-driver

我正在sound/soc/codecs写一个音频编解码器。它编译和init函数调用,但probe()函数不调用。 我尝试了这个SO question建议,但没有成功。

我还尝试切换到sgtl5000.c编解码器并将其包含在我的I2C_BOARD_INFO我的boardfile中,只是为了查看probe()函数是否会调用,而这也不是。

static struct i2c_board_info mxc_i2c0_board_info[] __initdata = {
    {
            I2C_BOARD_INFO("sgtl5000", 0x14),
    },
};

static const struct i2c_device_id sgtl5000_id[] = {
    {"sgtl5000", 0},
    {},
};

MODULE_DEVICE_TABLE(i2c, sgtl5000_id);

static struct i2c_driver sgtl5000_i2c_driver = {
    .driver = {
               .name = "sgtl5000",
               .owner = THIS_MODULE,
               },
    .probe = sgtl5000_i2c_probe,
    .remove = __devexit_p(sgtl5000_i2c_remove),
    .id_table = sgtl5000_id,
};

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

你是否在你的电路板文件中使用类似“i2c_register_board_info”的东西注册你的i2c_device。(我无法直接评论这个问题,因为它需要50个声誉来获得这个特权所以我唯一的选择是回答这个问题来分享我的视图)。

答案 1 :(得分:0)

发现问题。我正在使用'sabresd'板文件。来自mx6_sabresd_board_init的此代码段覆盖了mxc_i2c0_board_info的第一个元素:

if (board_is_mx6_reva()) {
            strcpy(mxc_i2c0_board_info[0].type, "wm8958");
            mxc_i2c0_board_info[0].platform_data = &wm8958_config_data;
    } else {
            strcpy(mxc_i2c0_board_info[0].type, "wm8962");
            mxc_i2c0_board_info[0].platform_data = &wm8962_config_data;
}