diff options
author | Martin Braun <martin.braun@ettus.com> | 2019-02-18 21:42:28 -0800 |
---|---|---|
committer | Martin Braun <martin.braun@ettus.com> | 2019-02-19 15:36:08 -0800 |
commit | 1a4e5d8b308e9f5aef1ec84d1837f989dea3896b (patch) | |
tree | 1e95b78f5bdf859617726ebf767ed09b7bd90460 | |
parent | 10cf104ffc1d0ce3562904bcaf2a641518acb180 (diff) | |
download | uhd-1a4e5d8b308e9f5aef1ec84d1837f989dea3896b.tar.gz uhd-1a4e5d8b308e9f5aef1ec84d1837f989dea3896b.tar.bz2 uhd-1a4e5d8b308e9f5aef1ec84d1837f989dea3896b.zip |
mpm: n320: Properly check for the LO distribution board
Without this patch, the N320 code will rely on an error to occur to
determine the non-existence of the N321 LO distribution board. While
this works, it forces an error message where there's no error. This will
first check for the existence of the board before trying to initialize
it.
-rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/rh_periphs.py | 22 | ||||
-rw-r--r-- | mpm/python/usrp_mpm/dboard_manager/rhodium.py | 10 |
2 files changed, 23 insertions, 9 deletions
diff --git a/mpm/python/usrp_mpm/dboard_manager/rh_periphs.py b/mpm/python/usrp_mpm/dboard_manager/rh_periphs.py index 7df734f06..31104153a 100644 --- a/mpm/python/usrp_mpm/dboard_manager/rh_periphs.py +++ b/mpm/python/usrp_mpm/dboard_manager/rh_periphs.py @@ -9,7 +9,7 @@ Rhodium dboard peripherals (CPLD, port expander, dboard regs) import time -from usrp_mpm.sys_utils.sysfs_gpio import SysFSGPIO, GPIOBank +from usrp_mpm.sys_utils.sysfs_gpio import SysFSGPIO, GPIOBank, find_gpio_device from usrp_mpm.mpmutils import poll_with_timeout @@ -56,6 +56,10 @@ class FPGAtoLoDist(object): EXPECTED_BOARD_REV = 0 POWER_ON_TIMEOUT = 20 #ms POWER_ON_POLL_INTERVAL = 1 #ms + GPIO_DEV_ID = { + 'label': 'tca6424', + 'device/of_node/name': 'rhodium-lodist-gpio', + } pins = ( 'BD_REV_0', #Board revision bit 0 @@ -81,14 +85,26 @@ class FPGAtoLoDist(object): 'P3_3V_RF_EN' #3.3V LDO for RF enable ) + @staticmethod + def lo_dist_present(i2c_dev): + """ + Returns True if the I2C board is present. + """ + dev, _ = find_gpio_device(FPGAtoLoDist.GPIO_DEV_ID, i2c_dev) + return dev is not None + def __init__(self, i2c_dev): assert i2c_dev is not None - self._gpios = SysFSGPIO({'label': 'tca6424', 'device/of_node/name': 'rhodium-lodist-gpio'}, 0x1FFF0F, 0x1FFF00, 0x00A500, i2c_dev) + self._gpios = \ + SysFSGPIO(self.GPIO_DEV_ID, 0x1FFF0F, 0x1FFF00, 0x00A500, i2c_dev) board_rev = self._gpios.get(self.pins.index('BD_REV_0')) + \ self._gpios.get(self.pins.index('BD_REV_1')) << 1 + \ self._gpios.get(self.pins.index('BD_REV_2')) << 2 if board_rev != self.EXPECTED_BOARD_REV: - raise RuntimeError('LO distribution board revision did not match: Expected: {0} Actual: {1}'.format(self.EXPECTED_BOARD_REV, board_rev)) + raise RuntimeError( + 'LO distribution board revision did not match: ' + 'Expected: {0} Actual: {1}' + .format(self.EXPECTED_BOARD_REV, board_rev)) self._gpios.set(self.pins.index('P6_8V_EN'), 1) if not poll_with_timeout( lambda: bool(self._gpios.get(self.pins.index('P6_8V_PG'))), diff --git a/mpm/python/usrp_mpm/dboard_manager/rhodium.py b/mpm/python/usrp_mpm/dboard_manager/rhodium.py index 8e036aa81..f3dad4a92 100644 --- a/mpm/python/usrp_mpm/dboard_manager/rhodium.py +++ b/mpm/python/usrp_mpm/dboard_manager/rhodium.py @@ -246,13 +246,11 @@ class Rhodium(BfrfsEEPROM, DboardManagerBase): } self._port_expander = TCA6408(_get_i2c_dev()) self._daughterboard_gpio = FPGAtoDbGPIO(self.slot_idx) - # TODO: applying the overlay without checking for the presence of the - # LO dist board will create a kernel error. Fix this when the I2C API - # is implemented by checking if the board is present before applying. - try: + if FPGAtoLoDist.lo_dist_present(_get_i2c_dev()): + self.log.info("Enabling LO distribution board") self._lo_dist = FPGAtoLoDist(_get_i2c_dev()) - except RuntimeError: - self._lo_dist = None + else: + self.log.debug("No LO distribution board detected") self.log.debug("Turning on Module and RF power supplies") self._power_on() BfrfsEEPROM.__init__(self) |