aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrik Jakobsson <patrik.r.jakobsson@gmail.com>2013-07-10 18:54:45 -0400
committerPatrik Jakobsson <patrik.r.jakobsson@gmail.com>2013-07-23 19:47:28 -0400
commit593458470191e9226c2530c0e10f8e35604063dc (patch)
treed8dfa44936350b04e6fdeb49ea7431f9ad7fe0ff
parent561573bf69f71c67e6d807efef91c7cf11637817 (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.c41
-rw-r--r--drivers/gpu/drm/gma500/gma_display.h4
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_drv.h10
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
522void 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
530void 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
538void 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 */
547struct 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
555void 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
524bool gma_pll_is_valid(struct drm_crtc *crtc, 565bool 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);
81extern void gma_crtc_disable(struct drm_crtc *crtc); 81extern void gma_crtc_disable(struct drm_crtc *crtc);
82extern void gma_crtc_destroy(struct drm_crtc *crtc); 82extern void gma_crtc_destroy(struct drm_crtc *crtc);
83 83
84extern void gma_encoder_prepare(struct drm_encoder *encoder);
85extern void gma_encoder_commit(struct drm_encoder *encoder);
86extern void gma_encoder_destroy(struct drm_encoder *encoder);
87
84/* Common clock related functions */ 88/* Common clock related functions */
85extern const struct gma_limit_t *gma_limit(struct drm_crtc *crtc, int refclk); 89extern const struct gma_limit_t *gma_limit(struct drm_crtc *crtc, int refclk);
86extern void gma_clock(int refclk, struct gma_clock_t *clock); 90extern 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);
230extern void psb_intel_encoder_commit(struct drm_encoder *encoder); 230extern void psb_intel_encoder_commit(struct drm_encoder *encoder);
231extern void psb_intel_encoder_destroy(struct drm_encoder *encoder); 231extern void psb_intel_encoder_destroy(struct drm_encoder *encoder);
232 232
233extern struct drm_encoder *gma_best_encoder(struct drm_connector *connector);
234extern void gma_connector_attach_encoder(struct psb_intel_connector *connector,
235 struct psb_intel_encoder *encoder);
236
233static inline struct psb_intel_encoder *psb_intel_attached_encoder( 237static 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
243static inline struct psb_intel_encoder *gma_attached_encoder(
244 struct drm_connector *connector)
245{
246 return to_psb_intel_connector(connector)->encoder;
247}
248
239extern void psb_intel_connector_attach_encoder( 249extern 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);