drm/i915: Add HDMI support on IGDNG
Signed-off-by: Zhenyu Wang <zhenyuw@linux.intel.com> Signed-off-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
parent
2c07245fb8
commit
30ad48b733
2 changed files with 47 additions and 3 deletions
|
@ -2432,7 +2432,22 @@ static void intel_setup_outputs(struct drm_device *dev)
|
|||
intel_lvds_init(dev);
|
||||
|
||||
if (IS_IGDNG(dev)) {
|
||||
/* ignore for other outputs */
|
||||
int found;
|
||||
|
||||
if (I915_READ(HDMIB) & PORT_DETECTED) {
|
||||
/* check SDVOB */
|
||||
/* found = intel_sdvo_init(dev, HDMIB); */
|
||||
found = 0;
|
||||
if (!found)
|
||||
intel_hdmi_init(dev, HDMIB);
|
||||
}
|
||||
|
||||
if (I915_READ(HDMIC) & PORT_DETECTED)
|
||||
intel_hdmi_init(dev, HDMIC);
|
||||
|
||||
if (I915_READ(HDMID) & PORT_DETECTED)
|
||||
intel_hdmi_init(dev, HDMID);
|
||||
|
||||
} else if (IS_I9XX(dev)) {
|
||||
int found;
|
||||
u32 reg;
|
||||
|
|
|
@ -56,7 +56,8 @@ static void intel_hdmi_mode_set(struct drm_encoder *encoder,
|
|||
sdvox = SDVO_ENCODING_HDMI |
|
||||
SDVO_BORDER_ENABLE |
|
||||
SDVO_VSYNC_ACTIVE_HIGH |
|
||||
SDVO_HSYNC_ACTIVE_HIGH;
|
||||
SDVO_HSYNC_ACTIVE_HIGH |
|
||||
SDVO_NULL_PACKETS_DURING_VSYNC;
|
||||
|
||||
if (hdmi_priv->has_hdmi_sink)
|
||||
sdvox |= SDVO_AUDIO_ENABLE;
|
||||
|
@ -144,6 +145,22 @@ intel_hdmi_sink_detect(struct drm_connector *connector)
|
|||
}
|
||||
}
|
||||
|
||||
static enum drm_connector_status
|
||||
igdng_hdmi_detect(struct drm_connector *connector)
|
||||
{
|
||||
struct intel_output *intel_output = to_intel_output(connector);
|
||||
struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv;
|
||||
|
||||
/* FIXME hotplug detect */
|
||||
|
||||
hdmi_priv->has_hdmi_sink = false;
|
||||
intel_hdmi_sink_detect(connector);
|
||||
if (hdmi_priv->has_hdmi_sink)
|
||||
return connector_status_connected;
|
||||
else
|
||||
return connector_status_disconnected;
|
||||
}
|
||||
|
||||
static enum drm_connector_status
|
||||
intel_hdmi_detect(struct drm_connector *connector)
|
||||
{
|
||||
|
@ -153,6 +170,9 @@ intel_hdmi_detect(struct drm_connector *connector)
|
|||
struct intel_hdmi_priv *hdmi_priv = intel_output->dev_priv;
|
||||
u32 temp, bit;
|
||||
|
||||
if (IS_IGDNG(dev))
|
||||
return igdng_hdmi_detect(connector);
|
||||
|
||||
temp = I915_READ(PORT_HOTPLUG_EN);
|
||||
|
||||
switch (hdmi_priv->sdvox_reg) {
|
||||
|
@ -268,8 +288,17 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
|
|||
/* Set up the DDC bus. */
|
||||
if (sdvox_reg == SDVOB)
|
||||
intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "HDMIB");
|
||||
else
|
||||
else if (sdvox_reg == SDVOC)
|
||||
intel_output->ddc_bus = intel_i2c_create(dev, GPIOD, "HDMIC");
|
||||
else if (sdvox_reg == HDMIB)
|
||||
intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOE,
|
||||
"HDMIB");
|
||||
else if (sdvox_reg == HDMIC)
|
||||
intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOD,
|
||||
"HDMIC");
|
||||
else if (sdvox_reg == HDMID)
|
||||
intel_output->ddc_bus = intel_i2c_create(dev, PCH_GPIOF,
|
||||
"HDMID");
|
||||
|
||||
if (!intel_output->ddc_bus)
|
||||
goto err_connector;
|
||||
|
|
Loading…
Reference in a new issue