1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 261f5ddcbSStephen Warren /* 361f5ddcbSStephen Warren * Copyright (c) 2016, NVIDIA CORPORATION. 461f5ddcbSStephen Warren */ 561f5ddcbSStephen Warren 661f5ddcbSStephen Warren #ifndef _POWER_DOMAIN_UCLASS_H 761f5ddcbSStephen Warren #define _POWER_DOMAIN_UCLASS_H 861f5ddcbSStephen Warren 961f5ddcbSStephen Warren /* See power-domain.h for background documentation. */ 1061f5ddcbSStephen Warren 1161f5ddcbSStephen Warren #include <power-domain.h> 1261f5ddcbSStephen Warren 1361f5ddcbSStephen Warren struct udevice; 1461f5ddcbSStephen Warren 1561f5ddcbSStephen Warren /** 1661f5ddcbSStephen Warren * struct power_domain_ops - The functions that a power domain controller driver 1761f5ddcbSStephen Warren * must implement. 1861f5ddcbSStephen Warren */ 1961f5ddcbSStephen Warren struct power_domain_ops { 2061f5ddcbSStephen Warren /** 2161f5ddcbSStephen Warren * of_xlate - Translate a client's device-tree (OF) power domain 2261f5ddcbSStephen Warren * specifier. 2361f5ddcbSStephen Warren * 2461f5ddcbSStephen Warren * The power domain core calls this function as the first step in 2561f5ddcbSStephen Warren * implementing a client's power_domain_get() call. 2661f5ddcbSStephen Warren * 2761f5ddcbSStephen Warren * If this function pointer is set to NULL, the power domain core will 2861f5ddcbSStephen Warren * use a default implementation, which assumes #power-domain-cells = 2961f5ddcbSStephen Warren * <1>, and that the DT cell contains a simple integer power domain ID. 3061f5ddcbSStephen Warren * 3161f5ddcbSStephen Warren * At present, the power domain API solely supports device-tree. If 3261f5ddcbSStephen Warren * this changes, other xxx_xlate() functions may be added to support 3361f5ddcbSStephen Warren * those other mechanisms. 3461f5ddcbSStephen Warren * 3561f5ddcbSStephen Warren * @power_domain: The power domain struct to hold the 3661f5ddcbSStephen Warren * translation result. 3761f5ddcbSStephen Warren * @args: The power domain specifier values from device 3861f5ddcbSStephen Warren * tree. 3961f5ddcbSStephen Warren * @return 0 if OK, or a negative error code. 4061f5ddcbSStephen Warren */ 4161f5ddcbSStephen Warren int (*of_xlate)(struct power_domain *power_domain, 42424b2fe9SSimon Glass struct ofnode_phandle_args *args); 4361f5ddcbSStephen Warren /** 4461f5ddcbSStephen Warren * request - Request a translated power domain. 4561f5ddcbSStephen Warren * 4661f5ddcbSStephen Warren * The power domain core calls this function as the second step in 4761f5ddcbSStephen Warren * implementing a client's power_domain_get() call, following a 4861f5ddcbSStephen Warren * successful xxx_xlate() call. 4961f5ddcbSStephen Warren * 5061f5ddcbSStephen Warren * @power_domain: The power domain to request; this has been 5161f5ddcbSStephen Warren * filled in by a previous xxx_xlate() function 5261f5ddcbSStephen Warren * call. 5361f5ddcbSStephen Warren * @return 0 if OK, or a negative error code. 5461f5ddcbSStephen Warren */ 5561f5ddcbSStephen Warren int (*request)(struct power_domain *power_domain); 5661f5ddcbSStephen Warren /** 5761f5ddcbSStephen Warren * free - Free a previously requested power domain. 5861f5ddcbSStephen Warren * 5961f5ddcbSStephen Warren * This is the implementation of the client power_domain_free() API. 6061f5ddcbSStephen Warren * 6161f5ddcbSStephen Warren * @power_domain: The power domain to free. 6261f5ddcbSStephen Warren * @return 0 if OK, or a negative error code. 6361f5ddcbSStephen Warren */ 6461f5ddcbSStephen Warren int (*free)(struct power_domain *power_domain); 6561f5ddcbSStephen Warren /** 6661f5ddcbSStephen Warren * on - Power on a power domain. 6761f5ddcbSStephen Warren * 6861f5ddcbSStephen Warren * @power_domain: The power domain to turn on. 6961f5ddcbSStephen Warren * @return 0 if OK, or a negative error code. 7061f5ddcbSStephen Warren */ 7161f5ddcbSStephen Warren int (*on)(struct power_domain *power_domain); 7261f5ddcbSStephen Warren /** 7361f5ddcbSStephen Warren * off - Power off a power domain. 7461f5ddcbSStephen Warren * 7561f5ddcbSStephen Warren * @power_domain: The power domain to turn off. 7661f5ddcbSStephen Warren * @return 0 if OK, or a negative error code. 7761f5ddcbSStephen Warren */ 7861f5ddcbSStephen Warren int (*off)(struct power_domain *power_domain); 7961f5ddcbSStephen Warren }; 8061f5ddcbSStephen Warren 8161f5ddcbSStephen Warren #endif 82