Blame view

include/linux/clk.h 3.21 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /*
f8ce25476   Russell King   [ARM] Move asm/ha...
2
   *  linux/include/linux/clk.h
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
6
7
8
9
10
   *
   *  Copyright (C) 2004 ARM Limited.
   *  Written by Deep Blue Solutions Limited.
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2 as
   * published by the Free Software Foundation.
   */
686f8c5d7   Todd Poynor   include/linux/clk...
11
12
  #ifndef __LINUX_CLK_H
  #define __LINUX_CLK_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
  
  struct device;
  
  /*
   * The base API.
   */
  
  
  /*
   * struct clk - an machine class defined object / cookie.
   */
  struct clk;
  
  /**
   * clk_get - lookup and obtain a reference to a clock producer.
   * @dev: device for clock "consumer"
ea3f4eaca   Russell King   [PATCH] ARM: Add ...
29
   * @id: clock comsumer ID
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
30
31
   *
   * Returns a struct clk corresponding to the clock producer, or
ea3f4eaca   Russell King   [PATCH] ARM: Add ...
32
33
34
35
   * valid IS_ERR() condition containing errno.  The implementation
   * uses @dev and @id to determine the clock consumer, and thereby
   * the clock producer.  (IOW, @id may be identical strings, but
   * clk_get may return different clock producers depending on @dev.)
f47fc0ac7   Russell King   [ARM] Add additio...
36
37
   *
   * Drivers must assume that the clock source is not enabled.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
   */
  struct clk *clk_get(struct device *dev, const char *id);
  
  /**
   * clk_enable - inform the system when the clock source should be running.
   * @clk: clock source
   *
   * If the clock can not be enabled/disabled, this should return success.
   *
   * Returns success (0) or negative errno.
   */
  int clk_enable(struct clk *clk);
  
  /**
   * clk_disable - inform the system when the clock source is no longer required.
   * @clk: clock source
f47fc0ac7   Russell King   [ARM] Add additio...
54
55
56
57
58
59
60
61
   *
   * Inform the system that a clock source is no longer required by
   * a driver and may be shut down.
   *
   * Implementation detail: if the clock source is shared between
   * multiple drivers, clk_enable() calls must be balanced by the
   * same number of clk_disable() calls for the clock source to be
   * disabled.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
62
63
64
65
   */
  void clk_disable(struct clk *clk);
  
  /**
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
66
67
68
69
70
71
72
73
74
   * clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
   *		  This is only valid once the clock source has been enabled.
   * @clk: clock source
   */
  unsigned long clk_get_rate(struct clk *clk);
  
  /**
   * clk_put	- "free" the clock source
   * @clk: clock source
f47fc0ac7   Russell King   [ARM] Add additio...
75
76
77
78
   *
   * Note: drivers must ensure that all clk_enable calls made on this
   * clock source are balanced by clk_disable calls prior to calling
   * this function.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
   */
  void clk_put(struct clk *clk);
  
  
  /*
   * The remaining APIs are optional for machine class support.
   */
  
  
  /**
   * clk_round_rate - adjust a rate to the exact rate a clock can provide
   * @clk: clock source
   * @rate: desired clock rate in Hz
   *
   * Returns rounded clock rate in Hz, or negative errno.
   */
  long clk_round_rate(struct clk *clk, unsigned long rate);
   
  /**
   * clk_set_rate - set the clock rate for a clock source
   * @clk: clock source
   * @rate: desired clock rate in Hz
   *
   * Returns success (0) or negative errno.
   */
  int clk_set_rate(struct clk *clk, unsigned long rate);
   
  /**
   * clk_set_parent - set the parent clock source for this clock
   * @clk: clock source
   * @parent: parent clock source
   *
   * Returns success (0) or negative errno.
   */
  int clk_set_parent(struct clk *clk, struct clk *parent);
  
  /**
   * clk_get_parent - get the parent clock source for this clock
   * @clk: clock source
   *
   * Returns struct clk corresponding to parent clock source, or
   * valid IS_ERR() condition containing errno.
   */
  struct clk *clk_get_parent(struct clk *clk);
  
  #endif