return ret;
 }
 
+static bool valleyview_crt_detect_hotplug(struct drm_connector *connector)
+{
+       struct drm_device *dev = connector->dev;
+       struct drm_i915_private *dev_priv = dev->dev_private;
+       u32 adpa;
+       bool ret;
+       u32 save_adpa;
+
+       save_adpa = adpa = I915_READ(ADPA);
+       DRM_DEBUG_KMS("trigger hotplug detect cycle: adpa=0x%x\n", adpa);
+
+       adpa |= ADPA_CRT_HOTPLUG_FORCE_TRIGGER;
+
+       I915_WRITE(ADPA, adpa);
+
+       if (wait_for((I915_READ(ADPA) & ADPA_CRT_HOTPLUG_FORCE_TRIGGER) == 0,
+                    1000)) {
+               DRM_DEBUG_KMS("timed out waiting for FORCE_TRIGGER");
+               I915_WRITE(ADPA, save_adpa);
+       }
+
+       /* Check the status to see if both blue and green are on now */
+       adpa = I915_READ(ADPA);
+       if ((adpa & ADPA_CRT_HOTPLUG_MONITOR_MASK) != 0)
+               ret = true;
+       else
+               ret = false;
+
+       DRM_DEBUG_KMS("valleyview hotplug adpa=0x%x, result %d\n", adpa, ret);
+
+       /* FIXME: debug force function and remove */
+       ret = true;
+
+       return ret;
+}
+
 /**
  * Uses CRT_HOTPLUG_EN and CRT_HOTPLUG_STAT to detect CRT presence.
  *
        if (HAS_PCH_SPLIT(dev))
                return intel_ironlake_crt_detect_hotplug(connector);
 
+       if (IS_VALLEYVIEW(dev))
+               return valleyview_crt_detect_hotplug(connector);
+
        /*
         * On 4 series desktop, CRT detect sequence need to be done twice
         * to get a reliable result.