162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) Fuzhou Rockchip Electronics Co.Ltd 462306a36Sopenharmony_ci * Author:Mark Yao <mark.yao@rock-chips.com> 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci * based on exynos_drm_drv.h 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef _ROCKCHIP_DRM_DRV_H 1062306a36Sopenharmony_ci#define _ROCKCHIP_DRM_DRV_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <drm/drm_atomic_helper.h> 1362306a36Sopenharmony_ci#include <drm/drm_gem.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include <linux/i2c.h> 1662306a36Sopenharmony_ci#include <linux/module.h> 1762306a36Sopenharmony_ci#include <linux/component.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#define ROCKCHIP_MAX_FB_BUFFER 3 2062306a36Sopenharmony_ci#define ROCKCHIP_MAX_CONNECTOR 2 2162306a36Sopenharmony_ci#define ROCKCHIP_MAX_CRTC 4 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistruct drm_device; 2462306a36Sopenharmony_cistruct drm_connector; 2562306a36Sopenharmony_cistruct iommu_domain; 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_cistruct rockchip_crtc_state { 2862306a36Sopenharmony_ci struct drm_crtc_state base; 2962306a36Sopenharmony_ci int output_type; 3062306a36Sopenharmony_ci int output_mode; 3162306a36Sopenharmony_ci int output_bpc; 3262306a36Sopenharmony_ci int output_flags; 3362306a36Sopenharmony_ci bool enable_afbc; 3462306a36Sopenharmony_ci u32 bus_format; 3562306a36Sopenharmony_ci u32 bus_flags; 3662306a36Sopenharmony_ci int color_space; 3762306a36Sopenharmony_ci}; 3862306a36Sopenharmony_ci#define to_rockchip_crtc_state(s) \ 3962306a36Sopenharmony_ci container_of(s, struct rockchip_crtc_state, base) 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci/* 4262306a36Sopenharmony_ci * Rockchip drm private structure. 4362306a36Sopenharmony_ci * 4462306a36Sopenharmony_ci * @crtc: array of enabled CRTCs, used to map from "pipe" to drm_crtc. 4562306a36Sopenharmony_ci * @num_pipe: number of pipes for this device. 4662306a36Sopenharmony_ci * @mm_lock: protect drm_mm on multi-threads. 4762306a36Sopenharmony_ci */ 4862306a36Sopenharmony_cistruct rockchip_drm_private { 4962306a36Sopenharmony_ci struct iommu_domain *domain; 5062306a36Sopenharmony_ci struct device *iommu_dev; 5162306a36Sopenharmony_ci struct mutex mm_lock; 5262306a36Sopenharmony_ci struct drm_mm mm; 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct rockchip_encoder { 5662306a36Sopenharmony_ci int crtc_endpoint_id; 5762306a36Sopenharmony_ci struct drm_encoder encoder; 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ciint rockchip_drm_dma_attach_device(struct drm_device *drm_dev, 6162306a36Sopenharmony_ci struct device *dev); 6262306a36Sopenharmony_civoid rockchip_drm_dma_detach_device(struct drm_device *drm_dev, 6362306a36Sopenharmony_ci struct device *dev); 6462306a36Sopenharmony_civoid rockchip_drm_dma_init_device(struct drm_device *drm_dev, 6562306a36Sopenharmony_ci struct device *dev); 6662306a36Sopenharmony_ciint rockchip_drm_wait_vact_end(struct drm_crtc *crtc, unsigned int mstimeout); 6762306a36Sopenharmony_ciint rockchip_drm_encoder_set_crtc_endpoint_id(struct rockchip_encoder *rencoder, 6862306a36Sopenharmony_ci struct device_node *np, int port, int reg); 6962306a36Sopenharmony_ciint rockchip_drm_endpoint_is_subdriver(struct device_node *ep); 7062306a36Sopenharmony_ciextern struct platform_driver cdn_dp_driver; 7162306a36Sopenharmony_ciextern struct platform_driver dw_hdmi_rockchip_pltfm_driver; 7262306a36Sopenharmony_ciextern struct platform_driver dw_mipi_dsi_rockchip_driver; 7362306a36Sopenharmony_ciextern struct platform_driver inno_hdmi_driver; 7462306a36Sopenharmony_ciextern struct platform_driver rockchip_dp_driver; 7562306a36Sopenharmony_ciextern struct platform_driver rockchip_lvds_driver; 7662306a36Sopenharmony_ciextern struct platform_driver vop_platform_driver; 7762306a36Sopenharmony_ciextern struct platform_driver rk3066_hdmi_driver; 7862306a36Sopenharmony_ciextern struct platform_driver vop2_platform_driver; 7962306a36Sopenharmony_ci 8062306a36Sopenharmony_cistatic inline struct rockchip_encoder *to_rockchip_encoder(struct drm_encoder *encoder) 8162306a36Sopenharmony_ci{ 8262306a36Sopenharmony_ci return container_of(encoder, struct rockchip_encoder, encoder); 8362306a36Sopenharmony_ci} 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci#endif /* _ROCKCHIP_DRM_DRV_H_ */ 86