18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#ifndef __EDP_CONNECTOR_H__
78c2ecf20Sopenharmony_ci#define __EDP_CONNECTOR_H__
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <linux/i2c.h>
108c2ecf20Sopenharmony_ci#include <linux/interrupt.h>
118c2ecf20Sopenharmony_ci#include <linux/kernel.h>
128c2ecf20Sopenharmony_ci#include <linux/platform_device.h>
138c2ecf20Sopenharmony_ci#include <drm/drm_bridge.h>
148c2ecf20Sopenharmony_ci#include <drm/drm_crtc.h>
158c2ecf20Sopenharmony_ci#include <drm/drm_dp_helper.h>
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci#include "msm_drv.h"
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci#define edp_read(offset) msm_readl((offset))
208c2ecf20Sopenharmony_ci#define edp_write(offset, data) msm_writel((data), (offset))
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistruct edp_ctrl;
238c2ecf20Sopenharmony_cistruct edp_aux;
248c2ecf20Sopenharmony_cistruct edp_phy;
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistruct msm_edp {
278c2ecf20Sopenharmony_ci	struct drm_device *dev;
288c2ecf20Sopenharmony_ci	struct platform_device *pdev;
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ci	struct drm_connector *connector;
318c2ecf20Sopenharmony_ci	struct drm_bridge *bridge;
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci	/* the encoder we are hooked to (outside of eDP block) */
348c2ecf20Sopenharmony_ci	struct drm_encoder *encoder;
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_ci	struct edp_ctrl *ctrl;
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci	int irq;
398c2ecf20Sopenharmony_ci};
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci/* eDP bridge */
428c2ecf20Sopenharmony_cistruct drm_bridge *msm_edp_bridge_init(struct msm_edp *edp);
438c2ecf20Sopenharmony_civoid edp_bridge_destroy(struct drm_bridge *bridge);
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_ci/* eDP connector */
468c2ecf20Sopenharmony_cistruct drm_connector *msm_edp_connector_init(struct msm_edp *edp);
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci/* AUX */
498c2ecf20Sopenharmony_civoid *msm_edp_aux_init(struct device *dev, void __iomem *regbase,
508c2ecf20Sopenharmony_ci			struct drm_dp_aux **drm_aux);
518c2ecf20Sopenharmony_civoid msm_edp_aux_destroy(struct device *dev, struct edp_aux *aux);
528c2ecf20Sopenharmony_ciirqreturn_t msm_edp_aux_irq(struct edp_aux *aux, u32 isr);
538c2ecf20Sopenharmony_civoid msm_edp_aux_ctrl(struct edp_aux *aux, int enable);
548c2ecf20Sopenharmony_ci
558c2ecf20Sopenharmony_ci/* Phy */
568c2ecf20Sopenharmony_cibool msm_edp_phy_ready(struct edp_phy *phy);
578c2ecf20Sopenharmony_civoid msm_edp_phy_ctrl(struct edp_phy *phy, int enable);
588c2ecf20Sopenharmony_civoid msm_edp_phy_vm_pe_init(struct edp_phy *phy);
598c2ecf20Sopenharmony_civoid msm_edp_phy_vm_pe_cfg(struct edp_phy *phy, u32 v0, u32 v1);
608c2ecf20Sopenharmony_civoid msm_edp_phy_lane_power_ctrl(struct edp_phy *phy, bool up, u32 max_lane);
618c2ecf20Sopenharmony_civoid *msm_edp_phy_init(struct device *dev, void __iomem *regbase);
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci/* Ctrl */
648c2ecf20Sopenharmony_ciirqreturn_t msm_edp_ctrl_irq(struct edp_ctrl *ctrl);
658c2ecf20Sopenharmony_civoid msm_edp_ctrl_power(struct edp_ctrl *ctrl, bool on);
668c2ecf20Sopenharmony_ciint msm_edp_ctrl_init(struct msm_edp *edp);
678c2ecf20Sopenharmony_civoid msm_edp_ctrl_destroy(struct edp_ctrl *ctrl);
688c2ecf20Sopenharmony_cibool msm_edp_ctrl_panel_connected(struct edp_ctrl *ctrl);
698c2ecf20Sopenharmony_ciint msm_edp_ctrl_get_panel_info(struct edp_ctrl *ctrl,
708c2ecf20Sopenharmony_ci	struct drm_connector *connector, struct edid **edid);
718c2ecf20Sopenharmony_ciint msm_edp_ctrl_timing_cfg(struct edp_ctrl *ctrl,
728c2ecf20Sopenharmony_ci				const struct drm_display_mode *mode,
738c2ecf20Sopenharmony_ci				const struct drm_display_info *info);
748c2ecf20Sopenharmony_ci/* @pixel_rate is in kHz */
758c2ecf20Sopenharmony_cibool msm_edp_ctrl_pixel_clock_valid(struct edp_ctrl *ctrl,
768c2ecf20Sopenharmony_ci	u32 pixel_rate, u32 *pm, u32 *pn);
778c2ecf20Sopenharmony_ci
788c2ecf20Sopenharmony_ci#endif /* __EDP_CONNECTOR_H__ */
79