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