mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 13:31:02 +07:00
739838b5f8
Allow to also drive a slave dw-mipi-dsi controller in a dual-dsi setup. This will require additional implementation-specific code to look up the slave instance and do specific setup. Also will probably need code in the specific crtcs as dual-dsi does not equal two separate dsi outputs. To activate, the implementation-specific code should set the slave using dw_mipi_dsi_set_slave() before calling __dw_mipi_dsi_bind(). v2: - expect real interface number of lanes - keep links to both master and slave v3: - remove unneeded separate variables - remove unneeded second slave settings - disable slave before master - lane-sum calculation comments Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Tested-by: Philippe Cornu <philippe.cornu@st.com> Reviewed-by: Andrzej Hajda <a.hajda@samsung.com> Signed-off-by: Andrzej Hajda <a.hajda@samsung.com> Link: https://patchwork.freedesktop.org/patch/msgid/20181001123845.11818-7-heiko@sntech.de
51 lines
1.4 KiB
C
51 lines
1.4 KiB
C
/*
|
|
* Copyright (C) STMicroelectronics SA 2017
|
|
*
|
|
* Authors: Philippe Cornu <philippe.cornu@st.com>
|
|
* Yannick Fertre <yannick.fertre@st.com>
|
|
*
|
|
* License terms: GNU General Public License (GPL), version 2
|
|
*/
|
|
|
|
#ifndef __DW_MIPI_DSI__
|
|
#define __DW_MIPI_DSI__
|
|
|
|
struct dw_mipi_dsi;
|
|
|
|
struct dw_mipi_dsi_phy_ops {
|
|
int (*init)(void *priv_data);
|
|
int (*get_lane_mbps)(void *priv_data, struct drm_display_mode *mode,
|
|
unsigned long mode_flags, u32 lanes, u32 format,
|
|
unsigned int *lane_mbps);
|
|
};
|
|
|
|
struct dw_mipi_dsi_host_ops {
|
|
int (*attach)(void *priv_data,
|
|
struct mipi_dsi_device *dsi);
|
|
int (*detach)(void *priv_data,
|
|
struct mipi_dsi_device *dsi);
|
|
};
|
|
|
|
struct dw_mipi_dsi_plat_data {
|
|
void __iomem *base;
|
|
unsigned int max_data_lanes;
|
|
|
|
enum drm_mode_status (*mode_valid)(void *priv_data,
|
|
const struct drm_display_mode *mode);
|
|
|
|
const struct dw_mipi_dsi_phy_ops *phy_ops;
|
|
const struct dw_mipi_dsi_host_ops *host_ops;
|
|
|
|
void *priv_data;
|
|
};
|
|
|
|
struct dw_mipi_dsi *dw_mipi_dsi_probe(struct platform_device *pdev,
|
|
const struct dw_mipi_dsi_plat_data
|
|
*plat_data);
|
|
void dw_mipi_dsi_remove(struct dw_mipi_dsi *dsi);
|
|
int dw_mipi_dsi_bind(struct dw_mipi_dsi *dsi, struct drm_encoder *encoder);
|
|
void dw_mipi_dsi_unbind(struct dw_mipi_dsi *dsi);
|
|
void dw_mipi_dsi_set_slave(struct dw_mipi_dsi *dsi, struct dw_mipi_dsi *slave);
|
|
|
|
#endif /* __DW_MIPI_DSI__ */
|