drm/rockchip: Add a virtual vop driver

Some times we only want use some of the module
of rockchip vop driver(et: rkmpp some times only
wat to use rockchip drm gem),
the real vop drivers is not needed to load.

Add a virtual vop driver let the rockchip drm launch.

Enabled by add following to you dts:

display_subsystem: display-subsystem {
	compatible = "rockchip,display-subsystem";
}

Change-Id: Id6cd14a735eabaf8b4949330d56f77354e50c51c
Signed-off-by: Andy Yan <andy.yan@rock-chips.com>
This commit is contained in:
Andy Yan
2021-03-06 19:31:30 +08:00
committed by Tao Huang
parent ee825cfce0
commit 3ea74ab3c9
5 changed files with 23 additions and 0 deletions

View File

@@ -117,6 +117,13 @@ config ROCKCHIP_VCONN
This selects support virtual HDMI/DP/DSI drived by
rockchip vop, This is used for some test.
config DRM_ROCKCHIP_VVOP
bool "Rockchip virtual VOP drm driver"
help
Say y here if you want use some module of rockchip drm, but
don't need a real vop driver(et: you just want rockchip drm
gem driver to allocate memory).
source "drivers/gpu/drm/rockchip/rk628/Kconfig"
endif

View File

@@ -21,6 +21,7 @@ rockchipdrm-$(CONFIG_ROCKCHIP_LVDS) += rockchip_lvds.o
rockchipdrm-$(CONFIG_ROCKCHIP_RGB) += rockchip_rgb.o
rockchipdrm-$(CONFIG_ROCKCHIP_RK3066_HDMI) += rk3066_hdmi.o
rockchipdrm-$(CONFIG_ROCKCHIP_VCONN) += rockchip_drm_vconn.o
rockchipdrm-$(CONFIG_DRM_ROCKCHIP_VVOP) += rockchip_drm_vvop.o
obj-$(CONFIG_DRM_ROCKCHIP) += rockchipdrm.o

View File

@@ -44,7 +44,12 @@
#define DRIVER_MAJOR 3
#define DRIVER_MINOR 0
#if IS_ENABLED(CONFIG_DRM_ROCKCHIP_VVOP)
static bool is_support_iommu = false;
#else
static bool is_support_iommu = true;
#endif
static struct drm_driver rockchip_drm_driver;
void drm_mode_convert_to_split_mode(struct drm_display_mode *mode)
@@ -1780,8 +1785,10 @@ static int rockchip_drm_platform_probe(struct platform_device *pdev)
int ret;
ret = rockchip_drm_platform_of_probe(dev);
#if !IS_ENABLED(CONFIG_DRM_ROCKCHIP_VVOP)
if (ret)
return ret;
#endif
match = rockchip_drm_match_add(dev);
if (IS_ERR(match))
@@ -1845,6 +1852,9 @@ static int __init rockchip_drm_init(void)
int ret;
num_rockchip_sub_drivers = 0;
#if IS_ENABLED(CONFIG_DRM_ROCKCHIP_VVOP)
ADD_ROCKCHIP_SUB_DRIVER(vvop_platform_driver, CONFIG_DRM_ROCKCHIP_VVOP);
#else
ADD_ROCKCHIP_SUB_DRIVER(vop_platform_driver, CONFIG_DRM_ROCKCHIP);
ADD_ROCKCHIP_SUB_DRIVER(vop2_platform_driver, CONFIG_DRM_ROCKCHIP);
ADD_ROCKCHIP_SUB_DRIVER(vconn_platform_driver, CONFIG_ROCKCHIP_VCONN);
@@ -1865,6 +1875,7 @@ static int __init rockchip_drm_init(void)
ADD_ROCKCHIP_SUB_DRIVER(rockchip_rgb_driver, CONFIG_ROCKCHIP_RGB);
ADD_ROCKCHIP_SUB_DRIVER(dw_dp_driver, CONFIG_ROCKCHIP_DW_DP);
#endif
ret = platform_register_drivers(rockchip_sub_drivers,
num_rockchip_sub_drivers);
if (ret)

View File

@@ -475,4 +475,5 @@ extern struct platform_driver rk3066_hdmi_driver;
extern struct platform_driver rockchip_rgb_driver;
extern struct platform_driver dw_dp_driver;
extern struct platform_driver vconn_platform_driver;
extern struct platform_driver vvop_platform_driver;
#endif /* _ROCKCHIP_DRM_DRV_H_ */

View File

@@ -6,11 +6,14 @@
#include <linux/module.h>
#include <linux/component.h>
#include <linux/platform_device.h>
#include <drm/drm_gem.h>
#include <drm/drm_atomic_helper.h>
#include <drm/drm_crtc_helper.h>
#include <drm/drm_gem_framebuffer_helper.h>
#include <drm/drm_plane_helper.h>
#include <drm/drm_probe_helper.h>
#include <drm/drm_vblank.h>
#define DRIVER_NAME "virtual-vop"