diff options
Diffstat (limited to 'drivers/gpu/drm/meson/meson_drv.c')
| -rw-r--r-- | drivers/gpu/drm/meson/meson_drv.c | 37 | 
1 files changed, 26 insertions, 11 deletions
diff --git a/drivers/gpu/drm/meson/meson_drv.c b/drivers/gpu/drm/meson/meson_drv.c index f9ad0e960263..32b1a6cdecfc 100644 --- a/drivers/gpu/drm/meson/meson_drv.c +++ b/drivers/gpu/drm/meson/meson_drv.c @@ -189,40 +189,55 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "vpu");  	regs = devm_ioremap_resource(dev, res); -	if (IS_ERR(regs)) -		return PTR_ERR(regs); +	if (IS_ERR(regs)) { +		ret = PTR_ERR(regs); +		goto free_drm; +	}  	priv->io_base = regs;  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "hhi"); +	if (!res) +		return -EINVAL;  	/* Simply ioremap since it may be a shared register zone */  	regs = devm_ioremap(dev, res->start, resource_size(res)); -	if (!regs) -		return -EADDRNOTAVAIL; +	if (!regs) { +		ret = -EADDRNOTAVAIL; +		goto free_drm; +	}  	priv->hhi = devm_regmap_init_mmio(dev, regs,  					  &meson_regmap_config);  	if (IS_ERR(priv->hhi)) {  		dev_err(&pdev->dev, "Couldn't create the HHI regmap\n"); -		return PTR_ERR(priv->hhi); +		ret = PTR_ERR(priv->hhi); +		goto free_drm;  	}  	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dmc"); +	if (!res) +		return -EINVAL;  	/* Simply ioremap since it may be a shared register zone */  	regs = devm_ioremap(dev, res->start, resource_size(res)); -	if (!regs) -		return -EADDRNOTAVAIL; +	if (!regs) { +		ret = -EADDRNOTAVAIL; +		goto free_drm; +	}  	priv->dmc = devm_regmap_init_mmio(dev, regs,  					  &meson_regmap_config);  	if (IS_ERR(priv->dmc)) {  		dev_err(&pdev->dev, "Couldn't create the DMC regmap\n"); -		return PTR_ERR(priv->dmc); +		ret = PTR_ERR(priv->dmc); +		goto free_drm;  	}  	priv->vsync_irq = platform_get_irq(pdev, 0); -	drm_vblank_init(drm, 1); +	ret = drm_vblank_init(drm, 1); +	if (ret) +		goto free_drm; +  	drm_mode_config_init(drm);  	drm->mode_config.max_width = 3840;  	drm->mode_config.max_height = 2160; @@ -281,7 +296,7 @@ static int meson_drv_bind_master(struct device *dev, bool has_components)  	return 0;  free_drm: -	drm_dev_unref(drm); +	drm_dev_put(drm);  	return ret;  } @@ -300,7 +315,7 @@ static void meson_drv_unbind(struct device *dev)  	drm_kms_helper_poll_fini(drm);  	drm_fbdev_cma_fini(priv->fbdev);  	drm_mode_config_cleanup(drm); -	drm_dev_unref(drm); +	drm_dev_put(drm);  }  |