Message ID | 1486458995-31018-19-git-send-email-shawnguo@kernel.org |
---|---|
State | New |
Headers | show |
Series | Add vblank hooks to struct drm_crtc_funcs | expand |
Hi Shawn, Thank you for the patch. On Tuesday 07 Feb 2017 17:16:30 Shawn Guo wrote: > From: Shawn Guo <shawn.guo@linaro.org> > > 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: Shawn Guo <shawn.guo@linaro.org> > Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> > --- > drivers/gpu/drm/shmobile/shmob_drm_crtc.c | 51 +++++++++++++++++++--------- > drivers/gpu/drm/shmobile/shmob_drm_crtc.h | 1 - > drivers/gpu/drm/shmobile/shmob_drm_drv.c | 19 ------------ > 3 files changed, 35 insertions(+), 36 deletions(-) > > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c index > 445476551695..8244890e6d53 100644 > --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c > @@ -476,10 +476,45 @@ static int shmob_drm_crtc_page_flip(struct drm_crtc > *crtc, 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 = { > .destroy = drm_crtc_cleanup, > .set_config = drm_crtc_helper_set_config, > .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) > @@ -594,22 +629,6 @@ int shmob_drm_encoder_create(struct shmob_drm_device > *sdev) 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 > */ > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h > b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h index > 818b31549ddc..f152973df11c 100644 > --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h > +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h > @@ -47,7 +47,6 @@ struct shmob_drm_connector { > }; > > 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_suspend(struct shmob_drm_crtc *scrtc); > void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc); > diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c > b/drivers/gpu/drm/shmobile/shmob_drm_drv.c index d6b0545d252d..34fefa0ba0f0 > 100644 > --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c > +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c > @@ -23,7 +23,6 @@ > #include <drm/drm_crtc_helper.h> > #include <drm/drm_gem_cma_helper.h> > > -#include "shmob_drm_crtc.h" > #include "shmob_drm_drv.h" > #include "shmob_drm_kms.h" > #include "shmob_drm_plane.h" > @@ -222,22 +221,6 @@ static irqreturn_t shmob_drm_irq(int irq, void *arg) > 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 = { > .owner = THIS_MODULE, > .open = drm_open, > @@ -256,8 +239,6 @@ static void shmob_drm_disable_vblank(struct drm_device > *dev, unsigned int pipe) .load = shmob_drm_load, > .unload = shmob_drm_unload, > .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_vm_ops = &drm_gem_cma_vm_ops, > .prime_handle_to_fd = drm_gem_prime_handle_to_fd,
diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c index 445476551695..8244890e6d53 100644 --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.c +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.c @@ -476,10 +476,45 @@ static int shmob_drm_crtc_page_flip(struct drm_crtc *crtc, 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 = { .destroy = drm_crtc_cleanup, .set_config = drm_crtc_helper_set_config, .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) @@ -594,22 +629,6 @@ int shmob_drm_encoder_create(struct shmob_drm_device *sdev) 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 */ diff --git a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h index 818b31549ddc..f152973df11c 100644 --- a/drivers/gpu/drm/shmobile/shmob_drm_crtc.h +++ b/drivers/gpu/drm/shmobile/shmob_drm_crtc.h @@ -47,7 +47,6 @@ struct shmob_drm_connector { }; 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_suspend(struct shmob_drm_crtc *scrtc); void shmob_drm_crtc_resume(struct shmob_drm_crtc *scrtc); diff --git a/drivers/gpu/drm/shmobile/shmob_drm_drv.c b/drivers/gpu/drm/shmobile/shmob_drm_drv.c index d6b0545d252d..34fefa0ba0f0 100644 --- a/drivers/gpu/drm/shmobile/shmob_drm_drv.c +++ b/drivers/gpu/drm/shmobile/shmob_drm_drv.c @@ -23,7 +23,6 @@ #include <drm/drm_crtc_helper.h> #include <drm/drm_gem_cma_helper.h> -#include "shmob_drm_crtc.h" #include "shmob_drm_drv.h" #include "shmob_drm_kms.h" #include "shmob_drm_plane.h" @@ -222,22 +221,6 @@ static irqreturn_t shmob_drm_irq(int irq, void *arg) 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 = { .owner = THIS_MODULE, .open = drm_open, @@ -256,8 +239,6 @@ static void shmob_drm_disable_vblank(struct drm_device *dev, unsigned int pipe) .load = shmob_drm_load, .unload = shmob_drm_unload, .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_vm_ops = &drm_gem_cma_vm_ops, .prime_handle_to_fd = drm_gem_prime_handle_to_fd,