|
@@ -229,6 +229,8 @@ static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
|
|
|
static int hdlcd_plane_atomic_check(struct drm_plane *plane,
|
|
|
struct drm_plane_state *state)
|
|
|
{
|
|
|
+ int i;
|
|
|
+ struct drm_crtc *crtc;
|
|
|
struct drm_crtc_state *crtc_state;
|
|
|
u32 src_h = state->src_h >> 16;
|
|
|
|
|
@@ -238,20 +240,17 @@ static int hdlcd_plane_atomic_check(struct drm_plane *plane,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- if (!state->fb || !state->crtc)
|
|
|
- return 0;
|
|
|
-
|
|
|
- crtc_state = drm_atomic_get_existing_crtc_state(state->state,
|
|
|
- state->crtc);
|
|
|
- if (!crtc_state) {
|
|
|
- DRM_DEBUG_KMS("Invalid crtc state\n");
|
|
|
- return -EINVAL;
|
|
|
+ for_each_new_crtc_in_state(state->state, crtc, crtc_state, i) {
|
|
|
+ /* we cannot disable the plane while the CRTC is active */
|
|
|
+ if (!state->fb && crtc_state->active)
|
|
|
+ return -EINVAL;
|
|
|
+ return drm_atomic_helper_check_plane_state(state, crtc_state,
|
|
|
+ DRM_PLANE_HELPER_NO_SCALING,
|
|
|
+ DRM_PLANE_HELPER_NO_SCALING,
|
|
|
+ false, true);
|
|
|
}
|
|
|
|
|
|
- return drm_atomic_helper_check_plane_state(state, crtc_state,
|
|
|
- DRM_PLANE_HELPER_NO_SCALING,
|
|
|
- DRM_PLANE_HELPER_NO_SCALING,
|
|
|
- false, true);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static void hdlcd_plane_atomic_update(struct drm_plane *plane,
|