diff options
Diffstat (limited to 'include/drm/drm_crtc.h')
-rw-r--r-- | include/drm/drm_crtc.h | 120 |
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 |
65 | struct drm_object_properties { | 66 | struct 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 | */ |
252 | struct drm_crtc_state { | 273 | struct 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 | */ |
456 | struct drm_connector_state { | 489 | struct 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 | */ |
711 | struct drm_plane_state { | 754 | struct 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 | */ |
739 | struct drm_plane_funcs { | 790 | struct 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 | ||
763 | enum drm_plane_type { | 818 | enum 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 | */ |
824 | struct drm_bridge_funcs { | 879 | struct 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 | */ |
846 | struct drm_bridge { | 902 | struct 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 | */ |
869 | struct drm_atomic_state { | 928 | struct 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 */ |
1154 | extern void drm_connector_unplug_all(struct drm_device *dev); | 1221 | extern void drm_connector_unplug_all(struct drm_device *dev); |
1155 | 1222 | ||
1156 | extern int drm_bridge_init(struct drm_device *dev, struct drm_bridge *bridge, | 1223 | extern int drm_bridge_add(struct drm_bridge *bridge); |
1157 | const struct drm_bridge_funcs *funcs); | 1224 | extern void drm_bridge_remove(struct drm_bridge *bridge); |
1158 | extern void drm_bridge_cleanup(struct drm_bridge *bridge); | 1225 | extern struct drm_bridge *of_drm_find_bridge(struct device_node *np); |
1226 | extern int drm_bridge_attach(struct drm_device *dev, struct drm_bridge *bridge); | ||
1159 | 1227 | ||
1160 | extern int drm_encoder_init(struct drm_device *dev, | 1228 | extern 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, | |||
1191 | extern void drm_plane_cleanup(struct drm_plane *plane); | 1259 | extern void drm_plane_cleanup(struct drm_plane *plane); |
1192 | extern unsigned int drm_plane_index(struct drm_plane *plane); | 1260 | extern unsigned int drm_plane_index(struct drm_plane *plane); |
1193 | extern void drm_plane_force_disable(struct drm_plane *plane); | 1261 | extern void drm_plane_force_disable(struct drm_plane *plane); |
1262 | extern void drm_crtc_get_hv_timing(const struct drm_display_mode *mode, | ||
1263 | int *hdisplay, int *vdisplay); | ||
1194 | extern int drm_crtc_check_viewport(const struct drm_crtc *crtc, | 1264 | extern 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); | |||
1224 | extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, | 1294 | extern int drm_mode_connector_update_edid_property(struct drm_connector *connector, |
1225 | const struct edid *edid); | 1295 | const struct edid *edid); |
1226 | 1296 | ||
1297 | extern int drm_display_info_set_bus_formats(struct drm_display_info *info, | ||
1298 | const u32 *formats, | ||
1299 | unsigned int num_formats); | ||
1300 | |||
1227 | static inline bool drm_property_type_is(struct drm_property *property, | 1301 | static 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); |
1280 | struct drm_property *drm_property_create_object(struct drm_device *dev, | 1354 | struct 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); |
1356 | struct drm_property *drm_property_create_bool(struct drm_device *dev, int flags, | ||
1357 | const char *name); | ||
1282 | extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property); | 1358 | extern void drm_property_destroy(struct drm_device *dev, struct drm_property *property); |
1283 | extern int drm_property_add_enum(struct drm_property *property, int index, | 1359 | extern 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); | |||
1290 | extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); | 1366 | extern int drm_mode_create_aspect_ratio_property(struct drm_device *dev); |
1291 | extern int drm_mode_create_dirty_info_property(struct drm_device *dev); | 1367 | extern int drm_mode_create_dirty_info_property(struct drm_device *dev); |
1292 | extern int drm_mode_create_suggested_offset_properties(struct drm_device *dev); | 1368 | extern int drm_mode_create_suggested_offset_properties(struct drm_device *dev); |
1369 | extern bool drm_property_change_valid_get(struct drm_property *property, | ||
1370 | uint64_t value, struct drm_mode_object **ref); | ||
1371 | extern void drm_property_change_valid_put(struct drm_property *property, | ||
1372 | struct drm_mode_object *ref); | ||
1293 | 1373 | ||
1294 | extern int drm_mode_connector_attach_encoder(struct drm_connector *connector, | 1374 | extern 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, | |||
1381 | extern int drm_mode_plane_set_obj_prop(struct drm_plane *plane, | 1461 | extern 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); |
1464 | extern int drm_mode_atomic_ioctl(struct drm_device *dev, | ||
1465 | void *data, struct drm_file *file_priv); | ||
1384 | 1466 | ||
1385 | extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth, | 1467 | extern void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth, |
1386 | int *bpp); | 1468 | int *bpp); |