The hdmi common device registration function does not need extern definition
and for error case and unregister case, exynos_drm_hdmi_pdev should be cleared.

Signed-off-by: Seung-Woo Kim <sw0312.kim at samsung.com>
---
This commit is based on exynos-drm-next and my previous commit "drm/exynos: fix
wrong return check for platform_register_simple".
Link: http://www.mail-archive.com/dri-devel at 
lists.freedesktop.org/msg37144.html

 drivers/gpu/drm/exynos/exynos_drm_drv.h  |    2 +-
 drivers/gpu/drm/exynos/exynos_drm_hdmi.c |   14 ++++++++++----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h 
b/drivers/gpu/drm/exynos/exynos_drm_drv.h
index 4606fac..635d4c5 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h
@@ -322,7 +322,7 @@ void exynos_drm_subdrv_close(struct drm_device *dev, struct 
drm_file *file);
  * this function registers exynos drm hdmi platform device. It ensures only one
  * instance of the device is created.
  */
-extern int exynos_platform_device_hdmi_register(void);
+int exynos_platform_device_hdmi_register(void);

 /*
  * this function unregisters exynos drm hdmi platform device if it exists.
diff --git a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c 
b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c
index 6986a1b..ba2f0f1 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c
@@ -51,21 +51,27 @@ struct drm_hdmi_context {

 int exynos_platform_device_hdmi_register(void)
 {
+       struct platform_device *pdev;
+
        if (exynos_drm_hdmi_pdev)
                return -EEXIST;

-       exynos_drm_hdmi_pdev = platform_device_register_simple(
+       pdev = platform_device_register_simple(
                        "exynos-drm-hdmi", -1, NULL, 0);
-       if (IS_ERR(exynos_drm_hdmi_pdev))
-               return PTR_ERR(exynos_drm_hdmi_pdev);
+       if (IS_ERR(pdev))
+               return PTR_ERR(pdev);
+
+       exynos_drm_hdmi_pdev = pdev;

        return 0;
 }

 void exynos_platform_device_hdmi_unregister(void)
 {
-       if (exynos_drm_hdmi_pdev)
+       if (exynos_drm_hdmi_pdev) {
                platform_device_unregister(exynos_drm_hdmi_pdev);
+               exynos_drm_hdmi_pdev = NULL;
+       }
 }

 void exynos_hdmi_drv_attach(struct exynos_drm_hdmi_context *ctx)
-- 
1.7.4.1

Reply via email to