1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 高通 msm8953 LCD 休眠/唤醒 流程

高通 msm8953 LCD 休眠/唤醒 流程

时间:2020-04-20 20:14:39

相关推荐

高通 msm8953 LCD 休眠/唤醒 流程

一、 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_pwmfb_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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。