diff options
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_drm_rotator.c')
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_rotator.c | 34 |
1 files changed, 9 insertions, 25 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_rotator.c b/drivers/gpu/drm/exynos/exynos_drm_rotator.c index 1c2366083c70..e9e83ef688f0 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_rotator.c +++ b/drivers/gpu/drm/exynos/exynos_drm_rotator.c | |||
@@ -139,7 +139,7 @@ static irqreturn_t rotator_irq_handler(int irq, void *arg) | |||
139 | { | 139 | { |
140 | struct rot_context *rot = arg; | 140 | struct rot_context *rot = arg; |
141 | struct exynos_drm_ippdrv *ippdrv = &rot->ippdrv; | 141 | struct exynos_drm_ippdrv *ippdrv = &rot->ippdrv; |
142 | struct drm_exynos_ipp_cmd_node *c_node = ippdrv->cmd; | 142 | struct drm_exynos_ipp_cmd_node *c_node = ippdrv->c_node; |
143 | struct drm_exynos_ipp_event_work *event_work = c_node->event_work; | 143 | struct drm_exynos_ipp_event_work *event_work = c_node->event_work; |
144 | enum rot_irq_status irq_status; | 144 | enum rot_irq_status irq_status; |
145 | u32 val; | 145 | u32 val; |
@@ -513,6 +513,7 @@ static inline bool rotator_check_drm_flip(enum drm_exynos_flip flip) | |||
513 | case EXYNOS_DRM_FLIP_NONE: | 513 | case EXYNOS_DRM_FLIP_NONE: |
514 | case EXYNOS_DRM_FLIP_VERTICAL: | 514 | case EXYNOS_DRM_FLIP_VERTICAL: |
515 | case EXYNOS_DRM_FLIP_HORIZONTAL: | 515 | case EXYNOS_DRM_FLIP_HORIZONTAL: |
516 | case EXYNOS_DRM_FLIP_BOTH: | ||
516 | return true; | 517 | return true; |
517 | default: | 518 | default: |
518 | DRM_DEBUG_KMS("%s:invalid flip\n", __func__); | 519 | DRM_DEBUG_KMS("%s:invalid flip\n", __func__); |
@@ -638,7 +639,7 @@ static int rotator_ippdrv_start(struct device *dev, enum drm_exynos_ipp_cmd cmd) | |||
638 | return 0; | 639 | return 0; |
639 | } | 640 | } |
640 | 641 | ||
641 | static int __devinit rotator_probe(struct platform_device *pdev) | 642 | static int rotator_probe(struct platform_device *pdev) |
642 | { | 643 | { |
643 | struct device *dev = &pdev->dev; | 644 | struct device *dev = &pdev->dev; |
644 | struct rot_context *rot; | 645 | struct rot_context *rot; |
@@ -655,34 +656,26 @@ static int __devinit rotator_probe(struct platform_device *pdev) | |||
655 | platform_get_device_id(pdev)->driver_data; | 656 | platform_get_device_id(pdev)->driver_data; |
656 | 657 | ||
657 | rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 658 | rot->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
658 | if (!rot->regs_res) { | ||
659 | dev_err(dev, "failed to find registers\n"); | ||
660 | ret = -ENOENT; | ||
661 | goto err_get_resource; | ||
662 | } | ||
663 | |||
664 | rot->regs = devm_request_and_ioremap(dev, rot->regs_res); | 659 | rot->regs = devm_request_and_ioremap(dev, rot->regs_res); |
665 | if (!rot->regs) { | 660 | if (!rot->regs) { |
666 | dev_err(dev, "failed to map register\n"); | 661 | dev_err(dev, "failed to map register\n"); |
667 | ret = -ENXIO; | 662 | return -ENXIO; |
668 | goto err_get_resource; | ||
669 | } | 663 | } |
670 | 664 | ||
671 | rot->irq = platform_get_irq(pdev, 0); | 665 | rot->irq = platform_get_irq(pdev, 0); |
672 | if (rot->irq < 0) { | 666 | if (rot->irq < 0) { |
673 | dev_err(dev, "failed to get irq\n"); | 667 | dev_err(dev, "failed to get irq\n"); |
674 | ret = rot->irq; | 668 | return rot->irq; |
675 | goto err_get_irq; | ||
676 | } | 669 | } |
677 | 670 | ||
678 | ret = request_threaded_irq(rot->irq, NULL, rotator_irq_handler, | 671 | ret = request_threaded_irq(rot->irq, NULL, rotator_irq_handler, |
679 | IRQF_ONESHOT, "drm_rotator", rot); | 672 | IRQF_ONESHOT, "drm_rotator", rot); |
680 | if (ret < 0) { | 673 | if (ret < 0) { |
681 | dev_err(dev, "failed to request irq\n"); | 674 | dev_err(dev, "failed to request irq\n"); |
682 | goto err_get_irq; | 675 | return ret; |
683 | } | 676 | } |
684 | 677 | ||
685 | rot->clock = clk_get(dev, "rotator"); | 678 | rot->clock = devm_clk_get(dev, "rotator"); |
686 | if (IS_ERR_OR_NULL(rot->clock)) { | 679 | if (IS_ERR_OR_NULL(rot->clock)) { |
687 | dev_err(dev, "failed to get clock\n"); | 680 | dev_err(dev, "failed to get clock\n"); |
688 | ret = PTR_ERR(rot->clock); | 681 | ret = PTR_ERR(rot->clock); |
@@ -720,17 +713,12 @@ static int __devinit rotator_probe(struct platform_device *pdev) | |||
720 | err_ippdrv_register: | 713 | err_ippdrv_register: |
721 | devm_kfree(dev, ippdrv->prop_list); | 714 | devm_kfree(dev, ippdrv->prop_list); |
722 | pm_runtime_disable(dev); | 715 | pm_runtime_disable(dev); |
723 | clk_put(rot->clock); | ||
724 | err_clk_get: | 716 | err_clk_get: |
725 | free_irq(rot->irq, rot); | 717 | free_irq(rot->irq, rot); |
726 | err_get_irq: | ||
727 | devm_iounmap(dev, rot->regs); | ||
728 | err_get_resource: | ||
729 | devm_kfree(dev, rot); | ||
730 | return ret; | 718 | return ret; |
731 | } | 719 | } |
732 | 720 | ||
733 | static int __devexit rotator_remove(struct platform_device *pdev) | 721 | static int rotator_remove(struct platform_device *pdev) |
734 | { | 722 | { |
735 | struct device *dev = &pdev->dev; | 723 | struct device *dev = &pdev->dev; |
736 | struct rot_context *rot = dev_get_drvdata(dev); | 724 | struct rot_context *rot = dev_get_drvdata(dev); |
@@ -740,12 +728,8 @@ static int __devexit rotator_remove(struct platform_device *pdev) | |||
740 | exynos_drm_ippdrv_unregister(ippdrv); | 728 | exynos_drm_ippdrv_unregister(ippdrv); |
741 | 729 | ||
742 | pm_runtime_disable(dev); | 730 | pm_runtime_disable(dev); |
743 | clk_put(rot->clock); | ||
744 | 731 | ||
745 | free_irq(rot->irq, rot); | 732 | free_irq(rot->irq, rot); |
746 | devm_iounmap(dev, rot->regs); | ||
747 | |||
748 | devm_kfree(dev, rot); | ||
749 | 733 | ||
750 | return 0; | 734 | return 0; |
751 | } | 735 | } |
@@ -845,7 +829,7 @@ static const struct dev_pm_ops rotator_pm_ops = { | |||
845 | 829 | ||
846 | struct platform_driver rotator_driver = { | 830 | struct platform_driver rotator_driver = { |
847 | .probe = rotator_probe, | 831 | .probe = rotator_probe, |
848 | .remove = __devexit_p(rotator_remove), | 832 | .remove = rotator_remove, |
849 | .id_table = rotator_driver_ids, | 833 | .id_table = rotator_driver_ids, |
850 | .driver = { | 834 | .driver = { |
851 | .name = "exynos-rot", | 835 | .name = "exynos-rot", |