add naming and pin-order reverse option
[pinmux.git] / src / spec / interfaces.py
index 91d460252024d665f9aa4689e0d6215f41d77eed..744f80333985aadb1163fc24bb06e954f83a6ad0 100644 (file)
@@ -64,7 +64,8 @@ class PinGen(object):
         self.fname = fname
 
     def __call__(self, suffix, offs, mux,
-                 start=None, limit=None, spec=None, origsuffix=None):
+                 start=None, limit=None, spec=None, origsuffix=None,
+                 rev=False):
         bank = offs[0]
         pf = self.pinfn(suffix, bank)
         print "pf", suffix, bank, pf
@@ -77,7 +78,17 @@ class PinGen(object):
             prefix = self.fname
         if start and limit:  # limit turns into an offset from start
             limit = start + limit
+        sk = "%s:%s" % (self.fname, str(suffix))
+        print "pingroup pre", sk, pingroup
         pingroup = pingroup[start:limit]  # see comment in spec.pinfunctions
+        if rev:
+            # reverse order of pingroup
+            pingroup.reverse()
+        print "pingroup post", sk, pingroup
+        if self.pinouts.byspec.has_key(sk):
+            self.pinouts.byspec[sk] += pingroup
+        else:
+            self.pinouts.byspec[sk] = deepcopy(pingroup)
         pins = Pins(prefix, pingroup, self.bankspec,
                     suffix, offs, bank, mux,
                     spec, origsuffix=suffix, gangedgrp=gangedgroup)
@@ -94,6 +105,7 @@ class Pinouts(object):
         self.fnspec = {}
         self.ganged = {}
         self.clocks = {}
+        self.byspec = {}
         for fname, pinfn in pinspec:
             if isinstance(pinfn, tuple):
                 name, pinfn = pinfn