31,6 → 31,9 |
#include "radeon.h" |
#include "atom.h" |
|
#define DISABLE_DP 0 |
|
|
extern void |
radeon_combios_connected_scratch_regs(struct drm_connector *connector, |
struct drm_encoder *encoder, |
612,6 → 615,8 |
struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
enum drm_connector_status ret = connector_status_disconnected; |
|
ENTER(); |
|
if (encoder) { |
struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder); |
struct drm_display_mode *native_mode = &radeon_encoder->native_mode; |
636,6 → 641,7 |
/* check acpi lid status ??? */ |
|
radeon_connector_update_scratch_regs(connector, ret); |
LEAVE(); |
return ret; |
} |
|
741,7 → 747,7 |
ret = connector_status_disconnected; |
|
if (radeon_connector->ddc_bus) |
dret = radeon_ddc_probe(radeon_connector); |
dret = radeon_ddc_probe(radeon_connector, false); |
if (dret) { |
radeon_connector->detected_by_load = false; |
if (radeon_connector->edid) { |
948,7 → 954,7 |
return connector->status; |
|
if (radeon_connector->ddc_bus) |
dret = radeon_ddc_probe(radeon_connector); |
dret = radeon_ddc_probe(radeon_connector, false); |
if (dret) { |
radeon_connector->detected_by_load = false; |
if (radeon_connector->edid) { |
1364,6 → 1370,14 |
struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
struct drm_encoder *encoder = radeon_best_single_encoder(connector); |
|
dbgprintf("%s radeon_connector %p encoder %p\n", |
__FUNCTION__, radeon_connector, encoder); |
|
#if DISABLE_DP |
connector->status = connector_status_disconnected; |
return connector->status; |
#endif |
|
if (!force && radeon_check_hpd_status_unchanged(connector)) |
return connector->status; |
|
1387,6 → 1401,7 |
if (!radeon_dig_connector->edp_on) |
atombios_set_edp_panel_power(connector, |
ATOM_TRANSMITTER_ACTION_POWER_ON); |
dbgprintf("check eDP\n"); |
if (radeon_dp_getdpcd(radeon_connector)) |
ret = connector_status_connected; |
if (!radeon_dig_connector->edp_on) |
1402,7 → 1417,8 |
if (encoder) { |
/* setup ddc on the bridge */ |
radeon_atom_ext_encoder_setup_ddc(encoder); |
if (radeon_ddc_probe(radeon_connector)) /* try DDC */ |
/* bridge chips are always aux */ |
if (radeon_ddc_probe(radeon_connector, true)) /* try DDC */ |
ret = connector_status_connected; |
else if (radeon_connector->dac_load_detect) { /* try load detection */ |
struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private; |
1420,7 → 1436,8 |
if (radeon_dp_getdpcd(radeon_connector)) |
ret = connector_status_connected; |
} else { |
if (radeon_ddc_probe(radeon_connector)) |
/* try non-aux ddc (DP to DVI/HMDI/etc. adapter) */ |
if (radeon_ddc_probe(radeon_connector, false)) |
ret = connector_status_connected; |
} |
} |
1427,6 → 1444,7 |
} |
|
radeon_connector_update_scratch_regs(connector, ret); |
LEAVE(); |
return ret; |
} |
|
1600,7 → 1618,7 |
connector->interlace_allowed = true; |
connector->doublescan_allowed = true; |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
break; |
1609,13 → 1627,13 |
case DRM_MODE_CONNECTOR_HDMIA: |
case DRM_MODE_CONNECTOR_HDMIB: |
case DRM_MODE_CONNECTOR_DisplayPort: |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_property, |
UNDERSCAN_OFF); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_hborder_property, |
0); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_vborder_property, |
0); |
subpixel_order = SubPixelHorizontalRGB; |
1626,7 → 1644,7 |
connector->doublescan_allowed = false; |
if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
} |
1633,7 → 1651,7 |
break; |
case DRM_MODE_CONNECTOR_LVDS: |
case DRM_MODE_CONNECTOR_eDP: |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
dev->mode_config.scaling_mode_property, |
DRM_MODE_SCALE_FULLSCREEN); |
subpixel_order = SubPixelHorizontalRGB; |
1652,7 → 1670,7 |
DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
/* no HPD on analog connectors */ |
1670,7 → 1688,7 |
DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
/* no HPD on analog connectors */ |
1693,23 → 1711,23 |
DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
subpixel_order = SubPixelHorizontalRGB; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.coherent_mode_property, |
1); |
if (ASIC_IS_AVIVO(rdev)) { |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_property, |
UNDERSCAN_OFF); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_hborder_property, |
0); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_vborder_property, |
0); |
} |
if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
} |
1733,17 → 1751,17 |
if (!radeon_connector->ddc_bus) |
DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.coherent_mode_property, |
1); |
if (ASIC_IS_AVIVO(rdev)) { |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_property, |
UNDERSCAN_OFF); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_hborder_property, |
0); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_vborder_property, |
0); |
} |
1772,17 → 1790,17 |
DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
subpixel_order = SubPixelHorizontalRGB; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.coherent_mode_property, |
1); |
if (ASIC_IS_AVIVO(rdev)) { |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_property, |
UNDERSCAN_OFF); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_hborder_property, |
0); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.underscan_vborder_property, |
0); |
} |
1807,7 → 1825,7 |
if (!radeon_connector->ddc_bus) |
DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
dev->mode_config.scaling_mode_property, |
DRM_MODE_SCALE_FULLSCREEN); |
subpixel_order = SubPixelHorizontalRGB; |
1820,10 → 1838,10 |
drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type); |
drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs); |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.tv_std_property, |
radeon_atombios_get_tv_info(rdev)); |
/* no HPD on analog connectors */ |
1844,7 → 1862,7 |
if (!radeon_connector->ddc_bus) |
DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
dev->mode_config.scaling_mode_property, |
DRM_MODE_SCALE_FULLSCREEN); |
subpixel_order = SubPixelHorizontalRGB; |
1923,7 → 1941,7 |
DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
/* no HPD on analog connectors */ |
1941,7 → 1959,7 |
DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
/* no HPD on analog connectors */ |
1960,7 → 1978,7 |
} |
if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
radeon_connector->dac_load_detect = true; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
1); |
} |
1984,10 → 2002,10 |
*/ |
if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) |
radeon_connector->dac_load_detect = false; |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.load_detect_property, |
radeon_connector->dac_load_detect); |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
rdev->mode_info.tv_std_property, |
radeon_combios_get_tv_info(rdev)); |
/* no HPD on analog connectors */ |
2003,7 → 2021,7 |
if (!radeon_connector->ddc_bus) |
DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n"); |
} |
drm_connector_attach_property(&radeon_connector->base, |
drm_object_attach_property(&radeon_connector->base.base, |
dev->mode_config.scaling_mode_property, |
DRM_MODE_SCALE_FULLSCREEN); |
subpixel_order = SubPixelHorizontalRGB; |