aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSeung-Woo Kim <sw0312.kim@samsung.com>2013-04-23 01:02:53 -0400
committerInki Dae <inki.dae@samsung.com>2013-04-29 01:35:32 -0400
commit43f4190047a088d2f1ce7fe5c5ae6485f943edc6 (patch)
tree1a4045bdd2feefa740d53d2b3d5000ba39bb2b52
parent0f6f95922e4def60b9e55cecc1fdbaacda9c426d (diff)
drm/exynos: added ipp device registration to drm driver
This patch added exynos-drm-ipp platform device registration to the exynos drm driver. When DT is enabled, platform devices need to be registered within the driver code. This patch fits the requirement of both DT and Non DT based drm drivers. Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com> Signed-off-by: Donghwa Lee <dh09.lee@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.c7
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_drv.h10
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_ipp.c27
3 files changed, 44 insertions, 0 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c
index 488278ccb2a8..ba6d995e4375 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c
@@ -380,6 +380,10 @@ static int __init exynos_drm_init(void)
380 ret = platform_driver_register(&ipp_driver); 380 ret = platform_driver_register(&ipp_driver);
381 if (ret < 0) 381 if (ret < 0)
382 goto out_ipp; 382 goto out_ipp;
383
384 ret = exynos_platform_device_ipp_register();
385 if (ret < 0)
386 goto out_ipp_dev;
383#endif 387#endif
384 388
385 ret = platform_driver_register(&exynos_drm_platform_driver); 389 ret = platform_driver_register(&exynos_drm_platform_driver);
@@ -400,6 +404,8 @@ out:
400 404
401out_drm: 405out_drm:
402#ifdef CONFIG_DRM_EXYNOS_IPP 406#ifdef CONFIG_DRM_EXYNOS_IPP
407 exynos_platform_device_ipp_unregister();
408out_ipp_dev:
403 platform_driver_unregister(&ipp_driver); 409 platform_driver_unregister(&ipp_driver);
404out_ipp: 410out_ipp:
405#endif 411#endif
@@ -456,6 +462,7 @@ static void __exit exynos_drm_exit(void)
456 platform_driver_unregister(&exynos_drm_platform_driver); 462 platform_driver_unregister(&exynos_drm_platform_driver);
457 463
458#ifdef CONFIG_DRM_EXYNOS_IPP 464#ifdef CONFIG_DRM_EXYNOS_IPP
465 exynos_platform_device_ipp_unregister();
459 platform_driver_unregister(&ipp_driver); 466 platform_driver_unregister(&ipp_driver);
460#endif 467#endif
461 468
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.h b/drivers/gpu/drm/exynos/exynos_drm_drv.h
index 635d4c516798..680a7c1b9dea 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_drv.h
+++ b/drivers/gpu/drm/exynos/exynos_drm_drv.h
@@ -329,6 +329,16 @@ int exynos_platform_device_hdmi_register(void);
329 */ 329 */
330void exynos_platform_device_hdmi_unregister(void); 330void exynos_platform_device_hdmi_unregister(void);
331 331
332/*
333 * this function registers exynos drm ipp platform device.
334 */
335int exynos_platform_device_ipp_register(void);
336
337/*
338 * this function unregisters exynos drm ipp platform device if it exists.
339 */
340void exynos_platform_device_ipp_unregister(void);
341
332extern struct platform_driver fimd_driver; 342extern struct platform_driver fimd_driver;
333extern struct platform_driver hdmi_driver; 343extern struct platform_driver hdmi_driver;
334extern struct platform_driver mixer_driver; 344extern struct platform_driver mixer_driver;
diff --git a/drivers/gpu/drm/exynos/exynos_drm_ipp.c b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
index 1adce07ecb5b..29d2ad314490 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_ipp.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_ipp.c
@@ -47,6 +47,9 @@
47#define get_ipp_context(dev) platform_get_drvdata(to_platform_device(dev)) 47#define get_ipp_context(dev) platform_get_drvdata(to_platform_device(dev))
48#define ipp_is_m2m_cmd(c) (c == IPP_CMD_M2M) 48#define ipp_is_m2m_cmd(c) (c == IPP_CMD_M2M)
49 49
50/* platform device pointer for ipp device. */
51static struct platform_device *exynos_drm_ipp_pdev;
52
50/* 53/*
51 * A structure of event. 54 * A structure of event.
52 * 55 *
@@ -102,6 +105,30 @@ static LIST_HEAD(exynos_drm_ippdrv_list);
102static DEFINE_MUTEX(exynos_drm_ippdrv_lock); 105static DEFINE_MUTEX(exynos_drm_ippdrv_lock);
103static BLOCKING_NOTIFIER_HEAD(exynos_drm_ippnb_list); 106static BLOCKING_NOTIFIER_HEAD(exynos_drm_ippnb_list);
104 107
108int exynos_platform_device_ipp_register(void)
109{
110 struct platform_device *pdev;
111
112 if (exynos_drm_ipp_pdev)
113 return -EEXIST;
114
115 pdev = platform_device_register_simple("exynos-drm-ipp", -1, NULL, 0);
116 if (IS_ERR(pdev))
117 return PTR_ERR(pdev);
118
119 exynos_drm_ipp_pdev = pdev;
120
121 return 0;
122}
123
124void exynos_platform_device_ipp_unregister(void)
125{
126 if (exynos_drm_ipp_pdev) {
127 platform_device_unregister(exynos_drm_ipp_pdev);
128 exynos_drm_ipp_pdev = NULL;
129 }
130}
131
105int exynos_drm_ippdrv_register(struct exynos_drm_ippdrv *ippdrv) 132int exynos_drm_ippdrv_register(struct exynos_drm_ippdrv *ippdrv)
106{ 133{
107 DRM_DEBUG_KMS("%s\n", __func__); 134 DRM_DEBUG_KMS("%s\n", __func__);