disp: msm: use linux IRQ interfaces instead of DRM helpers
Update the msm layer to use linux IRQ interfaces as DRM IRQ helpers are removed in 5.15 kernel. Change-Id: I9f41032927cddabe8a5a48e5e9339acef6c6f67e Signed-off-by: Bruce Hoo <bingchua@codeaurora.org> Signed-off-by: Jeykumar Sankaran <jsanka@codeaurora.org>
This commit is contained in:

committed by
Gerrit - the friendly Code Review server

부모
d1d11731f1
커밋
45160ca04c
111
msm/msm_drv.c
111
msm/msm_drv.c
@@ -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,
|
||||
|
@@ -142,7 +142,7 @@ struct msm_kms_funcs {
|
||||
struct msm_kms {
|
||||
const struct msm_kms_funcs *funcs;
|
||||
|
||||
/* irq number to be passed on to drm_irq_install */
|
||||
/* irq number to be passed on to msm_irq_install */
|
||||
int irq;
|
||||
|
||||
/* mapper-id used to request GEM buffer mapped for scanout: */
|
||||
|
Reference in New Issue
Block a user