diff options
Diffstat (limited to 'drivers/gpu/drm/radeon/radeon_connectors.c')
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 20161567dbff..9da10dd5df80 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
| @@ -49,8 +49,10 @@ void radeon_connector_hotplug(struct drm_connector *connector) | |||
| 49 | if (radeon_connector->hpd.hpd != RADEON_HPD_NONE) | 49 | if (radeon_connector->hpd.hpd != RADEON_HPD_NONE) |
| 50 | radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); | 50 | radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); |
| 51 | 51 | ||
| 52 | if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { | 52 | if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) || |
| 53 | if (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) { | 53 | (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) { |
| 54 | if ((radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) || | ||
| 55 | (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_eDP)) { | ||
| 54 | if (radeon_dp_needs_link_train(radeon_connector)) { | 56 | if (radeon_dp_needs_link_train(radeon_connector)) { |
| 55 | if (connector->encoder) | 57 | if (connector->encoder) |
| 56 | dp_link_train(connector->encoder, connector); | 58 | dp_link_train(connector->encoder, connector); |
| @@ -615,7 +617,7 @@ static enum drm_connector_status radeon_vga_detect(struct drm_connector *connect | |||
| 615 | ret = connector_status_connected; | 617 | ret = connector_status_connected; |
| 616 | } | 618 | } |
| 617 | } else { | 619 | } else { |
| 618 | if (radeon_connector->dac_load_detect) { | 620 | if (radeon_connector->dac_load_detect && encoder) { |
| 619 | encoder_funcs = encoder->helper_private; | 621 | encoder_funcs = encoder->helper_private; |
| 620 | ret = encoder_funcs->detect(encoder, connector); | 622 | ret = encoder_funcs->detect(encoder, connector); |
| 621 | } | 623 | } |
| @@ -967,7 +969,8 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto | |||
| 967 | } | 969 | } |
| 968 | 970 | ||
| 969 | sink_type = radeon_dp_getsinktype(radeon_connector); | 971 | sink_type = radeon_dp_getsinktype(radeon_connector); |
| 970 | if (sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { | 972 | if ((sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || |
| 973 | (sink_type == CONNECTOR_OBJECT_ID_eDP)) { | ||
| 971 | if (radeon_dp_getdpcd(radeon_connector)) { | 974 | if (radeon_dp_getdpcd(radeon_connector)) { |
| 972 | radeon_dig_connector->dp_sink_type = sink_type; | 975 | radeon_dig_connector->dp_sink_type = sink_type; |
| 973 | ret = connector_status_connected; | 976 | ret = connector_status_connected; |
| @@ -992,7 +995,8 @@ static int radeon_dp_mode_valid(struct drm_connector *connector, | |||
| 992 | 995 | ||
| 993 | /* XXX check mode bandwidth */ | 996 | /* XXX check mode bandwidth */ |
| 994 | 997 | ||
| 995 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) | 998 | if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) || |
| 999 | (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) | ||
| 996 | return radeon_dp_mode_valid_helper(radeon_connector, mode); | 1000 | return radeon_dp_mode_valid_helper(radeon_connector, mode); |
| 997 | else | 1001 | else |
| 998 | return MODE_OK; | 1002 | return MODE_OK; |
| @@ -1145,6 +1149,7 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
| 1145 | subpixel_order = SubPixelHorizontalRGB; | 1149 | subpixel_order = SubPixelHorizontalRGB; |
| 1146 | break; | 1150 | break; |
| 1147 | case DRM_MODE_CONNECTOR_DisplayPort: | 1151 | case DRM_MODE_CONNECTOR_DisplayPort: |
| 1152 | case DRM_MODE_CONNECTOR_eDP: | ||
| 1148 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); | 1153 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); |
| 1149 | if (!radeon_dig_connector) | 1154 | if (!radeon_dig_connector) |
| 1150 | goto failed; | 1155 | goto failed; |
| @@ -1157,10 +1162,16 @@ radeon_add_atom_connector(struct drm_device *dev, | |||
| 1157 | goto failed; | 1162 | goto failed; |
| 1158 | if (i2c_bus->valid) { | 1163 | if (i2c_bus->valid) { |
| 1159 | /* add DP i2c bus */ | 1164 | /* add DP i2c bus */ |
| 1160 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); | 1165 | if (connector_type == DRM_MODE_CONNECTOR_eDP) |
| 1166 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); | ||
| 1167 | else | ||
| 1168 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); | ||
| 1161 | if (!radeon_dig_connector->dp_i2c_bus) | 1169 | if (!radeon_dig_connector->dp_i2c_bus) |
| 1162 | goto failed; | 1170 | goto failed; |
| 1163 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP"); | 1171 | if (connector_type == DRM_MODE_CONNECTOR_eDP) |
| 1172 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "eDP"); | ||
| 1173 | else | ||
| 1174 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP"); | ||
| 1164 | if (!radeon_connector->ddc_bus) | 1175 | if (!radeon_connector->ddc_bus) |
| 1165 | goto failed; | 1176 | goto failed; |
| 1166 | } | 1177 | } |
