19c92ab61SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 22048e328SMark Yao /* 32048e328SMark Yao * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd 42048e328SMark Yao * Author:Mark Yao <mark.yao@rock-chips.com> 52048e328SMark Yao * 62048e328SMark Yao * based on exynos_drm_drv.h 72048e328SMark Yao */ 82048e328SMark Yao 92048e328SMark Yao #ifndef _ROCKCHIP_DRM_DRV_H 102048e328SMark Yao #define _ROCKCHIP_DRM_DRV_H 112048e328SMark Yao 122048e328SMark Yao #include <drm/drm_fb_helper.h> 1363ebb9faSMark Yao #include <drm/drm_atomic_helper.h> 142048e328SMark Yao #include <drm/drm_gem.h> 152048e328SMark Yao 162048e328SMark Yao #include <linux/module.h> 172048e328SMark Yao #include <linux/component.h> 182048e328SMark Yao 192048e328SMark Yao #define ROCKCHIP_MAX_FB_BUFFER 3 202048e328SMark Yao #define ROCKCHIP_MAX_CONNECTOR 2 212048e328SMark Yao #define ROCKCHIP_MAX_CRTC 2 222048e328SMark Yao 232048e328SMark Yao struct drm_device; 242048e328SMark Yao struct drm_connector; 2538f993b7STomasz Figa struct iommu_domain; 262048e328SMark Yao 274e257d9eSMark Yao struct rockchip_crtc_state { 284e257d9eSMark Yao struct drm_crtc_state base; 294e257d9eSMark Yao int output_type; 304e257d9eSMark Yao int output_mode; 316bda8112SMark Yao int output_bpc; 32cf6d100dSHeiko Stuebner int output_flags; 337707f722SAndrzej Pietrasiewicz bool enable_afbc; 344e257d9eSMark Yao }; 354e257d9eSMark Yao #define to_rockchip_crtc_state(s) \ 364e257d9eSMark Yao container_of(s, struct rockchip_crtc_state, base) 374e257d9eSMark Yao 382048e328SMark Yao /* 392048e328SMark Yao * Rockchip drm private structure. 402048e328SMark Yao * 412048e328SMark Yao * @crtc: array of enabled CRTCs, used to map from "pipe" to drm_crtc. 422048e328SMark Yao * @num_pipe: number of pipes for this device. 432d7b5637SCaesar Wang * @mm_lock: protect drm_mm on multi-threads. 442048e328SMark Yao */ 452048e328SMark Yao struct rockchip_drm_private { 4638f993b7STomasz Figa struct iommu_domain *domain; 47*421be3eeSRobin Murphy struct device *iommu_dev; 4838f993b7STomasz Figa struct mutex mm_lock; 4938f993b7STomasz Figa struct drm_mm mm; 502048e328SMark Yao }; 512048e328SMark Yao 522048e328SMark Yao int rockchip_drm_dma_attach_device(struct drm_device *drm_dev, 532048e328SMark Yao struct device *dev); 542048e328SMark Yao void rockchip_drm_dma_detach_device(struct drm_device *drm_dev, 552048e328SMark Yao struct device *dev); 56*421be3eeSRobin Murphy void rockchip_drm_dma_init_device(struct drm_device *drm_dev, 57*421be3eeSRobin Murphy struct device *dev); 58459b086dSJeffy Chen int rockchip_drm_wait_vact_end(struct drm_crtc *crtc, unsigned int mstimeout); 5969c34e41SYakir Yang 603880f62eSHeiko Stuebner int rockchip_drm_endpoint_is_subdriver(struct device_node *ep); 618820b68bSJeffy Chen extern struct platform_driver cdn_dp_driver; 628820b68bSJeffy Chen extern struct platform_driver dw_hdmi_rockchip_pltfm_driver; 632d4f7bdaSNickey Yang extern struct platform_driver dw_mipi_dsi_rockchip_driver; 648820b68bSJeffy Chen extern struct platform_driver inno_hdmi_driver; 658820b68bSJeffy Chen extern struct platform_driver rockchip_dp_driver; 6634cc0aa2SSandy Huang extern struct platform_driver rockchip_lvds_driver; 678820b68bSJeffy Chen extern struct platform_driver vop_platform_driver; 68f84d3d37SZheng Yang extern struct platform_driver rk3066_hdmi_driver; 692048e328SMark Yao #endif /* _ROCKCHIP_DRM_DRV_H_ */ 70