Commit 8cd5d42a authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mauro Carvalho Chehab

[media] s5p-csis: Fix clock handling on error path in probe()

Move e_clkput label after the clk_disable() call so a not acquired clock
is not attempted to be disabled. This fixes runtime warnings like:
 s5p-mipi-csis 11880000.csis: failed to get clock: sclk_csis
 ------------[ cut here ]------------
 WARNING: at drivers/clk/clk.c:478 clk_disable+0x24/0x34()
 Modules linked in:
 [<c001603c>] (unwind_backtrace+0x0/0x13c) from [<c0022060>] (warn_slowpath_common+0x54/0x64)
 [<c0022060>] (warn_slowpath_common+0x54/0x64) from [<c002208c>] (warn_slowpath_null+0x1c/0x24)
 [<c002208c>] (warn_slowpath_null+0x1c/0x24) from [<c033f868>] (clk_disable+0x24/0x34)
 [<c033f868>] (clk_disable+0x24/0x34) from [<c02feff8>] (s5pcsis_probe+0x25c/0x4c8)
 [<c02feff8>] (s5pcsis_probe+0x25c/0x4c8) from [<c0268e34>] (platform_drv_probe+0x18/0x1c)
 [<c0268e34>] (platform_drv_probe+0x18/0x1c) from [<c0267700>] (driver_probe_device+0xa4/0x368)
 [<c0267700>] (driver_probe_device+0xa4/0x368) from [<c0267a50>] (__driver_attach+0x8c/0x90)
 [<c0267a50>] (__driver_attach+0x8c/0x90) from [<c0265c94>] (bus_for_each_dev+0x60/0x8c)
 [<c0265c94>] (bus_for_each_dev+0x60/0x8c) from [<c02665e8>] (bus_add_driver+0x20c/0x2d4)
 [<c02665e8>] (bus_add_driver+0x20c/0x2d4) from [<c0268064>] (driver_register+0x78/0x194)
 [<c0268064>] (driver_register+0x78/0x194) from [<c0008668>] (do_one_initcall+0x34/0x188)
 [<c0008668>] (do_one_initcall+0x34/0x188) from [<c03de57c>] (kernel_init+0x180/0x2f0)
 [<c03de57c>] (kernel_init+0x180/0x2f0) from [<c000f0d8>] (ret_from_fork+0x14/0x3c)
 ---[ end trace 0c5a55345c42530b ]---
Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 05c79d0d
...@@ -771,7 +771,7 @@ static int s5pcsis_probe(struct platform_device *pdev) ...@@ -771,7 +771,7 @@ static int s5pcsis_probe(struct platform_device *pdev)
0, dev_name(&pdev->dev), state); 0, dev_name(&pdev->dev), state);
if (ret) { if (ret) {
dev_err(&pdev->dev, "Interrupt request failed\n"); dev_err(&pdev->dev, "Interrupt request failed\n");
goto e_clkput; goto e_clkdis;
} }
v4l2_subdev_init(&state->sd, &s5pcsis_subdev_ops); v4l2_subdev_init(&state->sd, &s5pcsis_subdev_ops);
...@@ -789,7 +789,7 @@ static int s5pcsis_probe(struct platform_device *pdev) ...@@ -789,7 +789,7 @@ static int s5pcsis_probe(struct platform_device *pdev)
ret = media_entity_init(&state->sd.entity, ret = media_entity_init(&state->sd.entity,
CSIS_PADS_NUM, state->pads, 0); CSIS_PADS_NUM, state->pads, 0);
if (ret < 0) if (ret < 0)
goto e_clkput; goto e_clkdis;
/* This allows to retrieve the platform device id by the host driver */ /* This allows to retrieve the platform device id by the host driver */
v4l2_set_subdevdata(&state->sd, pdev); v4l2_set_subdevdata(&state->sd, pdev);
...@@ -802,8 +802,9 @@ static int s5pcsis_probe(struct platform_device *pdev) ...@@ -802,8 +802,9 @@ static int s5pcsis_probe(struct platform_device *pdev)
pm_runtime_enable(&pdev->dev); pm_runtime_enable(&pdev->dev);
return 0; return 0;
e_clkput: e_clkdis:
clk_disable(state->clock[CSIS_CLK_MUX]); clk_disable(state->clock[CSIS_CLK_MUX]);
e_clkput:
s5pcsis_clk_put(state); s5pcsis_clk_put(state);
return ret; return ret;
} }
......
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