• 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升级时的流程:

    1. 亮屏:
    2. mdss_fb_blank_unblank
    3. ->mdss_fb_start_disp_thread
    4. ->mfd->mdp.on_fnc(mfd)=mdss_mdp_overlay_on
    5. ->__mdss_mdp_overlay_ctl_init
    6. ->mdss_mdp_ctl_intf_event(mdp5_data->ctl, MDSS_EVENT_RESET, NULL, false)
    7. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    8. ->mdss_mdp_overlay_start
    9. ->mdss_mdp_clk_ctrl
    10. ->mdss_mdp_ctl_start
    11. ->mdss_dsi_event_handler(MDSS_EVENT_REGISTER_RECOVERY_HANDLER)
    12. ->mdss_mdp_hist_intr_setup
    13. ->mdss_mdp_overlay_kickoff
    14. ->mdss_mdp_display_commit
    15. ->ctl->ops.display_fnc=mdss_mdp_video_display
    16. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    17. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    18. ->mdss_dsi_on
    19. ->mdss_dsi_panel_power_ctrl
    20. ->mdss_dsi_panel_power_on
    21. ->mdss_dsi_pinctrl_set_state
    22. ->mdss_dsi_panel_reset
    23. ->mdss_dsi_phy_init
    24. ->mdss_dsi_phy_init_sub
    25. ->mdss_dsi_pinctrl_set_state
    26. ->mdss_dsi_panel_reset
    27. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    28. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    29. ->mdss_dsi_unblank
    30. ->mdss_dsi_clk_ctrl
    31. ->ctrl_pdata->on=mdss_dsi_panel_on
    32. ->mdss_bdg_video_on
    33. ->bdg_data->ops.video_on
    34. ->mdss_dsi_panel_cmds_send
    35. ->mdss_dsi_panel_on_hdmi
    36. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    37. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    38. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_POST_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    39. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    40. ->mdss_mdp_ctl_setup
    41. ->mdss_fb_set_backlight
    42. ->mdss_fb_scale_bl
    43. ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
    44. ->mdss_dsi_panel_bklt_pwm

    主要是涉及关闭显示线程,下发off指令,释放硬件资源,关闭背光等。

    1. 灭屏:
    2. mdss_fb_blank_blank
    3. ->mdss_fb_stop_disp_thread
    4. ->mdss_fb_set_backlight
    5. ->(*mfd->mdp.ad_calc_bl)(mfd, temp, &temp, &ad_bl_notify_needed) = pp_ad_calc_bl
    6. ->mdss_fb_scale_bl
    7. ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl //背光控制
    8. ->mfd->mdp.off_fnc(mfd)=mdss_mdp_overlay_off
    9. ->mdss_mdp_overlay_kickoff
    10. ->mdss_mdp_overlay_start
    11. ->mdss_mdp_ctl_start
    12. ->mdss_mdp_hist_intr_setup(&mdata->hist_intr, MDSS_IRQ_RESUME)
    13. ->mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF)
    14. ->mdss_mdp_display_commit
    15. ->ctl->ops.display_fnc(ctl, arg)=mdss_mdp_video_display
    16. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    17. ->pdata->event_handler=mdss_dsi_event_handler
    18. ->mdss_dsi_on
    19. ->mdss_dsi_panel_power_ctrl(pdata, MDSS_PANEL_POWER_ON)
    20. ->mdss_dsi_set_clk_src
    21. ->mdss_dsi_pinctrl_set_state
    22. ->mdss_dsi_panel_reset
    23. ->mdss_dsi_op_mode_config
    24. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    25. ->pdata->event_handler=mdss_dsi_event_handler
    26. ->mdss_dsi_unblank
    27. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    28. ->pdata->event_handler=mdss_dsi_event_handler
    29. ->mdss_dsi_unblank
    30. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_POST_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    31. ->pdata->event_handler=mdss_dsi_event_handler
    32. ->mdss_dsi_post_panel_on
    33. ->mdss_mdp_ctl_stop
    34. ->ctl->ops.stop_fnc(ctl, power_state)=mdss_mdp_video_ctx_stop
    35. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_BLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    36. ->pdata->event_handler(pdata, event, arg) =mdss_dsi_event_handler
    37. ->mdss_dsi_blank
    38. ->ctrl_pdata->off(pdata)=mdss_dsi_panel_off
    39. ->mdss_bdg_video_on
    40. ->bdg_data->ops.video_on(on)=lt8911exb_video_on //桥接ic
    41. ->mdss_dsi_panel_cmds_send
    42. ->mdss_dsi_panel_off_hdmi
    43. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_OFF, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    44. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    45. ->mdss_dsi_blank
    46. ->mdss_dsi_off
    47. ->mdss_dsi_controller_cfg
    48. ->mdss_dsi_phy_disable
    49. ->mdss_dsi_panel_power_ctrl
    50. ->mdss_dsi_panel_power_off
    51. ->mdss_dsi_panel_reset
    52. ->mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_TOP, 0)
    53. ->mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF);
    54. ->mdss_mdp_ctl_destroy

    二、kernel部分LCD唤醒休眠流程

    主要是开启显示线程,复位,、硬件初始化、控制背光等操作。

    1. 唤醒:
    2. fb_ioctl
    3. ->do_fb_ioctl
    4. ->fb_blank
    5. ->mdss_fb_blank
    6. ->mdss_fb_blank_sub
    7. ->mdss_fb_blank_unblank
    8. ->mdss_fb_start_disp_thread
    9. ->mfd->mdp.on_fnc=mdss_mdp_overlay_on
    10. ->mdss_mdp_ctl_intf_event(mdp5_data->ctl, MDSS_EVENT_RESET, NULL, false)
    11. ->mdss_mdp_overlay_start
    12. ->mdss_mdp_ctl_start
    13. ->mdss_mdp_ctl_start_sub
    14. ->mdss_mdp_hist_intr_setup
    15. ->mdss_mdp_ctl_split_display_enable
    16. ->mdss_mdp_hist_intr_setup
    17. ->mdss_mdp_ctl_notifier_register
    18. ->mdss_mdp_pp_resume
    19. ->mdss_mdp_splash_cleanup
    20. ->mdss_mdp_overlay_kickoff
    21. ->mdss_mdp_display_commit
    22. ->ctl->ops.display_fnc(ctl, arg)=mdss_mdp_video_display
    23. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_LINK_READY, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    24. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    25. ->mdss_dsi_on
    26. ->mdss_dsi_panel_power_ctrl
    27. ->mdss_dsi_panel_power_on
    28. ->mdss_dsi_pinctrl_set_state
    29. ->mdss_dsi_panel_reset
    30. ->mdss_dsi_clk_ctrl
    31. ->mdss_dsi_phy_init
    32. ->mdss_dsi_pinctrl_set_state
    33. ->mdss_dsi_panel_reset
    34. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_UNBLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    35. ->mdss_dsi_unblank
    36. ->ctrl_pdata->on(pdata)=mdss_dsi_panel_on
    37. ->mdss_bdg_video_on
    38. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    39. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_POST_PANEL_ON, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    40. ->mdss_fb_set_backlight
    41. ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
    42. ->mdss_dsi_panel_bklt_pwm

    主要是先通过lcd-backlight节点的brightness_set方法关闭背光,再通过dev/fb节点的ioctl方法来停止显示线程,释放硬件资源。

    1. 休眠:
    2. brightness_set=mdss_fb_set_bl_brightness
    3. ->mdss_fb_set_backlight
    4. ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
    5. ->mdss_dsi_panel_bklt_pwm
    6. fb_ioctl
    7. ->do_fb_ioctl
    8. ->fb_blank
    9. ->mdss_fb_blank
    10. ->mdss_fb_blank_sub
    11. ->mdss_fb_blank_blank
    12. ->mdss_fb_stop_disp_thread
    13. ->mdss_fb_set_backlight
    14. ->pdata->set_backlight(pdata, temp)=mdss_dsi_panel_bl_ctrl
    15. ->mfd->mdp.off_fnc=mdss_mdp_overlay_off
    16. ->mdss_mdp_ctl_stop
    17. ->mdss_mdp_hist_intr_setup
    18. ->ctl->ops.stop_fnc(ctl, power_state)=mdss_mdp_video_ctx_stop
    19. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_BLANK, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    20. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    21. ->mdss_dsi_blank
    22. ->ctrl_pdata->off(pdata)
    23. ->mdss_dsi_panel_off
    24. ->mdss_bdg_video_on
    25. ->mdss_dsi_panel_cmds_send
    26. ->mdss_dsi_panel_off_hdmi
    27. ->mdss_mdp_ctl_intf_event(ctl, MDSS_EVENT_PANEL_OFF, NULL, CTL_INTF_EVENT_FLAG_DEFAULT)
    28. ->pdata->event_handler(pdata, event, arg)=mdss_dsi_event_handler
    29. ->mdss_dsi_off
    30. ->mdss_dsi_clk_ctrl
    31. ->mdss_dsi_controller_cfg
    32. ->mdss_dsi_phy_disable
    33. ->mdss_dsi_panel_power_ctrl
    34. ->mdss_dsi_panel_power_off
    35. ->mdss_dsi_panel_reset
    36. ->mdss_dsi_pinctrl_set_state
    37. ->mdss_mdp_ctl_write(ctl, MDSS_MDP_REG_CTL_TOP, 0)
    38. ->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

    1. LK部分LCD流程
    2. target_display_init
    3. ->gcdb_display_init
    4. ->target_panel_enable
    5. ->oem_panel_select
    6. ->init_panel_data
    7. ->set_panel_cmd_string("sec:dsi_hbs_sc7705_800p_dsi1_video")
    8. ->dsi_panel_init
    9. ->msm_display_init
    10. ->pdata->power_func(1, &(panel->panel_info))=mdss_dsi_panel_power
    11. ->pdata->dfps_func(&(panel->panel_info))=mdss_dsi_mipi_dfps_config
    12. ->pdata->clk_func(1, &(panel->panel_info))
    13. ->pdata->update_panel_info()
    14. ->pdata->pll_clk_func(1, &(panel->panel_info))
    15. ->msm_fb_alloc
    16. ->display_image_on_screen
    17. ->msm_display_config
    18. ->mdss_dsi_config
    19. ->mdss_dsi_phy_init
    20. ->mdss_dsi_host_init
    21. ->panel->pre_init_func
    22. ->mdss_dsi_panel_initialize
    23. ->get_panel_rdid
    24. ->pinfo->rotate()
    25. ->pinfo->early_config((void *)pinfo)
    26. ->mdp_dsi_video_config
    27. ->msm_display_on
    28. ->mdp_dsi_video_on
    29. ->mdss_dsi_post_on
    30. ->mipi_dsi_on
    31. ->pdata->post_power_func(1)
    32. ->panel.bl_func=mdss_dsi_bl_enable
    33. ->panel_backlight_ctrl

  • 相关阅读:
    便携式手持蒸汽电熨斗UL859测试项目介绍
    MATLAB基础应用精讲-【基础知识篇】条件和循环控制语句
    shell/bash脚本命令的基本使用教程
    单元测试Mockito笔记
    第十届国家网络安全宣传周今日在全国范围内启动
    医药流通企业如何安全访问医药ERP?无需公网IP和改变现有IT架构
    PCB板各层定义及解释
    Linux中定时任务以及开机自启相关
    Tomcat 部署与优化
    用go实现一个循环队列
  • 原文地址:https://blog.csdn.net/qq_33782617/article/details/126084933