123 def dec_rng( word, ibit, nbits=1):
124 return (word >> ibit) & ((1<<nbits)-1)
126 lDevice = self.device
127 lBoardType = self.info.boardType
128 lIO = lDevice.getNode(
'io')
131 if lBoardType
in [kBoardPC059, kBoardTLU]:
132 lI2CBusNode = lIO.getNode(
"i2c")
133 lSIChip = SI534xSlave(lI2CBusNode, lI2CBusNode.get_slave(
'SI5345').get_i2c_address())
135 lSIChip = lIO.getNode(
'pll_i2c')
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)
146 w = lSIChip.read_clock_register(0xc)
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)
154 w = lSIChip.read_clock_register(0xd)
156 lRegisters[
'LOS'] = dec_rng(w, 0, 4)
157 lRegisters[
'OOF'] = dec_rng(w, 4, 4)
159 w = lSIChip.read_clock_register(0xe)
161 lRegisters[
'LOL'] = dec_rng(w, 1)
162 lRegisters[
'HOLD'] = dec_rng(w, 5)
164 w = lSIChip.read_clock_register(0xf)
165 lRegisters[
'CAL_PLL'] = dec_rng(w, 5)
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)
173 w = lSIChip.read_clock_register(0x12)
174 lRegisters[
'OOF (sticky)'] = dec_rng(w, 4, 4)
177 return (lConfigID, lVersion, lRegisters)