clk-rk-factor.h 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. /*
  2. * Copyright (c) 2006-2022, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2022-3-08 GuEe-GUI the first version
  9. */
  10. #ifndef __CLK_RK_FACTOR_H__
  11. #define __CLK_RK_FACTOR_H__
  12. #include "clk-rk.h"
  13. struct rockchip_factor_clk_cell
  14. {
  15. struct rockchip_clk_cell rk_cell;
  16. struct rt_clk_ops ops;
  17. };
  18. #define FACTOR(_id, cname, pname, f, fm, fd) \
  19. (void *)&(struct rockchip_factor_clk_cell) \
  20. { \
  21. .rk_cell.cell.name = cname, \
  22. .rk_cell.cell.parent_name = pname, \
  23. .rk_cell.cell.parents_nr = 1, \
  24. .rk_cell.cell.flags = f, \
  25. .rk_cell.id = _id, \
  26. .rk_cell.div_shift = fm, \
  27. .rk_cell.div_width = fd, \
  28. .rk_cell.init = rockchip_factor_clk_cell_init, \
  29. }
  30. #define FACTOR_GATE(_id, cname, pname, f, fm, fd, go, gb, gf) \
  31. (void *)&(struct rockchip_factor_clk_cell) \
  32. { \
  33. .rk_cell.cell.name = cname, \
  34. .rk_cell.cell.parent_name = pname, \
  35. .rk_cell.cell.parents_nr = 1, \
  36. .rk_cell.cell.flags = f, \
  37. .rk_cell.id = _id, \
  38. .rk_cell.div_shift = fm, \
  39. .rk_cell.div_width = fd, \
  40. .rk_cell.gate_offset = go, \
  41. .rk_cell.gate_shift = gb, \
  42. .rk_cell.gate_flags = gf, \
  43. .rk_cell.init = rockchip_factor_clk_cell_init, \
  44. }
  45. #define SGRF_GATE(_id, cname, pname) FACTOR(_id, cname, pname, 0, 1, 1)
  46. rt_inline struct rockchip_factor_clk_cell *cell_to_rockchip_factor_clk_cell(struct rt_clk_cell *cell)
  47. {
  48. struct rockchip_clk_cell *rk_cell = cell_to_rockchip_clk_cell(cell);
  49. return rt_container_of(rk_cell, struct rockchip_factor_clk_cell, rk_cell);
  50. }
  51. void rockchip_factor_clk_cell_init(struct rockchip_clk_cell *rk_cell);
  52. #endif /* __CLK_RK_FACTOR_H__ */