xref: /linux/drivers/gpu/drm/sun4i/sun6i_mipi_dsi.h (revision 133add5b5ad42b7bb5fcd59d681aef6475d08600)
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