clock.h 2.0 KB

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