183d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0 */ 289c1e2daSStephen Warren /* 389c1e2daSStephen Warren * Copyright (c) 2016, NVIDIA CORPORATION. 489c1e2daSStephen Warren */ 589c1e2daSStephen Warren 689c1e2daSStephen Warren #ifndef _RESET_UCLASS_H 789c1e2daSStephen Warren #define _RESET_UCLASS_H 889c1e2daSStephen Warren 989c1e2daSStephen Warren /* See reset.h for background documentation. */ 1089c1e2daSStephen Warren 1189c1e2daSStephen Warren #include <reset.h> 1289c1e2daSStephen Warren 1340a475e8SSimon Glass struct ofnode_phandle_args; 1489c1e2daSStephen Warren struct udevice; 1589c1e2daSStephen Warren 1689c1e2daSStephen Warren /** 1789c1e2daSStephen Warren * struct reset_ops - The functions that a reset controller driver must 1889c1e2daSStephen Warren * implement. 1989c1e2daSStephen Warren */ 2089c1e2daSStephen Warren struct reset_ops { 2189c1e2daSStephen Warren /** 2289c1e2daSStephen Warren * of_xlate - Translate a client's device-tree (OF) reset specifier. 2389c1e2daSStephen Warren * 2489c1e2daSStephen Warren * The reset core calls this function as the first step in implementing 2589c1e2daSStephen Warren * a client's reset_get_by_*() call. 2689c1e2daSStephen Warren * 2789c1e2daSStephen Warren * If this function pointer is set to NULL, the reset core will use a 2889c1e2daSStephen Warren * default implementation, which assumes #reset-cells = <1>, and that 2989c1e2daSStephen Warren * the DT cell contains a simple integer reset signal ID. 3089c1e2daSStephen Warren * 3189c1e2daSStephen Warren * At present, the reset API solely supports device-tree. If this 3289c1e2daSStephen Warren * changes, other xxx_xlate() functions may be added to support those 3389c1e2daSStephen Warren * other mechanisms. 3489c1e2daSStephen Warren * 3589c1e2daSStephen Warren * @reset_ctl: The reset control struct to hold the translation result. 3689c1e2daSStephen Warren * @args: The reset specifier values from device tree. 3789c1e2daSStephen Warren * @return 0 if OK, or a negative error code. 3889c1e2daSStephen Warren */ 3989c1e2daSStephen Warren int (*of_xlate)(struct reset_ctl *reset_ctl, 4040a475e8SSimon Glass struct ofnode_phandle_args *args); 4189c1e2daSStephen Warren /** 4289c1e2daSStephen Warren * request - Request a translated reset control. 4389c1e2daSStephen Warren * 4489c1e2daSStephen Warren * The reset core calls this function as the second step in 4589c1e2daSStephen Warren * implementing a client's reset_get_by_*() call, following a 4689c1e2daSStephen Warren * successful xxx_xlate() call. 4789c1e2daSStephen Warren * 4889c1e2daSStephen Warren * @reset_ctl: The reset control struct to request; this has been 4989c1e2daSStephen Warren * filled in by a previoux xxx_xlate() function call. 5089c1e2daSStephen Warren * @return 0 if OK, or a negative error code. 5189c1e2daSStephen Warren */ 5289c1e2daSStephen Warren int (*request)(struct reset_ctl *reset_ctl); 5389c1e2daSStephen Warren /** 5489c1e2daSStephen Warren * free - Free a previously requested reset control. 5589c1e2daSStephen Warren * 5689c1e2daSStephen Warren * This is the implementation of the client reset_free() API. 5789c1e2daSStephen Warren * 5889c1e2daSStephen Warren * @reset_ctl: The reset control to free. 5989c1e2daSStephen Warren * @return 0 if OK, or a negative error code. 6089c1e2daSStephen Warren */ 6189c1e2daSStephen Warren int (*free)(struct reset_ctl *reset_ctl); 6289c1e2daSStephen Warren /** 6389c1e2daSStephen Warren * rst_assert - Assert a reset signal. 6489c1e2daSStephen Warren * 6589c1e2daSStephen Warren * Note: This function is named rst_assert not assert to avoid 6689c1e2daSStephen Warren * conflicting with global macro assert(). 6789c1e2daSStephen Warren * 6889c1e2daSStephen Warren * @reset_ctl: The reset signal to assert. 6989c1e2daSStephen Warren * @return 0 if OK, or a negative error code. 7089c1e2daSStephen Warren */ 7189c1e2daSStephen Warren int (*rst_assert)(struct reset_ctl *reset_ctl); 7289c1e2daSStephen Warren /** 7389c1e2daSStephen Warren * rst_deassert - Deassert a reset signal. 7489c1e2daSStephen Warren * 7589c1e2daSStephen Warren * @reset_ctl: The reset signal to deassert. 7689c1e2daSStephen Warren * @return 0 if OK, or a negative error code. 7789c1e2daSStephen Warren */ 7889c1e2daSStephen Warren int (*rst_deassert)(struct reset_ctl *reset_ctl); 79*e7012e6eSAndreas Dannenberg /** 80*e7012e6eSAndreas Dannenberg * rst_status - Check reset signal status. 81*e7012e6eSAndreas Dannenberg * 82*e7012e6eSAndreas Dannenberg * @reset_ctl: The reset signal to check. 83*e7012e6eSAndreas Dannenberg * @return 0 if deasserted, positive if asserted, or a negative 84*e7012e6eSAndreas Dannenberg * error code. 85*e7012e6eSAndreas Dannenberg */ 86*e7012e6eSAndreas Dannenberg int (*rst_status)(struct reset_ctl *reset_ctl); 8789c1e2daSStephen Warren }; 8889c1e2daSStephen Warren 8989c1e2daSStephen Warren #endif 90