forked from Minki/linux
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> Signed-off-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
This commit is contained in:
parent
422bd00ea6
commit
ae9dace290
@ -345,6 +345,10 @@ static int __init exynos_drm_init(void)
|
|||||||
ret = platform_driver_register(&exynos_drm_common_hdmi_driver);
|
ret = platform_driver_register(&exynos_drm_common_hdmi_driver);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out_common_hdmi;
|
goto out_common_hdmi;
|
||||||
|
|
||||||
|
ret = exynos_platform_device_hdmi_register();
|
||||||
|
if (ret < 0)
|
||||||
|
goto out_common_hdmi_dev;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_EXYNOS_VIDI
|
#ifdef CONFIG_DRM_EXYNOS_VIDI
|
||||||
@ -382,11 +386,13 @@ out_g2d:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_EXYNOS_VIDI
|
#ifdef CONFIG_DRM_EXYNOS_VIDI
|
||||||
out_vidi:
|
|
||||||
platform_driver_unregister(&vidi_driver);
|
platform_driver_unregister(&vidi_driver);
|
||||||
|
out_vidi:
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_EXYNOS_HDMI
|
#ifdef CONFIG_DRM_EXYNOS_HDMI
|
||||||
|
exynos_platform_device_hdmi_unregister();
|
||||||
|
out_common_hdmi_dev:
|
||||||
platform_driver_unregister(&exynos_drm_common_hdmi_driver);
|
platform_driver_unregister(&exynos_drm_common_hdmi_driver);
|
||||||
out_common_hdmi:
|
out_common_hdmi:
|
||||||
platform_driver_unregister(&mixer_driver);
|
platform_driver_unregister(&mixer_driver);
|
||||||
@ -415,6 +421,7 @@ static void __exit exynos_drm_exit(void)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DRM_EXYNOS_HDMI
|
#ifdef CONFIG_DRM_EXYNOS_HDMI
|
||||||
|
exynos_platform_device_hdmi_unregister();
|
||||||
platform_driver_unregister(&exynos_drm_common_hdmi_driver);
|
platform_driver_unregister(&exynos_drm_common_hdmi_driver);
|
||||||
platform_driver_unregister(&mixer_driver);
|
platform_driver_unregister(&mixer_driver);
|
||||||
platform_driver_unregister(&hdmi_driver);
|
platform_driver_unregister(&hdmi_driver);
|
||||||
|
@ -328,6 +328,17 @@ int exynos_drm_subdrv_unregister(struct exynos_drm_subdrv *drm_subdrv);
|
|||||||
int exynos_drm_subdrv_open(struct drm_device *dev, struct drm_file *file);
|
int exynos_drm_subdrv_open(struct drm_device *dev, struct drm_file *file);
|
||||||
void exynos_drm_subdrv_close(struct drm_device *dev, struct drm_file *file);
|
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);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* this function unregisters exynos drm hdmi platform device if it exists.
|
||||||
|
*/
|
||||||
|
void exynos_platform_device_hdmi_unregister(void);
|
||||||
|
|
||||||
extern struct platform_driver fimd_driver;
|
extern struct platform_driver fimd_driver;
|
||||||
extern struct platform_driver hdmi_driver;
|
extern struct platform_driver hdmi_driver;
|
||||||
extern struct platform_driver mixer_driver;
|
extern struct platform_driver mixer_driver;
|
||||||
|
@ -29,6 +29,9 @@
|
|||||||
#define get_ctx_from_subdrv(subdrv) container_of(subdrv,\
|
#define get_ctx_from_subdrv(subdrv) container_of(subdrv,\
|
||||||
struct drm_hdmi_context, 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.
|
/* Common hdmi subdrv needs to access the hdmi and mixer though context.
|
||||||
* These should be initialied by the repective drivers */
|
* These should be initialied by the repective drivers */
|
||||||
static struct exynos_drm_hdmi_context *hdmi_ctx;
|
static struct exynos_drm_hdmi_context *hdmi_ctx;
|
||||||
@ -46,6 +49,25 @@ struct drm_hdmi_context {
|
|||||||
bool enabled[MIXER_WIN_NR];
|
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)
|
void exynos_hdmi_drv_attach(struct exynos_drm_hdmi_context *ctx)
|
||||||
{
|
{
|
||||||
if (ctx)
|
if (ctx)
|
||||||
|
Loading…
Reference in New Issue
Block a user