aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@ettus.com>2019-02-18 21:42:28 -0800
committerMartin Braun <martin.braun@ettus.com>2019-02-19 15:36:08 -0800
commit1a4e5d8b308e9f5aef1ec84d1837f989dea3896b (patch)
tree1e95b78f5bdf859617726ebf767ed09b7bd90460
parent10cf104ffc1d0ce3562904bcaf2a641518acb180 (diff)
downloaduhd-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.py22
-rw-r--r--mpm/python/usrp_mpm/dboard_manager/rhodium.py10
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)