当前位置:网站首页>高通 msm8953 LCD 休眠/唤醒 流程
高通 msm8953 LCD 休眠/唤醒 流程
2022-08-10 09:36:00 【沉沦者】
一、 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
边栏推荐
- 在“企业通讯录”的盲区,融云的边界与分寸
- UE4 Sequence添加基础动画效果 (05-蓝图触发Sequence)
- "Microservice Architecture" Arrangement and Choreography - Different Models for Making Systems Work Together
- J9 digital science: Web 3.0 is about data ownership or decentralized?
- Controller层代码这么写,简洁又优雅!
- "Guangzhou highway engineering measures for the supervision and administration of production safety, and revised from six aspects
- [Metaverse Omi Says] Listen to how Rabbit Fan Rabbit creates a new era of trendy play from virtual to reality
- Lasso回归(Stata)
- 数据库注入提权总结(一)
- 不要把公司当成家,被通知裁员时会变得不幸...
猜你喜欢
Fourier series and Fourier transform
FPGA中BEL Site Tile FSR SLR分别指什么?
在“企业通讯录”的盲区,融云的边界与分寸
故障分析 | Sql_slave_skip_counter 使用不规范对复制的影响
「应用架构」TOGAF建模:应用程序迁移图
Chapter 3 Search and Graph Theory (3)
不要把公司当成家,被通知裁员时会变得不幸...
DAY25: Logic Vulnerability
多线程浅谈
[Metaverse Omi Says] Listen to how Rabbit Fan Rabbit creates a new era of trendy play from virtual to reality
随机推荐
钻石价格预测的ML全流程!从模型构建调优道部署应用!
英伟达游戏显卡营收暴跌/ 谷歌数据中心爆炸致3人受伤/ iPhone电量百分比回归…今日更多新鲜事在此...
JWT:拥有我,即拥有权力
makefile 杂项
WebView2 通过 PuppeteerSharp 实现爬取 王者 壁纸 (案例版)
keepalived:双主配置
How to understand the difference between BIO, NIO, and AIO
mysql千万级别数据库优化
BUUCTF problem solving PWN 】 【 record (4-6 pages continuously updated)
「应用架构」TOGAF建模:应用程序迁移图
多元线性回归分析(Stata)
关于镜像源的一些记录
CAD转WPF: 关于CAD图纸文件转换为WPF矢量代码文件(xaml文件)的技巧
Controller层代码这么写,简洁又优雅!
PostgreSQL 2022 发展现状:13 个非 psql 工具
[Data Architecture] Distributed Data Grid as a Solution for Centralized Data Monolith
1 活动时间与安排
DAY25: Logic Vulnerability
【API Management】What is API Management and why is it important?
[Metaverse Omi Says] See how UCOUCO integrates performance art into the Metaverse