diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sdvo.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 82678d30ab06..48daee5c9c63 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include "i915_drm.h" | 35 | #include "i915_drm.h" |
36 | #include "i915_drv.h" | 36 | #include "i915_drv.h" |
37 | #include "intel_sdvo_regs.h" | 37 | #include "intel_sdvo_regs.h" |
38 | #include <linux/dmi.h> | ||
38 | 39 | ||
39 | static char *tv_format_names[] = { | 40 | static char *tv_format_names[] = { |
40 | "NTSC_M" , "NTSC_J" , "NTSC_443", | 41 | "NTSC_M" , "NTSC_J" , "NTSC_443", |
@@ -2283,6 +2284,25 @@ intel_sdvo_get_slave_addr(struct drm_device *dev, int output_device) | |||
2283 | return 0x72; | 2284 | return 0x72; |
2284 | } | 2285 | } |
2285 | 2286 | ||
2287 | static int intel_sdvo_bad_tv_callback(const struct dmi_system_id *id) | ||
2288 | { | ||
2289 | DRM_DEBUG_KMS("Ignoring bad SDVO TV connector for %s\n", id->ident); | ||
2290 | return 1; | ||
2291 | } | ||
2292 | |||
2293 | static struct dmi_system_id intel_sdvo_bad_tv[] = { | ||
2294 | { | ||
2295 | .callback = intel_sdvo_bad_tv_callback, | ||
2296 | .ident = "IntelG45/ICH10R/DME1737", | ||
2297 | .matches = { | ||
2298 | DMI_MATCH(DMI_SYS_VENDOR, "IBM CORPORATION"), | ||
2299 | DMI_MATCH(DMI_PRODUCT_NAME, "4800784"), | ||
2300 | }, | ||
2301 | }, | ||
2302 | |||
2303 | { } /* terminating entry */ | ||
2304 | }; | ||
2305 | |||
2286 | static bool | 2306 | static bool |
2287 | intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags) | 2307 | intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags) |
2288 | { | 2308 | { |
@@ -2323,7 +2343,8 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags) | |||
2323 | (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | | 2343 | (1 << INTEL_SDVO_NON_TV_CLONE_BIT) | |
2324 | (1 << INTEL_ANALOG_CLONE_BIT); | 2344 | (1 << INTEL_ANALOG_CLONE_BIT); |
2325 | } | 2345 | } |
2326 | } else if (flags & SDVO_OUTPUT_SVID0) { | 2346 | } else if ((flags & SDVO_OUTPUT_SVID0) && |
2347 | !dmi_check_system(intel_sdvo_bad_tv)) { | ||
2327 | 2348 | ||
2328 | sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0; | 2349 | sdvo_priv->controlled_output = SDVO_OUTPUT_SVID0; |
2329 | encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; | 2350 | encoder->encoder_type = DRM_MODE_ENCODER_TVDAC; |