diff options
Diffstat (limited to 'include/drm/drm_crtc.h')
-rw-r--r-- | include/drm/drm_crtc.h | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 24f499569a2f..f32c5cd51f41 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -108,6 +108,7 @@ enum drm_mode_status { | |||
108 | MODE_ONE_HEIGHT, /* only one height is supported */ | 108 | MODE_ONE_HEIGHT, /* only one height is supported */ |
109 | MODE_ONE_SIZE, /* only one resolution is supported */ | 109 | MODE_ONE_SIZE, /* only one resolution is supported */ |
110 | MODE_NO_REDUCED, /* monitor doesn't accept reduced blanking */ | 110 | MODE_NO_REDUCED, /* monitor doesn't accept reduced blanking */ |
111 | MODE_NO_STEREO, /* stereo modes not supported */ | ||
111 | MODE_UNVERIFIED = -3, /* mode needs to reverified */ | 112 | MODE_UNVERIFIED = -3, /* mode needs to reverified */ |
112 | MODE_BAD = -2, /* unspecified reason */ | 113 | MODE_BAD = -2, /* unspecified reason */ |
113 | MODE_ERROR = -1 /* error condition */ | 114 | MODE_ERROR = -1 /* error condition */ |
@@ -124,7 +125,10 @@ enum drm_mode_status { | |||
124 | .vscan = (vs), .flags = (f), \ | 125 | .vscan = (vs), .flags = (f), \ |
125 | .base.type = DRM_MODE_OBJECT_MODE | 126 | .base.type = DRM_MODE_OBJECT_MODE |
126 | 127 | ||
127 | #define CRTC_INTERLACE_HALVE_V 0x1 /* halve V values for interlacing */ | 128 | #define CRTC_INTERLACE_HALVE_V (1 << 0) /* halve V values for interlacing */ |
129 | #define CRTC_STEREO_DOUBLE (1 << 1) /* adjust timings for stereo modes */ | ||
130 | |||
131 | #define DRM_MODE_FLAG_3D_MAX DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF | ||
128 | 132 | ||
129 | struct drm_display_mode { | 133 | struct drm_display_mode { |
130 | /* Header */ | 134 | /* Header */ |
@@ -155,8 +159,7 @@ struct drm_display_mode { | |||
155 | int height_mm; | 159 | int height_mm; |
156 | 160 | ||
157 | /* Actual mode we give to hw */ | 161 | /* Actual mode we give to hw */ |
158 | int clock_index; | 162 | int crtc_clock; /* in KHz */ |
159 | int synth_clock; | ||
160 | int crtc_hdisplay; | 163 | int crtc_hdisplay; |
161 | int crtc_hblank_start; | 164 | int crtc_hblank_start; |
162 | int crtc_hblank_end; | 165 | int crtc_hblank_end; |
@@ -180,6 +183,11 @@ struct drm_display_mode { | |||
180 | int hsync; /* in kHz */ | 183 | int hsync; /* in kHz */ |
181 | }; | 184 | }; |
182 | 185 | ||
186 | static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode) | ||
187 | { | ||
188 | return mode->flags & DRM_MODE_FLAG_3D_MASK; | ||
189 | } | ||
190 | |||
183 | enum drm_connector_status { | 191 | enum drm_connector_status { |
184 | connector_status_connected = 1, | 192 | connector_status_connected = 1, |
185 | connector_status_disconnected = 2, | 193 | connector_status_disconnected = 2, |
@@ -587,7 +595,7 @@ enum drm_connector_force { | |||
587 | */ | 595 | */ |
588 | struct drm_connector { | 596 | struct drm_connector { |
589 | struct drm_device *dev; | 597 | struct drm_device *dev; |
590 | struct device kdev; | 598 | struct device *kdev; |
591 | struct device_attribute *attr; | 599 | struct device_attribute *attr; |
592 | struct list_head head; | 600 | struct list_head head; |
593 | 601 | ||
@@ -597,6 +605,7 @@ struct drm_connector { | |||
597 | int connector_type_id; | 605 | int connector_type_id; |
598 | bool interlace_allowed; | 606 | bool interlace_allowed; |
599 | bool doublescan_allowed; | 607 | bool doublescan_allowed; |
608 | bool stereo_allowed; | ||
600 | struct list_head modes; /* list of modes on this connector */ | 609 | struct list_head modes; /* list of modes on this connector */ |
601 | 610 | ||
602 | enum drm_connector_status status; | 611 | enum drm_connector_status status; |
@@ -964,6 +973,7 @@ extern int drm_mode_group_init_legacy_group(struct drm_device *dev, struct drm_m | |||
964 | extern bool drm_probe_ddc(struct i2c_adapter *adapter); | 973 | extern bool drm_probe_ddc(struct i2c_adapter *adapter); |
965 | extern struct edid *drm_get_edid(struct drm_connector *connector, | 974 | extern struct edid *drm_get_edid(struct drm_connector *connector, |
966 | struct i2c_adapter *adapter); | 975 | struct i2c_adapter *adapter); |
976 | extern struct edid *drm_edid_duplicate(const struct edid *edid); | ||
967 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); | 977 | extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid); |
968 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); | 978 | extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode); |
969 | extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src); | 979 | extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src); |
@@ -975,7 +985,7 @@ extern void drm_mode_config_reset(struct drm_device *dev); | |||
975 | extern void drm_mode_config_cleanup(struct drm_device *dev); | 985 | extern void drm_mode_config_cleanup(struct drm_device *dev); |
976 | extern void drm_mode_set_name(struct drm_display_mode *mode); | 986 | extern void drm_mode_set_name(struct drm_display_mode *mode); |
977 | extern bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2); | 987 | extern bool drm_mode_equal(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2); |
978 | extern bool drm_mode_equal_no_clocks(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2); | 988 | extern bool drm_mode_equal_no_clocks_no_stereo(const struct drm_display_mode *mode1, const struct drm_display_mode *mode2); |
979 | extern int drm_mode_width(const struct drm_display_mode *mode); | 989 | extern int drm_mode_width(const struct drm_display_mode *mode); |
980 | extern int drm_mode_height(const struct drm_display_mode *mode); | 990 | extern int drm_mode_height(const struct drm_display_mode *mode); |
981 | 991 | ||
@@ -1108,6 +1118,8 @@ extern struct drm_display_mode *drm_gtf_mode_complex(struct drm_device *dev, | |||
1108 | int GTF_2C, int GTF_K, int GTF_2J); | 1118 | int GTF_2C, int GTF_K, int GTF_2J); |
1109 | extern int drm_add_modes_noedid(struct drm_connector *connector, | 1119 | extern int drm_add_modes_noedid(struct drm_connector *connector, |
1110 | int hdisplay, int vdisplay); | 1120 | int hdisplay, int vdisplay); |
1121 | extern void drm_set_preferred_mode(struct drm_connector *connector, | ||
1122 | int hpref, int vpref); | ||
1111 | 1123 | ||
1112 | extern int drm_edid_header_is_valid(const u8 *raw_edid); | 1124 | extern int drm_edid_header_is_valid(const u8 *raw_edid); |
1113 | extern bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid); | 1125 | extern bool drm_edid_block_valid(u8 *raw_edid, int block, bool print_bad_edid); |
@@ -1135,4 +1147,21 @@ extern int drm_format_horz_chroma_subsampling(uint32_t format); | |||
1135 | extern int drm_format_vert_chroma_subsampling(uint32_t format); | 1147 | extern int drm_format_vert_chroma_subsampling(uint32_t format); |
1136 | extern const char *drm_get_format_name(uint32_t format); | 1148 | extern const char *drm_get_format_name(uint32_t format); |
1137 | 1149 | ||
1150 | /* Helpers */ | ||
1151 | static inline struct drm_crtc *drm_crtc_find(struct drm_device *dev, | ||
1152 | uint32_t id) | ||
1153 | { | ||
1154 | struct drm_mode_object *mo; | ||
1155 | mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_CRTC); | ||
1156 | return mo ? obj_to_crtc(mo) : NULL; | ||
1157 | } | ||
1158 | |||
1159 | static inline struct drm_encoder *drm_encoder_find(struct drm_device *dev, | ||
1160 | uint32_t id) | ||
1161 | { | ||
1162 | struct drm_mode_object *mo; | ||
1163 | mo = drm_mode_object_find(dev, id, DRM_MODE_OBJECT_ENCODER); | ||
1164 | return mo ? obj_to_encoder(mo) : NULL; | ||
1165 | } | ||
1166 | |||
1138 | #endif /* __DRM_CRTC_H__ */ | 1167 | #endif /* __DRM_CRTC_H__ */ |