Commit ee255863 authored by Shawn Guo's avatar Shawn Guo

drm: shmobile: use vblank hooks in struct drm_crtc_funcs

The vblank hooks in struct drm_driver are deprecated and only meant for
legacy drivers.  For modern drivers with DRIVER_MODESET flag, the hooks
in struct drm_crtc_funcs should be used instead.

As the result, shmob_drm_crtc_enable_vblank() becomes a static function,
although it gets moved around a bit to save forward declaration.
Signed-off-by: default avatarShawn Guo <shawn.guo@linaro.org>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1486458995-31018-19-git-send-email-shawnguo@kernel.org
parent c3605dfc
...@@ -476,10 +476,45 @@ static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, ...@@ -476,10 +476,45 @@ static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc,
return 0; return 0;
} }
static void shmob_drm_crtc_enable_vblank(struct shmob_drm_device *sdev,
bool enable)
{
unsigned long flags;
u32 ldintr;
/* Be careful not to acknowledge any pending interrupt. */
spin_lock_irqsave(&sdev->irq_lock, flags);
ldintr = lcdc_read(sdev, LDINTR) | LDINTR_STATUS_MASK;
if (enable)
ldintr |= LDINTR_VEE;
else
ldintr &= ~LDINTR_VEE;
lcdc_write(sdev, LDINTR, ldintr);
spin_unlock_irqrestore(&sdev->irq_lock, flags);
}
static int shmob_drm_enable_vblank(struct drm_crtc *crtc)
{
struct shmob_drm_device *sdev = crtc->dev->dev_private;
shmob_drm_crtc_enable_vblank(sdev, true);
return 0;
}
static void shmob_drm_disable_vblank(struct drm_crtc *crtc)
{
struct shmob_drm_device *sdev = crtc->dev->dev_private;
shmob_drm_crtc_enable_vblank(sdev, false);
}
static const struct drm_crtc_funcs crtc_funcs = { static const struct drm_crtc_funcs crtc_funcs = {
.destroy = drm_crtc_cleanup, .destroy = drm_crtc_cleanup,
.set_config = drm_crtc_helper_set_config, .set_config = drm_crtc_helper_set_config,
.page_flip = shmob_drm_crtc_page_flip, .page_flip = shmob_drm_crtc_page_flip,
.enable_vblank = shmob_drm_enable_vblank,
.disable_vblank = shmob_drm_disable_vblank,
}; };
int shmob_drm_crtc_create(struct shmob_drm_device *sdev) int shmob_drm_crtc_create(struct shmob_drm_device *sdev)
...@@ -594,22 +629,6 @@ int shmob_drm_encoder_create(struct shmob_drm_device *sdev) ...@@ -594,22 +629,6 @@ int shmob_drm_encoder_create(struct shmob_drm_device *sdev)
return 0; return 0;
} }
void shmob_drm_crtc_enable_vblank(struct shmob_drm_device *sdev, bool enable)
{
unsigned long flags;
u32 ldintr;
/* Be careful not to acknowledge any pending interrupt. */
spin_lock_irqsave(&sdev->irq_lock, flags);
ldintr = lcdc_read(sdev, LDINTR) | LDINTR_STATUS_MASK;
if (enable)
ldintr |= LDINTR_VEE;
else
ldintr &= ~LDINTR_VEE;
lcdc_write(sdev, LDINTR, ldintr);
spin_unlock_irqrestore(&sdev->irq_lock, flags);
}
/* ----------------------------------------------------------------------------- /* -----------------------------------------------------------------------------
* Connector * Connector
*/ */
......
...@@ -47,7 +47,6 @@ struct shmob_drm_connector { ...@@ -47,7 +47,6 @@ struct shmob_drm_connector {
}; };
int shmob_drm_crtc_create(struct shmob_drm_device *sdev); int shmob_drm_crtc_create(struct shmob_drm_device *sdev);
void shmob_drm_crtc_enable_vblank(struct shmob_drm_device *sdev, bool enable);
void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc); void shmob_drm_crtc_finish_page_flip(struct shmob_drm_crtc *scrtc);
void shmob_drm_crtc_suspend(struct shmob_drm_crtc *scrtc); void shmob_drm_crtc_suspend(struct shmob_drm_crtc *scrtc);
void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc); void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc);
......
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include <drm/drm_crtc_helper.h> #include <drm/drm_crtc_helper.h>
#include <drm/drm_gem_cma_helper.h> #include <drm/drm_gem_cma_helper.h>
#include "shmob_drm_crtc.h"
#include "shmob_drm_drv.h" #include "shmob_drm_drv.h"
#include "shmob_drm_kms.h" #include "shmob_drm_kms.h"
#include "shmob_drm_plane.h" #include "shmob_drm_plane.h"
...@@ -222,22 +221,6 @@ static irqreturn_t shmob_drm_irq(int irq, void *arg) ...@@ -222,22 +221,6 @@ static irqreturn_t shmob_drm_irq(int irq, void *arg)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int shmob_drm_enable_vblank(struct drm_device *dev, unsigned int pipe)
{
struct shmob_drm_device *sdev = dev->dev_private;
shmob_drm_crtc_enable_vblank(sdev, true);
return 0;
}
static void shmob_drm_disable_vblank(struct drm_device *dev, unsigned int pipe)
{
struct shmob_drm_device *sdev = dev->dev_private;
shmob_drm_crtc_enable_vblank(sdev, false);
}
static const struct file_operations shmob_drm_fops = { static const struct file_operations shmob_drm_fops = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
.open = drm_open, .open = drm_open,
...@@ -256,8 +239,6 @@ static struct drm_driver shmob_drm_driver = { ...@@ -256,8 +239,6 @@ static struct drm_driver shmob_drm_driver = {
.load = shmob_drm_load, .load = shmob_drm_load,
.unload = shmob_drm_unload, .unload = shmob_drm_unload,
.irq_handler = shmob_drm_irq, .irq_handler = shmob_drm_irq,
.enable_vblank = shmob_drm_enable_vblank,
.disable_vblank = shmob_drm_disable_vblank,
.gem_free_object_unlocked = drm_gem_cma_free_object, .gem_free_object_unlocked = drm_gem_cma_free_object,
.gem_vm_ops = &drm_gem_cma_vm_ops, .gem_vm_ops = &drm_gem_cma_vm_ops,
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment