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