drm/omap: 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. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
82d753567f
commit
0396162ab9
|
@ -501,6 +501,8 @@ static const struct drm_crtc_funcs omap_crtc_funcs = {
|
|||
.atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
|
||||
.atomic_set_property = omap_crtc_atomic_set_property,
|
||||
.atomic_get_property = omap_crtc_atomic_get_property,
|
||||
.enable_vblank = omap_irq_enable_vblank,
|
||||
.disable_vblank = omap_irq_disable_vblank,
|
||||
};
|
||||
|
||||
static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = {
|
||||
|
|
|
@ -714,8 +714,6 @@ static struct drm_driver omap_drm_driver = {
|
|||
DRIVER_ATOMIC,
|
||||
.open = dev_open,
|
||||
.lastclose = dev_lastclose,
|
||||
.enable_vblank = omap_irq_enable_vblank,
|
||||
.disable_vblank = omap_irq_disable_vblank,
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
.debugfs_init = omap_debugfs_init,
|
||||
#endif
|
||||
|
|
|
@ -112,8 +112,8 @@ void omap_gem_describe_objects(struct list_head *list, struct seq_file *m);
|
|||
int omap_gem_resume(struct device *dev);
|
||||
#endif
|
||||
|
||||
int omap_irq_enable_vblank(struct drm_device *dev, unsigned int pipe);
|
||||
void omap_irq_disable_vblank(struct drm_device *dev, unsigned int pipe);
|
||||
int omap_irq_enable_vblank(struct drm_crtc *crtc);
|
||||
void omap_irq_disable_vblank(struct drm_crtc *crtc);
|
||||
void omap_drm_irq_uninstall(struct drm_device *dev);
|
||||
int omap_drm_irq_install(struct drm_device *dev);
|
||||
|
||||
|
|
|
@ -101,16 +101,17 @@ int omap_irq_wait(struct drm_device *dev, struct omap_irq_wait *wait,
|
|||
* Zero on success, appropriate errno if the given @crtc's vblank
|
||||
* interrupt cannot be enabled.
|
||||
*/
|
||||
int omap_irq_enable_vblank(struct drm_device *dev, unsigned int pipe)
|
||||
int omap_irq_enable_vblank(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct omap_drm_private *priv = dev->dev_private;
|
||||
struct drm_crtc *crtc = priv->crtcs[pipe];
|
||||
unsigned long flags;
|
||||
enum omap_channel channel = omap_crtc_channel(crtc);
|
||||
|
||||
DBG("dev=%p, crtc=%u", dev, pipe);
|
||||
DBG("dev=%p, crtc=%u", dev, channel);
|
||||
|
||||
spin_lock_irqsave(&priv->wait_lock, flags);
|
||||
priv->irq_mask |= dispc_mgr_get_vsync_irq(omap_crtc_channel(crtc));
|
||||
priv->irq_mask |= dispc_mgr_get_vsync_irq(channel);
|
||||
omap_irq_update(dev);
|
||||
spin_unlock_irqrestore(&priv->wait_lock, flags);
|
||||
|
||||
|
@ -126,16 +127,17 @@ int omap_irq_enable_vblank(struct drm_device *dev, unsigned int pipe)
|
|||
* a hardware vblank counter, this routine should be a no-op, since
|
||||
* interrupts will have to stay on to keep the count accurate.
|
||||
*/
|
||||
void omap_irq_disable_vblank(struct drm_device *dev, unsigned int pipe)
|
||||
void omap_irq_disable_vblank(struct drm_crtc *crtc)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct omap_drm_private *priv = dev->dev_private;
|
||||
struct drm_crtc *crtc = priv->crtcs[pipe];
|
||||
unsigned long flags;
|
||||
enum omap_channel channel = omap_crtc_channel(crtc);
|
||||
|
||||
DBG("dev=%p, crtc=%u", dev, pipe);
|
||||
DBG("dev=%p, crtc=%u", dev, channel);
|
||||
|
||||
spin_lock_irqsave(&priv->wait_lock, flags);
|
||||
priv->irq_mask &= ~dispc_mgr_get_vsync_irq(omap_crtc_channel(crtc));
|
||||
priv->irq_mask &= ~dispc_mgr_get_vsync_irq(channel);
|
||||
omap_irq_update(dev);
|
||||
spin_unlock_irqrestore(&priv->wait_lock, flags);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue