Commit b057c3c3 authored by Laurent Pinchart's avatar Laurent Pinchart Committed by Mauro Carvalho Chehab

[media] omap3isp: Prepare/unprepare clocks before/after enable/disable

Clock enable (disable) is split in two operations, prepare and enable
(disable and unprepare). Perform both when enabling/disabling the ISP
clocks.
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Acked-by: default avatarSakari Ailus <sakari.ailus@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent e023a113
...@@ -1332,7 +1332,8 @@ void omap3isp_subclk_disable(struct isp_device *isp, ...@@ -1332,7 +1332,8 @@ void omap3isp_subclk_disable(struct isp_device *isp,
* isp_enable_clocks - Enable ISP clocks * isp_enable_clocks - Enable ISP clocks
* @isp: OMAP3 ISP device * @isp: OMAP3 ISP device
* *
* Return 0 if successful, or clk_enable return value if any of tthem fails. * Return 0 if successful, or clk_prepare_enable return value if any of them
* fails.
*/ */
static int isp_enable_clocks(struct isp_device *isp) static int isp_enable_clocks(struct isp_device *isp)
{ {
...@@ -1354,9 +1355,9 @@ static int isp_enable_clocks(struct isp_device *isp) ...@@ -1354,9 +1355,9 @@ static int isp_enable_clocks(struct isp_device *isp)
else else
divisor = 2; divisor = 2;
r = clk_enable(isp->clock[ISP_CLK_CAM_ICK]); r = clk_prepare_enable(isp->clock[ISP_CLK_CAM_ICK]);
if (r) { if (r) {
dev_err(isp->dev, "clk_enable cam_ick failed\n"); dev_err(isp->dev, "failed to enable cam_ick clock\n");
goto out_clk_enable_ick; goto out_clk_enable_ick;
} }
r = clk_set_rate(isp->clock[ISP_CLK_DPLL4_M5_CK], r = clk_set_rate(isp->clock[ISP_CLK_DPLL4_M5_CK],
...@@ -1365,9 +1366,9 @@ static int isp_enable_clocks(struct isp_device *isp) ...@@ -1365,9 +1366,9 @@ static int isp_enable_clocks(struct isp_device *isp)
dev_err(isp->dev, "clk_set_rate for dpll4_m5_ck failed\n"); dev_err(isp->dev, "clk_set_rate for dpll4_m5_ck failed\n");
goto out_clk_enable_mclk; goto out_clk_enable_mclk;
} }
r = clk_enable(isp->clock[ISP_CLK_CAM_MCLK]); r = clk_prepare_enable(isp->clock[ISP_CLK_CAM_MCLK]);
if (r) { if (r) {
dev_err(isp->dev, "clk_enable cam_mclk failed\n"); dev_err(isp->dev, "failed to enable cam_mclk clock\n");
goto out_clk_enable_mclk; goto out_clk_enable_mclk;
} }
rate = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]); rate = clk_get_rate(isp->clock[ISP_CLK_CAM_MCLK]);
...@@ -1375,17 +1376,17 @@ static int isp_enable_clocks(struct isp_device *isp) ...@@ -1375,17 +1376,17 @@ static int isp_enable_clocks(struct isp_device *isp)
dev_warn(isp->dev, "unexpected cam_mclk rate:\n" dev_warn(isp->dev, "unexpected cam_mclk rate:\n"
" expected : %d\n" " expected : %d\n"
" actual : %ld\n", CM_CAM_MCLK_HZ, rate); " actual : %ld\n", CM_CAM_MCLK_HZ, rate);
r = clk_enable(isp->clock[ISP_CLK_CSI2_FCK]); r = clk_prepare_enable(isp->clock[ISP_CLK_CSI2_FCK]);
if (r) { if (r) {
dev_err(isp->dev, "clk_enable csi2_fck failed\n"); dev_err(isp->dev, "failed to enable csi2_fck clock\n");
goto out_clk_enable_csi2_fclk; goto out_clk_enable_csi2_fclk;
} }
return 0; return 0;
out_clk_enable_csi2_fclk: out_clk_enable_csi2_fclk:
clk_disable(isp->clock[ISP_CLK_CAM_MCLK]); clk_disable_unprepare(isp->clock[ISP_CLK_CAM_MCLK]);
out_clk_enable_mclk: out_clk_enable_mclk:
clk_disable(isp->clock[ISP_CLK_CAM_ICK]); clk_disable_unprepare(isp->clock[ISP_CLK_CAM_ICK]);
out_clk_enable_ick: out_clk_enable_ick:
return r; return r;
} }
...@@ -1396,9 +1397,9 @@ static int isp_enable_clocks(struct isp_device *isp) ...@@ -1396,9 +1397,9 @@ static int isp_enable_clocks(struct isp_device *isp)
*/ */
static void isp_disable_clocks(struct isp_device *isp) static void isp_disable_clocks(struct isp_device *isp)
{ {
clk_disable(isp->clock[ISP_CLK_CAM_ICK]); clk_disable_unprepare(isp->clock[ISP_CLK_CAM_ICK]);
clk_disable(isp->clock[ISP_CLK_CAM_MCLK]); clk_disable_unprepare(isp->clock[ISP_CLK_CAM_MCLK]);
clk_disable(isp->clock[ISP_CLK_CSI2_FCK]); clk_disable_unprepare(isp->clock[ISP_CLK_CSI2_FCK]);
} }
static const char *isp_clocks[] = { static const char *isp_clocks[] = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment