si5351.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * Si5351A/B/C programmable clock generator platform_data.
  3. */
  4. #ifndef __LINUX_PLATFORM_DATA_SI5351_H__
  5. #define __LINUX_PLATFORM_DATA_SI5351_H__
  6. struct clk;
  7. /**
  8. * enum si5351_variant - SiLabs Si5351 chip variant
  9. * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input)
  10. * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input)
  11. * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input)
  12. * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input)
  13. */
  14. enum si5351_variant {
  15. SI5351_VARIANT_A = 1,
  16. SI5351_VARIANT_A3 = 2,
  17. SI5351_VARIANT_B = 3,
  18. SI5351_VARIANT_C = 4,
  19. };
  20. /**
  21. * enum si5351_pll_src - Si5351 pll clock source
  22. * @SI5351_PLL_SRC_DEFAULT: default, do not change eeprom config
  23. * @SI5351_PLL_SRC_XTAL: pll source clock is XTAL input
  24. * @SI5351_PLL_SRC_CLKIN: pll source clock is CLKIN input (Si5351C only)
  25. */
  26. enum si5351_pll_src {
  27. SI5351_PLL_SRC_DEFAULT = 0,
  28. SI5351_PLL_SRC_XTAL = 1,
  29. SI5351_PLL_SRC_CLKIN = 2,
  30. };
  31. /**
  32. * enum si5351_multisynth_src - Si5351 multisynth clock source
  33. * @SI5351_MULTISYNTH_SRC_DEFAULT: default, do not change eeprom config
  34. * @SI5351_MULTISYNTH_SRC_VCO0: multisynth source clock is VCO0
  35. * @SI5351_MULTISYNTH_SRC_VCO1: multisynth source clock is VCO1/VXCO
  36. */
  37. enum si5351_multisynth_src {
  38. SI5351_MULTISYNTH_SRC_DEFAULT = 0,
  39. SI5351_MULTISYNTH_SRC_VCO0 = 1,
  40. SI5351_MULTISYNTH_SRC_VCO1 = 2,
  41. };
  42. /**
  43. * enum si5351_clkout_src - Si5351 clock output clock source
  44. * @SI5351_CLKOUT_SRC_DEFAULT: default, do not change eeprom config
  45. * @SI5351_CLKOUT_SRC_MSYNTH_N: clkout N source clock is multisynth N
  46. * @SI5351_CLKOUT_SRC_MSYNTH_0_4: clkout N source clock is multisynth 0 (N<4)
  47. * or 4 (N>=4)
  48. * @SI5351_CLKOUT_SRC_XTAL: clkout N source clock is XTAL
  49. * @SI5351_CLKOUT_SRC_CLKIN: clkout N source clock is CLKIN (Si5351C only)
  50. */
  51. enum si5351_clkout_src {
  52. SI5351_CLKOUT_SRC_DEFAULT = 0,
  53. SI5351_CLKOUT_SRC_MSYNTH_N = 1,
  54. SI5351_CLKOUT_SRC_MSYNTH_0_4 = 2,
  55. SI5351_CLKOUT_SRC_XTAL = 3,
  56. SI5351_CLKOUT_SRC_CLKIN = 4,
  57. };
  58. /**
  59. * enum si5351_drive_strength - Si5351 clock output drive strength
  60. * @SI5351_DRIVE_DEFAULT: default, do not change eeprom config
  61. * @SI5351_DRIVE_2MA: 2mA clock output drive strength
  62. * @SI5351_DRIVE_4MA: 4mA clock output drive strength
  63. * @SI5351_DRIVE_6MA: 6mA clock output drive strength
  64. * @SI5351_DRIVE_8MA: 8mA clock output drive strength
  65. */
  66. enum si5351_drive_strength {
  67. SI5351_DRIVE_DEFAULT = 0,
  68. SI5351_DRIVE_2MA = 2,
  69. SI5351_DRIVE_4MA = 4,
  70. SI5351_DRIVE_6MA = 6,
  71. SI5351_DRIVE_8MA = 8,
  72. };
  73. /**
  74. * enum si5351_disable_state - Si5351 clock output disable state
  75. * @SI5351_DISABLE_DEFAULT: default, do not change eeprom config
  76. * @SI5351_DISABLE_LOW: CLKx is set to a LOW state when disabled
  77. * @SI5351_DISABLE_HIGH: CLKx is set to a HIGH state when disabled
  78. * @SI5351_DISABLE_FLOATING: CLKx is set to a FLOATING state when
  79. * disabled
  80. * @SI5351_DISABLE_NEVER: CLKx is NEVER disabled
  81. */
  82. enum si5351_disable_state {
  83. SI5351_DISABLE_DEFAULT = 0,
  84. SI5351_DISABLE_LOW,
  85. SI5351_DISABLE_HIGH,
  86. SI5351_DISABLE_FLOATING,
  87. SI5351_DISABLE_NEVER,
  88. };
  89. /**
  90. * struct si5351_clkout_config - Si5351 clock output configuration
  91. * @clkout: clkout number
  92. * @multisynth_src: multisynth source clock
  93. * @clkout_src: clkout source clock
  94. * @pll_master: if true, clkout can also change pll rate
  95. * @drive: output drive strength
  96. * @rate: initial clkout rate, or default if 0
  97. */
  98. struct si5351_clkout_config {
  99. enum si5351_multisynth_src multisynth_src;
  100. enum si5351_clkout_src clkout_src;
  101. enum si5351_drive_strength drive;
  102. enum si5351_disable_state disable_state;
  103. bool pll_master;
  104. unsigned long rate;
  105. };
  106. /**
  107. * struct si5351_platform_data - Platform data for the Si5351 clock driver
  108. * @variant: Si5351 chip variant
  109. * @clk_xtal: xtal input clock
  110. * @clk_clkin: clkin input clock
  111. * @pll_src: array of pll source clock setting
  112. * @clkout: array of clkout configuration
  113. */
  114. struct si5351_platform_data {
  115. enum si5351_variant variant;
  116. struct clk *clk_xtal;
  117. struct clk *clk_clkin;
  118. enum si5351_pll_src pll_src[2];
  119. struct si5351_clkout_config clkout[8];
  120. };
  121. #endif