当前位置:网站首页>高通 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边栏推荐
- Matlab符号函数的生成及计算其函数值
- Excel draws statistical graphs
- [System Design] S3 Object Storage
- Lasso回归(Stata)
- 【数据仓库】什么是 Azure Synapse,它与 Azure Data Bricks 有何不同?
- Mongo的简单操作-数据库用户的查询、创建与删除
- 2022-08-09:以下go语言代码输出什么?A:否,会 panic;B:是,能正确运行;C:不清楚,看投票结果。
- 【Software Exam System Architect】Case Analysis ⑥ Web Application System Architecture Design
- 在“企业通讯录”的盲区,融云的边界与分寸
- shell------常用小工具,sort,uniq,tr,cut
猜你喜欢

shell之函数和数组

UE4 Sequence添加基础动画效果 (04-在序列中使用粒子效果)

支付 x 聚合 x 分账 - 回流平台“二清”风险规避之路

J9 Number Theory: Macro Analysis of DAO Characteristics

2022-08-09 第六小组 瞒春 学习笔记

FPGA的虚拟时钟如何使用?

00后女孩月薪3200,3年买两套房,这个程序员变现新风口千万要把握住

关于判断单峰数组的几种方法

【API Management】What is API Management and why is it important?

shell iterates over folders and outputs
随机推荐
JWT: To own me is to have power
Fourier series and Fourier transform
2022-08-09 第六小组 瞒春 学习笔记
keepalived:双主配置
Mongo的简单操作-数据库用户的查询、创建与删除
俄罗斯宣布临时禁止进口摩尔多瓦植物产品
【微服务架构】为故障设计微服务架构
mysql千万级别数据库优化
腾讯云校园大使开始招募啦,内推名额和奖金等你来拿
Lasso回归(Stata)
Excel draws statistical graphs
JWT:拥有我,即拥有权力
地平线:面向规模化量产的智能驾驶系统和软件开发
MUDA:对齐特定域的分布和分类器以实现来自多源域的跨域分类
ARM Architecture 3: Addressing and Exception Handling of ARM Instructions
J9 Digital Theory: What kind of sparks will Web3.0+ Internet e-commerce cause?
【软考 系统架构设计师】案例分析⑥ Web应用系统架构设计
Lasso regression (Stata)
JVM探究
「微服务架构」编曲与编舞——让系统协同工作的不同模式