diff options
| -rw-r--r-- | drivers/video/exynos/exynos_dp_core.c | 49 | ||||
| -rw-r--r-- | drivers/video/exynos/exynos_dp_core.h | 1 |
2 files changed, 12 insertions, 38 deletions
diff --git a/drivers/video/exynos/exynos_dp_core.c b/drivers/video/exynos/exynos_dp_core.c index ef4d1ab4cf4d..aabd214990d3 100644 --- a/drivers/video/exynos/exynos_dp_core.c +++ b/drivers/video/exynos/exynos_dp_core.c | |||
| @@ -858,7 +858,8 @@ static int __devinit exynos_dp_probe(struct platform_device *pdev) | |||
| 858 | return -EINVAL; | 858 | return -EINVAL; |
| 859 | } | 859 | } |
| 860 | 860 | ||
| 861 | dp = kzalloc(sizeof(struct exynos_dp_device), GFP_KERNEL); | 861 | dp = devm_kzalloc(&pdev->dev, sizeof(struct exynos_dp_device), |
| 862 | GFP_KERNEL); | ||
| 862 | if (!dp) { | 863 | if (!dp) { |
| 863 | dev_err(&pdev->dev, "no memory for device data\n"); | 864 | dev_err(&pdev->dev, "no memory for device data\n"); |
| 864 | return -ENOMEM; | 865 | return -ENOMEM; |
| @@ -869,8 +870,7 @@ static int __devinit exynos_dp_probe(struct platform_device *pdev) | |||
| 869 | dp->clock = clk_get(&pdev->dev, "dp"); | 870 | dp->clock = clk_get(&pdev->dev, "dp"); |
| 870 | if (IS_ERR(dp->clock)) { | 871 | if (IS_ERR(dp->clock)) { |
| 871 | dev_err(&pdev->dev, "failed to get clock\n"); | 872 | dev_err(&pdev->dev, "failed to get clock\n"); |
| 872 | ret = PTR_ERR(dp->clock); | 873 | return PTR_ERR(dp->clock); |
| 873 | goto err_dp; | ||
| 874 | } | 874 | } |
| 875 | 875 | ||
| 876 | clk_enable(dp->clock); | 876 | clk_enable(dp->clock); |
| @@ -882,35 +882,25 @@ static int __devinit exynos_dp_probe(struct platform_device *pdev) | |||
| 882 | goto err_clock; | 882 | goto err_clock; |
| 883 | } | 883 | } |
| 884 | 884 | ||
| 885 | res = request_mem_region(res->start, resource_size(res), | 885 | dp->reg_base = devm_request_and_ioremap(&pdev->dev, res); |
| 886 | dev_name(&pdev->dev)); | ||
| 887 | if (!res) { | ||
| 888 | dev_err(&pdev->dev, "failed to request registers region\n"); | ||
| 889 | ret = -EINVAL; | ||
| 890 | goto err_clock; | ||
| 891 | } | ||
| 892 | |||
| 893 | dp->res = res; | ||
| 894 | |||
| 895 | dp->reg_base = ioremap(res->start, resource_size(res)); | ||
| 896 | if (!dp->reg_base) { | 886 | if (!dp->reg_base) { |
| 897 | dev_err(&pdev->dev, "failed to ioremap\n"); | 887 | dev_err(&pdev->dev, "failed to ioremap\n"); |
| 898 | ret = -ENOMEM; | 888 | ret = -ENOMEM; |
| 899 | goto err_req_region; | 889 | goto err_clock; |
| 900 | } | 890 | } |
| 901 | 891 | ||
| 902 | dp->irq = platform_get_irq(pdev, 0); | 892 | dp->irq = platform_get_irq(pdev, 0); |
| 903 | if (!dp->irq) { | 893 | if (!dp->irq) { |
| 904 | dev_err(&pdev->dev, "failed to get irq\n"); | 894 | dev_err(&pdev->dev, "failed to get irq\n"); |
| 905 | ret = -ENODEV; | 895 | ret = -ENODEV; |
| 906 | goto err_ioremap; | 896 | goto err_clock; |
| 907 | } | 897 | } |
| 908 | 898 | ||
| 909 | ret = request_irq(dp->irq, exynos_dp_irq_handler, 0, | 899 | ret = devm_request_irq(&pdev->dev, dp->irq, exynos_dp_irq_handler, 0, |
| 910 | "exynos-dp", dp); | 900 | "exynos-dp", dp); |
| 911 | if (ret) { | 901 | if (ret) { |
| 912 | dev_err(&pdev->dev, "failed to request irq\n"); | 902 | dev_err(&pdev->dev, "failed to request irq\n"); |
| 913 | goto err_ioremap; | 903 | goto err_clock; |
| 914 | } | 904 | } |
| 915 | 905 | ||
| 916 | dp->video_info = pdata->video_info; | 906 | dp->video_info = pdata->video_info; |
| @@ -922,7 +912,7 @@ static int __devinit exynos_dp_probe(struct platform_device *pdev) | |||
| 922 | ret = exynos_dp_detect_hpd(dp); | 912 | ret = exynos_dp_detect_hpd(dp); |
| 923 | if (ret) { | 913 | if (ret) { |
| 924 | dev_err(&pdev->dev, "unable to detect hpd\n"); | 914 | dev_err(&pdev->dev, "unable to detect hpd\n"); |
| 925 | goto err_irq; | 915 | goto err_clock; |
| 926 | } | 916 | } |
| 927 | 917 | ||
| 928 | exynos_dp_handle_edid(dp); | 918 | exynos_dp_handle_edid(dp); |
| @@ -931,7 +921,7 @@ static int __devinit exynos_dp_probe(struct platform_device *pdev) | |||
| 931 | dp->video_info->link_rate); | 921 | dp->video_info->link_rate); |
| 932 | if (ret) { | 922 | if (ret) { |
| 933 | dev_err(&pdev->dev, "unable to do link train\n"); | 923 | dev_err(&pdev->dev, "unable to do link train\n"); |
| 934 | goto err_irq; | 924 | goto err_clock; |
| 935 | } | 925 | } |
| 936 | 926 | ||
| 937 | exynos_dp_enable_scramble(dp, 1); | 927 | exynos_dp_enable_scramble(dp, 1); |
| @@ -945,23 +935,15 @@ static int __devinit exynos_dp_probe(struct platform_device *pdev) | |||
| 945 | ret = exynos_dp_config_video(dp, dp->video_info); | 935 | ret = exynos_dp_config_video(dp, dp->video_info); |
| 946 | if (ret) { | 936 | if (ret) { |
| 947 | dev_err(&pdev->dev, "unable to config video\n"); | 937 | dev_err(&pdev->dev, "unable to config video\n"); |
| 948 | goto err_irq; | 938 | goto err_clock; |
| 949 | } | 939 | } |
| 950 | 940 | ||
| 951 | platform_set_drvdata(pdev, dp); | 941 | platform_set_drvdata(pdev, dp); |
| 952 | 942 | ||
| 953 | return 0; | 943 | return 0; |
| 954 | 944 | ||
| 955 | err_irq: | ||
| 956 | free_irq(dp->irq, dp); | ||
| 957 | err_ioremap: | ||
| 958 | iounmap(dp->reg_base); | ||
| 959 | err_req_region: | ||
| 960 | release_mem_region(res->start, resource_size(res)); | ||
| 961 | err_clock: | 945 | err_clock: |
| 962 | clk_put(dp->clock); | 946 | clk_put(dp->clock); |
| 963 | err_dp: | ||
| 964 | kfree(dp); | ||
| 965 | 947 | ||
| 966 | return ret; | 948 | return ret; |
| 967 | } | 949 | } |
| @@ -974,16 +956,9 @@ static int __devexit exynos_dp_remove(struct platform_device *pdev) | |||
| 974 | if (pdata && pdata->phy_exit) | 956 | if (pdata && pdata->phy_exit) |
| 975 | pdata->phy_exit(); | 957 | pdata->phy_exit(); |
| 976 | 958 | ||
| 977 | free_irq(dp->irq, dp); | ||
| 978 | iounmap(dp->reg_base); | ||
| 979 | |||
| 980 | clk_disable(dp->clock); | 959 | clk_disable(dp->clock); |
| 981 | clk_put(dp->clock); | 960 | clk_put(dp->clock); |
| 982 | 961 | ||
| 983 | release_mem_region(dp->res->start, resource_size(dp->res)); | ||
| 984 | |||
| 985 | kfree(dp); | ||
| 986 | |||
| 987 | return 0; | 962 | return 0; |
| 988 | } | 963 | } |
| 989 | 964 | ||
diff --git a/drivers/video/exynos/exynos_dp_core.h b/drivers/video/exynos/exynos_dp_core.h index 519c3a6a5c58..8f596b9e7b2b 100644 --- a/drivers/video/exynos/exynos_dp_core.h +++ b/drivers/video/exynos/exynos_dp_core.h | |||
| @@ -26,7 +26,6 @@ struct link_train { | |||
| 26 | 26 | ||
| 27 | struct exynos_dp_device { | 27 | struct exynos_dp_device { |
| 28 | struct device *dev; | 28 | struct device *dev; |
| 29 | struct resource *res; | ||
| 30 | struct clk *clock; | 29 | struct clk *clock; |
| 31 | unsigned int irq; | 30 | unsigned int irq; |
| 32 | void __iomem *reg_base; | 31 | void __iomem *reg_base; |
