我很难让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,
},
}
在我的init中调用
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中,工作正常。
答案 0 :(得分:1)
您正在尝试将驱动程序的名称用作设备ID,在您的情况下,驱动程序的.id_table
中会提供支持的ID:
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,
},
}
应该让驱动程序探测设备。