Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * clk-si5351.h: Skyworks / Silicon Labs Si5351A/B/C I2C Clock Generator
0004  *
0005  * Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
0006  * Rabeeh Khoury <rabeeh@solid-run.com>
0007  */
0008 
0009 #ifndef _CLK_SI5351_H_
0010 #define _CLK_SI5351_H_
0011 
0012 #define SI5351_BUS_BASE_ADDR            0x60
0013 
0014 #define SI5351_PLL_VCO_MIN          600000000
0015 #define SI5351_PLL_VCO_MAX          900000000
0016 #define SI5351_MULTISYNTH_MIN_FREQ      1000000
0017 #define SI5351_MULTISYNTH_DIVBY4_FREQ       150000000
0018 #define SI5351_MULTISYNTH_MAX_FREQ      160000000
0019 #define SI5351_MULTISYNTH67_MAX_FREQ        SI5351_MULTISYNTH_DIVBY4_FREQ
0020 #define SI5351_CLKOUT_MIN_FREQ          8000
0021 #define SI5351_CLKOUT_MAX_FREQ          SI5351_MULTISYNTH_MAX_FREQ
0022 #define SI5351_CLKOUT67_MAX_FREQ        SI5351_MULTISYNTH67_MAX_FREQ
0023 
0024 #define SI5351_PLL_A_MIN            15
0025 #define SI5351_PLL_A_MAX            90
0026 #define SI5351_PLL_B_MAX            (SI5351_PLL_C_MAX-1)
0027 #define SI5351_PLL_C_MAX            1048575
0028 #define SI5351_MULTISYNTH_A_MIN         6
0029 #define SI5351_MULTISYNTH_A_MAX         1800
0030 #define SI5351_MULTISYNTH67_A_MAX       254
0031 #define SI5351_MULTISYNTH_B_MAX         (SI5351_MULTISYNTH_C_MAX-1)
0032 #define SI5351_MULTISYNTH_C_MAX         1048575
0033 #define SI5351_MULTISYNTH_P1_MAX        ((1<<18)-1)
0034 #define SI5351_MULTISYNTH_P2_MAX        ((1<<20)-1)
0035 #define SI5351_MULTISYNTH_P3_MAX        ((1<<20)-1)
0036 
0037 #define SI5351_DEVICE_STATUS            0
0038 #define SI5351_INTERRUPT_STATUS         1
0039 #define SI5351_INTERRUPT_MASK           2
0040 #define  SI5351_STATUS_SYS_INIT         (1<<7)
0041 #define  SI5351_STATUS_LOL_B            (1<<6)
0042 #define  SI5351_STATUS_LOL_A            (1<<5)
0043 #define  SI5351_STATUS_LOS          (1<<4)
0044 #define SI5351_OUTPUT_ENABLE_CTRL       3
0045 #define SI5351_OEB_PIN_ENABLE_CTRL      9
0046 #define SI5351_PLL_INPUT_SOURCE         15
0047 #define  SI5351_CLKIN_DIV_MASK          (3<<6)
0048 #define  SI5351_CLKIN_DIV_1         (0<<6)
0049 #define  SI5351_CLKIN_DIV_2         (1<<6)
0050 #define  SI5351_CLKIN_DIV_4         (2<<6)
0051 #define  SI5351_CLKIN_DIV_8         (3<<6)
0052 #define  SI5351_PLLB_SOURCE         (1<<3)
0053 #define  SI5351_PLLA_SOURCE         (1<<2)
0054 
0055 #define SI5351_CLK0_CTRL            16
0056 #define SI5351_CLK1_CTRL            17
0057 #define SI5351_CLK2_CTRL            18
0058 #define SI5351_CLK3_CTRL            19
0059 #define SI5351_CLK4_CTRL            20
0060 #define SI5351_CLK5_CTRL            21
0061 #define SI5351_CLK6_CTRL            22
0062 #define SI5351_CLK7_CTRL            23
0063 #define  SI5351_CLK_POWERDOWN           (1<<7)
0064 #define  SI5351_CLK_INTEGER_MODE        (1<<6)
0065 #define  SI5351_CLK_PLL_SELECT          (1<<5)
0066 #define  SI5351_CLK_INVERT          (1<<4)
0067 #define  SI5351_CLK_INPUT_MASK          (3<<2)
0068 #define  SI5351_CLK_INPUT_XTAL          (0<<2)
0069 #define  SI5351_CLK_INPUT_CLKIN         (1<<2)
0070 #define  SI5351_CLK_INPUT_MULTISYNTH_0_4    (2<<2)
0071 #define  SI5351_CLK_INPUT_MULTISYNTH_N      (3<<2)
0072 #define  SI5351_CLK_DRIVE_STRENGTH_MASK     (3<<0)
0073 #define  SI5351_CLK_DRIVE_STRENGTH_2MA      (0<<0)
0074 #define  SI5351_CLK_DRIVE_STRENGTH_4MA      (1<<0)
0075 #define  SI5351_CLK_DRIVE_STRENGTH_6MA      (2<<0)
0076 #define  SI5351_CLK_DRIVE_STRENGTH_8MA      (3<<0)
0077 
0078 #define SI5351_CLK3_0_DISABLE_STATE     24
0079 #define SI5351_CLK7_4_DISABLE_STATE     25
0080 #define  SI5351_CLK_DISABLE_STATE_MASK      3
0081 #define  SI5351_CLK_DISABLE_STATE_LOW       0
0082 #define  SI5351_CLK_DISABLE_STATE_HIGH      1
0083 #define  SI5351_CLK_DISABLE_STATE_FLOAT     2
0084 #define  SI5351_CLK_DISABLE_STATE_NEVER     3
0085 
0086 #define SI5351_PARAMETERS_LENGTH        8
0087 #define SI5351_PLLA_PARAMETERS          26
0088 #define SI5351_PLLB_PARAMETERS          34
0089 #define SI5351_CLK0_PARAMETERS          42
0090 #define SI5351_CLK1_PARAMETERS          50
0091 #define SI5351_CLK2_PARAMETERS          58
0092 #define SI5351_CLK3_PARAMETERS          66
0093 #define SI5351_CLK4_PARAMETERS          74
0094 #define SI5351_CLK5_PARAMETERS          82
0095 #define SI5351_CLK6_PARAMETERS          90
0096 #define SI5351_CLK7_PARAMETERS          91
0097 #define SI5351_CLK6_7_OUTPUT_DIVIDER        92
0098 #define  SI5351_OUTPUT_CLK_DIV_MASK     (7 << 4)
0099 #define  SI5351_OUTPUT_CLK6_DIV_MASK        (7 << 0)
0100 #define  SI5351_OUTPUT_CLK_DIV_SHIFT        4
0101 #define  SI5351_OUTPUT_CLK_DIV6_SHIFT       0
0102 #define  SI5351_OUTPUT_CLK_DIV_1        0
0103 #define  SI5351_OUTPUT_CLK_DIV_2        1
0104 #define  SI5351_OUTPUT_CLK_DIV_4        2
0105 #define  SI5351_OUTPUT_CLK_DIV_8        3
0106 #define  SI5351_OUTPUT_CLK_DIV_16       4
0107 #define  SI5351_OUTPUT_CLK_DIV_32       5
0108 #define  SI5351_OUTPUT_CLK_DIV_64       6
0109 #define  SI5351_OUTPUT_CLK_DIV_128      7
0110 #define  SI5351_OUTPUT_CLK_DIVBY4       (3<<2)
0111 
0112 #define SI5351_SSC_PARAM0           149
0113 #define SI5351_SSC_PARAM1           150
0114 #define SI5351_SSC_PARAM2           151
0115 #define SI5351_SSC_PARAM3           152
0116 #define SI5351_SSC_PARAM4           153
0117 #define SI5351_SSC_PARAM5           154
0118 #define SI5351_SSC_PARAM6           155
0119 #define SI5351_SSC_PARAM7           156
0120 #define SI5351_SSC_PARAM8           157
0121 #define SI5351_SSC_PARAM9           158
0122 #define SI5351_SSC_PARAM10          159
0123 #define SI5351_SSC_PARAM11          160
0124 #define SI5351_SSC_PARAM12          161
0125 
0126 #define SI5351_VXCO_PARAMETERS_LOW      162
0127 #define SI5351_VXCO_PARAMETERS_MID      163
0128 #define SI5351_VXCO_PARAMETERS_HIGH     164
0129 
0130 #define SI5351_CLK0_PHASE_OFFSET        165
0131 #define SI5351_CLK1_PHASE_OFFSET        166
0132 #define SI5351_CLK2_PHASE_OFFSET        167
0133 #define SI5351_CLK3_PHASE_OFFSET        168
0134 #define SI5351_CLK4_PHASE_OFFSET        169
0135 #define SI5351_CLK5_PHASE_OFFSET        170
0136 
0137 #define SI5351_PLL_RESET            177
0138 #define  SI5351_PLL_RESET_B         (1<<7)
0139 #define  SI5351_PLL_RESET_A         (1<<5)
0140 
0141 #define SI5351_CRYSTAL_LOAD         183
0142 #define  SI5351_CRYSTAL_LOAD_MASK       (3<<6)
0143 #define  SI5351_CRYSTAL_LOAD_6PF        (1<<6)
0144 #define  SI5351_CRYSTAL_LOAD_8PF        (2<<6)
0145 #define  SI5351_CRYSTAL_LOAD_10PF       (3<<6)
0146 
0147 #define SI5351_FANOUT_ENABLE            187
0148 #define  SI5351_CLKIN_ENABLE            (1<<7)
0149 #define  SI5351_XTAL_ENABLE         (1<<6)
0150 #define  SI5351_MULTISYNTH_ENABLE       (1<<4)
0151 
0152 /**
0153  * enum si5351_variant - SiLabs Si5351 chip variant
0154  * @SI5351_VARIANT_A: Si5351A (8 output clocks, XTAL input)
0155  * @SI5351_VARIANT_A3: Si5351A MSOP10 (3 output clocks, XTAL input)
0156  * @SI5351_VARIANT_B: Si5351B (8 output clocks, XTAL/VXCO input)
0157  * @SI5351_VARIANT_C: Si5351C (8 output clocks, XTAL/CLKIN input)
0158  */
0159 enum si5351_variant {
0160     SI5351_VARIANT_A = 1,
0161     SI5351_VARIANT_A3 = 2,
0162     SI5351_VARIANT_B = 3,
0163     SI5351_VARIANT_C = 4,
0164 };
0165 
0166 #endif