diff options
Diffstat (limited to 'include/drm')
-rw-r--r-- | include/drm/drm_crtc.h | 14 | ||||
-rw-r--r-- | include/drm/drm_crtc_helper.h | 4 | ||||
-rw-r--r-- | include/drm/drm_fb_helper.h | 24 |
3 files changed, 40 insertions, 2 deletions
diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index ae1e9e166959..b69347b8904f 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h | |||
@@ -387,6 +387,7 @@ struct drm_crtc { | |||
387 | * @get_modes: get mode list for this connector | 387 | * @get_modes: get mode list for this connector |
388 | * @set_property: property for this connector may need update | 388 | * @set_property: property for this connector may need update |
389 | * @destroy: make object go away | 389 | * @destroy: make object go away |
390 | * @force: notify the driver the connector is forced on | ||
390 | * | 391 | * |
391 | * Each CRTC may have one or more connectors attached to it. The functions | 392 | * Each CRTC may have one or more connectors attached to it. The functions |
392 | * below allow the core DRM code to control connectors, enumerate available modes, | 393 | * below allow the core DRM code to control connectors, enumerate available modes, |
@@ -401,6 +402,7 @@ struct drm_connector_funcs { | |||
401 | int (*set_property)(struct drm_connector *connector, struct drm_property *property, | 402 | int (*set_property)(struct drm_connector *connector, struct drm_property *property, |
402 | uint64_t val); | 403 | uint64_t val); |
403 | void (*destroy)(struct drm_connector *connector); | 404 | void (*destroy)(struct drm_connector *connector); |
405 | void (*force)(struct drm_connector *connector); | ||
404 | }; | 406 | }; |
405 | 407 | ||
406 | struct drm_encoder_funcs { | 408 | struct drm_encoder_funcs { |
@@ -429,6 +431,13 @@ struct drm_encoder { | |||
429 | void *helper_private; | 431 | void *helper_private; |
430 | }; | 432 | }; |
431 | 433 | ||
434 | enum drm_connector_force { | ||
435 | DRM_FORCE_UNSPECIFIED, | ||
436 | DRM_FORCE_OFF, | ||
437 | DRM_FORCE_ON, /* force on analog part normally */ | ||
438 | DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */ | ||
439 | }; | ||
440 | |||
432 | /** | 441 | /** |
433 | * drm_connector - central DRM connector control structure | 442 | * drm_connector - central DRM connector control structure |
434 | * @crtc: CRTC this connector is currently connected to, NULL if none | 443 | * @crtc: CRTC this connector is currently connected to, NULL if none |
@@ -478,9 +487,12 @@ struct drm_connector { | |||
478 | 487 | ||
479 | void *helper_private; | 488 | void *helper_private; |
480 | 489 | ||
490 | /* forced on connector */ | ||
491 | enum drm_connector_force force; | ||
481 | uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER]; | 492 | uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER]; |
482 | uint32_t force_encoder_id; | 493 | uint32_t force_encoder_id; |
483 | struct drm_encoder *encoder; /* currently active encoder */ | 494 | struct drm_encoder *encoder; /* currently active encoder */ |
495 | void *fb_helper_private; | ||
484 | }; | 496 | }; |
485 | 497 | ||
486 | /** | 498 | /** |
@@ -746,7 +758,7 @@ extern int drm_mode_gamma_set_ioctl(struct drm_device *dev, | |||
746 | extern bool drm_detect_hdmi_monitor(struct edid *edid); | 758 | extern bool drm_detect_hdmi_monitor(struct edid *edid); |
747 | extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, | 759 | extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, |
748 | int hdisplay, int vdisplay, int vrefresh, | 760 | int hdisplay, int vdisplay, int vrefresh, |
749 | bool reduced, bool interlaced); | 761 | bool reduced, bool interlaced, bool margins); |
750 | extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, | 762 | extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, |
751 | int hdisplay, int vdisplay, int vrefresh, | 763 | int hdisplay, int vdisplay, int vrefresh, |
752 | bool interlaced, int margins); | 764 | bool interlaced, int margins); |
diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h index 4c8dacaf4f58..ef47dfd8e5e9 100644 --- a/include/drm/drm_crtc_helper.h +++ b/include/drm/drm_crtc_helper.h | |||
@@ -39,6 +39,7 @@ | |||
39 | 39 | ||
40 | #include <linux/fb.h> | 40 | #include <linux/fb.h> |
41 | 41 | ||
42 | #include "drm_fb_helper.h" | ||
42 | struct drm_crtc_helper_funcs { | 43 | struct drm_crtc_helper_funcs { |
43 | /* | 44 | /* |
44 | * Control power levels on the CRTC. If the mode passed in is | 45 | * Control power levels on the CRTC. If the mode passed in is |
@@ -119,10 +120,11 @@ static inline void drm_encoder_helper_add(struct drm_encoder *encoder, | |||
119 | encoder->helper_private = (void *)funcs; | 120 | encoder->helper_private = (void *)funcs; |
120 | } | 121 | } |
121 | 122 | ||
122 | static inline void drm_connector_helper_add(struct drm_connector *connector, | 123 | static inline int drm_connector_helper_add(struct drm_connector *connector, |
123 | const struct drm_connector_helper_funcs *funcs) | 124 | const struct drm_connector_helper_funcs *funcs) |
124 | { | 125 | { |
125 | connector->helper_private = (void *)funcs; | 126 | connector->helper_private = (void *)funcs; |
127 | return drm_fb_helper_add_connector(connector); | ||
126 | } | 128 | } |
127 | 129 | ||
128 | extern int drm_helper_resume_force_mode(struct drm_device *dev); | 130 | extern int drm_helper_resume_force_mode(struct drm_device *dev); |
diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h index 88fffbdfa26f..4aa5740ce59f 100644 --- a/include/drm/drm_fb_helper.h +++ b/include/drm/drm_fb_helper.h | |||
@@ -35,11 +35,30 @@ struct drm_fb_helper_crtc { | |||
35 | struct drm_mode_set mode_set; | 35 | struct drm_mode_set mode_set; |
36 | }; | 36 | }; |
37 | 37 | ||
38 | |||
38 | struct drm_fb_helper_funcs { | 39 | struct drm_fb_helper_funcs { |
39 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, | 40 | void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, |
40 | u16 blue, int regno); | 41 | u16 blue, int regno); |
41 | }; | 42 | }; |
42 | 43 | ||
44 | /* mode specified on the command line */ | ||
45 | struct drm_fb_helper_cmdline_mode { | ||
46 | bool specified; | ||
47 | bool refresh_specified; | ||
48 | bool bpp_specified; | ||
49 | int xres, yres; | ||
50 | int bpp; | ||
51 | int refresh; | ||
52 | bool rb; | ||
53 | bool interlace; | ||
54 | bool cvt; | ||
55 | bool margins; | ||
56 | }; | ||
57 | |||
58 | struct drm_fb_helper_connector { | ||
59 | struct drm_fb_helper_cmdline_mode cmdline_mode; | ||
60 | }; | ||
61 | |||
43 | struct drm_fb_helper { | 62 | struct drm_fb_helper { |
44 | struct drm_framebuffer *fb; | 63 | struct drm_framebuffer *fb; |
45 | struct drm_device *dev; | 64 | struct drm_device *dev; |
@@ -57,6 +76,8 @@ int drm_fb_helper_single_fb_probe(struct drm_device *dev, | |||
57 | uint32_t fb_height, | 76 | uint32_t fb_height, |
58 | uint32_t surface_width, | 77 | uint32_t surface_width, |
59 | uint32_t surface_height, | 78 | uint32_t surface_height, |
79 | uint32_t surface_depth, | ||
80 | uint32_t surface_bpp, | ||
60 | struct drm_framebuffer **fb_ptr)); | 81 | struct drm_framebuffer **fb_ptr)); |
61 | int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count, | 82 | int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count, |
62 | int max_conn); | 83 | int max_conn); |
@@ -79,4 +100,7 @@ void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb, | |||
79 | uint32_t fb_width, uint32_t fb_height); | 100 | uint32_t fb_width, uint32_t fb_height); |
80 | void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch); | 101 | void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch); |
81 | 102 | ||
103 | int drm_fb_helper_add_connector(struct drm_connector *connector); | ||
104 | int drm_fb_helper_parse_command_line(struct drm_device *dev); | ||
105 | |||
82 | #endif | 106 | #endif |