Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 357918
b: refs/heads/master
c: b0ea7d3
h: refs/heads/master
v: v3
  • Loading branch information
Damien Lespiau authored and Daniel Vetter committed Dec 14, 2012
1 parent a740535 commit 2cc965d
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b696519e51910943f084ea0fc8bdceceae8383ef
refs/heads/master: b0ea7d37a8f63eeec5ae80b4a6403cfba01da02f
33 changes: 33 additions & 0 deletions trunk/drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -985,6 +985,39 @@ void intel_wait_for_pipe_off(struct drm_device *dev, int pipe)
}
}

/*
* ibx_digital_port_connected - is the specified port connected?
* @dev_priv: i915 private structure
* @port: the port to test
*
* Returns true if @port is connected, false otherwise.
*/
bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
struct intel_digital_port *port)
{
u32 bit;

/* XXX: IBX has different SDEISR bits */
if (HAS_PCH_IBX(dev_priv->dev))
return true;

switch(port->port) {
case PORT_B:
bit = SDE_PORTB_HOTPLUG_CPT;
break;
case PORT_C:
bit = SDE_PORTC_HOTPLUG_CPT;
break;
case PORT_D:
bit = SDE_PORTD_HOTPLUG_CPT;
break;
default:
return true;
}

return I915_READ(SDEISR) & bit;
}

static const char *state_string(bool enabled)
{
return enabled ? "on" : "off";
Expand Down
3 changes: 3 additions & 0 deletions trunk/drivers/gpu/drm/i915/intel_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,9 @@ hdmi_to_dig_port(struct intel_hdmi *intel_hdmi)
return container_of(intel_hdmi, struct intel_digital_port, hdmi);
}

bool ibx_digital_port_connected(struct drm_i915_private *dev_priv,
struct intel_digital_port *port);

extern void intel_connector_attach_encoder(struct intel_connector *connector,
struct intel_encoder *encoder);
extern struct drm_encoder *intel_best_encoder(struct drm_connector *connector);
Expand Down
9 changes: 7 additions & 2 deletions trunk/drivers/gpu/drm/i915/intel_hdmi.c
Original file line number Diff line number Diff line change
Expand Up @@ -793,16 +793,21 @@ static bool g4x_hdmi_connected(struct intel_hdmi *intel_hdmi)
static enum drm_connector_status
intel_hdmi_detect(struct drm_connector *connector, bool force)
{
struct drm_device *dev = connector->dev;
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
struct intel_digital_port *intel_dig_port =
hdmi_to_dig_port(intel_hdmi);
struct intel_encoder *intel_encoder = &intel_dig_port->base;
struct drm_i915_private *dev_priv = connector->dev->dev_private;
struct drm_i915_private *dev_priv = dev->dev_private;
struct edid *edid;
enum drm_connector_status status = connector_status_disconnected;

if (IS_G4X(connector->dev) && !g4x_hdmi_connected(intel_hdmi))

if (IS_G4X(dev) && !g4x_hdmi_connected(intel_hdmi))
return status;
else if (HAS_PCH_SPLIT(dev) &&
!ibx_digital_port_connected(dev_priv, intel_dig_port))
return status;

intel_hdmi->has_hdmi_sink = false;
intel_hdmi->has_audio = false;
Expand Down

0 comments on commit 2cc965d

Please sign in to comment.