diff options
author | Kevin Brace <kevinbrace@gmx.com> | 2017-07-04 03:00:53 -0500 |
---|---|---|
committer | Kevin Brace <kevinbrace@gmx.com> | 2017-07-04 03:00:53 -0500 |
commit | 6fe68452579d63ca08d4d6dbced230e9a95a91ad (patch) | |
tree | b36394eaf206642e451ada26664996523373f0fa | |
parent | dc4f06c03fdf38a5d8734f028ac5dfab2bdc8260 (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.c | 52 |
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, |