aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorSachin Kamat <sachin.kamat@linaro.org>2012-12-28 05:26:18 -0500
committerInki Dae <inki.dae@samsung.com>2013-01-04 01:54:34 -0500
commit15b3263eb3267b2be06f969f775f2e34624c7259 (patch)
tree8e4a3e9905e8a6096c7033d2dae576e3dafcc67d /drivers/gpu
parent3fb6922eae7e9c8be5d6b305b37c7495ffbf0e01 (diff)
drm/exynos: Use devm_clk_get in exynos_drm_fimc.c
This eliminates the need for explicit clk_put and makes the cleanup and exit path code simpler. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fimc.c45
1 files changed, 9 insertions, 36 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimc.c b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
index 96bfdd60875a..88a78416f0c9 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimc.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimc.c
@@ -1738,64 +1738,49 @@ static int __devinit fimc_probe(struct platform_device *pdev)
1738 platform_get_device_id(pdev)->driver_data; 1738 platform_get_device_id(pdev)->driver_data;
1739 1739
1740 /* clock control */ 1740 /* clock control */
1741 ctx->sclk_fimc_clk = clk_get(dev, "sclk_fimc"); 1741 ctx->sclk_fimc_clk = devm_clk_get(dev, "sclk_fimc");
1742 if (IS_ERR(ctx->sclk_fimc_clk)) { 1742 if (IS_ERR(ctx->sclk_fimc_clk)) {
1743 dev_err(dev, "failed to get src fimc clock.\n"); 1743 dev_err(dev, "failed to get src fimc clock.\n");
1744 return PTR_ERR(ctx->sclk_fimc_clk); 1744 return PTR_ERR(ctx->sclk_fimc_clk);
1745 } 1745 }
1746 clk_enable(ctx->sclk_fimc_clk); 1746 clk_enable(ctx->sclk_fimc_clk);
1747 1747
1748 ctx->fimc_clk = clk_get(dev, "fimc"); 1748 ctx->fimc_clk = devm_clk_get(dev, "fimc");
1749 if (IS_ERR(ctx->fimc_clk)) { 1749 if (IS_ERR(ctx->fimc_clk)) {
1750 dev_err(dev, "failed to get fimc clock.\n"); 1750 dev_err(dev, "failed to get fimc clock.\n");
1751 clk_disable(ctx->sclk_fimc_clk); 1751 clk_disable(ctx->sclk_fimc_clk);
1752 clk_put(ctx->sclk_fimc_clk);
1753 return PTR_ERR(ctx->fimc_clk); 1752 return PTR_ERR(ctx->fimc_clk);
1754 } 1753 }
1755 1754
1756 ctx->wb_clk = clk_get(dev, "pxl_async0"); 1755 ctx->wb_clk = devm_clk_get(dev, "pxl_async0");
1757 if (IS_ERR(ctx->wb_clk)) { 1756 if (IS_ERR(ctx->wb_clk)) {
1758 dev_err(dev, "failed to get writeback a clock.\n"); 1757 dev_err(dev, "failed to get writeback a clock.\n");
1759 clk_disable(ctx->sclk_fimc_clk); 1758 clk_disable(ctx->sclk_fimc_clk);
1760 clk_put(ctx->sclk_fimc_clk);
1761 clk_put(ctx->fimc_clk);
1762 return PTR_ERR(ctx->wb_clk); 1759 return PTR_ERR(ctx->wb_clk);
1763 } 1760 }
1764 1761
1765 ctx->wb_b_clk = clk_get(dev, "pxl_async1"); 1762 ctx->wb_b_clk = devm_clk_get(dev, "pxl_async1");
1766 if (IS_ERR(ctx->wb_b_clk)) { 1763 if (IS_ERR(ctx->wb_b_clk)) {
1767 dev_err(dev, "failed to get writeback b clock.\n"); 1764 dev_err(dev, "failed to get writeback b clock.\n");
1768 clk_disable(ctx->sclk_fimc_clk); 1765 clk_disable(ctx->sclk_fimc_clk);
1769 clk_put(ctx->sclk_fimc_clk);
1770 clk_put(ctx->fimc_clk);
1771 clk_put(ctx->wb_clk);
1772 return PTR_ERR(ctx->wb_b_clk); 1766 return PTR_ERR(ctx->wb_b_clk);
1773 } 1767 }
1774 1768
1775 parent_clk = clk_get(dev, ddata->parent_clk); 1769 parent_clk = devm_clk_get(dev, ddata->parent_clk);
1776 1770
1777 if (IS_ERR(parent_clk)) { 1771 if (IS_ERR(parent_clk)) {
1778 dev_err(dev, "failed to get parent clock.\n"); 1772 dev_err(dev, "failed to get parent clock.\n");
1779 clk_disable(ctx->sclk_fimc_clk); 1773 clk_disable(ctx->sclk_fimc_clk);
1780 clk_put(ctx->sclk_fimc_clk);
1781 clk_put(ctx->fimc_clk);
1782 clk_put(ctx->wb_clk);
1783 clk_put(ctx->wb_b_clk);
1784 return PTR_ERR(parent_clk); 1774 return PTR_ERR(parent_clk);
1785 } 1775 }
1786 1776
1787 if (clk_set_parent(ctx->sclk_fimc_clk, parent_clk)) { 1777 if (clk_set_parent(ctx->sclk_fimc_clk, parent_clk)) {
1788 dev_err(dev, "failed to set parent.\n"); 1778 dev_err(dev, "failed to set parent.\n");
1789 clk_put(parent_clk);
1790 clk_disable(ctx->sclk_fimc_clk); 1779 clk_disable(ctx->sclk_fimc_clk);
1791 clk_put(ctx->sclk_fimc_clk);
1792 clk_put(ctx->fimc_clk);
1793 clk_put(ctx->wb_clk);
1794 clk_put(ctx->wb_b_clk);
1795 return -EINVAL; 1780 return -EINVAL;
1796 } 1781 }
1797 1782
1798 clk_put(parent_clk); 1783 devm_clk_put(dev, parent_clk);
1799 clk_set_rate(ctx->sclk_fimc_clk, pdata->clk_rate); 1784 clk_set_rate(ctx->sclk_fimc_clk, pdata->clk_rate);
1800 1785
1801 /* resource memory */ 1786 /* resource memory */
@@ -1803,16 +1788,14 @@ static int __devinit fimc_probe(struct platform_device *pdev)
1803 ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res); 1788 ctx->regs = devm_request_and_ioremap(dev, ctx->regs_res);
1804 if (!ctx->regs) { 1789 if (!ctx->regs) {
1805 dev_err(dev, "failed to map registers.\n"); 1790 dev_err(dev, "failed to map registers.\n");
1806 ret = -ENXIO; 1791 return -ENXIO;
1807 goto err_clk;
1808 } 1792 }
1809 1793
1810 /* resource irq */ 1794 /* resource irq */
1811 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0); 1795 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1812 if (!res) { 1796 if (!res) {
1813 dev_err(dev, "failed to request irq resource.\n"); 1797 dev_err(dev, "failed to request irq resource.\n");
1814 ret = -ENOENT; 1798 return -ENOENT;
1815 goto err_clk;
1816 } 1799 }
1817 1800
1818 ctx->irq = res->start; 1801 ctx->irq = res->start;
@@ -1820,7 +1803,7 @@ static int __devinit fimc_probe(struct platform_device *pdev)
1820 IRQF_ONESHOT, "drm_fimc", ctx); 1803 IRQF_ONESHOT, "drm_fimc", ctx);
1821 if (ret < 0) { 1804 if (ret < 0) {
1822 dev_err(dev, "failed to request irq.\n"); 1805 dev_err(dev, "failed to request irq.\n");
1823 goto err_clk; 1806 return ret;
1824 } 1807 }
1825 1808
1826 /* context initailization */ 1809 /* context initailization */
@@ -1866,11 +1849,6 @@ err_ippdrv_register:
1866 pm_runtime_disable(dev); 1849 pm_runtime_disable(dev);
1867err_get_irq: 1850err_get_irq:
1868 free_irq(ctx->irq, ctx); 1851 free_irq(ctx->irq, ctx);
1869err_clk:
1870 clk_put(ctx->sclk_fimc_clk);
1871 clk_put(ctx->fimc_clk);
1872 clk_put(ctx->wb_clk);
1873 clk_put(ctx->wb_b_clk);
1874 1852
1875 return ret; 1853 return ret;
1876} 1854}
@@ -1890,11 +1868,6 @@ static int __devexit fimc_remove(struct platform_device *pdev)
1890 1868
1891 free_irq(ctx->irq, ctx); 1869 free_irq(ctx->irq, ctx);
1892 1870
1893 clk_put(ctx->sclk_fimc_clk);
1894 clk_put(ctx->fimc_clk);
1895 clk_put(ctx->wb_clk);
1896 clk_put(ctx->wb_b_clk);
1897
1898 return 0; 1871 return 0;
1899} 1872}
1900 1873