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); |
