【问题标题】:Linux module not being matched with platform data correctlyLinux 模块与平台数据不正确匹配
【发布时间】:2014-02-24 19:49:38
【问题描述】:

我很难让 pca955x 模块与我的 pca9552 芯片正常工作。该模块从不实际运行探测功能。

我的平台数据

struct led_platform_data pca552_data = {
     .num_leds = 7,
};

static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {
     {
          I2C_BOARD_INFO("leds-pca955x", 0x61),
          .platform_data = &pca552_data,
     },
}

在我的初始化中调用

i2c_register_board_info(1, mxc_i2c1_board_info,
        ARRAY_SIZE(mxc_i2c1_board_info));

模块数据

static struct i2c_driver pca955x_driver = {
    .driver = {
        .name   = "leds-pca955x",
        .owner  = THIS_MODULE,
    },
    .probe  = pca955x_probe,
    .remove = __devexit_p(pca955x_remove),
    .id_table = pca955x_id,
};

我在内核中构建了模块。我知道那里有一个设备,因为我可以使用 i2c 工具来戳/读取和切换 LED。但是linux在找到设备时并没有初始化驱动程序。

据我了解,驱动程序名称应与板信息中的平台数据名称匹配。我有一个键盘驱动程序,它位于同一个 mxc_i2c1_board_info 中,运行良好。

【问题讨论】:

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


    【解决方案1】:

    您正在尝试使用驱动程序的名称作为设备 ID,支持的 ID 在驱动程序的.id_table 中给出,在您的情况下:

    static const struct i2c_device_id pca955x_id[] = {
        { "pca9550", pca9550 },
        { "pca9551", pca9551 },
        { "pca9552", pca9552 },
        { "pca9553", pca9553 },
        { }
    };
    

    因此,在您的情况下,将您的董事会信息更新为:

    static struct i2c_board_info mxc_i2c1_board_info[] __initdata = {
         {
              I2C_BOARD_INFO("pca9552", 0x61),
              .platform_data = &pca552_data,
         },
    }
    

    应该让驱动程序探测设备。

    【讨论】:

    猜你喜欢
    • 2022-08-11
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2022-08-17
    • 1970-01-01
    • 2021-03-30
    • 1970-01-01
    相关资源
    最近更新 更多