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

Commit f2646380 authored by Eunchul Kim's avatar Eunchul Kim Committed by Inki Dae
Browse files

drm/exynos: add gsc ipp driver



This patch adds IPP subsystem-based gsc driver for exynos5 series.
GSC is stand for General SCaler and supports the following features:
- image scaler/rotator/crop/flip/csc and input/output DMA operations.
- image rotation and image effect functions.
- writeback and display output operations.
- M2M operation to crop, scale, rotation and csc.

The below is GSC hardware path:
Memory------->GSC------>Memory
FIMD--------->GSC------>HDMI
FIMD--------->GSC------>Memory
Memory------->GSC------>FIMD, Mixer

This driver is registered to IPP subsystem framework to be used by user side
and user can control the GSC hardware through some interfaces of IPP subsystem
framework.

Changelog v1 ~ v5:
- added comments, code fixups and cleanups.

Signed-off-by: default avatarEunchul Kim <chulspro.kim@samsung.com>
Signed-off-by: default avatarJinyoung Jeon <jy0.jeon@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
Signed-off-by: default avatarKyungmin.park <kyungmin.park@samsung.com>
parent bea8a429
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -64,3 +64,8 @@ config DRM_EXYNOS_ROTATOR
	help
	  Choose this option if you want to use Exynos Rotator for DRM.

config DRM_EXYNOS_GSC
	bool "Exynos DRM GSC"
	depends on DRM_EXYNOS_IPP && ARCH_EXYNOS5
	help
	  Choose this option if you want to use Exynos GSC for DRM.
+1 −0
Original line number Diff line number Diff line
@@ -19,5 +19,6 @@ exynosdrm-$(CONFIG_DRM_EXYNOS_G2D) += exynos_drm_g2d.o
exynosdrm-$(CONFIG_DRM_EXYNOS_IPP)	+= exynos_drm_ipp.o
exynosdrm-$(CONFIG_DRM_EXYNOS_FIMC)	+= exynos_drm_fimc.o
exynosdrm-$(CONFIG_DRM_EXYNOS_ROTATOR)	+= exynos_drm_rotator.o
exynosdrm-$(CONFIG_DRM_EXYNOS_GSC)	+= exynos_drm_gsc.o

obj-$(CONFIG_DRM_EXYNOS)		+= exynosdrm.o
+15 −0
Original line number Diff line number Diff line
@@ -384,6 +384,12 @@ static int __init exynos_drm_init(void)
		goto out_rotator;
#endif

#ifdef CONFIG_DRM_EXYNOS_GSC
	ret = platform_driver_register(&gsc_driver);
	if (ret < 0)
		goto out_gsc;
#endif

#ifdef CONFIG_DRM_EXYNOS_IPP
	ret = platform_driver_register(&ipp_driver);
	if (ret < 0)
@@ -412,6 +418,11 @@ static int __init exynos_drm_init(void)
out_ipp:
#endif

#ifdef CONFIG_DRM_EXYNOS_GSC
	platform_driver_unregister(&gsc_driver);
out_gsc:
#endif

#ifdef CONFIG_DRM_EXYNOS_ROTATOR
	platform_driver_unregister(&rotator_driver);
out_rotator:
@@ -462,6 +473,10 @@ static void __exit exynos_drm_exit(void)
	platform_driver_unregister(&ipp_driver);
#endif

#ifdef CONFIG_DRM_EXYNOS_GSC
	platform_driver_unregister(&gsc_driver);
#endif

#ifdef CONFIG_DRM_EXYNOS_ROTATOR
	platform_driver_unregister(&rotator_driver);
#endif
+1 −0
Original line number Diff line number Diff line
@@ -351,5 +351,6 @@ extern struct platform_driver vidi_driver;
extern struct platform_driver g2d_driver;
extern struct platform_driver fimc_driver;
extern struct platform_driver rotator_driver;
extern struct platform_driver gsc_driver;
extern struct platform_driver ipp_driver;
#endif
+1870 −0

File added.

Preview size limit exceeded, changes collapsed.

Loading