高通平台LCD之MDP code解析

LCD相关code所在目录:
        kernel/drvier/video/msm/mdss/ 
软件驱动主要分为三部分:
        MDP 驱动
        DSI 控制器驱动
        FrameBuffer驱动
执行probe 的先后顺序:
       MDP probe →  DSI probe → FB probe

MDP probe:对使用的硬件资源进行初始化,同时在fb设备中注册mdp的使用接口
(rc = mdss_fb_register_mdp_instance(&mdp5);)
接口定义如下:
struct msm_mdp_interface mdp5 = {
.init_fnc = mdss_mdp_overlay_init,
.fb_mem_get_iommu_domain = mdss_fb_mem_get_iommu_domain,
.fb_stride = mdss_mdp_fb_stride,
.check_dsi_status = mdss_check_dsi_ctrl_status,
.get_format_params = mdss_mdp_get_format_params,
};

DSI probe:解析模组厂提供的panel的dtsi文件,从文件中获得panel的mode,分辨率,帧率,command数据等。

FB probe:从DSI的数据结构中获取到panel的相关信息,多MDP进行初始化。
 if (mfd->mdp.init_fnc) {
                rc= mfd->mdp.init_fnc(mfd);
                if(rc) {
                        pr_err("init_fncfailed\n");
                        returnrc;
                }
        }
init_fnc 就是 MDP probe 注册的  mdss_mdp_overlay_init。
在 mdss_mdp_overlay_init 中,首先是对mdp interface 注册回调函数。
int mdss_mdp_overlay_init(struct msm_fb_data_type *mfd)
{
struct device *dev = mfd->fbi->dev;
struct msm_mdp_interface *mdp5_interface = &mfd->mdp;
struct mdss_overlay_private *mdp5_data = NULL;
struct irq_info *mdss_irq;
int rc;

mdp5_data = kzalloc(sizeof(struct mdss_overlay_private), GFP_KERNEL);
if (!mdp5_data) {
pr_err("fail to allocate mdp5 private data structure");
return -ENOMEM;
}

mdp5_data->mdata = dev_get_drvdata(mfd->pdev->dev.parent);
if (!mdp5_data->mdata) {
pr_err("unable to initialize overlay for fb%d\n", mfd->index);
rc = -ENODEV;
goto init_fail;
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
高通的DRM图形显示框架是基于Android的DRM架构,提供了一种安全的方式来显示受保护的内容。以下是一些使用高通8155单安卓平台的DRM图形显示框架的步骤: 1. 在Android系统中启用DRM支持,例如在设备树中定义CONFIG_DRM=y。 2. 在设备树(dts文件)中配置DRM驱动程序,例如: ``` { drm { compatible = "qcom,mdss_dsi"; reg = <0x0 0x14c0000 0x0 0x4000>; interrupts = <0 121 0>; clocks = <&mmcc CAMSS_LPASS_MCLK>; clock-names = "mdp_clk"; mdp { compatible = "qcom,mdss-mdp5"; reg = <0x0 0x1340000 0x0 0x10000>; qcom,mdp-secure-mode = <1>; interrupts = <0 123 0>; clocks = <&mmcc CAMSS_LPASS_MCLK>, <&mmcc CAMSS_LPASS_AHB_CLK>, <&gcc GCC_MMSS_MDP_AHB_CLK>, <&gcc GCC_MMSS_MDP_AXI_CLK>, <&gcc GCC_MMSS_MDP_PIXEL_CLK>; clock-names = "mdp_clk", "mdp_ahb_clk", "mdp_axi_clk", "mdp_ahb_clk", "mdp_pixel_clk"; phys = <&mdp_phy0>; phy-names = "mdp_phy"; status = "okay"; }; }; }; ``` 3. 在应用程序中使用DRM API,例如: ``` mediaDrm = new MediaDrm(UUID.fromString("00000000-0000-0000-0000-000000000000")); MediaDrm.KeyRequest keyRequest = mediaDrm.getKeyRequest(sessionId, initData, mimeType, MediaDrm.KEY_TYPE_STREAMING, optionalParameters); ``` 4. 配置DRM插件,例如Widevine插件,以支持受保护的内容。在设备树(dts文件)中添加以下内容: ``` drm_widevine { compatible = "widevine,wvdrm"; reg = <0>; }; ``` 5. 在应用程序中使用DRM插件API,例如: ``` MediaDrm drm = new MediaDrm(UUID.fromString("edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"), new WidevinePlugin()); ``` 以上是使用高通8155单安卓平台的DRM图形显示框架的基本步骤,具体使用方法可以参考高通提供的相关文档和示例代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值