1 驱动入口
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,
},
};
2 HDMI初始化流程
inno_hdmi_probe
|--> inno_hdmi_bind
|--> inno_hdmi_register(drm, hdmi) // struct inno_hdmi *hdmi
|--> drm_connector_helper_add(&hdmi->connector,&inno_hdmi_connector_helper_funcs)
| /* static struct drm_connector_helper_funcs inno_hdmi_connector_helper_funcs =
{
| .get_modes = inno_hdmi_connector_get_modes,
| .mode_valid = inno_hdmi_connector_mode_valid,
| .best_encoder = inno_hdmi_connector_best_encoder,
| }; */
|--> drm_connector_init(drm, &hdmi->connector, &inno_hdmi_connector_funcs, DRM_MODE_CONNECTOR_HDMIA)
| |--> hdmi->connector.funcs = &inno_hdmi_connector_funcs
| |--> connector->connector_type_id = 0或1
| |--> connector->name = kasprintf(GFP_KERNEL, "%s-%d", drm_connector_enum_list[connector_type].name, connector->connector_type_id)
| /*
| * Connector and encoder types.
| */
| /* static struct drm_conn_prop_enum_list drm_connector_enum_list[] = {
| { DRM_MODE_CONNECTOR_Unknown, "Unknown" },
| ...
| { DRM_MODE_CONNECTOR_HDMIA, "HDMI-A" },
| ...
| }; */
|--> dev_set_drvdata(dev, hdmi);