/*
 * Copyright (c) 2016, NVIDIA CORPORATION.
 *
 * SPDX-License-Identifier: GPL-2.0
 */

#ifndef _RESET_UCLASS_H
#define _RESET_UCLASS_H

/* See reset.h for background documentation. */

#include <reset.h>

struct fdtdec_phandle_args;
struct udevice;

/**
 * struct reset_ops - The functions that a reset controller driver must
 * implement.
 */
struct reset_ops {
	/**
	 * of_xlate - Translate a client's device-tree (OF) reset specifier.
	 *
	 * The reset core calls this function as the first step in implementing
	 * a client's reset_get_by_*() call.
	 *
	 * If this function pointer is set to NULL, the reset core will use a
	 * default implementation, which assumes #reset-cells = <1>, and that
	 * the DT cell contains a simple integer reset signal ID.
	 *
	 * At present, the reset API solely supports device-tree. If this
	 * changes, other xxx_xlate() functions may be added to support those
	 * other mechanisms.
	 *
	 * @reset_ctl:	The reset control struct to hold the translation result.
	 * @args:	The reset specifier values from device tree.
	 * @return 0 if OK, or a negative error code.
	 */
	int (*of_xlate)(struct reset_ctl *reset_ctl,
			struct fdtdec_phandle_args *args);
	/**
	 * request - Request a translated reset control.
	 *
	 * The reset core calls this function as the second step in
	 * implementing a client's reset_get_by_*() call, following a
	 * successful xxx_xlate() call.
	 *
	 * @reset_ctl:	The reset control struct to request; this has been
	 *		filled in by a previoux xxx_xlate() function call.
	 * @return 0 if OK, or a negative error code.
	 */
	int (*request)(struct reset_ctl *reset_ctl);
	/**
	 * free - Free a previously requested reset control.
	 *
	 * This is the implementation of the client reset_free() API.
	 *
	 * @reset_ctl:	The reset control to free.
	 * @return 0 if OK, or a negative error code.
	 */
	int (*free)(struct reset_ctl *reset_ctl);
	/**
	 * rst_assert - Assert a reset signal.
	 *
	 * Note: This function is named rst_assert not assert to avoid
	 * conflicting with global macro assert().
	 *
	 * @reset_ctl:	The reset signal to assert.
	 * @return 0 if OK, or a negative error code.
	 */
	int (*rst_assert)(struct reset_ctl *reset_ctl);
	/**
	 * rst_deassert - Deassert a reset signal.
	 *
	 * @reset_ctl:	The reset signal to deassert.
	 * @return 0 if OK, or a negative error code.
	 */
	int (*rst_deassert)(struct reset_ctl *reset_ctl);
};

#endif
