Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 174557
b: refs/heads/master
c: ae266c9
h: refs/heads/master
i:
  174555: 5787857
v: v3
  • Loading branch information
Zhao Yakui authored and Eric Anholt committed Dec 1, 2009
1 parent 28e493a commit b43585a
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 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: fc816655236cd9da162356e96e74c7cfb0834d92
refs/heads/master: ae266c98f580a9ba5e0bfdb1d1f0f70ab3cd807f
53 changes: 52 additions & 1 deletion trunk/drivers/gpu/drm/i915/intel_dp.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
#include "i915_drv.h"
#include "intel_dp.h"


#define DP_LINK_STATUS_SIZE 6
#define DP_LINK_CHECK_TIMEOUT (10 * 1000)

Expand Down Expand Up @@ -1228,7 +1229,53 @@ intel_dp_hot_plug(struct intel_output *intel_output)
if (dp_priv->dpms_mode == DRM_MODE_DPMS_ON)
intel_dp_check_link_status(intel_output);
}

/*
* Enumerate the child dev array parsed from VBT to check whether
* the given DP is present.
* If it is present, return 1.
* If it is not present, return false.
* If no child dev is parsed from VBT, it is assumed that the given
* DP is present.
*/
int dp_is_present_in_vbt(struct drm_device *dev, int dp_reg)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct child_device_config *p_child;
int i, dp_port, ret;

if (!dev_priv->child_dev_num)
return 1;

dp_port = 0;
if (dp_reg == DP_B || PCH_DP_B)
dp_port = PORT_IDPB;
else if (dp_reg == DP_C || PCH_DP_C)
dp_port = PORT_IDPC;
else if (dp_reg == DP_D || PCH_DP_D)
dp_port = PORT_IDPD;

ret = 0;
for (i = 0; i < dev_priv->child_dev_num; i++) {
p_child = dev_priv->child_dev + i;
/*
* If the device type is not DP, continue.
*/
if (p_child->device_type != DEVICE_TYPE_DP &&
p_child->device_type != DEVICE_TYPE_eDP)
continue;
/* Find the eDP port */
if (dp_reg == DP_A && p_child->device_type == DEVICE_TYPE_eDP) {
ret = 1;
break;
}
/* Find the DP port */
if (p_child->dvo_port == dp_port) {
ret = 1;
break;
}
}
return ret;
}
void
intel_dp_init(struct drm_device *dev, int output_reg)
{
Expand All @@ -1238,6 +1285,10 @@ intel_dp_init(struct drm_device *dev, int output_reg)
struct intel_dp_priv *dp_priv;
const char *name = NULL;

if (!dp_is_present_in_vbt(dev, output_reg)) {
DRM_DEBUG_KMS("DP is not present. Ignore it\n");
return;
}
intel_output = kcalloc(sizeof(struct intel_output) +
sizeof(struct intel_dp_priv), 1, GFP_KERNEL);
if (!intel_output)
Expand Down

0 comments on commit b43585a

Please sign in to comment.