NV50: fix cursor hide/show

This commit is contained in:
Maarten Maathuis 2008-06-24 10:16:52 +02:00
parent e7582cfff6
commit 315fef7ee4
2 changed files with 19 additions and 6 deletions

View file

@ -126,6 +126,7 @@ static int nv50_cursor_set_bo(struct nv50_crtc *crtc, drm_handle_t handle)
crtc->cursor->show(crtc);
}
} else {
DRM_ERROR("Unable to find cursor bo with handle 0x%X\n", handle);
return -EINVAL;
}
@ -151,9 +152,6 @@ int nv50_cursor_create(struct nv50_crtc *crtc)
crtc->cursor->enable = nv50_cursor_enable;
crtc->cursor->disable = nv50_cursor_disable;
/* defaults */
crtc->cursor->visible = true; /* won't happen until there is a cursor bo */
return 0;
}

View file

@ -233,20 +233,35 @@ static int nv50_kms_crtc_cursor_set(struct drm_crtc *drm_crtc, uint32_t buffer_h
{
struct nv50_crtc *crtc = to_nv50_crtc(drm_crtc);
struct nv50_display *display = nv50_get_display(crtc->dev);
int rval;
int rval = 0;
if (width != 64 || height != 64)
return -EINVAL;
rval = crtc->cursor->set_bo(crtc, (drm_handle_t) buffer_handle);
/* set bo before doing show cursor */
if (buffer_handle) {
rval = crtc->cursor->set_bo(crtc, (drm_handle_t) buffer_handle);
if (rval != 0)
goto out;
}
if (buffer_handle) {
rval = crtc->cursor->show(crtc);
if (rval != 0)
goto out;
} else { /* no handle implies hiding the cursor */
rval = crtc->cursor->hide(crtc);
goto out;
}
if (rval != 0)
return rval;
out:
/* in case this triggers any other cursor changes */
display->update(display);
return 0;
return rval;
}
static int nv50_kms_crtc_cursor_move(struct drm_crtc *drm_crtc, int x, int y)