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

parent
d1d11731f1
commit
45160ca04c
111
msm/msm_drv.c
111
msm/msm_drv.c
@@ -41,7 +41,6 @@
|
|||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
#include <uapi/linux/sched/types.h>
|
#include <uapi/linux/sched/types.h>
|
||||||
#include <drm/drm_of.h>
|
#include <drm/drm_of.h>
|
||||||
#include <drm/drm_irq.h>
|
|
||||||
#include <drm/drm_ioctl.h>
|
#include <drm/drm_ioctl.h>
|
||||||
#include <drm/drm_vblank.h>
|
#include <drm/drm_vblank.h>
|
||||||
#include <drm/drm_drv.h>
|
#include <drm/drm_drv.h>
|
||||||
@@ -343,6 +342,71 @@ u32 msm_readl(const void __iomem *addr)
|
|||||||
return val;
|
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 msm_get_src_bpc(int chroma_format,
|
||||||
int bpc)
|
int bpc)
|
||||||
{
|
{
|
||||||
@@ -410,7 +474,7 @@ static int msm_drm_uninit(struct device *dev)
|
|||||||
msm_fbdev_free(ddev);
|
msm_fbdev_free(ddev);
|
||||||
#endif
|
#endif
|
||||||
drm_atomic_helper_shutdown(ddev);
|
drm_atomic_helper_shutdown(ddev);
|
||||||
drm_irq_uninstall(ddev);
|
msm_irq_uninstall(ddev);
|
||||||
|
|
||||||
if (kms && kms->funcs)
|
if (kms && kms->funcs)
|
||||||
kms->funcs->destroy(kms);
|
kms->funcs->destroy(kms);
|
||||||
@@ -859,7 +923,7 @@ static int msm_drm_component_init(struct device *dev)
|
|||||||
|
|
||||||
if (kms) {
|
if (kms) {
|
||||||
pm_runtime_get_sync(dev);
|
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);
|
pm_runtime_put_sync(dev);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(dev, "failed to install IRQ handler\n");
|
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);
|
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:
|
* DRM ioctls:
|
||||||
*/
|
*/
|
||||||
@@ -1708,10 +1735,6 @@ static struct drm_driver msm_driver = {
|
|||||||
.open = msm_open,
|
.open = msm_open,
|
||||||
.postclose = msm_postclose,
|
.postclose = msm_postclose,
|
||||||
.lastclose = msm_lastclose,
|
.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_create = msm_gem_dumb_create,
|
||||||
.dumb_map_offset = msm_gem_dumb_map_offset,
|
.dumb_map_offset = msm_gem_dumb_map_offset,
|
||||||
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|
.prime_handle_to_fd = drm_gem_prime_handle_to_fd,
|
||||||
|
@@ -142,7 +142,7 @@ struct msm_kms_funcs {
|
|||||||
struct msm_kms {
|
struct msm_kms {
|
||||||
const struct msm_kms_funcs *funcs;
|
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;
|
int irq;
|
||||||
|
|
||||||
/* mapper-id used to request GEM buffer mapped for scanout: */
|
/* mapper-id used to request GEM buffer mapped for scanout: */
|
||||||
|
Reference in New Issue
Block a user