Blame view

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