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

Commit 52440211 authored by Keith Packard's avatar Keith Packard Committed by Dave Airlie
Browse files

drm: move drm vblank initialization/cleanup to driver load/unload



drm vblank initialization keeps track of the changes in driver-supplied
frame counts across vt switch and mode setting, but only if you let it by
not tearing down the drm vblank structure.

Signed-off-by: default avatarKeith Packard <keithp@keithp.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 6133047a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -305,6 +305,8 @@ static void drm_cleanup(struct drm_device * dev)
		return;
	}

	drm_vblank_cleanup(dev);

	drm_lastclose(dev);

	if (drm_core_has_MTRR(dev) && drm_core_has_AGP(dev) &&
+1 −3
Original line number Diff line number Diff line
@@ -94,7 +94,7 @@ static void vblank_disable_fn(unsigned long arg)
	}
}

static void drm_vblank_cleanup(struct drm_device *dev)
void drm_vblank_cleanup(struct drm_device *dev)
{
	/* Bail if the driver didn't call drm_vblank_init() */
	if (dev->num_crtcs == 0)
@@ -278,8 +278,6 @@ int drm_irq_uninstall(struct drm_device * dev)

	free_irq(dev->pdev->irq, dev);

	drm_vblank_cleanup(dev);

	return 0;
}
EXPORT_SYMBOL(drm_irq_uninstall);
+7 −0
Original line number Diff line number Diff line
@@ -856,6 +856,13 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)

	spin_lock_init(&dev_priv->user_irq_lock);

	ret = drm_vblank_init(dev, I915_NUM_PIPE);

	if (ret) {
		(void) i915_driver_unload(dev);
		return ret;
	}

	return ret;
}

+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ enum pipe {
	PIPE_B,
};

#define I915_NUM_PIPE	2

/* Interface history:
 *
 * 1.1: Original.
+0 −5
Original line number Diff line number Diff line
@@ -498,11 +498,6 @@ void i915_driver_irq_preinstall(struct drm_device * dev)
int i915_driver_irq_postinstall(struct drm_device *dev)
{
	drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
	int ret, num_pipes = 2;

	ret = drm_vblank_init(dev, num_pipes);
	if (ret)
		return ret;

	dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B;

Loading