for (j = 0; j < i; j++) {
                        if (!enabled[j])
                                continue;
-                       if (!drm_mode_equal(modes[j], modes[i]))
+                       if (!drm_mode_match(modes[j], modes[i],
+                                           DRM_MODE_MATCH_TIMINGS |
+                                           DRM_MODE_MATCH_CLOCK |
+                                           DRM_MODE_MATCH_FLAGS |
+                                           DRM_MODE_MATCH_3D_FLAGS))
                                can_clone = false;
                }
        }
 
                fb_helper_conn = fb_helper->connector_info[i];
                list_for_each_entry(mode, &fb_helper_conn->connector->modes, head) {
-                       if (drm_mode_equal(mode, dmt_mode))
+                       if (drm_mode_match(mode, dmt_mode,
+                                          DRM_MODE_MATCH_TIMINGS |
+                                          DRM_MODE_MATCH_CLOCK |
+                                          DRM_MODE_MATCH_FLAGS |
+                                          DRM_MODE_MATCH_3D_FLAGS))
                                modes[i] = mode;
                }
                if (!modes[i])
 
                              DRM_MODE_MATCH_TIMINGS |
                              DRM_MODE_MATCH_CLOCK |
                              DRM_MODE_MATCH_FLAGS |
-                             DRM_MODE_MATCH_3D_FLAGS);
+                             DRM_MODE_MATCH_3D_FLAGS|
+                             DRM_MODE_MATCH_ASPECT_RATIO);
 }
 EXPORT_SYMBOL(drm_mode_equal);
 
        out->vrefresh = in->vrefresh;
        out->flags = in->flags;
        out->type = in->type;
+
+       switch (in->picture_aspect_ratio) {
+       case HDMI_PICTURE_ASPECT_4_3:
+               out->flags |= DRM_MODE_FLAG_PIC_AR_4_3;
+               break;
+       case HDMI_PICTURE_ASPECT_16_9:
+               out->flags |= DRM_MODE_FLAG_PIC_AR_16_9;
+               break;
+       case HDMI_PICTURE_ASPECT_RESERVED:
+       default:
+               out->flags |= DRM_MODE_FLAG_PIC_AR_NONE;
+               break;
+       }
+
        strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
        out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
 }
        strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
        out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
 
+       /* Clearing picture aspect ratio bits from out flags,
+        * as the aspect-ratio information is not stored in
+        * flags for kernel-mode, but in picture_aspect_ratio.
+        */
+       out->flags &= ~DRM_MODE_FLAG_PIC_AR_MASK;
+
+       switch (in->flags & DRM_MODE_FLAG_PIC_AR_MASK) {
+       case DRM_MODE_FLAG_PIC_AR_4_3:
+               out->picture_aspect_ratio |= HDMI_PICTURE_ASPECT_4_3;
+               break;
+       case DRM_MODE_FLAG_PIC_AR_16_9:
+               out->picture_aspect_ratio |= HDMI_PICTURE_ASPECT_16_9;
+               break;
+       default:
+               out->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
+               break;
+       }
+
        out->status = drm_mode_validate_driver(dev, out);
        if (out->status != MODE_OK)
                return -EINVAL;