[PATCH 7/8] drm: Add old state pointer to CRTC .enable() helper function
Liviu Dudau
liviu.dudau at arm.com
Wed Jun 28 13:41:49 UTC 2017
On Wed, Jun 28, 2017 at 12:16:20AM +0300, Laurent Pinchart wrote:
> The old state is useful for drivers that need to perform operations at
> enable time that depend on the transition between the old and new
> states.
>
> While at it, rename the operation to .atomic_enable() to be consistent
> with .atomic_disable(), as the .enable() operation is used by atomic
> helpers only.
>
> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas at ideasonboard.com>
> ---
> drivers/gpu/drm/arc/arcpgu_crtc.c | 5 ++--
> drivers/gpu/drm/arm/hdlcd_crtc.c | 5 ++--
> drivers/gpu/drm/arm/malidp_crtc.c | 5 ++--
For the hdlcd and mali-dp changes:
Acked-by: Liviu Dudau <Liviu.Dudau at arm.com>
I'll assume you are going to push the changes through drm-misc rather
than me cherry picking the changes from the patch.
Thanks!
Liviu
> drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c | 5 ++--
> drivers/gpu/drm/drm_atomic_helper.c | 7 +++--
> drivers/gpu/drm/drm_simple_kms_helper.c | 5 ++--
> drivers/gpu/drm/exynos/exynos_drm_crtc.c | 5 ++--
> drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c | 5 ++--
> drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c | 5 ++--
> drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c | 5 ++--
> drivers/gpu/drm/imx/ipuv3-crtc.c | 5 ++--
> drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 5 ++--
> drivers/gpu/drm/meson/meson_crtc.c | 5 ++--
> drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 5 ++--
> drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 5 ++--
> drivers/gpu/drm/omapdrm/omap_crtc.c | 5 ++--
> drivers/gpu/drm/qxl/qxl_display.c | 5 ++--
> drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 5 ++--
> drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 5 ++--
> drivers/gpu/drm/sti/sti_crtc.c | 5 ++--
> drivers/gpu/drm/stm/ltdc.c | 5 ++--
> drivers/gpu/drm/sun4i/sun4i_crtc.c | 5 ++--
> drivers/gpu/drm/tegra/dc.c | 5 ++--
> drivers/gpu/drm/tilcdc/tilcdc_crtc.c | 8 +++++-
> drivers/gpu/drm/vc4/vc4_crtc.c | 5 ++--
> drivers/gpu/drm/virtio/virtgpu_display.c | 5 ++--
> drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c | 7 +++--
> drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c | 7 +++--
> drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c | 5 ++--
> drivers/gpu/drm/zte/zx_vou.c | 5 ++--
> include/drm/drm_modeset_helper_vtables.h | 38 +++++++++++++------------
> 31 files changed, 117 insertions(+), 80 deletions(-)
>
> diff --git a/drivers/gpu/drm/arc/arcpgu_crtc.c b/drivers/gpu/drm/arc/arcpgu_crtc.c
> index 1f306781c9d5..c9bc6a90ac83 100644
> --- a/drivers/gpu/drm/arc/arcpgu_crtc.c
> +++ b/drivers/gpu/drm/arc/arcpgu_crtc.c
> @@ -119,7 +119,8 @@ static void arc_pgu_crtc_mode_set_nofb(struct drm_crtc *crtc)
> clk_set_rate(arcpgu->clk, m->crtc_clock * 1000);
> }
>
> -static void arc_pgu_crtc_enable(struct drm_crtc *crtc)
> +static void arc_pgu_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct arcpgu_drm_private *arcpgu = crtc_to_arcpgu_priv(crtc);
>
> @@ -161,9 +162,9 @@ static const struct drm_crtc_helper_funcs arc_pgu_crtc_helper_funcs = {
> .mode_set = drm_helper_crtc_mode_set,
> .mode_set_base = drm_helper_crtc_mode_set_base,
> .mode_set_nofb = arc_pgu_crtc_mode_set_nofb,
> - .enable = arc_pgu_crtc_enable,
> .disable = arc_pgu_crtc_disable,
> .atomic_begin = arc_pgu_crtc_atomic_begin,
> + .atomic_enable = arc_pgu_crtc_atomic_enable,
> };
>
> static void arc_pgu_plane_atomic_update(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index d67b6f15e8b8..2b7f4f05d91f 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -165,7 +165,8 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc *crtc)
> clk_set_rate(hdlcd->clk, m->crtc_clock * 1000);
> }
>
> -static void hdlcd_crtc_enable(struct drm_crtc *crtc)
> +static void hdlcd_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct hdlcd_drm_private *hdlcd = crtc_to_hdlcd_priv(crtc);
>
> @@ -218,10 +219,10 @@ static void hdlcd_crtc_atomic_begin(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs hdlcd_crtc_helper_funcs = {
> - .enable = hdlcd_crtc_enable,
> .disable = hdlcd_crtc_disable,
> .atomic_check = hdlcd_crtc_atomic_check,
> .atomic_begin = hdlcd_crtc_atomic_begin,
> + .atomic_enable = hdlcd_crtc_atomic_enable,
> };
>
> static int hdlcd_plane_atomic_check(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/arm/malidp_crtc.c b/drivers/gpu/drm/arm/malidp_crtc.c
> index 4bb38a21efec..8e5b1c0181ab 100644
> --- a/drivers/gpu/drm/arm/malidp_crtc.c
> +++ b/drivers/gpu/drm/arm/malidp_crtc.c
> @@ -46,7 +46,8 @@ static enum drm_mode_status malidp_crtc_mode_valid(struct drm_crtc *crtc,
> return MODE_OK;
> }
>
> -static void malidp_crtc_enable(struct drm_crtc *crtc)
> +static void malidp_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct malidp_drm *malidp = crtc_to_malidp_device(crtc);
> struct malidp_hw_device *hwdev = malidp->dev;
> @@ -408,9 +409,9 @@ static int malidp_crtc_atomic_check(struct drm_crtc *crtc,
>
> static const struct drm_crtc_helper_funcs malidp_crtc_helper_funcs = {
> .mode_valid = malidp_crtc_mode_valid,
> - .enable = malidp_crtc_enable,
> .disable = malidp_crtc_disable,
> .atomic_check = malidp_crtc_atomic_check,
> + .atomic_enable = malidp_crtc_atomic_enable,
> };
>
> static struct drm_crtc_state *malidp_crtc_duplicate_state(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> index f6b8c5908a20..e54e503180f4 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> @@ -183,7 +183,8 @@ static void atmel_hlcdc_crtc_disable(struct drm_crtc *c)
> pm_runtime_put_sync(dev->dev);
> }
>
> -static void atmel_hlcdc_crtc_enable(struct drm_crtc *c)
> +static void atmel_hlcdc_crtc_atomic_enable(struct drm_crtc *c,
> + struct drm_crtc_state *old_state)
> {
> struct drm_device *dev = c->dev;
> struct atmel_hlcdc_crtc *crtc = drm_crtc_to_atmel_hlcdc_crtc(c);
> @@ -320,10 +321,10 @@ static const struct drm_crtc_helper_funcs lcdc_crtc_helper_funcs = {
> .mode_set_nofb = atmel_hlcdc_crtc_mode_set_nofb,
> .mode_set_base = drm_helper_crtc_mode_set_base,
> .disable = atmel_hlcdc_crtc_disable,
> - .enable = atmel_hlcdc_crtc_enable,
> .atomic_check = atmel_hlcdc_crtc_atomic_check,
> .atomic_begin = atmel_hlcdc_crtc_atomic_begin,
> .atomic_flush = atmel_hlcdc_crtc_atomic_flush,
> + .atomic_enable = atmel_hlcdc_crtc_atomic_enable,
> };
>
> static void atmel_hlcdc_crtc_destroy(struct drm_crtc *c)
> diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c
> index 2f269e4267da..23e4661a62fe 100644
> --- a/drivers/gpu/drm/drm_atomic_helper.c
> +++ b/drivers/gpu/drm/drm_atomic_helper.c
> @@ -1069,12 +1069,13 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
> struct drm_atomic_state *old_state)
> {
> struct drm_crtc *crtc;
> + struct drm_crtc_state *old_crtc_state;
> struct drm_crtc_state *new_crtc_state;
> struct drm_connector *connector;
> struct drm_connector_state *new_conn_state;
> int i;
>
> - for_each_new_crtc_in_state(old_state, crtc, new_crtc_state, i) {
> + for_each_oldnew_crtc_in_state(old_state, crtc, old_crtc_state, new_crtc_state, i) {
> const struct drm_crtc_helper_funcs *funcs;
>
> /* Need to filter out CRTCs where only planes change. */
> @@ -1090,8 +1091,8 @@ void drm_atomic_helper_commit_modeset_enables(struct drm_device *dev,
> DRM_DEBUG_ATOMIC("enabling [CRTC:%d:%s]\n",
> crtc->base.id, crtc->name);
>
> - if (funcs->enable)
> - funcs->enable(crtc);
> + if (funcs->atomic_enable)
> + funcs->atomic_enable(crtc, old_crtc_state);
> else
> funcs->commit(crtc);
> }
> diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c
> index e084f9f8ca66..58c27ab1756f 100644
> --- a/drivers/gpu/drm/drm_simple_kms_helper.c
> +++ b/drivers/gpu/drm/drm_simple_kms_helper.c
> @@ -40,7 +40,8 @@ static int drm_simple_kms_crtc_check(struct drm_crtc *crtc,
> return drm_atomic_add_affected_planes(state->state, crtc);
> }
>
> -static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc)
> +static void drm_simple_kms_crtc_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct drm_simple_display_pipe *pipe;
>
> @@ -64,8 +65,8 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc)
>
> static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = {
> .atomic_check = drm_simple_kms_crtc_check,
> + .atomic_enable = drm_simple_kms_crtc_enable,
> .disable = drm_simple_kms_crtc_disable,
> - .enable = drm_simple_kms_crtc_enable,
> };
>
> static const struct drm_crtc_funcs drm_simple_kms_crtc_funcs = {
> diff --git a/drivers/gpu/drm/exynos/exynos_drm_crtc.c b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> index d72777f6411a..b7e2fadb6442 100644
> --- a/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> +++ b/drivers/gpu/drm/exynos/exynos_drm_crtc.c
> @@ -21,7 +21,8 @@
> #include "exynos_drm_drv.h"
> #include "exynos_drm_plane.h"
>
> -static void exynos_drm_crtc_enable(struct drm_crtc *crtc)
> +static void exynos_drm_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct exynos_drm_crtc *exynos_crtc = to_exynos_crtc(crtc);
>
> @@ -82,11 +83,11 @@ static void exynos_crtc_atomic_flush(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs exynos_crtc_helper_funcs = {
> - .enable = exynos_drm_crtc_enable,
> .disable = exynos_drm_crtc_disable,
> .atomic_check = exynos_crtc_atomic_check,
> .atomic_begin = exynos_crtc_atomic_begin,
> .atomic_flush = exynos_crtc_atomic_flush,
> + .atomic_enable = exynos_drm_crtc_atomic_enable,
> };
>
> void exynos_crtc_handle_event(struct exynos_drm_crtc *exynos_crtc)
> diff --git a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> index cc4e944a1d3c..0e3752437e44 100644
> --- a/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> +++ b/drivers/gpu/drm/fsl-dcu/fsl_dcu_drm_crtc.c
> @@ -63,7 +63,8 @@ static void fsl_dcu_drm_crtc_atomic_disable(struct drm_crtc *crtc,
> clk_disable_unprepare(fsl_dev->pix_clk);
> }
>
> -static void fsl_dcu_drm_crtc_enable(struct drm_crtc *crtc)
> +static void fsl_dcu_drm_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct drm_device *dev = crtc->dev;
> struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
> @@ -133,7 +134,7 @@ static void fsl_dcu_drm_crtc_mode_set_nofb(struct drm_crtc *crtc)
> static const struct drm_crtc_helper_funcs fsl_dcu_drm_crtc_helper_funcs = {
> .atomic_disable = fsl_dcu_drm_crtc_atomic_disable,
> .atomic_flush = fsl_dcu_drm_crtc_atomic_flush,
> - .enable = fsl_dcu_drm_crtc_enable,
> + .atomic_enable = fsl_dcu_drm_crtc_atomic_enable,
> .mode_set_nofb = fsl_dcu_drm_crtc_mode_set_nofb,
> };
>
> diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> index 59542bddc980..49ef47c0c81a 100644
> --- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> +++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_drm_de.c
> @@ -192,7 +192,8 @@ static struct drm_plane *hibmc_plane_init(struct hibmc_drm_private *priv)
> return plane;
> }
>
> -static void hibmc_crtc_enable(struct drm_crtc *crtc)
> +static void hibmc_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> unsigned int reg;
> struct hibmc_drm_private *priv = crtc->dev->dev_private;
> @@ -453,11 +454,11 @@ static const struct drm_crtc_funcs hibmc_crtc_funcs = {
> };
>
> static const struct drm_crtc_helper_funcs hibmc_crtc_helper_funcs = {
> - .enable = hibmc_crtc_enable,
> .disable = hibmc_crtc_disable,
> .mode_set_nofb = hibmc_crtc_mode_set_nofb,
> .atomic_begin = hibmc_crtc_atomic_begin,
> .atomic_flush = hibmc_crtc_atomic_flush,
> + .atomic_enable = hibmc_crtc_atomic_enable,
> };
>
> int hibmc_de_init(struct hibmc_drm_private *priv)
> diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> index c96c228a9898..8e00818b24fc 100644
> --- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> +++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_ade.c
> @@ -467,7 +467,8 @@ static void ade_dump_regs(void __iomem *base)
> static void ade_dump_regs(void __iomem *base) { }
> #endif
>
> -static void ade_crtc_enable(struct drm_crtc *crtc)
> +static void ade_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct ade_crtc *acrtc = to_ade_crtc(crtc);
> struct ade_hw_ctx *ctx = acrtc->ctx;
> @@ -553,11 +554,11 @@ static void ade_crtc_atomic_flush(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs ade_crtc_helper_funcs = {
> - .enable = ade_crtc_enable,
> .disable = ade_crtc_disable,
> .mode_set_nofb = ade_crtc_mode_set_nofb,
> .atomic_begin = ade_crtc_atomic_begin,
> .atomic_flush = ade_crtc_atomic_flush,
> + .atomic_enable = ade_crtc_atomic_enable,
> };
>
> static const struct drm_crtc_funcs ade_crtc_funcs = {
> diff --git a/drivers/gpu/drm/imx/ipuv3-crtc.c b/drivers/gpu/drm/imx/ipuv3-crtc.c
> index 5456c15d962c..53e0b24beda6 100644
> --- a/drivers/gpu/drm/imx/ipuv3-crtc.c
> +++ b/drivers/gpu/drm/imx/ipuv3-crtc.c
> @@ -50,7 +50,8 @@ static inline struct ipu_crtc *to_ipu_crtc(struct drm_crtc *crtc)
> return container_of(crtc, struct ipu_crtc, base);
> }
>
> -static void ipu_crtc_enable(struct drm_crtc *crtc)
> +static void ipu_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct ipu_crtc *ipu_crtc = to_ipu_crtc(crtc);
> struct ipu_soc *ipu = dev_get_drvdata(ipu_crtc->dev->parent);
> @@ -293,7 +294,7 @@ static const struct drm_crtc_helper_funcs ipu_helper_funcs = {
> .atomic_check = ipu_crtc_atomic_check,
> .atomic_begin = ipu_crtc_atomic_begin,
> .atomic_disable = ipu_crtc_atomic_disable,
> - .enable = ipu_crtc_enable,
> + .atomic_enable = ipu_crtc_atomic_enable,
> };
>
> static void ipu_put_resources(struct ipu_crtc *ipu_crtc)
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> index 6582e1f56d37..5971b0827d1b 100644
> --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c
> @@ -366,7 +366,8 @@ static void mtk_crtc_ddp_config(struct drm_crtc *crtc)
> }
> }
>
> -static void mtk_drm_crtc_enable(struct drm_crtc *crtc)
> +static void mtk_drm_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
> struct mtk_ddp_comp *ovl = mtk_crtc->ddp_comp[0];
> @@ -487,10 +488,10 @@ static const struct drm_crtc_funcs mtk_crtc_funcs = {
> static const struct drm_crtc_helper_funcs mtk_crtc_helper_funcs = {
> .mode_fixup = mtk_drm_crtc_mode_fixup,
> .mode_set_nofb = mtk_drm_crtc_mode_set_nofb,
> - .enable = mtk_drm_crtc_enable,
> .disable = mtk_drm_crtc_disable,
> .atomic_begin = mtk_drm_crtc_atomic_begin,
> .atomic_flush = mtk_drm_crtc_atomic_flush,
> + .atomic_enable = mtk_drm_crtc_atomic_enable,
> };
>
> static int mtk_drm_crtc_init(struct drm_device *drm,
> diff --git a/drivers/gpu/drm/meson/meson_crtc.c b/drivers/gpu/drm/meson/meson_crtc.c
> index c986eb03b9d9..6f148307b0e0 100644
> --- a/drivers/gpu/drm/meson/meson_crtc.c
> +++ b/drivers/gpu/drm/meson/meson_crtc.c
> @@ -79,7 +79,8 @@ static const struct drm_crtc_funcs meson_crtc_funcs = {
>
> };
>
> -static void meson_crtc_enable(struct drm_crtc *crtc)
> +static void meson_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct meson_crtc *meson_crtc = to_meson_crtc(crtc);
> struct drm_crtc_state *crtc_state = crtc->state;
> @@ -149,10 +150,10 @@ static void meson_crtc_atomic_flush(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs meson_crtc_helper_funcs = {
> - .enable = meson_crtc_enable,
> .disable = meson_crtc_disable,
> .atomic_begin = meson_crtc_atomic_begin,
> .atomic_flush = meson_crtc_atomic_flush,
> + .atomic_enable = meson_crtc_atomic_enable,
> };
>
> void meson_crtc_irq(struct meson_drm *priv)
> diff --git a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
> index 615e1def64d9..9c20133f3f8d 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c
> @@ -295,7 +295,8 @@ static void mdp4_crtc_disable(struct drm_crtc *crtc)
> mdp4_crtc->enabled = false;
> }
>
> -static void mdp4_crtc_enable(struct drm_crtc *crtc)
> +static void mdp4_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct mdp4_crtc *mdp4_crtc = to_mdp4_crtc(crtc);
> struct mdp4_kms *mdp4_kms = get_kms(crtc);
> @@ -493,10 +494,10 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = {
> static const struct drm_crtc_helper_funcs mdp4_crtc_helper_funcs = {
> .mode_set_nofb = mdp4_crtc_mode_set_nofb,
> .disable = mdp4_crtc_disable,
> - .enable = mdp4_crtc_enable,
> .atomic_check = mdp4_crtc_atomic_check,
> .atomic_begin = mdp4_crtc_atomic_begin,
> .atomic_flush = mdp4_crtc_atomic_flush,
> + .atomic_enable = mdp4_crtc_atomic_enable,
> };
>
> static void mdp4_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
> diff --git a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> index cb5415d6c04b..d39d9d24d169 100644
> --- a/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> +++ b/drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c
> @@ -429,7 +429,8 @@ static void mdp5_crtc_disable(struct drm_crtc *crtc)
> mdp5_crtc->enabled = false;
> }
>
> -static void mdp5_crtc_enable(struct drm_crtc *crtc)
> +static void mdp5_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct mdp5_crtc *mdp5_crtc = to_mdp5_crtc(crtc);
> struct mdp5_crtc_state *mdp5_cstate = to_mdp5_crtc_state(crtc->state);
> @@ -940,10 +941,10 @@ static const struct drm_crtc_funcs mdp5_crtc_no_lm_cursor_funcs = {
> static const struct drm_crtc_helper_funcs mdp5_crtc_helper_funcs = {
> .mode_set_nofb = mdp5_crtc_mode_set_nofb,
> .disable = mdp5_crtc_disable,
> - .enable = mdp5_crtc_enable,
> .atomic_check = mdp5_crtc_atomic_check,
> .atomic_begin = mdp5_crtc_atomic_begin,
> .atomic_flush = mdp5_crtc_atomic_flush,
> + .atomic_enable = mdp5_crtc_atomic_enable,
> };
>
> static void mdp5_crtc_vblank_irq(struct mdp_irq *irq, uint32_t irqstatus)
> diff --git a/drivers/gpu/drm/omapdrm/omap_crtc.c b/drivers/gpu/drm/omapdrm/omap_crtc.c
> index dd0ef40ca469..7a1b7a9cc270 100644
> --- a/drivers/gpu/drm/omapdrm/omap_crtc.c
> +++ b/drivers/gpu/drm/omapdrm/omap_crtc.c
> @@ -356,7 +356,8 @@ static void omap_crtc_arm_event(struct drm_crtc *crtc)
> }
> }
>
> -static void omap_crtc_enable(struct drm_crtc *crtc)
> +static void omap_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct omap_crtc *omap_crtc = to_omap_crtc(crtc);
> int ret;
> @@ -568,10 +569,10 @@ static const struct drm_crtc_funcs omap_crtc_funcs = {
> static const struct drm_crtc_helper_funcs omap_crtc_helper_funcs = {
> .mode_set_nofb = omap_crtc_mode_set_nofb,
> .disable = omap_crtc_disable,
> - .enable = omap_crtc_enable,
> .atomic_check = omap_crtc_atomic_check,
> .atomic_begin = omap_crtc_atomic_begin,
> .atomic_flush = omap_crtc_atomic_flush,
> + .atomic_enable = omap_crtc_atomic_enable,
> };
>
> /* -----------------------------------------------------------------------------
> diff --git a/drivers/gpu/drm/qxl/qxl_display.c b/drivers/gpu/drm/qxl/qxl_display.c
> index 7ede5f131a5c..ea95e7e7cc7f 100644
> --- a/drivers/gpu/drm/qxl/qxl_display.c
> +++ b/drivers/gpu/drm/qxl/qxl_display.c
> @@ -447,7 +447,8 @@ static void qxl_mode_set_nofb(struct drm_crtc *crtc)
>
> }
>
> -static void qxl_crtc_enable(struct drm_crtc *crtc)
> +static void qxl_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> DRM_DEBUG("\n");
> }
> @@ -466,8 +467,8 @@ static const struct drm_crtc_helper_funcs qxl_crtc_helper_funcs = {
> .disable = qxl_crtc_disable,
> .mode_fixup = qxl_crtc_mode_fixup,
> .mode_set_nofb = qxl_mode_set_nofb,
> - .enable = qxl_crtc_enable,
> .atomic_flush = qxl_crtc_atomic_flush,
> + .atomic_enable = qxl_crtc_atomic_enable,
> };
>
> static int qxl_primary_atomic_check(struct drm_plane *plane,
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> index 345eff72f581..6aa3fa8d06f9 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_crtc.c
> @@ -552,7 +552,8 @@ void rcar_du_crtc_resume(struct rcar_du_crtc *rcrtc)
> * CRTC Functions
> */
>
> -static void rcar_du_crtc_enable(struct drm_crtc *crtc)
> +static void rcar_du_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct rcar_du_crtc *rcrtc = to_rcar_crtc(crtc);
>
> @@ -610,9 +611,9 @@ static void rcar_du_crtc_atomic_flush(struct drm_crtc *crtc,
>
> static const struct drm_crtc_helper_funcs crtc_helper_funcs = {
> .disable = rcar_du_crtc_disable,
> - .enable = rcar_du_crtc_enable,
> .atomic_begin = rcar_du_crtc_atomic_begin,
> .atomic_flush = rcar_du_crtc_atomic_flush,
> + .atomic_enable = rcar_du_crtc_atomic_enable,
> };
>
> static int rcar_du_crtc_enable_vblank(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> index 5d450332c2fd..bb59f7410634 100644
> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop.c
> @@ -871,7 +871,8 @@ static bool vop_crtc_mode_fixup(struct drm_crtc *crtc,
> return true;
> }
>
> -static void vop_crtc_enable(struct drm_crtc *crtc)
> +static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct vop *vop = to_vop(crtc);
> const struct vop_data *vop_data = vop->data;
> @@ -1079,11 +1080,11 @@ static void vop_crtc_atomic_begin(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs vop_crtc_helper_funcs = {
> - .enable = vop_crtc_enable,
> .disable = vop_crtc_disable,
> .mode_fixup = vop_crtc_mode_fixup,
> .atomic_flush = vop_crtc_atomic_flush,
> .atomic_begin = vop_crtc_atomic_begin,
> + .atomic_enable = vop_crtc_atomic_enable,
> };
>
> static void vop_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/sti/sti_crtc.c b/drivers/gpu/drm/sti/sti_crtc.c
> index d45a4335df5d..bb864345fedf 100644
> --- a/drivers/gpu/drm/sti/sti_crtc.c
> +++ b/drivers/gpu/drm/sti/sti_crtc.c
> @@ -20,7 +20,8 @@
> #include "sti_vid.h"
> #include "sti_vtg.h"
>
> -static void sti_crtc_enable(struct drm_crtc *crtc)
> +static void sti_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct sti_mixer *mixer = to_sti_mixer(crtc);
>
> @@ -222,10 +223,10 @@ static void sti_crtc_atomic_flush(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs sti_crtc_helper_funcs = {
> - .enable = sti_crtc_enable,
> .disable = sti_crtc_disabling,
> .mode_set_nofb = sti_crtc_mode_set_nofb,
> .atomic_flush = sti_crtc_atomic_flush,
> + .atomic_enable = sti_crtc_atomic_enable,
> };
>
> static void sti_crtc_destroy(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 1b9483d4f2a4..337fce004d08 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -386,7 +386,8 @@ static void ltdc_crtc_load_lut(struct drm_crtc *crtc)
> ldev->clut[i]);
> }
>
> -static void ltdc_crtc_enable(struct drm_crtc *crtc)
> +static void ltdc_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct ltdc_device *ldev = crtc_to_ltdc(crtc);
>
> @@ -524,10 +525,10 @@ static void ltdc_crtc_atomic_flush(struct drm_crtc *crtc,
>
> static struct drm_crtc_helper_funcs ltdc_crtc_helper_funcs = {
> .load_lut = ltdc_crtc_load_lut,
> - .enable = ltdc_crtc_enable,
> .disable = ltdc_crtc_disable,
> .mode_set_nofb = ltdc_crtc_mode_set_nofb,
> .atomic_flush = ltdc_crtc_atomic_flush,
> + .atomic_enable = ltdc_crtc_atomic_enable,
> };
>
> int ltdc_crtc_enable_vblank(struct drm_device *ddev, unsigned int pipe)
> diff --git a/drivers/gpu/drm/sun4i/sun4i_crtc.c b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> index f8c70439d1e2..509e4d8014f3 100644
> --- a/drivers/gpu/drm/sun4i/sun4i_crtc.c
> +++ b/drivers/gpu/drm/sun4i/sun4i_crtc.c
> @@ -86,7 +86,8 @@ static void sun4i_crtc_disable(struct drm_crtc *crtc)
> }
> }
>
> -static void sun4i_crtc_enable(struct drm_crtc *crtc)
> +static void sun4i_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct sun4i_crtc *scrtc = drm_crtc_to_sun4i_crtc(crtc);
>
> @@ -98,8 +99,8 @@ static void sun4i_crtc_enable(struct drm_crtc *crtc)
> static const struct drm_crtc_helper_funcs sun4i_crtc_helper_funcs = {
> .atomic_begin = sun4i_crtc_atomic_begin,
> .atomic_flush = sun4i_crtc_atomic_flush,
> + .atomic_enable = sun4i_crtc_atomic_enable,
> .disable = sun4i_crtc_disable,
> - .enable = sun4i_crtc_enable,
> };
>
> static int sun4i_crtc_enable_vblank(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/tegra/dc.c b/drivers/gpu/drm/tegra/dc.c
> index c875f11786b9..2e0d167cb657 100644
> --- a/drivers/gpu/drm/tegra/dc.c
> +++ b/drivers/gpu/drm/tegra/dc.c
> @@ -1243,7 +1243,8 @@ static void tegra_crtc_disable(struct drm_crtc *crtc)
> pm_runtime_put_sync(dc->dev);
> }
>
> -static void tegra_crtc_enable(struct drm_crtc *crtc)
> +static void tegra_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct drm_display_mode *mode = &crtc->state->adjusted_mode;
> struct tegra_dc_state *state = to_dc_state(crtc->state);
> @@ -1352,10 +1353,10 @@ static void tegra_crtc_atomic_flush(struct drm_crtc *crtc,
>
> static const struct drm_crtc_helper_funcs tegra_crtc_helper_funcs = {
> .disable = tegra_crtc_disable,
> - .enable = tegra_crtc_enable,
> .atomic_check = tegra_crtc_atomic_check,
> .atomic_begin = tegra_crtc_atomic_begin,
> .atomic_flush = tegra_crtc_atomic_flush,
> + .atomic_enable = tegra_crtc_atomic_enable,
> };
>
> static irqreturn_t tegra_dc_irq(int irq, void *data)
> diff --git a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> index d524ed0d5146..6c5892763d27 100644
> --- a/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> +++ b/drivers/gpu/drm/tilcdc/tilcdc_crtc.c
> @@ -504,6 +504,12 @@ static void tilcdc_crtc_enable(struct drm_crtc *crtc)
> mutex_unlock(&tilcdc_crtc->enable_lock);
> }
>
> +static void tilcdc_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> +{
> + tilcdc_crtc_enable(crtc);
> +}
> +
> static void tilcdc_crtc_off(struct drm_crtc *crtc, bool shutdown)
> {
> struct tilcdc_crtc *tilcdc_crtc = to_tilcdc_crtc(crtc);
> @@ -729,9 +735,9 @@ static const struct drm_crtc_funcs tilcdc_crtc_funcs = {
>
> static const struct drm_crtc_helper_funcs tilcdc_crtc_helper_funcs = {
> .mode_fixup = tilcdc_crtc_mode_fixup,
> - .enable = tilcdc_crtc_enable,
> .disable = tilcdc_crtc_disable,
> .atomic_check = tilcdc_crtc_atomic_check,
> + .atomic_enable = tilcdc_crtc_atomic_enable,
> };
>
> int tilcdc_crtc_max_width(struct drm_crtc *crtc)
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index f20c01759c0d..4c03a565b276 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -533,7 +533,8 @@ static void vc4_crtc_disable(struct drm_crtc *crtc)
> }
> }
>
> -static void vc4_crtc_enable(struct drm_crtc *crtc)
> +static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct drm_device *dev = crtc->dev;
> struct vc4_dev *vc4 = to_vc4_dev(dev);
> @@ -870,10 +871,10 @@ static const struct drm_crtc_funcs vc4_crtc_funcs = {
> static const struct drm_crtc_helper_funcs vc4_crtc_helper_funcs = {
> .mode_set_nofb = vc4_crtc_mode_set_nofb,
> .disable = vc4_crtc_disable,
> - .enable = vc4_crtc_enable,
> .mode_valid = vc4_crtc_mode_valid,
> .atomic_check = vc4_crtc_atomic_check,
> .atomic_flush = vc4_crtc_atomic_flush,
> + .atomic_enable = vc4_crtc_atomic_enable,
> };
>
> static const struct vc4_crtc_data pv0_data = {
> diff --git a/drivers/gpu/drm/virtio/virtgpu_display.c b/drivers/gpu/drm/virtio/virtgpu_display.c
> index d51bd4521f17..03a3c12ed100 100644
> --- a/drivers/gpu/drm/virtio/virtgpu_display.c
> +++ b/drivers/gpu/drm/virtio/virtgpu_display.c
> @@ -113,7 +113,8 @@ static void virtio_gpu_crtc_mode_set_nofb(struct drm_crtc *crtc)
> crtc->mode.vdisplay, 0, 0);
> }
>
> -static void virtio_gpu_crtc_enable(struct drm_crtc *crtc)
> +static void virtio_gpu_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> }
>
> @@ -145,11 +146,11 @@ static void virtio_gpu_crtc_atomic_flush(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs virtio_gpu_crtc_helper_funcs = {
> - .enable = virtio_gpu_crtc_enable,
> .disable = virtio_gpu_crtc_disable,
> .mode_set_nofb = virtio_gpu_crtc_mode_set_nofb,
> .atomic_check = virtio_gpu_crtc_atomic_check,
> .atomic_flush = virtio_gpu_crtc_atomic_flush,
> + .atomic_enable = virtio_gpu_crtc_atomic_enable,
> };
>
> static void virtio_gpu_enc_mode_set(struct drm_encoder *encoder,
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> index f8acd3a15523..832b83c582c2 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ldu.c
> @@ -203,7 +203,7 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
> }
>
> /**
> - * vmw_ldu_crtc_helper_enable - Noop
> + * vmw_ldu_crtc_atomic_enable - Noop
> *
> * @crtc: CRTC associated with the new screen
> *
> @@ -212,7 +212,8 @@ static void vmw_ldu_crtc_mode_set_nofb(struct drm_crtc *crtc)
> * but since for LDU the display plane is closely tied to the
> * CRTC, it makes more sense to do those at plane update time.
> */
> -static void vmw_ldu_crtc_helper_enable(struct drm_crtc *crtc)
> +static void vmw_ldu_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> }
>
> @@ -376,12 +377,12 @@ drm_plane_helper_funcs vmw_ldu_primary_plane_helper_funcs = {
> };
>
> static const struct drm_crtc_helper_funcs vmw_ldu_crtc_helper_funcs = {
> - .enable = vmw_ldu_crtc_helper_enable,
> .disable = vmw_ldu_crtc_helper_disable,
> .mode_set_nofb = vmw_ldu_crtc_mode_set_nofb,
> .atomic_check = vmw_du_crtc_atomic_check,
> .atomic_begin = vmw_du_crtc_atomic_begin,
> .atomic_flush = vmw_du_crtc_atomic_flush,
> + .atomic_enable = vmw_ldu_crtc_atomic_enable,
> };
>
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> index 1cb826c503bf..8ba3bad06909 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_scrn.c
> @@ -270,13 +270,14 @@ static void vmw_sou_crtc_helper_prepare(struct drm_crtc *crtc)
> }
>
> /**
> - * vmw_sou_crtc_helper_enable - Noop
> + * vmw_sou_crtc_atomic_enable - Noop
> *
> * @crtc: CRTC associated with the new screen
> *
> * This is called after a mode set has been completed.
> */
> -static void vmw_sou_crtc_helper_enable(struct drm_crtc *crtc)
> +static void vmw_sou_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> }
>
> @@ -573,12 +574,12 @@ drm_plane_helper_funcs vmw_sou_primary_plane_helper_funcs = {
>
> static const struct drm_crtc_helper_funcs vmw_sou_crtc_helper_funcs = {
> .prepare = vmw_sou_crtc_helper_prepare,
> - .enable = vmw_sou_crtc_helper_enable,
> .disable = vmw_sou_crtc_helper_disable,
> .mode_set_nofb = vmw_sou_crtc_mode_set_nofb,
> .atomic_check = vmw_du_crtc_atomic_check,
> .atomic_begin = vmw_du_crtc_atomic_begin,
> .atomic_flush = vmw_du_crtc_atomic_flush,
> + .atomic_enable = vmw_sou_crtc_atomic_enable,
> };
>
>
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> index 4eb93b47d6db..f2b39d9c51cc 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_stdu.c
> @@ -412,7 +412,8 @@ static void vmw_stdu_crtc_helper_prepare(struct drm_crtc *crtc)
> }
>
>
> -static void vmw_stdu_crtc_helper_enable(struct drm_crtc *crtc)
> +static void vmw_stdu_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct vmw_private *dev_priv;
> struct vmw_screen_target_display_unit *stdu;
> @@ -1415,12 +1416,12 @@ drm_plane_helper_funcs vmw_stdu_primary_plane_helper_funcs = {
>
> static const struct drm_crtc_helper_funcs vmw_stdu_crtc_helper_funcs = {
> .prepare = vmw_stdu_crtc_helper_prepare,
> - .enable = vmw_stdu_crtc_helper_enable,
> .disable = vmw_stdu_crtc_helper_disable,
> .mode_set_nofb = vmw_stdu_crtc_mode_set_nofb,
> .atomic_check = vmw_du_crtc_atomic_check,
> .atomic_begin = vmw_du_crtc_atomic_begin,
> .atomic_flush = vmw_du_crtc_atomic_flush,
> + .atomic_enable = vmw_stdu_crtc_atomic_enable,
> };
>
>
> diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
> index 5fbd10b60ee5..ccb4b0bdb8c6 100644
> --- a/drivers/gpu/drm/zte/zx_vou.c
> +++ b/drivers/gpu/drm/zte/zx_vou.c
> @@ -350,7 +350,8 @@ static inline void vou_chn_set_update(struct zx_crtc *zcrtc)
> zx_writel(zcrtc->chnreg + CHN_UPDATE, 1);
> }
>
> -static void zx_crtc_enable(struct drm_crtc *crtc)
> +static void zx_crtc_atomic_enable(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_state)
> {
> struct drm_display_mode *mode = &crtc->state->adjusted_mode;
> bool interlaced = mode->flags & DRM_MODE_FLAG_INTERLACE;
> @@ -490,9 +491,9 @@ static void zx_crtc_atomic_flush(struct drm_crtc *crtc,
> }
>
> static const struct drm_crtc_helper_funcs zx_crtc_helper_funcs = {
> - .enable = zx_crtc_enable,
> .disable = zx_crtc_disable,
> .atomic_flush = zx_crtc_atomic_flush,
> + .atomic_enable = zx_crtc_atomic_enable,
> };
>
> static int zx_vou_enable_vblank(struct drm_crtc *crtc)
> diff --git a/include/drm/drm_modeset_helper_vtables.h b/include/drm/drm_modeset_helper_vtables.h
> index 474a1029ec79..d74a2cafc3de 100644
> --- a/include/drm/drm_modeset_helper_vtables.h
> +++ b/include/drm/drm_modeset_helper_vtables.h
> @@ -316,24 +316,6 @@ struct drm_crtc_helper_funcs {
> void (*disable)(struct drm_crtc *crtc);
>
> /**
> - * @enable:
> - *
> - * This callback should be used to enable the CRTC. With the atomic
> - * drivers it is called before all encoders connected to this CRTC are
> - * enabled through the encoder's own &drm_encoder_helper_funcs.enable
> - * hook. If that sequence is too simple drivers can just add their own
> - * hooks and call it from this CRTC callback here by looping over all
> - * encoders connected to it using for_each_encoder_on_crtc().
> - *
> - * This hook is used only by atomic helpers, for symmetry with @disable.
> - * Atomic drivers don't need to implement it if there's no need to
> - * enable anything at the CRTC level. To ensure that runtime PM handling
> - * (using either DPMS or the new "ACTIVE" property) works
> - * @enable must be the inverse of @disable for atomic drivers.
> - */
> - void (*enable)(struct drm_crtc *crtc);
> -
> - /**
> * @atomic_check:
> *
> * Drivers should check plane-update related CRTC constraints in this
> @@ -433,6 +415,26 @@ struct drm_crtc_helper_funcs {
> struct drm_crtc_state *old_crtc_state);
>
> /**
> + * @atomic_enable:
> + *
> + * This callback should be used to enable the CRTC. With the atomic
> + * drivers it is called before all encoders connected to this CRTC are
> + * enabled through the encoder's own &drm_encoder_helper_funcs.enable
> + * hook. If that sequence is too simple drivers can just add their own
> + * hooks and call it from this CRTC callback here by looping over all
> + * encoders connected to it using for_each_encoder_on_crtc().
> + *
> + * This hook is used only by atomic helpers, for symmetry with
> + * @atomic_disable. Atomic drivers don't need to implement it if there's
> + * no need to enable anything at the CRTC level. To ensure that runtime
> + * PM handling (using either DPMS or the new "ACTIVE" property) works
> + * @atomic_enable must be the inverse of @atomic_disable for atomic
> + * drivers.
> + */
> + void (*atomic_enable)(struct drm_crtc *crtc,
> + struct drm_crtc_state *old_crtc_state);
> +
> + /**
> * @atomic_disable:
> *
> * This callback should be used to disable the CRTC. With the atomic
> --
> Regards,
>
> Laurent Pinchart
>
--
====================
| I would like to |
| fix the world, |
| but they're not |
| giving me the |
\ source code! /
---------------
¯\_(ツ)_/¯
More information about the dri-devel
mailing list