1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2017-2019 NXP
4  *
5  * SPDX-License-Identifier: BSD-3-Clause
6  *
7  * Redistribution and use in source and binary forms, with or without modification,
8  * are permitted provided that the following conditions are met:
9  *
10  * o Redistributions of source code must retain the above copyright notice, this list
11  *   of conditions and the following disclaimer.
12  *
13  * o Redistributions in binary form must reproduce the above copyright notice, this
14  *   list of conditions and the following disclaimer in the documentation and/or
15  *   other materials provided with the distribution.
16  *
17  * o Neither the name of the copyright holder nor the names of its
18  *   contributors may be used to endorse or promote products derived from this
19  *   software without specific prior written permission.
20  *
21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
23  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
24  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
25  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
28  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 /*!
34  * Header file containing the public API for the System Controller (SC)
35  * Pad Control (PAD) function.
36  *
37  * @addtogroup PAD_SVC PAD: Pad Service
38  *
39  * Module for the Pad Control (PAD) service.
40  *
41  * @details
42  *
43  * Pad configuration is managed by SC firmware. The pad configuration
44  * features supported by the SC firmware include:
45  *
46  * - Configuring the mux, input/output connection, and low-power isolation
47      mode.
48  * - Configuring the technology-specific pad setting such as drive strength,
49  *   pullup/pulldown, etc.
50  * - Configuring compensation for pad groups with dual voltage capability.
51  *
52  * Pad functions fall into one of three categories. Generic functions are
53  * common to all SoCs and all process technologies. SoC functions are raw
54  * low-level functions. Technology-specific functions are specific to the
55  * process technology.
56  *
57  * The list of pads is SoC specific.  Refer to the SoC [Pad List](@ref PADS)
58  * for valid pad values. Note that all pads exist on a die but may or
59  * may not be brought out by the specific package.  Mapping of pads to
60  * package pins/balls is documented in the associated Data Sheet. Some pads
61  * may not be brought out because the part (die+package) is defeatured and
62  * some pads may connect to the substrate in the package.
63  *
64  * Some pads (SC_P_COMP_*) that can be specified are not individual pads
65  * but are in fact pad groups. These groups have additional configuration
66  * that can be done using the sc_pad_set_gp_28fdsoi_comp() function. More
67  * info on these can be found in the associated Reference Manual.
68  *
69  * Pads are managed as a resource by the Resource Manager (RM).  They have
70  * assigned owners and only the owners can configure the pads. Some of the
71  * pads are reserved for use by the SCFW itself and this can be overridden
72  * with the implementation of board_config_sc(). Additionally, pads may
73  * be assigned to various other partitions via the implementation of
74  * board_system_config().
75  *
76  * Note muxing two input pads to the same IP functional signal will
77  * result in undefined behavior.
78  *
79  * @includedoc pad/details.dox
80  *
81  * @{
82  */
83 
84 #ifndef SC_PAD_API_H
85 #define SC_PAD_API_H
86 
87 /* Includes */
88 
89 #include "main/types.h"
90 #include "svc/rm/rm_api.h"
91 
92 /* Defines */
93 
94 /*!
95  * @name Defines for type widths
96  */
97 /*@{*/
98 #define SC_PAD_MUX_W            3U    /*!< Width of mux parameter */
99 /*@}*/
100 
101 /*!
102  * @name Defines for sc_pad_config_t
103  */
104 /*@{*/
105 #define SC_PAD_CONFIG_NORMAL    0U    /*!< Normal */
106 #define SC_PAD_CONFIG_OD        1U    /*!< Open Drain */
107 #define SC_PAD_CONFIG_OD_IN     2U    /*!< Open Drain and input */
108 #define SC_PAD_CONFIG_OUT_IN    3U    /*!< Output and input */
109 /*@}*/
110 
111 /*!
112  * @name Defines for sc_pad_iso_t
113  */
114 /*@{*/
115 #define SC_PAD_ISO_OFF          0U    /*!< ISO latch is transparent */
116 #define SC_PAD_ISO_EARLY        1U    /*!< Follow EARLY_ISO */
117 #define SC_PAD_ISO_LATE         2U    /*!< Follow LATE_ISO */
118 #define SC_PAD_ISO_ON           3U    /*!< ISO latched data is held */
119 /*@}*/
120 
121 /*!
122  * @name Defines for sc_pad_28fdsoi_dse_t
123  */
124 /*@{*/
125 #define SC_PAD_28FDSOI_DSE_18V_1MA   0U    /*!< Drive strength of 1mA for 1.8v */
126 #define SC_PAD_28FDSOI_DSE_18V_2MA   1U    /*!< Drive strength of 2mA for 1.8v */
127 #define SC_PAD_28FDSOI_DSE_18V_4MA   2U    /*!< Drive strength of 4mA for 1.8v */
128 #define SC_PAD_28FDSOI_DSE_18V_6MA   3U    /*!< Drive strength of 6mA for 1.8v */
129 #define SC_PAD_28FDSOI_DSE_18V_8MA   4U    /*!< Drive strength of 8mA for 1.8v */
130 #define SC_PAD_28FDSOI_DSE_18V_10MA  5U    /*!< Drive strength of 10mA for 1.8v */
131 #define SC_PAD_28FDSOI_DSE_18V_12MA  6U    /*!< Drive strength of 12mA for 1.8v */
132 #define SC_PAD_28FDSOI_DSE_18V_HS    7U    /*!< High-speed drive strength for 1.8v */
133 #define SC_PAD_28FDSOI_DSE_33V_2MA   0U    /*!< Drive strength of 2mA for 3.3v */
134 #define SC_PAD_28FDSOI_DSE_33V_4MA   1U    /*!< Drive strength of 4mA for 3.3v */
135 #define SC_PAD_28FDSOI_DSE_33V_8MA   2U    /*!< Drive strength of 8mA for 3.3v */
136 #define SC_PAD_28FDSOI_DSE_33V_12MA  3U    /*!< Drive strength of 12mA for 3.3v */
137 #define SC_PAD_28FDSOI_DSE_DV_HIGH   0U    /*!< High drive strength for dual volt */
138 #define SC_PAD_28FDSOI_DSE_DV_LOW    1U    /*!< Low drive strength for dual volt */
139 /*@}*/
140 
141 /*!
142  * @name Defines for sc_pad_28fdsoi_ps_t
143  */
144 /*@{*/
145 #define SC_PAD_28FDSOI_PS_KEEPER 0U    /*!< Bus-keeper (only valid for 1.8v) */
146 #define SC_PAD_28FDSOI_PS_PU     1U    /*!< Pull-up */
147 #define SC_PAD_28FDSOI_PS_PD     2U    /*!< Pull-down */
148 #define SC_PAD_28FDSOI_PS_NONE   3U    /*!< No pull (disabled) */
149 /*@}*/
150 
151 /*!
152  * @name Defines for sc_pad_28fdsoi_pus_t
153  */
154 /*@{*/
155 #define SC_PAD_28FDSOI_PUS_30K_PD  0U    /*!< 30K pull-down */
156 #define SC_PAD_28FDSOI_PUS_100K_PU 1U    /*!< 100K pull-up */
157 #define SC_PAD_28FDSOI_PUS_3K_PU   2U    /*!< 3K pull-up */
158 #define SC_PAD_28FDSOI_PUS_30K_PU  3U    /*!< 30K pull-up */
159 /*@}*/
160 
161 /*!
162  * @name Defines for sc_pad_wakeup_t
163  */
164 /*@{*/
165 #define SC_PAD_WAKEUP_OFF       0U    /*!< Off */
166 #define SC_PAD_WAKEUP_CLEAR     1U    /*!< Clears pending flag */
167 #define SC_PAD_WAKEUP_LOW_LVL   4U    /*!< Low level */
168 #define SC_PAD_WAKEUP_FALL_EDGE 5U    /*!< Falling edge */
169 #define SC_PAD_WAKEUP_RISE_EDGE 6U    /*!< Rising edge */
170 #define SC_PAD_WAKEUP_HIGH_LVL  7U    /*!< High-level */
171 /*@}*/
172 
173 /* Types */
174 
175 /*!
176  * This type is used to declare a pad config. It determines how the
177  * output data is driven, pull-up is controlled, and input signal is
178  * connected. Normal and OD are typical and only connect the input
179  * when the output is not driven.  The IN options are less common and
180  * force an input connection even when driving the output.
181  */
182 typedef uint8_t sc_pad_config_t;
183 
184 /*!
185  * This type is used to declare a pad low-power isolation config.
186  * ISO_LATE is the most common setting. ISO_EARLY is only used when
187  * an output pad is directly determined by another input pad. The
188  * other two are only used when SW wants to directly control isolation.
189  */
190 typedef uint8_t sc_pad_iso_t;
191 
192 /*!
193  * This type is used to declare a drive strength. Note it is specific
194  * to 28FDSOI. Also note that valid values depend on the pad type.
195  */
196 typedef uint8_t sc_pad_28fdsoi_dse_t;
197 
198 /*!
199  * This type is used to declare a pull select. Note it is specific
200  * to 28FDSOI.
201  */
202 typedef uint8_t sc_pad_28fdsoi_ps_t;
203 
204 /*!
205  * This type is used to declare a pull-up select. Note it is specific
206  * to 28FDSOI HSIC pads.
207  */
208 typedef uint8_t sc_pad_28fdsoi_pus_t;
209 
210 /*!
211  * This type is used to declare a wakeup mode of a pad.
212  */
213 typedef uint8_t sc_pad_wakeup_t;
214 
215 /* Functions */
216 
217 /*!
218  * @name Generic Functions
219  * @{
220  */
221 
222 /*!
223  * This function configures the mux settings for a pad. This includes
224  * the signal mux, pad config, and low-power isolation mode.
225  *
226  * @param[in]     ipc         IPC handle
227  * @param[in]     pad         pad to configure
228  * @param[in]     mux         mux setting
229  * @param[in]     config      pad config
230  * @param[in]     iso         low-power isolation mode
231  *
232  * @return Returns an error code (SC_ERR_NONE = success).
233  *
234  * Return errors:
235  * - SC_PARM if arguments out of range or invalid,
236  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
237  *
238  * Note muxing two input pads to the same IP functional signal will
239  * result in undefined behavior.
240  *
241  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
242  */
243 sc_err_t sc_pad_set_mux(sc_ipc_t ipc, sc_pad_t pad,
244     uint8_t mux, sc_pad_config_t config, sc_pad_iso_t iso);
245 
246 /*!
247  * This function gets the mux settings for a pad. This includes
248  * the signal mux, pad config, and low-power isolation mode.
249  *
250  * @param[in]     ipc         IPC handle
251  * @param[in]     pad         pad to query
252  * @param[out]    mux         pointer to return mux setting
253  * @param[out]    config      pointer to return pad config
254  * @param[out]    iso         pointer to return low-power isolation mode
255  *
256  * @return Returns an error code (SC_ERR_NONE = success).
257  *
258  * Return errors:
259  * - SC_PARM if arguments out of range or invalid,
260  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
261  *
262  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
263  */
264 sc_err_t sc_pad_get_mux(sc_ipc_t ipc, sc_pad_t pad,
265     uint8_t *mux, sc_pad_config_t *config, sc_pad_iso_t *iso);
266 
267 /*!
268  * This function configures the general purpose pad control. This
269  * is technology dependent and includes things like drive strength,
270  * slew rate, pull up/down, etc. Refer to the SoC Reference Manual
271  * for bit field details.
272  *
273  * @param[in]     ipc         IPC handle
274  * @param[in]     pad         pad to configure
275  * @param[in]     ctrl        control value to set
276  *
277  * @return Returns an error code (SC_ERR_NONE = success).
278  *
279  * Return errors:
280  * - SC_PARM if arguments out of range or invalid,
281  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
282  *
283  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
284  */
285 sc_err_t sc_pad_set_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t ctrl);
286 
287 /*!
288  * This function gets the general purpose pad control. This
289  * is technology dependent and includes things like drive strength,
290  * slew rate, pull up/down, etc. Refer to the SoC Reference Manual
291  * for bit field details.
292  *
293  * @param[in]     ipc         IPC handle
294  * @param[in]     pad         pad to query
295  * @param[out]    ctrl        pointer to return control value
296  *
297  * @return Returns an error code (SC_ERR_NONE = success).
298  *
299  * Return errors:
300  * - SC_PARM if arguments out of range or invalid,
301  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
302  *
303  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
304  */
305 sc_err_t sc_pad_get_gp(sc_ipc_t ipc, sc_pad_t pad, uint32_t *ctrl);
306 
307 /*!
308  * This function configures the wakeup mode of the pad.
309  *
310  * @param[in]     ipc         IPC handle
311  * @param[in]     pad         pad to configure
312  * @param[in]     wakeup      wakeup to set
313  *
314  * @return Returns an error code (SC_ERR_NONE = success).
315  *
316  * Return errors:
317  * - SC_PARM if arguments out of range or invalid,
318  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
319  *
320  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
321  */
322 sc_err_t sc_pad_set_wakeup(sc_ipc_t ipc, sc_pad_t pad,
323     sc_pad_wakeup_t wakeup);
324 
325 /*!
326  * This function gets the wakeup mode of a pad.
327  *
328  * @param[in]     ipc         IPC handle
329  * @param[in]     pad         pad to query
330  * @param[out]    wakeup      pointer to return wakeup
331  *
332  * @return Returns an error code (SC_ERR_NONE = success).
333  *
334  * Return errors:
335  * - SC_PARM if arguments out of range or invalid,
336  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
337  *
338  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
339  */
340 sc_err_t sc_pad_get_wakeup(sc_ipc_t ipc, sc_pad_t pad,
341     sc_pad_wakeup_t *wakeup);
342 
343 /*!
344  * This function configures a pad.
345  *
346  * @param[in]     ipc         IPC handle
347  * @param[in]     pad         pad to configure
348  * @param[in]     mux         mux setting
349  * @param[in]     config      pad config
350  * @param[in]     iso         low-power isolation mode
351  * @param[in]     ctrl        control value
352  * @param[in]     wakeup      wakeup to set
353  *
354  * @see sc_pad_set_mux().
355  * @see sc_pad_set_gp().
356  *
357  * Return errors:
358  * - SC_PARM if arguments out of range or invalid,
359  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
360  *
361  * @return Returns an error code (SC_ERR_NONE = success).
362  *
363  * Note muxing two input pads to the same IP functional signal will
364  * result in undefined behavior.
365  *
366  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
367  */
368 sc_err_t sc_pad_set_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t mux,
369     sc_pad_config_t config, sc_pad_iso_t iso, uint32_t ctrl,
370     sc_pad_wakeup_t wakeup);
371 
372 /*!
373  * This function gets a pad's config.
374  *
375  * @param[in]     ipc         IPC handle
376  * @param[in]     pad         pad to query
377  * @param[out]    mux         pointer to return mux setting
378  * @param[out]    config      pointer to return pad config
379  * @param[out]    iso         pointer to return low-power isolation mode
380  * @param[out]    ctrl        pointer to return control value
381  * @param[out]    wakeup      pointer to return wakeup to set
382  *
383  * @see sc_pad_set_mux().
384  * @see sc_pad_set_gp().
385  *
386  * Return errors:
387  * - SC_PARM if arguments out of range or invalid,
388  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
389  *
390  * @return Returns an error code (SC_ERR_NONE = success).
391  *
392  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
393  */
394 sc_err_t sc_pad_get_all(sc_ipc_t ipc, sc_pad_t pad, uint8_t *mux,
395     sc_pad_config_t *config, sc_pad_iso_t *iso, uint32_t *ctrl,
396     sc_pad_wakeup_t *wakeup);
397 
398 /* @} */
399 
400 /*!
401  * @name SoC Specific Functions
402  * @{
403  */
404 
405 /*!
406  * This function configures the settings for a pad. This setting is SoC
407  * specific.
408  *
409  * @param[in]     ipc         IPC handle
410  * @param[in]     pad         pad to configure
411  * @param[in]     val         value to set
412  *
413  * @return Returns an error code (SC_ERR_NONE = success).
414  *
415  * Return errors:
416  * - SC_PARM if arguments out of range or invalid,
417  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
418  *
419  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
420  */
421 sc_err_t sc_pad_set(sc_ipc_t ipc, sc_pad_t pad, uint32_t val);
422 
423 /*!
424  * This function gets the settings for a pad. This setting is SoC
425  * specific.
426  *
427  * @param[in]     ipc         IPC handle
428  * @param[in]     pad         pad to query
429  * @param[out]    val         pointer to return setting
430  *
431  * @return Returns an error code (SC_ERR_NONE = success).
432  *
433  * Return errors:
434  * - SC_PARM if arguments out of range or invalid,
435  * - SC_ERR_NOACCESS if caller's partition is not the pad owner
436  *
437  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
438  */
439 sc_err_t sc_pad_get(sc_ipc_t ipc, sc_pad_t pad, uint32_t *val);
440 
441 /* @} */
442 
443 /*!
444  * @name Technology Specific Functions
445  * @{
446  */
447 
448 /*!
449  * This function configures the pad control specific to 28FDSOI.
450  *
451  * @param[in]     ipc         IPC handle
452  * @param[in]     pad         pad to configure
453  * @param[in]     dse         drive strength
454  * @param[in]     ps          pull select
455  *
456  * @return Returns an error code (SC_ERR_NONE = success).
457  *
458  * Return errors:
459  * - SC_PARM if arguments out of range or invalid,
460  * - SC_ERR_NOACCESS if caller's partition is not the pad owner,
461  * - SC_ERR_UNAVAILABLE if process not applicable
462  *
463  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
464  */
465 sc_err_t sc_pad_set_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
466     sc_pad_28fdsoi_dse_t dse, sc_pad_28fdsoi_ps_t ps);
467 
468 /*!
469  * This function gets the pad control specific to 28FDSOI.
470  *
471  * @param[in]     ipc         IPC handle
472  * @param[in]     pad         pad to query
473  * @param[out]    dse         pointer to return drive strength
474  * @param[out]    ps          pointer to return pull select
475  *
476  * @return Returns an error code (SC_ERR_NONE = success).
477  *
478  * Return errors:
479  * - SC_PARM if arguments out of range or invalid,
480  * - SC_ERR_NOACCESS if caller's partition is not the pad owner,
481  * - SC_ERR_UNAVAILABLE if process not applicable
482  *
483  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
484  */
485 sc_err_t sc_pad_get_gp_28fdsoi(sc_ipc_t ipc, sc_pad_t pad,
486     sc_pad_28fdsoi_dse_t *dse, sc_pad_28fdsoi_ps_t *ps);
487 
488 /*!
489  * This function configures the pad control specific to 28FDSOI.
490  *
491  * @param[in]     ipc         IPC handle
492  * @param[in]     pad         pad to configure
493  * @param[in]     dse         drive strength
494  * @param[in]     hys         hysteresis
495  * @param[in]     pus         pull-up select
496  * @param[in]     pke         pull keeper enable
497  * @param[in]     pue         pull-up enable
498  *
499  * @return Returns an error code (SC_ERR_NONE = success).
500  *
501  * Return errors:
502  * - SC_PARM if arguments out of range or invalid,
503  * - SC_ERR_NOACCESS if caller's partition is not the pad owner,
504  * - SC_ERR_UNAVAILABLE if process not applicable
505  *
506  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
507  */
508 sc_err_t sc_pad_set_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad,
509     sc_pad_28fdsoi_dse_t dse, sc_bool_t hys, sc_pad_28fdsoi_pus_t pus,
510     sc_bool_t pke, sc_bool_t pue);
511 
512 /*!
513  * This function gets the pad control specific to 28FDSOI.
514  *
515  * @param[in]     ipc         IPC handle
516  * @param[in]     pad         pad to query
517  * @param[out]    dse         pointer to return drive strength
518  * @param[out]    hys         pointer to return hysteresis
519  * @param[out]    pus         pointer to return pull-up select
520  * @param[out]    pke         pointer to return pull keeper enable
521  * @param[out]    pue         pointer to return pull-up enable
522  *
523  * @return Returns an error code (SC_ERR_NONE = success).
524  *
525  * Return errors:
526  * - SC_PARM if arguments out of range or invalid,
527  * - SC_ERR_NOACCESS if caller's partition is not the pad owner,
528  * - SC_ERR_UNAVAILABLE if process not applicable
529  *
530  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
531  */
532 sc_err_t sc_pad_get_gp_28fdsoi_hsic(sc_ipc_t ipc, sc_pad_t pad,
533     sc_pad_28fdsoi_dse_t *dse, sc_bool_t *hys, sc_pad_28fdsoi_pus_t *pus,
534     sc_bool_t *pke, sc_bool_t *pue);
535 
536 /*!
537  * This function configures the compensation control specific to 28FDSOI.
538  *
539  * @param[in]     ipc         IPC handle
540  * @param[in]     pad         pad to configure
541  * @param[in]     compen      compensation/freeze mode
542  * @param[in]     fastfrz     fast freeze
543  * @param[in]     rasrcp      compensation code for PMOS
544  * @param[in]     rasrcn      compensation code for NMOS
545  * @param[in]     nasrc_sel   NASRC read select
546  * @param[in]     psw_ovr     2.5v override
547  *
548  * @return Returns an error code (SC_ERR_NONE = success).
549  *
550  * Return errors:
551  * - SC_PARM if arguments out of range or invalid,
552  * - SC_ERR_NOACCESS if caller's partition is not the pad owner,
553  * - SC_ERR_UNAVAILABLE if process not applicable
554  *
555  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
556  *
557  * Note \a psw_ovr is only applicable to pads supporting 2.5 volt
558  * operation (e.g. some Ethernet pads).
559  */
560 sc_err_t sc_pad_set_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
561     uint8_t compen, sc_bool_t fastfrz, uint8_t rasrcp, uint8_t rasrcn,
562     sc_bool_t nasrc_sel, sc_bool_t psw_ovr);
563 
564 /*!
565  * This function gets the compensation control specific to 28FDSOI.
566  *
567  * @param[in]     ipc         IPC handle
568  * @param[in]     pad         pad to query
569  * @param[out]    compen      pointer to return compensation/freeze mode
570  * @param[out]    fastfrz     pointer to return fast freeze
571  * @param[out]    rasrcp      pointer to return compensation code for PMOS
572  * @param[out]    rasrcn      pointer to return compensation code for NMOS
573  * @param[out]    nasrc_sel   pointer to return NASRC read select
574  * @param[out]    compok      pointer to return compensation status
575  * @param[out]    nasrc       pointer to return NASRCP/NASRCN
576  * @param[out]    psw_ovr     pointer to return the 2.5v override
577  *
578  * @return Returns an error code (SC_ERR_NONE = success).
579  *
580  * Return errors:
581  * - SC_PARM if arguments out of range or invalid,
582  * - SC_ERR_NOACCESS if caller's partition is not the pad owner,
583  * - SC_ERR_UNAVAILABLE if process not applicable
584  *
585  * Refer to the SoC [Pad List](@ref PADS) for valid pad values.
586  */
587 sc_err_t sc_pad_get_gp_28fdsoi_comp(sc_ipc_t ipc, sc_pad_t pad,
588     uint8_t *compen, sc_bool_t *fastfrz, uint8_t *rasrcp, uint8_t *rasrcn,
589     sc_bool_t *nasrc_sel, sc_bool_t *compok, uint8_t *nasrc, sc_bool_t *psw_ovr);
590 
591 /* @} */
592 
593 #endif /* SC_PAD_API_H */
594 
595 /**@}*/
596 
597