diff options
Diffstat (limited to 'drivers/media/platform/marvell-ccic/mmp-driver.c')
-rw-r--r-- | drivers/media/platform/marvell-ccic/mmp-driver.c | 46 |
1 files changed, 8 insertions, 38 deletions
diff --git a/drivers/media/platform/marvell-ccic/mmp-driver.c b/drivers/media/platform/marvell-ccic/mmp-driver.c index 3458fa0e2fd5..054507f16734 100644 --- a/drivers/media/platform/marvell-ccic/mmp-driver.c +++ b/drivers/media/platform/marvell-ccic/mmp-driver.c | |||
@@ -142,12 +142,6 @@ static int mmpcam_power_up(struct mcam_camera *mcam) | |||
142 | struct mmp_camera *cam = mcam_to_cam(mcam); | 142 | struct mmp_camera *cam = mcam_to_cam(mcam); |
143 | struct mmp_camera_platform_data *pdata; | 143 | struct mmp_camera_platform_data *pdata; |
144 | 144 | ||
145 | if (mcam->bus_type == V4L2_MBUS_CSI2) { | ||
146 | cam->mipi_clk = devm_clk_get(mcam->dev, "mipi"); | ||
147 | if ((IS_ERR(cam->mipi_clk) && mcam->dphy[2] == 0)) | ||
148 | return PTR_ERR(cam->mipi_clk); | ||
149 | } | ||
150 | |||
151 | /* | 145 | /* |
152 | * Turn on power and clocks to the controller. | 146 | * Turn on power and clocks to the controller. |
153 | */ | 147 | */ |
@@ -186,12 +180,6 @@ static void mmpcam_power_down(struct mcam_camera *mcam) | |||
186 | gpio_set_value(pdata->sensor_power_gpio, 0); | 180 | gpio_set_value(pdata->sensor_power_gpio, 0); |
187 | gpio_set_value(pdata->sensor_reset_gpio, 0); | 181 | gpio_set_value(pdata->sensor_reset_gpio, 0); |
188 | 182 | ||
189 | if (mcam->bus_type == V4L2_MBUS_CSI2 && !IS_ERR(cam->mipi_clk)) { | ||
190 | if (cam->mipi_clk) | ||
191 | devm_clk_put(mcam->dev, cam->mipi_clk); | ||
192 | cam->mipi_clk = NULL; | ||
193 | } | ||
194 | |||
195 | mcam_clk_disable(mcam); | 183 | mcam_clk_disable(mcam); |
196 | } | 184 | } |
197 | 185 | ||
@@ -292,8 +280,9 @@ void mmpcam_calc_dphy(struct mcam_camera *mcam) | |||
292 | return; | 280 | return; |
293 | 281 | ||
294 | /* get the escape clk, this is hard coded */ | 282 | /* get the escape clk, this is hard coded */ |
283 | clk_prepare_enable(cam->mipi_clk); | ||
295 | tx_clk_esc = (clk_get_rate(cam->mipi_clk) / 1000000) / 12; | 284 | tx_clk_esc = (clk_get_rate(cam->mipi_clk) / 1000000) / 12; |
296 | 285 | clk_disable_unprepare(cam->mipi_clk); | |
297 | /* | 286 | /* |
298 | * dphy[2] - CSI2_DPHY6: | 287 | * dphy[2] - CSI2_DPHY6: |
299 | * bit 0 ~ bit 7: CK Term Enable | 288 | * bit 0 ~ bit 7: CK Term Enable |
@@ -325,19 +314,6 @@ static irqreturn_t mmpcam_irq(int irq, void *data) | |||
325 | return IRQ_RETVAL(handled); | 314 | return IRQ_RETVAL(handled); |
326 | } | 315 | } |
327 | 316 | ||
328 | static void mcam_deinit_clk(struct mcam_camera *mcam) | ||
329 | { | ||
330 | unsigned int i; | ||
331 | |||
332 | for (i = 0; i < NR_MCAM_CLK; i++) { | ||
333 | if (!IS_ERR(mcam->clk[i])) { | ||
334 | if (mcam->clk[i]) | ||
335 | devm_clk_put(mcam->dev, mcam->clk[i]); | ||
336 | } | ||
337 | mcam->clk[i] = NULL; | ||
338 | } | ||
339 | } | ||
340 | |||
341 | static void mcam_init_clk(struct mcam_camera *mcam) | 317 | static void mcam_init_clk(struct mcam_camera *mcam) |
342 | { | 318 | { |
343 | unsigned int i; | 319 | unsigned int i; |
@@ -371,7 +347,6 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
371 | if (cam == NULL) | 347 | if (cam == NULL) |
372 | return -ENOMEM; | 348 | return -ENOMEM; |
373 | cam->pdev = pdev; | 349 | cam->pdev = pdev; |
374 | cam->mipi_clk = NULL; | ||
375 | INIT_LIST_HEAD(&cam->devlist); | 350 | INIT_LIST_HEAD(&cam->devlist); |
376 | 351 | ||
377 | mcam = &cam->mcam; | 352 | mcam = &cam->mcam; |
@@ -387,6 +362,11 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
387 | mcam->mclk_div = pdata->mclk_div; | 362 | mcam->mclk_div = pdata->mclk_div; |
388 | mcam->bus_type = pdata->bus_type; | 363 | mcam->bus_type = pdata->bus_type; |
389 | mcam->dphy = pdata->dphy; | 364 | mcam->dphy = pdata->dphy; |
365 | if (mcam->bus_type == V4L2_MBUS_CSI2) { | ||
366 | cam->mipi_clk = devm_clk_get(mcam->dev, "mipi"); | ||
367 | if ((IS_ERR(cam->mipi_clk) && mcam->dphy[2] == 0)) | ||
368 | return PTR_ERR(cam->mipi_clk); | ||
369 | } | ||
390 | mcam->mipi_enabled = false; | 370 | mcam->mipi_enabled = false; |
391 | mcam->lane = pdata->lane; | 371 | mcam->lane = pdata->lane; |
392 | mcam->chip_id = MCAM_ARMADA610; | 372 | mcam->chip_id = MCAM_ARMADA610; |
@@ -444,7 +424,7 @@ static int mmpcam_probe(struct platform_device *pdev) | |||
444 | */ | 424 | */ |
445 | ret = mmpcam_power_up(mcam); | 425 | ret = mmpcam_power_up(mcam); |
446 | if (ret) | 426 | if (ret) |
447 | goto out_deinit_clk; | 427 | return ret; |
448 | ret = mccic_register(mcam); | 428 | ret = mccic_register(mcam); |
449 | if (ret) | 429 | if (ret) |
450 | goto out_power_down; | 430 | goto out_power_down; |
@@ -469,8 +449,6 @@ out_unregister: | |||
469 | mccic_shutdown(mcam); | 449 | mccic_shutdown(mcam); |
470 | out_power_down: | 450 | out_power_down: |
471 | mmpcam_power_down(mcam); | 451 | mmpcam_power_down(mcam); |
472 | out_deinit_clk: | ||
473 | mcam_deinit_clk(mcam); | ||
474 | return ret; | 452 | return ret; |
475 | } | 453 | } |
476 | 454 | ||
@@ -478,18 +456,10 @@ out_deinit_clk: | |||
478 | static int mmpcam_remove(struct mmp_camera *cam) | 456 | static int mmpcam_remove(struct mmp_camera *cam) |
479 | { | 457 | { |
480 | struct mcam_camera *mcam = &cam->mcam; | 458 | struct mcam_camera *mcam = &cam->mcam; |
481 | struct mmp_camera_platform_data *pdata; | ||
482 | 459 | ||
483 | mmpcam_remove_device(cam); | 460 | mmpcam_remove_device(cam); |
484 | mccic_shutdown(mcam); | 461 | mccic_shutdown(mcam); |
485 | mmpcam_power_down(mcam); | 462 | mmpcam_power_down(mcam); |
486 | pdata = cam->pdev->dev.platform_data; | ||
487 | gpio_free(pdata->sensor_reset_gpio); | ||
488 | gpio_free(pdata->sensor_power_gpio); | ||
489 | mcam_deinit_clk(mcam); | ||
490 | iounmap(cam->power_regs); | ||
491 | iounmap(mcam->regs); | ||
492 | kfree(cam); | ||
493 | return 0; | 463 | return 0; |
494 | } | 464 | } |
495 | 465 | ||