xref: /rk3399_rockchip-uboot/include/clk-uclass.h (revision 135aa95002646c46e89de93fa36adad1b010548f)
1*135aa950SStephen Warren /*
2*135aa950SStephen Warren  * Copyright (c) 2015 Google, Inc
3*135aa950SStephen Warren  * Written by Simon Glass <sjg@chromium.org>
4*135aa950SStephen Warren  * Copyright (c) 2016, NVIDIA CORPORATION.
5*135aa950SStephen Warren  *
6*135aa950SStephen Warren  * SPDX-License-Identifier:	GPL-2.0+
7*135aa950SStephen Warren  */
8*135aa950SStephen Warren 
9*135aa950SStephen Warren #ifndef _CLK_UCLASS_H
10*135aa950SStephen Warren #define _CLK_UCLASS_H
11*135aa950SStephen Warren 
12*135aa950SStephen Warren /* See clk.h for background documentation. */
13*135aa950SStephen Warren 
14*135aa950SStephen Warren #include <clk.h>
15*135aa950SStephen Warren #include <fdtdec.h>
16*135aa950SStephen Warren 
17*135aa950SStephen Warren /**
18*135aa950SStephen Warren  * struct clk_ops - The functions that a clock driver must implement.
19*135aa950SStephen Warren  */
20*135aa950SStephen Warren struct clk_ops {
21*135aa950SStephen Warren 	/**
22*135aa950SStephen Warren 	 * of_xlate - Translate a client's device-tree (OF) clock specifier.
23*135aa950SStephen Warren 	 *
24*135aa950SStephen Warren 	 * The clock core calls this function as the first step in implementing
25*135aa950SStephen Warren 	 * a client's clk_get_by_*() call.
26*135aa950SStephen Warren 	 *
27*135aa950SStephen Warren 	 * If this function pointer is set to NULL, the clock core will use a
28*135aa950SStephen Warren 	 * default implementation, which assumes #clock-cells = <1>, and that
29*135aa950SStephen Warren 	 * the DT cell contains a simple integer clock ID.
30*135aa950SStephen Warren 	 *
31*135aa950SStephen Warren 	 * At present, the clock API solely supports device-tree. If this
32*135aa950SStephen Warren 	 * changes, other xxx_xlate() functions may be added to support those
33*135aa950SStephen Warren 	 * other mechanisms.
34*135aa950SStephen Warren 	 *
35*135aa950SStephen Warren 	 * @clock:	The clock struct to hold the translation result.
36*135aa950SStephen Warren 	 * @args:	The clock specifier values from device tree.
37*135aa950SStephen Warren 	 * @return 0 if OK, or a negative error code.
38*135aa950SStephen Warren 	 */
39*135aa950SStephen Warren 	int (*of_xlate)(struct clk *clock,
40*135aa950SStephen Warren 			struct fdtdec_phandle_args *args);
41*135aa950SStephen Warren 	/**
42*135aa950SStephen Warren 	 * request - Request a translated clock.
43*135aa950SStephen Warren 	 *
44*135aa950SStephen Warren 	 * The clock core calls this function as the second step in
45*135aa950SStephen Warren 	 * implementing a client's clk_get_by_*() call, following a successful
46*135aa950SStephen Warren 	 * xxx_xlate() call, or as the only step in implementing a client's
47*135aa950SStephen Warren 	 * clk_request() call.
48*135aa950SStephen Warren 	 *
49*135aa950SStephen Warren 	 * @clock:	The clock struct to request; this has been fille in by
50*135aa950SStephen Warren 	 *		a previoux xxx_xlate() function call, or by the caller
51*135aa950SStephen Warren 	 *		of clk_request().
52*135aa950SStephen Warren 	 * @return 0 if OK, or a negative error code.
53*135aa950SStephen Warren 	 */
54*135aa950SStephen Warren 	int (*request)(struct clk *clock);
55*135aa950SStephen Warren 	/**
56*135aa950SStephen Warren 	 * free - Free a previously requested clock.
57*135aa950SStephen Warren 	 *
58*135aa950SStephen Warren 	 * This is the implementation of the client clk_free() API.
59*135aa950SStephen Warren 	 *
60*135aa950SStephen Warren 	 * @clock:	The clock to free.
61*135aa950SStephen Warren 	 * @return 0 if OK, or a negative error code.
62*135aa950SStephen Warren 	 */
63*135aa950SStephen Warren 	int (*free)(struct clk *clock);
64*135aa950SStephen Warren 	/**
65*135aa950SStephen Warren 	 * get_rate() - Get current clock rate.
66*135aa950SStephen Warren 	 *
67*135aa950SStephen Warren 	 * @clk:	The clock to query.
68*135aa950SStephen Warren 	 * @return clock rate in Hz, or -ve error code
69*135aa950SStephen Warren 	 */
70*135aa950SStephen Warren 	ulong (*get_rate)(struct clk *clk);
71*135aa950SStephen Warren 	/**
72*135aa950SStephen Warren 	 * set_rate() - Set current clock rate.
73*135aa950SStephen Warren 	 *
74*135aa950SStephen Warren 	 * @clk:	The clock to manipulate.
75*135aa950SStephen Warren 	 * @rate:	New clock rate in Hz.
76*135aa950SStephen Warren 	 * @return new rate, or -ve error code.
77*135aa950SStephen Warren 	 */
78*135aa950SStephen Warren 	ulong (*set_rate)(struct clk *clk, ulong rate);
79*135aa950SStephen Warren 	/**
80*135aa950SStephen Warren 	 * enable() - Enable a clock.
81*135aa950SStephen Warren 	 *
82*135aa950SStephen Warren 	 * @clk:	The clock to manipulate.
83*135aa950SStephen Warren 	 * @return zero on success, or -ve error code.
84*135aa950SStephen Warren 	 */
85*135aa950SStephen Warren 	int (*enable)(struct clk *clk);
86*135aa950SStephen Warren 	/**
87*135aa950SStephen Warren 	 * disable() - Disable a clock.
88*135aa950SStephen Warren 	 *
89*135aa950SStephen Warren 	 * @clk:	The clock to manipulate.
90*135aa950SStephen Warren 	 * @return zero on success, or -ve error code.
91*135aa950SStephen Warren 	 */
92*135aa950SStephen Warren 	int (*disable)(struct clk *clk);
93*135aa950SStephen Warren };
94*135aa950SStephen Warren 
95*135aa950SStephen Warren #endif
96