金牌会员
- 积分
- 1820
- 金钱
- 1820
- 注册时间
- 2019-7-23
- 在线时间
- 281 小时
|
10金钱
1、当设备匹配成功后,struct of_device_id中的data直针有什么用?
同一驱动代码,适应多个同类型的设备。但它们之间总是有一些差别,这些差别的数据就定义在of id match table的data中,当驱动匹配设备的时候,通过of_device_get_match_data()获取对应类型设备自身的数据。
2、host->devdata = &mxsfb_devdata[pdev->id_entry->driver_data]; 我发现这个pdev->id_entry指针指向了mxsfb_devtype[1],但是在 mxsfb_probe(struct platform_device *pdev)和platform中的match()函数里并未发现相关赋值操作。我想知道他们是在那里赋值的。
其中相关数据如下,图片没弄好,就上传文字了。
static const struct platform_device_id mxsfb_devtype[] = {
{
.name = "imx23-fb",
.driver_data = MXSFB_V3,
}, {
.name = "imx28-fb",
.driver_data = MXSFB_V4,
}, {
/* sentinel */
}
};
MODULE_DEVICE_TABLE(platform, mxsfb_devtype);
static const struct of_device_id mxsfb_dt_ids[] = {
{ .compatible = "fsl,imx23-lcdif", .data = &mxsfb_devtype[0], },
{ .compatible = "fsl,imx28-lcdif", .data = &mxsfb_devtype[1], },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, mxsfb_dt_ids);
static struct platform_driver mxsfb_driver = {
.probe = mxsfb_probe,
.remove = mxsfb_remove,
.shutdown = mxsfb_shutdown,
.id_table = mxsfb_devtype,
.driver = {
.name = DRIVER_NAME,
.of_match_table = mxsfb_dt_ids,
},
};
具体请参考 /drivers/video/fbdev/mxsfb.c
|
|