diff options
author | Robert Noland <rnoland@2hip.net> | 2009-02-25 17:59:26 -0600 |
---|---|---|
committer | Robert Noland <rnoland@2hip.net> | 2009-02-27 18:16:17 -0600 |
commit | 957b10695b619d6ed2f1098b00502395d9a3c149 (patch) | |
tree | 73ece8ec6f01018ea9fc920ee04992ec5e0fee2b | |
parent | 7ce8d4c1fec618ac2578ea0ddb8915b1b41ab9cb (diff) |
Move vblank_init to driver load time.
-rw-r--r-- | bsd-core/drmP.h | 1 | ||||
-rw-r--r-- | bsd-core/drm_drv.c | 2 | ||||
-rw-r--r-- | bsd-core/drm_irq.c | 4 | ||||
-rw-r--r-- | bsd-core/mach64_drv.c | 7 | ||||
-rw-r--r-- | bsd-core/r128_drv.c | 6 | ||||
-rw-r--r-- | linux-core/drm_drv.c | 2 | ||||
-rw-r--r-- | linux-core/drm_irq.c | 4 | ||||
-rw-r--r-- | shared-core/i915_dma.c | 7 | ||||
-rw-r--r-- | shared-core/i915_drv.h | 2 | ||||
-rw-r--r-- | shared-core/i915_irq.c | 5 | ||||
-rw-r--r-- | shared-core/mach64_drv.h | 1 | ||||
-rw-r--r-- | shared-core/mach64_irq.c | 2 | ||||
-rw-r--r-- | shared-core/mga_dma.c | 8 | ||||
-rw-r--r-- | shared-core/mga_irq.c | 5 | ||||
-rw-r--r-- | shared-core/r128_drv.h | 1 | ||||
-rw-r--r-- | shared-core/r128_irq.c | 2 | ||||
-rw-r--r-- | shared-core/radeon_cp.c | 6 | ||||
-rw-r--r-- | shared-core/radeon_irq.c | 5 | ||||
-rw-r--r-- | shared-core/via_irq.c | 1 | ||||
-rw-r--r-- | shared-core/via_map.c | 12 |
20 files changed, 58 insertions, 25 deletions
diff --git a/bsd-core/drmP.h b/bsd-core/drmP.h index 573c2b19..69147b33 100644 --- a/bsd-core/drmP.h +++ b/bsd-core/drmP.h | |||
@@ -797,6 +797,7 @@ void drm_handle_vblank(struct drm_device *dev, int crtc); | |||
797 | u32 drm_vblank_count(struct drm_device *dev, int crtc); | 797 | u32 drm_vblank_count(struct drm_device *dev, int crtc); |
798 | int drm_vblank_get(struct drm_device *dev, int crtc); | 798 | int drm_vblank_get(struct drm_device *dev, int crtc); |
799 | void drm_vblank_put(struct drm_device *dev, int crtc); | 799 | void drm_vblank_put(struct drm_device *dev, int crtc); |
800 | void drm_vblank_cleanup(struct drm_device *dev); | ||
800 | int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); | 801 | int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); |
801 | int drm_vblank_init(struct drm_device *dev, int num_crtcs); | 802 | int drm_vblank_init(struct drm_device *dev, int num_crtcs); |
802 | void drm_vbl_send_signals(struct drm_device *dev, int crtc); | 803 | void drm_vbl_send_signals(struct drm_device *dev, int crtc); |
diff --git a/bsd-core/drm_drv.c b/bsd-core/drm_drv.c index c45a4427..794f32ea 100644 --- a/bsd-core/drm_drv.c +++ b/bsd-core/drm_drv.c | |||
@@ -512,6 +512,8 @@ static void drm_unload(struct drm_device *dev) | |||
512 | DRM_DEBUG("mtrr_del = %d", retcode); | 512 | DRM_DEBUG("mtrr_del = %d", retcode); |
513 | } | 513 | } |
514 | 514 | ||
515 | drm_vblank_cleanup(dev); | ||
516 | |||
515 | DRM_LOCK(); | 517 | DRM_LOCK(); |
516 | drm_lastclose(dev); | 518 | drm_lastclose(dev); |
517 | DRM_UNLOCK(); | 519 | DRM_UNLOCK(); |
diff --git a/bsd-core/drm_irq.c b/bsd-core/drm_irq.c index 8a9d3449..2ca4275e 100644 --- a/bsd-core/drm_irq.c +++ b/bsd-core/drm_irq.c | |||
@@ -93,7 +93,7 @@ static void vblank_disable_fn(void *arg) | |||
93 | } | 93 | } |
94 | } | 94 | } |
95 | 95 | ||
96 | static void drm_vblank_cleanup(struct drm_device *dev) | 96 | void drm_vblank_cleanup(struct drm_device *dev) |
97 | { | 97 | { |
98 | unsigned long irqflags; | 98 | unsigned long irqflags; |
99 | 99 | ||
@@ -210,8 +210,6 @@ int drm_irq_uninstall(struct drm_device *dev) | |||
210 | bus_teardown_intr(dev->device, dev->irqr, dev->irqh); | 210 | bus_teardown_intr(dev->device, dev->irqr, dev->irqh); |
211 | DRM_LOCK(); | 211 | DRM_LOCK(); |
212 | 212 | ||
213 | drm_vblank_cleanup(dev); | ||
214 | |||
215 | return 0; | 213 | return 0; |
216 | } | 214 | } |
217 | 215 | ||
diff --git a/bsd-core/mach64_drv.c b/bsd-core/mach64_drv.c index 1cbe5f39..f73e7730 100644 --- a/bsd-core/mach64_drv.c +++ b/bsd-core/mach64_drv.c | |||
@@ -51,6 +51,7 @@ static void mach64_configure(struct drm_device *dev) | |||
51 | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ; | 51 | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ; |
52 | 52 | ||
53 | dev->driver->buf_priv_size = 1; /* No dev_priv */ | 53 | dev->driver->buf_priv_size = 1; /* No dev_priv */ |
54 | dev->driver->load = mach64_driver_load; | ||
54 | dev->driver->lastclose = mach64_driver_lastclose; | 55 | dev->driver->lastclose = mach64_driver_lastclose; |
55 | dev->driver->get_vblank_counter = mach64_get_vblank_counter; | 56 | dev->driver->get_vblank_counter = mach64_get_vblank_counter; |
56 | dev->driver->enable_vblank = mach64_enable_vblank; | 57 | dev->driver->enable_vblank = mach64_enable_vblank; |
@@ -91,6 +92,12 @@ mach64_attach(device_t nbdev) | |||
91 | return drm_attach(nbdev, mach64_pciidlist); | 92 | return drm_attach(nbdev, mach64_pciidlist); |
92 | } | 93 | } |
93 | 94 | ||
95 | int | ||
96 | mach64_driver_load(struct drm_device * dev, unsigned long flags) | ||
97 | { | ||
98 | return drm_vblank_init(dev, 1); | ||
99 | } | ||
100 | |||
94 | static int | 101 | static int |
95 | mach64_detach(device_t nbdev) | 102 | mach64_detach(device_t nbdev) |
96 | { | 103 | { |
diff --git a/bsd-core/r128_drv.c b/bsd-core/r128_drv.c index 3dbf66eb..f28bcf2c 100644 --- a/bsd-core/r128_drv.c +++ b/bsd-core/r128_drv.c | |||
@@ -49,6 +49,7 @@ static void r128_configure(struct drm_device *dev) | |||
49 | DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ; | 49 | DRIVER_SG | DRIVER_HAVE_DMA | DRIVER_HAVE_IRQ; |
50 | 50 | ||
51 | dev->driver->buf_priv_size = sizeof(drm_r128_buf_priv_t); | 51 | dev->driver->buf_priv_size = sizeof(drm_r128_buf_priv_t); |
52 | dev->driver->load = r128_driver_load; | ||
52 | dev->driver->preclose = r128_driver_preclose; | 53 | dev->driver->preclose = r128_driver_preclose; |
53 | dev->driver->lastclose = r128_driver_lastclose; | 54 | dev->driver->lastclose = r128_driver_lastclose; |
54 | dev->driver->get_vblank_counter = r128_get_vblank_counter; | 55 | dev->driver->get_vblank_counter = r128_get_vblank_counter; |
@@ -90,6 +91,11 @@ r128_attach(device_t nbdev) | |||
90 | return drm_attach(nbdev, r128_pciidlist); | 91 | return drm_attach(nbdev, r128_pciidlist); |
91 | } | 92 | } |
92 | 93 | ||
94 | int r128_driver_load(struct drm_device * dev, unsigned long flags) | ||
95 | { | ||
96 | return drm_vblank_init(dev, 1); | ||
97 | } | ||
98 | |||
93 | static int | 99 | static int |
94 | r128_detach(device_t nbdev) | 100 | r128_detach(device_t nbdev) |
95 | { | 101 | { |
diff --git a/linux-core/drm_drv.c b/linux-core/drm_drv.c index 31a98fe8..a32bfa3c 100644 --- a/linux-core/drm_drv.c +++ b/linux-core/drm_drv.c | |||
@@ -397,6 +397,8 @@ static void drm_cleanup(struct drm_device * dev) | |||
397 | return; | 397 | return; |
398 | } | 398 | } |
399 | 399 | ||
400 | drm_vblank_cleanup(dev); | ||
401 | |||
400 | drm_lastclose(dev); | 402 | drm_lastclose(dev); |
401 | drm_fence_manager_takedown(dev); | 403 | drm_fence_manager_takedown(dev); |
402 | 404 | ||
diff --git a/linux-core/drm_irq.c b/linux-core/drm_irq.c index 57419ca1..64fffd9c 100644 --- a/linux-core/drm_irq.c +++ b/linux-core/drm_irq.c | |||
@@ -94,7 +94,7 @@ static void vblank_disable_fn(unsigned long arg) | |||
94 | } | 94 | } |
95 | } | 95 | } |
96 | 96 | ||
97 | static void drm_vblank_cleanup(struct drm_device *dev) | 97 | void drm_vblank_cleanup(struct drm_device *dev) |
98 | { | 98 | { |
99 | /* Bail if the driver didn't call drm_vblank_init() */ | 99 | /* Bail if the driver didn't call drm_vblank_init() */ |
100 | if (dev->num_crtcs == 0) | 100 | if (dev->num_crtcs == 0) |
@@ -282,8 +282,6 @@ int drm_irq_uninstall(struct drm_device * dev) | |||
282 | 282 | ||
283 | free_irq(dev->pdev->irq, dev); | 283 | free_irq(dev->pdev->irq, dev); |
284 | 284 | ||
285 | drm_vblank_cleanup(dev); | ||
286 | |||
287 | dev->locked_tasklet_func = NULL; | 285 | dev->locked_tasklet_func = NULL; |
288 | 286 | ||
289 | return 0; | 287 | return 0; |
diff --git a/shared-core/i915_dma.c b/shared-core/i915_dma.c index b97b576f..9afb2e84 100644 --- a/shared-core/i915_dma.c +++ b/shared-core/i915_dma.c | |||
@@ -898,6 +898,13 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags) | |||
898 | #endif | 898 | #endif |
899 | DRM_SPININIT(&dev_priv->user_irq_lock, "userirq"); | 899 | DRM_SPININIT(&dev_priv->user_irq_lock, "userirq"); |
900 | 900 | ||
901 | ret = drm_vblank_init(dev, I915_NUM_PIPE); | ||
902 | |||
903 | if (ret) { | ||
904 | (void) i915_driver_unload(dev); | ||
905 | return ret; | ||
906 | } | ||
907 | |||
901 | return ret; | 908 | return ret; |
902 | } | 909 | } |
903 | 910 | ||
diff --git a/shared-core/i915_drv.h b/shared-core/i915_drv.h index aa97aabb..6185bcbf 100644 --- a/shared-core/i915_drv.h +++ b/shared-core/i915_drv.h | |||
@@ -46,6 +46,8 @@ enum pipe { | |||
46 | PIPE_B, | 46 | PIPE_B, |
47 | }; | 47 | }; |
48 | 48 | ||
49 | #define I915_NUM_PIPE 2 | ||
50 | |||
49 | /* Interface history: | 51 | /* Interface history: |
50 | * | 52 | * |
51 | * 1.1: Original. | 53 | * 1.1: Original. |
diff --git a/shared-core/i915_irq.c b/shared-core/i915_irq.c index 50ff93a4..51c1a973 100644 --- a/shared-core/i915_irq.c +++ b/shared-core/i915_irq.c | |||
@@ -481,11 +481,6 @@ void i915_driver_irq_preinstall(struct drm_device * dev) | |||
481 | int i915_driver_irq_postinstall(struct drm_device *dev) | 481 | int i915_driver_irq_postinstall(struct drm_device *dev) |
482 | { | 482 | { |
483 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; | 483 | drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private; |
484 | int ret, num_pipes = 2; | ||
485 | |||
486 | ret = drm_vblank_init(dev, num_pipes); | ||
487 | if (ret) | ||
488 | return ret; | ||
489 | 484 | ||
490 | dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; | 485 | dev_priv->vblank_pipe = DRM_I915_VBLANK_PIPE_A | DRM_I915_VBLANK_PIPE_B; |
491 | 486 | ||
diff --git a/shared-core/mach64_drv.h b/shared-core/mach64_drv.h index fb8a7724..6b0020ef 100644 --- a/shared-core/mach64_drv.h +++ b/shared-core/mach64_drv.h | |||
@@ -163,6 +163,7 @@ extern int mach64_dma_blit(struct drm_device *dev, void *data, | |||
163 | extern int mach64_get_param(struct drm_device *dev, void *data, | 163 | extern int mach64_get_param(struct drm_device *dev, void *data, |
164 | struct drm_file *file_priv); | 164 | struct drm_file *file_priv); |
165 | 165 | ||
166 | extern int mach64_driver_load(struct drm_device * dev, unsigned long flags); | ||
166 | extern u32 mach64_get_vblank_counter(struct drm_device *dev, int crtc); | 167 | extern u32 mach64_get_vblank_counter(struct drm_device *dev, int crtc); |
167 | extern int mach64_enable_vblank(struct drm_device *dev, int crtc); | 168 | extern int mach64_enable_vblank(struct drm_device *dev, int crtc); |
168 | extern void mach64_disable_vblank(struct drm_device *dev, int crtc); | 169 | extern void mach64_disable_vblank(struct drm_device *dev, int crtc); |
diff --git a/shared-core/mach64_irq.c b/shared-core/mach64_irq.c index 57879e8d..149d970a 100644 --- a/shared-core/mach64_irq.c +++ b/shared-core/mach64_irq.c | |||
@@ -143,7 +143,7 @@ void mach64_driver_irq_preinstall(struct drm_device * dev) | |||
143 | 143 | ||
144 | int mach64_driver_irq_postinstall(struct drm_device * dev) | 144 | int mach64_driver_irq_postinstall(struct drm_device * dev) |
145 | { | 145 | { |
146 | return drm_vblank_init(dev, 1); | 146 | return 0; |
147 | } | 147 | } |
148 | 148 | ||
149 | void mach64_driver_irq_uninstall(struct drm_device * dev) | 149 | void mach64_driver_irq_uninstall(struct drm_device * dev) |
diff --git a/shared-core/mga_dma.c b/shared-core/mga_dma.c index d56f4d7a..dab94034 100644 --- a/shared-core/mga_dma.c +++ b/shared-core/mga_dma.c | |||
@@ -396,6 +396,7 @@ int mga_freelist_put(struct drm_device * dev, struct drm_buf * buf) | |||
396 | int mga_driver_load(struct drm_device *dev, unsigned long flags) | 396 | int mga_driver_load(struct drm_device *dev, unsigned long flags) |
397 | { | 397 | { |
398 | drm_mga_private_t *dev_priv; | 398 | drm_mga_private_t *dev_priv; |
399 | int ret; | ||
399 | 400 | ||
400 | dev_priv = drm_alloc(sizeof(drm_mga_private_t), DRM_MEM_DRIVER); | 401 | dev_priv = drm_alloc(sizeof(drm_mga_private_t), DRM_MEM_DRIVER); |
401 | if (!dev_priv) | 402 | if (!dev_priv) |
@@ -415,6 +416,13 @@ int mga_driver_load(struct drm_device *dev, unsigned long flags) | |||
415 | dev->types[7] = _DRM_STAT_PRIMARY; | 416 | dev->types[7] = _DRM_STAT_PRIMARY; |
416 | dev->types[8] = _DRM_STAT_SECONDARY; | 417 | dev->types[8] = _DRM_STAT_SECONDARY; |
417 | 418 | ||
419 | ret = drm_vblank_init(dev, 1); | ||
420 | |||
421 | if (ret) { | ||
422 | (void) mga_driver_unload(dev); | ||
423 | return ret; | ||
424 | } | ||
425 | |||
418 | return 0; | 426 | return 0; |
419 | } | 427 | } |
420 | 428 | ||
diff --git a/shared-core/mga_irq.c b/shared-core/mga_irq.c index 4fe86322..6986ac85 100644 --- a/shared-core/mga_irq.c +++ b/shared-core/mga_irq.c | |||
@@ -154,11 +154,6 @@ void mga_driver_irq_preinstall(struct drm_device * dev) | |||
154 | int mga_driver_irq_postinstall(struct drm_device * dev) | 154 | int mga_driver_irq_postinstall(struct drm_device * dev) |
155 | { | 155 | { |
156 | drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; | 156 | drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; |
157 | int ret; | ||
158 | |||
159 | ret = drm_vblank_init(dev, 1); | ||
160 | if (ret) | ||
161 | return ret; | ||
162 | 157 | ||
163 | DRM_INIT_WAITQUEUE(&dev_priv->fence_queue); | 158 | DRM_INIT_WAITQUEUE(&dev_priv->fence_queue); |
164 | 159 | ||
diff --git a/shared-core/r128_drv.h b/shared-core/r128_drv.h index ab8b6297..9e7a6467 100644 --- a/shared-core/r128_drv.h +++ b/shared-core/r128_drv.h | |||
@@ -159,6 +159,7 @@ extern void r128_driver_irq_preinstall(struct drm_device * dev); | |||
159 | extern int r128_driver_irq_postinstall(struct drm_device * dev); | 159 | extern int r128_driver_irq_postinstall(struct drm_device * dev); |
160 | extern void r128_driver_irq_uninstall(struct drm_device * dev); | 160 | extern void r128_driver_irq_uninstall(struct drm_device * dev); |
161 | extern void r128_driver_lastclose(struct drm_device * dev); | 161 | extern void r128_driver_lastclose(struct drm_device * dev); |
162 | extern int r128_driver_load(struct drm_device * dev, unsigned long flags); | ||
162 | extern void r128_driver_preclose(struct drm_device * dev, | 163 | extern void r128_driver_preclose(struct drm_device * dev, |
163 | struct drm_file *file_priv); | 164 | struct drm_file *file_priv); |
164 | 165 | ||
diff --git a/shared-core/r128_irq.c b/shared-core/r128_irq.c index 5b95bd89..86e5daa9 100644 --- a/shared-core/r128_irq.c +++ b/shared-core/r128_irq.c | |||
@@ -102,7 +102,7 @@ void r128_driver_irq_preinstall(struct drm_device * dev) | |||
102 | 102 | ||
103 | int r128_driver_irq_postinstall(struct drm_device * dev) | 103 | int r128_driver_irq_postinstall(struct drm_device * dev) |
104 | { | 104 | { |
105 | return drm_vblank_init(dev, 1); | 105 | return 0; |
106 | } | 106 | } |
107 | 107 | ||
108 | void r128_driver_irq_uninstall(struct drm_device * dev) | 108 | void r128_driver_irq_uninstall(struct drm_device * dev) |
diff --git a/shared-core/radeon_cp.c b/shared-core/radeon_cp.c index c4035b89..872f5891 100644 --- a/shared-core/radeon_cp.c +++ b/shared-core/radeon_cp.c | |||
@@ -1748,6 +1748,12 @@ int radeon_driver_load(struct drm_device *dev, unsigned long flags) | |||
1748 | else | 1748 | else |
1749 | dev_priv->flags |= RADEON_IS_PCI; | 1749 | dev_priv->flags |= RADEON_IS_PCI; |
1750 | 1750 | ||
1751 | ret = drm_vblank_init(dev, 2); | ||
1752 | if (ret) { | ||
1753 | radeon_driver_unload(dev); | ||
1754 | return ret; | ||
1755 | } | ||
1756 | |||
1751 | DRM_DEBUG("%s card detected\n", | 1757 | DRM_DEBUG("%s card detected\n", |
1752 | ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI")))); | 1758 | ((dev_priv->flags & RADEON_IS_AGP) ? "AGP" : (((dev_priv->flags & RADEON_IS_PCIE) ? "PCIE" : "PCI")))); |
1753 | return ret; | 1759 | return ret; |
diff --git a/shared-core/radeon_irq.c b/shared-core/radeon_irq.c index 165e7bd2..60654b2c 100644 --- a/shared-core/radeon_irq.c +++ b/shared-core/radeon_irq.c | |||
@@ -369,15 +369,10 @@ int radeon_driver_irq_postinstall(struct drm_device * dev) | |||
369 | { | 369 | { |
370 | drm_radeon_private_t *dev_priv = | 370 | drm_radeon_private_t *dev_priv = |
371 | (drm_radeon_private_t *) dev->dev_private; | 371 | (drm_radeon_private_t *) dev->dev_private; |
372 | int ret; | ||
373 | 372 | ||
374 | atomic_set(&dev_priv->swi_emitted, 0); | 373 | atomic_set(&dev_priv->swi_emitted, 0); |
375 | DRM_INIT_WAITQUEUE(&dev_priv->swi_queue); | 374 | DRM_INIT_WAITQUEUE(&dev_priv->swi_queue); |
376 | 375 | ||
377 | ret = drm_vblank_init(dev, 2); | ||
378 | if (ret) | ||
379 | return ret; | ||
380 | |||
381 | dev->max_vblank_count = 0x001fffff; | 376 | dev->max_vblank_count = 0x001fffff; |
382 | 377 | ||
383 | radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1); | 378 | radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1); |
diff --git a/shared-core/via_irq.c b/shared-core/via_irq.c index c3279f8b..34e3076c 100644 --- a/shared-core/via_irq.c +++ b/shared-core/via_irq.c | |||
@@ -320,7 +320,6 @@ int via_driver_irq_postinstall(struct drm_device * dev) | |||
320 | if (!dev_priv) | 320 | if (!dev_priv) |
321 | return -EINVAL; | 321 | return -EINVAL; |
322 | 322 | ||
323 | drm_vblank_init(dev, 1); | ||
324 | status = VIA_READ(VIA_REG_INTERRUPT); | 323 | status = VIA_READ(VIA_REG_INTERRUPT); |
325 | VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_GLOBAL | 324 | VIA_WRITE(VIA_REG_INTERRUPT, status | VIA_IRQ_GLOBAL |
326 | | dev_priv->irq_enable_mask); | 325 | | dev_priv->irq_enable_mask); |
diff --git a/shared-core/via_map.c b/shared-core/via_map.c index 54934367..5dee6a70 100644 --- a/shared-core/via_map.c +++ b/shared-core/via_map.c | |||
@@ -121,9 +121,19 @@ int via_driver_load(struct drm_device *dev, unsigned long chipset) | |||
121 | ret = drm_sman_init(&dev_priv->sman, 2, 12, 8); | 121 | ret = drm_sman_init(&dev_priv->sman, 2, 12, 8); |
122 | if (ret) { | 122 | if (ret) { |
123 | drm_free(dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER); | 123 | drm_free(dev_priv, sizeof(*dev_priv), DRM_MEM_DRIVER); |
124 | return ret; | ||
124 | } | 125 | } |
125 | #endif | 126 | #endif |
126 | return ret; | 127 | |
128 | ret = drm_vblank_init(dev, 1); | ||
129 | if (ret) { | ||
130 | drm_sman_takedown(&dev_priv->sman); | ||
131 | drm_free(dev_priv, sizeof(drm_via_private_t), DRM_MEM_DRIVER); | ||
132 | return ret; | ||
133 | } | ||
134 | |||
135 | return 0; | ||
136 | |||
127 | } | 137 | } |
128 | 138 | ||
129 | int via_driver_unload(struct drm_device *dev) | 139 | int via_driver_unload(struct drm_device *dev) |