122 def pllstatus(self, verbose=False):
123 def dec_rng( word, ibit, nbits=1):
124 return (word >> ibit) & ((1<<nbits)-1)
125
126 lDevice = self.device
127 lBoardType = self.info.boardType
128 lIO = lDevice.getNode('io')
129
130
131 if lBoardType in [kBoardPC059, kBoardTLU]:
132 lI2CBusNode = lIO.getNode("i2c")
133 lSIChip = SI534xSlave(lI2CBusNode, lI2CBusNode.get_slave('SI5345').get_i2c_address())
134 else:
135 lSIChip = lIO.getNode('pll_i2c')
136
137
138
139 lConfigID = lSIChip.read_config_id()
140 lVersion = collections.OrderedDict()
141 lVersion['Part number'] = lSIChip.read_device_version()
142 lVersion['Device grade'] = lSIChip.read_clock_register(0x4)
143 lVersion['Device revision'] = lSIChip.read_clock_register(0x5)
144
145
146 w = lSIChip.read_clock_register(0xc)
147
148 lRegisters = collections.OrderedDict()
149 lRegisters['SYSINCAL'] = dec_rng(w, 0)
150 lRegisters['LOSXAXB'] = dec_rng(w, 1)
151 lRegisters['XAXB_ERR'] = dec_rng(w, 3)
152 lRegisters['SMBUS_TIMEOUT'] = dec_rng(w, 5)
153
154 w = lSIChip.read_clock_register(0xd)
155
156 lRegisters['LOS'] = dec_rng(w, 0, 4)
157 lRegisters['OOF'] = dec_rng(w, 4, 4)
158
159 w = lSIChip.read_clock_register(0xe)
160
161 lRegisters['LOL'] = dec_rng(w, 1)
162 lRegisters['HOLD'] = dec_rng(w, 5)
163
164 w = lSIChip.read_clock_register(0xf)
165 lRegisters['CAL_PLL'] = dec_rng(w, 5)
166
167 w = lSIChip.read_clock_register(0x11)
168 lRegisters['SYSINCAL_FLG'] = dec_rng(w, 0)
169 lRegisters['LOSXAXB_FLG'] = dec_rng(w, 1)
170 lRegisters['XAXB_ERR_FLG'] = dec_rng(w, 3)
171 lRegisters['SMBUS_TIMEOUT_FLG'] = dec_rng(w, 5)
172
173 w = lSIChip.read_clock_register(0x12)
174 lRegisters['OOF (sticky)'] = dec_rng(w, 4, 4)
175
176
177 return (lConfigID, lVersion, lRegisters)
178
179
180
181