/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright: 2017 Cadence Design Systems, Inc. * * Author: Boris Brezillon <boris.brezillon@bootlin.com> */ #ifndef __CDNS_DSI_H__ #define __CDNS_DSI_H__ #include <drm/drm_bridge.h> #include <drm/drm_mipi_dsi.h> #include <drm/drm_panel.h> #include <linux/bits.h> #include <linux/completion.h> #include <linux/phy/phy.h> struct clk; struct reset_control; struct cdns_dsi_output { struct mipi_dsi_device *dev; struct drm_panel *panel; struct drm_bridge *bridge; union phy_configure_opts phy_opts; }; enum cdns_dsi_input_id { CDNS_SDI_INPUT, CDNS_DPI_INPUT, CDNS_DSC_INPUT, }; struct cdns_dsi_cfg { unsigned int hfp; unsigned int hsa; unsigned int hbp; unsigned int hact; unsigned int htotal; }; struct cdns_dsi_input { enum cdns_dsi_input_id id; struct drm_bridge bridge; }; struct cdns_dsi; /** * struct cdns_dsi_platform_ops - CDNS DSI Platform operations * @init: Called in the CDNS DSI probe * @deinit: Called in the CDNS DSI remove * @enable: Called at the beginning of CDNS DSI bridge enable * @disable: Called at the end of CDNS DSI bridge disable */ struct cdns_dsi_platform_ops { int (*init)(struct cdns_dsi *dsi); void (*deinit)(struct cdns_dsi *dsi); void (*enable)(struct cdns_dsi *dsi); void (*disable)(struct cdns_dsi *dsi); }; struct cdns_dsi { struct mipi_dsi_host base; void __iomem *regs; #ifdef CONFIG_DRM_CDNS_DSI_J721E void __iomem *j721e_regs; #endif const struct cdns_dsi_platform_ops *platform_ops; struct cdns_dsi_input input; struct cdns_dsi_output output; unsigned int direct_cmd_fifo_depth; unsigned int rx_fifo_depth; struct completion direct_cmd_comp; struct clk *dsi_p_clk; struct reset_control *dsi_p_rst; struct clk *dsi_sys_clk; bool link_initialized; bool phy_initialized; struct phy *dphy; }; #endif /* !__CDNS_DSI_H__ */