rk3399 注册drm 驱动

 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_master
			 master->ops->bind  // 指向rockchip_drm_bind
				rockchip_drm_bind
					drm_dev = drm_dev_alloc(&rockchip_drm_driver, dev); //构建drm_devices
					component_bind_all
					rockchip_drm_fbdev_init
					drm_dev_register  //  注册drm 字符设备。
					

vop :
	vop_bind
		vop_create_crtc     // 创建crtc
			vop_plane_init       //初始化:plane
			drm_crtc_init_with_planes(drm_dev, crtc, primary, cursor,&vop_crtc_funcs, NULL);
				crtc->dev = dev;    // 指向drm_device
				crtc->funcs = funcs;  //赋值vop_crtc_funcs
				crtc->primary = primary; // primary plane
				crtc->cursor = cursor;   // 鼠标 plane
HDMI:
	dw_hdmi_rockchip_bind
		drm_encoder_helper_add    // encoder  赋值 drm_encoder_helper_funcs
		drm_encoder_init         //encoder   赋值	const struct drm_encoder_funcs *funcs;
		dw_hdmi_bind
			dw_hdmi_register
				bridge->funcs = &dw_hdmi_bridge_funcs;
				drm_bridge_attach
				drm_connector_helper_add    //connecor 初始drm_connector_helper_funcs
				drm_connector_init          //connecor 初始  drm_connector_funcs
				drm_mode_connector_attach_encoder  //connecor 与encoder 结合

5. 字符设备注册:

drm_core_init
     register_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_register
    drm_minor_register
        device_add



    

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Firefly-RK3399的Android10中的pdf_20211123_1657.7z a4_portrait_rgbb.pdf a5_portrait_rgbb.pdf a5_portrait_rgbb_1_6_printscaling_default.pdf a5_portrait_rgbb_1_6_printscaling_none.pdf aacDecoder.pdf aacEncoder.pdf about_blank.pdf Android_malloc_debug.pdf annotation_highlight_long_content.pdf annotation_highlight_rollover_ap.pdf annotation_highlight_square_with_ap.pdf annotation_ink_multiple.pdf annotation_stamp_with_ap.pdf annotiter.pdf barcode_test.pdf BHUSA2014-capstone.pdf black.pdf bookmarks.pdf bookmarks_circular.pdf brotli-comparison-study-2015-09-22.pdf bug_113.pdf bug_213.pdf bug_216.pdf bug_298.pdf bug_325_a.pdf bug_325_b.pdf bug_343.pdf bug_344.pdf bug_355.pdf bug_360.pdf bug_451265.pdf bug_451830.pdf bug_452455.pdf bug_454695.pdf bug_455199.pdf bug_459580.pdf bug_481363.pdf bug_487928.pdf bug_507316.pdf bug_544880.pdf bug_547706.pdf bug_551248.pdf bug_551460.pdf bug_552046.pdf bug_554151.pdf bug_555784.pdf bug_557223.pdf bug_57.pdf bug_572871.pdf bug_583.pdf bug_601362.pdf bug_602650.pdf bug_603518.pdf bug_620428.pdf bug_631912.pdf bug_634394.pdf bug_634716.pdf bug_644.pdf bug_650.pdf bug_664284.pdf bug_679649.pdf bug_680376.pdf bug_707673.pdf bug_709793.pdf bug_713197.pdf bug_717.pdf bug_750568.pdf bug_757705.pdf bug_765384.pdf bug_779.pdf bug_781804.pdf bug_782596.pdf bug_921.pdf bug_xrefv4_loop.pdf CameraITS.pdf camera_engine_rkisp_user_manual_v2.2.pdf camera_hal3_user_manual_v2.3.pdf checkerboard.pdf circular_viewer_ref.pdf combobox_form.pdf control_characters.pdf default-values-ip.pdf DngNoiseModel.pdf Drm_Vendor_Modules_v1.pdf dynamic_list_box_allow_multiple_selection.pdf dynamic_password_field_background_fill.pdf dynamic_table_color_and_width.pdf EASLibrary3_5.pdf EAS_API_Reference.pdf EAS_Library_Integration_Guide.pdf Efuse process explain .pdf email_recommended.pdf embedded_attachments.pdf embedded_images.pdf encrypted.pdf feature_linearized_loading.pdf fieldsmanagement.pdf first.pdf hello_world.pdf ic_brightness_medium_24dp.pdf ic_radio_button_check

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值