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