非Atomic的参数操作
struct drm_mode_obj_set_property {__u64 value;__u32 prop_id;__u32 obj_id;__u32 obj_type;};parse_property(&prop_args[prop_count], optarg); // 获取 prop的prop_id 和 valuedrmModeObjectSetPropertyfind_object(....); // 在资源表去匹配prop_id,来 获取 obj_type 是 crtc? connector? planeDRM_IOCTL(fd, DRM_IOCTL_MODE_OBJ_SETPROPERTY, &prop);drm_mode_obj_set_property_ioctldrm_mode_object_find // 去drm_dev->mode_config 里边查找并获取 obj_iddrm_mode_obj_find_prop_id // 在当前obj的属性列表中查找要选择的属性set_property_atomic // 这里使用atomic来设置属性drm_atomic_state_alloc // 分配一个新的 struct drm_atomic_state *state;drm_atomic_set_propertydrm_atomic_get_plane_statedrm_atomic_get_existing_plane_statedrm_modeset_lockplane->funcs->atomic_duplicate_state(plane);drm_atomic_plane_set_property // !!! 设置属性drm_atomic_commitdrm_atomic_check_onlydrm_atomic_plane_checkret = config->funcs->atomic_check(state->dev, state);config->funcs->atomic_commit(state->dev, state, false); // malidp_mode_config_funcs.drm_atomic_helper_commitcommit_workcommit_tail(state);// mali-dp550 : drm->mode_config.helper_private = &malidp_mode_config_helpers;funcs = dev->mode_config.helper_private;funcs->atomic_commit_tail(old_state); or drm_atomic_helper_commit_tail(old_state);malidp_atomic_commit_taildrm_atomic_helper_commit_planesfuncs = plane->helper_private; // malidp_de_plane_helper_funcsfuncs->atomic_update(plane, old_plane_state); // !!!!!!! 总算找到了
set_property_atomic 里边的 DPMS是什么? // TBD
set_property_atomic // 在 malidp_init 里边未初始化 mode_config.dpms_property ,这个好像是 控制连接器DPMS状态的默认连接器属性。// 显示器电源管理标准 (DPMS)提供显示器电源管理功能; //这里先不考虑
几个特别重要的接口:
static const struct drm_mode_config_funcs malidp_mode_config_funcs = {.fb_create = malidp_fb_create,.atomic_check = drm_atomic_helper_check,.atomic_commit = drm_atomic_helper_commit,};drm->mode_config.funcs = &malidp_mode_config_funcs;drm->mode_config.helper_private = &malidp_mode_config_helpers;static const struct drm_plane_funcs malidp_de_plane_funcs = {.update_plane = drm_atomic_helper_update_plane,.disable_plane = drm_atomic_helper_disable_plane,.destroy = malidp_de_plane_destroy,.reset = malidp_plane_reset,.atomic_duplicate_state = malidp_duplicate_plane_state,.atomic_destroy_state = malidp_destroy_plane_state,.atomic_print_state = malidp_plane_atomic_print_state,.format_mod_supported = malidp_format_mod_supported_per_plane,};plane->funcs = malidp_de_plane_funcs;plane->helper_private = malidp_de_plane_helper_funcs
