drm/radeon: fix panel scaling with eDP and LVDS bridges
We were using the wrong set_properly callback so we always ended up with Full scaling even if something else (Center or Full aspect) was selected. Signed-off-by: Alex Deucher <alexander.deucher@amd.com> Cc: stable@vger.kernel.org
This commit is contained in:
parent
1cd8b21aa2
commit
855f5f1d88
|
@ -1504,6 +1504,24 @@ static const struct drm_connector_funcs radeon_dp_connector_funcs = {
|
||||||
.force = radeon_dvi_force,
|
.force = radeon_dvi_force,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct drm_connector_funcs radeon_edp_connector_funcs = {
|
||||||
|
.dpms = drm_helper_connector_dpms,
|
||||||
|
.detect = radeon_dp_detect,
|
||||||
|
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||||
|
.set_property = radeon_lvds_set_property,
|
||||||
|
.destroy = radeon_dp_connector_destroy,
|
||||||
|
.force = radeon_dvi_force,
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = {
|
||||||
|
.dpms = drm_helper_connector_dpms,
|
||||||
|
.detect = radeon_dp_detect,
|
||||||
|
.fill_modes = drm_helper_probe_single_connector_modes,
|
||||||
|
.set_property = radeon_lvds_set_property,
|
||||||
|
.destroy = radeon_dp_connector_destroy,
|
||||||
|
.force = radeon_dvi_force,
|
||||||
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
radeon_add_atom_connector(struct drm_device *dev,
|
radeon_add_atom_connector(struct drm_device *dev,
|
||||||
uint32_t connector_id,
|
uint32_t connector_id,
|
||||||
|
@ -1595,8 +1613,6 @@ radeon_add_atom_connector(struct drm_device *dev,
|
||||||
goto failed;
|
goto failed;
|
||||||
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
||||||
radeon_connector->con_priv = radeon_dig_connector;
|
radeon_connector->con_priv = radeon_dig_connector;
|
||||||
drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
|
|
||||||
drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
|
|
||||||
if (i2c_bus->valid) {
|
if (i2c_bus->valid) {
|
||||||
/* add DP i2c bus */
|
/* add DP i2c bus */
|
||||||
if (connector_type == DRM_MODE_CONNECTOR_eDP)
|
if (connector_type == DRM_MODE_CONNECTOR_eDP)
|
||||||
|
@ -1613,6 +1629,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
||||||
case DRM_MODE_CONNECTOR_VGA:
|
case DRM_MODE_CONNECTOR_VGA:
|
||||||
case DRM_MODE_CONNECTOR_DVIA:
|
case DRM_MODE_CONNECTOR_DVIA:
|
||||||
default:
|
default:
|
||||||
|
drm_connector_init(dev, &radeon_connector->base,
|
||||||
|
&radeon_dp_connector_funcs, connector_type);
|
||||||
|
drm_connector_helper_add(&radeon_connector->base,
|
||||||
|
&radeon_dp_connector_helper_funcs);
|
||||||
connector->interlace_allowed = true;
|
connector->interlace_allowed = true;
|
||||||
connector->doublescan_allowed = true;
|
connector->doublescan_allowed = true;
|
||||||
radeon_connector->dac_load_detect = true;
|
radeon_connector->dac_load_detect = true;
|
||||||
|
@ -1625,6 +1645,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
||||||
case DRM_MODE_CONNECTOR_HDMIA:
|
case DRM_MODE_CONNECTOR_HDMIA:
|
||||||
case DRM_MODE_CONNECTOR_HDMIB:
|
case DRM_MODE_CONNECTOR_HDMIB:
|
||||||
case DRM_MODE_CONNECTOR_DisplayPort:
|
case DRM_MODE_CONNECTOR_DisplayPort:
|
||||||
|
drm_connector_init(dev, &radeon_connector->base,
|
||||||
|
&radeon_dp_connector_funcs, connector_type);
|
||||||
|
drm_connector_helper_add(&radeon_connector->base,
|
||||||
|
&radeon_dp_connector_helper_funcs);
|
||||||
drm_object_attach_property(&radeon_connector->base.base,
|
drm_object_attach_property(&radeon_connector->base.base,
|
||||||
rdev->mode_info.underscan_property,
|
rdev->mode_info.underscan_property,
|
||||||
UNDERSCAN_OFF);
|
UNDERSCAN_OFF);
|
||||||
|
@ -1652,6 +1676,10 @@ radeon_add_atom_connector(struct drm_device *dev,
|
||||||
break;
|
break;
|
||||||
case DRM_MODE_CONNECTOR_LVDS:
|
case DRM_MODE_CONNECTOR_LVDS:
|
||||||
case DRM_MODE_CONNECTOR_eDP:
|
case DRM_MODE_CONNECTOR_eDP:
|
||||||
|
drm_connector_init(dev, &radeon_connector->base,
|
||||||
|
&radeon_lvds_bridge_connector_funcs, connector_type);
|
||||||
|
drm_connector_helper_add(&radeon_connector->base,
|
||||||
|
&radeon_dp_connector_helper_funcs);
|
||||||
drm_object_attach_property(&radeon_connector->base.base,
|
drm_object_attach_property(&radeon_connector->base.base,
|
||||||
dev->mode_config.scaling_mode_property,
|
dev->mode_config.scaling_mode_property,
|
||||||
DRM_MODE_SCALE_FULLSCREEN);
|
DRM_MODE_SCALE_FULLSCREEN);
|
||||||
|
@ -1830,7 +1858,7 @@ radeon_add_atom_connector(struct drm_device *dev,
|
||||||
goto failed;
|
goto failed;
|
||||||
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
radeon_dig_connector->igp_lane_info = igp_lane_info;
|
||||||
radeon_connector->con_priv = radeon_dig_connector;
|
radeon_connector->con_priv = radeon_dig_connector;
|
||||||
drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
|
drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
|
||||||
drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
|
drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
|
||||||
if (i2c_bus->valid) {
|
if (i2c_bus->valid) {
|
||||||
/* add DP i2c bus */
|
/* add DP i2c bus */
|
||||||
|
|
Loading…
Reference in New Issue