clock.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include <asm/clkdev.h>
  2. struct clkops {
  3. void (*enable)(struct clk *);
  4. void (*disable)(struct clk *);
  5. unsigned long (*getrate)(struct clk *);
  6. };
  7. struct clk {
  8. const struct clkops *ops;
  9. unsigned long rate;
  10. unsigned int cken;
  11. unsigned int delay;
  12. unsigned int enabled;
  13. };
  14. #define INIT_CLKREG(_clk,_devname,_conname) \
  15. { \
  16. .clk = _clk, \
  17. .dev_id = _devname, \
  18. .con_id = _conname, \
  19. }
  20. #define DEFINE_CKEN(_name, _cken, _rate, _delay) \
  21. struct clk clk_##_name = { \
  22. .ops = &clk_cken_ops, \
  23. .rate = _rate, \
  24. .cken = CKEN_##_cken, \
  25. .delay = _delay, \
  26. }
  27. #define DEFINE_CK(_name, _cken, _ops) \
  28. struct clk clk_##_name = { \
  29. .ops = _ops, \
  30. .cken = CKEN_##_cken, \
  31. }
  32. #define DEFINE_CLK(_name, _ops, _rate, _delay) \
  33. struct clk clk_##_name = { \
  34. .ops = _ops, \
  35. .rate = _rate, \
  36. .delay = _delay, \
  37. }
  38. extern const struct clkops clk_cken_ops;
  39. void clk_cken_enable(struct clk *clk);
  40. void clk_cken_disable(struct clk *clk);
  41. #ifdef CONFIG_PXA3xx
  42. #define DEFINE_PXA3_CKEN(_name, _cken, _rate, _delay) \
  43. struct clk clk_##_name = { \
  44. .ops = &clk_pxa3xx_cken_ops, \
  45. .rate = _rate, \
  46. .cken = CKEN_##_cken, \
  47. .delay = _delay, \
  48. }
  49. #define DEFINE_PXA3_CK(_name, _cken, _ops) \
  50. struct clk clk_##_name = { \
  51. .ops = _ops, \
  52. .cken = CKEN_##_cken, \
  53. }
  54. extern const struct clkops clk_pxa3xx_cken_ops;
  55. extern void clk_pxa3xx_cken_enable(struct clk *);
  56. extern void clk_pxa3xx_cken_disable(struct clk *);
  57. #endif
  58. void clks_register(struct clk_lookup *clks, size_t num);
  59. int clk_add_alias(const char *alias, const char *alias_name, char *id,
  60. struct device *dev);