imx6q——lvds显示学习与理解

首先,内核在启动时会注册一个platform_device

在最后调用imx_add_platform_device       name = "mxc_ldb"

//调用过程
static void __init mx6_qcorein_board_init(void)
	imx6q_add_ldb(&ldb_data);
		imx_add_ldb(&imx6q_ldb_data, ldb_data);
			return imx_add_platform_device("mxc_ldb", -1,res, ARRAY_SIZE(res), pdata, sizeof(*pdata));

接下来就是driver端了。

kernel_imx/drivers/video/mxc/ldb.c 
    __init ldb_init(void)
        platform_driver_register(&mxcldb_driver)
    匹配成功后,调用probe函数。
    先看数据结构:

ldb_probe(struct platform_device *pdev)
		struct ldb_data *ldb;
		ldb = kzalloc(sizeof(struct ldb_data), GFP_KERNEL);
		ldb->pdev = pdev;
		ldb->disp_ldb = mxc_dispdrv_register(&ldb_drv);
			struct mxc_dispdrv_entry *new;
			new = kzalloc(sizeof(struct mxc_dispdrv_entry), GFP_KERNEL);
			new->drv = drv;
			list_add_tail(&new->list, &dispdrv_list);
			return (struct mxc_dispdrv_handle *)new;
		mxc_dispdrv_setdata(ldb->disp_ldb, ldb);
			struct mxc_dispdrv_entry *entry = (struct mxc_dispdrv_entry *)handle;
			if (entry) {
				entry->priv = data;
				return 0;
			}
		dev_set_drvdata(&pdev->dev, ldb);
			(!pdev->dev->p){
				error = device_private_init(dev);
				if (error)
					return error;
			}
			pdev->dev->p->driver_data = ldb;
			return 0;

然后:看看哪里调用它了。

梳理一下涉及文件:

1、ldb.c是LVDS 驱动的具体实现过程。
2、mxc_dispdrv.c 通用注册handle接口
3、mxc_ipuv3_fb.c 是imx6具体显示模块平台核心的驱动,最终用于把fb_info结构体注册到framebuffer驱动核心层中。

猜你喜欢

转载自blog.csdn.net/qq543716996/article/details/103271122
今日推荐