lkml.org 
[lkml]   [2010]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[130/145] drm/i915: Use a dmi quirk to skip a broken SDVO TV output.
    2.6.32-stable review patch.  If anyone has any objections, please let me know.

    ----------------
    From: Zhao Yakui <yakui.zhao@intel.com>

    commit 6070a4a928f8c92b9fae7d6717ebbb05f425d6b2 upstream.

    This IBM system has a multi-function SDVO card that reports both VGA
    and TV, but the system has no TV connector. The TV connector always
    reported as connected, which would lead to poor modesetting choices.

    https://bugs.freedesktop.org/show_bug.cgi?id=25787

    Signed-off-by: Zhao Yakui <yakui.zhao@intel.com>
    Tested-by: Vance <liangghv@sg.ibm.com>
    Signed-off-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    drivers/gpu/drm/i915/intel_sdvo.c | 23 ++++++++++++++++++++++-
    1 file changed, 22 insertions(+), 1 deletion(-)

    --- a/drivers/gpu/drm/i915/intel_sdvo.c
    +++ b/drivers/gpu/drm/i915/intel_sdvo.c
    @@ -35,6 +35,7 @@
    #include "i915_drm.h"
    #include "i915_drv.h"
    #include "intel_sdvo_regs.h"
    +#include <linux/dmi.h>

    #undef SDVO_DEBUG

    @@ -2289,6 +2290,25 @@ intel_sdvo_get_slave_addr(struct drm_dev
    return 0x72;
    }

    +static int intel_sdvo_bad_tv_callback(const struct dmi_system_id *id)
    +{
    + DRM_DEBUG_KMS("Ignoring bad SDVO TV connector for %s\n", id->ident);
    + return 1;
    +}
    +
    +static struct dmi_system_id intel_sdvo_bad_tv[] = {
    + {
    + .callback = intel_sdvo_bad_tv_callback,
    + .ident = "IntelG45/ICH10R/DME1737",
    + .matches = {
    + DMI_MATCH(DMI_SYS_VENDOR, "IBM CORPORATION"),
    + DMI_MATCH(DMI_PRODUCT_NAME, "4800784"),
    + },
    + },
    +
    + { } /* terminating entry */
    +};
    +
    static bool
    intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
    {
    @@ -2329,7 +2349,8 @@ intel_sdvo_output_setup(struct intel_out
    (1 << INTEL_SDVO_NON_TV_CLONE_BIT) |
    (1 << INTEL_ANALOG_CLONE_BIT);
    }
    - } else if (flags & SDVO_OUTPUT_SVID0) {
    + } else if ((flags & SDVO_OUTPUT_SVID0) &&
    + !dmi_check_system(intel_sdvo_bad_tv)) {

    sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0;
    encoder->encoder_type = DRM_MODE_ENCODER_TVDAC;



    \
     
     \ /
      Last update: 2010-03-13 01:47    [W:4.258 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site