Commit f18acdeacbcf038df3c9b03a96193cb01ca45cbb

Authored by Sachin Kamat
Committed by Linus Torvalds
1 parent 0c98082621

drivers/video/exynos/exynos_mipi_dsi.c: use devm_* APIs

devm_* APIs are device managed and make exit and cleanup code simpler.
While at it also remove some unused labels and fix an error path.

Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Acked-by: Donghwa Lee <dh09.lee@samsung.com>
Cc: Inki Dae <inki.dae@samsung.com>
Cc: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 2 changed files with 17 additions and 52 deletions Side-by-side Diff

drivers/video/exynos/exynos_mipi_dsi.c
... ... @@ -338,7 +338,8 @@
338 338 struct mipi_dsim_ddi *dsim_ddi;
339 339 int ret = -EINVAL;
340 340  
341   - dsim = kzalloc(sizeof(struct mipi_dsim_device), GFP_KERNEL);
  341 + dsim = devm_kzalloc(&pdev->dev, sizeof(struct mipi_dsim_device),
  342 + GFP_KERNEL);
342 343 if (!dsim) {
343 344 dev_err(&pdev->dev, "failed to allocate dsim object.\n");
344 345 return -ENOMEM;
345 346  
... ... @@ -352,13 +353,13 @@
352 353 dsim_pd = (struct mipi_dsim_platform_data *)dsim->pd;
353 354 if (dsim_pd == NULL) {
354 355 dev_err(&pdev->dev, "failed to get platform data for dsim.\n");
355   - goto err_clock_get;
  356 + return -EINVAL;
356 357 }
357 358 /* get mipi_dsim_config. */
358 359 dsim_config = dsim_pd->dsim_config;
359 360 if (dsim_config == NULL) {
360 361 dev_err(&pdev->dev, "failed to get dsim config data.\n");
361   - goto err_clock_get;
  362 + return -EINVAL;
362 363 }
363 364  
364 365 dsim->dsim_config = dsim_config;
365 366  
366 367  
367 368  
368 369  
369 370  
370 371  
... ... @@ -366,41 +367,28 @@
366 367  
367 368 mutex_init(&dsim->lock);
368 369  
369   - ret = regulator_bulk_get(&pdev->dev, ARRAY_SIZE(supplies), supplies);
  370 + ret = devm_regulator_bulk_get(&pdev->dev, ARRAY_SIZE(supplies),
  371 + supplies);
370 372 if (ret) {
371 373 dev_err(&pdev->dev, "Failed to get regulators: %d\n", ret);
372   - goto err_clock_get;
  374 + return ret;
373 375 }
374 376  
375   - dsim->clock = clk_get(&pdev->dev, "dsim0");
  377 + dsim->clock = devm_clk_get(&pdev->dev, "dsim0");
376 378 if (IS_ERR(dsim->clock)) {
377 379 dev_err(&pdev->dev, "failed to get dsim clock source\n");
378   - ret = -ENODEV;
379   - goto err_clock_get;
  380 + return -ENODEV;
380 381 }
381 382  
382 383 clk_enable(dsim->clock);
383 384  
384 385 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
385   - if (!res) {
386   - dev_err(&pdev->dev, "failed to get io memory region\n");
387   - ret = -ENODEV;
388   - goto err_platform_get;
389   - }
390 386  
391   - dsim->res = request_mem_region(res->start, resource_size(res),
392   - dev_name(&pdev->dev));
393   - if (!dsim->res) {
394   - dev_err(&pdev->dev, "failed to request io memory region\n");
395   - ret = -ENOMEM;
396   - goto err_mem_region;
397   - }
398   -
399   - dsim->reg_base = ioremap(res->start, resource_size(res));
  387 + dsim->reg_base = devm_request_and_ioremap(&pdev->dev, res);
400 388 if (!dsim->reg_base) {
401 389 dev_err(&pdev->dev, "failed to remap io region\n");
402 390 ret = -ENOMEM;
403   - goto err_ioremap;
  391 + goto error;
404 392 }
405 393  
406 394 mutex_init(&dsim->lock);
407 395  
408 396  
409 397  
... ... @@ -410,26 +398,27 @@
410 398 if (!dsim_ddi) {
411 399 dev_err(&pdev->dev, "mipi_dsim_ddi object not found.\n");
412 400 ret = -EINVAL;
413   - goto err_bind;
  401 + goto error;
414 402 }
415 403  
416 404 dsim->irq = platform_get_irq(pdev, 0);
417 405 if (IS_ERR_VALUE(dsim->irq)) {
418 406 dev_err(&pdev->dev, "failed to request dsim irq resource\n");
419 407 ret = -EINVAL;
420   - goto err_platform_get_irq;
  408 + goto error;
421 409 }
422 410  
423 411 init_completion(&dsim_wr_comp);
424 412 init_completion(&dsim_rd_comp);
425 413 platform_set_drvdata(pdev, dsim);
426 414  
427   - ret = request_irq(dsim->irq, exynos_mipi_dsi_interrupt_handler,
  415 + ret = devm_request_irq(&pdev->dev, dsim->irq,
  416 + exynos_mipi_dsi_interrupt_handler,
428 417 IRQF_SHARED, dev_name(&pdev->dev), dsim);
429 418 if (ret != 0) {
430 419 dev_err(&pdev->dev, "failed to request dsim irq\n");
431 420 ret = -EINVAL;
432   - goto err_bind;
  421 + goto error;
433 422 }
434 423  
435 424 /* enable interrupts */
436 425  
... ... @@ -471,22 +460,8 @@
471 460  
472 461 return 0;
473 462  
474   -err_bind:
475   - iounmap(dsim->reg_base);
476   -
477   -err_ioremap:
478   - release_mem_region(dsim->res->start, resource_size(dsim->res));
479   -
480   -err_mem_region:
481   - release_resource(dsim->res);
482   -
483   -err_platform_get:
  463 +error:
484 464 clk_disable(dsim->clock);
485   - clk_put(dsim->clock);
486   -err_clock_get:
487   - kfree(dsim);
488   -
489   -err_platform_get_irq:
490 465 return ret;
491 466 }
492 467  
493 468  
494 469  
... ... @@ -496,14 +471,8 @@
496 471 struct mipi_dsim_ddi *dsim_ddi, *next;
497 472 struct mipi_dsim_lcd_driver *dsim_lcd_drv;
498 473  
499   - iounmap(dsim->reg_base);
500   -
501 474 clk_disable(dsim->clock);
502   - clk_put(dsim->clock);
503 475  
504   - release_resource(dsim->res);
505   - release_mem_region(dsim->res->start, resource_size(dsim->res));
506   -
507 476 list_for_each_entry_safe(dsim_ddi, next, &dsim_ddi_list, list) {
508 477 if (dsim_ddi) {
509 478 if (dsim->id != dsim_ddi->bus_id)
... ... @@ -517,9 +486,6 @@
517 486 kfree(dsim_ddi);
518 487 }
519 488 }
520   -
521   - regulator_bulk_free(ARRAY_SIZE(supplies), supplies);
522   - kfree(dsim);
523 489  
524 490 return 0;
525 491 }
include/video/exynos_mipi_dsim.h
... ... @@ -220,7 +220,6 @@
220 220 struct mipi_dsim_device {
221 221 struct device *dev;
222 222 int id;
223   - struct resource *res;
224 223 struct clk *clock;
225 224 unsigned int irq;
226 225 void __iomem *reg_base;