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驅動核心層中。

 

發佈了46 篇原創文章 · 獲贊 10 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章