clock.h 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. extern const struct clkops clk_cken_ops;
  45. void clk_cken_enable(struct clk *clk);
  46. void clk_cken_disable(struct clk *clk);
  47. void clks_register(struct clk *clks, size_t num);