18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) STMicroelectronics SA 2017 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Authors: Philippe Cornu <philippe.cornu@st.com> 68c2ecf20Sopenharmony_ci * Yannick Fertre <yannick.fertre@st.com> 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef __DW_MIPI_DSI__ 108c2ecf20Sopenharmony_ci#define __DW_MIPI_DSI__ 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/types.h> 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <drm/drm_modes.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cistruct drm_display_mode; 178c2ecf20Sopenharmony_cistruct drm_encoder; 188c2ecf20Sopenharmony_cistruct dw_mipi_dsi; 198c2ecf20Sopenharmony_cistruct mipi_dsi_device; 208c2ecf20Sopenharmony_cistruct platform_device; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_cistruct dw_mipi_dsi_dphy_timing { 238c2ecf20Sopenharmony_ci u16 data_hs2lp; 248c2ecf20Sopenharmony_ci u16 data_lp2hs; 258c2ecf20Sopenharmony_ci u16 clk_hs2lp; 268c2ecf20Sopenharmony_ci u16 clk_lp2hs; 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistruct dw_mipi_dsi_phy_ops { 308c2ecf20Sopenharmony_ci int (*init)(void *priv_data); 318c2ecf20Sopenharmony_ci void (*power_on)(void *priv_data); 328c2ecf20Sopenharmony_ci void (*power_off)(void *priv_data); 338c2ecf20Sopenharmony_ci int (*get_lane_mbps)(void *priv_data, 348c2ecf20Sopenharmony_ci const struct drm_display_mode *mode, 358c2ecf20Sopenharmony_ci unsigned long mode_flags, u32 lanes, u32 format, 368c2ecf20Sopenharmony_ci unsigned int *lane_mbps); 378c2ecf20Sopenharmony_ci int (*get_timing)(void *priv_data, unsigned int lane_mbps, 388c2ecf20Sopenharmony_ci struct dw_mipi_dsi_dphy_timing *timing); 398c2ecf20Sopenharmony_ci int (*get_esc_clk_rate)(void *priv_data, unsigned int *esc_clk_rate); 408c2ecf20Sopenharmony_ci}; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cistruct dw_mipi_dsi_host_ops { 438c2ecf20Sopenharmony_ci int (*attach)(void *priv_data, 448c2ecf20Sopenharmony_ci struct mipi_dsi_device *dsi); 458c2ecf20Sopenharmony_ci int (*detach)(void *priv_data, 468c2ecf20Sopenharmony_ci struct mipi_dsi_device *dsi); 478c2ecf20Sopenharmony_ci}; 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cistruct dw_mipi_dsi_plat_data { 508c2ecf20Sopenharmony_ci void __iomem *base; 518c2ecf20Sopenharmony_ci unsigned int max_data_lanes; 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci enum drm_mode_status (*mode_valid)(void *priv_data, 548c2ecf20Sopenharmony_ci const struct drm_display_mode *mode); 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci const struct dw_mipi_dsi_phy_ops *phy_ops; 578c2ecf20Sopenharmony_ci const struct dw_mipi_dsi_host_ops *host_ops; 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_ci void *priv_data; 608c2ecf20Sopenharmony_ci}; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cistruct dw_mipi_dsi *dw_mipi_dsi_probe(struct platform_device *pdev, 638c2ecf20Sopenharmony_ci const struct dw_mipi_dsi_plat_data 648c2ecf20Sopenharmony_ci *plat_data); 658c2ecf20Sopenharmony_civoid dw_mipi_dsi_remove(struct dw_mipi_dsi *dsi); 668c2ecf20Sopenharmony_ciint dw_mipi_dsi_bind(struct dw_mipi_dsi *dsi, struct drm_encoder *encoder); 678c2ecf20Sopenharmony_civoid dw_mipi_dsi_unbind(struct dw_mipi_dsi *dsi); 688c2ecf20Sopenharmony_civoid dw_mipi_dsi_set_slave(struct dw_mipi_dsi *dsi, struct dw_mipi_dsi *slave); 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci#endif /* __DW_MIPI_DSI__ */ 71