Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 46fc5154 authored by Philippe CORNU's avatar Philippe CORNU Committed by Archit Taneja
Browse files

drm/bridge/synopsys: Add MIPI DSI host controller bridge



Add a Synopsys Designware MIPI DSI host DRM bridge driver, based on the
Rockchip version from rockchip/dw-mipi-dsi.c with phy & bridge APIs.

Signed-off-by: default avatarPhilippe CORNU <philippe.cornu@st.com>
Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
Link: https://patchwork.freedesktop.org/patch/msgid/1500277223-29553-5-git-send-email-philippe.cornu@st.com
parent 88dd1e6f
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -22,3 +22,9 @@ config DRM_DW_HDMI_I2S_AUDIO
	help
	help
	  Support the I2S Audio interface which is part of the Synopsys
	  Support the I2S Audio interface which is part of the Synopsys
	  Designware HDMI block.
	  Designware HDMI block.

config DRM_DW_MIPI_DSI
	tristate
	select DRM_KMS_HELPER
	select DRM_MIPI_DSI
	select DRM_PANEL_BRIDGE
+2 −0
Original line number Original line Diff line number Diff line
@@ -3,3 +3,5 @@
obj-$(CONFIG_DRM_DW_HDMI) += dw-hdmi.o
obj-$(CONFIG_DRM_DW_HDMI) += dw-hdmi.o
obj-$(CONFIG_DRM_DW_HDMI_AHB_AUDIO) += dw-hdmi-ahb-audio.o
obj-$(CONFIG_DRM_DW_HDMI_AHB_AUDIO) += dw-hdmi-ahb-audio.o
obj-$(CONFIG_DRM_DW_HDMI_I2S_AUDIO) += dw-hdmi-i2s-audio.o
obj-$(CONFIG_DRM_DW_HDMI_I2S_AUDIO) += dw-hdmi-i2s-audio.o

obj-$(CONFIG_DRM_DW_MIPI_DSI) += dw-mipi-dsi.o
+981 −0

File added.

Preview size limit exceeded, changes collapsed.

+39 −0
Original line number Original line Diff line number Diff line
/*
 * 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_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_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;

	void *priv_data;
};

int dw_mipi_dsi_probe(struct platform_device *pdev,
		      const struct dw_mipi_dsi_plat_data *plat_data);
void dw_mipi_dsi_remove(struct platform_device *pdev);
int dw_mipi_dsi_bind(struct platform_device *pdev, struct drm_encoder *encoder,
		     const struct dw_mipi_dsi_plat_data *plat_data);
void dw_mipi_dsi_unbind(struct device *dev);

#endif /* __DW_MIPI_DSI__ */