clock.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. /*
  2. * linux/arch/arm/mach-mmp/clock.h
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License version 2 as
  6. * published by the Free Software Foundation.
  7. */
  8. #include <linux/clkdev.h>
  9. struct clkops {
  10. void (*enable)(struct clk *);
  11. void (*disable)(struct clk *);
  12. unsigned long (*getrate)(struct clk *);
  13. int (*setrate)(struct clk *, unsigned long);
  14. };
  15. struct clk {
  16. const struct clkops *ops;
  17. void __iomem *clk_rst; /* clock reset control register */
  18. int fnclksel; /* functional clock select (APBC) */
  19. uint32_t enable_val; /* value for clock enable (APMU) */
  20. unsigned long rate;
  21. int enabled;
  22. };
  23. extern struct clkops apbc_clk_ops;
  24. extern struct clkops apmu_clk_ops;
  25. #define APBC_CLK(_name, _reg, _fnclksel, _rate) \
  26. struct clk clk_##_name = { \
  27. .clk_rst = APBC_##_reg, \
  28. .fnclksel = _fnclksel, \
  29. .rate = _rate, \
  30. .ops = &apbc_clk_ops, \
  31. }
  32. #define APBC_CLK_OPS(_name, _reg, _fnclksel, _rate, _ops) \
  33. struct clk clk_##_name = { \
  34. .clk_rst = APBC_##_reg, \
  35. .fnclksel = _fnclksel, \
  36. .rate = _rate, \
  37. .ops = _ops, \
  38. }
  39. #define APMU_CLK(_name, _reg, _eval, _rate) \
  40. struct clk clk_##_name = { \
  41. .clk_rst = APMU_##_reg, \
  42. .enable_val = _eval, \
  43. .rate = _rate, \
  44. .ops = &apmu_clk_ops, \
  45. }
  46. #define APMU_CLK_OPS(_name, _reg, _eval, _rate, _ops) \
  47. struct clk clk_##_name = { \
  48. .clk_rst = APMU_##_reg, \
  49. .enable_val = _eval, \
  50. .rate = _rate, \
  51. .ops = _ops, \
  52. }
  53. #define INIT_CLKREG(_clk, _devname, _conname) \
  54. { \
  55. .clk = _clk, \
  56. .dev_id = _devname, \
  57. .con_id = _conname, \
  58. }
  59. extern struct clk clk_pxa168_gpio;
  60. extern struct clk clk_pxa168_timers;