18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd
48c2ecf20Sopenharmony_ci * Author:Mark Yao <mark.yao@rock-chips.com>
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * based on exynos_drm_drv.h
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#ifndef _ROCKCHIP_DRM_DRV_H
108c2ecf20Sopenharmony_ci#define _ROCKCHIP_DRM_DRV_H
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include <drm/drm_fb_helper.h>
138c2ecf20Sopenharmony_ci#include <drm/drm_atomic_helper.h>
148c2ecf20Sopenharmony_ci#include <drm/drm_gem.h>
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci#include <linux/module.h>
178c2ecf20Sopenharmony_ci#include <linux/component.h>
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#define ROCKCHIP_MAX_FB_BUFFER	3
208c2ecf20Sopenharmony_ci#define ROCKCHIP_MAX_CONNECTOR	2
218c2ecf20Sopenharmony_ci#define ROCKCHIP_MAX_CRTC	2
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cistruct drm_device;
248c2ecf20Sopenharmony_cistruct drm_connector;
258c2ecf20Sopenharmony_cistruct iommu_domain;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistruct rockchip_crtc_state {
288c2ecf20Sopenharmony_ci	struct drm_crtc_state base;
298c2ecf20Sopenharmony_ci	int output_type;
308c2ecf20Sopenharmony_ci	int output_mode;
318c2ecf20Sopenharmony_ci	int output_bpc;
328c2ecf20Sopenharmony_ci	int output_flags;
338c2ecf20Sopenharmony_ci	bool enable_afbc;
348c2ecf20Sopenharmony_ci};
358c2ecf20Sopenharmony_ci#define to_rockchip_crtc_state(s) \
368c2ecf20Sopenharmony_ci		container_of(s, struct rockchip_crtc_state, base)
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci/*
398c2ecf20Sopenharmony_ci * Rockchip drm private structure.
408c2ecf20Sopenharmony_ci *
418c2ecf20Sopenharmony_ci * @crtc: array of enabled CRTCs, used to map from "pipe" to drm_crtc.
428c2ecf20Sopenharmony_ci * @num_pipe: number of pipes for this device.
438c2ecf20Sopenharmony_ci * @mm_lock: protect drm_mm on multi-threads.
448c2ecf20Sopenharmony_ci */
458c2ecf20Sopenharmony_cistruct rockchip_drm_private {
468c2ecf20Sopenharmony_ci	struct drm_fb_helper fbdev_helper;
478c2ecf20Sopenharmony_ci	struct drm_gem_object *fbdev_bo;
488c2ecf20Sopenharmony_ci	struct iommu_domain *domain;
498c2ecf20Sopenharmony_ci	struct mutex mm_lock;
508c2ecf20Sopenharmony_ci	struct drm_mm mm;
518c2ecf20Sopenharmony_ci	struct list_head psr_list;
528c2ecf20Sopenharmony_ci	struct mutex psr_list_lock;
538c2ecf20Sopenharmony_ci};
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ciint rockchip_drm_dma_attach_device(struct drm_device *drm_dev,
568c2ecf20Sopenharmony_ci				   struct device *dev);
578c2ecf20Sopenharmony_civoid rockchip_drm_dma_detach_device(struct drm_device *drm_dev,
588c2ecf20Sopenharmony_ci				    struct device *dev);
598c2ecf20Sopenharmony_ciint rockchip_drm_wait_vact_end(struct drm_crtc *crtc, unsigned int mstimeout);
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ciint rockchip_drm_endpoint_is_subdriver(struct device_node *ep);
628c2ecf20Sopenharmony_ciextern struct platform_driver cdn_dp_driver;
638c2ecf20Sopenharmony_ciextern struct platform_driver dw_hdmi_rockchip_pltfm_driver;
648c2ecf20Sopenharmony_ciextern struct platform_driver dw_mipi_dsi_rockchip_driver;
658c2ecf20Sopenharmony_ciextern struct platform_driver inno_hdmi_driver;
668c2ecf20Sopenharmony_ciextern struct platform_driver rockchip_dp_driver;
678c2ecf20Sopenharmony_ciextern struct platform_driver rockchip_lvds_driver;
688c2ecf20Sopenharmony_ciextern struct platform_driver vop_platform_driver;
698c2ecf20Sopenharmony_ciextern struct platform_driver rk3066_hdmi_driver;
708c2ecf20Sopenharmony_ci#endif /* _ROCKCHIP_DRM_DRV_H_ */
71