summaryrefslogtreecommitdiff
path: root/configs/tegra114.soc
blob: a70bdf9bdc49d8ae18e2ba99392921e3b48055cd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
# All data validated against Tegra114 TRM on 2014/03/13 by swarren except:
# - drive_group_pins[] content

kernel_copyright_years = '2012-2013'
kernel_author = 'Pritesh Raithatha <praithatha@nvidia.com>'
uboot_copyright_years = '2010-2014'

soc_has_io_clamping = True
soc_combine_pin_drvgroup = False
soc_rsvd_base = 1
soc_drvgroups_have_drvtype = True
soc_drvgroups_have_hsm = True
soc_drvgroups_have_lpmd = True
soc_drvgroups_have_schmitt = True
soc_pins_all_have_od = False
soc_pins_all_have_parked = False
soc_pins_all_have_schmitt = False
soc_pins_have_drvtype = False
soc_pins_have_e_io_hv = False
soc_pins_have_hsm = False
soc_pins_have_ior = True
soc_pins_have_od = True
soc_pins_have_rcv_sel = True
soc_pins_have_schmitt = False
soc_drv_reg_base = 0x868
soc_einput_b = 5
soc_odrain_b = 6
soc_parked_bit = 0

gpios = (
    #name,                gpio,  reg,    f0,           f1,         f2,             f3,         od,    ior,   rcv_sel
    ('clk_32k_out',       'a0',  0x331c, 'blink',      'soc',      'rsvd3',        'rsvd4',    False, False, False),
    ('uart3_cts_n',       'a1',  0x317c, 'uartc',      'sdmmc1',   'dtv',          'spi4',     False, False, False),
    ('dap2_fs',           'a2',  0x3358, 'i2s1',       'hda',      'rsvd3',        'rsvd4',    False, False, False),
    ('dap2_sclk',         'a3',  0x3364, 'i2s1',       'hda',      'rsvd3',        'rsvd4',    False, False, False),
    ('dap2_din',          'a4',  0x335c, 'i2s1',       'hda',      'rsvd3',        'rsvd4',    False, False, False),
    ('dap2_dout',         'a5',  0x3360, 'i2s1',       'hda',      'rsvd3',        'rsvd4',    False, False, False),
    ('sdmmc3_clk',        'a6',  0x3390, 'sdmmc3',     'rsvd2',    'rsvd3',        'spi3',     False, False, False),
    ('sdmmc3_cmd',        'a7',  0x3394, 'sdmmc3',     'pwm3',     'uarta',        'spi3',     False, False, False),
    ('gmi_a17',           'b0',  0x3234, 'uartd',      'rsvd2',    'gmi',          'trace',    False, False, False),
    ('gmi_a18',           'b1',  0x3238, 'uartd',      'rsvd2',    'gmi',          'trace',    False, False, False),
    ('sdmmc3_dat3',       'b4',  0x33a4, 'sdmmc3',     'pwm0',     'displayb',     'spi3',     False, False, False),
    ('sdmmc3_dat2',       'b5',  0x33a0, 'sdmmc3',     'pwm1',     'displaya',     'spi3',     False, False, False),
    ('sdmmc3_dat1',       'b6',  0x339c, 'sdmmc3',     'pwm2',     'uarta',        'spi3',     False, False, False),
    ('sdmmc3_dat0',       'b7',  0x3398, 'sdmmc3',     'rsvd2',    'rsvd3',        'spi3',     False, False, False),
    ('uart3_rts_n',       'c0',  0x3180, 'uartc',      'pwm0',     'dtv',          'displaya', False, False, False),
    ('uart2_txd',         'c2',  0x3168, 'irda',       'spdif',    'uarta',        'spi4',     False, False, False),
    ('uart2_rxd',         'c3',  0x3164, 'irda',       'spdif',    'uarta',        'spi4',     False, False, False),
    ('gen1_i2c_scl',      'c4',  0x31a4, 'i2c1',       'rsvd2',    'rsvd3',        'rsvd4',    True,  False, False),
    ('gen1_i2c_sda',      'c5',  0x31a0, 'i2c1',       'rsvd2',    'rsvd3',        'rsvd4',    True,  False, False),
    ('gmi_wp_n',          'c7',  0x31c0, 'rsvd1',      'nand',     'gmi',          'gmi_alt',  False, False, False),
    ('gmi_ad0',           'g0',  0x31f0, 'rsvd1',      'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad1',           'g1',  0x31f4, 'rsvd1',      'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad2',           'g2',  0x31f8, 'rsvd1',      'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad3',           'g3',  0x31fc, 'rsvd1',      'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad4',           'g4',  0x3200, 'rsvd1',      'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad5',           'g5',  0x3204, 'rsvd1',      'nand',     'gmi',          'spi4',     False, False, False),
    ('gmi_ad6',           'g6',  0x3208, 'rsvd1',      'nand',     'gmi',          'spi4',     False, False, False),
    ('gmi_ad7',           'g7',  0x320c, 'rsvd1',      'nand',     'gmi',          'spi4',     False, False, False),
    ('gmi_ad8',           'h0',  0x3210, 'pwm0',       'nand',     'gmi',          'dtv',      False, False, False),
    ('gmi_ad9',           'h1',  0x3214, 'pwm1',       'nand',     'gmi',          'cldvfs',   False, False, False),
    ('gmi_ad10',          'h2',  0x3218, 'pwm2',       'nand',     'gmi',          'cldvfs',   False, False, False),
    ('gmi_ad11',          'h3',  0x321c, 'pwm3',       'nand',     'gmi',          'usb',      False, False, False),
    ('gmi_ad12',          'h4',  0x3220, 'sdmmc2',     'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad13',          'h5',  0x3224, 'sdmmc2',     'nand',     'gmi',          'rsvd4',    False, False, False),
    ('gmi_ad14',          'h6',  0x3228, 'sdmmc2',     'nand',     'gmi',          'dtv',      False, False, False),
    ('gmi_ad15',          'h7',  0x322c, 'sdmmc2',     'nand',     'gmi',          'dtv',      False, False, False),
    ('gmi_wr_n',          'i0',  0x3240, 'rsvd1',      'nand',     'gmi',          'spi4',     False, False, False),
    ('gmi_oe_n',          'i1',  0x3244, 'rsvd1',      'nand',     'gmi',          'soc',      False, False, False),
    ('gmi_cs6_n',         'i3',  0x31e8, 'nand',       'nand_alt', 'gmi',          'spi4',     False, False, False),
    ('gmi_rst_n',         'i4',  0x324c, 'nand',       'nand_alt', 'gmi',          'rsvd4',    False, False, False),
    ('gmi_iordy',         'i5',  0x31c4, 'sdmmc2',     'rsvd2',    'gmi',          'trace',    False, False, False),
    ('gmi_cs7_n',         'i6',  0x31ec, 'nand',       'nand_alt', 'gmi',          'sdmmc2',   False, False, False),
    ('gmi_wait',          'i7',  0x31c8, 'spi4',       'nand',     'gmi',          'dtv',      False, False, False),
    ('gmi_cs0_n',         'j0',  0x31d4, 'rsvd1',      'nand',     'gmi',          'usb',      False, False, False),
    ('gmi_cs1_n',         'j2',  0x31d8, 'rsvd1',      'nand',     'gmi',          'soc',      False, False, False),
    ('gmi_dqs_p',         'j3',  0x3248, 'sdmmc2',     'nand',     'gmi',          'trace',    False, False, False),
    ('uart2_cts_n',       'j5',  0x3170, 'uarta',      'uartb',    'rsvd3',        'spi4',     False, False, False),
    ('uart2_rts_n',       'j6',  0x316c, 'uarta',      'uartb',    'rsvd3',        'spi4',     False, False, False),
    ('gmi_a16',           'j7',  0x3230, 'uartd',      'trace',    'gmi',          'gmi_alt',  False, False, False),
    ('gmi_adv_n',         'k0',  0x31cc, 'rsvd1',      'nand',     'gmi',          'trace',    False, False, False),
    ('gmi_clk',           'k1',  0x31d0, 'sdmmc2',     'nand',     'gmi',          'trace',    False, False, False),
    ('gmi_cs4_n',         'k2',  0x31e4, 'usb',        'nand',     'gmi',          'trace',    False, False, False),
    ('gmi_cs2_n',         'k3',  0x31dc, 'sdmmc2',     'nand',     'gmi',          'trace',    False, False, False),
    ('gmi_cs3_n',         'k4',  0x31e0, 'sdmmc2',     'nand',     'gmi',          'gmi_alt',  False, False, False),
    ('spdif_out',         'k5',  0x3354, 'spdif',      'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('spdif_in',          'k6',  0x3350, 'spdif',      'usb',      'rsvd3',        'rsvd4',    False, False, False),
    ('gmi_a19',           'k7',  0x323c, 'uartd',      'spi4',     'gmi',          'trace',    False, False, False),
    ('dap1_fs',           'n0',  0x3338, 'i2s0',       'hda',      'gmi',          'rsvd4',    False, False, False),
    ('dap1_din',          'n1',  0x333c, 'i2s0',       'hda',      'gmi',          'rsvd4',    False, False, False),
    ('dap1_dout',         'n2',  0x3340, 'i2s0',       'hda',      'gmi',          'rsvd4',    False, False, False),
    ('dap1_sclk',         'n3',  0x3344, 'i2s0',       'hda',      'gmi',          'rsvd4',    False, False, False),
    ('usb_vbus_en0',      'n4',  0x33f4, 'usb',        'rsvd2',    'rsvd3',        'rsvd4',    True,  False, False),
    ('usb_vbus_en1',      'n5',  0x33f8, 'usb',        'rsvd2',    'rsvd3',        'rsvd4',    True,  False, False),
    ('hdmi_int',          'n7',  0x3110, 'rsvd1',      'rsvd2',    'rsvd3',        'rsvd4',    False, False, True),
    ('ulpi_data7',        'o0',  0x301c, 'spi2',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data0',        'o1',  0x3000, 'spi3',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data1',        'o2',  0x3004, 'spi3',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data2',        'o3',  0x3008, 'spi3',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data3',        'o4',  0x300c, 'spi3',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data4',        'o5',  0x3010, 'spi2',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data5',        'o6',  0x3014, 'spi2',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('ulpi_data6',        'o7',  0x3018, 'spi2',       'hsi',      'uarta',        'ulpi',     False, False, False),
    ('dap3_fs',           'p0',  0x3030, 'i2s2',       'spi5',     'displaya',     'displayb', False, False, False),
    ('dap3_din',          'p1',  0x3034, 'i2s2',       'spi5',     'displaya',     'displayb', False, False, False),
    ('dap3_dout',         'p2',  0x3038, 'i2s2',       'spi5',     'displaya',     'displayb', False, False, False),
    ('dap3_sclk',         'p3',  0x303c, 'i2s2',       'spi5',     'displaya',     'displayb', False, False, False),
    ('dap4_fs',           'p4',  0x31a8, 'i2s3',       'rsvd2',    'dtv',          'rsvd4',    False, False, False),
    ('dap4_din',          'p5',  0x31ac, 'i2s3',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('dap4_dout',         'p6',  0x31b0, 'i2s3',       'rsvd2',    'dtv',          'rsvd4',    False, False, False),
    ('dap4_sclk',         'p7',  0x31b4, 'i2s3',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('kb_col0',           'q0',  0x32fc, 'kbc',        'usb',      'spi2',         'emc_dll',  False, False, False),
    ('kb_col1',           'q1',  0x3300, 'kbc',        'rsvd2',    'spi2',         'emc_dll',  False, False, False),
    ('kb_col2',           'q2',  0x3304, 'kbc',        'rsvd2',    'spi2',         'rsvd4',    False, False, False),
    ('kb_col3',           'q3',  0x3308, 'kbc',        'displaya', 'pwm2',         'uarta',    False, False, False),
    ('kb_col4',           'q4',  0x330c, 'kbc',        'owr',      'sdmmc3',       'uarta',    False, False, False),
    ('kb_col5',           'q5',  0x3310, 'kbc',        'rsvd2',    'sdmmc1',       'rsvd4',    False, False, False),
    ('kb_col6',           'q6',  0x3314, 'kbc',        'rsvd2',    'spi2',         'rsvd4',    False, False, False),
    ('kb_col7',           'q7',  0x3318, 'kbc',        'rsvd2',    'spi2',         'rsvd4',    False, False, False),
    ('kb_row0',           'r0',  0x32bc, 'kbc',        'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('kb_row1',           'r1',  0x32c0, 'kbc',        'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('kb_row2',           'r2',  0x32c4, 'kbc',        'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('kb_row3',           'r3',  0x32c8, 'kbc',        'displaya', 'rsvd3',        'displayb', False, False, False),
    ('kb_row4',           'r4',  0x32cc, 'kbc',        'displaya', 'spi2',         'displayb', False, False, False),
    ('kb_row5',           'r5',  0x32d0, 'kbc',        'displaya', 'spi2',         'displayb', False, False, False),
    ('kb_row6',           'r6',  0x32d4, 'kbc',        'displaya', 'displaya_alt', 'displayb', False, False, False),
    ('kb_row7',           'r7',  0x32d8, 'kbc',        'rsvd2',    'cldvfs',       'uarta',    False, False, False),
    ('kb_row8',           's0',  0x32dc, 'kbc',        'rsvd2',    'cldvfs',       'uarta',    False, False, False),
    ('kb_row9',           's1',  0x32e0, 'kbc',        'rsvd2',    'rsvd3',        'uarta',    False, False, False),
    ('kb_row10',          's2',  0x32e4, 'kbc',        'rsvd2',    'rsvd3',        'uarta',    False, False, False),
    ('gen2_i2c_scl',      't5',  0x3250, 'i2c2',       'rsvd2',    'gmi',          'rsvd4',    True,  False, False),
    ('gen2_i2c_sda',      't6',  0x3254, 'i2c2',       'rsvd2',    'gmi',          'rsvd4',    True,  False, False),
    ('sdmmc4_cmd',        't7',  0x325c, 'sdmmc4',     'rsvd2',    'gmi',          'rsvd4',    False, True,  False),
    ('',                  'u0',  0x3184, 'owr',        'uarta',    'rsvd3',        'rsvd4',    False, False, False),
    ('',                  'u1',  0x3188, 'rsvd1',      'uarta',    'rsvd3',        'rsvd4',    False, False, False),
    ('',                  'u2',  0x318c, 'rsvd1',      'uarta',    'rsvd3',        'rsvd4',    False, False, False),
    ('',                  'u3',  0x3190, 'pwm0',       'uarta',    'displaya',     'displayb', False, False, False),
    ('',                  'u4',  0x3194, 'pwm1',       'uarta',    'displaya',     'displayb', False, False, False),
    ('',                  'u5',  0x3198, 'pwm2',       'uarta',    'displaya',     'displayb', False, False, False),
    ('',                  'u6',  0x319c, 'pwm3',       'uarta',    'usb',          'displayb', False, False, False),
    ('',                  'v0',  0x3040, 'usb',        'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('',                  'v1',  0x3044, 'rsvd1',      'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('sdmmc3_cd_n',       'v2',  0x33e8, 'sdmmc3',     'owr',      'rsvd3',        'rsvd4',    False, False, False),
    ('sdmmc1_wp_n',       'v3',  0x33e4, 'sdmmc1',     'clk12',    'spi4',         'uarta',    False, False, False),
    ('ddc_scl',           'v4',  0x3114, 'i2c4',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, True),
    ('ddc_sda',           'v5',  0x3118, 'i2c4',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, True),
    # TRM calls this spi1_cs1_n; perhaps it's wrong?
    ('gpio_w2_aud',       'w2',  0x33ec, 'spi6',       'rsvd2',    'spi2',         'i2c1',     False, False, False),
    # TRM calls this spi1_cs2_n; perhaps it's wrong?
    ('gpio_w3_aud',       'w3',  0x33f0, 'spi6',       'spi1',     'spi2',         'i2c1',     False, False, False),
    ('clk1_out',          'w4',  0x334c, 'extperiph1', 'dap2',     'rsvd3',        'rsvd4',    False, False, False),
    ('clk2_out',          'w5',  0x3068, 'extperiph2', 'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('uart3_txd',         'w6',  0x3174, 'uartc',      'rsvd2',    'rsvd3',        'spi4',     False, False, False),
    ('uart3_rxd',         'w7',  0x3178, 'uartc',      'rsvd2',    'rsvd3',        'spi4',     False, False, False),
    # TRM calls this spi2_mosi; perhaps it's wrong?
    ('dvfs_pwm',          'x0',  0x3368, 'spi6',       'cldvfs',   'rsvd3',        'rsvd4',    False, False, False),
    # TRM calls this spi2_miso; perhaps it's wrong?
    ('gpio_x1_aud',       'x1',  0x336c, 'spi6',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    # TRM calls this spi2_sck; perhaps it's wrong?
    ('dvfs_clk',          'x2',  0x3374, 'spi6',       'cldvfs',   'rsvd3',        'rsvd4',    False, False, False),
    # TRM calls this spi2_cs0_n; perhaps it's wrong?
    ('gpio_x3_aud',       'x3',  0x3370, 'spi6',       'spi1',     'rsvd3',        'rsvd4',    False, False, False),
    # TRM calls this spi1_mosi; perhaps it's wrong?
    ('gpio_x4_aud',       'x4',  0x3378, 'rsvd1',      'spi1',     'spi2',         'dap2',     False, False, False),
    # TRM calls this spi1_sck; perhaps it's wrong?
    ('gpio_x5_aud',       'x5',  0x337c, 'rsvd1',      'spi1',     'spi2',         'rsvd4',    False, False, False),
    # TRM calls this spi1_cs0_n; perhaps it's wrong?
    ('gpio_x6_aud',       'x6',  0x3380, 'spi6',       'spi1',     'spi2',         'rsvd4',    False, False, False),
    # TRM calls this spi2_cs0_n; perhaps it's wrong?
    ('gpio_x7_aud',       'x7',  0x3384, 'rsvd1',      'spi1',     'spi2',         'rsvd4',    False, False, False),
    ('ulpi_clk',          'y0',  0x3020, 'spi1',       'spi5',     'uartd',        'ulpi',     False, False, False),
    ('ulpi_dir',          'y1',  0x3024, 'spi1',       'spi5',     'uartd',        'ulpi',     False, False, False),
    ('ulpi_nxt',          'y2',  0x3028, 'spi1',       'spi5',     'uartd',        'ulpi',     False, False, False),
    ('ulpi_stp',          'y3',  0x302c, 'spi1',       'spi5',     'uartd',        'ulpi',     False, False, False),
    ('sdmmc1_dat3',       'y4',  0x3050, 'sdmmc1',     'spdif',    'spi4',         'uarta',    False, False, False),
    ('sdmmc1_dat2',       'y5',  0x3054, 'sdmmc1',     'pwm0',     'spi4',         'uarta',    False, False, False),
    ('sdmmc1_dat1',       'y6',  0x3058, 'sdmmc1',     'pwm1',     'spi4',         'uarta',    False, False, False),
    ('sdmmc1_dat0',       'y7',  0x305c, 'sdmmc1',     'rsvd2',    'spi4',         'uarta',    False, False, False),
    ('sdmmc1_clk',        'z0',  0x3048, 'sdmmc1',     'clk12',    'rsvd3',        'rsvd4',    False, False, False),
    ('sdmmc1_cmd',        'z1',  0x304c, 'sdmmc1',     'spdif',    'spi4',         'uarta',    False, False, False),
    ('sys_clk_req',       'z5',  0x3320, 'sysclk',     'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('pwr_i2c_scl',       'z6',  0x32b4, 'i2cpwr',     'rsvd2',    'rsvd3',        'rsvd4',    True,  False, False),
    ('pwr_i2c_sda',       'z7',  0x32b8, 'i2cpwr',     'rsvd2',    'rsvd3',        'rsvd4',    True,  False, False),
    ('sdmmc4_dat0',       'aa0', 0x3260, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat1',       'aa1', 0x3264, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat2',       'aa2', 0x3268, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat3',       'aa3', 0x326c, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat4',       'aa4', 0x3270, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat5',       'aa5', 0x3274, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat6',       'aa6', 0x3278, 'sdmmc4',     'spi3',     'gmi',          'rsvd4',    False, True,  False),
    ('sdmmc4_dat7',       'aa7', 0x327c, 'sdmmc4',     'rsvd2',    'gmi',          'rsvd4',    False, True,  False),
    ('',                  'bb0', 0x328c, 'i2s4',       'vi',       'vi_alt1',      'vi_alt3',  False, False, False),
    ('cam_i2c_scl',       'bb1', 0x3290, 'vgp1',       'i2c3',     'rsvd3',        'rsvd4',    True,  False, False),
    ('cam_i2c_sda',       'bb2', 0x3294, 'vgp2',       'i2c3',     'rsvd3',        'rsvd4',    True,  False, False),
    ('',                  'bb3', 0x3298, 'vgp3',       'displaya', 'displayb',     'rsvd4',    False, False, False),
    ('',                  'bb4', 0x329c, 'vgp4',       'displaya', 'displayb',     'rsvd4',    False, False, False),
    ('',                  'bb5', 0x32a0, 'vgp5',       'displaya', 'displayb',     'rsvd4',    False, False, False),
    ('',                  'bb6', 0x32a4, 'vgp6',       'displaya', 'displayb',     'rsvd4',    False, False, False),
    ('',                  'bb7', 0x32a8, 'i2s4',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('cam_mclk',          'cc0', 0x3284, 'vi',         'vi_alt1',  'vi_alt3',      'rsvd4',    False, False, False),
    ('',                  'cc1', 0x3288, 'i2s4',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('',                  'cc2', 0x32ac, 'i2s4',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('sdmmc4_clk',        'cc4', 0x3258, 'sdmmc4',     'rsvd2',    'gmi',          'rsvd4',    False, True,  False),
    ('clk2_req',          'cc5', 0x306c, 'dap',        'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('clk3_out',          'ee0', 0x31b8, 'extperiph3', 'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('clk3_req',          'ee1', 0x31bc, 'dev3',       'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('clk1_req',          'ee2', 0x3348, 'dap',        'dap1',     'rsvd3',        'rsvd4',    False, False, False),
    ('hdmi_cec',          'ee3', 0x33e0, 'cec',        'sdmmc3',   'rsvd3',        'soc',      True,  False, False),
    ('sdmmc3_clk_lb_out', 'ee4', 0x3400, 'sdmmc3',     'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
    ('sdmmc3_clk_lb_in',  'ee5', 0x33fc, 'sdmmc3',     'rsvd2',    'rsvd3',        'rsvd4',    False, False, False),
)

pins = (
    #name,           reg,    f0,       f1,      f2,      f3,            od,    ior,   rcv_sel
    ('core_pwr_req', 0x3324, 'pwron',  'rsvd2', 'rsvd3', 'rsvd4',       False, False, False),
    ('cpu_pwr_req',  0x3328, 'cpu',    'rsvd2', 'rsvd3', 'rsvd4',       False, False, False),
    ('pwr_int_n',    0x332c, 'pmi',    'rsvd2', 'rsvd3', 'rsvd4',       False, False, False),
    ('reset_out_n',  0x3408, 'rsvd1',  'rsvd2', 'rsvd3', 'reset_out_n', False, False, False),
    ('owr',          0x3334, 'owr',    'rsvd2', 'rsvd3', 'rsvd4',       False, False, True),
    ('jtag_rtck',    0x32b0, 'rtck',   'rsvd2', 'rsvd3', 'rsvd4',       False, False, False),
    ('clk_32k_in',   0x3330, 'clk',    'rsvd2', 'rsvd3', 'rsvd4',       False, False, False),
    ('gmi_clk_lb',   0x3404, 'sdmmc2', 'nand',  'gmi',   'rsvd4',       False, False, False),
)

drive_groups = (
    #name, r, hsm_b, schmitt_b, lpmd_b, drvdn_b, drvdn_w, drvup_b, drvup_w, slwr_b, slwr_w, slwf_b, slwf_w, drvtype
    ('ao1',         0x868, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('ao2',         0x86c, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('at1',         0x870, 2, 3, -1, 12, 7, 20, 7,  28, 2, 30, 2,  True),
    ('at2',         0x874, 2, 3, -1, 12, 7, 20, 7,  28, 2, 30, 2,  True),
    ('at3',         0x878, 2, 3, -1, 12, 7, 20, 7,  28, 2, 30, 2,  True),
    ('at4',         0x87c, 2, 3, -1, 12, 7, 20, 7,  28, 2, 30, 2,  True),
    ('at5',         0x880, 2, 3, 4,  14, 5, 19, 5,  28, 2, 30, 2,  False),
    ('cdev1',       0x884, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('cdev2',       0x888, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('dap1',        0x890, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('dap2',        0x894, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('dap3',        0x898, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('dap4',        0x89c, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('dbg',         0x8a0, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('sdio3',       0x8b0, 2, 3, -1, 12, 7, 20, 7,  28, 2, 30, 2,  False),
    ('spi',         0x8b4, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('uaa',         0x8b8, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('uab',         0x8bc, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('uart2',       0x8c0, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('uart3',       0x8c4, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('sdio1',       0x8ec, 2, 3, -1, 12, 7, 20, 7,  28, 2, 30, 2,  False),
    ('ddc',         0x8fc, 2, 3, -1, 12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('gma',         0x900, 2, 3, -1, 14, 5, 20, 5,  28, 2, 30, 2,  False),
    ('gme',         0x910, 2, 3, 4,  14, 5, 19, 5,  28, 2, 30, 2,  False),
    ('gmf',         0x914, 2, 3, 4,  14, 5, 19, 5,  28, 2, 30, 2,  False),
    ('gmg',         0x918, 2, 3, 4,  14, 5, 19, 5,  28, 2, 30, 2,  False),
    ('gmh',         0x91c, 2, 3, 4,  14, 5, 19, 5,  28, 2, 30, 2,  False),
    ('owr',         0x920, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    # There is confusion in the TRM; is this UDA or UAD?
    ('uda',         0x924, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('dev3',        0x92c, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('cec',         0x938, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('at6',         0x994, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  True),
    ('dap5',        0x998, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('usb_vbus_en', 0x99c, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('ao3',         0x9a0, 2, 3, 4,  12, 5, -1, -1, 28, 2, -1, -1, False),
    ('hv0',         0x9a4, 2, 3, 4,  12, 5, -1, -1, 28, 2, -1, -1, False),
    ('sdio4',       0x9a8, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
    ('ao0',         0x9ac, 2, 3, 4,  12, 5, 20, 5,  28, 2, 30, 2,  False),
)

drive_group_pins = {
    'ao1': (
        'kb_row0_pr0',
        'kb_row1_pr1',
        'kb_row2_pr2',
        'kb_row3_pr3',
        'kb_row4_pr4',
        'kb_row5_pr5',
        'kb_row6_pr6',
        'kb_row7_pr7',
        'pwr_i2c_scl_pz6',
        'pwr_i2c_sda_pz7',
    ),
    'ao2': (
        'clk_32k_out_pa0',
        'kb_col0_pq0',
        'kb_col1_pq1',
        'kb_col2_pq2',
        'kb_col3_pq3',
        'kb_col4_pq4',
        'kb_col5_pq5',
        'kb_col6_pq6',
        'kb_col7_pq7',
        'kb_row8_ps0',
        'kb_row9_ps1',
        'kb_row10_ps2',
        'sys_clk_req_pz5',
        'core_pwr_req',
        'cpu_pwr_req',
        'reset_out_n',
    ),
    'at1': (
        'gmi_ad8_ph0',
        'gmi_ad9_ph1',
        'gmi_ad10_ph2',
        'gmi_ad11_ph3',
        'gmi_ad12_ph4',
        'gmi_ad13_ph5',
        'gmi_ad14_ph6',
        'gmi_ad15_ph7',
        'gmi_iordy_pi5',
        'gmi_cs7_n_pi6',
    ),
    'at2': (
        'gmi_ad0_pg0',
        'gmi_ad1_pg1',
        'gmi_ad2_pg2',
        'gmi_ad3_pg3',
        'gmi_ad4_pg4',
        'gmi_ad5_pg5',
        'gmi_ad6_pg6',
        'gmi_ad7_pg7',
        'gmi_wr_n_pi0',
        'gmi_oe_n_pi1',
        'gmi_cs6_n_pi3',
        'gmi_rst_n_pi4',
        'gmi_wait_pi7',
        'gmi_dqs_p_pj3',
        'gmi_adv_n_pk0',
        'gmi_clk_pk1',
        'gmi_cs4_n_pk2',
        'gmi_cs2_n_pk3',
        'gmi_cs3_n_pk4',
    ),
    'at3': (
        'gmi_wp_n_pc7',
        'gmi_cs0_n_pj0',
    ),
    'at4': (
        'gmi_a17_pb0',
        'gmi_a18_pb1',
        'gmi_cs1_n_pj2',
        'gmi_a16_pj7',
        'gmi_a19_pk7',
    ),
    'at5': (
        'gen2_i2c_scl_pt5',
        'gen2_i2c_sda_pt6',
    ),
    'cdev1': (
        'clk1_out_pw4',
        'clk1_req_pee2',
    ),
    'cdev2': (
        'clk2_out_pw5',
        'clk2_req_pcc5',
        'sdmmc1_wp_n_pv3',
    ),
    'dap1': (
        'dap1_fs_pn0',
        'dap1_din_pn1',
        'dap1_dout_pn2',
        'dap1_sclk_pn3',
    ),
    'dap2': (
        'dap2_fs_pa2',
        'dap2_sclk_pa3',
        'dap2_din_pa4',
        'dap2_dout_pa5',
    ),
    'dap3': (
        'dap3_fs_pp0',
        'dap3_din_pp1',
        'dap3_dout_pp2',
        'dap3_sclk_pp3',
    ),
    'dap4': (
        'dap4_fs_pp4',
        'dap4_din_pp5',
        'dap4_dout_pp6',
        'dap4_sclk_pp7',
    ),
    'dbg': (
        'gen1_i2c_scl_pc4',
        'gen1_i2c_sda_pc5',
        'pu0',
        'pu1',
        'pu2',
        'pu3',
        'pu4',
        'pu5',
        'pu6',
    ),
    'sdio3': (
        'sdmmc3_clk_pa6',
        'sdmmc3_cmd_pa7',
        'sdmmc3_dat3_pb4',
        'sdmmc3_dat2_pb5',
        'sdmmc3_dat1_pb6',
        'sdmmc3_dat0_pb7',
        'sdmmc3_clk_lb_out_pee4',
        'sdmmc3_clk_lb_in_pee5',
    ),
    'spi': (
        'dvfs_pwm_px0',
        'gpio_x1_aud_px1',
        'dvfs_clk_px2',
        'gpio_x3_aud_px3',
        'gpio_x4_aud_px4',
        'gpio_x5_aud_px5',
        'gpio_x6_aud_px6',
        'gpio_x7_aud_px7',
        'gpio_w2_aud_pw2',
        'gpio_w3_aud_pw3',
    ),
    'uaa': (
        'ulpi_data0_po1',
        'ulpi_data1_po2',
        'ulpi_data2_po3',
        'ulpi_data3_po4',
    ),
    'uab': (
        'ulpi_data7_po0',
        'ulpi_data4_po5',
        'ulpi_data5_po6',
        'ulpi_data6_po7',
        'pv0',
        'pv1',
    ),
    'uart2': (
        'uart2_txd_pc2',
        'uart2_rxd_pc3',
        'uart2_cts_n_pj5',
        'uart2_rts_n_pj6',
    ),
    'uart3': (
        'uart3_cts_n_pa1',
        'uart3_rts_n_pc0',
        'uart3_txd_pw6',
        'uart3_rxd_pw7',
    ),
    'sdio1': (
        'sdmmc1_dat3_py4',
        'sdmmc1_dat2_py5',
        'sdmmc1_dat1_py6',
        'sdmmc1_dat0_py7',
        'sdmmc1_clk_pz0',
        'sdmmc1_cmd_pz1',
    ),
    'ddc': (
        'ddc_scl_pv4',
        'ddc_sda_pv5',
    ),
    'gma': (
        'sdmmc4_clk_pcc4',
        'sdmmc4_cmd_pt7',
        'sdmmc4_dat0_paa0',
        'sdmmc4_dat1_paa1',
        'sdmmc4_dat2_paa2',
        'sdmmc4_dat3_paa3',
        'sdmmc4_dat4_paa4',
        'sdmmc4_dat5_paa5',
        'sdmmc4_dat6_paa6',
        'sdmmc4_dat7_paa7',
    ),
    'gme': (
        'pbb0',
        'cam_i2c_scl_pbb1',
        'cam_i2c_sda_pbb2',
        'pbb3',
        'pcc2',
    ),
    'gmf': (
        'pbb4',
        'pbb5',
        'pbb6',
        'pbb7',
    ),
    'gmg': (
        'cam_mclk_pcc0',
    ),
    'gmh': (
        'pcc1',
    ),
    'owr': (
        'sdmmc3_cd_n_pv2',
    ),
    'uda': (
        'ulpi_clk_py0',
        'ulpi_dir_py1',
        'ulpi_nxt_py2',
        'ulpi_stp_py3',
    ),
    'dev3': (
        # FIXME
    ),
    'cec': (
        # FIXME
    ),
    'at6': (
        # FIXME
    ),
    'dap5': (
        # FIXME
    ),
    'usb_vbus_en': (
        # FIXME
    ),
    'ao3': (
        # FIXME
    ),
    'hv0': (
        # FIXME
    ),
    'sdio4': (
        # FIXME
    ),
    'ao0': (
        # FIXME
    ),
}