summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Brace <kevinbrace@gmx.com>2017-07-04 03:00:53 -0500
committerKevin Brace <kevinbrace@gmx.com>2017-07-04 03:00:53 -0500
commit6fe68452579d63ca08d4d6dbced230e9a95a91ad (patch)
treeb36394eaf206642e451ada26664996523373f0fa
parentdc4f06c03fdf38a5d8734f028ac5dfab2bdc8260 (diff)
Added via_fp_mode_set
As an interim solution, the code from via_set_sync_polarity callback function was imported with modifications made to via_fp_mode_set callback function. Signed-off-by: Kevin Brace <kevinbrace@gmx.com>
-rw-r--r--drivers/gpu/drm/via/via_fp.c52
1 files changed, 51 insertions, 1 deletions
diff --git a/drivers/gpu/drm/via/via_fp.c b/drivers/gpu/drm/via/via_fp.c
index a60a82b66aa8..238f3b6c9ba8 100644
--- a/drivers/gpu/drm/via/via_fp.c
+++ b/drivers/gpu/drm/via/via_fp.c
@@ -433,10 +433,60 @@ via_lvds_mode_fixup(struct drm_encoder *encoder,
return true;
}
+static void
+via_fp_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+{
+ struct via_crtc *iga = container_of(encoder->crtc, struct via_crtc, base);
+ struct via_encoder *enc = container_of(encoder, struct via_encoder, base);
+ struct via_device *dev_priv = encoder->dev->dev_private;
+ u8 syncreg = 0;
+
+ DRM_DEBUG_KMS("Entered via_fp_mode_set.\n");
+
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
+ syncreg |= BIT(6);
+ if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC)
+ syncreg |= BIT(5);
+
+ switch (enc->di_port) {
+ case VIA_DI_PORT_DVP0:
+ svga_wcrt_mask(VGABASE, 0x96, syncreg, BIT(6) | BIT(5));
+ break;
+
+ case VIA_DI_PORT_DVP1:
+ svga_wcrt_mask(VGABASE, 0x9B, syncreg, BIT(6) | BIT(5));
+ break;
+
+ case VIA_DI_PORT_DFPH:
+ svga_wcrt_mask(VGABASE, 0x97, syncreg, BIT(6) | BIT(5));
+ break;
+
+ case VIA_DI_PORT_DFPL:
+ svga_wcrt_mask(VGABASE, 0x99, syncreg, BIT(6) | BIT(5));
+ break;
+
+ /* For TTL Type LCD */
+ case (VIA_DI_PORT_DFPL + VIA_DI_PORT_DVP1):
+ svga_wcrt_mask(VGABASE, 0x99, syncreg, BIT(6) | BIT(5));
+ svga_wcrt_mask(VGABASE, 0x9B, syncreg, BIT(6) | BIT(5));
+ break;
+
+ default:
+ DRM_ERROR("No DIPort.\n");
+ case VIA_DI_PORT_NONE:
+ break;
+ }
+
+ via_fp_display_source(dev_priv, enc->di_port, iga->index);
+
+ DRM_DEBUG_KMS("Exiting via_fp_mode_set.\n");
+}
+
const struct drm_encoder_helper_funcs via_lvds_helper_funcs = {
.dpms = via_fp_dpms,
.mode_fixup = via_lvds_mode_fixup,
- .mode_set = via_set_sync_polarity,
+ .mode_set = via_fp_mode_set,
.prepare = via_encoder_prepare,
.commit = via_encoder_commit,
.disable = via_encoder_disable,