xref: /linux/drivers/gpu/drm/rockchip/rockchip_drm_drv.h (revision 421be3ee36a497949a4b564cd1e4f7f9fe755f57)
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