diff mbox

[2/5] drm: If available use atomic state in getcrtc ioctl

Message ID 1424604260-25134-2-git-send-email-daniel.vetter@ffwll.ch (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Vetter Feb. 22, 2015, 11:24 a.m. UTC
This way drivers fully converted to atomic don't need to update these
legacy state variables in their modeset code any more.

Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
---
 drivers/gpu/drm/drm_crtc.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

Comments

Rob Clark Feb. 22, 2015, 4:10 p.m. UTC | #1
On Sun, Feb 22, 2015 at 6:24 AM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> This way drivers fully converted to atomic don't need to update these
> legacy state variables in their modeset code any more.
>
> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>

Reviewed-by: Rob Clark <robdclark@gmail.com>

> ---
>  drivers/gpu/drm/drm_crtc.c | 25 ++++++++++++++++++-------
>  1 file changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
> index 6b6b07ff720b..0dbe417bc841 100644
> --- a/drivers/gpu/drm/drm_crtc.c
> +++ b/drivers/gpu/drm/drm_crtc.c
> @@ -2009,21 +2009,32 @@ int drm_mode_getcrtc(struct drm_device *dev,
>                 return -ENOENT;
>
>         drm_modeset_lock_crtc(crtc, crtc->primary);
> -       crtc_resp->x = crtc->x;
> -       crtc_resp->y = crtc->y;
>         crtc_resp->gamma_size = crtc->gamma_size;
>         if (crtc->primary->fb)
>                 crtc_resp->fb_id = crtc->primary->fb->base.id;
>         else
>                 crtc_resp->fb_id = 0;
>
> -       if (crtc->enabled) {
> -
> -               drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
> -               crtc_resp->mode_valid = 1;
> +       if (crtc->state) {
> +               crtc_resp->x = crtc->primary->state->src_x >> 16;
> +               crtc_resp->y = crtc->primary->state->src_y >> 16;
> +               if (crtc->state->enable) {
> +                       drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
> +                       crtc_resp->mode_valid = 1;
>
> +               } else {
> +                       crtc_resp->mode_valid = 0;
> +               }
>         } else {
> -               crtc_resp->mode_valid = 0;
> +               crtc_resp->x = crtc->x;
> +               crtc_resp->y = crtc->y;
> +               if (crtc->enabled) {
> +                       drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
> +                       crtc_resp->mode_valid = 1;
> +
> +               } else {
> +                       crtc_resp->mode_valid = 0;
> +               }
>         }
>         drm_modeset_unlock_crtc(crtc);
>
> --
> 2.1.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
diff mbox

Patch

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 6b6b07ff720b..0dbe417bc841 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -2009,21 +2009,32 @@  int drm_mode_getcrtc(struct drm_device *dev,
 		return -ENOENT;
 
 	drm_modeset_lock_crtc(crtc, crtc->primary);
-	crtc_resp->x = crtc->x;
-	crtc_resp->y = crtc->y;
 	crtc_resp->gamma_size = crtc->gamma_size;
 	if (crtc->primary->fb)
 		crtc_resp->fb_id = crtc->primary->fb->base.id;
 	else
 		crtc_resp->fb_id = 0;
 
-	if (crtc->enabled) {
-
-		drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
-		crtc_resp->mode_valid = 1;
+	if (crtc->state) {
+		crtc_resp->x = crtc->primary->state->src_x >> 16;
+		crtc_resp->y = crtc->primary->state->src_y >> 16;
+		if (crtc->state->enable) {
+			drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->state->mode);
+			crtc_resp->mode_valid = 1;
 
+		} else {
+			crtc_resp->mode_valid = 0;
+		}
 	} else {
-		crtc_resp->mode_valid = 0;
+		crtc_resp->x = crtc->x;
+		crtc_resp->y = crtc->y;
+		if (crtc->enabled) {
+			drm_crtc_convert_to_umode(&crtc_resp->mode, &crtc->mode);
+			crtc_resp->mode_valid = 1;
+
+		} else {
+			crtc_resp->mode_valid = 0;
+		}
 	}
 	drm_modeset_unlock_crtc(crtc);