lib: rational: copy the rational fraction lib routines from Linux
[platform/kernel/u-boot.git] / include / phy-mipi-dphy.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2018 Cadence Design Systems Inc.
4  */
5
6 #ifndef __PHY_MIPI_DPHY_H_
7 #define __PHY_MIPI_DPHY_H_
8
9 /**
10  * struct phy_configure_opts_mipi_dphy - MIPI D-PHY configuration set
11  *
12  * This structure is used to represent the configuration state of a
13  * MIPI D-PHY phy.
14  */
15 struct phy_configure_opts_mipi_dphy {
16         /**
17          * @clk_miss:
18          *
19          * Timeout, in picoseconds, for receiver to detect absence of
20          * Clock transitions and disable the Clock Lane HS-RX.
21          *
22          * Maximum value: 60000 ps
23          */
24         unsigned int            clk_miss;
25
26         /**
27          * @clk_post:
28          *
29          * Time, in picoseconds, that the transmitter continues to
30          * send HS clock after the last associated Data Lane has
31          * transitioned to LP Mode. Interval is defined as the period
32          * from the end of @hs_trail to the beginning of @clk_trail.
33          *
34          * Minimum value: 60000 ps + 52 * @hs_clk_rate period in ps
35          */
36         unsigned int            clk_post;
37
38         /**
39          * @clk_pre:
40          *
41          * Time, in UI, that the HS clock shall be driven by
42          * the transmitter prior to any associated Data Lane beginning
43          * the transition from LP to HS mode.
44          *
45          * Minimum value: 8 UI
46          */
47         unsigned int            clk_pre;
48
49         /**
50          * @clk_prepare:
51          *
52          * Time, in picoseconds, that the transmitter drives the Clock
53          * Lane LP-00 Line state immediately before the HS-0 Line
54          * state starting the HS transmission.
55          *
56          * Minimum value: 38000 ps
57          * Maximum value: 95000 ps
58          */
59         unsigned int            clk_prepare;
60
61         /**
62          * @clk_settle:
63          *
64          * Time interval, in picoseconds, during which the HS receiver
65          * should ignore any Clock Lane HS transitions, starting from
66          * the beginning of @clk_prepare.
67          *
68          * Minimum value: 95000 ps
69          * Maximum value: 300000 ps
70          */
71         unsigned int            clk_settle;
72
73         /**
74          * @clk_term_en:
75          *
76          * Time, in picoseconds, for the Clock Lane receiver to enable
77          * the HS line termination.
78          *
79          * Maximum value: 38000 ps
80          */
81         unsigned int            clk_term_en;
82
83         /**
84          * @clk_trail:
85          *
86          * Time, in picoseconds, that the transmitter drives the HS-0
87          * state after the last payload clock bit of a HS transmission
88          * burst.
89          *
90          * Minimum value: 60000 ps
91          */
92         unsigned int            clk_trail;
93
94         /**
95          * @clk_zero:
96          *
97          * Time, in picoseconds, that the transmitter drives the HS-0
98          * state prior to starting the Clock.
99          */
100         unsigned int            clk_zero;
101
102         /**
103          * @d_term_en:
104          *
105          * Time, in picoseconds, for the Data Lane receiver to enable
106          * the HS line termination.
107          *
108          * Maximum value: 35000 ps + 4 * @hs_clk_rate period in ps
109          */
110         unsigned int            d_term_en;
111
112         /**
113          * @eot:
114          *
115          * Transmitted time interval, in picoseconds, from the start
116          * of @hs_trail or @clk_trail, to the start of the LP- 11
117          * state following a HS burst.
118          *
119          * Maximum value: 105000 ps + 12 * @hs_clk_rate period in ps
120          */
121         unsigned int            eot;
122
123         /**
124          * @hs_exit:
125          *
126          * Time, in picoseconds, that the transmitter drives LP-11
127          * following a HS burst.
128          *
129          * Minimum value: 100000 ps
130          */
131         unsigned int            hs_exit;
132
133         /**
134          * @hs_prepare:
135          *
136          * Time, in picoseconds, that the transmitter drives the Data
137          * Lane LP-00 Line state immediately before the HS-0 Line
138          * state starting the HS transmission.
139          *
140          * Minimum value: 40000 ps + 4 * @hs_clk_rate period in ps
141          * Maximum value: 85000 ps + 6 * @hs_clk_rate period in ps
142          */
143         unsigned int            hs_prepare;
144
145         /**
146          * @hs_settle:
147          *
148          * Time interval, in picoseconds, during which the HS receiver
149          * shall ignore any Data Lane HS transitions, starting from
150          * the beginning of @hs_prepare.
151          *
152          * Minimum value: 85000 ps + 6 * @hs_clk_rate period in ps
153          * Maximum value: 145000 ps + 10 * @hs_clk_rate period in ps
154          */
155         unsigned int            hs_settle;
156
157         /**
158          * @hs_skip:
159          *
160          * Time interval, in picoseconds, during which the HS-RX
161          * should ignore any transitions on the Data Lane, following a
162          * HS burst. The end point of the interval is defined as the
163          * beginning of the LP-11 state following the HS burst.
164          *
165          * Minimum value: 40000 ps
166          * Maximum value: 55000 ps + 4 * @hs_clk_rate period in ps
167          */
168         unsigned int            hs_skip;
169
170         /**
171          * @hs_trail:
172          *
173          * Time, in picoseconds, that the transmitter drives the
174          * flipped differential state after last payload data bit of a
175          * HS transmission burst
176          *
177          * Minimum value: max(8 * @hs_clk_rate period in ps,
178          *                    60000 ps + 4 * @hs_clk_rate period in ps)
179          */
180         unsigned int            hs_trail;
181
182         /**
183          * @hs_zero:
184          *
185          * Time, in picoseconds, that the transmitter drives the HS-0
186          * state prior to transmitting the Sync sequence.
187          */
188         unsigned int            hs_zero;
189
190         /**
191          * @init:
192          *
193          * Time, in microseconds for the initialization period to
194          * complete.
195          *
196          * Minimum value: 100 us
197          */
198         unsigned int            init;
199
200         /**
201          * @lpx:
202          *
203          * Transmitted length, in picoseconds, of any Low-Power state
204          * period.
205          *
206          * Minimum value: 50000 ps
207          */
208         unsigned int            lpx;
209
210         /**
211          * @ta_get:
212          *
213          * Time, in picoseconds, that the new transmitter drives the
214          * Bridge state (LP-00) after accepting control during a Link
215          * Turnaround.
216          *
217          * Value: 5 * @lpx
218          */
219         unsigned int            ta_get;
220
221         /**
222          * @ta_go:
223          *
224          * Time, in picoseconds, that the transmitter drives the
225          * Bridge state (LP-00) before releasing control during a Link
226          * Turnaround.
227          *
228          * Value: 4 * @lpx
229          */
230         unsigned int            ta_go;
231
232         /**
233          * @ta_sure:
234          *
235          * Time, in picoseconds, that the new transmitter waits after
236          * the LP-10 state before transmitting the Bridge state
237          * (LP-00) during a Link Turnaround.
238          *
239          * Minimum value: @lpx
240          * Maximum value: 2 * @lpx
241          */
242         unsigned int            ta_sure;
243
244         /**
245          * @wakeup:
246          *
247          * Time, in microseconds, that a transmitter drives a Mark-1
248          * state prior to a Stop state in order to initiate an exit
249          * from ULPS.
250          *
251          * Minimum value: 1000 us
252          */
253         unsigned int            wakeup;
254
255         /**
256          * @hs_clk_rate:
257          *
258          * Clock rate, in Hertz, of the high-speed clock.
259          */
260         unsigned long           hs_clk_rate;
261
262         /**
263          * @lp_clk_rate:
264          *
265          * Clock rate, in Hertz, of the low-power clock.
266          */
267         unsigned long           lp_clk_rate;
268
269         /**
270          * @lanes:
271          *
272          * Number of active, consecutive, data lanes, starting from
273          * lane 0, used for the transmissions.
274          */
275         unsigned char           lanes;
276 };
277
278 int phy_mipi_dphy_get_default_config(unsigned long pixel_clock,
279                                      unsigned int bpp,
280                                      unsigned int lanes,
281                                      struct phy_configure_opts_mipi_dphy *cfg);
282 int phy_mipi_dphy_config_validate(struct phy_configure_opts_mipi_dphy *cfg);
283
284 #endif /* __PHY_MIPI_DPHY_H_ */