re-add uart into m_class
[pinmux.git] / src / spec / m_class.py
1 #!/usr/bin/env python
2
3 from spec.base import PinSpec
4
5
6 def pinspec():
7 pinbanks = {'A': (16, 4),
8 'B': (28, 4),
9 'C': (24, 4),
10 'D': (24, 4),
11 'E': (24, 4),
12 'F': (10, 4),
13 'G': (32, 4),
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 'EMMC': 'eMMC 1/2/4/8 pin',
86 'PWM': 'PWM (pulse-width modulation)',
87 'MMC0': 'SD/MMC 0',
88 'MMC1': 'SD/MMC 1',
89 'MMC2': '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 'QUART0': 'UART (TX/RX/CTS/RTS) 0',
97 'QUART1': '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), 0, 0, 16)
110 ps.spi("0", ('A', 0), 3)
111 ps.uartfull("1", ('A', 0), 2)
112 ps.i2c("0", ('A', 4), 2)
113 ps.emmc("", ('A', 0), 1)
114 #ps.uart("0", ('A', 14), 1)
115 ps.spi("1", ('A', 6), 2)
116 ps.eint("", ('A', 10), 1, start=0, limit=6)
117 ps.eint("", ('A', 4), 3, start=0, limit=6)
118 ps.sdmmc("0", ('A', 10), 2)
119 ps.jtag("0", ('A', 10), 3)
120 ps.uart("0", ('A', 14), 3)
121
122 # Bank B, 16-47
123 ps.gpio("", ('B', 0), 0, 0, 28)
124 ps.rgbttl("0", ('B', 0), 1)
125 ps.spi("0", ('B', 12), 2)
126 ps.quadspi("", ('B', 4), 2, limit=4)
127 ps.uart("1", ('B', 16), 2)
128 ps.i2c("2", ('B', 18), 2)
129 ps.pwm("", ('B', 9), 2, start=0, limit=1)
130 ps.pwm("", ('B', 20), 2, start=1, limit=2)
131 ps.sdmmc("0", ('B', 22), 2)
132 ps.eint("", ('B', 0), 3, start=6, limit=4)
133 ps.flexbus2("", ('B', 4), 3)
134 ps.i2c("0", ('B', 0), 2)
135 ps.uart("0", ('B', 2), 2)
136 ps.uart("2", ('B', 10), 2)
137
138 # Bank C, 48-71
139 ps.gpio("", ("C", 0), 0, 0, 24)
140 ps.ulpi("0", ('C', 0), 1)
141 ps.ulpi("1", ('C', 12), 1)
142 ps.spi("1", ('C', 8), 2)
143 #ps.spi("1", ('C', 28), 2)
144 ps.uartfull("0", ('C', 20), 3)
145 ps.eint("", ('C', 0), 3, start=10, limit=8)
146 ps.jtag("1", ('C', 8), 3)
147 ps.eint("", ('C', 12), 3, start=22, limit=8)
148 ps.uart("0", ('C', 22), 2)
149 ps.i2s("", ('C', 13), 2)
150 ps.pwm("", ('C', 21), 2, start=2, limit=1)
151
152 # Bank D, 72-96
153
154 # see comment in spec.interfaces.PinGen, this is complicated.
155 flexspec = {
156 'FB_TS': ('FB_ALE', 2),
157 'FB_CS2': ('FB_BWE2', 2),
158 'FB_A0': ('FB_BWE2', 3),
159 'FB_CS3': ('FB_BWE3', 2),
160 'FB_A1': ('FB_BWE3', 3),
161 'FB_TBST': ('FB_OE', 2),
162 'FB_TSIZ0': ('FB_BWE0', 2),
163 'FB_TSIZ1': ('FB_BWE1', 2),
164 }
165 #ps.mcu8080("", 72, 1)
166 ps.gpio("", ('D', 0), 0, 0, 24)
167 ps.flexbus1("", ('D', 0), 1, spec=flexspec)
168 ps.i2c("1", ('D', 8), 3)
169 ps.pwm("", ('D', 21), 1, start=0, limit=3)
170 ps.i2c("0", ('D', 10), 3)
171 ps.i2c("2", ('D', 19), 2)
172 ps.uartfull("0", ('D', 0), 2)
173 ps.uart("1", ('D', 21), 2)
174 ps.uart("2", ('D', 12), 2)
175 ps.eint("", ('D', 19), 3, start=18, limit=4)
176 ps.eint("", ('D', 23), 3, start=9, limit=1)
177 ps.eint("", ('D', 13), 3, start=5, limit=4)
178 ps.eint("", ('D', 0), 3, start=30, limit=2)
179 ps.i2c("1", ('D', 2), 3)
180 ps.sdmmc("1", ('D', 4), 2)
181
182 # Bank E
183 ps.gpio("", ('E', 0), 0, 0, 24)
184 ps.flexbus2("", ('E', 0), 1)
185 ps.sdmmc("1", ('E', 0), 2)
186 ps.sdmmc("2", ('E', 8), 2)
187 ps.quadspi("", ('E', 18), 2)
188 ps.uartfull("1", ('E', 14), 2)
189 ps.i2c("1", ('E', 6), 2)
190 ps.eint("", ('E', 0), 3, start=10, limit=8)
191 ps.eint("", ('E', 8), 3, start=22, limit=6)
192 ps.emmc("", ('E', 14), 3)
193
194 # Bank F
195 ps.gpio("", ('F', 0), 0, 0, 10)
196 ps.i2s("", ('F', 0), 1)
197 ps.i2c("0", ('F', 6), 2)
198 ps.pwm("", ('F', 8), 2, start=0, limit=1)
199 ps.pwm("", ('F', 9), 2, start=1, limit=1)
200 ps.uart("2", ('F', 8), 1)
201 ps.sdmmc("2", ('F', 0), 2)
202 ps.eint("", ('F', 0), 3, start=18, limit=4)
203 ps.pwm("", ('F', 4), 3, start=2, limit=1)
204 ps.eint("", ('F', 5), 3, start=7, limit=1)
205 ps.eint("", ('F', 6), 3, start=28, limit=4)
206
207 # Bank G
208 ps.gpio("", ('G', 0), 0, 0, 32)
209 ps.rgmii("", ('G', 0), 1)
210 ps.ulpi("2", ('G', 20), 1)
211 ps.rgbttl("1", ('G', 0), 2)
212 ps.quadspi("", ('G', 26), 3)
213 ps.flexbus2("", ('G', 0), 3)
214 ps.sdmmc("1", ('G', 24), 3, limit=2)
215 ps.sdmmc("1", ('G', 28), 2, start=2)
216
217 # EOMA68 scenario. not totally complete (some GPIO needed for PMIC)
218 # One interface to be connected to the MCU to give RTC and boot/dbg
219 # VBUS_EN, OTG_ID etc. are all not included below, there is plenty
220 # of spare GPIO.
221
222 eoma68 = ['B1:LCD/22', 'ULPI0/8', 'ULPI1', 'EMMC', 'MMC0', 'UART1',
223 'TWI2', 'SPI1', 'E2:MMC1', ]
224 eoma68_eint = ['EINT_16', 'EINT_17', 'EINT_18', 'EINT_19']
225 eoma68_pwm = ['D1:PWM_2']
226 descriptions = {
227 'EMMC': 'internal (on Card)',
228 'MMC0': 'user-facing: internal (on Card), multiplexed with JTAG0\n'
229 'and UART0, for debug purposes',
230 'TWI2': 'EOMA68-compliance: must be entirely free of devices.\n'
231 'Address 0x51 used (externally) for EOMA68 EEPROM Id',
232 'E2:MMC1': 'EOMA68-compliance',
233 'SPI1': 'EOMA68-compliance',
234 'UART1': 'EOMA68-compliance',
235 'B1:LCD/22': 'EOMA68-compliance, 18-bit RGB/TTL LCD',
236 'ULPI0/8': 'user-facing: internal (on Card), USB-OTG ULPI PHY',
237 'ULPI1': 'EOMA68-compliance: dual USB2 Host ULPI PHY'
238 }
239
240 ps.add_scenario("EOMA68", eoma68, eoma68_eint, eoma68_pwm, descriptions)
241
242 # Industrial scenario. not totally complete (some GPIO needed for PMIC)
243 # One interface to be connected to the MCU to give RTC, boot/dbg,
244 # option of CAN Bus, ADC, DAC, OWB, more GPIO, more PWM etc. etc.
245 # Focus is on getting as many UARTs, SPIs and TWIs as possible.
246 # OTG_ID (if to be used) would require dropping some functions in order
247 # to free up GPIO. LCD could be reduced to 15-bit (freeing 3).
248 # EMMC could be reduced to 4-bit-wide, used as SD/MMC (freeing 4).
249 # QSPI could be used in 1-bit (MOSI/MISO) mode (freeing up 2 more).
250
251 industrial = ['D1:FB/17', 'E1:FB/8', 'B1:LCD/22', 'ULPI0/8', 'ULPI1/8',
252 'EMMC', 'B2:MMC0',
253 'JTAG0', 'A3:UART0', 'E2:QUART1', 'C3:QUART0',
254 'F2:TWI0', 'D2:TWI1', 'D2:TWI2', 'SPI1', 'QSPI', 'F2:MMC2']
255 industrial_pwm = ['F2:PWM_0', 'F2:PWM_1', 'D1:PWM_2']
256 industrial_eint = ['EINT_24', 'EINT_25', 'EINT_26', 'EINT_27',
257 'EINT_20', 'EINT_21', 'EINT_22', 'EINT_23']
258
259 ps.add_scenario("Industrial", industrial, industrial_eint,
260 industrial_pwm, None)
261
262 # Industrial scenario, using an SPI-based LCD instead of RGB/TTL
263 # not totally complete (some GPIO needed for PMIC)
264 # One interface to be connected to the MCU to give RTC, boot/dbg,
265 # option of CAN Bus, ADC, DAC, OWB, more GPIO, more PWM etc. etc.
266 # Focus is on getting as many UARTs, SPIs and TWIs as possible,
267 # leaving some GPIO spare from the RGB/TTL bank (SPI CS#)
268 # also possibility of freeing up FlexBus CS# with a little reorg.
269
270 industrial = ['D1:FB/17', 'E1:FB/8', 'B2:SPI0', 'ULPI0/8', 'ULPI1/8',
271 'EMMC', 'B2:MMC0',
272 'JTAG0',
273 'A3:UART0', 'E2:QUART1', 'C3:QUART0', 'B2:UART2', 'B2:UART1',
274 'F2:TWI0', 'D2:TWI1', 'D2:TWI2', 'SPI1', 'QSPI', 'F2:MMC2']
275 industrial_pwm = ['F2:PWM_0', 'F2:PWM_1', 'D1:PWM_2']
276 industrial_eint = ['EINT_24', 'EINT_25', 'EINT_26', 'EINT_27',
277 'EINT_20', 'EINT_21', 'EINT_22', 'EINT_23']
278 ind_descriptions = {
279 'B2:SPI0': 'Used for 320x240 or 640x480 etc. SPI-based LCD.\n'
280 'Frees up large numbers of GPIO from RGB/TTL bank'
281 }
282
283 ps.add_scenario("Industrial with SPI-LCD",
284 industrial, industrial_eint, industrial_pwm,
285 ind_descriptions)
286
287 # Smartphone / Tablet - basically the same thing
288
289 tablet = ['B1:LCD/22', 'ULPI0/8', 'ULPI1/8',
290 'EMMC', 'MMC0',
291 'F1:IIS', # I2C Audio
292 'TWI1', # I2C Audio
293 'E2:QUART1', # WIFI/BT
294 'E2:MMC1', # WIFI
295 'C3:QUART0', # GPS
296 'D2:UART1',
297 'D2:UART2',
298 'D3:TWI0', 'D2:TWI2', 'SPI1', 'QSPI']
299 tablet_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
300 'F2:PWM_1', 'D1:PWM_2']
301 tablet_eint = ['EINT_24', # BT_HOST_WAKE
302 'EINT_25', # WIFI_HOST_WAKE
303 'EINT_26', # CTP_INT
304 'EINT_27', # GSENSOR_INT
305 'EINT_8', # GPS_INT
306 'EINT_7', # TILT_SENSOR_INT
307 'EINT_22', # COMPASS_INT
308 'EINT_23', # MCU_INT
309 'EINT_16', # PMIC_INT
310 'EINT_17', # PWR_BUTTON_INT
311 'EINT_30', # OTG_ID
312 'EINT_31',
313 ]
314 descriptions = {
315 'B1:LCD/22':
316 'RGB/TTL LCD, 800x480 or use SN75LVDS83b for up to 1440x900',
317 'EMMC': 'eMMC: main internal storage',
318 'ULPI0/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
319 'as well as USB Host or USB Device',
320 'ULPI1/8': 'USB2 Host, connect to ULPI PHY w/and 4-port USB2 Hub\n'
321 'for example GL850G or FE1.1. '
322 'Connects to 2/3/4G/LTE Modem, 2x USB-Camera (VC0345)',
323 'MMC0': 'internal, multiplexed with JTAG0\n'
324 'and UART0, for debug purposes',
325 'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
326 'TWI1': 'Connect to AC97 Audio IC',
327 'E2:QUART1': 'Connect to BT on AP6234/AP6335',
328 'E2:MMC1': 'Connect to WIFI on AP6234/AP6335',
329 'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
330 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
331 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.',
332 'SPI1': 'Spare? SPI, connect to higher-speed sensor?',
333 'D2:UART1': 'Spare? UART (or 2 extra GPIO / EINT)',
334 'D2:UART2': 'Spare? UART (or 2 extra GPIO)',
335 'D3:TWI0': 'Connect to PMIC',
336 'D2:TWI2': 'Connect to sensors (Trackpad? CTP GSENSOR TILT COMPASS)',
337 'GPIO': '9 spare GPIO pins for miscellaneous functions:\n'
338 'wake-up of BT, WIFI, LCD power, sensor power etc.\n'
339 '4 GPIO may be needed for PWM Audio from Modem.\n'
340 'LED lights for camera will be needed.\n'
341 'Some phones may have clam-shell or lid switch.\n'
342 'Some Modems have spare GPIO (over AT commandset).\n'
343 'AXP209 PMIC has 4x GPIO, accessible over I2C.\n'
344 'SPI1, UART1-4, PWM1-2 may also be spare (10 extra GPIO).\n'
345 'If more needed, companion MCU may be used (48+ pin variant)\n'
346 'which also includes ADC, DAC, more PWM etc.',
347 'F2:PWM_0': 'LCD Backlight',
348 'F2:PWM_1': 'Spare? PWM (or extra GPIO / EINT)',
349 'D1:PWM_2': 'Spare? PWM (or extra GPIO / EINT)',
350 'EINT_24': 'BT_HOST_WAKE',
351 'EINT_25': 'WIFI_HOST_WAKE',
352 'EINT_26': 'CTP_INT',
353 'EINT_27': 'GSENSOR_INT',
354 'EINT_8': 'GPS_INT',
355 'EINT_7': 'TILT_SENSOR_INT',
356 'EINT_22': 'COMPASS_INT',
357 'EINT_23': 'MCU_INT',
358 'EINT_16': 'PMIC_INT',
359 'EINT_17': 'PWR_BUTTON_INT',
360 'EINT_30': 'OTG_ID',
361 'EINT_31': 'Spare?',
362 }
363
364 ps.add_scenario("Smartphone / Tablet",
365 tablet, tablet_eint, tablet_pwm,
366 descriptions)
367
368 # Laptop
369
370 laptop = ['D1:FB/17', 'E1:FB/8', 'B1:LCD/22', 'ULPI0/8', 'ULPI1/8',
371 'EMMC', 'MMC0',
372 'F1:IIS', # I2C Audio
373 'TWI1', # I2C Audio
374 'E2:QUART1', # WIFI/BT
375 'E2:MMC2', # WIFI
376 'D2:TWI2', 'QSPI']
377 laptop_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
378 ]
379 laptop_eint = ['EINT_20', # BT_HOST_WAKE
380 'EINT_21', # WIFI_HOST_WAKE
381 'EINT_9', # MCU_INT
382 'EINT_31', # PMIC_INT
383 ]
384 descriptions = {
385 'D1:FB/17': 'FlexBus. Connect to DM9000 or AX99896A MCU-style Bus\n'
386 '10/100 Ethernet PHY.',
387 'E1:FB/8': 'FlexBus bus bits 8-15, needed to make a 16-bit bus width',
388 'B1:LCD/22': 'RGB/TTL LCD, use SN75LVDS83b for '
389 'LVDS or SMMC2828 for MIPI,\n'
390 'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
391 'display output (eDP/LVDS and HDMI/VGA) '
392 'conversion.',
393 'EMMC': 'eMMC: main internal storage',
394 'ULPI0/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
395 'as well as USB Host or USB Device',
396 'ULPI1/8': 'USB2 Host, connect to ULPI PHY w/and 4-port USB2 Hub\n'
397 'for example GL850G or FE1.1. '
398 'Connects to USB-Camera (VC0345 and 3x external USB Ports)',
399 'MMC0': 'internal, multiplexed with JTAG0\n'
400 'and UART0, for debug purposes',
401 'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
402 'TWI1': 'Connect to AC97 Audio IC',
403 'E2:QUART1': 'Connect to BT on AP6234/AP6335',
404 'E2:MMC2': 'Connect to WIFI on AP6234/AP6335',
405 'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
406 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
407 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
408 'MCU implements keyboard-matrix for keyboard (also trackpad?)',
409 'D2:TWI2': 'Connect to PMIC',
410 'GPIO': 'Plenty of spare GPIO pins for miscellaneous functions\n'
411 'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
412 'on the single MCU_INT line, if really needed',
413 'F2:PWM_0': 'LCD Backlight',
414 'EINT_20': 'BT_HOST_WAKE',
415 'EINT_21': 'WIFI_HOST_WAKE',
416 'EINT_9': 'MCU_INT',
417 'EINT_31': 'PMIC_INT',
418 }
419 ps.add_scenario("Laptop / Netbook",
420 laptop, laptop_eint, laptop_pwm,
421 descriptions)
422
423 # IoT
424
425 iot = ['B1:LCD', 'ULPI1/8', 'ULPI0/8',
426 'EMMC', 'MMC0',
427 'F1:IIS', # I2C Audio
428 #'TWI1', # I2C Audio
429 'C3:QUART0', # HSPA UART
430 'E2:QUART1', # BT UART
431 'C2:SPI1', # HSPI SPI
432 'E2:MMC2', # WIFI
433 'D3:TWI0', # sensors CTP,
434 'D2:TWI2', 'QSPI']
435 iot_pwm = ['F2:PWM_0', # LCD_BACKLIGHT
436 ]
437 iot_eint = ['EINT_5', # 'HSPA_MST_RDY',
438 'EINT_6', # 'HSPA_SL_RDY',
439 'EINT_7', # 'HSPA_RING',
440 'EINT_8', # 'WL_PMU_EN',
441 'EINT_9', # HSPA_GPIO1
442 'EINT_10', # IR_DT
443 'EINT_11', # 'BT_PCM_CLK',
444 'EINT_12', # 'BT_PCM_DIN',
445 'EINT_13', # 'BT_PCM_SYNC',
446 'EINT_14', # 'BT_PCM_DOUT',
447 'EINT_16', # 'USB_DRVVBUS',
448 'EINT_17', # 'USB_VBUSDET',
449 'EINT_21', # 'USB_ID',
450 'EINT_30', # 'CTP_INT',
451 'EINT_31', # 'SD_DET#',
452 ]
453 descriptions = {
454 'B1:LCD':
455 'RGB/TTL LCD, use SN75LVDS83b for LVDS or SMMC2828 for MIPI,\n'
456 'or a Chrontel CH7039, CH7038, CH7034 or CH7018 for dual\n'
457 'display output (eDP/LVDS and HDMI/VGA) '
458 'conversion.',
459 'EMMC': 'eMMC: main internal storage',
460 'F1:IIS': 'I2C Audio, connect to AC97 Audio IC',
461 'ULPI1/8': 'USB-OTG, connect to ULPI OTG PHY (for charging)\n'
462 'as well as USB Host or USB Device',
463 'ULPI0/8': 'USB2 Host, connect to ULPI PHY',
464 'MMC0': 'internal, multiplexed with JTAG0\n'
465 'and UART0, for debug purposes',
466 'C3:QUART0': 'Connect to HSPA UART',
467 'E2:QUART1': 'Connect to BT UART',
468 'E2:MMC2': 'Connect to WIFI',
469 'C2:SPI1': 'HSPA SPI',
470 'QSPI': 'Boot Storage (connection to companion / debug / boot MCU)\n'
471 'Only actually needs MISO/MOSI, bootstrap loader v. small\n'
472 'Bootstrap loader checks eMMC, USB-OTG, SD/MMC, SPI, etc.\n'
473 'MCU implements keyboard-matrix for keyboard (also trackpad?)',
474 'D2:TWI2': 'Connect to PMIC',
475 'D3:TWI0': 'Connect to sensors CTP',
476 'GPIO': 'Plenty of spare GPIO pins for miscellaneous functions\n'
477 'MCU EINT-capable GPIO may be used to generate extra EINTs\n'
478 'on the single MCU_INT line, if really needed',
479 'F2:PWM_0': 'LCD Backlight',
480 'GPIOD_D4': 'WL_WAKE_AP',
481 'GPIOD_D5': 'BT_WAKE_AP',
482 'GPIOD_D6': 'AP_WAKE_BT',
483 'GPIOD_D7': 'AP_CK32KO',
484 'GPIOD_D8': 'HSPA_PWRON',
485 'GPIOD_D9': 'BT_RST_N',
486 'GPIOE_E5': 'HSPA_ON_OFF',
487 'GPIOD_D2': 'HSPA_SHUTDOWN',
488 'GPIOD_D3': 'CTP_RST',
489 'GPIOD_D12': 'LCD_RDN',
490 'GPIOD_D17': 'LCD_WRN',
491 'GPIOD_D18': 'LCD_RS',
492 'GPIOD_D21': 'LCD_CSN',
493
494 'EINT_5': 'HSPA_MST_RDY',
495 'EINT_6': 'HSPA_SL_RDY',
496 'EINT_7': 'HSPA_RING',
497 'EINT_8': 'WL_PMU_EN',
498 'EINT_9': 'HSPA_GPIO1',
499 'EINT_10': 'IR_DT',
500 'EINT_11': 'BT_PCM_CLK',
501 'EINT_12': 'BT_PCM_DIN',
502 'EINT_13': 'BT_PCM_SYNC',
503 'EINT_14': 'BT_PCM_DOUT',
504
505 'EINT_16': 'USB_DRVVBUS',
506 'EINT_17': 'USB_VBUSDET',
507 'EINT_21': 'USB_ID',
508 'EINT_30': 'CTP_INT',
509 'EINT_31': 'SD_DETN',
510 }
511 ps.add_scenario("IoT",
512 iot, iot_eint, iot_pwm,
513 descriptions)
514
515 return ps