Rev 3120 | Rev 3764 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3120 | Rev 3192 | ||
---|---|---|---|
Line 29... | Line 29... | ||
29 | #include |
29 | #include |
30 | #include |
30 | #include |
31 | #include "radeon.h" |
31 | #include "radeon.h" |
32 | #include "atom.h" |
32 | #include "atom.h" |
Line -... | Line 33... | ||
- | 33 | ||
- | 34 | #define DISABLE_DP 0 |
|
- | 35 | ||
33 | 36 | ||
34 | extern void |
37 | extern void |
35 | radeon_combios_connected_scratch_regs(struct drm_connector *connector, |
38 | radeon_combios_connected_scratch_regs(struct drm_connector *connector, |
36 | struct drm_encoder *encoder, |
39 | struct drm_encoder *encoder, |
37 | bool connected); |
40 | bool connected); |
Line 610... | Line 613... | ||
610 | { |
613 | { |
611 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
614 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
612 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
615 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
613 | enum drm_connector_status ret = connector_status_disconnected; |
616 | enum drm_connector_status ret = connector_status_disconnected; |
Line -... | Line 617... | ||
- | 617 | ||
- | 618 | ENTER(); |
|
614 | 619 | ||
615 | if (encoder) { |
620 | if (encoder) { |
616 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
621 | struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
Line 617... | Line 622... | ||
617 | struct drm_display_mode *native_mode = &radeon_encoder->native_mode; |
622 | struct drm_display_mode *native_mode = &radeon_encoder->native_mode; |
Line 634... | Line 639... | ||
634 | } |
639 | } |
635 | } |
640 | } |
636 | /* check acpi lid status ??? */ |
641 | /* check acpi lid status ??? */ |
Line 637... | Line 642... | ||
637 | 642 | ||
- | 643 | radeon_connector_update_scratch_regs(connector, ret); |
|
638 | radeon_connector_update_scratch_regs(connector, ret); |
644 | LEAVE(); |
639 | return ret; |
645 | return ret; |
Line 640... | Line 646... | ||
640 | } |
646 | } |
641 | 647 | ||
Line 739... | Line 745... | ||
739 | encoder = radeon_best_single_encoder(connector); |
745 | encoder = radeon_best_single_encoder(connector); |
740 | if (!encoder) |
746 | if (!encoder) |
741 | ret = connector_status_disconnected; |
747 | ret = connector_status_disconnected; |
Line 742... | Line 748... | ||
742 | 748 | ||
743 | if (radeon_connector->ddc_bus) |
749 | if (radeon_connector->ddc_bus) |
744 | dret = radeon_ddc_probe(radeon_connector); |
750 | dret = radeon_ddc_probe(radeon_connector, false); |
745 | if (dret) { |
751 | if (dret) { |
746 | radeon_connector->detected_by_load = false; |
752 | radeon_connector->detected_by_load = false; |
747 | if (radeon_connector->edid) { |
753 | if (radeon_connector->edid) { |
748 | kfree(radeon_connector->edid); |
754 | kfree(radeon_connector->edid); |
Line 946... | Line 952... | ||
946 | 952 | ||
947 | if (!force && radeon_check_hpd_status_unchanged(connector)) |
953 | if (!force && radeon_check_hpd_status_unchanged(connector)) |
Line 948... | Line 954... | ||
948 | return connector->status; |
954 | return connector->status; |
949 | 955 | ||
950 | if (radeon_connector->ddc_bus) |
956 | if (radeon_connector->ddc_bus) |
951 | dret = radeon_ddc_probe(radeon_connector); |
957 | dret = radeon_ddc_probe(radeon_connector, false); |
952 | if (dret) { |
958 | if (dret) { |
953 | radeon_connector->detected_by_load = false; |
959 | radeon_connector->detected_by_load = false; |
954 | if (radeon_connector->edid) { |
960 | if (radeon_connector->edid) { |
Line 1362... | Line 1368... | ||
1362 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
1368 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
1363 | enum drm_connector_status ret = connector_status_disconnected; |
1369 | enum drm_connector_status ret = connector_status_disconnected; |
1364 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
1370 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
1365 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
1371 | struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
Line -... | Line 1372... | ||
- | 1372 | ||
- | 1373 | dbgprintf("%s radeon_connector %p encoder %p\n", |
|
- | 1374 | __FUNCTION__, radeon_connector, encoder); |
|
- | 1375 | ||
- | 1376 | #if DISABLE_DP |
|
- | 1377 | connector->status = connector_status_disconnected; |
|
- | 1378 | return connector->status; |
|
- | 1379 | #endif |
|
1366 | 1380 | ||
1367 | if (!force && radeon_check_hpd_status_unchanged(connector)) |
1381 | if (!force && radeon_check_hpd_status_unchanged(connector)) |
Line 1368... | Line 1382... | ||
1368 | return connector->status; |
1382 | return connector->status; |
1369 | 1383 | ||
Line 1385... | Line 1399... | ||
1385 | /* eDP is always DP */ |
1399 | /* eDP is always DP */ |
1386 | radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; |
1400 | radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT; |
1387 | if (!radeon_dig_connector->edp_on) |
1401 | if (!radeon_dig_connector->edp_on) |
1388 | atombios_set_edp_panel_power(connector, |
1402 | atombios_set_edp_panel_power(connector, |
1389 | ATOM_TRANSMITTER_ACTION_POWER_ON); |
1403 | ATOM_TRANSMITTER_ACTION_POWER_ON); |
- | 1404 | dbgprintf("check eDP\n"); |
|
1390 | if (radeon_dp_getdpcd(radeon_connector)) |
1405 | if (radeon_dp_getdpcd(radeon_connector)) |
1391 | ret = connector_status_connected; |
1406 | ret = connector_status_connected; |
1392 | if (!radeon_dig_connector->edp_on) |
1407 | if (!radeon_dig_connector->edp_on) |
1393 | atombios_set_edp_panel_power(connector, |
1408 | atombios_set_edp_panel_power(connector, |
1394 | ATOM_TRANSMITTER_ACTION_POWER_OFF); |
1409 | ATOM_TRANSMITTER_ACTION_POWER_OFF); |
Line 1400... | Line 1415... | ||
1400 | radeon_dp_getdpcd(radeon_connector); |
1415 | radeon_dp_getdpcd(radeon_connector); |
Line 1401... | Line 1416... | ||
1401 | 1416 | ||
1402 | if (encoder) { |
1417 | if (encoder) { |
1403 | /* setup ddc on the bridge */ |
1418 | /* setup ddc on the bridge */ |
- | 1419 | radeon_atom_ext_encoder_setup_ddc(encoder); |
|
1404 | radeon_atom_ext_encoder_setup_ddc(encoder); |
1420 | /* bridge chips are always aux */ |
1405 | if (radeon_ddc_probe(radeon_connector)) /* try DDC */ |
1421 | if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */ |
1406 | ret = connector_status_connected; |
1422 | ret = connector_status_connected; |
1407 | else if (radeon_connector->dac_load_detect) { /* try load detection */ |
1423 | else if (radeon_connector->dac_load_detect) { /* try load detection */ |
1408 | struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; |
1424 | struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; |
1409 | ret = encoder_funcs->detect(encoder, connector); |
1425 | ret = encoder_funcs->detect(encoder, connector); |
Line 1418... | Line 1434... | ||
1418 | } else { |
1434 | } else { |
1419 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { |
1435 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { |
1420 | if (radeon_dp_getdpcd(radeon_connector)) |
1436 | if (radeon_dp_getdpcd(radeon_connector)) |
1421 | ret = connector_status_connected; |
1437 | ret = connector_status_connected; |
1422 | } else { |
1438 | } else { |
- | 1439 | /* try non-aux ddc (DP to DVI/HMDI/etc. adapter) */ |
|
1423 | if (radeon_ddc_probe(radeon_connector)) |
1440 | if (radeon_ddc_probe(radeon_connector, false)) |
1424 | ret = connector_status_connected; |
1441 | ret = connector_status_connected; |
1425 | } |
1442 | } |
1426 | } |
1443 | } |
1427 | } |
1444 | } |
Line 1428... | Line 1445... | ||
1428 | 1445 | ||
- | 1446 | radeon_connector_update_scratch_regs(connector, ret); |
|
1429 | radeon_connector_update_scratch_regs(connector, ret); |
1447 | LEAVE(); |
1430 | return ret; |
1448 | return ret; |
Line 1431... | Line 1449... | ||
1431 | } |
1449 | } |
1432 | 1450 | ||
Line 1598... | Line 1616... | ||
1598 | case DRM_MODE_CONNECTOR_DVIA: |
1616 | case DRM_MODE_CONNECTOR_DVIA: |
1599 | default: |
1617 | default: |
1600 | connector->interlace_allowed = true; |
1618 | connector->interlace_allowed = true; |
1601 | connector->doublescan_allowed = true; |
1619 | connector->doublescan_allowed = true; |
1602 | radeon_connector->dac_load_detect = true; |
1620 | radeon_connector->dac_load_detect = true; |
1603 | drm_connector_attach_property(&radeon_connector->base, |
1621 | drm_object_attach_property(&radeon_connector->base.base, |
1604 | rdev->mode_info.load_detect_property, |
1622 | rdev->mode_info.load_detect_property, |
1605 | 1); |
1623 | 1); |
1606 | break; |
1624 | break; |
1607 | case DRM_MODE_CONNECTOR_DVII: |
1625 | case DRM_MODE_CONNECTOR_DVII: |
1608 | case DRM_MODE_CONNECTOR_DVID: |
1626 | case DRM_MODE_CONNECTOR_DVID: |
1609 | case DRM_MODE_CONNECTOR_HDMIA: |
1627 | case DRM_MODE_CONNECTOR_HDMIA: |
1610 | case DRM_MODE_CONNECTOR_HDMIB: |
1628 | case DRM_MODE_CONNECTOR_HDMIB: |
1611 | case DRM_MODE_CONNECTOR_DisplayPort: |
1629 | case DRM_MODE_CONNECTOR_DisplayPort: |
1612 | drm_connector_attach_property(&radeon_connector->base, |
1630 | drm_object_attach_property(&radeon_connector->base.base, |
1613 | rdev->mode_info.underscan_property, |
1631 | rdev->mode_info.underscan_property, |
1614 | UNDERSCAN_OFF); |
1632 | UNDERSCAN_OFF); |
1615 | drm_connector_attach_property(&radeon_connector->base, |
1633 | drm_object_attach_property(&radeon_connector->base.base, |
1616 | rdev->mode_info.underscan_hborder_property, |
1634 | rdev->mode_info.underscan_hborder_property, |
1617 | 0); |
1635 | 0); |
1618 | drm_connector_attach_property(&radeon_connector->base, |
1636 | drm_object_attach_property(&radeon_connector->base.base, |
1619 | rdev->mode_info.underscan_vborder_property, |
1637 | rdev->mode_info.underscan_vborder_property, |
1620 | 0); |
1638 | 0); |
1621 | subpixel_order = SubPixelHorizontalRGB; |
1639 | subpixel_order = SubPixelHorizontalRGB; |
1622 | connector->interlace_allowed = true; |
1640 | connector->interlace_allowed = true; |
1623 | if (connector_type == DRM_MODE_CONNECTOR_HDMIB) |
1641 | if (connector_type == DRM_MODE_CONNECTOR_HDMIB) |
1624 | connector->doublescan_allowed = true; |
1642 | connector->doublescan_allowed = true; |
1625 | else |
1643 | else |
1626 | connector->doublescan_allowed = false; |
1644 | connector->doublescan_allowed = false; |
1627 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1645 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1628 | radeon_connector->dac_load_detect = true; |
1646 | radeon_connector->dac_load_detect = true; |
1629 | drm_connector_attach_property(&radeon_connector->base, |
1647 | drm_object_attach_property(&radeon_connector->base.base, |
1630 | rdev->mode_info.load_detect_property, |
1648 | rdev->mode_info.load_detect_property, |
1631 | 1); |
1649 | 1); |
1632 | } |
1650 | } |
1633 | break; |
1651 | break; |
1634 | case DRM_MODE_CONNECTOR_LVDS: |
1652 | case DRM_MODE_CONNECTOR_LVDS: |
1635 | case DRM_MODE_CONNECTOR_eDP: |
1653 | case DRM_MODE_CONNECTOR_eDP: |
1636 | drm_connector_attach_property(&radeon_connector->base, |
1654 | drm_object_attach_property(&radeon_connector->base.base, |
1637 | dev->mode_config.scaling_mode_property, |
1655 | dev->mode_config.scaling_mode_property, |
1638 | DRM_MODE_SCALE_FULLSCREEN); |
1656 | DRM_MODE_SCALE_FULLSCREEN); |
1639 | subpixel_order = SubPixelHorizontalRGB; |
1657 | subpixel_order = SubPixelHorizontalRGB; |
1640 | connector->interlace_allowed = false; |
1658 | connector->interlace_allowed = false; |
1641 | connector->doublescan_allowed = false; |
1659 | connector->doublescan_allowed = false; |
Line 1650... | Line 1668... | ||
1650 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1668 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1651 | if (!radeon_connector->ddc_bus) |
1669 | if (!radeon_connector->ddc_bus) |
1652 | DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1670 | DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1653 | } |
1671 | } |
1654 | radeon_connector->dac_load_detect = true; |
1672 | radeon_connector->dac_load_detect = true; |
1655 | drm_connector_attach_property(&radeon_connector->base, |
1673 | drm_object_attach_property(&radeon_connector->base.base, |
1656 | rdev->mode_info.load_detect_property, |
1674 | rdev->mode_info.load_detect_property, |
1657 | 1); |
1675 | 1); |
1658 | /* no HPD on analog connectors */ |
1676 | /* no HPD on analog connectors */ |
1659 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1677 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1660 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; |
1678 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; |
Line 1668... | Line 1686... | ||
1668 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1686 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1669 | if (!radeon_connector->ddc_bus) |
1687 | if (!radeon_connector->ddc_bus) |
1670 | DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1688 | DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1671 | } |
1689 | } |
1672 | radeon_connector->dac_load_detect = true; |
1690 | radeon_connector->dac_load_detect = true; |
1673 | drm_connector_attach_property(&radeon_connector->base, |
1691 | drm_object_attach_property(&radeon_connector->base.base, |
1674 | rdev->mode_info.load_detect_property, |
1692 | rdev->mode_info.load_detect_property, |
1675 | 1); |
1693 | 1); |
1676 | /* no HPD on analog connectors */ |
1694 | /* no HPD on analog connectors */ |
1677 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1695 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1678 | connector->interlace_allowed = true; |
1696 | connector->interlace_allowed = true; |
Line 1691... | Line 1709... | ||
1691 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1709 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1692 | if (!radeon_connector->ddc_bus) |
1710 | if (!radeon_connector->ddc_bus) |
1693 | DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1711 | DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1694 | } |
1712 | } |
1695 | subpixel_order = SubPixelHorizontalRGB; |
1713 | subpixel_order = SubPixelHorizontalRGB; |
1696 | drm_connector_attach_property(&radeon_connector->base, |
1714 | drm_object_attach_property(&radeon_connector->base.base, |
1697 | rdev->mode_info.coherent_mode_property, |
1715 | rdev->mode_info.coherent_mode_property, |
1698 | 1); |
1716 | 1); |
1699 | if (ASIC_IS_AVIVO(rdev)) { |
1717 | if (ASIC_IS_AVIVO(rdev)) { |
1700 | drm_connector_attach_property(&radeon_connector->base, |
1718 | drm_object_attach_property(&radeon_connector->base.base, |
1701 | rdev->mode_info.underscan_property, |
1719 | rdev->mode_info.underscan_property, |
1702 | UNDERSCAN_OFF); |
1720 | UNDERSCAN_OFF); |
1703 | drm_connector_attach_property(&radeon_connector->base, |
1721 | drm_object_attach_property(&radeon_connector->base.base, |
1704 | rdev->mode_info.underscan_hborder_property, |
1722 | rdev->mode_info.underscan_hborder_property, |
1705 | 0); |
1723 | 0); |
1706 | drm_connector_attach_property(&radeon_connector->base, |
1724 | drm_object_attach_property(&radeon_connector->base.base, |
1707 | rdev->mode_info.underscan_vborder_property, |
1725 | rdev->mode_info.underscan_vborder_property, |
1708 | 0); |
1726 | 0); |
1709 | } |
1727 | } |
1710 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1728 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1711 | radeon_connector->dac_load_detect = true; |
1729 | radeon_connector->dac_load_detect = true; |
1712 | drm_connector_attach_property(&radeon_connector->base, |
1730 | drm_object_attach_property(&radeon_connector->base.base, |
1713 | rdev->mode_info.load_detect_property, |
1731 | rdev->mode_info.load_detect_property, |
1714 | 1); |
1732 | 1); |
1715 | } |
1733 | } |
1716 | connector->interlace_allowed = true; |
1734 | connector->interlace_allowed = true; |
1717 | if (connector_type == DRM_MODE_CONNECTOR_DVII) |
1735 | if (connector_type == DRM_MODE_CONNECTOR_DVII) |
Line 1731... | Line 1749... | ||
1731 | if (i2c_bus->valid) { |
1749 | if (i2c_bus->valid) { |
1732 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1750 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1733 | if (!radeon_connector->ddc_bus) |
1751 | if (!radeon_connector->ddc_bus) |
1734 | DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1752 | DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1735 | } |
1753 | } |
1736 | drm_connector_attach_property(&radeon_connector->base, |
1754 | drm_object_attach_property(&radeon_connector->base.base, |
1737 | rdev->mode_info.coherent_mode_property, |
1755 | rdev->mode_info.coherent_mode_property, |
1738 | 1); |
1756 | 1); |
1739 | if (ASIC_IS_AVIVO(rdev)) { |
1757 | if (ASIC_IS_AVIVO(rdev)) { |
1740 | drm_connector_attach_property(&radeon_connector->base, |
1758 | drm_object_attach_property(&radeon_connector->base.base, |
1741 | rdev->mode_info.underscan_property, |
1759 | rdev->mode_info.underscan_property, |
1742 | UNDERSCAN_OFF); |
1760 | UNDERSCAN_OFF); |
1743 | drm_connector_attach_property(&radeon_connector->base, |
1761 | drm_object_attach_property(&radeon_connector->base.base, |
1744 | rdev->mode_info.underscan_hborder_property, |
1762 | rdev->mode_info.underscan_hborder_property, |
1745 | 0); |
1763 | 0); |
1746 | drm_connector_attach_property(&radeon_connector->base, |
1764 | drm_object_attach_property(&radeon_connector->base.base, |
1747 | rdev->mode_info.underscan_vborder_property, |
1765 | rdev->mode_info.underscan_vborder_property, |
1748 | 0); |
1766 | 0); |
1749 | } |
1767 | } |
1750 | subpixel_order = SubPixelHorizontalRGB; |
1768 | subpixel_order = SubPixelHorizontalRGB; |
1751 | connector->interlace_allowed = true; |
1769 | connector->interlace_allowed = true; |
Line 1770... | Line 1788... | ||
1770 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1788 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1771 | if (!radeon_connector->ddc_bus) |
1789 | if (!radeon_connector->ddc_bus) |
1772 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1790 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1773 | } |
1791 | } |
1774 | subpixel_order = SubPixelHorizontalRGB; |
1792 | subpixel_order = SubPixelHorizontalRGB; |
1775 | drm_connector_attach_property(&radeon_connector->base, |
1793 | drm_object_attach_property(&radeon_connector->base.base, |
1776 | rdev->mode_info.coherent_mode_property, |
1794 | rdev->mode_info.coherent_mode_property, |
1777 | 1); |
1795 | 1); |
1778 | if (ASIC_IS_AVIVO(rdev)) { |
1796 | if (ASIC_IS_AVIVO(rdev)) { |
1779 | drm_connector_attach_property(&radeon_connector->base, |
1797 | drm_object_attach_property(&radeon_connector->base.base, |
1780 | rdev->mode_info.underscan_property, |
1798 | rdev->mode_info.underscan_property, |
1781 | UNDERSCAN_OFF); |
1799 | UNDERSCAN_OFF); |
1782 | drm_connector_attach_property(&radeon_connector->base, |
1800 | drm_object_attach_property(&radeon_connector->base.base, |
1783 | rdev->mode_info.underscan_hborder_property, |
1801 | rdev->mode_info.underscan_hborder_property, |
1784 | 0); |
1802 | 0); |
1785 | drm_connector_attach_property(&radeon_connector->base, |
1803 | drm_object_attach_property(&radeon_connector->base.base, |
1786 | rdev->mode_info.underscan_vborder_property, |
1804 | rdev->mode_info.underscan_vborder_property, |
1787 | 0); |
1805 | 0); |
1788 | } |
1806 | } |
1789 | connector->interlace_allowed = true; |
1807 | connector->interlace_allowed = true; |
1790 | /* in theory with a DP to VGA converter... */ |
1808 | /* in theory with a DP to VGA converter... */ |
Line 1805... | Line 1823... | ||
1805 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); |
1823 | DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n"); |
1806 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1824 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1807 | if (!radeon_connector->ddc_bus) |
1825 | if (!radeon_connector->ddc_bus) |
1808 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1826 | DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1809 | } |
1827 | } |
1810 | drm_connector_attach_property(&radeon_connector->base, |
1828 | drm_object_attach_property(&radeon_connector->base.base, |
1811 | dev->mode_config.scaling_mode_property, |
1829 | dev->mode_config.scaling_mode_property, |
1812 | DRM_MODE_SCALE_FULLSCREEN); |
1830 | DRM_MODE_SCALE_FULLSCREEN); |
1813 | subpixel_order = SubPixelHorizontalRGB; |
1831 | subpixel_order = SubPixelHorizontalRGB; |
1814 | connector->interlace_allowed = false; |
1832 | connector->interlace_allowed = false; |
1815 | connector->doublescan_allowed = false; |
1833 | connector->doublescan_allowed = false; |
Line 1818... | Line 1836... | ||
1818 | case DRM_MODE_CONNECTOR_Composite: |
1836 | case DRM_MODE_CONNECTOR_Composite: |
1819 | case DRM_MODE_CONNECTOR_9PinDIN: |
1837 | case DRM_MODE_CONNECTOR_9PinDIN: |
1820 | drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
1838 | drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
1821 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
1839 | drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
1822 | radeon_connector->dac_load_detect = true; |
1840 | radeon_connector->dac_load_detect = true; |
1823 | drm_connector_attach_property(&radeon_connector->base, |
1841 | drm_object_attach_property(&radeon_connector->base.base, |
1824 | rdev->mode_info.load_detect_property, |
1842 | rdev->mode_info.load_detect_property, |
1825 | 1); |
1843 | 1); |
1826 | drm_connector_attach_property(&radeon_connector->base, |
1844 | drm_object_attach_property(&radeon_connector->base.base, |
1827 | rdev->mode_info.tv_std_property, |
1845 | rdev->mode_info.tv_std_property, |
1828 | radeon_atombios_get_tv_info(rdev)); |
1846 | radeon_atombios_get_tv_info(rdev)); |
1829 | /* no HPD on analog connectors */ |
1847 | /* no HPD on analog connectors */ |
1830 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1848 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1831 | connector->interlace_allowed = false; |
1849 | connector->interlace_allowed = false; |
Line 1842... | Line 1860... | ||
1842 | if (i2c_bus->valid) { |
1860 | if (i2c_bus->valid) { |
1843 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1861 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1844 | if (!radeon_connector->ddc_bus) |
1862 | if (!radeon_connector->ddc_bus) |
1845 | DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1863 | DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1846 | } |
1864 | } |
1847 | drm_connector_attach_property(&radeon_connector->base, |
1865 | drm_object_attach_property(&radeon_connector->base.base, |
1848 | dev->mode_config.scaling_mode_property, |
1866 | dev->mode_config.scaling_mode_property, |
1849 | DRM_MODE_SCALE_FULLSCREEN); |
1867 | DRM_MODE_SCALE_FULLSCREEN); |
1850 | subpixel_order = SubPixelHorizontalRGB; |
1868 | subpixel_order = SubPixelHorizontalRGB; |
1851 | connector->interlace_allowed = false; |
1869 | connector->interlace_allowed = false; |
1852 | connector->doublescan_allowed = false; |
1870 | connector->doublescan_allowed = false; |
Line 1921... | Line 1939... | ||
1921 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1939 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1922 | if (!radeon_connector->ddc_bus) |
1940 | if (!radeon_connector->ddc_bus) |
1923 | DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1941 | DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1924 | } |
1942 | } |
1925 | radeon_connector->dac_load_detect = true; |
1943 | radeon_connector->dac_load_detect = true; |
1926 | drm_connector_attach_property(&radeon_connector->base, |
1944 | drm_object_attach_property(&radeon_connector->base.base, |
1927 | rdev->mode_info.load_detect_property, |
1945 | rdev->mode_info.load_detect_property, |
1928 | 1); |
1946 | 1); |
1929 | /* no HPD on analog connectors */ |
1947 | /* no HPD on analog connectors */ |
1930 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1948 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1931 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; |
1949 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; |
Line 1939... | Line 1957... | ||
1939 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1957 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
1940 | if (!radeon_connector->ddc_bus) |
1958 | if (!radeon_connector->ddc_bus) |
1941 | DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1959 | DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1942 | } |
1960 | } |
1943 | radeon_connector->dac_load_detect = true; |
1961 | radeon_connector->dac_load_detect = true; |
1944 | drm_connector_attach_property(&radeon_connector->base, |
1962 | drm_object_attach_property(&radeon_connector->base.base, |
1945 | rdev->mode_info.load_detect_property, |
1963 | rdev->mode_info.load_detect_property, |
1946 | 1); |
1964 | 1); |
1947 | /* no HPD on analog connectors */ |
1965 | /* no HPD on analog connectors */ |
1948 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1966 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1949 | connector->interlace_allowed = true; |
1967 | connector->interlace_allowed = true; |
Line 1958... | Line 1976... | ||
1958 | if (!radeon_connector->ddc_bus) |
1976 | if (!radeon_connector->ddc_bus) |
1959 | DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1977 | DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
1960 | } |
1978 | } |
1961 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1979 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
1962 | radeon_connector->dac_load_detect = true; |
1980 | radeon_connector->dac_load_detect = true; |
1963 | drm_connector_attach_property(&radeon_connector->base, |
1981 | drm_object_attach_property(&radeon_connector->base.base, |
1964 | rdev->mode_info.load_detect_property, |
1982 | rdev->mode_info.load_detect_property, |
1965 | 1); |
1983 | 1); |
1966 | } |
1984 | } |
1967 | subpixel_order = SubPixelHorizontalRGB; |
1985 | subpixel_order = SubPixelHorizontalRGB; |
1968 | connector->interlace_allowed = true; |
1986 | connector->interlace_allowed = true; |
Line 1982... | Line 2000... | ||
1982 | * found a way to make load detect reliable on those |
2000 | * found a way to make load detect reliable on those |
1983 | * chipset, thus just disable it for TV. |
2001 | * chipset, thus just disable it for TV. |
1984 | */ |
2002 | */ |
1985 | if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) |
2003 | if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) |
1986 | radeon_connector->dac_load_detect = false; |
2004 | radeon_connector->dac_load_detect = false; |
1987 | drm_connector_attach_property(&radeon_connector->base, |
2005 | drm_object_attach_property(&radeon_connector->base.base, |
1988 | rdev->mode_info.load_detect_property, |
2006 | rdev->mode_info.load_detect_property, |
1989 | radeon_connector->dac_load_detect); |
2007 | radeon_connector->dac_load_detect); |
1990 | drm_connector_attach_property(&radeon_connector->base, |
2008 | drm_object_attach_property(&radeon_connector->base.base, |
1991 | rdev->mode_info.tv_std_property, |
2009 | rdev->mode_info.tv_std_property, |
1992 | radeon_combios_get_tv_info(rdev)); |
2010 | radeon_combios_get_tv_info(rdev)); |
1993 | /* no HPD on analog connectors */ |
2011 | /* no HPD on analog connectors */ |
1994 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
2012 | radeon_connector->hpd.hpd = RADEON_HPD_NONE; |
1995 | connector->interlace_allowed = false; |
2013 | connector->interlace_allowed = false; |
Line 2001... | Line 2019... | ||
2001 | if (i2c_bus->valid) { |
2019 | if (i2c_bus->valid) { |
2002 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
2020 | radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus); |
2003 | if (!radeon_connector->ddc_bus) |
2021 | if (!radeon_connector->ddc_bus) |
2004 | DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
2022 | DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
2005 | } |
2023 | } |
2006 | drm_connector_attach_property(&radeon_connector->base, |
2024 | drm_object_attach_property(&radeon_connector->base.base, |
2007 | dev->mode_config.scaling_mode_property, |
2025 | dev->mode_config.scaling_mode_property, |
2008 | DRM_MODE_SCALE_FULLSCREEN); |
2026 | DRM_MODE_SCALE_FULLSCREEN); |
2009 | subpixel_order = SubPixelHorizontalRGB; |
2027 | subpixel_order = SubPixelHorizontalRGB; |
2010 | connector->interlace_allowed = false; |
2028 | connector->interlace_allowed = false; |
2011 | connector->doublescan_allowed = false; |
2029 | connector->doublescan_allowed = false; |