Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c240906d authored by John Keeping's avatar John Keeping Committed by Mark Yao
Browse files

drm/atomic-helper: Export framebuffer_changed()



The Rockchip driver cannot use drm_atomic_helper_wait_for_vblanks()
because it has hardware counters for neither vblanks nor scanlines.

In order to simplify re-implementing the functionality for this driver,
export the framebuffer_changed() helper so it can be reused.

Signed-off-by: default avatarJohn Keeping <john@metanate.com>
Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 484bb6c9
Loading
Loading
Loading
Loading
+20 −4
Original line number Diff line number Diff line
@@ -946,7 +946,21 @@ static void wait_for_fences(struct drm_device *dev,
	}
}

static bool framebuffer_changed(struct drm_device *dev,
/**
 * drm_atomic_helper_framebuffer_changed - check if framebuffer has changed
 * @dev: DRM device
 * @old_state: atomic state object with old state structures
 * @crtc: DRM crtc
 *
 * Checks whether the framebuffer used for this CRTC changes as a result of
 * the atomic update.  This is useful for drivers which cannot use
 * drm_atomic_helper_wait_for_vblanks() and need to reimplement its
 * functionality.
 *
 * Returns:
 * true if the framebuffer changed.
 */
bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev,
					   struct drm_atomic_state *old_state,
					   struct drm_crtc *crtc)
{
@@ -965,6 +979,7 @@ static bool framebuffer_changed(struct drm_device *dev,

	return false;
}
EXPORT_SYMBOL(drm_atomic_helper_framebuffer_changed);

/**
 * drm_atomic_helper_wait_for_vblanks - wait for vblank on crtcs
@@ -999,7 +1014,8 @@ drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
		if (old_state->legacy_cursor_update)
			continue;

		if (!framebuffer_changed(dev, old_state, crtc))
		if (!drm_atomic_helper_framebuffer_changed(dev,
				old_state, crtc))
			continue;

		ret = drm_crtc_vblank_get(crtc);
+4 −0
Original line number Diff line number Diff line
@@ -42,6 +42,10 @@ int drm_atomic_helper_commit(struct drm_device *dev,
			     struct drm_atomic_state *state,
			     bool async);

bool drm_atomic_helper_framebuffer_changed(struct drm_device *dev,
					   struct drm_atomic_state *old_state,
					   struct drm_crtc *crtc);

void drm_atomic_helper_wait_for_vblanks(struct drm_device *dev,
					struct drm_atomic_state *old_state);