1*133add5bSMaxime Ripard // SPDX-License-Identifier: GPL-2.0+ 2*133add5bSMaxime Ripard /* 3*133add5bSMaxime Ripard * Copyright (c) 2016 Allwinnertech Co., Ltd. 4*133add5bSMaxime Ripard * Copyright (C) 2017-2018 Bootlin 5*133add5bSMaxime Ripard * 6*133add5bSMaxime Ripard * Maxime Ripard <maxime.ripard@bootlin.com> 7*133add5bSMaxime Ripard */ 8*133add5bSMaxime Ripard 9*133add5bSMaxime Ripard #ifndef _SUN6I_MIPI_DSI_H_ 10*133add5bSMaxime Ripard #define _SUN6I_MIPI_DSI_H_ 11*133add5bSMaxime Ripard 12*133add5bSMaxime Ripard #include <drm/drm_connector.h> 13*133add5bSMaxime Ripard #include <drm/drm_encoder.h> 14*133add5bSMaxime Ripard #include <drm/drm_mipi_dsi.h> 15*133add5bSMaxime Ripard 16*133add5bSMaxime Ripard struct sun6i_dphy { 17*133add5bSMaxime Ripard struct clk *bus_clk; 18*133add5bSMaxime Ripard struct clk *mod_clk; 19*133add5bSMaxime Ripard struct regmap *regs; 20*133add5bSMaxime Ripard struct reset_control *reset; 21*133add5bSMaxime Ripard }; 22*133add5bSMaxime Ripard 23*133add5bSMaxime Ripard struct sun6i_dsi { 24*133add5bSMaxime Ripard struct drm_connector connector; 25*133add5bSMaxime Ripard struct drm_encoder encoder; 26*133add5bSMaxime Ripard struct mipi_dsi_host host; 27*133add5bSMaxime Ripard 28*133add5bSMaxime Ripard struct clk *bus_clk; 29*133add5bSMaxime Ripard struct clk *mod_clk; 30*133add5bSMaxime Ripard struct regmap *regs; 31*133add5bSMaxime Ripard struct reset_control *reset; 32*133add5bSMaxime Ripard struct sun6i_dphy *dphy; 33*133add5bSMaxime Ripard 34*133add5bSMaxime Ripard struct device *dev; 35*133add5bSMaxime Ripard struct sun4i_drv *drv; 36*133add5bSMaxime Ripard struct mipi_dsi_device *device; 37*133add5bSMaxime Ripard struct drm_panel *panel; 38*133add5bSMaxime Ripard }; 39*133add5bSMaxime Ripard 40*133add5bSMaxime Ripard static inline struct sun6i_dsi *host_to_sun6i_dsi(struct mipi_dsi_host *host) 41*133add5bSMaxime Ripard { 42*133add5bSMaxime Ripard return container_of(host, struct sun6i_dsi, host); 43*133add5bSMaxime Ripard }; 44*133add5bSMaxime Ripard 45*133add5bSMaxime Ripard static inline struct sun6i_dsi *connector_to_sun6i_dsi(struct drm_connector *connector) 46*133add5bSMaxime Ripard { 47*133add5bSMaxime Ripard return container_of(connector, struct sun6i_dsi, connector); 48*133add5bSMaxime Ripard }; 49*133add5bSMaxime Ripard 50*133add5bSMaxime Ripard static inline struct sun6i_dsi *encoder_to_sun6i_dsi(const struct drm_encoder *encoder) 51*133add5bSMaxime Ripard { 52*133add5bSMaxime Ripard return container_of(encoder, struct sun6i_dsi, encoder); 53*133add5bSMaxime Ripard }; 54*133add5bSMaxime Ripard 55*133add5bSMaxime Ripard int sun6i_dphy_probe(struct sun6i_dsi *dsi, struct device_node *node); 56*133add5bSMaxime Ripard int sun6i_dphy_remove(struct sun6i_dsi *dsi); 57*133add5bSMaxime Ripard 58*133add5bSMaxime Ripard int sun6i_dphy_init(struct sun6i_dphy *dphy, unsigned int lanes); 59*133add5bSMaxime Ripard int sun6i_dphy_power_on(struct sun6i_dphy *dphy, unsigned int lanes); 60*133add5bSMaxime Ripard int sun6i_dphy_power_off(struct sun6i_dphy *dphy); 61*133add5bSMaxime Ripard int sun6i_dphy_exit(struct sun6i_dphy *dphy); 62*133add5bSMaxime Ripard 63*133add5bSMaxime Ripard #endif /* _SUN6I_MIPI_DSI_H_ */ 64