rockchip drm驱动的启动流程图:
第一阶段:
mipi_dsi_probe
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); //获取内存资源
dsi->irq = platform_get_irq(pdev, 0); //获取中断资源
dsi->pclk = devm_clk_get(dev, "pclk"); //获取pclk
dsi->regmap = devm_regmap_init_mmio(dev, regs, //初始化内存管理映射
ret = mipi_dphy_attach(dsi); //找到对应的phy
dphy->phy = devm_phy_optional_get(dev, "mipi_dphy"); //根据char找到dphy
ret = mipi_dsi_host_register(&dsi->dsi_host); //注册dsi host
of_mipi_dsi_device_add(host, node); //建立dsi device 结构体
component_add(dev, &dw_mipi_dsi_ops); //将mipi dsi 的componet 添加到list 中,供componet master调用其注册的回调函数dw_mipi_dsi_bind。
总结: mipi_dsi_probe 主要是将设备树中的资源解析出来 建立dsi dev ,最后完成component 框架的支持。
vop_probe
component_add(dev, &vop_component_ops); //将vop的componet添加到list中,供 componet master调用其注册的回调函数vop_bind。
总结: vop_probe 就是添加了对component 框架的支持。
第二阶段:
rockchip_drm_platform_probe
port = of_parse_phandle(np, "ports", i); //遍历subsys 下的ports属性
component_match_add(dev, &match, compare_of, port->parent)