|
@@ -49,8 +49,10 @@ void radeon_connector_hotplug(struct drm_connector *connector)
|
|
if (radeon_connector->hpd.hpd != RADEON_HPD_NONE)
|
|
if (radeon_connector->hpd.hpd != RADEON_HPD_NONE)
|
|
radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
|
|
radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
|
|
|
|
|
|
- if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {
|
|
|
|
- if (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
|
|
|
|
|
|
+ if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
|
|
|
|
+ (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
|
|
|
|
+ if ((radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
|
|
|
|
+ (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_eDP)) {
|
|
if (radeon_dp_needs_link_train(radeon_connector)) {
|
|
if (radeon_dp_needs_link_train(radeon_connector)) {
|
|
if (connector->encoder)
|
|
if (connector->encoder)
|
|
dp_link_train(connector->encoder, connector);
|
|
dp_link_train(connector->encoder, connector);
|
|
@@ -967,7 +969,8 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
|
|
}
|
|
}
|
|
|
|
|
|
sink_type = radeon_dp_getsinktype(radeon_connector);
|
|
sink_type = radeon_dp_getsinktype(radeon_connector);
|
|
- if (sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
|
|
|
|
|
|
+ if ((sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
|
|
|
|
+ (sink_type == CONNECTOR_OBJECT_ID_eDP)) {
|
|
if (radeon_dp_getdpcd(radeon_connector)) {
|
|
if (radeon_dp_getdpcd(radeon_connector)) {
|
|
radeon_dig_connector->dp_sink_type = sink_type;
|
|
radeon_dig_connector->dp_sink_type = sink_type;
|
|
ret = connector_status_connected;
|
|
ret = connector_status_connected;
|
|
@@ -992,7 +995,8 @@ static int radeon_dp_mode_valid(struct drm_connector *connector,
|
|
|
|
|
|
/* XXX check mode bandwidth */
|
|
/* XXX check mode bandwidth */
|
|
|
|
|
|
- if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
|
|
|
|
|
|
+ if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
|
|
|
|
+ (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
|
|
return radeon_dp_mode_valid_helper(radeon_connector, mode);
|
|
return radeon_dp_mode_valid_helper(radeon_connector, mode);
|
|
else
|
|
else
|
|
return MODE_OK;
|
|
return MODE_OK;
|
|
@@ -1145,6 +1149,7 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
subpixel_order = SubPixelHorizontalRGB;
|
|
subpixel_order = SubPixelHorizontalRGB;
|
|
break;
|
|
break;
|
|
case DRM_MODE_CONNECTOR_DisplayPort:
|
|
case DRM_MODE_CONNECTOR_DisplayPort:
|
|
|
|
+ case DRM_MODE_CONNECTOR_eDP:
|
|
radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
|
|
radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
|
|
if (!radeon_dig_connector)
|
|
if (!radeon_dig_connector)
|
|
goto failed;
|
|
goto failed;
|
|
@@ -1157,10 +1162,16 @@ radeon_add_atom_connector(struct drm_device *dev,
|
|
goto failed;
|
|
goto failed;
|
|
if (i2c_bus->valid) {
|
|
if (i2c_bus->valid) {
|
|
/* add DP i2c bus */
|
|
/* add DP i2c bus */
|
|
- radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
|
|
|
|
|
|
+ if (connector_type == DRM_MODE_CONNECTOR_eDP)
|
|
|
|
+ radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
|
|
|
|
+ else
|
|
|
|
+ radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
|
|
if (!radeon_dig_connector->dp_i2c_bus)
|
|
if (!radeon_dig_connector->dp_i2c_bus)
|
|
goto failed;
|
|
goto failed;
|
|
- radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP");
|
|
|
|
|
|
+ if (connector_type == DRM_MODE_CONNECTOR_eDP)
|
|
|
|
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "eDP");
|
|
|
|
+ else
|
|
|
|
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP");
|
|
if (!radeon_connector->ddc_bus)
|
|
if (!radeon_connector->ddc_bus)
|
|
goto failed;
|
|
goto failed;
|
|
}
|
|
}
|