aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm/drm_crtc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/drm/drm_crtc.h')
-rw-r--r--include/drm/drm_crtc.h120
1 files changed, 101 insertions, 19 deletions
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
index b86329813ad3..920e21a8f3fd 100644
--- a/include/drm/drm_crtc.h
+++ b/include/drm/drm_crtc.h
@@ -31,6 +31,7 @@
31#include <linux/idr.h> 31#include <linux/idr.h>
32#include <linux/fb.h> 32#include <linux/fb.h>
33#include <linux/hdmi.h> 33#include <linux/hdmi.h>
34#include <linux/media-bus-format.h>
34#include <uapi/drm/drm_mode.h> 35#include <uapi/drm/drm_mode.h>
35#include <uapi/drm/drm_fourcc.h> 36#include <uapi/drm/drm_fourcc.h>
36#include <drm/drm_modeset_lock.h> 37#include <drm/drm_modeset_lock.h>
@@ -63,8 +64,16 @@ struct drm_mode_object {
63 64
64#define DRM_OBJECT_MAX_PROPERTY 24 65#define DRM_OBJECT_MAX_PROPERTY 24
65struct drm_object_properties { 66struct drm_object_properties {
66 int count; 67 int count, atomic_count;
67 uint32_t ids[DRM_OBJECT_MAX_PROPERTY]; 68 /* NOTE: if we ever start dynamically destroying properties (ie.
69 * not at drm_mode_config_cleanup() time), then we'd have to do
70 * a better job of detaching property from mode objects to avoid
71 * dangling property pointers:
72 */
73 struct drm_property *properties[DRM_OBJECT_MAX_PROPERTY];
74 /* do not read/write values directly, but use drm_object_property_get_value()
75 * and drm_object_property_set_value():
76 */
68 uint64_t values[DRM_OBJECT_MAX_PROPERTY]; 77 uint64_t values[DRM_OBJECT_MAX_PROPERTY];
69}; 78};
70 79
@@ -131,6 +140,9 @@ struct drm_display_info {
131 enum subpixel_order subpixel_order; 140 enum subpixel_order subpixel_order;
132 u32 color_formats; 141 u32 color_formats;
133 142
143 const u32 *bus_formats;
144 unsigned int num_bus_formats;
145
134 /* Mask of supported hdmi deep color modes */ 146 /* Mask of supported hdmi deep color modes */
135 u8 edid_hdmi_dc_modes; 147 u8 edid_hdmi_dc_modes;
136 148
@@ -237,8 +249,11 @@ struct drm_atomic_state;
237 249
238/** 250/**
239 * struct drm_crtc_state - mutable CRTC state 251 * struct drm_crtc_state - mutable CRTC state
252 * @crtc: backpointer to the CRTC
240 * @enable: whether the CRTC should be enabled, gates all other state 253 * @enable: whether the CRTC should be enabled, gates all other state
254 * @active: whether the CRTC is actively displaying (used for DPMS)
241 * @mode_changed: for use by helpers and drivers when computing state updates 255 * @mode_changed: for use by helpers and drivers when computing state updates
256 * @active_changed: for use by helpers and drivers when computing state updates
242 * @plane_mask: bitmask of (1 << drm_plane_index(plane)) of attached planes 257 * @plane_mask: bitmask of (1 << drm_plane_index(plane)) of attached planes
243 * @last_vblank_count: for helpers and drivers to capture the vblank of the 258 * @last_vblank_count: for helpers and drivers to capture the vblank of the
244 * update to ensure framebuffer cleanup isn't done too early 259 * update to ensure framebuffer cleanup isn't done too early
@@ -248,13 +263,23 @@ struct drm_atomic_state;
248 * @event: optional pointer to a DRM event to signal upon completion of the 263 * @event: optional pointer to a DRM event to signal upon completion of the
249 * state update 264 * state update
250 * @state: backpointer to global drm_atomic_state 265 * @state: backpointer to global drm_atomic_state
266 *
267 * Note that the distinction between @enable and @active is rather subtile:
268 * Flipping @active while @enable is set without changing anything else may
269 * never return in a failure from the ->atomic_check callback. Userspace assumes
270 * that a DPMS On will always succeed. In other words: @enable controls resource
271 * assignment, @active controls the actual hardware state.
251 */ 272 */
252struct drm_crtc_state { 273struct drm_crtc_state {
274 struct drm_crtc *crtc;
275
253 bool enable; 276 bool enable;
277 bool active;
254 278
255 /* computed state bits used by helpers and drivers */ 279 /* computed state bits used by helpers and drivers */
256 bool planes_changed : 1; 280 bool planes_changed : 1;
257 bool mode_changed : 1; 281 bool mode_changed : 1;
282 bool active_changed : 1;
258 283
259 /* attached planes bitmask: 284 /* attached planes bitmask:
260 * WARNING: transitional helpers do not maintain plane_mask so 285 * WARNING: transitional helpers do not maintain plane_mask so
@@ -292,6 +317,9 @@ struct drm_crtc_state {
292 * @atomic_duplicate_state: duplicate the atomic state for this CRTC 317 * @atomic_duplicate_state: duplicate the atomic state for this CRTC
293 * @atomic_destroy_state: destroy an atomic state for this CRTC 318 * @atomic_destroy_state: destroy an atomic state for this CRTC
294 * @atomic_set_property: set a property on an atomic state for this CRTC 319 * @atomic_set_property: set a property on an atomic state for this CRTC
320 * (do not call directly, use drm_atomic_crtc_set_property())
321 * @atomic_get_property: get a property on an atomic state for this CRTC
322 * (do not call directly, use drm_atomic_crtc_get_property())
295 * 323 *
296 * The drm_crtc_funcs structure is the central CRTC management structure 324 * The drm_crtc_funcs structure is the central CRTC management structure
297 * in the DRM. Each CRTC controls one or more connectors (note that the name 325 * in the DRM. Each CRTC controls one or more connectors (note that the name
@@ -351,6 +379,10 @@ struct drm_crtc_funcs {
351 struct drm_crtc_state *state, 379 struct drm_crtc_state *state,
352 struct drm_property *property, 380 struct drm_property *property,
353 uint64_t val); 381 uint64_t val);
382 int (*atomic_get_property)(struct drm_crtc *crtc,
383 const struct drm_crtc_state *state,
384 struct drm_property *property,
385 uint64_t *val);
354}; 386};
355 387
356/** 388/**
@@ -449,11 +481,14 @@ struct drm_crtc {
449 481
450/** 482/**
451 * struct drm_connector_state - mutable connector state 483 * struct drm_connector_state - mutable connector state
484 * @connector: backpointer to the connector
452 * @crtc: CRTC to connect connector to, NULL if disabled 485 * @crtc: CRTC to connect connector to, NULL if disabled
453 * @best_encoder: can be used by helpers and drivers to select the encoder 486 * @best_encoder: can be used by helpers and drivers to select the encoder
454 * @state: backpointer to global drm_atomic_state 487 * @state: backpointer to global drm_atomic_state
455 */ 488 */
456struct drm_connector_state { 489struct drm_connector_state {
490 struct drm_connector *connector;
491
457 struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_connector() */ 492 struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_connector() */
458 493
459 struct drm_encoder *best_encoder; 494 struct drm_encoder *best_encoder;
@@ -463,7 +498,7 @@ struct drm_connector_state {
463 498
464/** 499/**
465 * struct drm_connector_funcs - control connectors on a given device 500 * struct drm_connector_funcs - control connectors on a given device
466 * @dpms: set power state (see drm_crtc_funcs above) 501 * @dpms: set power state
467 * @save: save connector state 502 * @save: save connector state
468 * @restore: restore connector state 503 * @restore: restore connector state
469 * @reset: reset connector after state has been invalidated (e.g. resume) 504 * @reset: reset connector after state has been invalidated (e.g. resume)
@@ -475,6 +510,9 @@ struct drm_connector_state {
475 * @atomic_duplicate_state: duplicate the atomic state for this connector 510 * @atomic_duplicate_state: duplicate the atomic state for this connector
476 * @atomic_destroy_state: destroy an atomic state for this connector 511 * @atomic_destroy_state: destroy an atomic state for this connector
477 * @atomic_set_property: set a property on an atomic state for this connector 512 * @atomic_set_property: set a property on an atomic state for this connector
513 * (do not call directly, use drm_atomic_connector_set_property())
514 * @atomic_get_property: get a property on an atomic state for this connector
515 * (do not call directly, use drm_atomic_connector_get_property())
478 * 516 *
479 * Each CRTC may have one or more connectors attached to it. The functions 517 * Each CRTC may have one or more connectors attached to it. The functions
480 * below allow the core DRM code to control connectors, enumerate available modes, 518 * below allow the core DRM code to control connectors, enumerate available modes,
@@ -508,6 +546,10 @@ struct drm_connector_funcs {
508 struct drm_connector_state *state, 546 struct drm_connector_state *state,
509 struct drm_property *property, 547 struct drm_property *property,
510 uint64_t val); 548 uint64_t val);
549 int (*atomic_get_property)(struct drm_connector *connector,
550 const struct drm_connector_state *state,
551 struct drm_property *property,
552 uint64_t *val);
511}; 553};
512 554
513/** 555/**
@@ -693,6 +735,7 @@ struct drm_connector {
693 735
694/** 736/**
695 * struct drm_plane_state - mutable plane state 737 * struct drm_plane_state - mutable plane state
738 * @plane: backpointer to the plane
696 * @crtc: currently bound CRTC, NULL if disabled 739 * @crtc: currently bound CRTC, NULL if disabled
697 * @fb: currently bound framebuffer 740 * @fb: currently bound framebuffer
698 * @fence: optional fence to wait for before scanning out @fb 741 * @fence: optional fence to wait for before scanning out @fb
@@ -709,6 +752,8 @@ struct drm_connector {
709 * @state: backpointer to global drm_atomic_state 752 * @state: backpointer to global drm_atomic_state
710 */ 753 */
711struct drm_plane_state { 754struct drm_plane_state {
755 struct drm_plane *plane;
756
712 struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */ 757 struct drm_crtc *crtc; /* do not write directly, use drm_atomic_set_crtc_for_plane() */
713 struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */ 758 struct drm_framebuffer *fb; /* do not write directly, use drm_atomic_set_fb_for_plane() */
714 struct fence *fence; 759 struct fence *fence;
@@ -721,6 +766,9 @@ struct drm_plane_state {
721 uint32_t src_x, src_y; 766 uint32_t src_x, src_y;
722 uint32_t src_h, src_w; 767 uint32_t src_h, src_w;
723 768
769 /* Plane rotation */
770 unsigned int rotation;
771
724 struct drm_atomic_state *state; 772 struct drm_atomic_state *state;
725}; 773};
726 774
@@ -735,6 +783,9 @@ struct drm_plane_state {
735 * @atomic_duplicate_state: duplicate the atomic state for this plane 783 * @atomic_duplicate_state: duplicate the atomic state for this plane
736 * @atomic_destroy_state: destroy an atomic state for this plane 784 * @atomic_destroy_state: destroy an atomic state for this plane
737 * @atomic_set_property: set a property on an atomic state for this plane 785 * @atomic_set_property: set a property on an atomic state for this plane
786 * (do not call directly, use drm_atomic_plane_set_property())
787 * @atomic_get_property: get a property on an atomic state for this plane
788 * (do not call directly, use drm_atomic_plane_get_property())
738 */ 789 */
739struct drm_plane_funcs { 790struct drm_plane_funcs {
740 int (*update_plane)(struct drm_plane *plane, 791 int (*update_plane)(struct drm_plane *plane,
@@ -758,6 +809,10 @@ struct drm_plane_funcs {
758 struct drm_plane_state *state, 809 struct drm_plane_state *state,
759 struct drm_property *property, 810 struct drm_property *property,
760 uint64_t val); 811 uint64_t val);
812 int (*atomic_get_property)(struct drm_plane *plane,
813 const struct drm_plane_state *state,
814 struct drm_property *property,
815 uint64_t *val);
761}; 816};
762 817
763enum drm_plane_type { 818enum drm_plane_type {
@@ -813,15 +868,16 @@ struct drm_plane {
813 868
814/** 869/**
815 * struct drm_bridge_funcs - drm_bridge control functions 870 * struct drm_bridge_funcs - drm_bridge control functions
871 * @attach: Called during drm_bridge_attach
816 * @mode_fixup: Try to fixup (or reject entirely) proposed mode for this bridge 872 * @mode_fixup: Try to fixup (or reject entirely) proposed mode for this bridge
817 * @disable: Called right before encoder prepare, disables the bridge 873 * @disable: Called right before encoder prepare, disables the bridge
818 * @post_disable: Called right after encoder prepare, for lockstepped disable 874 * @post_disable: Called right after encoder prepare, for lockstepped disable
819 * @mode_set: Set this mode to the bridge 875 * @mode_set: Set this mode to the bridge
820 * @pre_enable: Called right before encoder commit, for lockstepped commit 876 * @pre_enable: Called right before encoder commit, for lockstepped commit
821 * @enable: Called right after encoder commit, enables the bridge 877 * @enable: Called right after encoder commit, enables the bridge
822 * @destroy: make object go away
823 */ 878 */
824struct drm_bridge_funcs { 879struct drm_bridge_funcs {
880 int (*attach)(struct drm_bridge *bridge);
825 bool (*mode_fixup)(struct drm_bridge *bridge, 881 bool (*mode_fixup)(struct drm_bridge *bridge,
826 const struct drm_display_mode *mode, 882 const struct drm_display_mode *mode,
827 struct drm_display_mode *adjusted_mode); 883 struct drm_display_mode *adjusted_mode);
@@ -832,22 +888,24 @@ struct drm_bridge_funcs {
832 struct drm_display_mode *adjusted_mode); 888 struct drm_display_mode *adjusted_mode);
833 void (*pre_enable)(struct drm_bridge *bridge); 889 void (*pre_enable)(struct drm_bridge *bridge);
834 void (*enable)(struct drm_bridge *bridge); 890 void (*enable)(struct drm_bridge *bridge);
835 void (*destroy)(struct drm_bridge *bridge);
836}; 891};
837 892
838/** 893/**
839 * struct drm_bridge - central DRM bridge control structure 894 * struct drm_bridge - central DRM bridge control structure
840 * @dev: DRM device this bridge belongs to 895 * @dev: DRM device this bridge belongs to
841 * @head: list management 896 * @of_node: device node pointer to the bridge
897 * @list: to keep track of all added bridges
842 * @base: base mode object 898 * @base: base mode object
843 * @funcs: control functions 899 * @funcs: control functions
844 * @driver_private: pointer to the bridge driver's internal context 900 * @driver_private: pointer to the bridge driver's internal context
845 */ 901 */
846struct drm_bridge { 902struct drm_bridge {
847 struct drm_device *dev; 903 struct drm_device *dev;
848 struct list_head head; 904 struct drm_encoder *encoder;
849 905#ifdef CONFIG_OF
850 struct drm_mode_object base; 906 struct device_node *of_node;
907#endif
908 struct list_head list;
851 909
852 const struct drm_bridge_funcs *funcs; 910 const struct drm_bridge_funcs *funcs;
853 void *driver_private; 911 void *driver_private;
@@ -856,7 +914,8 @@ struct drm_bridge {
856/** 914/**
857 * struct struct drm_atomic_state - the global state object for atomic updates 915 * struct struct drm_atomic_state - the global state object for atomic updates
858 * @dev: parent DRM device 916 * @dev: parent DRM device
859 * @flags: state flags like async update 917 * @allow_modeset: allow full modeset
918 * @legacy_cursor_update: hint to enforce legacy cursor ioctl semantics
860 * @planes: pointer to array of plane pointers 919 * @planes: pointer to array of plane pointers
861 * @plane_states: pointer to array of plane states pointers 920 * @plane_states: pointer to array of plane states pointers
862 * @crtcs: pointer to array of CRTC pointers 921 * @crtcs: pointer to array of CRTC pointers
@@ -868,7 +927,8 @@ struct drm_bridge {
868 */ 927 */
869struct drm_atomic_state { 928struct drm_atomic_state {
870 struct drm_device *dev; 929 struct drm_device *dev;
871 uint32_t flags; 930 bool allow_modeset : 1;
931 bool legacy_cursor_update : 1;
872 struct drm_plane **planes; 932 struct drm_plane **planes;
873 struct drm_plane_state **plane_states; 933 struct drm_plane_state **plane_states;
874 struct drm_crtc **crtcs; 934 struct drm_crtc **crtcs;
@@ -950,7 +1010,6 @@ struct drm_mode_group {
950 uint32_t num_crtcs; 1010 uint32_t num_crtcs;
951 uint32_t num_encoders; 1011 uint32_t num_encoders;
952 uint32_t num_connectors; 1012 uint32_t num_connectors;
953 uint32_t num_bridges;
954 1013
955 /* list of object IDs for this group */ 1014 /* list of object IDs for this group */
956 uint32_t *id_list; 1015 uint32_t *id_list;
@@ -969,8 +1028,6 @@ struct drm_mode_group {
969 * @fb_list: list of framebuffers available 1028 * @fb_list: list of framebuffers available
970 * @num_connector: number of connectors on this device 1029 * @num_connector: number of connectors on this device
971 * @connector_list: list of connector objects 1030 * @connector_list: list of connector objects
972 * @num_bridge: number of bridges on this device
973 * @bridge_list: list of bridge objects
974 * @num_encoder: number of encoders on this device 1031 * @num_encoder: number of encoders on this device
975 * @encoder_list: list of encoder objects 1032 * @encoder_list: list of encoder objects
976 * @num_overlay_plane: number of overlay planes on this device 1033 * @num_overlay_plane: number of overlay planes on this device
@@ -1015,8 +1072,6 @@ struct drm_mode_config {
1015 1072
1016 int num_connector; 1073 int num_connector;
1017 struct list_head connector_list; 1074 struct list_head connector_list;
1018 int num_bridge;
1019 struct list_head bridge_list;
1020 int num_encoder; 1075 int num_encoder;
1021 struct list_head encoder_list; 1076 struct list_head encoder_list;
1022 1077
@@ -1043,6 +1098,7 @@ struct drm_mode_config {
1043 /* output poll support */ 1098 /* output poll support */
1044 bool poll_enabled; 1099 bool poll_enabled;
1045 bool poll_running; 1100 bool poll_running;
1101 bool delayed_event;
1046 struct delayed_work output_poll_work; 1102 struct delayed_work output_poll_work;
1047 1103
1048 /* pointers to standard properties */ 1104 /* pointers to standard properties */
@@ -1053,6 +1109,17 @@ struct drm_mode_config {
1053 struct drm_property *tile_property; 1109 struct drm_property *tile_property;
1054 struct drm_property *plane_type_property; 1110 struct drm_property *plane_type_property;
1055 struct drm_property *rotation_property; 1111 struct drm_property *rotation_property;
1112 struct drm_property *prop_src_x;
1113 struct drm_property *prop_src_y;
1114 struct drm_property *prop_src_w;
1115 struct drm_property *prop_src_h;
1116 struct drm_property *prop_crtc_x;
1117 struct drm_property *prop_crtc_y;
1118 struct drm_property *prop_crtc_w;
1119 struct drm_property *prop_crtc_h;
1120 struct drm_property *prop_fb_id;
1121 struct drm_property *prop_crtc_id;
1122 struct drm_property *prop_active;
1056 1123
1057 /* DVI-I properties */ 1124 /* DVI-I properties */
1058 struct drm_property *dvi_i_subconnector_property; 1125 struct drm_property *dvi_i_subconnector_property;
@@ -1153,9 +1220,10 @@ extern unsigned int drm_connector_index(struct drm_connector *connector);
1153/* helper to unplug all connectors from sysfs for device */ 1220/* helper to unplug all connectors from sysfs for device */
1154extern void drm_connector_unplug_all(struct drm_device *dev); 1221extern void drm_connector_unplug_all(struct drm_device *dev);
1155 1222
1156extern int drm_bridge_init(struct drm_device *dev, struct drm_bridge *bridge, 1223extern int drm_bridge_add(struct drm_bridge *bridge);
1157 const struct drm_bridge_funcs *funcs); 1224extern void drm_bridge_remove(struct drm_bridge *bridge);
1158extern void drm_bridge_cleanup(struct drm_bridge *bridge); 1225extern struct drm_bridge *of_drm_find_bridge(struct device_node *np);
1226extern int drm_bridge_attach(struct drm_device *dev, struct drm_bridge *bridge);
1159 1227
1160extern int drm_encoder_init(struct drm_device *dev, 1228extern int drm_encoder_init(struct drm_device *dev,
1161 struct drm_encoder *encoder, 1229 struct drm_encoder *encoder,
@@ -1191,6 +1259,8 @@ extern int drm_plane_init(struct drm_device *dev,
1191extern void drm_plane_cleanup(struct drm_plane *plane); 1259extern void drm_plane_cleanup(struct drm_plane *plane);
1192extern unsigned int drm_plane_index(struct drm_plane *plane); 1260extern unsigned int drm_plane_index(struct drm_plane *plane);
1193extern void drm_plane_force_disable(struct drm_plane *plane); 1261extern void drm_plane_force_disable(struct drm_plane *plane);
1262extern void drm_crtc_get_hv_timing(const struct drm_display_mode *mode,
1263 int *hdisplay, int *vdisplay);
1194extern int drm_crtc_check_viewport(const struct drm_crtc *crtc, 1264extern int drm_crtc_check_viewport(const struct drm_crtc *crtc,
1195 int x, int y, 1265 int x, int y,
1196 const struct drm_display_mode *mode, 1266 const struct drm_display_mode *mode,
@@ -1224,6 +1294,10 @@ int drm_mode_connector_set_tile_property(struct drm_connector *connector);
1224extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, 1294extern int drm_mode_connector_update_edid_property(struct drm_connector *connector,
1225 const struct edid *edid); 1295 const struct edid *edid);
1226 1296
1297extern int drm_display_info_set_bus_formats(struct drm_display_info *info,
1298 const u32 *formats,
1299 unsigned int num_formats);
1300
1227static inline bool drm_property_type_is(struct drm_property *property, 1301static inline bool drm_property_type_is(struct drm_property *property,
1228 uint32_t type) 1302 uint32_t type)
1229{ 1303{
@@ -1279,6 +1353,8 @@ struct drm_property *drm_property_create_signed_range(struct drm_device *dev,
1279 int64_t min, int64_t max); 1353 int64_t min, int64_t max);
1280struct drm_property *drm_property_create_object(struct drm_device *dev, 1354struct drm_property *drm_property_create_object(struct drm_device *dev,
1281 int flags, const char *name, uint32_t type); 1355 int flags, const char *name, uint32_t type);
1356struct drm_property *drm_property_create_bool(struct drm_device *dev, int flags,
1357 const char *name);
1282extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property); 1358extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property);
1283extern int drm_property_add_enum(struct drm_property *property, int index, 1359extern int drm_property_add_enum(struct drm_property *property, int index,
1284 uint64_t value, const char *name); 1360 uint64_t value, const char *name);
@@ -1290,6 +1366,10 @@ extern int drm_mode_create_scaling_mode_property(struct drm_device *dev);
1290extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); 1366extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev);
1291extern int drm_mode_create_dirty_info_property(struct drm_device *dev); 1367extern int drm_mode_create_dirty_info_property(struct drm_device *dev);
1292extern int drm_mode_create_suggested_offset_properties(struct drm_device *dev); 1368extern int drm_mode_create_suggested_offset_properties(struct drm_device *dev);
1369extern bool drm_property_change_valid_get(struct drm_property *property,
1370 uint64_t value, struct drm_mode_object **ref);
1371extern void drm_property_change_valid_put(struct drm_property *property,
1372 struct drm_mode_object *ref);
1293 1373
1294extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, 1374extern int drm_mode_connector_attach_encoder(struct drm_connector *connector,
1295 struct drm_encoder *encoder); 1375 struct drm_encoder *encoder);
@@ -1381,6 +1461,8 @@ extern int drm_mode_obj_set_property_ioctl(struct drm_device *dev, void *data,
1381extern int drm_mode_plane_set_obj_prop(struct drm_plane *plane, 1461extern int drm_mode_plane_set_obj_prop(struct drm_plane *plane,
1382 struct drm_property *property, 1462 struct drm_property *property,
1383 uint64_t value); 1463 uint64_t value);
1464extern int drm_mode_atomic_ioctl(struct drm_device *dev,
1465 void *data, struct drm_file *file_priv);
1384 1466
1385extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth, 1467extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth,
1386 int *bpp); 1468 int *bpp);