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