xref: /openbmc/linux/drivers/gpu/drm/msm/dp/dp_parser.h (revision c943b494)
1c943b494SChandan Uddaraju /* SPDX-License-Identifier: GPL-2.0-only */
2c943b494SChandan Uddaraju /*
3c943b494SChandan Uddaraju  * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
4c943b494SChandan Uddaraju  */
5c943b494SChandan Uddaraju 
6c943b494SChandan Uddaraju #ifndef _DP_PARSER_H_
7c943b494SChandan Uddaraju #define _DP_PARSER_H_
8c943b494SChandan Uddaraju 
9c943b494SChandan Uddaraju #include <linux/platform_device.h>
10c943b494SChandan Uddaraju 
11c943b494SChandan Uddaraju #include "dpu_io_util.h"
12c943b494SChandan Uddaraju #include "msm_drv.h"
13c943b494SChandan Uddaraju 
14c943b494SChandan Uddaraju #define DP_LABEL "MDSS DP DISPLAY"
15c943b494SChandan Uddaraju #define DP_MAX_PIXEL_CLK_KHZ	675000
16c943b494SChandan Uddaraju #define DP_MAX_NUM_DP_LANES	4
17c943b494SChandan Uddaraju 
18c943b494SChandan Uddaraju enum dp_pm_type {
19c943b494SChandan Uddaraju 	DP_CORE_PM,
20c943b494SChandan Uddaraju 	DP_CTRL_PM,
21c943b494SChandan Uddaraju 	DP_PHY_PM,
22c943b494SChandan Uddaraju 	DP_MAX_PM
23c943b494SChandan Uddaraju };
24c943b494SChandan Uddaraju 
25c943b494SChandan Uddaraju struct dss_io_data {
26c943b494SChandan Uddaraju 	u32 len;
27c943b494SChandan Uddaraju 	void __iomem *base;
28c943b494SChandan Uddaraju };
29c943b494SChandan Uddaraju 
30c943b494SChandan Uddaraju static inline const char *dp_parser_pm_name(enum dp_pm_type module)
31c943b494SChandan Uddaraju {
32c943b494SChandan Uddaraju 	switch (module) {
33c943b494SChandan Uddaraju 	case DP_CORE_PM:	return "DP_CORE_PM";
34c943b494SChandan Uddaraju 	case DP_CTRL_PM:	return "DP_CTRL_PM";
35c943b494SChandan Uddaraju 	case DP_PHY_PM:		return "DP_PHY_PM";
36c943b494SChandan Uddaraju 	default:		return "???";
37c943b494SChandan Uddaraju 	}
38c943b494SChandan Uddaraju }
39c943b494SChandan Uddaraju 
40c943b494SChandan Uddaraju /**
41c943b494SChandan Uddaraju  * struct dp_display_data  - display related device tree data.
42c943b494SChandan Uddaraju  *
43c943b494SChandan Uddaraju  * @ctrl_node: referece to controller device
44c943b494SChandan Uddaraju  * @phy_node:  reference to phy device
45c943b494SChandan Uddaraju  * @is_active: is the controller currently active
46c943b494SChandan Uddaraju  * @name: name of the display
47c943b494SChandan Uddaraju  * @display_type: type of the display
48c943b494SChandan Uddaraju  */
49c943b494SChandan Uddaraju struct dp_display_data {
50c943b494SChandan Uddaraju 	struct device_node *ctrl_node;
51c943b494SChandan Uddaraju 	struct device_node *phy_node;
52c943b494SChandan Uddaraju 	bool is_active;
53c943b494SChandan Uddaraju 	const char *name;
54c943b494SChandan Uddaraju 	const char *display_type;
55c943b494SChandan Uddaraju };
56c943b494SChandan Uddaraju 
57c943b494SChandan Uddaraju /**
58c943b494SChandan Uddaraju  * struct dp_ctrl_resource - controller's IO related data
59c943b494SChandan Uddaraju  *
60c943b494SChandan Uddaraju  * @dp_controller: Display Port controller mapped memory address
61c943b494SChandan Uddaraju  * @phy_io: phy's mapped memory address
62c943b494SChandan Uddaraju  * @ln_tx0_io: USB-DP lane TX0's mapped memory address
63c943b494SChandan Uddaraju  * @ln_tx1_io: USB-DP lane TX1's mapped memory address
64c943b494SChandan Uddaraju  * @dp_pll_io: DP PLL mapped memory address
65c943b494SChandan Uddaraju  * @usb3_dp_com: USB3 DP PHY combo mapped memory address
66c943b494SChandan Uddaraju  */
67c943b494SChandan Uddaraju struct dp_io {
68c943b494SChandan Uddaraju 	struct dss_io_data dp_controller;
69c943b494SChandan Uddaraju 	struct dss_io_data phy_io;
70c943b494SChandan Uddaraju 	struct dss_io_data ln_tx0_io;
71c943b494SChandan Uddaraju 	struct dss_io_data ln_tx1_io;
72c943b494SChandan Uddaraju 	struct dss_io_data dp_pll_io;
73c943b494SChandan Uddaraju 	struct dss_io_data usb3_dp_com;
74c943b494SChandan Uddaraju };
75c943b494SChandan Uddaraju 
76c943b494SChandan Uddaraju /**
77c943b494SChandan Uddaraju  * struct dp_pinctrl - DP's pin control
78c943b494SChandan Uddaraju  *
79c943b494SChandan Uddaraju  * @pin: pin-controller's instance
80c943b494SChandan Uddaraju  * @state_active: active state pin control
81c943b494SChandan Uddaraju  * @state_hpd_active: hpd active state pin control
82c943b494SChandan Uddaraju  * @state_suspend: suspend state pin control
83c943b494SChandan Uddaraju  */
84c943b494SChandan Uddaraju struct dp_pinctrl {
85c943b494SChandan Uddaraju 	struct pinctrl *pin;
86c943b494SChandan Uddaraju 	struct pinctrl_state *state_active;
87c943b494SChandan Uddaraju 	struct pinctrl_state *state_hpd_active;
88c943b494SChandan Uddaraju 	struct pinctrl_state *state_suspend;
89c943b494SChandan Uddaraju };
90c943b494SChandan Uddaraju 
91c943b494SChandan Uddaraju #define DP_DEV_REGULATOR_MAX	4
92c943b494SChandan Uddaraju 
93c943b494SChandan Uddaraju /* Regulators for DP devices */
94c943b494SChandan Uddaraju struct dp_reg_entry {
95c943b494SChandan Uddaraju 	char name[32];
96c943b494SChandan Uddaraju 	int enable_load;
97c943b494SChandan Uddaraju 	int disable_load;
98c943b494SChandan Uddaraju };
99c943b494SChandan Uddaraju 
100c943b494SChandan Uddaraju struct dp_regulator_cfg {
101c943b494SChandan Uddaraju 	int num;
102c943b494SChandan Uddaraju 	struct dp_reg_entry regs[DP_DEV_REGULATOR_MAX];
103c943b494SChandan Uddaraju };
104c943b494SChandan Uddaraju 
105c943b494SChandan Uddaraju /**
106c943b494SChandan Uddaraju  * struct dp_parser - DP parser's data exposed to clients
107c943b494SChandan Uddaraju  *
108c943b494SChandan Uddaraju  * @pdev: platform data of the client
109c943b494SChandan Uddaraju  * @mp: gpio, regulator and clock related data
110c943b494SChandan Uddaraju  * @pinctrl: pin-control related data
111c943b494SChandan Uddaraju  * @disp_data: controller's display related data
112c943b494SChandan Uddaraju  * @parse: function to be called by client to parse device tree.
113c943b494SChandan Uddaraju  */
114c943b494SChandan Uddaraju struct dp_parser {
115c943b494SChandan Uddaraju 	struct platform_device *pdev;
116c943b494SChandan Uddaraju 	struct dss_module_power mp[DP_MAX_PM];
117c943b494SChandan Uddaraju 	struct dp_pinctrl pinctrl;
118c943b494SChandan Uddaraju 	struct dp_io io;
119c943b494SChandan Uddaraju 	struct dp_display_data disp_data;
120c943b494SChandan Uddaraju 	const struct dp_regulator_cfg *regulator_cfg;
121c943b494SChandan Uddaraju 	u32 max_dp_lanes;
122c943b494SChandan Uddaraju 
123c943b494SChandan Uddaraju 	int (*parse)(struct dp_parser *parser);
124c943b494SChandan Uddaraju };
125c943b494SChandan Uddaraju 
126c943b494SChandan Uddaraju /**
127c943b494SChandan Uddaraju  * dp_parser_get() - get the DP's device tree parser module
128c943b494SChandan Uddaraju  *
129c943b494SChandan Uddaraju  * @pdev: platform data of the client
130c943b494SChandan Uddaraju  * return: pointer to dp_parser structure.
131c943b494SChandan Uddaraju  *
132c943b494SChandan Uddaraju  * This function provides client capability to parse the
133c943b494SChandan Uddaraju  * device tree and populate the data structures. The data
134c943b494SChandan Uddaraju  * related to clock, regulators, pin-control and other
135c943b494SChandan Uddaraju  * can be parsed using this module.
136c943b494SChandan Uddaraju  */
137c943b494SChandan Uddaraju struct dp_parser *dp_parser_get(struct platform_device *pdev);
138c943b494SChandan Uddaraju 
139c943b494SChandan Uddaraju #endif
140