Commit 0e23cbbe authored by Sylwester Nawrocki's avatar Sylwester Nawrocki Committed by Mauro Carvalho Chehab

[media] s5p-fimc: Add clk_prepare/unprepare for sclk_cam clocks

Add clk_prepare(), clk_unprepare() calls for the sclk_cam clocks
to ensure the driver works on platforms with the common clocks
API enabled.
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 8b164105
...@@ -708,35 +708,54 @@ static int fimc_md_create_links(struct fimc_md *fmd) ...@@ -708,35 +708,54 @@ static int fimc_md_create_links(struct fimc_md *fmd)
/* /*
* The peripheral sensor clock management. * The peripheral sensor clock management.
*/ */
static void fimc_md_put_clocks(struct fimc_md *fmd)
{
int i = FIMC_MAX_CAMCLKS;
while (--i >= 0) {
if (IS_ERR(fmd->camclk[i].clock))
continue;
clk_unprepare(fmd->camclk[i].clock);
clk_put(fmd->camclk[i].clock);
fmd->camclk[i].clock = ERR_PTR(-EINVAL);
}
}
static int fimc_md_get_clocks(struct fimc_md *fmd) static int fimc_md_get_clocks(struct fimc_md *fmd)
{ {
struct device *dev = NULL;
char clk_name[32]; char clk_name[32];
struct clk *clock; struct clk *clock;
int i; int ret, i;
for (i = 0; i < FIMC_MAX_CAMCLKS; i++)
fmd->camclk[i].clock = ERR_PTR(-EINVAL);
if (fmd->pdev->dev.of_node)
dev = &fmd->pdev->dev;
for (i = 0; i < FIMC_MAX_CAMCLKS; i++) { for (i = 0; i < FIMC_MAX_CAMCLKS; i++) {
snprintf(clk_name, sizeof(clk_name), "sclk_cam%u", i); snprintf(clk_name, sizeof(clk_name), "sclk_cam%u", i);
clock = clk_get(NULL, clk_name); clock = clk_get(dev, clk_name);
if (IS_ERR(clock)) { if (IS_ERR(clock)) {
v4l2_err(&fmd->v4l2_dev, "Failed to get clock: %s", dev_err(&fmd->pdev->dev, "Failed to get clock: %s\n",
clk_name); clk_name);
return -ENXIO; ret = PTR_ERR(clock);
break;
}
ret = clk_prepare(clock);
if (ret < 0) {
clk_put(clock);
fmd->camclk[i].clock = ERR_PTR(-EINVAL);
break;
} }
fmd->camclk[i].clock = clock; fmd->camclk[i].clock = clock;
} }
return 0; if (ret)
} fimc_md_put_clocks(fmd);
static void fimc_md_put_clocks(struct fimc_md *fmd)
{
int i = FIMC_MAX_CAMCLKS;
while (--i >= 0) { return ret;
if (IS_ERR_OR_NULL(fmd->camclk[i].clock))
continue;
clk_put(fmd->camclk[i].clock);
fmd->camclk[i].clock = NULL;
}
} }
static int __fimc_md_set_camclk(struct fimc_md *fmd, static int __fimc_md_set_camclk(struct fimc_md *fmd,
......
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