si5351.h 3.5 KB

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