clk.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507
  1. /*
  2. * linux/include/linux/clk.h
  3. *
  4. * Copyright (C) 2004 ARM Limited.
  5. * Written by Deep Blue Solutions Limited.
  6. * Copyright (C) 2011-2012 Linaro Ltd <mturquette@linaro.org>
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. */
  12. #ifndef __LINUX_CLK_H
  13. #define __LINUX_CLK_H
  14. #include <linux/err.h>
  15. #include <linux/kernel.h>
  16. #include <linux/notifier.h>
  17. struct device;
  18. struct clk;
  19. #ifdef CONFIG_COMMON_CLK
  20. /**
  21. * DOC: clk notifier callback types
  22. *
  23. * PRE_RATE_CHANGE - called immediately before the clk rate is changed,
  24. * to indicate that the rate change will proceed. Drivers must
  25. * immediately terminate any operations that will be affected by the
  26. * rate change. Callbacks may either return NOTIFY_DONE, NOTIFY_OK,
  27. * NOTIFY_STOP or NOTIFY_BAD.
  28. *
  29. * ABORT_RATE_CHANGE: called if the rate change failed for some reason
  30. * after PRE_RATE_CHANGE. In this case, all registered notifiers on
  31. * the clk will be called with ABORT_RATE_CHANGE. Callbacks must
  32. * always return NOTIFY_DONE or NOTIFY_OK.
  33. *
  34. * POST_RATE_CHANGE - called after the clk rate change has successfully
  35. * completed. Callbacks must always return NOTIFY_DONE or NOTIFY_OK.
  36. *
  37. */
  38. #define PRE_RATE_CHANGE BIT(0)
  39. #define POST_RATE_CHANGE BIT(1)
  40. #define ABORT_RATE_CHANGE BIT(2)
  41. /**
  42. * struct clk_notifier - associate a clk with a notifier
  43. * @clk: struct clk * to associate the notifier with
  44. * @notifier_head: a blocking_notifier_head for this clk
  45. * @node: linked list pointers
  46. *
  47. * A list of struct clk_notifier is maintained by the notifier code.
  48. * An entry is created whenever code registers the first notifier on a
  49. * particular @clk. Future notifiers on that @clk are added to the
  50. * @notifier_head.
  51. */
  52. struct clk_notifier {
  53. struct clk *clk;
  54. struct srcu_notifier_head notifier_head;
  55. struct list_head node;
  56. };
  57. /**
  58. * struct clk_notifier_data - rate data to pass to the notifier callback
  59. * @clk: struct clk * being changed
  60. * @old_rate: previous rate of this clk
  61. * @new_rate: new rate of this clk
  62. *
  63. * For a pre-notifier, old_rate is the clk's rate before this rate
  64. * change, and new_rate is what the rate will be in the future. For a
  65. * post-notifier, old_rate and new_rate are both set to the clk's
  66. * current rate (this was done to optimize the implementation).
  67. */
  68. struct clk_notifier_data {
  69. struct clk *clk;
  70. unsigned long old_rate;
  71. unsigned long new_rate;
  72. };
  73. /**
  74. * clk_notifier_register: register a clock rate-change notifier callback
  75. * @clk: clock whose rate we are interested in
  76. * @nb: notifier block with callback function pointer
  77. *
  78. * ProTip: debugging across notifier chains can be frustrating. Make sure that
  79. * your notifier callback function prints a nice big warning in case of
  80. * failure.
  81. */
  82. int clk_notifier_register(struct clk *clk, struct notifier_block *nb);
  83. /**
  84. * clk_notifier_unregister: unregister a clock rate-change notifier callback
  85. * @clk: clock whose rate we are no longer interested in
  86. * @nb: notifier block which will be unregistered
  87. */
  88. int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb);
  89. /**
  90. * clk_get_accuracy - obtain the clock accuracy in ppb (parts per billion)
  91. * for a clock source.
  92. * @clk: clock source
  93. *
  94. * This gets the clock source accuracy expressed in ppb.
  95. * A perfect clock returns 0.
  96. */
  97. long clk_get_accuracy(struct clk *clk);
  98. /**
  99. * clk_set_phase - adjust the phase shift of a clock signal
  100. * @clk: clock signal source
  101. * @degrees: number of degrees the signal is shifted
  102. *
  103. * Shifts the phase of a clock signal by the specified degrees. Returns 0 on
  104. * success, -EERROR otherwise.
  105. */
  106. int clk_set_phase(struct clk *clk, int degrees);
  107. /**
  108. * clk_get_phase - return the phase shift of a clock signal
  109. * @clk: clock signal source
  110. *
  111. * Returns the phase shift of a clock node in degrees, otherwise returns
  112. * -EERROR.
  113. */
  114. int clk_get_phase(struct clk *clk);
  115. /**
  116. * clk_is_match - check if two clk's point to the same hardware clock
  117. * @p: clk compared against q
  118. * @q: clk compared against p
  119. *
  120. * Returns true if the two struct clk pointers both point to the same hardware
  121. * clock node. Put differently, returns true if struct clk *p and struct clk *q
  122. * share the same struct clk_core object.
  123. *
  124. * Returns false otherwise. Note that two NULL clks are treated as matching.
  125. */
  126. bool clk_is_match(const struct clk *p, const struct clk *q);
  127. #else
  128. static inline long clk_get_accuracy(struct clk *clk)
  129. {
  130. return -ENOTSUPP;
  131. }
  132. static inline long clk_set_phase(struct clk *clk, int phase)
  133. {
  134. return -ENOTSUPP;
  135. }
  136. static inline long clk_get_phase(struct clk *clk)
  137. {
  138. return -ENOTSUPP;
  139. }
  140. static inline bool clk_is_match(const struct clk *p, const struct clk *q)
  141. {
  142. return p == q;
  143. }
  144. #endif
  145. /**
  146. * clk_prepare - prepare a clock source
  147. * @clk: clock source
  148. *
  149. * This prepares the clock source for use.
  150. *
  151. * Must not be called from within atomic context.
  152. */
  153. #ifdef CONFIG_HAVE_CLK_PREPARE
  154. int clk_prepare(struct clk *clk);
  155. #else
  156. static inline int clk_prepare(struct clk *clk)
  157. {
  158. might_sleep();
  159. return 0;
  160. }
  161. #endif
  162. /**
  163. * clk_unprepare - undo preparation of a clock source
  164. * @clk: clock source
  165. *
  166. * This undoes a previously prepared clock. The caller must balance
  167. * the number of prepare and unprepare calls.
  168. *
  169. * Must not be called from within atomic context.
  170. */
  171. #ifdef CONFIG_HAVE_CLK_PREPARE
  172. void clk_unprepare(struct clk *clk);
  173. #else
  174. static inline void clk_unprepare(struct clk *clk)
  175. {
  176. might_sleep();
  177. }
  178. #endif
  179. #ifdef CONFIG_HAVE_CLK
  180. /**
  181. * clk_get - lookup and obtain a reference to a clock producer.
  182. * @dev: device for clock "consumer"
  183. * @id: clock consumer ID
  184. *
  185. * Returns a struct clk corresponding to the clock producer, or
  186. * valid IS_ERR() condition containing errno. The implementation
  187. * uses @dev and @id to determine the clock consumer, and thereby
  188. * the clock producer. (IOW, @id may be identical strings, but
  189. * clk_get may return different clock producers depending on @dev.)
  190. *
  191. * Drivers must assume that the clock source is not enabled.
  192. *
  193. * clk_get should not be called from within interrupt context.
  194. */
  195. struct clk *clk_get(struct device *dev, const char *id);
  196. /**
  197. * devm_clk_get - lookup and obtain a managed reference to a clock producer.
  198. * @dev: device for clock "consumer"
  199. * @id: clock consumer ID
  200. *
  201. * Returns a struct clk corresponding to the clock producer, or
  202. * valid IS_ERR() condition containing errno. The implementation
  203. * uses @dev and @id to determine the clock consumer, and thereby
  204. * the clock producer. (IOW, @id may be identical strings, but
  205. * clk_get may return different clock producers depending on @dev.)
  206. *
  207. * Drivers must assume that the clock source is not enabled.
  208. *
  209. * devm_clk_get should not be called from within interrupt context.
  210. *
  211. * The clock will automatically be freed when the device is unbound
  212. * from the bus.
  213. */
  214. struct clk *devm_clk_get(struct device *dev, const char *id);
  215. /**
  216. * clk_enable - inform the system when the clock source should be running.
  217. * @clk: clock source
  218. *
  219. * If the clock can not be enabled/disabled, this should return success.
  220. *
  221. * May be called from atomic contexts.
  222. *
  223. * Returns success (0) or negative errno.
  224. */
  225. int clk_enable(struct clk *clk);
  226. /**
  227. * clk_disable - inform the system when the clock source is no longer required.
  228. * @clk: clock source
  229. *
  230. * Inform the system that a clock source is no longer required by
  231. * a driver and may be shut down.
  232. *
  233. * May be called from atomic contexts.
  234. *
  235. * Implementation detail: if the clock source is shared between
  236. * multiple drivers, clk_enable() calls must be balanced by the
  237. * same number of clk_disable() calls for the clock source to be
  238. * disabled.
  239. */
  240. void clk_disable(struct clk *clk);
  241. /**
  242. * clk_get_rate - obtain the current clock rate (in Hz) for a clock source.
  243. * This is only valid once the clock source has been enabled.
  244. * @clk: clock source
  245. */
  246. unsigned long clk_get_rate(struct clk *clk);
  247. /**
  248. * clk_put - "free" the clock source
  249. * @clk: clock source
  250. *
  251. * Note: drivers must ensure that all clk_enable calls made on this
  252. * clock source are balanced by clk_disable calls prior to calling
  253. * this function.
  254. *
  255. * clk_put should not be called from within interrupt context.
  256. */
  257. void clk_put(struct clk *clk);
  258. /**
  259. * devm_clk_put - "free" a managed clock source
  260. * @dev: device used to acquire the clock
  261. * @clk: clock source acquired with devm_clk_get()
  262. *
  263. * Note: drivers must ensure that all clk_enable calls made on this
  264. * clock source are balanced by clk_disable calls prior to calling
  265. * this function.
  266. *
  267. * clk_put should not be called from within interrupt context.
  268. */
  269. void devm_clk_put(struct device *dev, struct clk *clk);
  270. /*
  271. * The remaining APIs are optional for machine class support.
  272. */
  273. /**
  274. * clk_round_rate - adjust a rate to the exact rate a clock can provide
  275. * @clk: clock source
  276. * @rate: desired clock rate in Hz
  277. *
  278. * This answers the question "if I were to pass @rate to clk_set_rate(),
  279. * what clock rate would I end up with?" without changing the hardware
  280. * in any way. In other words:
  281. *
  282. * rate = clk_round_rate(clk, r);
  283. *
  284. * and:
  285. *
  286. * clk_set_rate(clk, r);
  287. * rate = clk_get_rate(clk);
  288. *
  289. * are equivalent except the former does not modify the clock hardware
  290. * in any way.
  291. *
  292. * Returns rounded clock rate in Hz, or negative errno.
  293. */
  294. long clk_round_rate(struct clk *clk, unsigned long rate);
  295. /**
  296. * clk_set_rate - set the clock rate for a clock source
  297. * @clk: clock source
  298. * @rate: desired clock rate in Hz
  299. *
  300. * Returns success (0) or negative errno.
  301. */
  302. int clk_set_rate(struct clk *clk, unsigned long rate);
  303. /**
  304. * clk_has_parent - check if a clock is a possible parent for another
  305. * @clk: clock source
  306. * @parent: parent clock source
  307. *
  308. * This function can be used in drivers that need to check that a clock can be
  309. * the parent of another without actually changing the parent.
  310. *
  311. * Returns true if @parent is a possible parent for @clk, false otherwise.
  312. */
  313. bool clk_has_parent(struct clk *clk, struct clk *parent);
  314. /**
  315. * clk_set_rate_range - set a rate range for a clock source
  316. * @clk: clock source
  317. * @min: desired minimum clock rate in Hz, inclusive
  318. * @max: desired maximum clock rate in Hz, inclusive
  319. *
  320. * Returns success (0) or negative errno.
  321. */
  322. int clk_set_rate_range(struct clk *clk, unsigned long min, unsigned long max);
  323. /**
  324. * clk_set_min_rate - set a minimum clock rate for a clock source
  325. * @clk: clock source
  326. * @rate: desired minimum clock rate in Hz, inclusive
  327. *
  328. * Returns success (0) or negative errno.
  329. */
  330. int clk_set_min_rate(struct clk *clk, unsigned long rate);
  331. /**
  332. * clk_set_max_rate - set a maximum clock rate for a clock source
  333. * @clk: clock source
  334. * @rate: desired maximum clock rate in Hz, inclusive
  335. *
  336. * Returns success (0) or negative errno.
  337. */
  338. int clk_set_max_rate(struct clk *clk, unsigned long rate);
  339. /**
  340. * clk_set_parent - set the parent clock source for this clock
  341. * @clk: clock source
  342. * @parent: parent clock source
  343. *
  344. * Returns success (0) or negative errno.
  345. */
  346. int clk_set_parent(struct clk *clk, struct clk *parent);
  347. /**
  348. * clk_get_parent - get the parent clock source for this clock
  349. * @clk: clock source
  350. *
  351. * Returns struct clk corresponding to parent clock source, or
  352. * valid IS_ERR() condition containing errno.
  353. */
  354. struct clk *clk_get_parent(struct clk *clk);
  355. /**
  356. * clk_get_sys - get a clock based upon the device name
  357. * @dev_id: device name
  358. * @con_id: connection ID
  359. *
  360. * Returns a struct clk corresponding to the clock producer, or
  361. * valid IS_ERR() condition containing errno. The implementation
  362. * uses @dev_id and @con_id to determine the clock consumer, and
  363. * thereby the clock producer. In contrast to clk_get() this function
  364. * takes the device name instead of the device itself for identification.
  365. *
  366. * Drivers must assume that the clock source is not enabled.
  367. *
  368. * clk_get_sys should not be called from within interrupt context.
  369. */
  370. struct clk *clk_get_sys(const char *dev_id, const char *con_id);
  371. #else /* !CONFIG_HAVE_CLK */
  372. static inline struct clk *clk_get(struct device *dev, const char *id)
  373. {
  374. return NULL;
  375. }
  376. static inline struct clk *devm_clk_get(struct device *dev, const char *id)
  377. {
  378. return NULL;
  379. }
  380. static inline void clk_put(struct clk *clk) {}
  381. static inline void devm_clk_put(struct device *dev, struct clk *clk) {}
  382. static inline int clk_enable(struct clk *clk)
  383. {
  384. return 0;
  385. }
  386. static inline void clk_disable(struct clk *clk) {}
  387. static inline unsigned long clk_get_rate(struct clk *clk)
  388. {
  389. return 0;
  390. }
  391. static inline int clk_set_rate(struct clk *clk, unsigned long rate)
  392. {
  393. return 0;
  394. }
  395. static inline long clk_round_rate(struct clk *clk, unsigned long rate)
  396. {
  397. return 0;
  398. }
  399. static inline bool clk_has_parent(struct clk *clk, struct clk *parent)
  400. {
  401. return true;
  402. }
  403. static inline int clk_set_parent(struct clk *clk, struct clk *parent)
  404. {
  405. return 0;
  406. }
  407. static inline struct clk *clk_get_parent(struct clk *clk)
  408. {
  409. return NULL;
  410. }
  411. #endif
  412. /* clk_prepare_enable helps cases using clk_enable in non-atomic context. */
  413. static inline int clk_prepare_enable(struct clk *clk)
  414. {
  415. int ret;
  416. ret = clk_prepare(clk);
  417. if (ret)
  418. return ret;
  419. ret = clk_enable(clk);
  420. if (ret)
  421. clk_unprepare(clk);
  422. return ret;
  423. }
  424. /* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */
  425. static inline void clk_disable_unprepare(struct clk *clk)
  426. {
  427. clk_disable(clk);
  428. clk_unprepare(clk);
  429. }
  430. struct device_node;
  431. struct of_phandle_args;
  432. #if defined(CONFIG_OF) && defined(CONFIG_COMMON_CLK)
  433. struct clk *of_clk_get(struct device_node *np, int index);
  434. struct clk *of_clk_get_by_name(struct device_node *np, const char *name);
  435. struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec);
  436. #else
  437. static inline struct clk *of_clk_get(struct device_node *np, int index)
  438. {
  439. return ERR_PTR(-ENOENT);
  440. }
  441. static inline struct clk *of_clk_get_by_name(struct device_node *np,
  442. const char *name)
  443. {
  444. return ERR_PTR(-ENOENT);
  445. }
  446. #endif
  447. #endif