big pep8 whitespace cleanup
[pinmux.git] / src / spec / m_class.py
1 #!/usr/bin/env python
2
3 from spec.base import PinSpec
4
5
6 def pinspec(of):
7 pinbanks = {'A': 16,
8 'B': 28,
9 'C': 24,
10 'D': 24,
11 'E': 24,
12 'F': 10,
13 'G': 32,
14 }
15 fixedpins = {
16 'DDR3': [
17 'SDQ0', 'SDQ1', 'SDQ2', 'SDQ3',
18 'SDQ4', 'SDQ5', 'SDQ6', 'SDQ7',
19 'SDQ8', 'SDQ9', 'SDQ10', 'SDQ11',
20 'SDQ12', 'SDQ13', 'SDQ14', 'SDQ15',
21 'SDQ16', 'SDQ17', 'SDQ18', 'SDQ19',
22 'SDQ20', 'SDQ21', 'SDQ22', 'SDQ23',
23 'SDQ24', 'SDQ25', 'SDQ26', 'SDQ27',
24 'SDQ28', 'SDQ29', 'SDQ30', 'SDQ31',
25 'SVREF0', 'SVREF1', 'SVREF2', 'SVREF3',
26 'SDQS0', 'SDQS0#', 'SDQS1', 'SDQS1#',
27 'SDQS2', 'SDQS2#', 'SDQS3', 'SDQS3#',
28 'SDQM0', 'SDQM1', 'SDQM2', 'SDQM3',
29 'SCK#', 'SCK', 'SCKE0', 'SCKE1',
30 'SA0', 'SA1', 'SA2', 'SA3',
31 'SA4', 'SA5', 'SA6', 'SA7',
32 'SA8', 'SA9', 'SA10', 'SA11',
33 'SA12', 'SA13', 'SA14',
34 'SBA0', 'SBA1', 'SBA2',
35 'SWE', 'SCAS', 'SRAS', 'SCS0',
36 'SCS1', 'SZQ', 'SRST',
37 'SDBG0', 'SDBG1', 'ADBG',
38 'ODT0', 'ODT1'],
39 'CTRL_SYS': [
40 'TEST', 'JTAG_SEL', 'UBOOT_SEL',
41 'NMI#', 'RESET#', 'CLK24M_IN', 'CLK24M_OUT',
42 'PLLTEST', 'PLLREGIO', 'PLLVP25',
43 'PLLDV', 'PLLVREG', 'PLLGND',
44 ],
45 'POWER_DRAM': [
46 'VCC0_DRAM', 'VCC1_DRAM', 'VCC2_DRAM', 'VCC3_DRAM',
47 'VCC4_DRAM', 'VCC5_DRAM', 'VCC6_DRAM', 'VCC7_DRAM',
48 'VCC8_DRAM', 'VCC9_DRAM',
49 'GND0_DRAM', 'GND1_DRAM', 'GND2_DRAM', 'GND3_DRAM',
50 'GND4_DRAM', 'GND5_DRAM', 'GND6_DRAM', 'GND7_DRAM',
51 'GND8_DRAM', 'GND9_DRAM',
52 ],
53 'POWER_CPU': [
54 'VDD0_CPU', 'VDD1_CPU', 'VDD2_CPU',
55 'VDD3_CPU', 'VDD4_CPU', 'VDD5_CPU',
56 'GND0_CPU', 'GND1_CPU', 'GND2_CPU',
57 'GND3_CPU', 'GND4_CPU', 'GND5_CPU',
58 ],
59 'POWER_DLL': [
60 'VDD0_DLL', 'VDD1_DLL', 'VDD2_DLL',
61 'GND0_DLL', 'GND1_DLL', 'GND2_DLL',
62 ],
63 'POWER_INT': [
64 'VDD0_INT', 'VDD1_INT', 'VDD2_INT', 'VDD3_INT', 'VDD4_INT',
65 'VDD5_INT', 'VDD6_INT', 'VDD7_INT', 'VDD8_INT', 'VDD9_INT',
66 'GND0_INT', 'GND1_INT', 'GND2_INT', 'GND3_INT', 'GND4_INT',
67 'GND5_INT', 'GND6_INT', 'GND7_INT', 'GND8_INT', 'GND9_INT',
68 ],
69 'POWER_GPIO': [
70 'VDD_GPIOA', 'VDD_GPIOB', 'VDD_GPIOC',
71 'VDD_GPIOD', 'VDD_GPIOE', 'VDD_GPIOF',
72 'VDD_GPIOG',
73 'GND_GPIOA', 'GND_GPIOB', 'GND_GPIOC',
74 'GND_GPIOD', 'GND_GPIOE', 'GND_GPIOF',
75 'GND_GPIOG',
76 ]}
77
78 function_names = {'EINT': 'External Interrupt',
79 'FB': 'MC68k FlexBus',
80 'IIS': 'I2S Audio',
81 'JTAG0': 'JTAG (same as JTAG1, JTAG_SEL=LOW)',
82 'JTAG1': 'JTAG (same as JTAG0, JTAG_SEL=HIGH)',
83 'LCD': '24-pin RGB/TTL LCD',
84 'RG': 'RGMII Ethernet',
85 'MMC': 'eMMC 1/2/4/8 pin',
86 'PWM': 'PWM (pulse-width modulation)',
87 'SD0': 'SD/MMC 0',
88 'SD1': 'SD/MMC 1',
89 'SD2': 'SD/MMC 2',
90 'SPI0': 'SPI (Serial Peripheral Interface) 0',
91 'SPI1': 'SPI (Serial Peripheral Interface) 1',
92 'QSPI': 'Quad SPI (Serial Peripheral Interface) 1',
93 'TWI0': 'I2C 1',
94 'TWI1': 'I2C 2',
95 'TWI2': 'I2C 3',
96 'UARTQ0': 'UART (TX/RX/CTS/RTS) 0',
97 'UARTQ1': 'UART (TX/RX/CTS/RTS) 1',
98 'UART0': 'UART (TX/RX) 0',
99 'UART1': 'UART (TX/RX) 1',
100 'UART2': 'UART (TX/RX) 2',
101 'ULPI0': 'ULPI (USB Low Pin-count) 1',
102 'ULPI1': 'ULPI (USB Low Pin-count) 2',
103 'ULPI2': 'ULPI (USB Low Pin-count) 3',
104 }
105
106 ps = PinSpec(pinbanks, fixedpins, function_names)
107
108 # Bank A, 0-15
109 ps.gpio("", ('A', 0), "A", 0, 0, 16)
110 ps.spi("0", ('A', 0), "A", 3)
111 ps.uartfull("1", ('A', 0), "A", 2)
112 ps.i2c("0", ('A', 4), "A", 2)
113 ps.emmc("", ('A', 0), "A", 1)
114 #ps.uart("0", ('A', 14), "A", 1)
115 ps.spi("1", ('A', 6), "A", 2)
116 ps.eint("", ('A', 10), "A", 1, start=0, limit=6)
117 ps.eint("", ('A', 4), "A", 3, start=0, limit=6)
118 ps.sdmmc("0", ('A', 10), "A", 2)
119 ps.jtag("0", ('A', 10), "A", 3)
120 ps.uart("0", ('A', 14), "A", 3)
121
122 # Bank B, 16-47
123 ps.gpio("", ('B', 0), "B", 0, 0, 28)
124 ps.rgbttl("0", ('B', 0), "B", 1)
125 ps.spi("0", ('B', 12), "B", 2)
126 ps.quadspi("", ('B', 4), "B", 2, limit=4)
127 ps.uart("1", ('B', 16), "B", 2)
128 ps.i2c("2", ('B', 18), "B", 2)
129 ps.pwm("", ('B', 9), "B", 2, start=0, limit=1)
130 ps.pwm("", ('B', 20), "B", 2, start=1, limit=2)
131 ps.sdmmc("0", ('B', 22), "B", 2)
132 ps.eint("", ('B', 0), "B", 3, start=6, limit=4)
133 ps.flexbus2("", ('B', 4), "B", 3)
134 ps.i2c("0", ('B', 0), "B", 2)
135 ps.uart("0", ('B', 2), "B", 2)
136 ps.uart("2", ('B', 10), "B", 2)
137
138 # Bank C, 48-71
139 ps.gpio("", ("C", 0), "C", 0, 0, 24)
140 ps.ulpi("0", ('C', 0), "C", 1)
141 ps.ulpi("1", ('C', 12), "C", 1)
142 ps.spi("1", ('C', 8), "C", 2)
143 #ps.spi("1", ('C', 28), "C", 2)
144 ps.uartfull("0", ('C', 20), "C", 3)
145 ps.eint("", ('C', 0), "C", 3, start=10, limit=8)
146 ps.jtag("1", ('C', 8), "C", 3)
147 ps.eint("", ('C', 12), "C", 3, start=22, limit=8)
148 ps.uart("0", ('C', 22), "C", 2)
149 ps.i2s("", ('C', 13), "C", 2)
150 ps.pwm("", ('C', 21), "C", 2, start=2, limit=1)
151
152 # Bank D, 72-96
153
154 # ok this is slightly complicated, basically there's extra
155 # functions that we want to be on the same pin (but a different mux)
156 # because their use is mutually-exclusive. you can't have FB_TS
157 # at the same time as FB_ALE for example. FB_BWE2 even has two
158 # mutually exclusive functions. these extra functions are
159 # specified here, so that when e.g. FB_BWE2 has been positioned,
160 # FB_A0 will be placed in bank d, mux column 3, *on the same pin*.
161 # this saves messing about, because if FB_BWE2 moved to a
162 # different pin so would FB_A0 (and FB_CS2) likewise have to be
163 # moved. and the rest.
164 flexspec = {
165 'FB_TS': ('FB_ALE', 2, "D"),
166 'FB_CS2': ('FB_BWE2', 2, "D"),
167 'FB_A0': ('FB_BWE2', 3, "D"),
168 'FB_CS3': ('FB_BWE3', 2, "D"),
169 'FB_A1': ('FB_BWE3', 3, "D"),
170 'FB_TBST': ('FB_OE', 2, "D"),
171 'FB_TSIZ0': ('FB_BWE0', 2, "D"),
172 'FB_TSIZ1': ('FB_BWE1', 2, "D"),
173 }
174 #ps.mcu8080("", 72, "D", 1)
175 ps.gpio("", ('D', 0), "D", 0, 0, 24)
176 ps.flexbus1("", ('D', 0), "D", 1, spec=flexspec)
177 ps.i2c("1", ('D', 8), "D", 3)
178 ps.pwm("", ('D', 21), "D", 1, start=0, limit=3)
179 ps.i2c("0", ('D', 10), "D", 3)
180 ps.i2c("2", ('D', 19), "D", 2)
181 ps.uartfull("0", ('D', 0), "D", 2)
182 ps.uart("1", ('D', 21), "D", 2)
183 ps.uart("2", ('D', 13), "D", 2)
184 ps.eint("", ('D', 19), "D", 3, start=18, limit=4)
185 ps.eint("", ('D', 23), "D", 3, start=9, limit=1)
186 ps.eint("", ('D', 13), "D", 3, start=5, limit=4)
187 ps.eint("", ('D', 0), "D", 3, start=30, limit=2)
188 ps.i2c("1", ('D', 2), "D", 3)
189 ps.sdmmc("1", ('D', 4), "D", 2)
190
191 # Bank E
192 ps.gpio("", ('E', 0), "E", 0, 0, 24)
193 ps.flexbus2("", ('E', 0), "E", 1)
194 ps.sdmmc("1", ('E', 0), "E", 2)
195 ps.sdmmc("2", ('E', 8), "E", 2)
196 ps.quadspi("", ('E', 18), "E", 2)
197 ps.uartfull("1", ('E', 14), "E", 2)
198 ps.i2c("1", ('E', 6), "E", 2)
199 ps.eint("", ('E', 0), "E", 3, start=10, limit=8)
200 ps.eint("", ('E', 8), "E", 3, start=22, limit=6)
201 ps.emmc("", ('E', 14), "E", 3)
202
203 # Bank F
204 ps.gpio("", ('F', 0), "F", 0, 0, 10)
205 ps.i2s("", ('F', 0), "F", 1)
206 ps.i2c("0", ('F', 6), "F", 2)
207 ps.pwm("", ('F', 8), "F", 2, start=0, limit=1)
208 ps.pwm("", ('F', 9), "F", 2, start=1, limit=1)
209 ps.uart("2", ('F', 8), "F", 1)
210 ps.sdmmc("2", ('F', 0), "F", 2)
211 ps.eint("", ('F', 0), "F", 3, start=18, limit=4)
212 ps.pwm("", ('F', 4), "F", 3, start=2, limit=1)
213 ps.eint("", ('F', 5), "F", 3, start=7, limit=1)
214 ps.eint("", ('F', 6), "F", 3, start=28, limit=4)
215
216 # Bank G
217 ps.gpio("", ('G', 0), "G", 0, 0, 32)
218 ps.rgmii("", ('G', 0), "G", 1)
219 ps.ulpi("2", ('G', 20), "G", 1)
220 ps.rgbttl("1", ('G', 0), "G", 2)
221 ps.quadspi("", ('G', 26), "G", 3)
222 ps.flexbus2("", ('G', 0), "G", 3)
223 ps.sdmmc("1", ('G', 24), "G", 3, limit=2)
224 ps.sdmmc("1", ('G', 28), "G", 2, start=2)
225
226 # EOMA68 scenario. not totally complete (some GPIO needed for PMIC)
227 # One interface to be connected to the MCU to give RTC and boot/dbg
228 # VBUS_EN, OTG_ID etc. are all not included below, there is plenty
229 # of spare GPIO.
230
231 eoma68 = ['B1:LCD/22', 'ULPI0/8', 'ULPI1', 'MMC', 'SD0', 'UART1',
232 'TWI2', 'SPI1', 'E2:SD1', ]
233 eoma68_eint = ['EINT_16', 'EINT_17', 'EINT_18', 'EINT_19']
234 eoma68_pwm = ['D1:PWM_2']
235 descriptions = {
236 'MMC': 'internal (on Card)',
237 'SD0': 'user-facing: internal (on Card), multiplexed with JTAG0\n'
238 'and UART0, for debug purposes',
239 'TWI2': 'EOMA68-compliance: must be entirely free of devices.\n'
240 'Address 0x51 used (externally) for EOMA68 EEPROM Id',
241 'E2:SD1': 'EOMA68-compliance',
242 'SPI1': 'EOMA68-compliance',
243 'UART1': 'EOMA68-compliance',
244 'B1:LCD/22': 'EOMA68-compliance, 18-bit RGB/TTL LCD',
245 'ULPI0/8': 'user-facing: internal (on Card), USB-OTG ULPI PHY',
246 'ULPI1': 'EOMA68-compliance: dual USB2 Host ULPI PHY'
247 }
248
249 ps.add_scenario("EOMA68", eoma68, eoma68_eint, eoma68_pwm, descriptions)
250
251 # Industrial scenario. not totally complete (some GPIO needed for PMIC)
252 # One interface to be connected to the MCU to give RTC, boot/dbg,
253 # option of CAN Bus, ADC, DAC, OWB, more GPIO, more PWM etc. etc.
254 # Focus is on getting as many UARTs, SPIs and TWIs as possible.
255 # OTG_ID (if to be used) would require dropping some functions in order
256 # to free up GPIO. LCD could be reduced to 15-bit (freeing 3).
257 # MMC could be reduced to 4-bit-wide, used as SD/MMC (freeing 4).
258 # QSPI could be used in 1-bit (MOSI/MISO) mode (freeing up 2 more).
259
260 industrial = ['D1:FB/17', 'E1:FB/8', 'B1:LCD/22', 'ULPI0/8', 'ULPI1/8',
261 'MMC', 'B2:SD0',
262 'JTAG0', 'A3:UART0', 'E2:UARTQ1', 'C3:UARTQ0',
263 'F2:TWI0', 'D2:TWI1', 'D2:TWI2', 'SPI1', 'QSPI', 'F2:SD2']
264 industrial_pwm = ['F2:PWM_0', 'F2:PWM_1', 'D1:PWM_2']
265 industrial_eint = ['EINT_24', 'EINT_25', 'EINT_26', 'EINT_27',
266 'EINT_20', 'EINT_21', 'EINT_22', 'EINT_23']
267
268 ps.add_scenario("Industrial", industrial, industrial_eint,
269 industrial_pwm, None)
270
271 # Industrial scenario, using an SPI-based LCD instead of RGB/TTL
272 # not totally complete (some GPIO needed for PMIC)
273 # One interface to be connected to the MCU to give RTC, boot/dbg,
274 # option of CAN Bus, ADC, DAC, OWB, more GPIO, more PWM etc. etc.
275 # Focus is on getting as many UARTs, SPIs and TWIs as possible,
276 # leaving some GPIO spare from the RGB/TTL bank (SPI CS#)
277 # also possibility of freeing up FlexBus CS# with a little reorg.
278
279 industrial = ['D1:FB/17', 'E1:FB/8', 'B2:SPI0', 'ULPI0/8', 'ULPI1/8',
280 'MMC', 'B2:SD0',
281 'JTAG0',
282 'A3:UART0', 'E2:UARTQ1', 'C3:UARTQ0', 'B2:UART2', 'B2:UART1',
283 'F2:TWI0', 'D2:TWI1', 'D2:TWI2', 'SPI1', 'QSPI', 'F2:SD2']
284 industrial_pwm = ['F2:PWM_0', 'F2:PWM_1', 'D1:PWM_2']
285 industrial_eint = ['EINT_24', 'EINT_25', 'EINT_26', 'EINT_27',
286 'EINT_20', 'EINT_21', 'EINT_22', 'EINT_23']
287 ind_descriptions = {
288 'B2:SPI0': 'Used for 320x240 or 640x480 etc. SPI-based LCD.\n'
289 'Frees up large numbers of GPIO from RGB/TTL bank'
290 }
291
292 ps.add_scenario("Industrial with SPI-LCD",
293 industrial, industrial_eint, industrial_pwm,
294 ind_descriptions)
295
296 # Smartphone / Tablet - basically the same thing
297
298 tablet = ['B1:LCD/22', 'ULPI0/8', 'ULPI1/8',
299 'MMC', 'SD0',
300 'F1:IIS', # I2C Audio
301 'TWI1', # I2C Audio
302 'E2:UARTQ1', # WIFI/BT
303 'E2:SD1', # WIFI
304 'C3:UARTQ0', # GPS
305 'D2:UART1',
306 'D2:UART2',
307 'D3:TWI0', 'D2:TWI2', 'SPI1', 'QSPI']
308 tablet_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
309 'F2:PWM_1', 'D1:PWM_2']
310 tablet_eint = ['EINT_24', # BT_HOST_WAKE
311 'EINT_25', # WIFI_HOST_WAKE
312 'EINT_26', # CTP_INT
313 'EINT_27', # GSENSOR_INT
314 'EINT_8', # GPS_INT
315 'EINT_7', # TILT_SENSOR_INT
316 'EINT_22', # COMPASS_INT
317 'EINT_23', # MCU_INT
318 'EINT_16', # PMIC_INT
319 'EINT_17', # PWR_BUTTON_INT
320 'EINT_30', # OTG_ID
321 'EINT_31',
322 ]
323 descriptions = {
324 'B1:LCD/22':
325 'RGB/TTL LCD, 800x480 or use SN75LVDS83b for up to 1440x900',
326 'MMC': 'eMMC: main internal storage',
327 'ULPI0/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
328 'as well as USB Host or USB Device',
329 'ULPI1/8': 'USB2 Host, connect to ULPI PHY w/and 4-port USB2 Hub\n'
330 'for example GL850G or FE1.1. '
331 'Connects to 2/3/4G/LTE Modem, 2x USB-Camera (VC0345)',
332 'SD0': 'internal, multiplexed with JTAG0\n'
333 'and UART0, for debug purposes',
334 'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
335 'TWI1': 'Connect to AC97 Audio IC',
336 'E2:UARTQ1': 'Connect to BT on AP6234/AP6335',
337 'E2:SD1': 'Connect to WIFI on AP6234/AP6335',
338 'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
339 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
340 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.',
341 'SPI1': 'Spare? SPI, connect to higher-speed sensor?',
342 'D2:UART1': 'Spare? UART (or 2 extra GPIO / EINT)',
343 'D2:UART2': 'Spare? UART (or 2 extra GPIO)',
344 'D3:TWI0': 'Connect to PMIC',
345 'D2:TWI2': 'Connect to sensors (Trackpad? CTP GSENSOR TILT COMPASS)',
346 'GPIO': '9 spare GPIO pins for miscellaneous functions:\n'
347 'wake-up of BT, WIFI, LCD power, sensor power etc.\n'
348 '4 GPIO may be needed for PWM Audio from Modem.\n'
349 'LED lights for camera will be needed.\n'
350 'Some phones may have clam-shell or lid switch.\n'
351 'Some Modems have spare GPIO (over AT commandset).\n'
352 'AXP209 PMIC has 4x GPIO, accessible over I2C.\n'
353 'SPI1, UART1-4, PWM1-2 may also be spare (10 extra GPIO).\n'
354 'If more needed, companion MCU may be used (48+ pin variant)\n'
355 'which also includes ADC, DAC, more PWM etc.',
356 'F2:PWM_0': 'LCD Backlight',
357 'F2:PWM_1': 'Spare? PWM (or extra GPIO / EINT)',
358 'D1:PWM_2': 'Spare? PWM (or extra GPIO / EINT)',
359 'EINT_24': 'BT_HOST_WAKE',
360 'EINT_25': 'WIFI_HOST_WAKE',
361 'EINT_26': 'CTP_INT',
362 'EINT_27': 'GSENSOR_INT',
363 'EINT_8': 'GPS_INT',
364 'EINT_7': 'TILT_SENSOR_INT',
365 'EINT_22': 'COMPASS_INT',
366 'EINT_23': 'MCU_INT',
367 'EINT_16': 'PMIC_INT',
368 'EINT_17': 'PWR_BUTTON_INT',
369 'EINT_30': 'OTG_ID',
370 'EINT_31': 'Spare?',
371 }
372
373 ps.add_scenario("Smartphone / Tablet",
374 tablet, tablet_eint, tablet_pwm,
375 descriptions)
376
377 # Laptop
378
379 laptop = ['D1:FB/17', 'E1:FB/8', 'B1:LCD/22', 'ULPI0/8', 'ULPI1/8',
380 'MMC', 'SD0',
381 'F1:IIS', # I2C Audio
382 'TWI1', # I2C Audio
383 'E2:UARTQ1', # WIFI/BT
384 'E2:SD2', # WIFI
385 'D2:TWI2', 'QSPI']
386 laptop_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
387 ]
388 laptop_eint = ['EINT_20', # BT_HOST_WAKE
389 'EINT_21', # WIFI_HOST_WAKE
390 'EINT_9', # MCU_INT
391 'EINT_31', # PMIC_INT
392 ]
393 descriptions = {
394 'D1:FB/17': 'FlexBus. Connect to DM9000 or AX99896A MCU-style Bus\n'
395 '10/100 Ethernet PHY.',
396 'E1:FB/8': 'FlexBus bus bits 8-15, needed to make a 16-bit bus width',
397 'B1:LCD/22': 'RGB/TTL LCD, use SN75LVDS83b for '
398 'LVDS or SSD2828 for MIPI,\n'
399 'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
400 'display output (eDP/LVDS and HDMI/VGA) '
401 'conversion.',
402 'MMC': 'eMMC: main internal storage',
403 'ULPI0/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
404 'as well as USB Host or USB Device',
405 'ULPI1/8': 'USB2 Host, connect to ULPI PHY w/and 4-port USB2 Hub\n'
406 'for example GL850G or FE1.1. '
407 'Connects to USB-Camera (VC0345 and 3x external USB Ports)',
408 'SD0': 'internal, multiplexed with JTAG0\n'
409 'and UART0, for debug purposes',
410 'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
411 'TWI1': 'Connect to AC97 Audio IC',
412 'E2:UARTQ1': 'Connect to BT on AP6234/AP6335',
413 'E2:SD2': 'Connect to WIFI on AP6234/AP6335',
414 'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
415 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
416 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
417 'MCU implements keyboard-matrix for keyboard (also trackpad?)',
418 'D2:TWI2': 'Connect to PMIC',
419 'GPIO': 'Plenty of spare GPIO pins for miscellaneous functions\n'
420 'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
421 'on the single MCU_INT line, if really needed',
422 'F2:PWM_0': 'LCD Backlight',
423 'EINT_20': 'BT_HOST_WAKE',
424 'EINT_21': 'WIFI_HOST_WAKE',
425 'EINT_9': 'MCU_INT',
426 'EINT_31': 'PMIC_INT',
427 }
428 ps.add_scenario("Laptop / Netbook",
429 laptop, laptop_eint, laptop_pwm,
430 descriptions)
431
432 # IoT
433
434 iot = ['B1:LCD', 'ULPI1/8', 'ULPI0/8',
435 'MMC', 'SD0',
436 'F1:IIS', # I2C Audio
437 #'TWI1', # I2C Audio
438 'C3:UARTQ0', # HSPA UART
439 'E2:UARTQ1', # BT UART
440 'C2:SPI1', # HSPI SPI
441 'E2:SD2', # WIFI
442 'D3:TWI0', # sensors CTP,
443 'D2:TWI2', 'QSPI']
444 iot_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
445 ]
446 iot_eint = ['EINT_5', # 'HSPA_MST_RDY',
447 'EINT_6', # 'HSPA_SL_RDY',
448 'EINT_7', # 'HSPA_RING',
449 'EINT_8', # 'WL_PMU_EN',
450 'EINT_9', # HSPA_GPIO1
451 'EINT_10', # IR_DT
452 'EINT_11', # 'BT_PCM_CLK',
453 'EINT_12', # 'BT_PCM_DIN',
454 'EINT_13', # 'BT_PCM_SYNC',
455 'EINT_14', # 'BT_PCM_DOUT',
456 'EINT_16', # 'USB_DRVVBUS',
457 'EINT_17', # 'USB_VBUSDET',
458 'EINT_21', # 'USB_ID',
459 'EINT_30', # 'CTP_INT',
460 'EINT_31', # 'SD_DET#',
461 ]
462 descriptions = {
463 'B1:LCD':
464 'RGB/TTL LCD, use SN75LVDS83b for LVDS or SSD2828 for MIPI,\n'
465 'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
466 'display output (eDP/LVDS and HDMI/VGA) '
467 'conversion.',
468 'MMC': 'eMMC: main internal storage',
469 'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
470 'ULPI1/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
471 'as well as USB Host or USB Device',
472 'ULPI0/8': 'USB2 Host, connect to ULPI PHY',
473 'SD0': 'internal, multiplexed with JTAG0\n'
474 'and UART0, for debug purposes',
475 'C3:UARTQ0': 'Connect to HSPA UART',
476 'E2:UARTQ1': 'Connect to BT UART',
477 'E2:SD2': 'Connect to WIFI',
478 'C2:SPI1': 'HSPA SPI',
479 'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
480 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
481 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
482 'MCU implements keyboard-matrix for keyboard (also trackpad?)',
483 'D2:TWI2': 'Connect to PMIC',
484 'D3:TWI0': 'Connect to sensors CTP',
485 'GPIO': 'Plenty of spare GPIO pins for miscellaneous functions\n'
486 'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
487 'on the single MCU_INT line, if really needed',
488 'F2:PWM_0': 'LCD Backlight',
489 'GPIOD_D4': 'WL_WAKE_AP',
490 'GPIOD_D5': 'BT_WAKE_AP',
491 'GPIOD_D6': 'AP_WAKE_BT',
492 'GPIOD_D7': 'AP_CK32KO',
493 'GPIOD_D8': 'HSPA_PWRON',
494 'GPIOD_D9': 'BT_RST_N',
495 'GPIOE_E5': 'HSPA_ON_OFF',
496 'GPIOD_D2': 'HSPA_SHUTDOWN',
497 'GPIOD_D3': 'CTP_RST',
498 'GPIOD_D12': 'LCD_RDN',
499 'GPIOD_D17': 'LCD_WRN',
500 'GPIOD_D18': 'LCD_RS',
501 'GPIOD_D21': 'LCD_CSN',
502
503 'EINT_5': 'HSPA_MST_RDY',
504 'EINT_6': 'HSPA_SL_RDY',
505 'EINT_7': 'HSPA_RING',
506 'EINT_8': 'WL_PMU_EN',
507 'EINT_9': 'HSPA_GPIO1',
508 'EINT_10': 'IR_DT',
509 'EINT_11': 'BT_PCM_CLK',
510 'EINT_12': 'BT_PCM_DIN',
511 'EINT_13': 'BT_PCM_SYNC',
512 'EINT_14': 'BT_PCM_DOUT',
513
514 'EINT_16': 'USB_DRVVBUS',
515 'EINT_17': 'USB_VBUSDET',
516 'EINT_21': 'USB_ID',
517 'EINT_30': 'CTP_INT',
518 'EINT_31': 'SD_DETN',
519 }
520 ps.add_scenario("IoT",
521 iot, iot_eint, iot_pwm,
522 descriptions)
523
524 return ps.write(of)