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