diff options
author | Patrik Jakobsson <patrik.r.jakobsson@gmail.com> | 2013-07-10 18:54:45 -0400 |
---|---|---|
committer | Patrik Jakobsson <patrik.r.jakobsson@gmail.com> | 2013-07-23 19:47:28 -0400 |
commit | 593458470191e9226c2530c0e10f8e35604063dc (patch) | |
tree | d8dfa44936350b04e6fdeb49ea7431f9ad7fe0ff | |
parent | 561573bf69f71c67e6d807efef91c7cf11637817 (diff) |
drm/gma500: Add generic encoder functions
Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
-rw-r--r-- | drivers/gpu/drm/gma500/gma_display.c | 41 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/gma_display.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/gma500/psb_intel_drv.h | 10 |
3 files changed, 55 insertions, 0 deletions
diff --git a/drivers/gpu/drm/gma500/gma_display.c b/drivers/gpu/drm/gma500/gma_display.c index 40894c206098..98a0eec38cbe 100644 --- a/drivers/gpu/drm/gma500/gma_display.c +++ b/drivers/gpu/drm/gma500/gma_display.c | |||
@@ -519,6 +519,47 @@ void gma_crtc_destroy(struct drm_crtc *crtc) | |||
519 | kfree(psb_intel_crtc); | 519 | kfree(psb_intel_crtc); |
520 | } | 520 | } |
521 | 521 | ||
522 | void gma_encoder_prepare(struct drm_encoder *encoder) | ||
523 | { | ||
524 | struct drm_encoder_helper_funcs *encoder_funcs = | ||
525 | encoder->helper_private; | ||
526 | /* lvds has its own version of prepare see psb_intel_lvds_prepare */ | ||
527 | encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF); | ||
528 | } | ||
529 | |||
530 | void gma_encoder_commit(struct drm_encoder *encoder) | ||
531 | { | ||
532 | struct drm_encoder_helper_funcs *encoder_funcs = | ||
533 | encoder->helper_private; | ||
534 | /* lvds has its own version of commit see psb_intel_lvds_commit */ | ||
535 | encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON); | ||
536 | } | ||
537 | |||
538 | void gma_encoder_destroy(struct drm_encoder *encoder) | ||
539 | { | ||
540 | struct psb_intel_encoder *intel_encoder = to_psb_intel_encoder(encoder); | ||
541 | |||
542 | drm_encoder_cleanup(encoder); | ||
543 | kfree(intel_encoder); | ||
544 | } | ||
545 | |||
546 | /* Currently there is only a 1:1 mapping of encoders and connectors */ | ||
547 | struct drm_encoder *gma_best_encoder(struct drm_connector *connector) | ||
548 | { | ||
549 | struct psb_intel_encoder *psb_intel_encoder = | ||
550 | psb_intel_attached_encoder(connector); | ||
551 | |||
552 | return &psb_intel_encoder->base; | ||
553 | } | ||
554 | |||
555 | void gma_connector_attach_encoder(struct psb_intel_connector *connector, | ||
556 | struct psb_intel_encoder *encoder) | ||
557 | { | ||
558 | connector->encoder = encoder; | ||
559 | drm_mode_connector_attach_encoder(&connector->base, | ||
560 | &encoder->base); | ||
561 | } | ||
562 | |||
522 | #define GMA_PLL_INVALID(s) { /* DRM_ERROR(s); */ return false; } | 563 | #define GMA_PLL_INVALID(s) { /* DRM_ERROR(s); */ return false; } |
523 | 564 | ||
524 | bool gma_pll_is_valid(struct drm_crtc *crtc, | 565 | bool gma_pll_is_valid(struct drm_crtc *crtc, |
diff --git a/drivers/gpu/drm/gma500/gma_display.h b/drivers/gpu/drm/gma500/gma_display.h index 0d3b6074ca99..1e7016529d75 100644 --- a/drivers/gpu/drm/gma500/gma_display.h +++ b/drivers/gpu/drm/gma500/gma_display.h | |||
@@ -81,6 +81,10 @@ extern void gma_crtc_commit(struct drm_crtc *crtc); | |||
81 | extern void gma_crtc_disable(struct drm_crtc *crtc); | 81 | extern void gma_crtc_disable(struct drm_crtc *crtc); |
82 | extern void gma_crtc_destroy(struct drm_crtc *crtc); | 82 | extern void gma_crtc_destroy(struct drm_crtc *crtc); |
83 | 83 | ||
84 | extern void gma_encoder_prepare(struct drm_encoder *encoder); | ||
85 | extern void gma_encoder_commit(struct drm_encoder *encoder); | ||
86 | extern void gma_encoder_destroy(struct drm_encoder *encoder); | ||
87 | |||
84 | /* Common clock related functions */ | 88 | /* Common clock related functions */ |
85 | extern const struct gma_limit_t *gma_limit(struct drm_crtc *crtc, int refclk); | 89 | extern const struct gma_limit_t *gma_limit(struct drm_crtc *crtc, int refclk); |
86 | extern void gma_clock(int refclk, struct gma_clock_t *clock); | 90 | extern void gma_clock(int refclk, struct gma_clock_t *clock); |
diff --git a/drivers/gpu/drm/gma500/psb_intel_drv.h b/drivers/gpu/drm/gma500/psb_intel_drv.h index c8cd9bee7a89..39f09e067beb 100644 --- a/drivers/gpu/drm/gma500/psb_intel_drv.h +++ b/drivers/gpu/drm/gma500/psb_intel_drv.h | |||
@@ -230,12 +230,22 @@ extern void psb_intel_encoder_prepare(struct drm_encoder *encoder); | |||
230 | extern void psb_intel_encoder_commit(struct drm_encoder *encoder); | 230 | extern void psb_intel_encoder_commit(struct drm_encoder *encoder); |
231 | extern void psb_intel_encoder_destroy(struct drm_encoder *encoder); | 231 | extern void psb_intel_encoder_destroy(struct drm_encoder *encoder); |
232 | 232 | ||
233 | extern struct drm_encoder *gma_best_encoder(struct drm_connector *connector); | ||
234 | extern void gma_connector_attach_encoder(struct psb_intel_connector *connector, | ||
235 | struct psb_intel_encoder *encoder); | ||
236 | |||
233 | static inline struct psb_intel_encoder *psb_intel_attached_encoder( | 237 | static inline struct psb_intel_encoder *psb_intel_attached_encoder( |
234 | struct drm_connector *connector) | 238 | struct drm_connector *connector) |
235 | { | 239 | { |
236 | return to_psb_intel_connector(connector)->encoder; | 240 | return to_psb_intel_connector(connector)->encoder; |
237 | } | 241 | } |
238 | 242 | ||
243 | static inline struct psb_intel_encoder *gma_attached_encoder( | ||
244 | struct drm_connector *connector) | ||
245 | { | ||
246 | return to_psb_intel_connector(connector)->encoder; | ||
247 | } | ||
248 | |||
239 | extern void psb_intel_connector_attach_encoder( | 249 | extern void psb_intel_connector_attach_encoder( |
240 | struct psb_intel_connector *connector, | 250 | struct psb_intel_connector *connector, |
241 | struct psb_intel_encoder *encoder); | 251 | struct psb_intel_encoder *encoder); |