Blame view
include/linux/clk.h
5.19 KB
1da177e4c Linux-2.6.12-rc2 |
1 |
/* |
f8ce25476 [ARM] Move asm/ha... |
2 |
* linux/include/linux/clk.h |
1da177e4c 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 include/linux/clk... |
11 12 |
#ifndef __LINUX_CLK_H #define __LINUX_CLK_H |
1da177e4c Linux-2.6.12-rc2 |
13 |
|
40d3e0f49 clk: provide prep... |
14 |
#include <linux/kernel.h> |
1da177e4c Linux-2.6.12-rc2 |
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
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 [PATCH] ARM: Add ... |
30 |
* @id: clock comsumer ID |
1da177e4c Linux-2.6.12-rc2 |
31 32 |
* * Returns a struct clk corresponding to the clock producer, or |
ea3f4eaca [PATCH] ARM: Add ... |
33 34 35 36 |
* 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 [ARM] Add additio... |
37 38 |
* * Drivers must assume that the clock source is not enabled. |
f7ad160b4 include/linux/clk... |
39 40 |
* * clk_get should not be called from within interrupt context. |
1da177e4c Linux-2.6.12-rc2 |
41 42 43 44 |
*/ struct clk *clk_get(struct device *dev, const char *id); /** |
40d3e0f49 clk: provide prep... |
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
* clk_prepare - prepare a clock source * @clk: clock source * * This prepares the clock source for use. * * Must not be called from within atomic context. */ #ifdef CONFIG_HAVE_CLK_PREPARE int clk_prepare(struct clk *clk); #else static inline int clk_prepare(struct clk *clk) { might_sleep(); return 0; } #endif /** |
1da177e4c Linux-2.6.12-rc2 |
63 64 65 66 67 |
* 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. * |
40d3e0f49 clk: provide prep... |
68 69 |
* May be called from atomic contexts. * |
1da177e4c Linux-2.6.12-rc2 |
70 71 72 73 74 75 76 |
* 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 [ARM] Add additio... |
77 78 79 80 |
* * Inform the system that a clock source is no longer required by * a driver and may be shut down. * |
40d3e0f49 clk: provide prep... |
81 82 |
* May be called from atomic contexts. * |
f47fc0ac7 [ARM] Add additio... |
83 84 85 86 |
* 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 Linux-2.6.12-rc2 |
87 88 |
*/ void clk_disable(struct clk *clk); |
40d3e0f49 clk: provide prep... |
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
/** * clk_unprepare - undo preparation of a clock source * @clk: clock source * * This undoes a previously prepared clock. The caller must balance * the number of prepare and unprepare calls. * * Must not be called from within atomic context. */ #ifdef CONFIG_HAVE_CLK_PREPARE void clk_unprepare(struct clk *clk); #else static inline void clk_unprepare(struct clk *clk) { might_sleep(); } #endif |
1da177e4c Linux-2.6.12-rc2 |
107 |
/** |
1da177e4c Linux-2.6.12-rc2 |
108 109 110 111 112 113 114 115 116 |
* 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 [ARM] Add additio... |
117 118 119 120 |
* * 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. |
f7ad160b4 include/linux/clk... |
121 122 |
* * clk_put should not be called from within interrupt context. |
1da177e4c Linux-2.6.12-rc2 |
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
*/ 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); |
05fd8e73e clkdev: add possi... |
167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
/** * clk_get_sys - get a clock based upon the device name * @dev_id: device name * @con_id: connection ID * * Returns a struct clk corresponding to the clock producer, or * valid IS_ERR() condition containing errno. The implementation * uses @dev_id and @con_id to determine the clock consumer, and * thereby the clock producer. In contrast to clk_get() this function * takes the device name instead of the device itself for identification. * * Drivers must assume that the clock source is not enabled. * * clk_get_sys should not be called from within interrupt context. */ struct clk *clk_get_sys(const char *dev_id, const char *con_id); |
c06830392 [ARM] 5536/1: Mov... |
183 184 185 186 187 188 189 190 191 192 193 194 |
/** * clk_add_alias - add a new clock alias * @alias: name for clock alias * @alias_dev_name: device name * @id: platform specific clock name * @dev: device * * Allows using generic clock names for drivers by adding a new alias. * Assumes clkdev, see clkdev.h for more info. */ int clk_add_alias(const char *alias, const char *alias_dev_name, char *id, struct device *dev); |
1da177e4c Linux-2.6.12-rc2 |
195 |
#endif |