mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +00:00
Add a reset driver framework/uclass
A reset controller is a hardware module that controls reset signals that affect other hardware modules or chips. This patch defines a standard API that connects reset clients (i.e. the drivers for devices affected by reset signals) to drivers for reset controllers/providers. Initially, DT is the only supported method for connecting the two. The DT binding specification (reset.txt) was taken from Linux kernel v4.5's Documentation/devicetree/bindings/reset/reset.txt. Signed-off-by: Stephen Warren <swarren@nvidia.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
0f67e2395b
commit
89c1e2da78
9 changed files with 446 additions and 0 deletions
81
include/reset-uclass.h
Normal file
81
include/reset-uclass.h
Normal file
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
* 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 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
|
Loading…
Add table
Add a link
Reference in a new issue