Blame view
include/drm/drm_crtc_helper.h
5.64 KB
f453ba046 DRM: add mode set... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/* * Copyright © 2006 Keith Packard * Copyright © 2007-2008 Dave Airlie * Copyright © 2007-2008 Intel Corporation * Jesse Barnes <jesse.barnes@intel.com> * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ /* * The DRM mode setting helper functions are common code for drivers to use if * they wish. Drivers are not forced to use this code in their * implementations but it would be useful if they code they do use at least * provides a consistent interface and operation to userspace */ #ifndef __DRM_CRTC_HELPER_H__ #define __DRM_CRTC_HELPER_H__ |
f453ba046 DRM: add mode set... |
35 36 37 38 39 |
#include <linux/spinlock.h> #include <linux/types.h> #include <linux/idr.h> #include <linux/fb.h> |
21c74a8ea drm, kdb, kms: Ch... |
40 41 42 43 |
enum mode_set_atomic { LEAVE_ATOMIC_MODE_SET, ENTER_ATOMIC_MODE_SET, }; |
f453ba046 DRM: add mode set... |
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
struct drm_crtc_helper_funcs { /* * Control power levels on the CRTC. If the mode passed in is * unsupported, the provider must use the next lowest power level. */ void (*dpms)(struct drm_crtc *crtc, int mode); void (*prepare)(struct drm_crtc *crtc); void (*commit)(struct drm_crtc *crtc); /* Provider can fixup or change mode timings before modeset occurs */ bool (*mode_fixup)(struct drm_crtc *crtc, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); /* Actually set the mode */ |
5c3b82e2b drm: Propagate fa... |
58 59 60 |
int (*mode_set)(struct drm_crtc *crtc, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode, int x, int y, struct drm_framebuffer *old_fb); |
f453ba046 DRM: add mode set... |
61 62 |
/* Move the crtc on the current fb to the given position *optional* */ |
5c3b82e2b drm: Propagate fa... |
63 64 |
int (*mode_set_base)(struct drm_crtc *crtc, int x, int y, struct drm_framebuffer *old_fb); |
1a7aba7f4 drm: add KGDB/KDB... |
65 |
int (*mode_set_base_atomic)(struct drm_crtc *crtc, |
413d45d36 drm, kdb, kms: Ad... |
66 |
struct drm_framebuffer *fb, int x, int y, |
21c74a8ea drm, kdb, kms: Ch... |
67 |
enum mode_set_atomic); |
068143d38 drm/fb: add setcm... |
68 69 70 |
/* reload the current crtc LUT */ void (*load_lut)(struct drm_crtc *crtc); |
5c8d7171c drm/kms: add crtc... |
71 72 73 |
/* disable crtc when not in use - more explicit than dpms off */ void (*disable)(struct drm_crtc *crtc); |
f453ba046 DRM: add mode set... |
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
}; struct drm_encoder_helper_funcs { void (*dpms)(struct drm_encoder *encoder, int mode); void (*save)(struct drm_encoder *encoder); void (*restore)(struct drm_encoder *encoder); bool (*mode_fixup)(struct drm_encoder *encoder, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); void (*prepare)(struct drm_encoder *encoder); void (*commit)(struct drm_encoder *encoder); void (*mode_set)(struct drm_encoder *encoder, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); |
7bec756c7 drm: disable enco... |
89 |
struct drm_crtc *(*get_crtc)(struct drm_encoder *encoder); |
f453ba046 DRM: add mode set... |
90 91 92 |
/* detect for DAC style encoders */ enum drm_connector_status (*detect)(struct drm_encoder *encoder, struct drm_connector *connector); |
a3a0544b2 drm/kms: add expl... |
93 94 |
/* disable encoder when not in use - more explicit than dpms off */ void (*disable)(struct drm_encoder *encoder); |
f453ba046 DRM: add mode set... |
95 96 97 98 99 100 101 102 |
}; struct drm_connector_helper_funcs { int (*get_modes)(struct drm_connector *connector); int (*mode_valid)(struct drm_connector *connector, struct drm_display_mode *mode); struct drm_encoder *(*best_encoder)(struct drm_connector *connector); }; |
40a518d9f drm: initial KMS ... |
103 |
extern int drm_helper_probe_single_connector_modes(struct drm_connector *connector, uint32_t maxX, uint32_t maxY); |
f453ba046 DRM: add mode set... |
104 |
extern void drm_helper_disable_unused_functions(struct drm_device *dev); |
f453ba046 DRM: add mode set... |
105 106 107 |
extern int drm_crtc_helper_set_config(struct drm_mode_set *set); extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, struct drm_display_mode *mode, |
3c4fdcfb2 drm: pin new and ... |
108 109 |
int x, int y, struct drm_framebuffer *old_fb); |
f453ba046 DRM: add mode set... |
110 |
extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc); |
f380ef869 drm/crtc_helper: ... |
111 |
extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder); |
f453ba046 DRM: add mode set... |
112 |
|
c9fb15f60 drm: Hook up DPMS... |
113 |
extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode); |
f453ba046 DRM: add mode set... |
114 |
extern int drm_helper_mode_fill_fb_struct(struct drm_framebuffer *fb, |
308e5bcbd drm: add an fb cr... |
115 |
struct drm_mode_fb_cmd2 *mode_cmd); |
f453ba046 DRM: add mode set... |
116 117 118 119 120 121 122 123 124 125 126 127 |
static inline void drm_crtc_helper_add(struct drm_crtc *crtc, const struct drm_crtc_helper_funcs *funcs) { crtc->helper_private = (void *)funcs; } static inline void drm_encoder_helper_add(struct drm_encoder *encoder, const struct drm_encoder_helper_funcs *funcs) { encoder->helper_private = (void *)funcs; } |
0b4c0f3f0 drm/kms/fb: separ... |
128 |
static inline void drm_connector_helper_add(struct drm_connector *connector, |
f453ba046 DRM: add mode set... |
129 130 131 132 133 134 |
const struct drm_connector_helper_funcs *funcs) { connector->helper_private = (void *)funcs; } extern int drm_helper_resume_force_mode(struct drm_device *dev); |
eb1f8e4f3 drm/fbdev: rework... |
135 136 137 |
extern void drm_kms_helper_poll_init(struct drm_device *dev); extern void drm_kms_helper_poll_fini(struct drm_device *dev); extern void drm_helper_hpd_irq_event(struct drm_device *dev); |
fbf81762e drm/kms: disable/... |
138 139 140 |
extern void drm_kms_helper_poll_disable(struct drm_device *dev); extern void drm_kms_helper_poll_enable(struct drm_device *dev); |
d0d110e09 drm: Add drm_form... |
141 142 |
extern int drm_format_num_planes(uint32_t format); |
f453ba046 DRM: add mode set... |
143 |
#endif |