1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (c) 2012-2020, The Linux Foundation. All rights reserved.
4  */
5 
6 #ifndef _DP_POWER_H_
7 #define _DP_POWER_H_
8 
9 #include "dp_parser.h"
10 
11 /**
12  * sruct dp_power - DisplayPort's power related data
13  *
14  * @init: initializes the regulators/core clocks/GPIOs/pinctrl
15  * @deinit: turns off the regulators/core clocks/GPIOs/pinctrl
16  * @clk_enable: enable/disable the DP clocks
17  * @set_pixel_clk_parent: set the parent of DP pixel clock
18  */
19 struct dp_power {
20 	bool core_clks_on;
21 	bool link_clks_on;
22 	bool stream_clks_on;
23 };
24 
25 /**
26  * dp_power_init() - enable power supplies for display controller
27  *
28  * @power: instance of power module
29  * @flip: bool for flipping gpio direction
30  * return: 0 if success or error if failure.
31  *
32  * This API will turn on the regulators and configures gpio's
33  * aux/hpd.
34  */
35 int dp_power_init(struct dp_power *power, bool flip);
36 
37 /**
38  * dp_power_deinit() - turn off regulators and gpios.
39  *
40  * @power: instance of power module
41  * return: 0 for success
42  *
43  * This API turns off power and regulators.
44  */
45 int dp_power_deinit(struct dp_power *power);
46 
47 /**
48  * dp_power_clk_status() - display controller clocks status
49  *
50  * @power: instance of power module
51  * @pm_type: type of pm, core/ctrl/phy
52  * return: status of power clocks
53  *
54  * This API return status of DP clocks
55  */
56 
57 int dp_power_clk_status(struct dp_power *dp_power, enum dp_pm_type pm_type);
58 
59 /**
60  * dp_power_clk_enable() - enable display controller clocks
61  *
62  * @power: instance of power module
63  * @pm_type: type of pm, core/ctrl/phy
64  * @enable: enables or disables
65  * return: pointer to allocated power module data
66  *
67  * This API will call setrate and enable for DP clocks
68  */
69 
70 int dp_power_clk_enable(struct dp_power *power, enum dp_pm_type pm_type,
71 				bool enable);
72 
73 /**
74  * dp_power_client_init() - initialize clock and regulator modules
75  *
76  * @power: instance of power module
77  * return: 0 for success, error for failure.
78  *
79  * This API will configure the DisplayPort's clocks and regulator
80  * modules.
81  */
82 int dp_power_client_init(struct dp_power *power);
83 
84 /**
85  * dp_power_clinet_deinit() - de-initialize clock and regulator modules
86  *
87  * @power: instance of power module
88  * return: 0 for success, error for failure.
89  *
90  * This API will de-initialize the DisplayPort's clocks and regulator
91  * modules.
92  */
93 void dp_power_client_deinit(struct dp_power *power);
94 
95 /**
96  * dp_power_get() - configure and get the DisplayPort power module data
97  *
98  * @parser: instance of parser module
99  * return: pointer to allocated power module data
100  *
101  * This API will configure the DisplayPort's power module and provides
102  * methods to be called by the client to configure the power related
103  * modules.
104  */
105 struct dp_power *dp_power_get(struct device *dev, struct dp_parser *parser);
106 
107 #endif /* _DP_POWER_H_ */
108