diff options
author | Sachin Kamat <sachin.kamat@linaro.org> | 2012-12-28 05:26:18 -0500 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2013-01-04 01:54:34 -0500 |
commit | 15b3263eb3267b2be06f969f775f2e34624c7259 (patch) | |
tree | 8e4a3e9905e8a6096c7033d2dae576e3dafcc67d /drivers/gpu | |
parent | 3fb6922eae7e9c8be5d6b305b37c7495ffbf0e01 (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.c | 45 |
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); |
1867 | err_get_irq: | 1850 | err_get_irq: |
1868 | free_irq(ctx->irq, ctx); | 1851 | free_irq(ctx->irq, ctx); |
1869 | err_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 | ||