当前位置:网站首页>高通 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
边栏推荐
- iwemeta metaverse: Ali's first COO: how to build a sales force
- 2022 首期线下 Workshop!面向应用开发者们的数据应用体验日来了 | TiDB Workshop Day
- Excel draws statistical graphs
- 90.(cesium之家)cesium高度监听事件
- 2022-08-09 第六小组 瞒春 学习笔记
- 腾讯云校园大使开始招募啦,内推名额和奖金等你来拿
- BUUCTF【pwn】解题记录(4-6页持续更新中)
- Nvidia's gaming graphics card revenue plummets / Google data center explosion injures 3 people / iPhone battery percentage returns... More news today is here...
- Message Queuing Overview
- 13 【script setup 总结】
猜你喜欢
Tencent releases the second-generation version of the quadruped robot Max, which completes jumps and somersaults on the plum blossom pile
91.(cesium之家)cesium火箭发射模拟
PTA Exercise 2.2 Rotate an Array Left
06 【生命周期 模板引用】
10 【异步组件 组合式函数(hooks)】
Nvidia's gaming graphics card revenue plummets / Google data center explosion injures 3 people / iPhone battery percentage returns... More news today is here...
【企业架构】敏捷与企业架构:战略联盟
【API架构】REST API 行业辩论:OData vs GraphQL vs ORDS
【数据架构】分布式数据网格作为集中式数据单体的解决方案
数据中台解决方案及未来发展方向
随机推荐
I don't want to do accounting anymore, Die changed to a new one, moved forward bravely, and finally successfully passed the career change test to double his monthly salary~
Basic concepts of concurrency, operations, containers
并查集学习
How to understand the difference between BIO, NIO, and AIO
JWT: To own me is to have power
FPGA的虚拟时钟如何使用?
win下的开发环境变量记录
数据库注入提权总结(一)
关于编程本质那些事
浅析JWT安全问题
Nvidia's gaming graphics card revenue plummets / Google data center explosion injures 3 people / iPhone battery percentage returns... More news today is here...
12 【其它组合式API】
因子分析(SPSS)
PostgreSQL 2022 发展现状:13 个非 psql 工具
郭晶晶家的象棋私教,好家伙是个机器人
06 【生命周期 模板引用】
【Prometheus】Node Exporter常用查询PromQL 语句大总结
打工人的第27天-平凡但不平淡的日子
BUUCTF【pwn】解题记录(4-6页持续更新中)
中国驻越南使馆提醒在越北部、中部地区中国公民做好台风“木兰”安全防范