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