diff options
author | Fabio Estevam <fabio.estevam@freescale.com> | 2013-08-21 16:14:17 +0200 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2013-08-24 09:06:08 +0200 |
commit | 79830db28622b3ee183a30903d50cbd92eb0fb31 (patch) | |
tree | f26cd46996a7706d244b113eebdd90ceb3914bf1 /drivers/media/platform | |
parent | [media] coda: Fix error paths (diff) | |
download | linux-79830db28622b3ee183a30903d50cbd92eb0fb31.tar.xz linux-79830db28622b3ee183a30903d50cbd92eb0fb31.zip |
[media] coda: Check the return value from clk_prepare_enable()
clk_prepare_enable() may fail, so let's check its return value and propagate it
in the case of error.
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Kamil Debski <k.debski@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/platform')
-rw-r--r-- | drivers/media/platform/coda.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/drivers/media/platform/coda.c b/drivers/media/platform/coda.c index 0894d800214c..04ced56d58f2 100644 --- a/drivers/media/platform/coda.c +++ b/drivers/media/platform/coda.c @@ -2406,8 +2406,14 @@ static int coda_open(struct file *file) ctx->reg_idx = idx; } - clk_prepare_enable(dev->clk_per); - clk_prepare_enable(dev->clk_ahb); + ret = clk_prepare_enable(dev->clk_per); + if (ret) + goto err_clk_per; + + ret = clk_prepare_enable(dev->clk_ahb); + if (ret) + goto err_clk_ahb; + set_default_params(ctx); ctx->m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx, &coda_queue_init); @@ -2465,7 +2471,9 @@ err_ctrls_setup: v4l2_m2m_ctx_release(ctx->m2m_ctx); err_ctx_init: clk_disable_unprepare(dev->clk_ahb); +err_clk_ahb: clk_disable_unprepare(dev->clk_per); +err_clk_per: v4l2_fh_del(&ctx->fh); v4l2_fh_exit(&ctx->fh); clear_bit(ctx->idx, &dev->instance_mask); @@ -2873,10 +2881,15 @@ static int coda_hw_init(struct coda_dev *dev) u16 product, major, minor, release; u32 data; u16 *p; - int i; + int i, ret; + + ret = clk_prepare_enable(dev->clk_per); + if (ret) + return ret; - clk_prepare_enable(dev->clk_per); - clk_prepare_enable(dev->clk_ahb); + ret = clk_prepare_enable(dev->clk_ahb); + if (ret) + goto err_clk_ahb; /* * Copy the first CODA_ISRAM_SIZE in the internal SRAM. @@ -2985,6 +2998,10 @@ static int coda_hw_init(struct coda_dev *dev) } return 0; + +err_clk_ahb: + clk_disable_unprepare(dev->clk_per); + return ret; } static void coda_fw_callback(const struct firmware *fw, void *context) |