clock.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. struct clk;
  2. struct clkops {
  3. void (*enable)(struct clk *);
  4. void (*disable)(struct clk *);
  5. unsigned long (*getrate)(struct clk *);
  6. };
  7. struct clk {
  8. struct list_head node;
  9. const char *name;
  10. struct device *dev;
  11. const struct clkops *ops;
  12. unsigned long rate;
  13. unsigned int cken;
  14. unsigned int delay;
  15. unsigned int enabled;
  16. struct clk *other;
  17. };
  18. #define INIT_CKEN(_name, _cken, _rate, _delay, _dev) \
  19. { \
  20. .name = _name, \
  21. .dev = _dev, \
  22. .ops = &clk_cken_ops, \
  23. .rate = _rate, \
  24. .cken = CKEN_##_cken, \
  25. .delay = _delay, \
  26. }
  27. #define INIT_CK(_name, _cken, _ops, _dev) \
  28. { \
  29. .name = _name, \
  30. .dev = _dev, \
  31. .ops = _ops, \
  32. .cken = CKEN_##_cken, \
  33. }
  34. /*
  35. * This is a placeholder to alias one clock device+name pair
  36. * to another struct clk.
  37. */
  38. #define INIT_CKOTHER(_name, _other, _dev) \
  39. { \
  40. .name = _name, \
  41. .dev = _dev, \
  42. .other = _other, \
  43. }
  44. #define INIT_CLK(_name, _ops, _rate, _delay, _dev) \
  45. { \
  46. .name = _name, \
  47. .dev = _dev, \
  48. .ops = _ops, \
  49. .rate = _rate, \
  50. .delay = _delay, \
  51. }
  52. extern const struct clkops clk_cken_ops;
  53. void clk_cken_enable(struct clk *clk);
  54. void clk_cken_disable(struct clk *clk);
  55. #ifdef CONFIG_PXA3xx
  56. #define PXA3xx_CKEN(_name, _cken, _rate, _delay, _dev) \
  57. { \
  58. .name = _name, \
  59. .dev = _dev, \
  60. .ops = &clk_pxa3xx_cken_ops, \
  61. .rate = _rate, \
  62. .cken = CKEN_##_cken, \
  63. .delay = _delay, \
  64. }
  65. #define PXA3xx_CK(_name, _cken, _ops, _dev) \
  66. { \
  67. .name = _name, \
  68. .dev = _dev, \
  69. .ops = _ops, \
  70. .cken = CKEN_##_cken, \
  71. }
  72. extern const struct clkops clk_pxa3xx_cken_ops;
  73. extern void clk_pxa3xx_cken_enable(struct clk *);
  74. extern void clk_pxa3xx_cken_disable(struct clk *);
  75. #endif
  76. void clks_register(struct clk *clks, size_t num);