clock.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * (C) Copyright 2015 Google, Inc
  3. *
  4. * SPDX-License-Identifier: GPL-2.0
  5. */
  6. #ifndef _ASM_ARCH_CLOCK_H
  7. #define _ASM_ARCH_CLOCK_H
  8. /* define pll mode */
  9. #define RKCLK_PLL_MODE_SLOW 0
  10. #define RKCLK_PLL_MODE_NORMAL 1
  11. enum {
  12. ROCKCHIP_SYSCON_NOC,
  13. ROCKCHIP_SYSCON_GRF,
  14. ROCKCHIP_SYSCON_SGRF,
  15. ROCKCHIP_SYSCON_PMU,
  16. };
  17. /* Standard Rockchip clock numbers */
  18. enum rk_clk_id {
  19. CLK_OSC,
  20. CLK_ARM,
  21. CLK_DDR,
  22. CLK_CODEC,
  23. CLK_GENERAL,
  24. CLK_NEW,
  25. CLK_COUNT,
  26. };
  27. static inline int rk_pll_id(enum rk_clk_id clk_id)
  28. {
  29. return clk_id - 1;
  30. }
  31. /**
  32. * clk_get_divisor() - Calculate the required clock divisior
  33. *
  34. * Given an input rate and a required output_rate, calculate the Rockchip
  35. * divisor needed to achieve this.
  36. *
  37. * @input_rate: Input clock rate in Hz
  38. * @output_rate: Output clock rate in Hz
  39. * @return divisor register value to use
  40. */
  41. static inline u32 clk_get_divisor(ulong input_rate, uint output_rate)
  42. {
  43. uint clk_div;
  44. clk_div = input_rate / output_rate;
  45. clk_div = (clk_div + 1) & 0xfffe;
  46. return clk_div;
  47. }
  48. /**
  49. * rockchip_get_cru() - get a pointer to the clock/reset unit registers
  50. *
  51. * @return pointer to registers, or -ve error on error
  52. */
  53. void *rockchip_get_cru(void);
  54. #endif