summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
diff options
context:
space:
mode:
authorXinliang Liu <xinliang.liu@linaro.org>2015-10-10 10:16:22 +0800
committerXinliang Liu <xinliang.liu@linaro.org>2016-04-29 16:39:12 +0800
commit783ad972c9a0e4690fa9a1580d16b64f389bc068 (patch)
tree969c827d349e8d73c54a5c02fac74320e0a00c83 /drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
parent23e7b2ab9a8ff5653e8140248a494c3f3171dce3 (diff)
drm/hisilicon: Add crtc driver for ADE
Add crtc funcs and helper funcs for ADE. v8: None. v7: - A few Regs define clean up and typo fixs. v6: - Cleanup reg-names dt parsing. v5: - Use syscon to access ADE media NOC QoS registers instread of directly writing registers. - Use reset controller to reset ADE instead of directly writing registers. v4: None. v3: - Make ade as the master driver. - Use port to connect with encoder. - A few cleanup. v2: - Remove abtraction layer. Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org> Signed-off-by: Xinwei Kong <kong.kongxinwei@hisilicon.com> Reviewed-by: Archit Taneja <architt@codeaurora.org>
Diffstat (limited to 'drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c')
-rw-r--r--drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
index 976c9b1a3fd3..578a1eb94517 100644
--- a/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
+++ b/drivers/gpu/drm/hisilicon/kirin/kirin_drm_drv.c
@@ -30,8 +30,12 @@ static struct kirin_dc_ops *dc_ops;
static int kirin_drm_kms_cleanup(struct drm_device *dev)
{
+ struct kirin_drm_private *priv = dev->dev_private;
+
dc_ops->cleanup(dev);
drm_mode_config_cleanup(dev);
+ devm_kfree(dev->dev, priv);
+ dev->dev_private = NULL;
return 0;
}
@@ -55,8 +59,14 @@ static void kirin_drm_mode_config_init(struct drm_device *dev)
static int kirin_drm_kms_init(struct drm_device *dev)
{
+ struct kirin_drm_private *priv;
int ret;
+ priv = devm_kzalloc(dev->dev, sizeof(*priv), GFP_KERNEL);
+ if (!priv)
+ return -ENOMEM;
+
+ dev->dev_private = priv;
dev_set_drvdata(dev->dev, dev);
/* dev->mode_config initialization */
@@ -84,6 +94,8 @@ err_dc_cleanup:
dc_ops->cleanup(dev);
err_mode_config_cleanup:
drm_mode_config_cleanup(dev);
+ devm_kfree(dev->dev, priv);
+ dev->dev_private = NULL;
return ret;
}