Disable the TV hotplug interrupt in course of TV detection --- drivers/gpu/drm/i915/intel_tv.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) Index: linux-2.6/drivers/gpu/drm/i915/intel_tv.c =================================================================== --- linux-2.6.orig/drivers/gpu/drm/i915/intel_tv.c 2009-10-09 11:38:43.000000000 +0800 +++ linux-2.6/drivers/gpu/drm/i915/intel_tv.c 2009-10-09 15:24:39.000000000 +0800 @@ -1372,6 +1372,7 @@ u32 tv_ctl, save_tv_ctl; u32 tv_dac, save_tv_dac; int type = DRM_MODE_CONNECTOR_Unknown; + unsigned int hotplug_en, hotplug_stat; tv_dac = I915_READ(TV_DAC); @@ -1380,7 +1381,9 @@ i915_disable_pipestat(dev_priv, 0, PIPE_HOTPLUG_INTERRUPT_ENABLE | PIPE_HOTPLUG_TV_INTERRUPT_ENABLE); spin_unlock_irqrestore(&dev_priv->user_irq_lock, irqflags); - + /* disable the TV hotplug */ + hotplug_en = I915_READ(PORT_HOTPLUG_EN); + I915_WRITE(PORT_HOTPLUG_EN, hotplug_en & ~(TV_HOTPLUG_INT_EN)); /* * Detect TV by polling) */ @@ -1429,6 +1432,10 @@ type = -1; } + /* clear the TV hotplug status bit */ + I915_WRITE(PORT_HOTPLUG_STAT, TV_HOTPLUG_INT_STATUS); + /* Restore the TV hotplug interrupt setting */ + I915_WRITE(PORT_HOTPLUG_EN, hotplug_en); /* Restore interrupt config */ spin_lock_irqsave(&dev_priv->user_irq_lock, irqflags); i915_enable_pipestat(dev_priv, 0, PIPE_HOTPLUG_INTERRUPT_ENABLE |