update m_class to emmc naming
[pinmux.git] / src / spec / ifaceprint.py
index 642e8a8fcd4ddf317e78b5da0a10a7aa6cb37c1d..55b820d2bf376c5d9d908204177845b4d7f3e3ef 100644 (file)
@@ -3,21 +3,32 @@
 from copy import deepcopy
 
 
-def display(pins):
-    print "| Pin | Mux0        | Mux1        | Mux2        | Mux3        |"
-    print "| --- | ----------- | ----------- | ----------- | ----------- |"
-    pinidx = pins.keys()
-    pinidx.sort()
+def display(of, pins, banksel=None, muxwidth=4):
+    of.write("""\
+| Pin | Mux0        | Mux1        | Mux2        | Mux3        |
+| --- | ----------- | ----------- | ----------- | ----------- |
+""")
+    pinidx = sorted(pins.keys())
     for pin in pinidx:
         pdata = pins.get(pin)
+        if banksel:
+            skip = False
+            for mux in range(muxwidth):
+                if mux not in pdata:
+                    continue
+                name, bank = pdata[mux]
+                if banksel != bank:
+                    skip = True
+            if skip:
+                continue
         res = '| %3d |' % pin
-        for mux in range(4):
-            if not pdata.has_key(mux):
+        for mux in range(muxwidth):
+            if mux not in pdata:
                 res += "             |"
                 continue
             name, bank = pdata[mux]
             res += " %s %-9s |" % (bank, name)
-        print res
+        of.write("%s\n" % res)
 
 
 def fnsplit(f):
@@ -51,57 +62,57 @@ def find_fn(fname, names):
             return n
 
 
-def display_fns(bankspec, pins, function_names):
+def display_fns(of, bankspec, pins, function_names):
     fn_names = function_names.keys()
     fns = {}
     for (pin, pdata) in pins.items():
         for mux in range(1, 4):  # skip GPIO for now
-            if not pdata.has_key(mux):
+            if mux not in pdata:
                 continue
             name, bank = pdata[mux]
-            assert name != None, str(bank)
-            if not fns.has_key(name):
+            assert name is not None, str(bank)
+            if name not in fns:
                 fns[name] = []
-            fns[name].append((pin-bankspec[bank], mux, bank))
+            fns[name].append((pin - bankspec[bank], mux, bank))
 
-    fnidx = fns.keys()
-    fnidx.sort(fnsort)
+    fnidx = list(fns.keys())
+    fnidx.sort(key=fnsplit)
     current_fn = None
     for fname in fnidx:
         fnbase = find_fn(fname, fn_names)
+        assert fnbase in function_names, "fn %s not in descriptions %s" % \
+                    (fname, str(function_names.keys()))
         #print "name", fname, fnbase
         if fnbase != current_fn:
             if current_fn is not None:
-                print
-            print "## %s" % fnbase
-            print
-            print function_names[fnbase]
-            print
+                of.write('\n')
+            of.write("## %s\n\n%s\n\n" % (fnbase, function_names[fnbase]))
             current_fn = fnbase
-        print "* %-9s :" % fname,
+        of.write("* %-9s :" % fname)
         for (pin, mux, bank) in fns[fname]:
-            print "%s%d/%d" % (bank, pin, mux),
-        print
+            of.write(" %s%d/%d" % (bank, pin, mux))
+        of.write('\n')
 
     return fns
 
 
-def check_functions(title, bankspec, fns, pins, required, eint, pwm,
+def check_functions(of, title, bankspec, fns, pins, required, eint, pwm,
                     descriptions=None):
     fns = deepcopy(fns)
     pins = deepcopy(pins)
     if descriptions is None:
         descriptions = {}
+    fnidx = fns.keys()
 
-    print "# Pinmap for %s" % title
-    print
+    #print dir(fns)
+    #print dir(pins)
+
+    of.write("# Pinmap for %s\n\n" % title)
 
     for name in required:
-        print "## %s" % name
-        print
-        if descriptions and descriptions.has_key(name):
-            print descriptions[name]
-            print
+        of.write("## %s\n\n" % name)
+        if descriptions and name in descriptions:
+            of.write("%s\n\n" % descriptions[name])
 
         name = name.split(':')
         if len(name) == 2:
@@ -118,13 +129,21 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm,
         else:
             count = 100000
         name = name[0]
+        #print name
         found = set()
-        fnidx = fns.keys()
-        # fnidx.sort(fnsort)
         pinfound = {}
+        located = set()
         for fname in fnidx:
             if not fname.startswith(name):
                 continue
+            for k in pins.fnspec.keys():
+                if fname.startswith(k):
+                    fk = list(pins.fnspec[k].keys())
+                    fn = pins.fnspec[k]
+                    fn = fn[fk[0]]
+                    #print fname, fn, dir(fn)
+                    if count == 100000:
+                        count = len(fn.pingroup)
             for pin, mux, bank in fns[fname]:
                 if findbank is not None:
                     if findbank != bank:
@@ -132,12 +151,12 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm,
                     if findmux != mux:
                         continue
                 pin_ = pin + bankspec[bank]
-                if pins.has_key(pin_):
+                if pin_ in pins:
                     pinfound[pin_] = (fname, pin_, bank, pin, mux)
 
-        pinidx = pinfound.keys()
-        pinidx.sort()
+        pinidx = sorted(pinfound.keys())
 
+        removedcount = 0
         for pin_ in pinidx:
             fname, pin_, bank, pin, mux = pinfound[pin_]
             if fname in found:
@@ -146,9 +165,16 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm,
             if len(found) > count:
                 continue
             del pins[pin_]
-            print "* %s %d %s%d/%d" % (fname, pin_, bank, pin, mux)
+            removedcount += 1
+            of.write("* %s %d %s%d/%d\n" % (fname, pin_, bank, pin, mux))
 
-        print
+        if removedcount != count:
+            print ("not all found", name, removedcount, count, title, found,
+                   fns[fname])
+            print ("pins found", pinfound)
+
+        # fnidx.sort(fnsort)
+        of.write('\n')
 
     # gpios
     gpios = []
@@ -161,49 +187,45 @@ def check_functions(title, bankspec, fns, pins, required, eint, pwm,
     gpios.sort()
 
     if gpios:
-        print "## GPIO"
-        print
+        of.write("## GPIO\n\n")
 
         for fname in gpios:
             if fname in found:
                 continue
             desc = ''
-            if descriptions and descriptions.has_key(fname):
+            if descriptions and fname in descriptions:
                 desc = ': %s' % descriptions[fname]
             bank = fname[4]
             pin = int(fname[7:])
             pin_ = pin + bankspec[bank]
-            if not pins.has_key(pin_):
+            if pin_ not in pins:
                 continue
             del pins[pin_]
             found.add(fname)
-            print "* %-8s %d %s%-2d %s" % (fname, pin_, bank, pin, desc)
-        print
+            of.write("* %-8s %d %s%-2d %s\n" % (fname, pin_, bank, pin, desc))
+        of.write('\n')
 
     if eint:
-        display_group(bankspec, "EINT", eint, fns, pins, descriptions)
+        display_group(of, bankspec, "EINT", eint, fns, pins, descriptions)
     if pwm:
-        display_group(bankspec, "PWM", pwm, fns, pins, descriptions)
+        display_group(of, bankspec, "PWM", pwm, fns, pins, descriptions)
 
-    print "## Unused Pinouts (spare as GPIO) for '%s'" % title
-    print
-    if descriptions and descriptions.has_key('GPIO'):
-        print descriptions['GPIO']
-        print
-    display(pins)
-    print
+    of.write("## Unused Pinouts (spare as GPIO) for '%s'\n\n" % title)
+    if descriptions and 'GPIO' in descriptions:
+        of.write("%s\n\n" % descriptions['GPIO'])
+    display(of, pins)
+    of.write('\n')
 
     return pins  # unused
 
 
-def display_group(bankspec, title, todisplay, fns, pins, descriptions):
-    print "## %s" % title
-    print
+def display_group(of, bankspec, title, todisplay, fns, pins, descriptions):
+    of.write("## %s\n\n" % title)
 
     found = set()
     for fname in todisplay:
         desc = ''
-        if descriptions and descriptions.has_key(fname):
+        if descriptions and fname in descriptions:
             desc = ': %s' % descriptions[fname]
         fname = fname.split(':')
         if len(fname) == 2:
@@ -223,43 +245,42 @@ def display_group(bankspec, title, todisplay, fns, pins, descriptions):
             if fname in found:
                 continue
             pin_ = pin + bankspec[bank]
-            if not pins.has_key(pin_):
+            if pin_ not in pins:
                 continue
             del pins[pin_]
             found.add(fname)
-            print "* %s %d %s%d/%d %s" % (fname, pin_, bank, pin, mux, desc)
-    print
+            of.write("* %s %d %s%d/%d %s\n" %
+                     (fname, pin_, bank, pin, mux, desc))
+    of.write('\n')
 
 
-def display_fixed(fixed, offs):
+def display_fixed(of, fixed, offs):
 
-    fkeys = fixed.keys()
-    fkeys.sort()
+    fkeys = sorted(fixed.keys())
     pin_ = offs
     res = []
     for pin, k in enumerate(fkeys):
-        print "## %s" % k
-        print
+        of.write("## %s\n\n" % k)
         prevname = ''
         linecount = 0
         for name in fixed[k]:
             if linecount == 4:
                 linecount = 0
-                print
+                of.write('\n')
             if prevname[:2] == name[:2] and linecount != 0:
-                print name,
+                of.write(" %s" % name)
                 linecount += 1
             else:
                 if linecount != 0:
-                    print
-                print "* %d: %d %s" % (pin_, pin, name),
+                    of.write('\n')
+                of.write("* %d: %d %s" % (pin_, pin, name))
                 linecount = 1
                 res.append((pin_, name))
 
             prevname = name
             pin_ += 1
         if linecount != 0:
-            print
-        print
+            of.write('\n')
+        of.write('\n')
 
     return res