/* * Starting with Haswell, DDI port buffers must be programmed with correct * values in advance. The buffer values are different for FDI and DP modes, * but the HDMI/DVI fields are shared among those. So we program the DDI * in either FDI or DP modes only, as HDMI connections will work with both * of those */ static void intel_prepare_ddi_buffers(struct drm_device *dev, enum port port) { struct drm_i915_private *dev_priv = dev->dev_private; u32 reg; int i; int hdmi_level = dev_priv->vbt.ddi_port_info[port].hdmi_level_shift; const u32 *ddi_translations_fdi; const u32 *ddi_translations_dp; const u32 *ddi_translations_edp; const u32 *ddi_translations; if (IS_BROADWELL(dev)) { ddi_translations_fdi = bdw_ddi_translations_fdi; ddi_translations_dp = bdw_ddi_translations_dp; ddi_translations_edp = bdw_ddi_translations_edp; } else if (IS_HASWELL(dev)) { ddi_translations_fdi = hsw_ddi_translations_fdi; ddi_translations_dp = hsw_ddi_translations_dp; ddi_translations_edp = hsw_ddi_translations_dp; } else { WARN(1, "ddi translation table missing\n"); ddi_translations_edp = bdw_ddi_translations_dp; ddi_translations_fdi = bdw_ddi_translations_fdi; ddi_translations_dp = bdw_ddi_translations_dp; } switch (port) { case PORT_A: ddi_translations = ddi_translations_edp; break; case PORT_B: case PORT_C: ddi_translations = ddi_translations_dp; break; case PORT_D: if (intel_dpd_is_edp(dev)) ddi_translations = ddi_translations_edp; else ddi_translations = ddi_translations_dp; break; case PORT_E: ddi_translations = ddi_translations_fdi; break; default: BUG(); } for (i = 0, reg = DDI_BUF_TRANS(port); i < ARRAY_SIZE(hsw_ddi_translations_fdi); i++) { I915_WRITE(reg, ddi_translations[i]); reg += 4; } /* Entry 9 is for HDMI: */ for (i = 0; i < 2; i++) { I915_WRITE(reg, hsw_ddi_translations_hdmi[hdmi_level * 2 + i]); reg += 4; } }
int main(int argc, char *argv[]) { struct drm_i915_private *dp; bool dpd_is_edp = false; init(&argc, &argv); devinit(); intel_setup_bios(i915); if (i915->bios_bin) intel_parse_bios(i915); #if defined(VERSION) && VERSION == 36 intel_panel_enable_backlight(i915, 0); #else intel_panel_enable_backlight(i915); #endif i915_driver_load(i915, (unsigned long)i915->dev_private->info); dp = i915->dev_private; dpd_is_edp = intel_dpd_is_edp(i915); if (has_edp_a(i915)) printf("DP_A,"); if (dp->int_lvds_connector) printf("LVDS,"); if (I915_READ(HDMIC) & PORT_DETECTED) printf("HDMIC,"); if (I915_READ(HDMID) & PORT_DETECTED) printf("HDMID,"); if (I915_READ(PCH_DP_C) & DP_DETECTED) printf("DPC,"); if (!dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED)) printf("DPD,"); printf("\n"); }