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