i915: fix vblank pipe setup

main
Dave Airlie 2007-04-26 14:50:00 +10:00
parent ceb44021ad
commit 34be91fe4e
3 changed files with 22 additions and 5 deletions

View File

@ -333,6 +333,24 @@ static bool intel_find_best_PLL(struct drm_crtc *crtc, int target,
return (err != target);
}
void
intel_set_vblank(drm_device_t *dev)
{
drm_i915_private_t *dev_priv = dev->dev_private;
struct drm_crtc *crtc;
struct intel_crtc *intel_crtc;
int vbl_pipe = 0;
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
intel_crtc = crtc->driver_private;
if (crtc->enabled)
vbl_pipe |= (1<<intel_crtc->pipe);
}
dev_priv->vblank_pipe = vbl_pipe;
i915_enable_interrupt(dev);
}
void
intel_wait_for_vblank(drm_device_t *dev)
{
@ -910,10 +928,8 @@ static void intel_crtc_mode_set(struct drm_crtc *crtc,
/* Flush the plane changes */
intel_pipe_set_base(crtc, x, y);
#ifdef XF86DRI // TODO
// I830DRISetVBlankInterrupt (pScrn, TRUE);
#endif
intel_set_vblank(dev);
intel_wait_for_vblank(dev);
}

View File

@ -237,6 +237,7 @@ extern int i915_vblank_pipe_get(DRM_IOCTL_ARGS);
extern int i915_emit_irq(drm_device_t * dev);
extern void i915_user_irq_on(drm_i915_private_t *dev_priv);
extern void i915_user_irq_off(drm_i915_private_t *dev_priv);
extern void i915_enable_interrupt (drm_device_t *dev);
extern int i915_vblank_swap(DRM_IOCTL_ARGS);
/* i915_mem.c */

View File

@ -489,7 +489,7 @@ int i915_irq_wait(DRM_IOCTL_ARGS)
return i915_wait_irq(dev, irqwait.irq_seq);
}
static void i915_enable_interrupt (drm_device_t *dev)
void i915_enable_interrupt (drm_device_t *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;