18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Analogix DP (Display Port) Core interface driver.
48c2ecf20Sopenharmony_ci *
58c2ecf20Sopenharmony_ci * Copyright (C) 2015 Rockchip Electronics Co., Ltd.
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci#ifndef _ANALOGIX_DP_H_
88c2ecf20Sopenharmony_ci#define _ANALOGIX_DP_H_
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <drm/drm_crtc.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistruct analogix_dp_device;
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_cienum analogix_dp_devtype {
158c2ecf20Sopenharmony_ci	EXYNOS_DP,
168c2ecf20Sopenharmony_ci	RK3288_DP,
178c2ecf20Sopenharmony_ci	RK3399_EDP,
188c2ecf20Sopenharmony_ci};
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic inline bool is_rockchip(enum analogix_dp_devtype type)
218c2ecf20Sopenharmony_ci{
228c2ecf20Sopenharmony_ci	return type == RK3288_DP || type == RK3399_EDP;
238c2ecf20Sopenharmony_ci}
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistruct analogix_dp_plat_data {
268c2ecf20Sopenharmony_ci	enum analogix_dp_devtype dev_type;
278c2ecf20Sopenharmony_ci	struct drm_panel *panel;
288c2ecf20Sopenharmony_ci	struct drm_encoder *encoder;
298c2ecf20Sopenharmony_ci	struct drm_connector *connector;
308c2ecf20Sopenharmony_ci	bool skip_connector;
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci	int (*power_on_start)(struct analogix_dp_plat_data *);
338c2ecf20Sopenharmony_ci	int (*power_on_end)(struct analogix_dp_plat_data *);
348c2ecf20Sopenharmony_ci	int (*power_off)(struct analogix_dp_plat_data *);
358c2ecf20Sopenharmony_ci	int (*attach)(struct analogix_dp_plat_data *, struct drm_bridge *,
368c2ecf20Sopenharmony_ci		      struct drm_connector *);
378c2ecf20Sopenharmony_ci	int (*get_modes)(struct analogix_dp_plat_data *,
388c2ecf20Sopenharmony_ci			 struct drm_connector *);
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ciint analogix_dp_resume(struct analogix_dp_device *dp);
428c2ecf20Sopenharmony_ciint analogix_dp_suspend(struct analogix_dp_device *dp);
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_cistruct analogix_dp_device *
458c2ecf20Sopenharmony_cianalogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data);
468c2ecf20Sopenharmony_ciint analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev);
478c2ecf20Sopenharmony_civoid analogix_dp_unbind(struct analogix_dp_device *dp);
488c2ecf20Sopenharmony_civoid analogix_dp_remove(struct analogix_dp_device *dp);
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ciint analogix_dp_start_crc(struct drm_connector *connector);
518c2ecf20Sopenharmony_ciint analogix_dp_stop_crc(struct drm_connector *connector);
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci#endif /* _ANALOGIX_DP_H_ */
54