clk-uniphier.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /*
  3. * Copyright (C) 2016 Socionext Inc.
  4. * Author: Masahiro Yamada <yamada.masahiro@socionext.com>
  5. */
  6. #ifndef __CLK_UNIPHIER_H__
  7. #define __CLK_UNIPHIER_H__
  8. #include <linux/kernel.h>
  9. #include <linux/types.h>
  10. #define UNIPHIER_CLK_MUX_MAX_PARENTS 8
  11. #define UNIPHIER_CLK_TYPE_END 0
  12. #define UNIPHIER_CLK_TYPE_FIXED_RATE 2
  13. #define UNIPHIER_CLK_TYPE_GATE 3
  14. #define UNIPHIER_CLK_TYPE_MUX 4
  15. #define UNIPHIER_CLK_ID_INVALID (U8_MAX)
  16. struct uniphier_clk_fixed_rate_data {
  17. unsigned long fixed_rate;
  18. };
  19. struct uniphier_clk_gate_data {
  20. u8 parent_id;
  21. u16 reg;
  22. u8 bit;
  23. };
  24. struct uniphier_clk_mux_data {
  25. u8 parent_ids[UNIPHIER_CLK_MUX_MAX_PARENTS];
  26. u8 num_parents;
  27. u16 reg;
  28. u32 masks[UNIPHIER_CLK_MUX_MAX_PARENTS];
  29. u32 vals[UNIPHIER_CLK_MUX_MAX_PARENTS];
  30. };
  31. struct uniphier_clk_data {
  32. u8 type;
  33. u8 id;
  34. union {
  35. struct uniphier_clk_fixed_rate_data rate;
  36. struct uniphier_clk_gate_data gate;
  37. struct uniphier_clk_mux_data mux;
  38. } data;
  39. };
  40. #define UNIPHIER_CLK_RATE(_id, _rate) \
  41. { \
  42. .type = UNIPHIER_CLK_TYPE_FIXED_RATE, \
  43. .id = (_id), \
  44. .data.rate = { \
  45. .fixed_rate = (_rate), \
  46. }, \
  47. }
  48. #define UNIPHIER_CLK_GATE(_id, _parent, _reg, _bit) \
  49. { \
  50. .type = UNIPHIER_CLK_TYPE_GATE, \
  51. .id = (_id), \
  52. .data.gate = { \
  53. .parent_id = (_parent), \
  54. .reg = (_reg), \
  55. .bit = (_bit), \
  56. }, \
  57. }
  58. #define UNIPHIER_CLK_GATE_SIMPLE(_id, _reg, _bit) \
  59. UNIPHIER_CLK_GATE(_id, UNIPHIER_CLK_ID_INVALID, _reg, _bit)
  60. extern const struct uniphier_clk_data uniphier_pxs2_sys_clk_data[];
  61. extern const struct uniphier_clk_data uniphier_ld20_sys_clk_data[];
  62. extern const struct uniphier_clk_data uniphier_pxs3_sys_clk_data[];
  63. extern const struct uniphier_clk_data uniphier_mio_clk_data[];
  64. #endif /* __CLK_UNIPHIER_H__ */