1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright: 2017 Cadence Design Systems, Inc. 4 * 5 * Author: Boris Brezillon <boris.brezillon@bootlin.com> 6 */ 7 8 #ifndef __CDNS_DSI_H__ 9 #define __CDNS_DSI_H__ 10 11 #include <drm/drm_bridge.h> 12 #include <drm/drm_mipi_dsi.h> 13 #include <drm/drm_panel.h> 14 15 #include <linux/bits.h> 16 #include <linux/completion.h> 17 #include <linux/phy/phy.h> 18 19 struct clk; 20 struct reset_control; 21 22 struct cdns_dsi_output { 23 struct mipi_dsi_device *dev; 24 struct drm_panel *panel; 25 struct drm_bridge *bridge; 26 union phy_configure_opts phy_opts; 27 }; 28 29 enum cdns_dsi_input_id { 30 CDNS_SDI_INPUT, 31 CDNS_DPI_INPUT, 32 CDNS_DSC_INPUT, 33 }; 34 35 struct cdns_dsi_cfg { 36 unsigned int hfp; 37 unsigned int hsa; 38 unsigned int hbp; 39 unsigned int hact; 40 unsigned int htotal; 41 }; 42 43 struct cdns_dsi_input { 44 enum cdns_dsi_input_id id; 45 struct drm_bridge bridge; 46 }; 47 48 struct cdns_dsi; 49 50 /** 51 * struct cdns_dsi_platform_ops - CDNS DSI Platform operations 52 * @init: Called in the CDNS DSI probe 53 * @deinit: Called in the CDNS DSI remove 54 * @enable: Called at the beginning of CDNS DSI bridge enable 55 * @disable: Called at the end of CDNS DSI bridge disable 56 */ 57 struct cdns_dsi_platform_ops { 58 int (*init)(struct cdns_dsi *dsi); 59 void (*deinit)(struct cdns_dsi *dsi); 60 void (*enable)(struct cdns_dsi *dsi); 61 void (*disable)(struct cdns_dsi *dsi); 62 }; 63 64 struct cdns_dsi { 65 struct mipi_dsi_host base; 66 void __iomem *regs; 67 #ifdef CONFIG_DRM_CDNS_DSI_J721E 68 void __iomem *j721e_regs; 69 #endif 70 const struct cdns_dsi_platform_ops *platform_ops; 71 struct cdns_dsi_input input; 72 struct cdns_dsi_output output; 73 unsigned int direct_cmd_fifo_depth; 74 unsigned int rx_fifo_depth; 75 struct completion direct_cmd_comp; 76 struct clk *dsi_p_clk; 77 struct reset_control *dsi_p_rst; 78 struct clk *dsi_sys_clk; 79 bool link_initialized; 80 bool phy_initialized; 81 struct phy *dphy; 82 }; 83 84 #endif /* !__CDNS_DSI_H__ */ 85