Message ID | 1350057640-20984-3-git-send-email-rahul.sharma@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
> -----Original Message----- > From: Rahul Sharma [mailto:rahul.sharma@samsung.com] > Sent: Saturday, October 13, 2012 1:01 AM > To: dri-devel@lists.freedesktop.org > Cc: t.stanislaws@samsung.com; sw0312.kim@samsung.com; inki.dae@samsung.com; > jy0922.shim@samsung.com; kyungmin.park@samsung.com; thomas.ab@samsung.com; > prashanth.g@samsung.com; joshi@samsung.com; s.shirish@samsung.com; > r.sh.open@gmail.com; rahul.sharma@samsung.com > Subject: [PATCH v1 2/2] drm: exynos: moved exynos drm hdmi device > registration to drm driver > > This patch moved the exynos-drm-hdmi platform device registration to the > drm > driver. When DT is enabled, platform devices needs to be registered within > the > driver code. This patch fits the requirement of both DT and Non DT based > drm > drivers. > > Signed-off-by: Rahul Sharma <rahul.sharma@samsung.com> > --- > drivers/gpu/drm/exynos/exynos_drm_drv.c | 10 +++++++++- > drivers/gpu/drm/exynos/exynos_drm_hdmi.c | 22 ++++++++++++++++++++++ > drivers/gpu/drm/exynos/exynos_drm_hdmi.h | 2 ++ > 3 files changed, 33 insertions(+), 1 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c > b/drivers/gpu/drm/exynos/exynos_drm_drv.c > index 4200f15..b491847 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c > @@ -41,6 +41,7 @@ > #include "exynos_drm_vidi.h" > #include "exynos_drm_dmabuf.h" > #include "exynos_drm_g2d.h" > +#include "exynos_drm_hdmi.h" One more thing, could you move below declarations into exynos_drm_drv.h and remove above "#include "exynos_drm_hdmi.h"? this makes unnecessary declarations and definitions are included. and also leave comments to each declaration. "int exynos_platform_device_hdmi_register(void); void exynos_platform_device_hdmi_unregister(void);" Thanks, Inki Dae > > #define DRIVER_NAME "exynos" > #define DRIVER_DESC "Samsung SoC DRM" > @@ -329,6 +330,10 @@ static int __init exynos_drm_init(void) > ret = platform_driver_register(&exynos_drm_common_hdmi_driver); > if (ret < 0) > goto out_common_hdmi; > + > + ret = exynos_platform_device_hdmi_register(); > + if (ret < 0) > + goto out_common_hdmi_dev; > #endif > > #ifdef CONFIG_DRM_EXYNOS_VIDI > @@ -366,11 +371,13 @@ out_g2d: > #endif > > #ifdef CONFIG_DRM_EXYNOS_VIDI > -out_vidi: > platform_driver_unregister(&vidi_driver); > +out_vidi: > #endif > > #ifdef CONFIG_DRM_EXYNOS_HDMI > + exynos_platform_device_hdmi_unregister(); > +out_common_hdmi_dev: > platform_driver_unregister(&exynos_drm_common_hdmi_driver); > out_common_hdmi: > platform_driver_unregister(&mixer_driver); > @@ -399,6 +406,7 @@ static void __exit exynos_drm_exit(void) > #endif > > #ifdef CONFIG_DRM_EXYNOS_HDMI > + exynos_platform_device_hdmi_unregister(); > platform_driver_unregister(&exynos_drm_common_hdmi_driver); > platform_driver_unregister(&mixer_driver); > platform_driver_unregister(&hdmi_driver); > diff --git a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c > b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c > index 85304c4..a4c84c1 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c > +++ b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c > @@ -29,6 +29,9 @@ > #define get_ctx_from_subdrv(subdrv) container_of(subdrv,\ > struct drm_hdmi_context, subdrv); > > +/* platform device pointer for common drm hdmi device. */ > +static struct platform_device *exynos_drm_hdmi_pdev; > + > /* Common hdmi subdrv needs to access the hdmi and mixer though context. > * These should be initialied by the repective drivers */ > static struct exynos_drm_hdmi_context *hdmi_ctx; > @@ -46,6 +49,25 @@ struct drm_hdmi_context { > bool enabled[MIXER_WIN_NR]; > }; > > +int exynos_platform_device_hdmi_register(void) > +{ > + if (exynos_drm_hdmi_pdev) > + return -EEXIST; > + > + exynos_drm_hdmi_pdev = platform_device_register_simple( > + "exynos-drm-hdmi", -1, NULL, 0); > + if (IS_ERR_OR_NULL(exynos_drm_hdmi_pdev)) > + return PTR_ERR(exynos_drm_hdmi_pdev); > + > + return 0; > +} > + > +void exynos_platform_device_hdmi_unregister(void) > +{ > + if (exynos_drm_hdmi_pdev) > + platform_device_unregister(exynos_drm_hdmi_pdev); > +} > + > void exynos_hdmi_drv_attach(struct exynos_drm_hdmi_context *ctx) > { > if (ctx) > diff --git a/drivers/gpu/drm/exynos/exynos_drm_hdmi.h > b/drivers/gpu/drm/exynos/exynos_drm_hdmi.h > index 2da5ffd..192329c 100644 > --- a/drivers/gpu/drm/exynos/exynos_drm_hdmi.h > +++ b/drivers/gpu/drm/exynos/exynos_drm_hdmi.h > @@ -77,4 +77,6 @@ void exynos_hdmi_drv_attach(struct > exynos_drm_hdmi_context *ctx); > void exynos_mixer_drv_attach(struct exynos_drm_hdmi_context *ctx); > void exynos_hdmi_ops_register(struct exynos_hdmi_ops *ops); > void exynos_mixer_ops_register(struct exynos_mixer_ops *ops); > +int exynos_platform_device_hdmi_register(void); > +void exynos_platform_device_hdmi_unregister(void); > #endif > -- > 1.7.0.4
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 4200f15..b491847 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -41,6 +41,7 @@ #include "exynos_drm_vidi.h" #include "exynos_drm_dmabuf.h" #include "exynos_drm_g2d.h" +#include "exynos_drm_hdmi.h" #define DRIVER_NAME "exynos" #define DRIVER_DESC "Samsung SoC DRM" @@ -329,6 +330,10 @@ static int __init exynos_drm_init(void) ret = platform_driver_register(&exynos_drm_common_hdmi_driver); if (ret < 0) goto out_common_hdmi; + + ret = exynos_platform_device_hdmi_register(); + if (ret < 0) + goto out_common_hdmi_dev; #endif #ifdef CONFIG_DRM_EXYNOS_VIDI @@ -366,11 +371,13 @@ out_g2d: #endif #ifdef CONFIG_DRM_EXYNOS_VIDI -out_vidi: platform_driver_unregister(&vidi_driver); +out_vidi: #endif #ifdef CONFIG_DRM_EXYNOS_HDMI + exynos_platform_device_hdmi_unregister(); +out_common_hdmi_dev: platform_driver_unregister(&exynos_drm_common_hdmi_driver); out_common_hdmi: platform_driver_unregister(&mixer_driver); @@ -399,6 +406,7 @@ static void __exit exynos_drm_exit(void) #endif #ifdef CONFIG_DRM_EXYNOS_HDMI + exynos_platform_device_hdmi_unregister(); platform_driver_unregister(&exynos_drm_common_hdmi_driver); platform_driver_unregister(&mixer_driver); platform_driver_unregister(&hdmi_driver); diff --git a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c index 85304c4..a4c84c1 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_hdmi.c @@ -29,6 +29,9 @@ #define get_ctx_from_subdrv(subdrv) container_of(subdrv,\ struct drm_hdmi_context, subdrv); +/* platform device pointer for common drm hdmi device. */ +static struct platform_device *exynos_drm_hdmi_pdev; + /* Common hdmi subdrv needs to access the hdmi and mixer though context. * These should be initialied by the repective drivers */ static struct exynos_drm_hdmi_context *hdmi_ctx; @@ -46,6 +49,25 @@ struct drm_hdmi_context { bool enabled[MIXER_WIN_NR]; }; +int exynos_platform_device_hdmi_register(void) +{ + if (exynos_drm_hdmi_pdev) + return -EEXIST; + + exynos_drm_hdmi_pdev = platform_device_register_simple( + "exynos-drm-hdmi", -1, NULL, 0); + if (IS_ERR_OR_NULL(exynos_drm_hdmi_pdev)) + return PTR_ERR(exynos_drm_hdmi_pdev); + + return 0; +} + +void exynos_platform_device_hdmi_unregister(void) +{ + if (exynos_drm_hdmi_pdev) + platform_device_unregister(exynos_drm_hdmi_pdev); +} + void exynos_hdmi_drv_attach(struct exynos_drm_hdmi_context *ctx) { if (ctx) diff --git a/drivers/gpu/drm/exynos/exynos_drm_hdmi.h b/drivers/gpu/drm/exynos/exynos_drm_hdmi.h index 2da5ffd..192329c 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_hdmi.h +++ b/drivers/gpu/drm/exynos/exynos_drm_hdmi.h @@ -77,4 +77,6 @@ void exynos_hdmi_drv_attach(struct exynos_drm_hdmi_context *ctx); void exynos_mixer_drv_attach(struct exynos_drm_hdmi_context *ctx); void exynos_hdmi_ops_register(struct exynos_hdmi_ops *ops); void exynos_mixer_ops_register(struct exynos_mixer_ops *ops); +int exynos_platform_device_hdmi_register(void); +void exynos_platform_device_hdmi_unregister(void); #endif
This patch moved the exynos-drm-hdmi platform device registration to the drm driver. When DT is enabled, platform devices needs to be registered within the driver code. This patch fits the requirement of both DT and Non DT based drm drivers. Signed-off-by: Rahul Sharma <rahul.sharma@samsung.com> --- drivers/gpu/drm/exynos/exynos_drm_drv.c | 10 +++++++++- drivers/gpu/drm/exynos/exynos_drm_hdmi.c | 22 ++++++++++++++++++++++ drivers/gpu/drm/exynos/exynos_drm_hdmi.h | 2 ++ 3 files changed, 33 insertions(+), 1 deletions(-)