Commit c3c50e8b651887bcefcc13beb3739c00b2379b5c
Committed by
Dave Airlie
1 parent
d63f5e6bf6
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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); |