aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAlex Deucher <alexdeucher@gmail.com>2011-05-20 04:34:22 -0400
committerDave Airlie <airlied@redhat.com>2011-05-20 06:02:29 -0400
commiteac4dff6d3edc0aea1941db16c03ae19aa628a3c (patch)
tree64298dcef86d900624abb1490e79cdf43bd94036 /drivers
parent834b2904bbfde3d85b5e984688777d56e9c7bf80 (diff)
drm/radeon/kms: handle DP bridges
Fusion hardware often has DP to VGA/LVDS/TMDS bridges to handle non-DP encoders. Internally we treat them mostly like DP. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/radeon/atombios_crtc.c6
-rw-r--r--drivers/gpu/drm/radeon/radeon_connectors.c433
-rw-r--r--drivers/gpu/drm/radeon/radeon_encoders.c5
3 files changed, 263 insertions, 181 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
index 9770afff4d4c..dab06fb17cb2 100644
--- a/drivers/gpu/drm/radeon/atombios_crtc.c
+++ b/drivers/gpu/drm/radeon/atombios_crtc.c
@@ -557,7 +557,8 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
557 if (connector) 557 if (connector)
558 bpc = connector->display_info.bpc; 558 bpc = connector->display_info.bpc;
559 encoder_mode = atombios_get_encoder_mode(encoder); 559 encoder_mode = atombios_get_encoder_mode(encoder);
560 if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) { 560 if ((radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT | ATOM_DEVICE_DFP_SUPPORT)) ||
561 radeon_encoder_is_dp_bridge(encoder)) {
561 if (connector) { 562 if (connector) {
562 struct radeon_connector *radeon_connector = to_radeon_connector(connector); 563 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
563 struct radeon_connector_atom_dig *dig_connector = 564 struct radeon_connector_atom_dig *dig_connector =
@@ -637,7 +638,8 @@ static u32 atombios_adjust_pll(struct drm_crtc *crtc,
637 if (ss_enabled && ss->percentage) 638 if (ss_enabled && ss->percentage)
638 args.v3.sInput.ucDispPllConfig |= 639 args.v3.sInput.ucDispPllConfig |=
639 DISPPLL_CONFIG_SS_ENABLE; 640 DISPPLL_CONFIG_SS_ENABLE;
640 if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT)) { 641 if (radeon_encoder->devices & (ATOM_DEVICE_DFP_SUPPORT) ||
642 radeon_encoder_is_dp_bridge(encoder)) {
641 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; 643 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
642 if (encoder_mode == ATOM_ENCODER_MODE_DP) { 644 if (encoder_mode == ATOM_ENCODER_MODE_DP) {
643 args.v3.sInput.ucDispPllConfig |= 645 args.v3.sInput.ucDispPllConfig |=
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
index ac3165aeff36..356feea41444 100644
--- a/drivers/gpu/drm/radeon/radeon_connectors.c
+++ b/drivers/gpu/drm/radeon/radeon_connectors.c
@@ -1230,8 +1230,11 @@ radeon_add_atom_connector(struct drm_device *dev,
1230 struct drm_connector *connector; 1230 struct drm_connector *connector;
1231 struct radeon_connector *radeon_connector; 1231 struct radeon_connector *radeon_connector;
1232 struct radeon_connector_atom_dig *radeon_dig_connector; 1232 struct radeon_connector_atom_dig *radeon_dig_connector;
1233 struct drm_encoder *encoder;
1234 struct radeon_encoder *radeon_encoder;
1233 uint32_t subpixel_order = SubPixelNone; 1235 uint32_t subpixel_order = SubPixelNone;
1234 bool shared_ddc = false; 1236 bool shared_ddc = false;
1237 bool is_dp_bridge = false;
1235 1238
1236 if (connector_type == DRM_MODE_CONNECTOR_Unknown) 1239 if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1237 return; 1240 return;
@@ -1263,6 +1266,21 @@ radeon_add_atom_connector(struct drm_device *dev,
1263 } 1266 }
1264 } 1267 }
1265 1268
1269 /* check if it's a dp bridge */
1270 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
1271 radeon_encoder = to_radeon_encoder(encoder);
1272 if (radeon_encoder->devices & supported_device) {
1273 switch (radeon_encoder->encoder_id) {
1274 case ENCODER_OBJECT_ID_TRAVIS:
1275 case ENCODER_OBJECT_ID_NUTMEG:
1276 is_dp_bridge = true;
1277 break;
1278 default:
1279 break;
1280 }
1281 }
1282 }
1283
1266 radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL); 1284 radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1267 if (!radeon_connector) 1285 if (!radeon_connector)
1268 return; 1286 return;
@@ -1280,61 +1298,39 @@ radeon_add_atom_connector(struct drm_device *dev,
1280 if (!radeon_connector->router_bus) 1298 if (!radeon_connector->router_bus)
1281 DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n"); 1299 DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n");
1282 } 1300 }
1283 switch (connector_type) { 1301
1284 case DRM_MODE_CONNECTOR_VGA: 1302 if (is_dp_bridge) {
1285 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1286 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1287 if (i2c_bus->valid) {
1288 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1289 if (!radeon_connector->ddc_bus)
1290 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1291 }
1292 radeon_connector->dac_load_detect = true;
1293 drm_connector_attach_property(&radeon_connector->base,
1294 rdev->mode_info.load_detect_property,
1295 1);
1296 /* no HPD on analog connectors */
1297 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1298 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1299 connector->interlace_allowed = true;
1300 connector->doublescan_allowed = true;
1301 break;
1302 case DRM_MODE_CONNECTOR_DVIA:
1303 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1304 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1305 if (i2c_bus->valid) {
1306 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1307 if (!radeon_connector->ddc_bus)
1308 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1309 }
1310 radeon_connector->dac_load_detect = true;
1311 drm_connector_attach_property(&radeon_connector->base,
1312 rdev->mode_info.load_detect_property,
1313 1);
1314 /* no HPD on analog connectors */
1315 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1316 connector->interlace_allowed = true;
1317 connector->doublescan_allowed = true;
1318 break;
1319 case DRM_MODE_CONNECTOR_DVII:
1320 case DRM_MODE_CONNECTOR_DVID:
1321 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 1303 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1322 if (!radeon_dig_connector) 1304 if (!radeon_dig_connector)
1323 goto failed; 1305 goto failed;
1324 radeon_dig_connector->igp_lane_info = igp_lane_info; 1306 radeon_dig_connector->igp_lane_info = igp_lane_info;
1325 radeon_connector->con_priv = radeon_dig_connector; 1307 radeon_connector->con_priv = radeon_dig_connector;
1326 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); 1308 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1327 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); 1309 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1328 if (i2c_bus->valid) { 1310 if (i2c_bus->valid) {
1311 /* add DP i2c bus */
1312 if (connector_type == DRM_MODE_CONNECTOR_eDP)
1313 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1314 else
1315 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1316 if (!radeon_dig_connector->dp_i2c_bus)
1317 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1329 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 1318 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1330 if (!radeon_connector->ddc_bus) 1319 if (!radeon_connector->ddc_bus)
1331 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 1320 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1332 } 1321 }
1333 subpixel_order = SubPixelHorizontalRGB; 1322 switch (connector_type) {
1334 drm_connector_attach_property(&radeon_connector->base, 1323 case DRM_MODE_CONNECTOR_VGA:
1335 rdev->mode_info.coherent_mode_property, 1324 case DRM_MODE_CONNECTOR_DVIA:
1336 1); 1325 default:
1337 if (ASIC_IS_AVIVO(rdev)) { 1326 connector->interlace_allowed = true;
1327 connector->doublescan_allowed = true;
1328 break;
1329 case DRM_MODE_CONNECTOR_DVII:
1330 case DRM_MODE_CONNECTOR_DVID:
1331 case DRM_MODE_CONNECTOR_HDMIA:
1332 case DRM_MODE_CONNECTOR_HDMIB:
1333 case DRM_MODE_CONNECTOR_DisplayPort:
1338 drm_connector_attach_property(&radeon_connector->base, 1334 drm_connector_attach_property(&radeon_connector->base,
1339 rdev->mode_info.underscan_property, 1335 rdev->mode_info.underscan_property,
1340 UNDERSCAN_OFF); 1336 UNDERSCAN_OFF);
@@ -1344,151 +1340,234 @@ radeon_add_atom_connector(struct drm_device *dev,
1344 drm_connector_attach_property(&radeon_connector->base, 1340 drm_connector_attach_property(&radeon_connector->base,
1345 rdev->mode_info.underscan_vborder_property, 1341 rdev->mode_info.underscan_vborder_property,
1346 0); 1342 0);
1343 subpixel_order = SubPixelHorizontalRGB;
1344 connector->interlace_allowed = true;
1345 if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1346 connector->doublescan_allowed = true;
1347 else
1348 connector->doublescan_allowed = false;
1349 break;
1350 case DRM_MODE_CONNECTOR_LVDS:
1351 case DRM_MODE_CONNECTOR_eDP:
1352 drm_connector_attach_property(&radeon_connector->base,
1353 dev->mode_config.scaling_mode_property,
1354 DRM_MODE_SCALE_FULLSCREEN);
1355 subpixel_order = SubPixelHorizontalRGB;
1356 connector->interlace_allowed = false;
1357 connector->doublescan_allowed = false;
1358 break;
1347 } 1359 }
1348 if (connector_type == DRM_MODE_CONNECTOR_DVII) { 1360 } else {
1361 switch (connector_type) {
1362 case DRM_MODE_CONNECTOR_VGA:
1363 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1364 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1365 if (i2c_bus->valid) {
1366 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1367 if (!radeon_connector->ddc_bus)
1368 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1369 }
1349 radeon_connector->dac_load_detect = true; 1370 radeon_connector->dac_load_detect = true;
1350 drm_connector_attach_property(&radeon_connector->base, 1371 drm_connector_attach_property(&radeon_connector->base,
1351 rdev->mode_info.load_detect_property, 1372 rdev->mode_info.load_detect_property,
1352 1); 1373 1);
1353 } 1374 /* no HPD on analog connectors */
1354 connector->interlace_allowed = true; 1375 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1355 if (connector_type == DRM_MODE_CONNECTOR_DVII) 1376 connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1377 connector->interlace_allowed = true;
1356 connector->doublescan_allowed = true; 1378 connector->doublescan_allowed = true;
1357 else 1379 break;
1358 connector->doublescan_allowed = false; 1380 case DRM_MODE_CONNECTOR_DVIA:
1359 break; 1381 drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1360 case DRM_MODE_CONNECTOR_HDMIA: 1382 drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1361 case DRM_MODE_CONNECTOR_HDMIB: 1383 if (i2c_bus->valid) {
1362 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 1384 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1363 if (!radeon_dig_connector) 1385 if (!radeon_connector->ddc_bus)
1364 goto failed; 1386 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1365 radeon_dig_connector->igp_lane_info = igp_lane_info; 1387 }
1366 radeon_connector->con_priv = radeon_dig_connector; 1388 radeon_connector->dac_load_detect = true;
1367 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1368 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1369 if (i2c_bus->valid) {
1370 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1371 if (!radeon_connector->ddc_bus)
1372 DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1373 }
1374 drm_connector_attach_property(&radeon_connector->base,
1375 rdev->mode_info.coherent_mode_property,
1376 1);
1377 if (ASIC_IS_AVIVO(rdev)) {
1378 drm_connector_attach_property(&radeon_connector->base, 1389 drm_connector_attach_property(&radeon_connector->base,
1379 rdev->mode_info.underscan_property, 1390 rdev->mode_info.load_detect_property,
1380 UNDERSCAN_OFF); 1391 1);
1392 /* no HPD on analog connectors */
1393 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1394 connector->interlace_allowed = true;
1395 connector->doublescan_allowed = true;
1396 break;
1397 case DRM_MODE_CONNECTOR_DVII:
1398 case DRM_MODE_CONNECTOR_DVID:
1399 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1400 if (!radeon_dig_connector)
1401 goto failed;
1402 radeon_dig_connector->igp_lane_info = igp_lane_info;
1403 radeon_connector->con_priv = radeon_dig_connector;
1404 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1405 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1406 if (i2c_bus->valid) {
1407 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1408 if (!radeon_connector->ddc_bus)
1409 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1410 }
1411 subpixel_order = SubPixelHorizontalRGB;
1381 drm_connector_attach_property(&radeon_connector->base, 1412 drm_connector_attach_property(&radeon_connector->base,
1382 rdev->mode_info.underscan_hborder_property, 1413 rdev->mode_info.coherent_mode_property,
1383 0); 1414 1);
1415 if (ASIC_IS_AVIVO(rdev)) {
1416 drm_connector_attach_property(&radeon_connector->base,
1417 rdev->mode_info.underscan_property,
1418 UNDERSCAN_OFF);
1419 drm_connector_attach_property(&radeon_connector->base,
1420 rdev->mode_info.underscan_hborder_property,
1421 0);
1422 drm_connector_attach_property(&radeon_connector->base,
1423 rdev->mode_info.underscan_vborder_property,
1424 0);
1425 }
1426 if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1427 radeon_connector->dac_load_detect = true;
1428 drm_connector_attach_property(&radeon_connector->base,
1429 rdev->mode_info.load_detect_property,
1430 1);
1431 }
1432 connector->interlace_allowed = true;
1433 if (connector_type == DRM_MODE_CONNECTOR_DVII)
1434 connector->doublescan_allowed = true;
1435 else
1436 connector->doublescan_allowed = false;
1437 break;
1438 case DRM_MODE_CONNECTOR_HDMIA:
1439 case DRM_MODE_CONNECTOR_HDMIB:
1440 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1441 if (!radeon_dig_connector)
1442 goto failed;
1443 radeon_dig_connector->igp_lane_info = igp_lane_info;
1444 radeon_connector->con_priv = radeon_dig_connector;
1445 drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1446 drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1447 if (i2c_bus->valid) {
1448 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1449 if (!radeon_connector->ddc_bus)
1450 DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1451 }
1384 drm_connector_attach_property(&radeon_connector->base, 1452 drm_connector_attach_property(&radeon_connector->base,
1385 rdev->mode_info.underscan_vborder_property, 1453 rdev->mode_info.coherent_mode_property,
1386 0); 1454 1);
1387 } 1455 if (ASIC_IS_AVIVO(rdev)) {
1388 subpixel_order = SubPixelHorizontalRGB; 1456 drm_connector_attach_property(&radeon_connector->base,
1389 connector->interlace_allowed = true; 1457 rdev->mode_info.underscan_property,
1390 if (connector_type == DRM_MODE_CONNECTOR_HDMIB) 1458 UNDERSCAN_OFF);
1391 connector->doublescan_allowed = true; 1459 drm_connector_attach_property(&radeon_connector->base,
1392 else 1460 rdev->mode_info.underscan_hborder_property,
1461 0);
1462 drm_connector_attach_property(&radeon_connector->base,
1463 rdev->mode_info.underscan_vborder_property,
1464 0);
1465 }
1466 subpixel_order = SubPixelHorizontalRGB;
1467 connector->interlace_allowed = true;
1468 if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1469 connector->doublescan_allowed = true;
1470 else
1471 connector->doublescan_allowed = false;
1472 break;
1473 case DRM_MODE_CONNECTOR_DisplayPort:
1474 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1475 if (!radeon_dig_connector)
1476 goto failed;
1477 radeon_dig_connector->igp_lane_info = igp_lane_info;
1478 radeon_connector->con_priv = radeon_dig_connector;
1479 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1480 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1481 if (i2c_bus->valid) {
1482 /* add DP i2c bus */
1483 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1484 if (!radeon_dig_connector->dp_i2c_bus)
1485 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1486 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1487 if (!radeon_connector->ddc_bus)
1488 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1489 }
1490 subpixel_order = SubPixelHorizontalRGB;
1491 drm_connector_attach_property(&radeon_connector->base,
1492 rdev->mode_info.coherent_mode_property,
1493 1);
1494 if (ASIC_IS_AVIVO(rdev)) {
1495 drm_connector_attach_property(&radeon_connector->base,
1496 rdev->mode_info.underscan_property,
1497 UNDERSCAN_OFF);
1498 drm_connector_attach_property(&radeon_connector->base,
1499 rdev->mode_info.underscan_hborder_property,
1500 0);
1501 drm_connector_attach_property(&radeon_connector->base,
1502 rdev->mode_info.underscan_vborder_property,
1503 0);
1504 }
1505 connector->interlace_allowed = true;
1506 /* in theory with a DP to VGA converter... */
1393 connector->doublescan_allowed = false; 1507 connector->doublescan_allowed = false;
1394 break; 1508 break;
1395 case DRM_MODE_CONNECTOR_DisplayPort: 1509 case DRM_MODE_CONNECTOR_eDP:
1396 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 1510 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1397 if (!radeon_dig_connector) 1511 if (!radeon_dig_connector)
1398 goto failed; 1512 goto failed;
1399 radeon_dig_connector->igp_lane_info = igp_lane_info; 1513 radeon_dig_connector->igp_lane_info = igp_lane_info;
1400 radeon_connector->con_priv = radeon_dig_connector; 1514 radeon_connector->con_priv = radeon_dig_connector;
1401 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); 1515 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1402 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); 1516 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1403 if (i2c_bus->valid) { 1517 if (i2c_bus->valid) {
1404 /* add DP i2c bus */ 1518 /* add DP i2c bus */
1405 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); 1519 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1406 if (!radeon_dig_connector->dp_i2c_bus) 1520 if (!radeon_dig_connector->dp_i2c_bus)
1407 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); 1521 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1408 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 1522 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1409 if (!radeon_connector->ddc_bus) 1523 if (!radeon_connector->ddc_bus)
1410 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 1524 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1411 } 1525 }
1412 subpixel_order = SubPixelHorizontalRGB;
1413 drm_connector_attach_property(&radeon_connector->base,
1414 rdev->mode_info.coherent_mode_property,
1415 1);
1416 if (ASIC_IS_AVIVO(rdev)) {
1417 drm_connector_attach_property(&radeon_connector->base, 1526 drm_connector_attach_property(&radeon_connector->base,
1418 rdev->mode_info.underscan_property, 1527 dev->mode_config.scaling_mode_property,
1419 UNDERSCAN_OFF); 1528 DRM_MODE_SCALE_FULLSCREEN);
1529 subpixel_order = SubPixelHorizontalRGB;
1530 connector->interlace_allowed = false;
1531 connector->doublescan_allowed = false;
1532 break;
1533 case DRM_MODE_CONNECTOR_SVIDEO:
1534 case DRM_MODE_CONNECTOR_Composite:
1535 case DRM_MODE_CONNECTOR_9PinDIN:
1536 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1537 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1538 radeon_connector->dac_load_detect = true;
1420 drm_connector_attach_property(&radeon_connector->base, 1539 drm_connector_attach_property(&radeon_connector->base,
1421 rdev->mode_info.underscan_hborder_property, 1540 rdev->mode_info.load_detect_property,
1422 0); 1541 1);
1423 drm_connector_attach_property(&radeon_connector->base, 1542 drm_connector_attach_property(&radeon_connector->base,
1424 rdev->mode_info.underscan_vborder_property, 1543 rdev->mode_info.tv_std_property,
1425 0); 1544 radeon_atombios_get_tv_info(rdev));
1426 } 1545 /* no HPD on analog connectors */
1427 connector->interlace_allowed = true; 1546 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1428 /* in theory with a DP to VGA converter... */ 1547 connector->interlace_allowed = false;
1429 connector->doublescan_allowed = false; 1548 connector->doublescan_allowed = false;
1430 break; 1549 break;
1431 case DRM_MODE_CONNECTOR_eDP: 1550 case DRM_MODE_CONNECTOR_LVDS:
1432 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); 1551 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1433 if (!radeon_dig_connector) 1552 if (!radeon_dig_connector)
1434 goto failed; 1553 goto failed;
1435 radeon_dig_connector->igp_lane_info = igp_lane_info; 1554 radeon_dig_connector->igp_lane_info = igp_lane_info;
1436 radeon_connector->con_priv = radeon_dig_connector; 1555 radeon_connector->con_priv = radeon_dig_connector;
1437 drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); 1556 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1438 drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); 1557 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1439 if (i2c_bus->valid) { 1558 if (i2c_bus->valid) {
1440 /* add DP i2c bus */ 1559 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1441 radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch"); 1560 if (!radeon_connector->ddc_bus)
1442 if (!radeon_dig_connector->dp_i2c_bus) 1561 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1443 DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); 1562 }
1444 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); 1563 drm_connector_attach_property(&radeon_connector->base,
1445 if (!radeon_connector->ddc_bus) 1564 dev->mode_config.scaling_mode_property,
1446 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); 1565 DRM_MODE_SCALE_FULLSCREEN);
1447 } 1566 subpixel_order = SubPixelHorizontalRGB;
1448 drm_connector_attach_property(&radeon_connector->base, 1567 connector->interlace_allowed = false;
1449 dev->mode_config.scaling_mode_property, 1568 connector->doublescan_allowed = false;
1450 DRM_MODE_SCALE_FULLSCREEN); 1569 break;
1451 subpixel_order = SubPixelHorizontalRGB;
1452 connector->interlace_allowed = false;
1453 connector->doublescan_allowed = false;
1454 break;
1455 case DRM_MODE_CONNECTOR_SVIDEO:
1456 case DRM_MODE_CONNECTOR_Composite:
1457 case DRM_MODE_CONNECTOR_9PinDIN:
1458 drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1459 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1460 radeon_connector->dac_load_detect = true;
1461 drm_connector_attach_property(&radeon_connector->base,
1462 rdev->mode_info.load_detect_property,
1463 1);
1464 drm_connector_attach_property(&radeon_connector->base,
1465 rdev->mode_info.tv_std_property,
1466 radeon_atombios_get_tv_info(rdev));
1467 /* no HPD on analog connectors */
1468 radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1469 connector->interlace_allowed = false;
1470 connector->doublescan_allowed = false;
1471 break;
1472 case DRM_MODE_CONNECTOR_LVDS:
1473 radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1474 if (!radeon_dig_connector)
1475 goto failed;
1476 radeon_dig_connector->igp_lane_info = igp_lane_info;
1477 radeon_connector->con_priv = radeon_dig_connector;
1478 drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1479 drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1480 if (i2c_bus->valid) {
1481 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1482 if (!radeon_connector->ddc_bus)
1483 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1484 } 1570 }
1485 drm_connector_attach_property(&radeon_connector->base,
1486 dev->mode_config.scaling_mode_property,
1487 DRM_MODE_SCALE_FULLSCREEN);
1488 subpixel_order = SubPixelHorizontalRGB;
1489 connector->interlace_allowed = false;
1490 connector->doublescan_allowed = false;
1491 break;
1492 } 1571 }
1493 1572
1494 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) { 1573 if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
index 1c064e78f21a..43c001b28ecc 100644
--- a/drivers/gpu/drm/radeon/radeon_encoders.c
+++ b/drivers/gpu/drm/radeon/radeon_encoders.c
@@ -1949,8 +1949,9 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
1949 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); 1949 struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1950 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder); 1950 struct drm_connector *connector = radeon_get_connector_for_encoder(encoder);
1951 1951
1952 if (radeon_encoder->active_device & 1952 if ((radeon_encoder->active_device &
1953 (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) { 1953 (ATOM_DEVICE_DFP_SUPPORT | ATOM_DEVICE_LCD_SUPPORT)) ||
1954 radeon_encoder_is_dp_bridge(encoder)) {
1954 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv; 1955 struct radeon_encoder_atom_dig *dig = radeon_encoder->enc_priv;
1955 if (dig) 1956 if (dig)
1956 dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder); 1957 dig->dig_encoder = radeon_atom_pick_dig_encoder(encoder);