.destroy = intel_dvo_enc_destroy,
 };
 
-/*
- * Attempts to get a fixed panel timing for LVDS (currently only the i830).
- *
- * Other chips with DVO LVDS will need to extend this to deal with the LVDS
- * chip being on DVOB/C and having multiple pipes.
- */
-static struct drm_display_mode *
-intel_dvo_get_current_mode(struct intel_encoder *encoder)
-{
-       struct drm_display_mode *mode;
-
-       mode = intel_encoder_current_mode(encoder);
-       if (mode) {
-               DRM_DEBUG_KMS("using current (BIOS) mode: " DRM_MODE_FMT "\n",
-                             DRM_MODE_ARG(mode));
-               mode->type |= DRM_MODE_TYPE_PREFERRED;
-       }
-
-       return mode;
-}
-
 static enum port intel_dvo_port(i915_reg_t dvo_reg)
 {
        if (i915_mmio_reg_equal(dvo_reg, DVOA))
 
                intel_connector_attach_encoder(intel_connector, intel_encoder);
                if (dvo->type == INTEL_DVO_CHIP_LVDS) {
+                       struct drm_display_mode *fixed_mode;
+
                        /*
                         * For our LVDS chipsets, we should hopefully be able
                         * to dig the fixed panel mode out of the BIOS data.
                         * headers, likely), so for now, just get the current
                         * mode being output through DVO.
                         */
-                       intel_panel_init(intel_connector,
-                                        intel_dvo_get_current_mode(intel_encoder),
-                                        NULL);
+                       fixed_mode = intel_panel_encoder_fixed_mode(intel_connector,
+                                                                   intel_encoder);
+
+                       intel_panel_init(intel_connector, fixed_mode, NULL);
                        intel_dvo->panel_wants_dither = true;
                }
 
 
         * on.  If so, assume that whatever is currently programmed is the
         * correct mode.
         */
-       fixed_mode = intel_encoder_current_mode(intel_encoder);
-       if (fixed_mode) {
-               drm_dbg_kms(&dev_priv->drm, "using current (BIOS) mode: " DRM_MODE_FMT "\n",
-                           DRM_MODE_ARG(fixed_mode));
-               fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
-       }
+       fixed_mode = intel_panel_encoder_fixed_mode(intel_connector, intel_encoder);
 
        /* If we still don't have a mode after all that, give up. */
        if (!fixed_mode)
 
        return fixed_mode;
 }
 
+struct drm_display_mode *
+intel_panel_encoder_fixed_mode(struct intel_connector *connector,
+                              struct intel_encoder *encoder)
+{
+       struct drm_i915_private *i915 = to_i915(connector->base.dev);
+       struct drm_display_mode *fixed_mode;
+
+       fixed_mode = intel_encoder_current_mode(encoder);
+       if (!fixed_mode)
+               return NULL;
+
+       drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s] using current (BIOS) mode: " DRM_MODE_FMT "\n",
+                   connector->base.base.id, connector->base.name,
+                   DRM_MODE_ARG(fixed_mode));
+
+       fixed_mode->type |= DRM_MODE_TYPE_PREFERRED;
+
+       return fixed_mode;
+}
+
 /* adjusted_mode has been preset to be the panel's fixed mode */
 static int pch_panel_fitting(struct intel_crtc_state *crtc_state,
                             const struct drm_connector_state *conn_state)
 
 struct drm_i915_private;
 struct intel_connector;
 struct intel_crtc_state;
+struct intel_encoder;
 
 int intel_panel_init(struct intel_connector *connector,
                     struct drm_display_mode *fixed_mode,
 intel_panel_vbt_lfp_fixed_mode(struct intel_connector *connector);
 struct drm_display_mode *
 intel_panel_vbt_sdvo_fixed_mode(struct intel_connector *connector);
+struct drm_display_mode *
+intel_panel_encoder_fixed_mode(struct intel_connector *connector,
+                              struct intel_encoder *encoder);
 
 #endif /* __INTEL_PANEL_H__ */