Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 357436
b: refs/heads/master
c: 0e23cbb
h: refs/heads/master
v: v3
  • Loading branch information
Sylwester Nawrocki authored and Mauro Carvalho Chehab committed Feb 5, 2013
1 parent 6e2f229 commit 70b34cc
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8b164105d87d1c0101dfbf8d2bacee82c70d91aa
refs/heads/master: 0e23cbbe478809fe8499dab9b2a26bb6154c773b
53 changes: 36 additions & 17 deletions trunk/drivers/media/platform/s5p-fimc/fimc-mdevice.c
Original file line number Diff line number Diff line change
Expand Up @@ -708,35 +708,54 @@ static int fimc_md_create_links(struct fimc_md *fmd)
/*
* 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)
{
struct device *dev = NULL;
char clk_name[32];
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++) {
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)) {
v4l2_err(&fmd->v4l2_dev, "Failed to get clock: %s",
clk_name);
return -ENXIO;
dev_err(&fmd->pdev->dev, "Failed to get clock: %s\n",
clk_name);
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;
}
return 0;
}

static void fimc_md_put_clocks(struct fimc_md *fmd)
{
int i = FIMC_MAX_CAMCLKS;
if (ret)
fimc_md_put_clocks(fmd);

while (--i >= 0) {
if (IS_ERR_OR_NULL(fmd->camclk[i].clock))
continue;
clk_put(fmd->camclk[i].clock);
fmd->camclk[i].clock = NULL;
}
return ret;
}

static int __fimc_md_set_camclk(struct fimc_md *fmd,
Expand Down

0 comments on commit 70b34cc

Please sign in to comment.