stronger autopep8 whitespace cleanup
[pinmux.git] / src / spec / m_class.py
index 0d9d2b4b82bc607a552c2ef635a23f5cc3e0cddc..a43dc4a05ee1ab4471cc066693c3d6a9746836ff 100644 (file)
@@ -2,12 +2,16 @@
 
 from interfaces import jtag, uart, ulpi, uartfull, rgbttl, rgmii
 from interfaces import flexbus1, flexbus2, sdram1, sdram2, mcu8080
-from interfaces import eint, pwm, gpio
-from interfaces import display, display_fns, check_functions
-from interfaces import pinmerge, display_fixed
+from interfaces import eint, pwm, gpio, spi, i2c, emmc, sdmmc
+from interfaces import quadspi, i2s
+from interfaces import pinmerge, Pinouts
+
+from ifaceprint import display, display_fns, check_functions
+from ifaceprint import display_fixed
+
 
 def pinspec():
-    pinouts = {}
+    pinouts = Pinouts()
 
     pinbanks = {'A': 16,
                 'B': 28,
@@ -16,10 +20,9 @@ def pinspec():
                 'E': 24,
                 'F': 10,
                 'G': 32,
-              }
+                }
     bankspec = {}
-    pkeys = pinbanks.keys()
-    pkeys.sort()
+    pkeys = sorted(pinbanks.keys())
     offs = 0
     for kn in pkeys:
         bankspec[kn] = offs
@@ -43,15 +46,14 @@ def pinspec():
     pinmerge(pinouts, gpio(bankspec, "", ('B', 0), "B", 0, 28, 0))
     pinmerge(pinouts, rgbttl(bankspec, "0", ('B', 0), "B", 1))
     pinmerge(pinouts, spi(bankspec, "1", ('B', 12), "B", 2))
-    pinmerge(pinouts, quadspi(bankspec, "3", ('B', 4), "B", 2, limit=4))
+    pinmerge(pinouts, quadspi(bankspec, "0", ('B', 4), "B", 2, limit=4))
     pinmerge(pinouts, uart(bankspec, "3", ('B', 16), "B", 2))
     pinmerge(pinouts, i2c(bankspec, "3", ('B', 18), "B", 2))
-    pinmerge(pinouts, pwm(bankspec, "0", ('B', 9), "B", mux=2))
-    pinmerge(pinouts, pwm(bankspec, "1", ('B', 20), "B", mux=2))
-    pinmerge(pinouts, pwm(bankspec, "2", ('B', 21), "B", mux=2))
+    pinmerge(pinouts, pwm(bankspec, "", ('B', 9), "B", 0, 1, mux=2))
+    pinmerge(pinouts, pwm(bankspec, "", ('B', 20), "B", 1, 2, mux=2))
     pinmerge(pinouts, sdmmc(bankspec, "1", ('B', 22), "B", 2))
     pinmerge(pinouts, eint(bankspec, "", ('B', 0), "B", 6, 4, mux=3))
-    pinmerge(pinouts, flexbus2(bankspec, "", ('B', 4), "B", 3))
+    pinmerge(pinouts, flexbus2(bankspec, "0", ('B', 4), "B", 3))
     pinmerge(pinouts, i2c(bankspec, "1", ('B', 0), "B", 2))
     pinmerge(pinouts, uart(bankspec, "2", ('B', 2), "B", 2))
     pinmerge(pinouts, uart(bankspec, "4", ('B', 10), "B", 2))
@@ -68,26 +70,24 @@ def pinspec():
     pinmerge(pinouts, eint(bankspec, "", ('C', 12), "C", 22, 8, mux=3))
     pinmerge(pinouts, uart(bankspec, "2", ('C', 22), "C", 2))
     pinmerge(pinouts, i2s(bankspec, "", ('C', 13), "C", 2))
-    pinmerge(pinouts, pwm(bankspec, "2", ('C', 21), "C", mux=2))
+    pinmerge(pinouts, pwm(bankspec, "", ('C', 21), "C", 2, 1, mux=2))
 
     # Bank D, 72-96
     flexspec = {
-        'FB_TS': ('FB_ALE', 2, "D"),
-        'FB_CS2': ('FB_BWE2', 2, "D"),
-        'FB_A0': ('FB_BWE2', 3, "D"),
-        'FB_CS3': ('FB_BWE3', 2, "D"),
-        'FB_A1': ('FB_BWE3', 3, "D"),
-        'FB_TBST': ('FB_OE', 2, "D"),
-        'FB_TSIZ0': ('FB_BWE0', 2, "D"),
-        'FB_TSIZ1': ('FB_BWE1', 2, "D"),
+        'FB0_TS': ('FB0_ALE', 2, "D"),
+        'FB0_CS2': ('FB0_BWE2', 2, "D"),
+        'FB0_A0': ('FB0_BWE2', 3, "D"),
+        'FB0_CS3': ('FB0_BWE3', 2, "D"),
+        'FB0_A1': ('FB0_BWE3', 3, "D"),
+        'FB0_TBST': ('FB0_OE', 2, "D"),
+        'FB0_TSIZ0': ('FB0_BWE0', 2, "D"),
+        'FB0_TSIZ1': ('FB0_BWE1', 2, "D"),
     }
     #pinmerge(pinouts, mcu8080("", 72, "D", 1))
     pinmerge(pinouts, gpio(bankspec, "", ('D', 0), "D", 0, 24, 0))
-    pinmerge(pinouts, flexbus1(bankspec, "", ('D', 0), "D", 1, spec=flexspec))
+    pinmerge(pinouts, flexbus1(bankspec, "0", ('D', 0), "D", 1, spec=flexspec))
     pinmerge(pinouts, i2c(bankspec, "2", ('D', 17), "D", 2))
-    pinmerge(pinouts, pwm(bankspec, "0", ('D', 21), "D", mux=1))
-    pinmerge(pinouts, pwm(bankspec, "1", ('D', 22), "D", mux=1))
-    pinmerge(pinouts, pwm(bankspec, "2", ('D', 23), "D", mux=1))
+    pinmerge(pinouts, pwm(bankspec, "", ('D', 21), "D", 0, 3, mux=1))
     pinmerge(pinouts, i2c(bankspec, "1", ('D', 10), "D", 3))
     pinmerge(pinouts, i2c(bankspec, "3", ('D', 19), "D", 2))
     pinmerge(pinouts, uartfull(bankspec, "0", ('D', 0), "D", 2))
@@ -102,10 +102,10 @@ def pinspec():
 
     # Bank E
     pinmerge(pinouts, gpio(bankspec, "", ('E', 0), "E", 0, 24, 0))
-    pinmerge(pinouts, flexbus2(bankspec, "", ('E', 0), "E", 1))
+    pinmerge(pinouts, flexbus2(bankspec, "0", ('E', 0), "E", 1))
     pinmerge(pinouts, sdmmc(bankspec, "2", ('E', 0), "E", 2))
     pinmerge(pinouts, sdmmc(bankspec, "3", ('E', 8), "E", 2))
-    pinmerge(pinouts, quadspi(bankspec, "3", ('E', 18), "E", 2))
+    pinmerge(pinouts, quadspi(bankspec, "0", ('E', 18), "E", 2))
     pinmerge(pinouts, uartfull(bankspec, "1", ('E', 14), "E", 2))
     pinmerge(pinouts, i2c(bankspec, "2", ('E', 6), "E", 2))
     pinmerge(pinouts, eint(bankspec, "", ('E', 0), "E", 10, 8, mux=3))
@@ -116,12 +116,12 @@ def pinspec():
     pinmerge(pinouts, gpio(bankspec, "", ('F', 0), "F", 0, 10, 0))
     pinmerge(pinouts, i2s(bankspec, "", ('F', 0), "F", 1))
     pinmerge(pinouts, i2c(bankspec, "1", ('F', 6), "F", 2))
-    pinmerge(pinouts, pwm(bankspec, "0", ('F', 8), "F", mux=2))
-    pinmerge(pinouts, pwm(bankspec, "1", ('F', 9), "F", mux=2))
+    pinmerge(pinouts, pwm(bankspec, "", ('F', 8), "F", 0, 1, mux=2))
+    pinmerge(pinouts, pwm(bankspec, "", ('F', 9), "F", 1, 1, mux=2))
     pinmerge(pinouts, uart(bankspec, "4", ('F', 8), "F", 1))
     pinmerge(pinouts, sdmmc(bankspec, "3", ('F', 0), "F", 2))
     pinmerge(pinouts, eint(bankspec, "", ('F', 0), "F", 18, 4, mux=3))
-    pinmerge(pinouts, pwm(bankspec, "2", ('F', 4), "F", mux=3))
+    pinmerge(pinouts, pwm(bankspec, "", ('F', 4), "F", 2, 1, mux=3))
     pinmerge(pinouts, eint(bankspec, "", ('F', 5), "F", 7, 1, mux=3))
     pinmerge(pinouts, eint(bankspec, "", ('F', 6), "F", 28, 4, mux=3))
 
@@ -130,8 +130,8 @@ def pinspec():
     pinmerge(pinouts, rgmii(bankspec, "", ('G', 0), "G", 1))
     pinmerge(pinouts, ulpi(bankspec, "3", ('G', 20), "G", 1))
     pinmerge(pinouts, rgbttl(bankspec, "1", ('G', 0), "G", 2))
-    pinmerge(pinouts, quadspi(bankspec, "3", ('G', 26), "G", 3))
-    pinmerge(pinouts, flexbus2(bankspec, "", ('G', 0), "G", 3))
+    pinmerge(pinouts, quadspi(bankspec, "0", ('G', 26), "G", 3))
+    pinmerge(pinouts, flexbus2(bankspec, "0", ('G', 0), "G", 3))
     mmc2 = sdmmc(bankspec, "2", ('G', 24), "G", 3, limit=2)
     pinmerge(pinouts, mmc2)
     mmc2 = sdmmc(bankspec, "2", ('G', 28), "G", 2, start=2)
@@ -143,6 +143,7 @@ def pinspec():
     print
     print "[[!toc  ]]"
     print
+    print pinouts.keys()
     display(pinouts)
     print
 
@@ -150,71 +151,188 @@ def pinspec():
     print
 
     fixedpins = {
-      'DDR3':
-        ['SDQ0', 'SDQ1', 'SDQ2', 'SDQ3', 'SDQ4', 'SDQ5', 'SDQ6', 'SDQ7',
-         'SDQ8', 'SDQ9', 'SDQ10', 'SDQ11', 'SDQ12', 'SDQ13', 'SDQ14', 'SDQ15',
-         'SDQ16', 'SDQ17', 'SDQ18', 'SDQ19', 'SDQ20', 'SDQ21', 'SDQ22', 'SDQ23',
-         'SDQ24', 'SDQ25', 'SDQ26', 'SDQ27', 'SDQ28', 'SDQ29', 'SDQ30', 'SDQ31',
-         'SVREF0', 'SVREF1', 'SVREF2', 'SVREF3',
-         'SDQS0', 'SDQS0#', 'SDQS1', 'SDQS1#',
-         'SDQS2', 'SDQS2#', 'SDQS3', 'SDQS3#',
-         'SDQM0', 'SDQM1', 'SDQM2', 'SDQM3',
-         'SCK#', 'SCK', 'SCKE0', 'SCKE1',
-         'SA0', 'SA1', 'SA2', 'SA3', 'SA4', 'SA5', 'SA6', 'SA7',
-         'SA8', 'SA9', 'SA10', 'SA11', 'SA12', 'SA13', 'SA14',
-         'SBA0', 'SBA1', 'SBA2',
-         'SWE', 'SCAS', 'SRAS',
-         'SCS0', 'SCS1',
-         'SZQ', 'SRST',
-         'SDBG0', 'SDBG1', 'ADBG',
-         'ODT0', 'ODT1'
+        'DDR3': [
+            'SDQ0',
+            'SDQ1',
+            'SDQ2',
+            'SDQ3',
+            'SDQ4',
+            'SDQ5',
+            'SDQ6',
+            'SDQ7',
+            'SDQ8',
+            'SDQ9',
+            'SDQ10',
+            'SDQ11',
+            'SDQ12',
+            'SDQ13',
+            'SDQ14',
+            'SDQ15',
+            'SDQ16',
+            'SDQ17',
+            'SDQ18',
+            'SDQ19',
+            'SDQ20',
+            'SDQ21',
+            'SDQ22',
+            'SDQ23',
+            'SDQ24',
+            'SDQ25',
+            'SDQ26',
+            'SDQ27',
+            'SDQ28',
+            'SDQ29',
+            'SDQ30',
+            'SDQ31',
+            'SVREF0',
+            'SVREF1',
+            'SVREF2',
+            'SVREF3',
+            'SDQS0',
+            'SDQS0#',
+            'SDQS1',
+            'SDQS1#',
+            'SDQS2',
+            'SDQS2#',
+            'SDQS3',
+            'SDQS3#',
+            'SDQM0',
+            'SDQM1',
+            'SDQM2',
+            'SDQM3',
+            'SCK#',
+            'SCK',
+            'SCKE0',
+            'SCKE1',
+            'SA0',
+            'SA1',
+            'SA2',
+            'SA3',
+            'SA4',
+            'SA5',
+            'SA6',
+            'SA7',
+            'SA8',
+            'SA9',
+            'SA10',
+            'SA11',
+            'SA12',
+            'SA13',
+            'SA14',
+            'SBA0',
+            'SBA1',
+            'SBA2',
+            'SWE',
+            'SCAS',
+            'SRAS',
+            'SCS0',
+            'SCS1',
+            'SZQ',
+            'SRST',
+            'SDBG0',
+            'SDBG1',
+            'ADBG',
+            'ODT0',
+            'ODT1'],
+        'CTRL_SYS': [
+            'TEST',
+            'JTAG_SEL',
+            'UBOOT_SEL',
+            'NMI#',
+            'RESET#',
+            'CLK24M_IN',
+            'CLK24M_OUT',
+            'PLLTEST',
+            'PLLREGIO',
+            'PLLVP25',
+            'PLLDV',
+            'PLLVREG',
+            'PLLGND',
         ],
-
-      'CTRL_SYS':
-        [
-        'TEST', 'JTAG_SEL', 'UBOOT_SEL', 
-        'NMI#', 'RESET#', 
-        'CLK24M_IN', 'CLK24M_OUT', 
-        'PLLTEST', 'PLLREGIO', 'PLLVP25', 
-        'PLLDV', 'PLLVREG', 'PLLGND', 
-       ],
-
-      'POWER_DRAM':
-        ['VCC0_DRAM', 'VCC1_DRAM', 'VCC2_DRAM', 'VCC3_DRAM', 'VCC4_DRAM', 
-         'VCC5_DRAM', 'VCC6_DRAM', 'VCC7_DRAM', 'VCC8_DRAM', 'VCC9_DRAM',
-        'GND0_DRAM', 'GND1_DRAM', 'GND2_DRAM', 'GND3_DRAM', 'GND4_DRAM',
-        'GND5_DRAM', 'GND6_DRAM', 'GND7_DRAM', 'GND8_DRAM', 'GND9_DRAM',
+        'POWER_DRAM': [
+            'VCC0_DRAM',
+            'VCC1_DRAM',
+            'VCC2_DRAM',
+            'VCC3_DRAM',
+            'VCC4_DRAM',
+            'VCC5_DRAM',
+            'VCC6_DRAM',
+            'VCC7_DRAM',
+            'VCC8_DRAM',
+            'VCC9_DRAM',
+            'GND0_DRAM',
+            'GND1_DRAM',
+            'GND2_DRAM',
+            'GND3_DRAM',
+            'GND4_DRAM',
+            'GND5_DRAM',
+            'GND6_DRAM',
+            'GND7_DRAM',
+            'GND8_DRAM',
+            'GND9_DRAM',
         ],
-
-      'POWER_CPU':
-        ['VDD0_CPU', 'VDD1_CPU', 'VDD2_CPU', 'VDD3_CPU', 'VDD4_CPU', 'VDD5_CPU',
-         'GND0_CPU', 'GND1_CPU', 'GND2_CPU', 'GND3_CPU', 'GND4_CPU', 'GND5_CPU',
+        'POWER_CPU': [
+            'VDD0_CPU',
+            'VDD1_CPU',
+            'VDD2_CPU',
+            'VDD3_CPU',
+            'VDD4_CPU',
+            'VDD5_CPU',
+            'GND0_CPU',
+            'GND1_CPU',
+            'GND2_CPU',
+            'GND3_CPU',
+            'GND4_CPU',
+            'GND5_CPU',
         ],
-
-      'POWER_DLL':
-        ['VDD0_DLL', 'VDD1_DLL', 'VDD2_DLL', 
-         'GND0_DLL', 'GND1_DLL', 'GND2_DLL', 
+        'POWER_DLL': [
+            'VDD0_DLL',
+            'VDD1_DLL',
+            'VDD2_DLL',
+            'GND0_DLL',
+            'GND1_DLL',
+            'GND2_DLL',
         ],
-
-      'POWER_INT':
-        ['VDD0_INT', 'VDD1_INT', 'VDD2_INT', 'VDD3_INT', 'VDD4_INT', 
-         'VDD5_INT', 'VDD6_INT', 'VDD7_INT', 'VDD8_INT', 'VDD9_INT', 
-         'GND0_INT', 'GND1_INT', 'GND2_INT', 'GND3_INT', 'GND4_INT', 
-         'GND5_INT', 'GND6_INT', 'GND7_INT', 'GND8_INT', 'GND9_INT', 
+        'POWER_INT': [
+            'VDD0_INT',
+            'VDD1_INT',
+            'VDD2_INT',
+            'VDD3_INT',
+            'VDD4_INT',
+            'VDD5_INT',
+            'VDD6_INT',
+            'VDD7_INT',
+            'VDD8_INT',
+            'VDD9_INT',
+            'GND0_INT',
+            'GND1_INT',
+            'GND2_INT',
+            'GND3_INT',
+            'GND4_INT',
+            'GND5_INT',
+            'GND6_INT',
+            'GND7_INT',
+            'GND8_INT',
+            'GND9_INT',
         ],
-
-      'POWER_GPIO':
-        ['VDD_GPIOA', 'VDD_GPIOB', 'VDD_GPIOC',
-         'VDD_GPIOD', 'VDD_GPIOE', 'VDD_GPIOF',
-         'VDD_GPIOG',
-         'GND_GPIOA', 'GND_GPIOB', 'GND_GPIOC',
-         'GND_GPIOD', 'GND_GPIOE', 'GND_GPIOF', 
-         'GND_GPIOG',
-        ]
-
-      }
-
-    display_fixed(fixedpins, len(pinouts))
+        'POWER_GPIO': [
+            'VDD_GPIOA',
+            'VDD_GPIOB',
+            'VDD_GPIOC',
+            'VDD_GPIOD',
+            'VDD_GPIOE',
+            'VDD_GPIOF',
+            'VDD_GPIOG',
+            'GND_GPIOA',
+            'GND_GPIOB',
+            'GND_GPIOC',
+            'GND_GPIOD',
+            'GND_GPIOE',
+            'GND_GPIOF',
+            'GND_GPIOG',
+        ]}
+
+    fixedpins = display_fixed(fixedpins, len(pinouts))
 
     print "# Functions (PinMux)"
     print
@@ -235,20 +353,20 @@ def pinspec():
                       'SD3': 'SD/MMC 3',
                       'SPI1': 'SPI (Serial Peripheral Interface) 1',
                       'SPI2': 'SPI (Serial Peripheral Interface) 2',
-                      'SPI3': 'Quad SPI (Serial Peripheral Interface) 3',
+                      'QSPI': 'Quad SPI (Serial Peripheral Interface) 1',
                       'TWI1': 'I2C 1',
                       'TWI2': 'I2C 2',
                       'TWI3': 'I2C 3',
-                      'UART0': 'UART (TX/RX/CTS/RTS) 0',
-                      'UART1': 'UART (TX/RX/CTS/RTS) 1',
+                      'UARTQ0': 'UART (TX/RX/CTS/RTS) 0',
+                      'UARTQ1': 'UART (TX/RX/CTS/RTS) 1',
                       'UART2': 'UART (TX/RX) 2',
                       'UART3': 'UART (TX/RX) 3',
                       'UART4': 'UART (TX/RX) 4',
                       'ULPI1': 'ULPI (USB Low Pin-count) 1',
                       'ULPI2': 'ULPI (USB Low Pin-count) 2',
                       'ULPI3': 'ULPI (USB Low Pin-count) 3',
-                    }
-            
+                      }
+
     fns = display_fns(bankspec, pinouts, function_names)
     print
 
@@ -265,26 +383,26 @@ def pinspec():
     # of spare GPIO.
 
     eoma68 = ['B1:LCD/22', 'ULPI1/8', 'ULPI2', 'MMC', 'SD1', 'UART3',
-              'TWI3', 'SPI2', 'E2:SD2',]
-    eoma68_eint = ['EINT16', 'EINT17', 'EINT18', 'EINT19']
+              'TWI3', 'SPI2', 'E2:SD2', ]
+    eoma68_eint = ['EINT_16', 'EINT_17', 'EINT_18', 'EINT_19']
     eoma68_pwm = ['D1:PWM_2']
     descriptions = {
-            'MMC': 'internal (on Card)',
-            'SD1': 'user-facing: internal (on Card), multiplexed with JTAG1\n'
-                   'and UART2, for debug purposes',
-            'TWI3': 'EOMA68-compliance: must be entirely free of devices.\n'
-                    'Address 0x51 used (externally) for EOMA68 EEPROM Id',
-            'E2:SD2': 'EOMA68-compliance',
-            'SPI2': 'EOMA68-compliance',
-            'UART3': 'EOMA68-compliance',
-            'B1:LCD/22': 'EOMA68-compliance, 18-bit RGB/TTL LCD',
-            'ULPI1/8': 'user-facing: internal (on Card), USB-OTG ULPI PHY',
-            'ULPI2': 'EOMA68-compliance: dual USB2 Host ULPI PHY'
+        'MMC': 'internal (on Card)',
+        'SD1': 'user-facing: internal (on Card), multiplexed with JTAG1\n'
+        'and UART2, for debug purposes',
+        'TWI3': 'EOMA68-compliance: must be entirely free of devices.\n'
+        'Address 0x51 used (externally) for EOMA68 EEPROM Id',
+        'E2:SD2': 'EOMA68-compliance',
+        'SPI2': 'EOMA68-compliance',
+        'UART3': 'EOMA68-compliance',
+        'B1:LCD/22': 'EOMA68-compliance, 18-bit RGB/TTL LCD',
+        'ULPI1/8': 'user-facing: internal (on Card), USB-OTG ULPI PHY',
+        'ULPI2': 'EOMA68-compliance: dual USB2 Host ULPI PHY'
     }
 
     unused_pins = check_functions("EOMA68", bankspec, fns, pinouts,
-                 eoma68, eoma68_eint, eoma68_pwm,
-                 descriptions)
+                                  eoma68, eoma68_eint, eoma68_pwm,
+                                  descriptions)
 
     # Industrial scenario.  not totally complete (some GPIO needed for PMIC)
     # One interface to be connected to the MCU to give RTC, boot/dbg,
@@ -293,18 +411,18 @@ def pinspec():
     # OTG_ID (if to be used) would require dropping some functions in order
     # to free up GPIO.  LCD could be reduced to 15-bit (freeing 3).
     # MMC could be reduced to 4-bit-wide, used as SD/MMC (freeing 4).
-    # SPI3 could be used in 1-bit (MOSI/MISO) mode (freeing up 2 more).
+    # QSPI could be used in 1-bit (MOSI/MISO) mode (freeing up 2 more).
 
     industrial = ['D1:FB/17', 'E1:FB/8', 'B1:LCD/22', 'ULPI1/8', 'ULPI2/8',
-                'MMC', 'B2:SD1',
-                'JTAG1', 'A3:UART2', 'E2:UART1', 'C3:UART0',
-              'F2:TWI1', 'D2:TWI2', 'D2:TWI3', 'SPI2', 'SPI3', 'F2:SD3']
+                  'MMC', 'B2:SD1',
+                  'JTAG1', 'A3:UART2', 'E2:UART1', 'C3:UART0',
+                  'F2:TWI1', 'D2:TWI2', 'D2:TWI3', 'SPI2', 'QSPI', 'F2:SD3']
     industrial_pwm = ['F2:PWM_0', 'F2:PWM_1', 'D1:PWM_2']
-    industrial_eint = ['EINT24', 'EINT25', 'EINT26', 'EINT27',
-                       'EINT20', 'EINT21', 'EINT22', 'EINT23']
+    industrial_eint = ['EINT_24', 'EINT_25', 'EINT_26', 'EINT_27',
+                       'EINT_20', 'EINT_21', 'EINT_22', 'EINT_23']
 
     unused_pins = check_functions("Industrial", bankspec, fns, pinouts,
-                 industrial, industrial_eint, industrial_pwm)
+                                  industrial, industrial_eint, industrial_pwm)
 
     # Industrial scenario, using an SPI-based LCD instead of RGB/TTL
     # not totally complete (some GPIO needed for PMIC)
@@ -315,65 +433,65 @@ def pinspec():
     # also possibility of freeing up FlexBus CS# with a little reorg.
 
     industrial = ['D1:FB/17', 'E1:FB/8', 'B2:SPI1', 'ULPI1/8', 'ULPI2/8',
-                'MMC', 'B2:SD1',
-                'JTAG1',
-                'A3:UART2', 'E2:UART1', 'C3:UART0', 'B2:UART4', 'B2:UART3',
-              'F2:TWI1', 'D2:TWI2', 'D2:TWI3', 'SPI2', 'SPI3', 'F2:SD3']
+                  'MMC', 'B2:SD1',
+                  'JTAG1',
+                  'A3:UART2', 'E2:UART1', 'C3:UART0', 'B2:UART4', 'B2:UART3',
+                  'F2:TWI1', 'D2:TWI2', 'D2:TWI3', 'SPI2', 'QSPI', 'F2:SD3']
     industrial_pwm = ['F2:PWM_0', 'F2:PWM_1', 'D1:PWM_2']
-    industrial_eint = ['EINT24', 'EINT25', 'EINT26', 'EINT27',
-                       'EINT20', 'EINT21', 'EINT22', 'EINT23']
+    industrial_eint = ['EINT_24', 'EINT_25', 'EINT_26', 'EINT_27',
+                       'EINT_20', 'EINT_21', 'EINT_22', 'EINT_23']
     ind_descriptions = {
-            'B2:SPI1': 'Used for 320x240 or 640x480 etc. SPI-based LCD.\n'
-                        'Frees up large numbers of GPIO from RGB/TTL bank'
+        'B2:SPI1': 'Used for 320x240 or 640x480 etc. SPI-based LCD.\n'
+        'Frees up large numbers of GPIO from RGB/TTL bank'
     }
     unused_pins = check_functions("Industrial with SPI-LCD",
-                 bankspec, fns, pinouts,
-                 industrial, industrial_eint, industrial_pwm,
-                 ind_descriptions)
+                                  bankspec, fns, pinouts,
+                                  industrial, industrial_eint, industrial_pwm,
+                                  ind_descriptions)
 
     # Smartphone / Tablet - basically the same thing
 
     tablet = ['B1:LCD/22', 'ULPI1/8', 'ULPI2/8',
-                'MMC', 'SD1',
-                'F1:IIS', # I2C Audio
-                'TWI2',   # I2C Audio
-                'E2:UART1', # WIFI/BT 
-                'E2:SD2',   # WIFI
-                'C3:UART0', # GPS
-                'D2:UART3', 
-                'D2:UART4', 
-              'D3:TWI1', 'D2:TWI3', 'SPI2', 'SPI3']
-    tablet_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
+              'MMC', 'SD1',
+              'F1:IIS',  # I2C Audio
+              'TWI2',   # I2C Audio
+              'E2:UART1',  # WIFI/BT
+              'E2:SD2',   # WIFI
+              'C3:UART0',  # GPS
+              'D2:UART3',
+              'D2:UART4',
+              'D3:TWI1', 'D2:TWI3', 'SPI2', 'QSPI']
+    tablet_pwm = ['F2:PWM_0',  # LCD_BACKLIGHT
                   'F2:PWM_1', 'D1:PWM_2']
-    tablet_eint = ['EINT24', # BT_HOST_WAKE
-                   'EINT25', # WIFI_HOST_WAKE 
-                   'EINT26', # CTP_INT
-                    'EINT27', # GSENSOR_INT
-                    'EINT8', # GPS_INT
-                    'EINT7', # TILT_SENSOR_INT
-                    'EINT22', # COMPASS_INT
-                    'EINT23',  # MCU_INT
-                    'EINT16', # PMIC_INT
-                    'EINT17',  # PWR_BUTTON_INT
-                    'EINT30', # OTG_ID
-                    'EINT31',
-                ]
+    tablet_eint = ['EINT_24',  # BT_HOST_WAKE
+                   'EINT_25',  # WIFI_HOST_WAKE
+                   'EINT_26',  # CTP_INT
+                   'EINT_27',  # GSENSOR_INT
+                   'EINT_8',  # GPS_INT
+                   'EINT_7',  # TILT_SENSOR_INT
+                   'EINT_22',  # COMPASS_INT
+                   'EINT_23',  # MCU_INT
+                   'EINT_16',  # PMIC_INT
+                   'EINT_17',  # PWR_BUTTON_INT
+                   'EINT_30',  # OTG_ID
+                   'EINT_31',
+                   ]
     descriptions = {
         'B1:LCD/22':
-             'RGB/TTL LCD, 800x480 or use SN75LVDS83b for up to 1440x900',
+        'RGB/TTL LCD, 800x480 or use SN75LVDS83b for up to 1440x900',
         'MMC': 'eMMC: main internal storage',
         'ULPI1/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
                    'as well as USB Host or USB Device',
         'ULPI2/8': 'USB2 Host, connect to ULPI PHY w/and 4-port USB2 Hub\n'
-                    'for example GL850G or FE1.1. '
-                    'Connects to 2/3/4G/LTE Modem, 2x USB-Camera (VC0345)',
+        'for example GL850G or FE1.1. '
+        'Connects to 2/3/4G/LTE Modem, 2x USB-Camera (VC0345)',
         'SD1': 'internal, multiplexed with JTAG1\n'
                'and UART2, for debug purposes',
         'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
         'TWI2': 'Connect to AC97 Audio IC',
         'E2:UART1': 'Connect to BT on AP6234/AP6335',
         'E2:SD2': 'Connect to WIFI on AP6234/AP6335',
-        'SPI3': 'Boot Storage (connection to companion / debug / boot MCU)\n'
+        'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
                 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
                 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.',
         'SPI2': 'Spare? SPI, connect to higher-speed sensor?',
@@ -394,116 +512,116 @@ def pinspec():
         'F2:PWM_0': 'LCD Backlight',
         'F2:PWM_1': 'Spare? PWM (or extra GPIO / EINT)',
         'D1:PWM_2': 'Spare? PWM (or extra GPIO / EINT)',
-        'EINT24': 'BT_HOST_WAKE',
-        'EINT25': 'WIFI_HOST_WAKE',
-        'EINT26': 'CTP_INT',
-        'EINT27': 'GSENSOR_INT',
-        'EINT8': 'GPS_INT',
-        'EINT7': 'TILT_SENSOR_INT',
-        'EINT22': 'COMPASS_INT',
-        'EINT23': 'MCU_INT',
-        'EINT16': 'PMIC_INT',
-        'EINT17': 'PWR_BUTTON_INT',
-        'EINT30': 'OTG_ID',
-        'EINT31': 'Spare?',
+        'EINT_24': 'BT_HOST_WAKE',
+        'EINT_25': 'WIFI_HOST_WAKE',
+        'EINT_26': 'CTP_INT',
+        'EINT_27': 'GSENSOR_INT',
+        'EINT_8': 'GPS_INT',
+        'EINT_7': 'TILT_SENSOR_INT',
+        'EINT_22': 'COMPASS_INT',
+        'EINT_23': 'MCU_INT',
+        'EINT_16': 'PMIC_INT',
+        'EINT_17': 'PWR_BUTTON_INT',
+        'EINT_30': 'OTG_ID',
+        'EINT_31': 'Spare?',
     }
     unused_pins = check_functions("Smartphone / Tablet",
-                 bankspec, fns, pinouts,
-                 tablet, tablet_eint, tablet_pwm,
-                 descriptions)
+                                  bankspec, fns, pinouts,
+                                  tablet, tablet_eint, tablet_pwm,
+                                  descriptions)
 
     # Laptop
 
     laptop = ['D1:FB/17', 'E1:FB/8', 'B1:LCD/22', 'ULPI1/8', 'ULPI2/8',
-                'MMC', 'SD1',
-                'F1:IIS', # I2C Audio
-                'TWI2',   # I2C Audio
-                'E2:UART1', # WIFI/BT 
-                'E2:SD3',   # WIFI
-              'D2:TWI3', 'SPI3']
-    laptop_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
-                 ]
-    laptop_eint = ['EINT20', # BT_HOST_WAKE
-                   'EINT21', # WIFI_HOST_WAKE 
-                    'EINT9',  # MCU_INT
-                    'EINT31', # PMIC_INT
-                ]
+              'MMC', 'SD1',
+              'F1:IIS',  # I2C Audio
+              'TWI2',   # I2C Audio
+              'E2:UART1',  # WIFI/BT
+              'E2:SD3',   # WIFI
+              'D2:TWI3', 'QSPI']
+    laptop_pwm = ['F2:PWM_0',  # LCD_BACKLIGHT
+                  ]
+    laptop_eint = ['EINT_20',  # BT_HOST_WAKE
+                   'EINT_21',  # WIFI_HOST_WAKE
+                   'EINT_9',  # MCU_INT
+                   'EINT_31',  # PMIC_INT
+                   ]
     descriptions = {
         'D1:FB/17': 'FlexBus.  Connect to DM9000 or AX99896A MCU-style Bus\n'
-                    '10/100 Ethernet PHY.',
+        '10/100 Ethernet PHY.',
         'E1:FB/8': 'FlexBus bus bits 8-15, needed to make a 16-bit bus width',
-        'B1:LCD/22':
-             'RGB/TTL LCD, use SN75LVDS83b for LVDS or SSD2828 for MIPI,\n'
-             'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
-             'display output (eDP/LVDS and HDMI/VGA) '
-             'conversion.',
+        'B1:LCD/22': 'RGB/TTL LCD, use SN75LVDS83b for '
+                     'LVDS or SSD2828 for MIPI,\n'
+        'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
+        'display output (eDP/LVDS and HDMI/VGA) '
+        'conversion.',
         'MMC': 'eMMC: main internal storage',
         'ULPI1/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
-                   'as well as USB Host or USB Device',
+        'as well as USB Host or USB Device',
         'ULPI2/8': 'USB2 Host, connect to ULPI PHY w/and 4-port USB2 Hub\n'
-                    'for example GL850G or FE1.1. '
-                    'Connects to USB-Camera (VC0345 and 3x external USB Ports)',
+        'for example GL850G or FE1.1. '
+        'Connects to USB-Camera (VC0345 and 3x external USB Ports)',
         'SD1': 'internal, multiplexed with JTAG1\n'
-               'and UART2, for debug purposes',
+        'and UART2, for debug purposes',
         'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
         'TWI2': 'Connect to AC97 Audio IC',
         'E2:UART1': 'Connect to BT on AP6234/AP6335',
         'E2:SD3': 'Connect to WIFI on AP6234/AP6335',
-        'SPI3': 'Boot Storage (connection to companion / debug / boot MCU)\n'
-                'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
-                'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
-                'MCU implements keyboard-matrix for keyboard (also trackpad?)',
+        'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
+        'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
+        'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
+        'MCU implements keyboard-matrix for keyboard (also trackpad?)',
         'D2:TWI3': 'Connect to PMIC',
         'GPIO': 'Plenty of spare GPIO pins for miscellaneous functions\n'
-                'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
-                'on the single MCU_INT line, if really needed',
+        'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
+        'on the single MCU_INT line, if really needed',
         'F2:PWM_0': 'LCD Backlight',
-        'EINT20': 'BT_HOST_WAKE',
-        'EINT21': 'WIFI_HOST_WAKE',
-        'EINT9': 'MCU_INT',
-        'EINT31': 'PMIC_INT',
+        'EINT_20': 'BT_HOST_WAKE',
+        'EINT_21': 'WIFI_HOST_WAKE',
+        'EINT_9': 'MCU_INT',
+        'EINT_31': 'PMIC_INT',
     }
     unused_pins = check_functions("Laptop / Netbook",
-                 bankspec, fns, pinouts,
-                 laptop, laptop_eint, laptop_pwm,
-                 descriptions)
+                                  bankspec, fns, pinouts,
+                                  laptop, laptop_eint, laptop_pwm,
+                                  descriptions)
 
     # IoT
 
     iot = ['B1:LCD', 'ULPI2/8', 'ULPI1/8',
-                'MMC', 'SD1',
-                'F1:IIS', # I2C Audio
-                #'TWI2',   # I2C Audio
-                'C3:UART0', # HSPA UART
-                'E2:UART1', # BT UART
-                'C2:SPI2', # HSPI SPI
-                'E2:SD3',   # WIFI
-                'D3:TWI1', # sensors CTP,
-              'D2:TWI3', 'SPI3']
-    iot_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
-                 ]
-    iot_eint = [ 'EINT5', # 'HSPA_MST_RDY',
-                'EINT6', # 'HSPA_SL_RDY',
-                'EINT7', # 'HSPA_RING',
-                'EINT8', # 'WL_PMU_EN',
-                'EINT9', # HSPA_GPIO1
-                'EINT10', # IR_DT
-                'EINT11', # 'BT_PCM_CLK',
-                'EINT12', # 'BT_PCM_DIN',
-                'EINT13', # 'BT_PCM_SYNC',
-                'EINT14', # 'BT_PCM_DOUT',
-                'EINT16', # 'USB_DRVVBUS',
-                'EINT17', # 'USB_VBUSDET',
-                'EINT21', # 'USB_ID',
-                'EINT30', # 'CTP_INT',
-                'EINT31', # 'SD_DET#',
+           'MMC', 'SD1',
+           'F1:IIS',  # I2C Audio
+           #'TWI2',   # I2C Audio
+           'C3:UART0',  # HSPA UART
+           'E2:UART1',  # BT UART
+           'C2:SPI2',  # HSPI SPI
+           'E2:SD3',   # WIFI
+           'D3:TWI1',  # sensors CTP,
+           'D2:TWI3', 'QSPI']
+    iot_pwm = ['F2:PWM_0',  # LCD_BACKLIGHT
+               ]
+    iot_eint = ['EINT_5',  # 'HSPA_MST_RDY',
+                'EINT_6',  # 'HSPA_SL_RDY',
+                'EINT_7',  # 'HSPA_RING',
+                'EINT_8',  # 'WL_PMU_EN',
+                'EINT_9',  # HSPA_GPIO1
+                'EINT_10',  # IR_DT
+                'EINT_11',  # 'BT_PCM_CLK',
+                'EINT_12',  # 'BT_PCM_DIN',
+                'EINT_13',  # 'BT_PCM_SYNC',
+                'EINT_14',  # 'BT_PCM_DOUT',
+                'EINT_16',  # 'USB_DRVVBUS',
+                'EINT_17',  # 'USB_VBUSDET',
+                'EINT_21',  # 'USB_ID',
+                'EINT_30',  # 'CTP_INT',
+                'EINT_31',  # 'SD_DET#',
                 ]
     descriptions = {
         'B1:LCD':
-             'RGB/TTL LCD, use SN75LVDS83b for LVDS or SSD2828 for MIPI,\n'
-             'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
-             'display output (eDP/LVDS and HDMI/VGA) '
-             'conversion.',
+        'RGB/TTL LCD, use SN75LVDS83b for LVDS or SSD2828 for MIPI,\n'
+        'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
+        'display output (eDP/LVDS and HDMI/VGA) '
+        'conversion.',
         'MMC': 'eMMC: main internal storage',
         'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
         'ULPI2/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
@@ -515,7 +633,7 @@ def pinspec():
         'E2:UART1': 'Connect to BT UART',
         'E2:SD3': 'Connect to WIFI',
         'C2:SPI2': 'HSPA SPI',
-        'SPI3': 'Boot Storage (connection to companion / debug / boot MCU)\n'
+        'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
                 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
                 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
                 'MCU implements keyboard-matrix for keyboard (also trackpad?)',
@@ -525,41 +643,41 @@ def pinspec():
                 'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
                 'on the single MCU_INT line, if really needed',
         'F2:PWM_0': 'LCD Backlight',
-        'GPIOD4': 'WL_WAKE_AP',
-        'GPIOD5': 'BT_WAKE_AP',
-        'GPIOD6': 'AP_WAKE_BT',
-        'GPIOD7': 'AP_CK32KO',
-        'GPIOD8': 'HSPA_PWRON',
-        'GPIOD9': 'BT_RST_N',
-        'GPIOE5': 'HSPA_ON_OFF',
-        'GPIOD2': 'HSPA_SHUTDOWN',
-        'GPIOD3': 'CTP_RST',
-        'GPIOD12': 'LCD_RDN',
-        'GPIOD17': 'LCD_WRN',
-        'GPIOD18': 'LCD_RS',
-        'GPIOD21': 'LCD_CSN',
-
-        'EINT5': 'HSPA_MST_RDY',
-        'EINT6': 'HSPA_SL_RDY',
-        'EINT7': 'HSPA_RING',
-        'EINT8': 'WL_PMU_EN',
-        'EINT9': 'HSPA_GPIO1',
-        'EINT10': 'IR_DT',
-        'EINT11': 'BT_PCM_CLK',
-        'EINT12': 'BT_PCM_DIN',
-        'EINT13': 'BT_PCM_SYNC',
-        'EINT14': 'BT_PCM_DOUT',
-
-        'EINT16': 'USB_DRVVBUS',
-        'EINT17': 'USB_VBUSDET',
-        'EINT21': 'USB_ID',
-        'EINT30': 'CTP_INT',
-        'EINT31': 'SD_DETN',
+        'GPIOD_D4': 'WL_WAKE_AP',
+        'GPIOD_D5': 'BT_WAKE_AP',
+        'GPIOD_D6': 'AP_WAKE_BT',
+        'GPIOD_D7': 'AP_CK32KO',
+        'GPIOD_D8': 'HSPA_PWRON',
+        'GPIOD_D9': 'BT_RST_N',
+        'GPIOE_E5': 'HSPA_ON_OFF',
+        'GPIOD_D2': 'HSPA_SHUTDOWN',
+        'GPIOD_D3': 'CTP_RST',
+        'GPIOD_D12': 'LCD_RDN',
+        'GPIOD_D17': 'LCD_WRN',
+        'GPIOD_D18': 'LCD_RS',
+        'GPIOD_D21': 'LCD_CSN',
+
+        'EINT_5': 'HSPA_MST_RDY',
+        'EINT_6': 'HSPA_SL_RDY',
+        'EINT_7': 'HSPA_RING',
+        'EINT_8': 'WL_PMU_EN',
+        'EINT_9': 'HSPA_GPIO1',
+        'EINT_10': 'IR_DT',
+        'EINT_11': 'BT_PCM_CLK',
+        'EINT_12': 'BT_PCM_DIN',
+        'EINT_13': 'BT_PCM_SYNC',
+        'EINT_14': 'BT_PCM_DOUT',
+
+        'EINT_16': 'USB_DRVVBUS',
+        'EINT_17': 'USB_VBUSDET',
+        'EINT_21': 'USB_ID',
+        'EINT_30': 'CTP_INT',
+        'EINT_31': 'SD_DETN',
     }
     unused_pins = check_functions("IoT",
-                 bankspec, fns, pinouts,
-                 iot, iot_eint, iot_pwm,
-                 descriptions)
+                                  bankspec, fns, pinouts,
+                                  iot, iot_eint, iot_pwm,
+                                  descriptions)
 
     print "# Reference Datasheets"
     print