return NULL;
 }
 
+static void radeon_get_native_mode(struct drm_connector *connector)
+{
+       struct drm_encoder *encoder = radeon_best_single_encoder(connector);
+       struct radeon_encoder *radeon_encoder;
+
+       if (encoder == NULL)
+               return;
+
+       radeon_encoder = to_radeon_encoder(encoder);
+
+       if (!list_empty(&connector->probed_modes)) {
+               struct drm_display_mode *preferred_mode =
+                       list_first_entry(&connector->probed_modes,
+                                        struct drm_display_mode, head);
+
+               radeon_encoder->native_mode = *preferred_mode;
+       } else {
+               radeon_encoder->native_mode.clock = 0;
+       }
+}
+
 /*
  * radeon_connector_analog_encoder_conflict_solve
  * - search for other connectors sharing this encoder
                radeon_property_change_mode(&radeon_encoder->base);
        }
 
+       if (property == dev->mode_config.scaling_mode_property) {
+               enum radeon_rmx_type rmx_type;
+
+               if (connector->encoder)
+                       radeon_encoder = to_radeon_encoder(connector->encoder);
+               else {
+                       struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
+                       radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
+               }
+
+               switch (val) {
+               default:
+               case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
+               case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
+               case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
+               case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
+               }
+               if (radeon_encoder->rmx_type == rmx_type)
+                       return 0;
+
+               if ((rmx_type != DRM_MODE_SCALE_NONE) &&
+                   (radeon_encoder->native_mode.clock == 0))
+                       return 0;
+
+               radeon_encoder->rmx_type = rmx_type;
+
+               radeon_property_change_mode(&radeon_encoder->base);
+       }
+
        return 0;
 }
 
 
        ret = radeon_ddc_get_modes(radeon_connector);
 
+       radeon_get_native_mode(connector);
+
        return ret;
 }
 
        int ret;
 
        ret = radeon_ddc_get_modes(radeon_connector);
+
+       radeon_get_native_mode(connector);
+
        return ret;
 }
 
                                radeon_atom_ext_encoder_setup_ddc(encoder);
                }
                ret = radeon_ddc_get_modes(radeon_connector);
+
+               radeon_get_native_mode(connector);
        }
 
        return ret;
                        drm_object_attach_property(&radeon_connector->base.base,
                                                      rdev->mode_info.load_detect_property,
                                                      1);
+                       drm_object_attach_property(&radeon_connector->base.base,
+                                                  dev->mode_config.scaling_mode_property,
+                                                  DRM_MODE_SCALE_NONE);
                        break;
                case DRM_MODE_CONNECTOR_DVII:
                case DRM_MODE_CONNECTOR_DVID:
                                                      rdev->mode_info.underscan_vborder_property,
                                                      0);
 
+                       drm_object_attach_property(&radeon_connector->base.base,
+                                                     dev->mode_config.scaling_mode_property,
+                                                     DRM_MODE_SCALE_NONE);
+
                        drm_object_attach_property(&radeon_connector->base.base,
                                                   rdev->mode_info.dither_property,
                                                   RADEON_FMT_DITHER_DISABLE);
                        drm_object_attach_property(&radeon_connector->base.base,
                                                      rdev->mode_info.load_detect_property,
                                                      1);
+                       if (ASIC_IS_AVIVO(rdev))
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          dev->mode_config.scaling_mode_property,
+                                                          DRM_MODE_SCALE_NONE);
                        /* no HPD on analog connectors */
                        radeon_connector->hpd.hpd = RADEON_HPD_NONE;
                        connector->polled = DRM_CONNECTOR_POLL_CONNECT;
                        drm_object_attach_property(&radeon_connector->base.base,
                                                      rdev->mode_info.load_detect_property,
                                                      1);
+                       if (ASIC_IS_AVIVO(rdev))
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          dev->mode_config.scaling_mode_property,
+                                                          DRM_MODE_SCALE_NONE);
                        /* no HPD on analog connectors */
                        radeon_connector->hpd.hpd = RADEON_HPD_NONE;
                        connector->interlace_allowed = true;
                                drm_object_attach_property(&radeon_connector->base.base,
                                                              rdev->mode_info.underscan_vborder_property,
                                                              0);
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          rdev->mode_info.dither_property,
+                                                          RADEON_FMT_DITHER_DISABLE);
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          dev->mode_config.scaling_mode_property,
+                                                          DRM_MODE_SCALE_NONE);
                        }
                        if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
                                drm_object_attach_property(&radeon_connector->base.base,
                                                           rdev->mode_info.audio_property,
                                                           RADEON_AUDIO_AUTO);
                        }
-                       if (ASIC_IS_AVIVO(rdev)) {
-                               drm_object_attach_property(&radeon_connector->base.base,
-                                                          rdev->mode_info.dither_property,
-                                                          RADEON_FMT_DITHER_DISABLE);
-                       }
                        if (connector_type == DRM_MODE_CONNECTOR_DVII) {
                                radeon_connector->dac_load_detect = true;
                                drm_object_attach_property(&radeon_connector->base.base,
                                drm_object_attach_property(&radeon_connector->base.base,
                                                              rdev->mode_info.underscan_vborder_property,
                                                              0);
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          rdev->mode_info.dither_property,
+                                                          RADEON_FMT_DITHER_DISABLE);
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          dev->mode_config.scaling_mode_property,
+                                                          DRM_MODE_SCALE_NONE);
                        }
                        if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
                                drm_object_attach_property(&radeon_connector->base.base,
                                                           rdev->mode_info.audio_property,
                                                           RADEON_AUDIO_AUTO);
                        }
-                       if (ASIC_IS_AVIVO(rdev)) {
-                               drm_object_attach_property(&radeon_connector->base.base,
-                                                          rdev->mode_info.dither_property,
-                                                          RADEON_FMT_DITHER_DISABLE);
-                       }
                        subpixel_order = SubPixelHorizontalRGB;
                        connector->interlace_allowed = true;
                        if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
                                drm_object_attach_property(&radeon_connector->base.base,
                                                              rdev->mode_info.underscan_vborder_property,
                                                              0);
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          rdev->mode_info.dither_property,
+                                                          RADEON_FMT_DITHER_DISABLE);
+                               drm_object_attach_property(&radeon_connector->base.base,
+                                                          dev->mode_config.scaling_mode_property,
+                                                          DRM_MODE_SCALE_NONE);
                        }
                        if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
                                drm_object_attach_property(&radeon_connector->base.base,
                                                           rdev->mode_info.audio_property,
                                                           RADEON_AUDIO_AUTO);
                        }
-                       if (ASIC_IS_AVIVO(rdev)) {
-                               drm_object_attach_property(&radeon_connector->base.base,
-                                                          rdev->mode_info.dither_property,
-                                                          RADEON_FMT_DITHER_DISABLE);
-
-                       }
                        connector->interlace_allowed = true;
                        /* in theory with a DP to VGA converter... */
                        connector->doublescan_allowed = false;