Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] media: marvell-ccic: use devm to release clk

This patch uses devm to release the clks instead of releasing
manually.
And it adds enable/disable mipi_clk when getting its rate.

Signed-off-by: Libin Yang <lbyang@marvell.com>
Acked-by: Jonathan Corbet <corbet@lwn.net>
Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>

authored by

Libin Yang and committed by
Mauro Carvalho Chehab
326f5a3f 06eb891e

+8 -31
+8 -31
drivers/media/platform/marvell-ccic/mmp-driver.c
··· 142 142 struct mmp_camera *cam = mcam_to_cam(mcam); 143 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 146 * Turn on power and clocks to the controller. 153 147 */ ··· 179 185 pdata = cam->pdev->dev.platform_data; 180 186 gpio_set_value(pdata->sensor_power_gpio, 0); 181 187 gpio_set_value(pdata->sensor_reset_gpio, 0); 182 - 183 - if (mcam->bus_type == V4L2_MBUS_CSI2 && !IS_ERR(cam->mipi_clk)) { 184 - if (cam->mipi_clk) 185 - devm_clk_put(mcam->dev, cam->mipi_clk); 186 - cam->mipi_clk = NULL; 187 - } 188 188 189 189 mcam_clk_disable(mcam); 190 190 } ··· 280 292 return; 281 293 282 294 /* get the escape clk, this is hard coded */ 295 + clk_prepare_enable(cam->mipi_clk); 283 296 tx_clk_esc = (clk_get_rate(cam->mipi_clk) / 1000000) / 12; 284 - 297 + clk_disable_unprepare(cam->mipi_clk); 285 298 /* 286 299 * dphy[2] - CSI2_DPHY6: 287 300 * bit 0 ~ bit 7: CK Term Enable ··· 312 323 handled = mccic_irq(mcam, irqs); 313 324 spin_unlock(&mcam->dev_lock); 314 325 return IRQ_RETVAL(handled); 315 - } 316 - 317 - static void mcam_deinit_clk(struct mcam_camera *mcam) 318 - { 319 - unsigned int i; 320 - 321 - for (i = 0; i < NR_MCAM_CLK; i++) { 322 - if (!IS_ERR(mcam->clk[i])) { 323 - if (mcam->clk[i]) 324 - devm_clk_put(mcam->dev, mcam->clk[i]); 325 - } 326 - mcam->clk[i] = NULL; 327 - } 328 326 } 329 327 330 328 static void mcam_init_clk(struct mcam_camera *mcam) ··· 347 371 if (cam == NULL) 348 372 return -ENOMEM; 349 373 cam->pdev = pdev; 350 - cam->mipi_clk = NULL; 351 374 INIT_LIST_HEAD(&cam->devlist); 352 375 353 376 mcam = &cam->mcam; ··· 362 387 mcam->mclk_div = pdata->mclk_div; 363 388 mcam->bus_type = pdata->bus_type; 364 389 mcam->dphy = pdata->dphy; 390 + if (mcam->bus_type == V4L2_MBUS_CSI2) { 391 + cam->mipi_clk = devm_clk_get(mcam->dev, "mipi"); 392 + if ((IS_ERR(cam->mipi_clk) && mcam->dphy[2] == 0)) 393 + return PTR_ERR(cam->mipi_clk); 394 + } 365 395 mcam->mipi_enabled = false; 366 396 mcam->lane = pdata->lane; 367 397 mcam->chip_id = MCAM_ARMADA610; ··· 424 444 */ 425 445 ret = mmpcam_power_up(mcam); 426 446 if (ret) 427 - goto out_deinit_clk; 447 + return ret; 428 448 ret = mccic_register(mcam); 429 449 if (ret) 430 450 goto out_power_down; ··· 449 469 mccic_shutdown(mcam); 450 470 out_power_down: 451 471 mmpcam_power_down(mcam); 452 - out_deinit_clk: 453 - mcam_deinit_clk(mcam); 454 472 return ret; 455 473 } 456 474 ··· 460 482 mmpcam_remove_device(cam); 461 483 mccic_shutdown(mcam); 462 484 mmpcam_power_down(mcam); 463 - mcam_deinit_clk(mcam); 464 485 return 0; 465 486 } 466 487