kernel/msm-5.4/techpack/display/msm/dsi/dsi_display.c
dsi_display_dev_probe(struct platform_device *pdev)
/* 创建一个单线程工作队列 */
1:create_singlethread_workqueue("dsi_dma_cmd_workq");
/* 提供DTS节点找到 display type */
2:display->display_type = of_get_property(pdev->dev.of_node,"label", NULL);
/* 判断是主显示还是外接显示 */
3:display->display_type = "primary";
if (!strcmp(display->display_type, "secondary"))
/* 通过解析boot_disp->name(UEFI中传递过来的name),然后拿到panel_node */
4: if (boot_disp->boot_disp_en) {
/* The panel name should be same as UEFI name index */
panel_node = of_find_node_by_name(mdp_node, boot_disp->name);
} else {
panel_node = of_parse_phandle(node,"qcom,dsi-default-panel", 0);
}
/* 初始化 */
5: dsi_display_init(display);
5.1:dsi_pwr_enable_regulator(&display->panel->power_info, true); /* 使能电压调节器 */
5.2:component_add(&pdev->dev, &dsi_display_comp_ops); /* 添加 dsi_display_bind 组件*/
static const struct component_ops dsi_display_comp_ops = {
.bind = dsi_display_bind,
.unbind = dsi_display_unbind,
};
5.3:static int dsi_display_bind(struct device *dev, struct device *master, void *data)
5.31:dsi_display_debugfs_init(display); /* 初始化debugfs */
/* "dump_info" "esd_trigger" "esd_check_mode" "cmd_sched_params" "misr_data"*/
/* to initialize panel driver */
5.32:dsi_panel_drv_init(display->panel, &display->host);
panel->panel_ops.pinctrl_init(panel); /* to init pinctrl */
panel->panel_ops.gpio_request(panel); /* request gpios */
panel->panel_ops.bl_register(panel); /* register backlight */
5.33:dsi_display_register_te_irq(display); /* if command panel to register te irq handler */
5.34:msm_register_vm_event(master, dev, &vm_event_ops, (void *)display);
list_add(&client_entry->list, &priv->vm_client_list); /*msm_drm_private msm_vm_client_entry */
struct msm_vm_ops vm_event_ops = {
.vm_get_io_resources = dsi_display_get_io_resources,
.vm_pre_hw_release = dsi_display_pre_release,
.vm_post_hw_acquire = dsi_display_pre_acquire,
};
SM4350_LCD_MIPI_Kernel_display_flow
于 2022-04-12 17:26:32 首次发布