|
@@ -321,8 +321,10 @@ static void pl111_display_update(struct drm_simple_display_pipe *pipe,
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
-int pl111_enable_vblank(struct drm_device *drm, unsigned int crtc)
|
|
|
|
|
|
+static int pl111_display_enable_vblank(struct drm_simple_display_pipe *pipe)
|
|
{
|
|
{
|
|
|
|
+ struct drm_crtc *crtc = &pipe->crtc;
|
|
|
|
+ struct drm_device *drm = crtc->dev;
|
|
struct pl111_drm_dev_private *priv = drm->dev_private;
|
|
struct pl111_drm_dev_private *priv = drm->dev_private;
|
|
|
|
|
|
writel(CLCD_IRQ_NEXTBASE_UPDATE, priv->regs + priv->ienb);
|
|
writel(CLCD_IRQ_NEXTBASE_UPDATE, priv->regs + priv->ienb);
|
|
@@ -330,8 +332,10 @@ int pl111_enable_vblank(struct drm_device *drm, unsigned int crtc)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-void pl111_disable_vblank(struct drm_device *drm, unsigned int crtc)
|
|
|
|
|
|
+static void pl111_display_disable_vblank(struct drm_simple_display_pipe *pipe)
|
|
{
|
|
{
|
|
|
|
+ struct drm_crtc *crtc = &pipe->crtc;
|
|
|
|
+ struct drm_device *drm = crtc->dev;
|
|
struct pl111_drm_dev_private *priv = drm->dev_private;
|
|
struct pl111_drm_dev_private *priv = drm->dev_private;
|
|
|
|
|
|
writel(0, priv->regs + priv->ienb);
|
|
writel(0, priv->regs + priv->ienb);
|
|
@@ -343,7 +347,7 @@ static int pl111_display_prepare_fb(struct drm_simple_display_pipe *pipe,
|
|
return drm_gem_fb_prepare_fb(&pipe->plane, plane_state);
|
|
return drm_gem_fb_prepare_fb(&pipe->plane, plane_state);
|
|
}
|
|
}
|
|
|
|
|
|
-static const struct drm_simple_display_pipe_funcs pl111_display_funcs = {
|
|
|
|
|
|
+static struct drm_simple_display_pipe_funcs pl111_display_funcs = {
|
|
.check = pl111_display_check,
|
|
.check = pl111_display_check,
|
|
.enable = pl111_display_enable,
|
|
.enable = pl111_display_enable,
|
|
.disable = pl111_display_disable,
|
|
.disable = pl111_display_disable,
|
|
@@ -502,6 +506,11 @@ int pl111_display_init(struct drm_device *drm)
|
|
if (ret)
|
|
if (ret)
|
|
return ret;
|
|
return ret;
|
|
|
|
|
|
|
|
+ if (!priv->variant->broken_vblank) {
|
|
|
|
+ pl111_display_funcs.enable_vblank = pl111_display_enable_vblank;
|
|
|
|
+ pl111_display_funcs.disable_vblank = pl111_display_disable_vblank;
|
|
|
|
+ }
|
|
|
|
+
|
|
ret = drm_simple_display_pipe_init(drm, &priv->pipe,
|
|
ret = drm_simple_display_pipe_init(drm, &priv->pipe,
|
|
&pl111_display_funcs,
|
|
&pl111_display_funcs,
|
|
priv->variant->formats,
|
|
priv->variant->formats,
|