1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
29abd5f05SSebastian Hesselbarth /*
39abd5f05SSebastian Hesselbarth  * Si5351A/B/C programmable clock generator platform_data.
49abd5f05SSebastian Hesselbarth  */
59abd5f05SSebastian Hesselbarth 
69abd5f05SSebastian Hesselbarth #ifndef __LINUX_PLATFORM_DATA_SI5351_H__
79abd5f05SSebastian Hesselbarth #define __LINUX_PLATFORM_DATA_SI5351_H__
89abd5f05SSebastian Hesselbarth 
99abd5f05SSebastian Hesselbarth /**
109abd5f05SSebastian Hesselbarth  * enum si5351_pll_src - Si5351 pll clock source
119abd5f05SSebastian Hesselbarth  * @SI5351_PLL_SRC_DEFAULT: default, do not change eeprom config
129abd5f05SSebastian Hesselbarth  * @SI5351_PLL_SRC_XTAL: pll source clock is XTAL input
139abd5f05SSebastian Hesselbarth  * @SI5351_PLL_SRC_CLKIN: pll source clock is CLKIN input (Si5351C only)
149abd5f05SSebastian Hesselbarth  */
159abd5f05SSebastian Hesselbarth enum si5351_pll_src {
169abd5f05SSebastian Hesselbarth 	SI5351_PLL_SRC_DEFAULT = 0,
179abd5f05SSebastian Hesselbarth 	SI5351_PLL_SRC_XTAL = 1,
189abd5f05SSebastian Hesselbarth 	SI5351_PLL_SRC_CLKIN = 2,
199abd5f05SSebastian Hesselbarth };
209abd5f05SSebastian Hesselbarth 
219abd5f05SSebastian Hesselbarth /**
229abd5f05SSebastian Hesselbarth  * enum si5351_multisynth_src - Si5351 multisynth clock source
239abd5f05SSebastian Hesselbarth  * @SI5351_MULTISYNTH_SRC_DEFAULT: default, do not change eeprom config
249abd5f05SSebastian Hesselbarth  * @SI5351_MULTISYNTH_SRC_VCO0: multisynth source clock is VCO0
259abd5f05SSebastian Hesselbarth  * @SI5351_MULTISYNTH_SRC_VCO1: multisynth source clock is VCO1/VXCO
269abd5f05SSebastian Hesselbarth  */
279abd5f05SSebastian Hesselbarth enum si5351_multisynth_src {
289abd5f05SSebastian Hesselbarth 	SI5351_MULTISYNTH_SRC_DEFAULT = 0,
299abd5f05SSebastian Hesselbarth 	SI5351_MULTISYNTH_SRC_VCO0 = 1,
309abd5f05SSebastian Hesselbarth 	SI5351_MULTISYNTH_SRC_VCO1 = 2,
319abd5f05SSebastian Hesselbarth };
329abd5f05SSebastian Hesselbarth 
339abd5f05SSebastian Hesselbarth /**
349abd5f05SSebastian Hesselbarth  * enum si5351_clkout_src - Si5351 clock output clock source
359abd5f05SSebastian Hesselbarth  * @SI5351_CLKOUT_SRC_DEFAULT: default, do not change eeprom config
369abd5f05SSebastian Hesselbarth  * @SI5351_CLKOUT_SRC_MSYNTH_N: clkout N source clock is multisynth N
379abd5f05SSebastian Hesselbarth  * @SI5351_CLKOUT_SRC_MSYNTH_0_4: clkout N source clock is multisynth 0 (N<4)
389abd5f05SSebastian Hesselbarth  *                                or 4 (N>=4)
399abd5f05SSebastian Hesselbarth  * @SI5351_CLKOUT_SRC_XTAL: clkout N source clock is XTAL
409abd5f05SSebastian Hesselbarth  * @SI5351_CLKOUT_SRC_CLKIN: clkout N source clock is CLKIN (Si5351C only)
419abd5f05SSebastian Hesselbarth  */
429abd5f05SSebastian Hesselbarth enum si5351_clkout_src {
439abd5f05SSebastian Hesselbarth 	SI5351_CLKOUT_SRC_DEFAULT = 0,
449abd5f05SSebastian Hesselbarth 	SI5351_CLKOUT_SRC_MSYNTH_N = 1,
459abd5f05SSebastian Hesselbarth 	SI5351_CLKOUT_SRC_MSYNTH_0_4 = 2,
469abd5f05SSebastian Hesselbarth 	SI5351_CLKOUT_SRC_XTAL = 3,
479abd5f05SSebastian Hesselbarth 	SI5351_CLKOUT_SRC_CLKIN = 4,
489abd5f05SSebastian Hesselbarth };
499abd5f05SSebastian Hesselbarth 
509abd5f05SSebastian Hesselbarth /**
519abd5f05SSebastian Hesselbarth  * enum si5351_drive_strength - Si5351 clock output drive strength
529abd5f05SSebastian Hesselbarth  * @SI5351_DRIVE_DEFAULT: default, do not change eeprom config
539abd5f05SSebastian Hesselbarth  * @SI5351_DRIVE_2MA: 2mA clock output drive strength
549abd5f05SSebastian Hesselbarth  * @SI5351_DRIVE_4MA: 4mA clock output drive strength
559abd5f05SSebastian Hesselbarth  * @SI5351_DRIVE_6MA: 6mA clock output drive strength
569abd5f05SSebastian Hesselbarth  * @SI5351_DRIVE_8MA: 8mA clock output drive strength
579abd5f05SSebastian Hesselbarth  */
589abd5f05SSebastian Hesselbarth enum si5351_drive_strength {
599abd5f05SSebastian Hesselbarth 	SI5351_DRIVE_DEFAULT = 0,
609abd5f05SSebastian Hesselbarth 	SI5351_DRIVE_2MA = 2,
619abd5f05SSebastian Hesselbarth 	SI5351_DRIVE_4MA = 4,
629abd5f05SSebastian Hesselbarth 	SI5351_DRIVE_6MA = 6,
639abd5f05SSebastian Hesselbarth 	SI5351_DRIVE_8MA = 8,
649abd5f05SSebastian Hesselbarth };
659abd5f05SSebastian Hesselbarth 
669abd5f05SSebastian Hesselbarth /**
671a0483d2SSebastian Hesselbarth  * enum si5351_disable_state - Si5351 clock output disable state
681a0483d2SSebastian Hesselbarth  * @SI5351_DISABLE_DEFAULT: default, do not change eeprom config
691a0483d2SSebastian Hesselbarth  * @SI5351_DISABLE_LOW: CLKx is set to a LOW state when disabled
701a0483d2SSebastian Hesselbarth  * @SI5351_DISABLE_HIGH: CLKx is set to a HIGH state when disabled
711a0483d2SSebastian Hesselbarth  * @SI5351_DISABLE_FLOATING: CLKx is set to a FLOATING state when
721a0483d2SSebastian Hesselbarth  *				disabled
731a0483d2SSebastian Hesselbarth  * @SI5351_DISABLE_NEVER: CLKx is NEVER disabled
741a0483d2SSebastian Hesselbarth  */
751a0483d2SSebastian Hesselbarth enum si5351_disable_state {
761a0483d2SSebastian Hesselbarth 	SI5351_DISABLE_DEFAULT = 0,
771a0483d2SSebastian Hesselbarth 	SI5351_DISABLE_LOW,
781a0483d2SSebastian Hesselbarth 	SI5351_DISABLE_HIGH,
791a0483d2SSebastian Hesselbarth 	SI5351_DISABLE_FLOATING,
801a0483d2SSebastian Hesselbarth 	SI5351_DISABLE_NEVER,
811a0483d2SSebastian Hesselbarth };
821a0483d2SSebastian Hesselbarth 
831a0483d2SSebastian Hesselbarth /**
849abd5f05SSebastian Hesselbarth  * struct si5351_clkout_config - Si5351 clock output configuration
859abd5f05SSebastian Hesselbarth  * @clkout: clkout number
869abd5f05SSebastian Hesselbarth  * @multisynth_src: multisynth source clock
879abd5f05SSebastian Hesselbarth  * @clkout_src: clkout source clock
889abd5f05SSebastian Hesselbarth  * @pll_master: if true, clkout can also change pll rate
8951279ef9SSergej Sawazki  * @pll_reset: if true, clkout can reset its pll
909abd5f05SSebastian Hesselbarth  * @drive: output drive strength
919abd5f05SSebastian Hesselbarth  * @rate: initial clkout rate, or default if 0
929abd5f05SSebastian Hesselbarth  */
939abd5f05SSebastian Hesselbarth struct si5351_clkout_config {
949abd5f05SSebastian Hesselbarth 	enum si5351_multisynth_src multisynth_src;
959abd5f05SSebastian Hesselbarth 	enum si5351_clkout_src clkout_src;
969abd5f05SSebastian Hesselbarth 	enum si5351_drive_strength drive;
971a0483d2SSebastian Hesselbarth 	enum si5351_disable_state disable_state;
989abd5f05SSebastian Hesselbarth 	bool pll_master;
9951279ef9SSergej Sawazki 	bool pll_reset;
1009abd5f05SSebastian Hesselbarth 	unsigned long rate;
1019abd5f05SSebastian Hesselbarth };
1029abd5f05SSebastian Hesselbarth 
1039abd5f05SSebastian Hesselbarth /**
1049abd5f05SSebastian Hesselbarth  * struct si5351_platform_data - Platform data for the Si5351 clock driver
1059abd5f05SSebastian Hesselbarth  * @clk_xtal: xtal input clock
1069abd5f05SSebastian Hesselbarth  * @clk_clkin: clkin input clock
1079abd5f05SSebastian Hesselbarth  * @pll_src: array of pll source clock setting
108*b2adbc9cSAlvin Šipraga  * @pll_reset: array indicating if plls should be reset after setting the rate
1099abd5f05SSebastian Hesselbarth  * @clkout: array of clkout configuration
1109abd5f05SSebastian Hesselbarth  */
1119abd5f05SSebastian Hesselbarth struct si5351_platform_data {
1129abd5f05SSebastian Hesselbarth 	enum si5351_pll_src pll_src[2];
113*b2adbc9cSAlvin Šipraga 	bool pll_reset[2];
1149abd5f05SSebastian Hesselbarth 	struct si5351_clkout_config clkout[8];
1159abd5f05SSebastian Hesselbarth };
1169abd5f05SSebastian Hesselbarth 
1179abd5f05SSebastian Hesselbarth #endif
118