hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/drm_irq.c
....@@ -51,13 +51,18 @@
5151 * OTHER DEALINGS IN THE SOFTWARE.
5252 */
5353
54
-#include <drm/drm_irq.h>
55
-#include <drm/drmP.h>
5654
57
-#include <linux/interrupt.h> /* For task queue support */
58
-
59
-#include <linux/vgaarb.h>
6055 #include <linux/export.h>
56
+#include <linux/interrupt.h> /* For task queue support */
57
+#include <linux/pci.h>
58
+#include <linux/vgaarb.h>
59
+
60
+#include <drm/drm.h>
61
+#include <drm/drm_device.h>
62
+#include <drm/drm_drv.h>
63
+#include <drm/drm_irq.h>
64
+#include <drm/drm_print.h>
65
+#include <drm/drm_vblank.h>
6166
6267 #include "drm_internal.h"
6368
....@@ -103,14 +108,7 @@
103108 int ret;
104109 unsigned long sh_flags = 0;
105110
106
- if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
107
- return -EINVAL;
108
-
109111 if (irq == 0)
110
- return -EINVAL;
111
-
112
- /* Driver must have been initialized */
113
- if (!dev->dev_private)
114112 return -EINVAL;
115113
116114 if (dev->irq_enabled)
....@@ -123,8 +121,8 @@
123121 if (dev->driver->irq_preinstall)
124122 dev->driver->irq_preinstall(dev);
125123
126
- /* Install handler */
127
- if (drm_core_check_feature(dev, DRIVER_IRQ_SHARED))
124
+ /* PCI devices require shared interrupts. */
125
+ if (dev->pdev)
128126 sh_flags = IRQF_SHARED;
129127
130128 ret = request_irq(irq, dev->driver->irq_handler,
....@@ -174,9 +172,6 @@
174172 bool irq_enabled;
175173 int i;
176174
177
- if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ))
178
- return -EINVAL;
179
-
180175 irq_enabled = dev->irq_enabled;
181176 dev->irq_enabled = false;
182177
....@@ -186,7 +181,7 @@
186181 * vblank/irq handling. KMS drivers must ensure that vblanks are all
187182 * disabled when uninstalling the irq handler.
188183 */
189
- if (dev->num_crtcs) {
184
+ if (drm_dev_has_vblank(dev)) {
190185 spin_lock_irqsave(&dev->vbl_lock, irqflags);
191186 for (i = 0; i < dev->num_crtcs; i++) {
192187 struct drm_vblank_crtc *vblank = &dev->vblank[i];
....@@ -219,6 +214,7 @@
219214 }
220215 EXPORT_SYMBOL(drm_irq_uninstall);
221216
217
+#if IS_ENABLED(CONFIG_DRM_LEGACY)
222218 int drm_legacy_irq_control(struct drm_device *dev, void *data,
223219 struct drm_file *file_priv)
224220 {
....@@ -259,3 +255,4 @@
259255 return -EINVAL;
260256 }
261257 }
258
+#endif