Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b73d1230 authored by Inki Dae's avatar Inki Dae Committed by Dave Airlie
Browse files

drm/exynos: added virtual display driver.



this driver would be used for wireless display. virtual display
driver has independent crtc, encoder and connector and to use
this driver, user application should send edid data to this driver
from wireless display.

Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
parent da0df92b
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -21,3 +21,9 @@ config DRM_EXYNOS_HDMI
	depends on DRM_EXYNOS && !VIDEO_SAMSUNG_S5P_TV
	help
	  Choose this option if you want to use Exynos HDMI for DRM.

config DRM_EXYNOS_VIDI
	bool "Exynos DRM Virtual Display"
	depends on DRM_EXYNOS
	help
	  Choose this option if you want to use Exynos VIDI for DRM.
+1 −0
Original line number Diff line number Diff line
@@ -12,5 +12,6 @@ exynosdrm-$(CONFIG_DRM_EXYNOS_FIMD) += exynos_drm_fimd.o
exynosdrm-$(CONFIG_DRM_EXYNOS_HDMI)	+= exynos_hdmi.o exynos_mixer.o \
					   exynos_ddc.o exynos_hdmiphy.o \
					   exynos_drm_hdmi.o
exynosdrm-$(CONFIG_DRM_EXYNOS_VIDI)	+= exynos_drm_vidi.o

obj-$(CONFIG_DRM_EXYNOS)		+= exynosdrm.o
+4 −0
Original line number Diff line number Diff line
@@ -315,6 +315,10 @@ struct drm_connector *exynos_drm_connector_create(struct drm_device *dev,
		connector->interlace_allowed = true;
		connector->polled = DRM_CONNECTOR_POLL_HPD;
		break;
	case EXYNOS_DISPLAY_TYPE_VIDI:
		type = DRM_MODE_CONNECTOR_VIRTUAL;
		connector->polled = DRM_CONNECTOR_POLL_HPD;
		break;
	default:
		type = DRM_MODE_CONNECTOR_Unknown;
		break;
+18 −0
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@
#include "exynos_drm_fb.h"
#include "exynos_drm_gem.h"
#include "exynos_drm_plane.h"
#include "exynos_drm_vidi.h"

#define DRIVER_NAME	"exynos"
#define DRIVER_DESC	"Samsung SoC DRM"
@@ -208,6 +209,8 @@ static struct drm_ioctl_desc exynos_ioctls[] = {
			exynos_drm_gem_mmap_ioctl, DRM_UNLOCKED | DRM_AUTH),
	DRM_IOCTL_DEF_DRV(EXYNOS_PLANE_SET_ZPOS, exynos_plane_set_zpos_ioctl,
			DRM_UNLOCKED | DRM_AUTH),
	DRM_IOCTL_DEF_DRV(EXYNOS_VIDI_CONNECTION,
			vidi_connection_ioctl, DRM_UNLOCKED | DRM_AUTH),
};

static const struct file_operations exynos_drm_driver_fops = {
@@ -298,6 +301,12 @@ static int __init exynos_drm_init(void)
		goto out_common_hdmi;
#endif

#ifdef CONFIG_DRM_EXYNOS_VIDI
	ret = platform_driver_register(&vidi_driver);
	if (ret < 0)
		goto out_vidi;
#endif

	ret = platform_driver_register(&exynos_drm_platform_driver);
	if (ret < 0)
		goto out;
@@ -305,6 +314,11 @@ static int __init exynos_drm_init(void)
	return 0;

out:
#ifdef CONFIG_DRM_EXYNOS_VIDI
out_vidi:
	platform_driver_unregister(&vidi_driver);
#endif

#ifdef CONFIG_DRM_EXYNOS_HDMI
	platform_driver_unregister(&exynos_drm_common_hdmi_driver);
out_common_hdmi:
@@ -333,6 +347,10 @@ static void __exit exynos_drm_exit(void)
	platform_driver_unregister(&hdmi_driver);
#endif

#ifdef CONFIG_DRM_EXYNOS_VIDI
	platform_driver_unregister(&vidi_driver);
#endif

#ifdef CONFIG_DRM_EXYNOS_FIMD
	platform_driver_unregister(&fimd_driver);
#endif
+5 −2
Original line number Diff line number Diff line
@@ -32,9 +32,9 @@
#include <linux/module.h>
#include "drm.h"

#define MAX_CRTC	2
#define MAX_CRTC	3
#define MAX_PLANE	5
#define MAX_FB_BUFFER	3
#define MAX_FB_BUFFER	4
#define DEFAULT_ZPOS	-1

struct drm_device;
@@ -50,6 +50,8 @@ enum exynos_drm_output_type {
	EXYNOS_DISPLAY_TYPE_LCD,
	/* HDMI Interface. */
	EXYNOS_DISPLAY_TYPE_HDMI,
	/* Virtual Display Interface. */
	EXYNOS_DISPLAY_TYPE_VIDI,
};

/*
@@ -284,4 +286,5 @@ extern struct platform_driver fimd_driver;
extern struct platform_driver hdmi_driver;
extern struct platform_driver mixer_driver;
extern struct platform_driver exynos_drm_common_hdmi_driver;
extern struct platform_driver vidi_driver;
#endif
Loading