一、 LK进recovey阶段:
涉及相关文件:
fbdev/core/fbmem.c
fbdev/msm/mdss_fb.c
drivers/video/fbdev/msm/mdss_dsi.c
drivers/video/fbdev/msm/mdss_dsi_panel.c
drivers/leds/led-class.c
流程:主要是通过dev/fb节点的ioctl方法来实现控制:开启显示线程,复位、初始化、打开背光等操作。
fb_ioctl->do_fb_ioctl->Fb_blank->info->fbops->fb_blank=mdss_fb_blank ->
mdss_fb_blank->mdss_fb_blank_sub ->
进入recovery/ota升级时的流程:
- 亮屏:
- mdss_fb_blank_unblank
- ->mdss_fb_start_disp_thread
- ->mfd->mdp.on_fnc(mfd)=mdss_mdp_overlay_on
- ->__mdss_mdp_overlay_ctl_init
- ->mdss_mdp_ctl_intf_event(mdp5_data->ctl, MDSS_EVENT_RESET, NULL, false)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_mdp_overlay_start
- ->mdss_mdp_clk_ctrl
- ->mdss_mdp_ctl_start
- ->mdss_dsi_event_handler(MDSS_EVENT_REGISTER_RECOVERY_HANDLER)
- ->mdss_mdp_hist_intr_setup
- ->mdss_mdp_overlay_kickoff
- ->mdss_mdp_display_commit
- ->ctl->ops.display_fnc=mdss_mdp_video_display
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_dsi_on
- ->mdss_dsi_panel_power_ctrl
- ->mdss_dsi_panel_power_on
- ->mdss_dsi_pinctrl_set_state
- ->mdss_dsi_panel_reset
- ->mdss_dsi_phy_init
- ->mdss_dsi_phy_init_sub
- ->mdss_dsi_pinctrl_set_state
- ->mdss_dsi_panel_reset
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_dsi_unblank
- ->mdss_dsi_clk_ctrl
- ->ctrl_pdata->on=mdss_dsi_panel_on
- ->mdss_bdg_video_on
- ->bdg_data->ops.video_on
- ->mdss_dsi_panel_cmds_send
- ->mdss_dsi_panel_on_hdmi
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_POST_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_mdp_ctl_setup
- ->mdss_fb_set_backlight
- ->mdss_fb_scale_bl
- ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
- ->mdss_dsi_panel_bklt_pwm
主要是涉及关闭显示线程,下发off指令,释放硬件资源,关闭背光等。
- 灭屏:
- mdss_fb_blank_blank
- ->mdss_fb_stop_disp_thread
- ->mdss_fb_set_backlight
- ->(*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &ad_bl_notify_needed) = pp_ad_calc_bl
- ->mdss_fb_scale_bl
- ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl //背光控制
- ->mfd->mdp.off_fnc(mfd)=mdss_mdp_overlay_off
- ->mdss_mdp_overlay_kickoff
- ->mdss_mdp_overlay_start
- ->mdss_mdp_ctl_start
- ->mdss_mdp_hist_intr_setup(&mdata->hist_intr, MDSS_IRQ_RESUME)
- ->mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF)
- ->mdss_mdp_display_commit
- ->ctl->ops.display_fnc(ctl, arg)=mdss_mdp_video_display
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler=mdss_dsi_event_handler
- ->mdss_dsi_on
- ->mdss_dsi_panel_power_ctrl(pdata, MDSS_PANEL_POWER_ON)
- ->mdss_dsi_set_clk_src
- ->mdss_dsi_pinctrl_set_state
- ->mdss_dsi_panel_reset
- ->mdss_dsi_op_mode_config
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler=mdss_dsi_event_handler
- ->mdss_dsi_unblank
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler=mdss_dsi_event_handler
- ->mdss_dsi_unblank
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_POST_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler=mdss_dsi_event_handler
- ->mdss_dsi_post_panel_on
- ->mdss_mdp_ctl_stop
- ->ctl->ops.stop_fnc(ctl, power_state)=mdss_mdp_video_ctx_stop
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_BLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg) =mdss_dsi_event_handler
- ->mdss_dsi_blank
- ->ctrl_pdata->off(pdata)=mdss_dsi_panel_off
- ->mdss_bdg_video_on
- ->bdg_data->ops.video_on(on)=lt8911exb_video_on //桥接ic
- ->mdss_dsi_panel_cmds_send
- ->mdss_dsi_panel_off_hdmi
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_OFF, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_dsi_blank
- ->mdss_dsi_off
- ->mdss_dsi_controller_cfg
- ->mdss_dsi_phy_disable
- ->mdss_dsi_panel_power_ctrl
- ->mdss_dsi_panel_power_off
- ->mdss_dsi_panel_reset
- ->mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_TOP, 0)
- ->mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
- ->mdss_mdp_ctl_destroy
二、kernel部分LCD唤醒休眠流程
主要是开启显示线程,复位,、硬件初始化、控制背光等操作。
- 唤醒:
- fb_ioctl
- ->do_fb_ioctl
- ->fb_blank
- ->mdss_fb_blank
- ->mdss_fb_blank_sub
- ->mdss_fb_blank_unblank
- ->mdss_fb_start_disp_thread
- ->mfd->mdp.on_fnc=mdss_mdp_overlay_on
- ->mdss_mdp_ctl_intf_event(mdp5_data->ctl, MDSS_EVENT_RESET, NULL, false)
- ->mdss_mdp_overlay_start
- ->mdss_mdp_ctl_start
- ->mdss_mdp_ctl_start_sub
- ->mdss_mdp_hist_intr_setup
- ->mdss_mdp_ctl_split_display_enable
- ->mdss_mdp_hist_intr_setup
- ->mdss_mdp_ctl_notifier_register
- ->mdss_mdp_pp_resume
- ->mdss_mdp_splash_cleanup
- ->mdss_mdp_overlay_kickoff
- ->mdss_mdp_display_commit
- ->ctl->ops.display_fnc(ctl, arg)=mdss_mdp_video_display
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_dsi_on
- ->mdss_dsi_panel_power_ctrl
- ->mdss_dsi_panel_power_on
- ->mdss_dsi_pinctrl_set_state
- ->mdss_dsi_panel_reset
- ->mdss_dsi_clk_ctrl
- ->mdss_dsi_phy_init
- ->mdss_dsi_pinctrl_set_state
- ->mdss_dsi_panel_reset
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->mdss_dsi_unblank
- ->ctrl_pdata->on(pdata)=mdss_dsi_panel_on
- ->mdss_bdg_video_on
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_POST_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->mdss_fb_set_backlight
- ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
- ->mdss_dsi_panel_bklt_pwm
主要是先通过lcd-backlight节点的brightness_set方法关闭背光,再通过dev/fb节点的ioctl方法来停止显示线程,释放硬件资源。
- 休眠:
- brightness_set=mdss_fb_set_bl_brightness
- ->mdss_fb_set_backlight
- ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
- ->mdss_dsi_panel_bklt_pwm
- fb_ioctl
- ->do_fb_ioctl
- ->fb_blank
- ->mdss_fb_blank
- ->mdss_fb_blank_sub
- ->mdss_fb_blank_blank
- ->mdss_fb_stop_disp_thread
- ->mdss_fb_set_backlight
- ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
- ->mfd->mdp.off_fnc=mdss_mdp_overlay_off
- ->mdss_mdp_ctl_stop
- ->mdss_mdp_hist_intr_setup
- ->ctl->ops.stop_fnc(ctl, power_state)=mdss_mdp_video_ctx_stop
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_BLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_dsi_blank
- ->ctrl_pdata->off(pdata)
- ->mdss_dsi_panel_off
- ->mdss_bdg_video_on
- ->mdss_dsi_panel_cmds_send
- ->mdss_dsi_panel_off_hdmi
- ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_OFF, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
- ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
- ->mdss_dsi_off
- ->mdss_dsi_clk_ctrl
- ->mdss_dsi_controller_cfg
- ->mdss_dsi_phy_disable
- ->mdss_dsi_panel_power_ctrl
- ->mdss_dsi_panel_power_off
- ->mdss_dsi_panel_reset
- ->mdss_dsi_pinctrl_set_state
- ->mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_TOP, 0)
- ->mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF)
三、LCD lk阶段的流程
主要是通过桥接ic和panel id来决定初始化的panelstruct面板的数据,再对实际面板的进行初始化流程。
涉及的文件:
Target/msm8953/oem_panel.c
Dev/gcdb/display/gcdb_display.c
Target/msm8953/target_display.c
Platform/msm_shared/display.c
Platform/msm_shared/mipi_dsi.c
- LK部分LCD流程
- target_display_init
- ->gcdb_display_init
- ->target_panel_enable
- ->oem_panel_select
- ->init_panel_data
- ->set_panel_cmd_string("sec:dsi_hbs_sc7705_800p_dsi1_video")
- ->dsi_panel_init
- ->msm_display_init
- ->pdata->power_func(1, &(panel->panel_info))=mdss_dsi_panel_power
- ->pdata->dfps_func(&(panel->panel_info))=mdss_dsi_mipi_dfps_config
- ->pdata->clk_func(1, &(panel->panel_info))
- ->pdata->update_panel_info()
- ->pdata->pll_clk_func(1, &(panel->panel_info))
- ->msm_fb_alloc
- ->display_image_on_screen
- ->msm_display_config
- ->mdss_dsi_config
- ->mdss_dsi_phy_init
- ->mdss_dsi_host_init
- ->panel->pre_init_func
- ->mdss_dsi_panel_initialize
- ->get_panel_rdid
- ->pinfo->rotate()
- ->pinfo->early_config((void *)pinfo)
- ->mdp_dsi_video_config
- ->msm_display_on
- ->mdp_dsi_video_on
- ->mdss_dsi_post_on
- ->mipi_dsi_on
- ->pdata->post_power_func(1)
- ->panel.bl_func=mdss_dsi_bl_enable
- ->panel_backlight_ctrl