lkml.org 
[lkml]   [2013]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[ 112/171] drm/edid/quirks: ViewSonic VA2026w
    Date
    3.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Adam Jackson <ajax@redhat.com>

    commit bc42aabc6a01b92b0f961d65671564e0e1cd7592 upstream.

    Entirely new class of fail for this one. The detailed timings are for
    normal CVT but the monitor really wanted CVT-R.

    Bugzilla: http://bugzilla.redhat/com/516471
    Signed-off-by: Adam Jackson <ajax@redhat.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Julien Cristau <jcristau@debian.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/gpu/drm/drm_edid.c | 22 ++++++++++++++++++----
    1 file changed, 18 insertions(+), 4 deletions(-)

    --- a/drivers/gpu/drm/drm_edid.c
    +++ b/drivers/gpu/drm/drm_edid.c
    @@ -66,6 +66,8 @@
    #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5)
    /* use +hsync +vsync for detailed mode */
    #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6)
    +/* Force reduced-blanking timings for detailed modes */
    +#define EDID_QUIRK_FORCE_REDUCED_BLANKING (1 << 7)

    struct detailed_mode_closure {
    struct drm_connector *connector;
    @@ -120,6 +122,9 @@ static struct edid_quirk {
    /* Samsung SyncMaster 22[5-6]BW */
    { "SAM", 596, EDID_QUIRK_PREFER_LARGE_60 },
    { "SAM", 638, EDID_QUIRK_PREFER_LARGE_60 },
    +
    + /* ViewSonic VA2026w */
    + { "VSC", 5020, EDID_QUIRK_FORCE_REDUCED_BLANKING },
    };

    /*** DDC fetch and block validation ***/
    @@ -852,12 +857,19 @@ static struct drm_display_mode *drm_mode
    "Wrong Hsync/Vsync pulse width\n");
    return NULL;
    }
    +
    + if (quirks & EDID_QUIRK_FORCE_REDUCED_BLANKING) {
    + mode = drm_cvt_mode(dev, hactive, vactive, 60, true, false, false);
    + if (!mode)
    + return NULL;
    +
    + goto set_size;
    + }
    +
    mode = drm_mode_create(dev);
    if (!mode)
    return NULL;

    - mode->type = DRM_MODE_TYPE_DRIVER;
    -
    if (quirks & EDID_QUIRK_135_CLOCK_TOO_HIGH)
    timing->pixel_clock = cpu_to_le16(1088);

    @@ -881,8 +893,6 @@ static struct drm_display_mode *drm_mode

    drm_mode_do_interlace_quirk(mode, pt);

    - drm_mode_set_name(mode);
    -
    if (quirks & EDID_QUIRK_DETAILED_SYNC_PP) {
    pt->misc |= DRM_EDID_PT_HSYNC_POSITIVE | DRM_EDID_PT_VSYNC_POSITIVE;
    }
    @@ -892,6 +902,7 @@ static struct drm_display_mode *drm_mode
    mode->flags |= (pt->misc & DRM_EDID_PT_VSYNC_POSITIVE) ?
    DRM_MODE_FLAG_PVSYNC : DRM_MODE_FLAG_NVSYNC;

    +set_size:
    mode->width_mm = pt->width_mm_lo | (pt->width_height_mm_hi & 0xf0) << 4;
    mode->height_mm = pt->height_mm_lo | (pt->width_height_mm_hi & 0xf) << 8;

    @@ -905,6 +916,9 @@ static struct drm_display_mode *drm_mode
    mode->height_mm = edid->height_cm * 10;
    }

    + mode->type = DRM_MODE_TYPE_DRIVER;
    + drm_mode_set_name(mode);
    +
    return mode;
    }




    \
     
     \ /
      Last update: 2013-01-16 01:41    [W:4.771 / U:0.816 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site