rk3399 注册drm 驱动

news/2024/11/8 17:00:39/

 rk3399 基于component 框架,在probe阶段解析dts中各个设备的信息,加到componet match 列表中,等所有的设备加载完毕后,就会引发master设备的bind。

1.vop probe

static int vop_probe(struct platform_device *pdev)
{struct device *dev = &pdev->dev;if (!dev->of_node) {dev_err(dev, "can't find vop devices\n");return -ENODEV;}return component_add(dev, &vop_component_ops);
}
const struct component_ops vop_component_ops = {.bind = vop_bind,.unbind = vop_unbind,
};

 2. hdmi probe:

static struct platform_driver dw_hdmi_rockchip_pltfm_driver = {.probe  = dw_hdmi_rockchip_probe,.remove = dw_hdmi_rockchip_remove,.shutdown = dw_hdmi_rockchip_shutdown,.driver = {.name = "dwhdmi-rockchip",.of_match_table = dw_hdmi_rockchip_dt_ids,.pm = &dw_hdmi_pm_ops,},
};static int dw_hdmi_rockchip_probe(struct platform_device *pdev)
{pm_runtime_enable(&pdev->dev);pm_runtime_get_sync(&pdev->dev);return component_add(&pdev->dev, &dw_hdmi_rockchip_ops);
}static const struct component_ops dw_hdmi_rockchip_ops = {.bind	= dw_hdmi_rockchip_bind,.unbind	= dw_hdmi_rockchip_unbind,
};

 3. 解析display_subsystem dts

display_subsystem: display-subsystem {u-boot,dm-pre-reloc;compatible = "rockchip,display-subsystem";ports = <&vopl_out>, <&vopb_out>;clocks = <&cru PLL_VPLL>, <&cru PLL_CPLL>;clock-names = "hdmi-tmds-pll", "default-vop-pll";devfreq = <&dmc>;status = "disabled";};static struct platform_driver rockchip_drm_platform_driver = {.probe = rockchip_drm_platform_probe,.remove = rockchip_drm_platform_remove,.shutdown = rockchip_drm_platform_shutdown,.driver = {.name = "rockchip-drm",.of_match_table = rockchip_drm_dt_ids,.pm = &rockchip_drm_pm_ops,},
};

  4.bind 函数调用

rockchip_drm_platform_probe//rockchip_drm_ops 指向static const struct component_master_ops rockchip_drm_ops = {.bind = rockchip_drm_bind,.unbind = rockchip_drm_unbind,};component_master_add_with_match(dev, &rockchip_drm_ops, match);  //rockchip_drm_ops 指向try_to_bring_up_mastermaster->ops->bind  // 指向rockchip_drm_bindrockchip_drm_binddrm_dev = drm_dev_alloc(&rockchip_drm_driver, dev); //构建drm_devicescomponent_bind_allrockchip_drm_fbdev_initdrm_dev_register  //  注册drm 字符设备。vop :vop_bindvop_create_crtc     // 创建crtcvop_plane_init       //初始化:planedrm_crtc_init_with_planes(drm_dev, crtc, primary, cursor,&vop_crtc_funcs, NULL);crtc->dev = dev;    // 指向drm_devicecrtc->funcs = funcs;  //赋值vop_crtc_funcscrtc->primary = primary; // primary planecrtc->cursor = cursor;   // 鼠标 plane
HDMI:dw_hdmi_rockchip_binddrm_encoder_helper_add    // encoder  赋值 drm_encoder_helper_funcsdrm_encoder_init         //encoder   赋值	const struct drm_encoder_funcs *funcs;dw_hdmi_binddw_hdmi_registerbridge->funcs = &dw_hdmi_bridge_funcs;drm_bridge_attachdrm_connector_helper_add    //connecor 初始drm_connector_helper_funcsdrm_connector_init          //connecor 初始  drm_connector_funcsdrm_mode_connector_attach_encoder  //connecor 与encoder 结合

5. 字符设备注册:

drm_core_initregister_chrdev(DRM_MAJOR, "drm", &drm_stub_fops)static const struct file_operations drm_stub_fops = {.owner = THIS_MODULE,.open = drm_stub_open,.llseek = noop_llseek,
};drm_dev_registerdrm_minor_registerdevice_add


http://www.ppmy.cn/news/669569.html

相关文章

MSP430F5529输出PWM

msp430f5529产生4路PWM波&#xff0c;改变占空比从而改变电机(直流减速电机)的速度。驱动电机必然会用到驱动模块&#xff0c;接下来就介绍一下驱动模块——L298N L298N驱动 若要对直流电机进行PWM调速&#xff0c;需设置IN1和IN2,即确定电机的转动方向&#xff1b;然后对使能…

Rk3399 Android9.0 恢复出厂设置流程

Reset 流程 : 1.原生设置中响应 恢复出厂设置 功能,继而发出重置广播(Intent.ACTION_FACTORY_RESET) . 2.frameWork层 接收到此广播,根据广播所携带的参数执行Android层的Reset设定. 3.Android层执行到最后会将Reset配置信息写入 /cache/recovery/command 中,最终进入Recove…

RK3588 配置HDMI支持8K分辨率输出

RK3588 配置HDMI支持8K分辨率输出 RK3588 芯片最高支持的输出分辨率可以到8K&#xff0c;由于Android12 SDK要支持多个显示接口&#xff0c;所以默认最高只配置了4K的分辨率支持&#xff0c;下面以RK3588-EVB1的开发板上配置HDMI输出8K输出为例进行说明如何让RK3588支持8K分辨…

超详细!旗舰SoC RK3588参数介绍-飞凌嵌入式

OK3568-C开发板 RK3588是瑞芯微旗下最新的8K旗舰SoC芯片&#xff0c;采用ARM架构&#xff0c;主要用于PC、边缘计算设备、个人移动互联网设备和其他数字多媒体应用。 RK3588集成了四核Cortex-A76和四核Cortex-A55&#xff0c;以及单独的NEON协处理器&#xff0c;支持8K视频编解…

Python神经网络学习(七)--强化学习--使用神经网络

前言 前面说到了强化学习&#xff0c;但是仅仅是使用了一个表格&#xff0c;这也是属于强化学习的范畴了&#xff0c;毕竟强化学习属于在试错中学习的。 但是现在有一些问题&#xff0c;如果这个表格非常大呢&#xff1f;悬崖徒步仅仅是一个长12宽4&#xff0c;每个位置4个动…

Linux操作系统配置代理服务器

PS:本文只是针对Linux操作系统对于代理服务器的配置操作&#xff0c;不涉及广告 1.代理的概念 代理服务器英文全称是Proxy Server&#xff0c;其功能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息的中转站。在一般情况下&#xff0c;我们使用网络浏览器直…

2022最常用密码公布,你的账户安全吗?

密码管理工具 NordPass 公布了 2022 年最常用密码列表&#xff0c;以及破解密码所需的时间。该研究基于对来自 30 个不同国家 / 地区的 3TB 数据库的分析。研究人员将数据分为不同的垂直领域&#xff0c;使得其能够根据国家和性别进行统计分析。今年的研究主要聚焦于文化如何影…

Leetcode 647. 回文子串

Leetcode 647. 回文子串题目 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成…