|
@@ -41,7 +41,6 @@
|
|
|
#include <linux/kthread.h>
|
|
|
#include <uapi/linux/sched/types.h>
|
|
|
#include <drm/drm_of.h>
|
|
|
-#include <drm/drm_irq.h>
|
|
|
#include <drm/drm_ioctl.h>
|
|
|
#include <drm/drm_vblank.h>
|
|
|
#include <drm/drm_drv.h>
|
|
@@ -343,6 +342,71 @@ u32 msm_readl(const void __iomem *addr)
|
|
|
return val;
|
|
|
}
|
|
|
|
|
|
+static irqreturn_t msm_irq(int irq, void *arg)
|
|
|
+{
|
|
|
+ struct drm_device *dev = arg;
|
|
|
+ struct msm_drm_private *priv = dev->dev_private;
|
|
|
+ struct msm_kms *kms = priv->kms;
|
|
|
+
|
|
|
+ BUG_ON(!kms);
|
|
|
+
|
|
|
+ return kms->funcs->irq(kms);
|
|
|
+}
|
|
|
+
|
|
|
+static void msm_irq_preinstall(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct msm_drm_private *priv = dev->dev_private;
|
|
|
+ struct msm_kms *kms = priv->kms;
|
|
|
+
|
|
|
+ BUG_ON(!kms);
|
|
|
+
|
|
|
+ kms->funcs->irq_preinstall(kms);
|
|
|
+}
|
|
|
+
|
|
|
+static int msm_irq_postinstall(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct msm_drm_private *priv = dev->dev_private;
|
|
|
+ struct msm_kms *kms = priv->kms;
|
|
|
+
|
|
|
+ BUG_ON(!kms);
|
|
|
+
|
|
|
+ if (kms->funcs->irq_postinstall)
|
|
|
+ return kms->funcs->irq_postinstall(kms);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int msm_irq_install(struct drm_device *dev, unsigned int irq)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ if (irq == IRQ_NOTCONNECTED)
|
|
|
+ return -ENOTCONN;
|
|
|
+
|
|
|
+ msm_irq_preinstall(dev);
|
|
|
+
|
|
|
+ ret = request_irq(irq, msm_irq, 0, dev->driver->name, dev);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ ret = msm_irq_postinstall(dev);
|
|
|
+ if (ret) {
|
|
|
+ free_irq(irq, dev);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static void msm_irq_uninstall(struct drm_device *dev)
|
|
|
+{
|
|
|
+ struct msm_drm_private *priv = dev->dev_private;
|
|
|
+ struct msm_kms *kms = priv->kms;
|
|
|
+
|
|
|
+ kms->funcs->irq_uninstall(kms);
|
|
|
+ free_irq(kms->irq, dev);
|
|
|
+}
|
|
|
+
|
|
|
int msm_get_src_bpc(int chroma_format,
|
|
|
int bpc)
|
|
|
{
|
|
@@ -410,7 +474,7 @@ static int msm_drm_uninit(struct device *dev)
|
|
|
msm_fbdev_free(ddev);
|
|
|
#endif
|
|
|
drm_atomic_helper_shutdown(ddev);
|
|
|
- drm_irq_uninstall(ddev);
|
|
|
+ msm_irq_uninstall(ddev);
|
|
|
|
|
|
if (kms && kms->funcs)
|
|
|
kms->funcs->destroy(kms);
|
|
@@ -859,7 +923,7 @@ static int msm_drm_component_init(struct device *dev)
|
|
|
|
|
|
if (kms) {
|
|
|
pm_runtime_get_sync(dev);
|
|
|
- ret = drm_irq_install(ddev, platform_get_irq(pdev, 0));
|
|
|
+ ret = msm_irq_install(ddev, platform_get_irq(pdev, 0));
|
|
|
pm_runtime_put_sync(dev);
|
|
|
if (ret < 0) {
|
|
|
dev_err(dev, "failed to install IRQ handler\n");
|
|
@@ -1065,43 +1129,6 @@ static void msm_lastclose(struct drm_device *dev)
|
|
|
kms->funcs->lastclose(kms);
|
|
|
}
|
|
|
|
|
|
-static irqreturn_t msm_irq(int irq, void *arg)
|
|
|
-{
|
|
|
- struct drm_device *dev = arg;
|
|
|
- struct msm_drm_private *priv = dev->dev_private;
|
|
|
- struct msm_kms *kms = priv->kms;
|
|
|
- BUG_ON(!kms);
|
|
|
- return kms->funcs->irq(kms);
|
|
|
-}
|
|
|
-
|
|
|
-static void msm_irq_preinstall(struct drm_device *dev)
|
|
|
-{
|
|
|
- struct msm_drm_private *priv = dev->dev_private;
|
|
|
- struct msm_kms *kms = priv->kms;
|
|
|
- BUG_ON(!kms);
|
|
|
- kms->funcs->irq_preinstall(kms);
|
|
|
-}
|
|
|
-
|
|
|
-static int msm_irq_postinstall(struct drm_device *dev)
|
|
|
-{
|
|
|
- struct msm_drm_private *priv = dev->dev_private;
|
|
|
- struct msm_kms *kms = priv->kms;
|
|
|
- BUG_ON(!kms);
|
|
|
-
|
|
|
- if (kms->funcs->irq_postinstall)
|
|
|
- return kms->funcs->irq_postinstall(kms);
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-static void msm_irq_uninstall(struct drm_device *dev)
|
|
|
-{
|
|
|
- struct msm_drm_private *priv = dev->dev_private;
|
|
|
- struct msm_kms *kms = priv->kms;
|
|
|
- BUG_ON(!kms);
|
|
|
- kms->funcs->irq_uninstall(kms);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* DRM ioctls:
|
|
|
*/
|
|
@@ -1708,10 +1735,6 @@ static struct drm_driver msm_driver = {
|
|
|
.open = msm_open,
|
|
|
.postclose = msm_postclose,
|
|
|
.lastclose = msm_lastclose,
|
|
|
- .irq_handler = msm_irq,
|
|
|
- .irq_preinstall = msm_irq_preinstall,
|
|
|
- .irq_postinstall = msm_irq_postinstall,
|
|
|
- .irq_uninstall = msm_irq_uninstall,
|
|
|
.dumb_create = msm_gem_dumb_create,
|
|
|
.dumb_map_offset = msm_gem_dumb_map_offset,
|
|
|
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|