Allow boards to initialize the DT at runtime.
[platform/kernel/u-boot.git] / include / power-domain-uclass.h
1 /*
2  * Copyright (c) 2016, NVIDIA CORPORATION.
3  *
4  * SPDX-License-Identifier: GPL-2.0
5  */
6
7 #ifndef _POWER_DOMAIN_UCLASS_H
8 #define _POWER_DOMAIN_UCLASS_H
9
10 /* See power-domain.h for background documentation. */
11
12 #include <power-domain.h>
13
14 struct udevice;
15
16 /**
17  * struct power_domain_ops - The functions that a power domain controller driver
18  * must implement.
19  */
20 struct power_domain_ops {
21         /**
22          * of_xlate - Translate a client's device-tree (OF) power domain
23          * specifier.
24          *
25          * The power domain core calls this function as the first step in
26          * implementing a client's power_domain_get() call.
27          *
28          * If this function pointer is set to NULL, the power domain core will
29          * use a default implementation, which assumes #power-domain-cells =
30          * <1>, and that the DT cell contains a simple integer power domain ID.
31          *
32          * At present, the power domain API solely supports device-tree. If
33          * this changes, other xxx_xlate() functions may be added to support
34          * those other mechanisms.
35          *
36          * @power_domain:       The power domain struct to hold the
37          *                      translation result.
38          * @args:               The power domain specifier values from device
39          *                      tree.
40          * @return 0 if OK, or a negative error code.
41          */
42         int (*of_xlate)(struct power_domain *power_domain,
43                         struct fdtdec_phandle_args *args);
44         /**
45          * request - Request a translated power domain.
46          *
47          * The power domain core calls this function as the second step in
48          * implementing a client's power_domain_get() call, following a
49          * successful xxx_xlate() call.
50          *
51          * @power_domain:       The power domain to request; this has been
52          *                      filled in by a previous xxx_xlate() function
53          *                      call.
54          * @return 0 if OK, or a negative error code.
55          */
56         int (*request)(struct power_domain *power_domain);
57         /**
58          * free - Free a previously requested power domain.
59          *
60          * This is the implementation of the client power_domain_free() API.
61          *
62          * @power_domain:       The power domain to free.
63          * @return 0 if OK, or a negative error code.
64          */
65         int (*free)(struct power_domain *power_domain);
66         /**
67          * on - Power on a power domain.
68          *
69          * @power_domain:       The power domain to turn on.
70          * @return 0 if OK, or a negative error code.
71          */
72         int (*on)(struct power_domain *power_domain);
73         /**
74          * off - Power off a power domain.
75          *
76          * @power_domain:       The power domain to turn off.
77          * @return 0 if OK, or a negative error code.
78          */
79         int (*off)(struct power_domain *power_domain);
80 };
81
82 #endif