Commit c3c50e8b651887bcefcc13beb3739c00b2379b5c

Authored by Ville Syrjälä
Committed by Dave Airlie
1 parent d63f5e6bf6

drm: Add drm_mode_copy()

Add a helper function to copy a display mode. Use it in
drm_mode_duplicate() and nouveau mode_fixup hooks.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>

Showing 4 changed files with 28 additions and 15 deletions Side-by-side Diff

drivers/gpu/drm/drm_modes.c
... ... @@ -714,6 +714,27 @@
714 714  
715 715  
716 716 /**
  717 + * drm_mode_copy - copy the mode
  718 + * @dst: mode to overwrite
  719 + * @src: mode to copy
  720 + *
  721 + * LOCKING:
  722 + * None.
  723 + *
  724 + * Copy an existing mode into another mode, preserving the object id
  725 + * of the destination mode.
  726 + */
  727 +void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src)
  728 +{
  729 + int id = dst->base.id;
  730 +
  731 + *dst = *src;
  732 + dst->base.id = id;
  733 + INIT_LIST_HEAD(&dst->head);
  734 +}
  735 +EXPORT_SYMBOL(drm_mode_copy);
  736 +
  737 +/**
717 738 * drm_mode_duplicate - allocate and duplicate an existing mode
718 739 * @m: mode to duplicate
719 740 *
720 741  
... ... @@ -727,16 +748,13 @@
727 748 const struct drm_display_mode *mode)
728 749 {
729 750 struct drm_display_mode *nmode;
730   - int new_id;
731 751  
732 752 nmode = drm_mode_create(dev);
733 753 if (!nmode)
734 754 return NULL;
735 755  
736   - new_id = nmode->base.id;
737   - *nmode = *mode;
738   - nmode->base.id = new_id;
739   - INIT_LIST_HEAD(&nmode->head);
  756 + drm_mode_copy(nmode, mode);
  757 +
740 758 return nmode;
741 759 }
742 760 EXPORT_SYMBOL(drm_mode_duplicate);
drivers/gpu/drm/nouveau/nv50_dac.c
... ... @@ -190,11 +190,8 @@
190 190 }
191 191  
192 192 if (connector->scaling_mode != DRM_MODE_SCALE_NONE &&
193   - connector->native_mode) {
194   - int id = adjusted_mode->base.id;
195   - *adjusted_mode = *connector->native_mode;
196   - adjusted_mode->base.id = id;
197   - }
  193 + connector->native_mode)
  194 + drm_mode_copy(adjusted_mode, connector->native_mode);
198 195  
199 196 return true;
200 197 }
drivers/gpu/drm/nouveau/nv50_sor.c
... ... @@ -342,11 +342,8 @@
342 342 }
343 343  
344 344 if (connector->scaling_mode != DRM_MODE_SCALE_NONE &&
345   - connector->native_mode) {
346   - int id = adjusted_mode->base.id;
347   - *adjusted_mode = *connector->native_mode;
348   - adjusted_mode->base.id = id;
349   - }
  345 + connector->native_mode)
  346 + drm_mode_copy(adjusted_mode, connector->native_mode);
350 347  
351 348 return true;
352 349 }
include/drm/drm_crtc.h
... ... @@ -855,6 +855,7 @@
855 855 extern int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid);
856 856 extern void drm_mode_probed_add(struct drm_connector *connector, struct drm_display_mode *mode);
857 857 extern void drm_mode_remove(struct drm_connector *connector, struct drm_display_mode *mode);
  858 +extern void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *src);
858 859 extern struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
859 860 const struct drm_display_mode *mode);
860 861 extern void drm_mode_debug_printmodeline(struct drm_display_mode *mode);