From 738b9ec102cdb307413cab23fdcf7fb2522f9895 Mon Sep 17 00:00:00 2001 From: Alex Williams Date: Mon, 15 Oct 2018 12:03:07 -0700 Subject: mpm: Add convenience function to pull i2c bus from device tree This function grabs the i2c character device path from the OF_NAME property. That property must be unique in the device tree! --- mpm/python/usrp_mpm/sys_utils/i2c_dev.py | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 mpm/python/usrp_mpm/sys_utils/i2c_dev.py (limited to 'mpm/python/usrp_mpm/sys_utils/i2c_dev.py') diff --git a/mpm/python/usrp_mpm/sys_utils/i2c_dev.py b/mpm/python/usrp_mpm/sys_utils/i2c_dev.py new file mode 100644 index 000000000..7da5177f8 --- /dev/null +++ b/mpm/python/usrp_mpm/sys_utils/i2c_dev.py @@ -0,0 +1,36 @@ +# +# Copyright 2018 Ettus Research, a National Instruments Company +# +# SPDX-License-Identifier: GPL-3.0-or-later +# +""" +Utilities for i2c lookups +""" + +import pyudev + +def of_get_i2c_adapter(of_name): + """ + Return bus adapter device for given device tree name. To use the OF_NAME + for matching (as this function does), it must be a unique property in the + device tree (and this must be a device-tree platform). + + The return value is a string, e.g. '/dev/i2c-0'. If nothing is found, it'll + return None. + """ + # If has i2c-dev, follow to grab i2c-%d node + context = pyudev.Context() + parents = list(context.list_devices(subsystem="i2c-adapter", OF_NAME=of_name)) + if len(parents) > 1: + raise RuntimeError("Non-unique OF_NAME when getting i2c bus id") + if len(parents) == 0: + return None + parent = parents[0] + if not parent: + return None + devices = list(context.list_devices(parent=parent, subsystem="i2c-dev")) + properties = [dict(d.properties) for d in devices] + # The i2c-adapter will have the lowest minor number + # FIXME: This likely isn't API--It just happens to work as of this writing + chosen = min([(int(p['MINOR']), p['DEVNAME']) for p in properties]) + return chosen[1] -- cgit v1.2.3