diff options
Diffstat (limited to 'drivers/gpu/drm/mediatek/mtk_drm_crtc.c')
| -rw-r--r-- | drivers/gpu/drm/mediatek/mtk_drm_crtc.c | 17 | 
1 files changed, 15 insertions, 2 deletions
diff --git a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c index ede435d2c1ef..42cc7052b050 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_crtc.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_crtc.c @@ -152,6 +152,7 @@ static void mtk_drm_cmdq_pkt_destroy(struct cmdq_pkt *pkt)  static void mtk_drm_crtc_destroy(struct drm_crtc *crtc)  {  	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc); +	int i;  	mtk_mutex_put(mtk_crtc->mutex);  #if IS_REACHABLE(CONFIG_MTK_CMDQ) @@ -162,6 +163,14 @@ static void mtk_drm_crtc_destroy(struct drm_crtc *crtc)  		mtk_crtc->cmdq_client.chan = NULL;  	}  #endif + +	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++) { +		struct mtk_ddp_comp *comp; + +		comp = mtk_crtc->ddp_comp[i]; +		mtk_ddp_comp_unregister_vblank_cb(comp); +	} +  	drm_crtc_cleanup(crtc);  } @@ -184,7 +193,7 @@ static struct drm_crtc_state *mtk_drm_crtc_duplicate_state(struct drm_crtc *crtc  {  	struct mtk_crtc_state *state; -	state = kzalloc(sizeof(*state), GFP_KERNEL); +	state = kmalloc(sizeof(*state), GFP_KERNEL);  	if (!state)  		return NULL; @@ -192,6 +201,7 @@ static struct drm_crtc_state *mtk_drm_crtc_duplicate_state(struct drm_crtc *crtc  	WARN_ON(state->base.crtc != crtc);  	state->base.crtc = crtc; +	state->pending_config = false;  	return &state->base;  } @@ -617,7 +627,7 @@ static int mtk_drm_crtc_enable_vblank(struct drm_crtc *crtc)  	struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);  	struct mtk_ddp_comp *comp = mtk_crtc->ddp_comp[0]; -	mtk_ddp_comp_enable_vblank(comp, mtk_crtc_ddp_irq, &mtk_crtc->base); +	mtk_ddp_comp_enable_vblank(comp);  	return 0;  } @@ -926,6 +936,9 @@ int mtk_drm_crtc_create(struct drm_device *drm_dev,  			if (comp->funcs->ctm_set)  				has_ctm = true;  		} + +		mtk_ddp_comp_register_vblank_cb(comp, mtk_crtc_ddp_irq, +						&mtk_crtc->base);  	}  	for (i = 0; i < mtk_crtc->ddp_comp_nr; i++)  |