├── .gitignore ├── README.txt ├── board-to-kernel-dt.py ├── board-to-uboot.py ├── configs ├── beaver.board ├── cei-tk1-som.board ├── e2220-1170.board ├── jetson-tk1.board ├── norrin.board ├── nyan-big.board ├── nyan-blaze.board ├── p2371-0000.board ├── p2371-2180.board ├── p2571.board ├── p3450-porg.board ├── tegra114.soc ├── tegra124.soc ├── tegra210-smaug.board ├── tegra210.soc ├── tegra30.soc └── venice2.board ├── csv-to-board.py ├── kernel-pinctrl-driver-to-soc.py ├── soc-to-kernel-pinctrl-driver.py ├── soc-to-uboot-driver.py ├── tegra_pmx_board_parser.py ├── tegra_pmx_parser_utils.py ├── tegra_pmx_soc_parser.py └── tegra_pmx_utils.py /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | .*.swp 3 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | Introduction 2 | ============ 3 | 4 | Many aspects of many of Tegra's pins can configure via the pinmux and GPIO 5 | controllers. This project exists to assist with software's handling of the 6 | configuration of those controllers. 7 | 8 | Submitting Changes 9 | ================== 10 | 11 | To submit patches to this project, please use the following commands: 12 | 13 | * git format-patch --subject-prefix="pinmux scripts PATCH" 14 | 15 | Creates a patch file from your git commit. 16 | 17 | * git send-email --to linux-tegra@vger.kernel.org *.patch 18 | 19 | Sends the patch by email to the Tegra mailing list. 20 | 21 | Even though the primary upstream repository for this project is hosted on 22 | github, contributions aren't accepted via github pull requests. Github pull 23 | requests would bypass public code review on the project mailing list. 24 | 25 | Patches should be signed off (include a signed-off-by line) to indicate your 26 | acceptance of the code's license (see the license header in each file). See 27 | http://developercertificate.org/ for details of what signed-off-by implies. 28 | 29 | Data files 30 | ========== 31 | 32 | SoC definition 33 | 34 | The exact set of configurable options varies from chip to chip. This project 35 | contains a data file for each chip, which describes the available pins on 36 | the chip, along with their parameters, such as the set of available pinmux 37 | functions the pin supports. 38 | 39 | An example is configs/tegra124.soc. 40 | 41 | Board configuration 42 | 43 | Much of the programming of these controllers is directly driven by the board 44 | design. This project contains a data file for each board, which describes 45 | the required configuration for each pin. 46 | 47 | An example is configs/jetson-tk1.board. 48 | 49 | Converter Scripts 50 | ================= 51 | 52 | soc-to-kernel-pinctrl-driver.py 53 | 54 | Reads an SoC definition data file, and emits the source code for a Linux 55 | kernel pinctrl driver, e.g. drivers/pinctrl/pinctrl-tegra124.c. 56 | 57 | soc-to-uboot-driver.py 58 | 59 | Reads an SoC definition data file, and emits the source code for a U-Boot 60 | pinmux driver, e.g. arch/arm/include/asm/arch-tegra124/pinmux.h, 61 | arch/arm/cpu/tegra124-common/pinmux.c 62 | 63 | csv-to-board-tegra124-xlsx.py 64 | 65 | Part of the output from the board design process is a spreadsheet that 66 | describes the required configuration for each pin. This script extracts the 67 | final pinmux configuration from (a CSV representation of) such spreadsheets 68 | and creates a board configuration such as configs/jetson-tk1.board. 69 | 70 | board-to-kernel-dt.py 71 | 72 | Reads a board configuration data file, and emits a device tree fragment 73 | suitable for inclusion in a board's device tree file. For example, the 74 | output may form part of arch/arm/boot/dts/tegra124-jetson-tk1.dts. 75 | 76 | Note that when at all possible, it is far preferable for the kernel not to 77 | program the pinmux controller, but rather to rely upon system software to 78 | have set it up. This reduces duplicate processing of pinmux data, and is 79 | consistent with a model where the first software to touch any I/O controller 80 | programs the pinmux configuration en mass, to avoid any potential output 81 | data glitches. 82 | 83 | board-to-uboot.py 84 | 85 | Reads a board configuration data file, and emits a header file suitable for 86 | use with U-Boot's pinmux driver. For example, 87 | board/nvidia/jetson-tk1/pinmux-config-jetson-tk1.h. Note also the function 88 | pinmux_init() in jetson-tk1.c in that same directory. 89 | -------------------------------------------------------------------------------- /board-to-kernel-dt.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a 6 | # copy of this software and associated documentation files (the "Software"), 7 | # to deal in the Software without restriction, including without limitation 8 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | # and/or sell copies of the Software, and to permit persons to whom the 10 | # Software is furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | # DEALINGS IN THE SOFTWARE. 22 | 23 | import argparse 24 | import os.path 25 | import tegra_pmx_board_parser 26 | from tegra_pmx_utils import * 27 | 28 | dbg = False 29 | 30 | parser = argparse.ArgumentParser(description='Create a kernel device tree ' + 31 | 'pinmux fragment from a board config file') 32 | parser.add_argument('--debug', action='store_true', help='Turn on debugging prints') 33 | parser.add_argument('board', help='Board to process') 34 | args = parser.parse_args() 35 | if args.debug: 36 | dbg = True 37 | if dbg: print(args) 38 | 39 | board = tegra_pmx_board_parser.load_board(args.board) 40 | 41 | def mapper_pull(val): 42 | return 'TEGRA_PIN_PULL_' + val.upper() 43 | 44 | def mapper_bool(val): 45 | return 'TEGRA_PIN_' + {False: 'DISABLE', True: 'ENABLE'}[val] 46 | 47 | for pincfg in board.pincfgs_by_num(): 48 | print(' ' + pincfg.fullname + ' {') 49 | print(' nvidia,pins = "' + pincfg.fullname + '";') 50 | if pincfg.mux: 51 | print(' nvidia,function = "' + pincfg.mux + '";') 52 | print(' nvidia,pull = <' + mapper_pull(pincfg.pull) + '>;') 53 | print(' nvidia,tristate = <' + mapper_bool(pincfg.tri) + '>;') 54 | print(' nvidia,enable-input = <' + mapper_bool(pincfg.e_inp) + '>;') 55 | if pincfg.gpio_pin.od: 56 | print(' nvidia,open-drain = <' + mapper_bool(pincfg.od) + '>;') 57 | if board.soc.soc_pins_have_rcv_sel and pincfg.gpio_pin.rcv_sel and hasattr(pincfg.gpio_pin, 'rcv_sel'): 58 | print(' nvidia,rcv-sel = <' + mapper_bool(pincfg.rcv_sel) + '>;') 59 | if board.soc.soc_pins_have_e_io_hv and pincfg.gpio_pin.e_io_hv and hasattr(pincfg.gpio_pin, 'e_io_hv'): 60 | print(' nvidia,io-hv = <' + mapper_bool(pincfg.e_io_hv) + '>;') 61 | print(' };') 62 | 63 | # FIXME: Handle drive groups 64 | 65 | for cfg in board.mipipadctrlcfgs_by_num(): 66 | print(' ' + cfg.name + ' {') 67 | print(' nvidia,pins = "mipi_pad_ctrl_' + cfg.name + '";') 68 | print(' nvidia,function = "' + cfg.mux + '";') 69 | print(' };') 70 | 71 | board.warn_about_unconfigured_pins() 72 | -------------------------------------------------------------------------------- /board-to-uboot.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a 6 | # copy of this software and associated documentation files (the "Software"), 7 | # to deal in the Software without restriction, including without limitation 8 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | # and/or sell copies of the Software, and to permit persons to whom the 10 | # Software is furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | # DEALINGS IN THE SOFTWARE. 22 | 23 | import argparse 24 | import datetime 25 | import os.path 26 | import tegra_pmx_board_parser 27 | from tegra_pmx_utils import * 28 | 29 | dbg = False 30 | 31 | parser = argparse.ArgumentParser(description='Create a U-Boot board pinmux ' + 32 | 'config table from a board config file') 33 | parser.add_argument('--debug', action='store_true', help='Turn on debugging prints') 34 | parser.add_argument('board', help='Board to process') 35 | args = parser.parse_args() 36 | if args.debug: 37 | dbg = True 38 | if dbg: print(args) 39 | 40 | board = tegra_pmx_board_parser.load_board(args.board) 41 | 42 | copyright_year = datetime.date.today().year 43 | 44 | print('''\ 45 | /* 46 | * Copyright (c) %(copyright_year)d, NVIDIA CORPORATION. All rights reserved. 47 | * 48 | * SPDX-License-Identifier: GPL-2.0+ 49 | */ 50 | 51 | /* 52 | * THIS FILE IS AUTO-GENERATED - DO NOT EDIT! 53 | * 54 | * To generate this file, use the tegra-pinmux-scripts tool available from 55 | * https://github.com/NVIDIA/tegra-pinmux-scripts 56 | * Run "board-to-uboot.py %(board_name)s". 57 | */ 58 | 59 | #ifndef _PINMUX_CONFIG_%(board_define)s_H_ 60 | #define _PINMUX_CONFIG_%(board_define)s_H_ 61 | 62 | #define GPIO_INIT(_port, _gpio, _init) \\ 63 | { \\ 64 | .gpio = TEGRA_GPIO(_port, _gpio), \\ 65 | .init = TEGRA_GPIO_INIT_##_init, \\ 66 | } 67 | 68 | static const struct tegra_gpio_config %(board_varname)s_gpio_inits[] = { 69 | ''' % { 70 | 'copyright_year': copyright_year, 71 | 'board_name': args.board, 72 | 'board_define': board.definename, 73 | 'board_varname': board.varname, 74 | }, end='') 75 | 76 | gpio_table = [] 77 | for pincfg in board.pincfgs_by_num(): 78 | if not pincfg.gpio_init: 79 | continue 80 | gpio = pincfg.gpio_pin.gpio.upper() 81 | port = gpio[:-1] 82 | assert port.isalpha() 83 | pin = gpio[-1] 84 | assert pin.isdigit() 85 | row = ( 86 | port, 87 | pin, 88 | pincfg.gpio_init.upper(), 89 | ) 90 | gpio_table.append(row) 91 | headings = ('port', 'pin', 'init_val') 92 | dump_c_table(headings, 'GPIO_INIT', gpio_table) 93 | 94 | print('''\ 95 | }; 96 | 97 | ''', end='') 98 | 99 | params = ['_pingrp', '_mux', '_pull', '_tri', '_io', '_od'] 100 | if board.soc.soc_pins_have_rcv_sel: 101 | params += ['_rcv_sel',] 102 | if board.soc.soc_pins_have_e_io_hv: 103 | params += ['_e_io_hv',] 104 | s = gen_wrapped_c_macro_header('PINCFG', params) 105 | 106 | s += '''\ 107 | { 108 | .pingrp = PMUX_PINGRP_##_pingrp, 109 | .func = PMUX_FUNC_##_mux, 110 | .pull = PMUX_PULL_##_pull, 111 | .tristate = PMUX_TRI_##_tri, 112 | .io = PMUX_PIN_##_io, 113 | .od = PMUX_PIN_OD_##_od, 114 | ''' 115 | 116 | if board.soc.soc_pins_have_rcv_sel: 117 | s += '''\ 118 | .rcv_sel = PMUX_PIN_RCV_SEL_##_rcv_sel, 119 | ''' 120 | 121 | if board.soc.soc_pins_have_e_io_hv: 122 | s += '''\ 123 | .e_io_hv = PMUX_PIN_E_IO_HV_##_e_io_hv, 124 | ''' 125 | 126 | s += '''\ 127 | .lock = PMUX_PIN_LOCK_DEFAULT, 128 | ''' 129 | 130 | if board.soc.soc_pins_have_ior: 131 | s += '''\ 132 | .ioreset = PMUX_PIN_IO_RESET_DEFAULT, 133 | ''' 134 | 135 | s = append_aligned_tabs_indent_with_tabs(s, 0) 136 | print(s) 137 | 138 | print('''\ 139 | } 140 | 141 | static const struct pmux_pingrp_config %(board_varname)s_pingrps[] = { 142 | ''' % { 143 | 'board_varname': board.varname, 144 | }, end='') 145 | 146 | def mapper_mux(val): 147 | if val: 148 | return val.upper() 149 | else: 150 | return 'DEFAULT' 151 | 152 | def mapper_pull(val): 153 | if val == 'NONE': 154 | return 'NORMAL' 155 | return val 156 | 157 | def mapper_tristate(val): 158 | return {False: 'NORMAL', True: 'TRISTATE'}[val] 159 | 160 | def mapper_e_input(val): 161 | return {False: 'OUTPUT', True: 'INPUT'}[val] 162 | 163 | def mapper_od(gpio_pin, val): 164 | if not gpio_pin.od: 165 | return 'DEFAULT' 166 | return {False: 'DISABLE', True: 'ENABLE'}[val] 167 | 168 | def mapper_rcv_sel(gpio_pin, val): 169 | if not gpio_pin.rcv_sel: 170 | return 'DEFAULT' 171 | return {False: 'NORMAL', True: 'HIGH'}[val] 172 | 173 | def mapper_e_io_hv(gpio_pin, val): 174 | if not gpio_pin.e_io_hv: 175 | return 'DEFAULT' 176 | return {False: 'NORMAL', True: 'HIGH'}[val] 177 | 178 | pincfg_table = [] 179 | for pincfg in board.pincfgs_by_num(): 180 | row = ( 181 | pincfg.fullname.upper(), 182 | mapper_mux(pincfg.mux), 183 | mapper_pull(pincfg.pull.upper()), 184 | mapper_tristate(pincfg.tri), 185 | mapper_e_input(pincfg.e_inp), 186 | mapper_od(pincfg.gpio_pin, pincfg.od), 187 | ) 188 | if board.soc.soc_pins_have_rcv_sel: 189 | row += (mapper_rcv_sel(pincfg.gpio_pin, pincfg.rcv_sel),) 190 | if board.soc.soc_pins_have_e_io_hv: 191 | row += (mapper_e_io_hv(pincfg.gpio_pin, pincfg.e_io_hv),) 192 | pincfg_table.append(row) 193 | headings = ('pingrp', 'mux', 'pull', 'tri', 'e_input', 'od') 194 | if board.soc.soc_pins_have_rcv_sel: 195 | headings += ('rcv_sel',) 196 | if board.soc.soc_pins_have_e_io_hv: 197 | headings += ('e_io_hv',) 198 | dump_c_table(headings, 'PINCFG', pincfg_table) 199 | 200 | print('''\ 201 | }; 202 | 203 | #define DRVCFG(_drvgrp, _slwf, _slwr, _drvup, _drvdn, _lpmd, _schmt, _hsm) \\ 204 | { \\ 205 | .drvgrp = PMUX_DRVGRP_##_drvgrp, \\ 206 | .slwf = _slwf, \\ 207 | .slwr = _slwr, \\ 208 | .drvup = _drvup, \\ 209 | .drvdn = _drvdn, \\ 210 | .lpmd = PMUX_LPMD_##_lpmd, \\ 211 | .schmt = PMUX_SCHMT_##_schmt, \\ 212 | .hsm = PMUX_HSM_##_hsm, \\ 213 | } 214 | 215 | static const struct pmux_drvgrp_config %s_drvgrps[] = { 216 | ''' % board.varname, end='') 217 | 218 | # FIXME: Handle drive groups 219 | 220 | print('''\ 221 | }; 222 | 223 | ''', end='') 224 | 225 | if len(board.mipipadctrlcfgs_by_num()): 226 | print('''\ 227 | #define MIPIPADCTRLCFG(_grp, _mux) \\ 228 | { \\ 229 | .grp = PMUX_MIPIPADCTRLGRP_##_grp, \\ 230 | .func = PMUX_FUNC_##_mux, \\ 231 | } 232 | 233 | static const struct pmux_mipipadctrlgrp_config %s_mipipadctrlgrps[] = { 234 | ''' % board.varname, end='') 235 | 236 | mipipadctrl_table = [] 237 | for cfg in board.mipipadctrlcfgs_by_num(): 238 | row = ( 239 | cfg.name.upper(), 240 | mapper_mux(cfg.mux), 241 | ) 242 | mipipadctrl_table.append(row) 243 | headings = ('grp', 'mux') 244 | dump_c_table(headings, 'MIPIPADCTRLCFG', mipipadctrl_table) 245 | 246 | print('''\ 247 | }; 248 | 249 | ''', end='') 250 | 251 | print('''\ 252 | #endif /* PINMUX_CONFIG_%s_H */ 253 | ''' % board.definename, end='') 254 | 255 | board.warn_about_unconfigured_pins() 256 | -------------------------------------------------------------------------------- /configs/cei-tk1-som.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra124' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, rcv_sel 5 | ('dap_mclk1_pw4', 'extperiph1', None, 'none', False, False, False, False), 6 | ('dap_mclk1_req_pee2', 'rsvd4', None, 'down', True, False, False, False), 7 | ('dap1_din_pn1', 'rsvd4', None, 'down', True, False, False, False), 8 | ('dap1_dout_pn2', 'i2s0', None, 'down', True, False, False, False), 9 | ('dap1_fs_pn0', 'rsvd4', None, 'down', True, False, False, False), 10 | ('dap1_sclk_pn3', 'rsvd4', None, 'down', True, False, False, False), 11 | ('dap2_din_pa4', 'i2s1', None, 'none', True, True, False, False), 12 | ('dap2_dout_pa5', 'i2s1', None, 'none', False, False, False, False), 13 | ('dap2_fs_pa2', 'i2s1', None, 'none', False, False, False, False), 14 | ('dap2_sclk_pa3', 'i2s1', None, 'none', False, False, False, False), 15 | ('gpio_x4_aud_px4', None, 'in', 'none', True, True, False, False), 16 | ('gpio_x5_aud_px5', 'rsvd4', None, 'down', True, False, False, False), 17 | ('gpio_x6_aud_px6', 'gmi', None, 'down', True, False, False, False), 18 | ('gpio_x7_aud_px7', 'rsvd1', None, 'down', True, False, False, False), 19 | ('gpio_w2_aud_pw2', 'rsvd2', None, 'down', True, False, False, False), 20 | ('gpio_w3_aud_pw3', 'spi6', None, 'down', True, False, False, False), 21 | ('dvfs_pwm_px0', 'cldvfs', None, 'none', False, False, False, False), 22 | ('gpio_x1_aud_px1', None, 'in', 'none', True, True, False, False), 23 | ('dvfs_clk_px2', 'cldvfs', None, 'none', False, False, False, False), 24 | ('gpio_x3_aud_px3', 'rsvd4', None, 'down', True, False, False, False), 25 | ('dap3_din_pp1', 'i2s2', None, 'down', True, False, False, False), 26 | ('dap3_dout_pp2', 'rsvd4', None, 'down', True, False, False, False), 27 | ('dap3_fs_pp0', 'i2s2', None, 'down', True, False, False, False), 28 | ('dap3_sclk_pp3', 'rsvd3', None, 'down', True, False, False, False), 29 | ('pv0', None, 'in', 'none', True, True, False, False), 30 | ('pv1', None, 'in', 'none', True, True, False, False), 31 | ('ulpi_clk_py0', 'spi1', None, 'none', False, False, False, False), 32 | ('ulpi_data0_po1', None, 'in', 'none', True, True, False, False), 33 | ('ulpi_data1_po2', 'ulpi', None, 'down', True, False, False, False), 34 | ('ulpi_data2_po3', 'ulpi', None, 'down', True, False, False, False), 35 | ('ulpi_data3_po4', None, 'in', 'none', True, True, False, False), 36 | ('ulpi_data4_po5', 'ulpi', None, 'down', True, False, False, False), 37 | ('ulpi_data5_po6', 'ulpi', None, 'down', True, False, False, False), 38 | ('ulpi_data6_po7', 'ulpi', None, 'down', True, False, False, False), 39 | ('ulpi_data7_po0', 'ulpi', None, 'down', True, False, False, False), 40 | ('ulpi_dir_py1', 'spi1', None, 'none', True, True, False, False), 41 | ('ulpi_nxt_py2', 'spi1', None, 'none', False, False, False, False), 42 | ('ulpi_stp_py3', 'spi1', None, 'none', False, False, False, False), 43 | ('cam_i2c_scl_pbb1', 'i2c3', None, 'none', False, True, True, False), 44 | ('cam_i2c_sda_pbb2', 'i2c3', None, 'none', False, True, True, False), 45 | ('cam_mclk_pcc0', 'vi_alt3', None, 'none', False, False, False, False), 46 | ('pbb0', 'vimclk2_alt', None, 'none', False, False, False, False), 47 | ('pbb3', None, 'out0', 'none', False, False, False, False), 48 | ('pbb4', 'vgp4', None, 'down', True, False, False, False), 49 | ('pbb5', 'rsvd3', None, 'down', True, False, False, False), 50 | ('pbb6', None, 'out0', 'none', False, False, False, False), 51 | ('pbb7', None, 'out0', 'none', False, False, False, False), 52 | ('pcc1', None, 'in', 'none', False, True, False, False), 53 | ('pcc2', None, 'in', 'none', False, True, False, False), 54 | ('gen2_i2c_scl_pt5', 'i2c2', None, 'none', False, True, True, False), 55 | ('gen2_i2c_sda_pt6', 'i2c2', None, 'none', False, True, True, False), 56 | ('pj7', 'uartd', None, 'none', False, False, False, False), 57 | ('pb0', 'uartd', None, 'up', True, True, False, False), 58 | ('pb1', 'uartd', None, 'up', True, True, False, False), 59 | ('pk7', 'uartd', None, 'none', False, False, False, False), 60 | ('pg0', None, 'in', 'none', True, True, False, False), 61 | ('pg1', None, 'in', 'none', True, True, False, False), 62 | ('ph2', 'gmi', None, 'down', True, False, False, False), 63 | ('ph3', 'gmi', None, 'down', True, False, False, False), 64 | ('ph4', None, 'in', 'none', True, True, False, False), 65 | ('ph5', 'rsvd2', None, 'down', True, False, False, False), 66 | ('ph6', 'gmi', None, 'down', True, False, False, False), 67 | ('ph7', None, 'in', 'none', False, True, False, False), 68 | ('pg2', None, 'in', 'none', True, True, False, False), 69 | ('pg3', None, 'in', 'none', True, True, False, False), 70 | ('pg4', None, 'in', 'none', True, True, False, False), 71 | ('pg5', 'spi4', None, 'none', False, False, False, False), 72 | ('pg6', 'spi4', None, 'none', False, False, False, False), 73 | ('pg7', 'spi4', None, 'none', True, True, False, False), 74 | ('ph0', 'gmi', None, 'down', True, False, False, False), 75 | ('ph1', 'gmi', None, 'down', True, False, False, False), 76 | ('pk0', 'rsvd1', None, 'down', True, False, False, False), 77 | ('pk1', 'rsvd4', None, 'down', True, False, False, False), 78 | ('pj0', None, 'in', 'none', True, True, False, False), 79 | ('pj2', None, 'in', 'none', True, True, False, False), 80 | ('pk3', 'gmi', None, 'down', True, False, False, False), 81 | ('pk4', 'rsvd2', None, 'down', True, False, False, False), 82 | ('pk2', None, 'in', 'none', False, True, False, False), 83 | ('pi3', None, 'in', 'none', True, True, False, False), 84 | ('pi6', None, 'in', 'none', True, True, False, False), 85 | ('pi2', 'rsvd4', None, 'down', True, False, False, False), 86 | ('pi5', 'rsvd2', None, 'down', True, False, False, False), 87 | ('pi1', None, 'in', 'none', True, True, False, False), 88 | ('pi4', 'gmi', None, 'down', True, False, False, False), 89 | ('pi7', 'rsvd1', None, 'down', True, False, False, False), 90 | ('pc7', 'rsvd1', None, 'down', True, False, False, False), 91 | ('pi0', None, 'out0', 'none', False, False, False, False), 92 | ('pex_l0_clkreq_n_pdd2', 'pe0', None, 'none', True, True, False, False), 93 | ('pex_l0_rst_n_pdd1', 'pe0', None, 'none', False, False, False, False), 94 | ('pex_l1_clkreq_n_pdd6', 'pe1', None, 'none', True, True, False, False), 95 | ('pex_l1_rst_n_pdd5', 'pe1', None, 'none', False, False, False, False), 96 | ('pex_wake_n_pdd3', 'pe', None, 'none', True, True, False, False), 97 | ('usb_vbus_en2_pff1', 'rsvd2', None, 'down', True, False, False, False), 98 | ('pff2', 'rsvd2', None, 'down', True, False, False, False), 99 | ('clk2_out_pw5', 'rsvd2', None, 'down', True, False, False, False), 100 | ('clk2_req_pcc5', 'rsvd2', None, 'down', True, False, False, False), 101 | ('sdmmc1_wp_n_pv3', 'sdmmc1', None, 'down', True, False, False, False), 102 | ('sdmmc1_clk_pz0', 'rsvd3', None, 'down', True, False, False, False), 103 | ('sdmmc1_cmd_pz1', 'sdmmc1', None, 'down', True, False, False, False), 104 | ('sdmmc1_dat0_py7', 'rsvd2', None, 'down', True, False, False, False), 105 | ('sdmmc1_dat1_py6', 'sdmmc1', None, 'down', True, False, False, False), 106 | ('sdmmc1_dat2_py5', 'sdmmc1', None, 'down', True, False, False, False), 107 | ('sdmmc1_dat3_py4', 'sdmmc1', None, 'down', True, False, False, False), 108 | ('sdmmc3_clk_pa6', 'sdmmc3', None, 'none', False, True, False, False), 109 | ('sdmmc3_cmd_pa7', 'sdmmc3', None, 'up', False, True, False, False), 110 | ('sdmmc3_dat0_pb7', 'sdmmc3', None, 'up', False, True, False, False), 111 | ('sdmmc3_dat1_pb6', 'sdmmc3', None, 'up', False, True, False, False), 112 | ('sdmmc3_dat2_pb5', 'sdmmc3', None, 'up', False, True, False, False), 113 | ('sdmmc3_dat3_pb4', 'sdmmc3', None, 'up', False, True, False, False), 114 | ('sdmmc3_clk_lb_out_pee4', 'sdmmc3', None, 'none', False, True, False, False), 115 | ('sdmmc3_clk_lb_in_pee5', 'sdmmc3', None, 'up', False, True, False, False), 116 | ('sdmmc4_clk_pcc4', 'sdmmc4', None, 'none', False, True, False, False), 117 | ('sdmmc4_cmd_pt7', 'sdmmc4', None, 'up', False, True, False, False), 118 | ('sdmmc4_dat0_paa0', 'sdmmc4', None, 'up', False, True, False, False), 119 | ('sdmmc4_dat1_paa1', 'sdmmc4', None, 'up', False, True, False, False), 120 | ('sdmmc4_dat2_paa2', 'sdmmc4', None, 'up', False, True, False, False), 121 | ('sdmmc4_dat3_paa3', 'sdmmc4', None, 'up', False, True, False, False), 122 | ('sdmmc4_dat4_paa4', 'sdmmc4', None, 'up', False, True, False, False), 123 | ('sdmmc4_dat5_paa5', 'sdmmc4', None, 'up', False, True, False, False), 124 | ('sdmmc4_dat6_paa6', 'sdmmc4', None, 'up', False, True, False, False), 125 | ('sdmmc4_dat7_paa7', 'sdmmc4', None, 'up', False, True, False, False), 126 | ('kb_col0_pq0', None, 'in', 'up', True, True, False, False), 127 | ('kb_col1_pq1', 'rsvd2', None, 'down', True, False, False, False), 128 | ('kb_col2_pq2', 'rsvd2', None, 'down', True, False, False, False), 129 | ('kb_col3_pq3', None, 'in', 'none', True, True, False, False), 130 | ('kb_col4_pq4', 'kbc', None, 'down', True, False, False, False), 131 | ('kb_col5_pq5', 'rsvd2', None, 'down', True, False, False, False), 132 | ('kb_col6_pq6', 'rsvd2', None, 'down', True, False, False, False), 133 | ('kb_col7_pq7', 'rsvd2', None, 'down', True, False, False, False), 134 | ('kb_row0_pr0', None, 'in', 'none', False, True, False, False), 135 | ('kb_row1_pr1', 'rsvd2', None, 'down', True, False, False, False), 136 | ('kb_row10_ps2', None, 'in', 'none', False, True, False, False), 137 | ('kb_row11_ps3', None, 'in', 'none', False, True, False, False), 138 | ('kb_row12_ps4', None, 'in', 'none', False, True, False, False), 139 | ('kb_row13_ps5', None, 'in', 'none', False, True, False, False), 140 | ('kb_row14_ps6', None, 'in', 'none', False, True, False, False), 141 | ('kb_row15_ps7', None, 'in', 'none', True, True, False, False), 142 | ('kb_row16_pt0', None, 'in', 'none', False, True, False, False), 143 | ('kb_row17_pt1', None, 'in', 'none', True, True, False, False), 144 | ('kb_row2_pr2', None, 'out0', 'none', False, False, False, False), 145 | ('kb_row3_pr3', 'kbc', None, 'down', True, False, False, False), 146 | ('kb_row4_pr4', None, 'in', 'none', True, True, False, False), 147 | ('kb_row5_pr5', 'rsvd3', None, 'down', True, False, False, False), 148 | ('kb_row6_pr6', None, 'in', 'none', False, True, False, False), 149 | ('kb_row7_pr7', 'rsvd2', None, 'down', True, False, False, False), 150 | ('kb_row8_ps0', 'rsvd2', None, 'down', True, False, False, False), 151 | ('kb_row9_ps1', 'rsvd2', None, 'down', True, False, False, False), 152 | ('sdmmc3_cd_n_pv2', 'rsvd3', None, 'down', True, False, False, False), 153 | ('clk_32k_out_pa0', 'soc', None, 'up', True, True, False, False), 154 | ('pwr_i2c_scl_pz6', 'i2cpwr', None, 'none', False, True, True, False), 155 | ('pwr_i2c_sda_pz7', 'i2cpwr', None, 'none', False, True, True, False), 156 | ('jtag_rtck', 'rtck', None, 'up', False, False, False, False), 157 | ('clk_32k_in', 'clk', None, 'none', True, True, False, False), 158 | ('core_pwr_req', 'pwron', None, 'none', False, False, False, False), 159 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 160 | ('pwr_int_n', 'pmi', None, 'up', True, True, False, False), 161 | ('reset_out_n', 'reset_out_n', None, 'none', False, True, False, False), 162 | ('clk3_out_pee0', 'rsvd2', None, 'down', True, False, False, False), 163 | ('clk3_req_pee1', 'rsvd2', None, 'down', True, False, False, False), 164 | ('dap4_din_pp5', 'rsvd3', None, 'down', True, False, False, False), 165 | ('dap4_dout_pp6', 'rsvd4', None, 'down', True, False, False, False), 166 | ('dap4_fs_pp4', 'rsvd4', None, 'down', True, False, False, False), 167 | ('dap4_sclk_pp7', 'rsvd3', None, 'down', True, False, False, False), 168 | ('gen1_i2c_scl_pc4', 'i2c1', None, 'none', False, True, True, False), 169 | ('gen1_i2c_sda_pc5', 'i2c1', None, 'none', False, True, True, False), 170 | ('pu0', 'rsvd4', None, 'down', True, False, False, False), 171 | ('pu1', 'rsvd1', None, 'down', True, False, False, False), 172 | ('pu2', 'rsvd1', None, 'down', True, False, False, False), 173 | ('pu3', 'gmi', None, 'down', True, False, False, False), 174 | ('pu4', 'gmi', None, 'down', True, False, False, False), 175 | ('pu5', 'gmi', None, 'down', True, False, False, False), 176 | ('pu6', 'rsvd3', None, 'down', True, False, False, False), 177 | ('uart2_cts_n_pj5', 'uartb', None, 'up', True, True, False, False), 178 | ('uart2_rts_n_pj6', 'uartb', None, 'none', False, False, False, False), 179 | ('uart2_rxd_pc3', 'irda', None, 'up', True, True, False, False), 180 | ('uart2_txd_pc2', 'irda', None, 'none', False, False, False, False), 181 | ('uart3_cts_n_pa1', 'gmi', None, 'down', True, False, False, False), 182 | ('uart3_rts_n_pc0', 'gmi', None, 'down', True, False, False, False), 183 | ('uart3_rxd_pw7', 'rsvd2', None, 'down', True, False, False, False), 184 | ('uart3_txd_pw6', 'rsvd2', None, 'down', True, False, False, False), 185 | ('hdmi_cec_pee3', 'cec', None, 'none', False, True, False, False), 186 | ('hdmi_int_pn7', None, 'in', 'down', True, True, False, False), 187 | ('ddc_scl_pv4', 'i2c4', None, 'none', False, True, False, False), 188 | ('ddc_sda_pv5', 'i2c4', None, 'none', False, True, False, False), 189 | ('spdif_out_pk5', 'rsvd2', None, 'down', True, False, False, False), 190 | ('spdif_in_pk6', None, 'out0', 'none', False, False, False, False), 191 | ('usb_vbus_en0_pn4', 'usb', None, 'none', False, True, False, False), 192 | ('usb_vbus_en1_pn5', 'usb', None, 'none', False, True, False, False), 193 | ('dp_hpd_pff0', 'rsvd2', None, 'down', True, False, False, False), 194 | ) 195 | 196 | drive_groups = ( 197 | ) 198 | 199 | mipi_pad_ctrl_groups = ( 200 | #pin, mux 201 | ('dsi_b', 'dsi_b'), 202 | ) 203 | -------------------------------------------------------------------------------- /configs/e2220-1170.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra210' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, e_io_hv 5 | ('aud_mclk_pbb0', 'aud', None, 'none', False, False, False, False), 6 | ('dvfs_pwm_pbb1', 'cldvfs', None, 'none', True, False, False, False), 7 | ('dvfs_clk_pbb2', None, 'out0', 'none', False, False, False, False), 8 | ('gpio_x1_aud_pbb3', None, 'out0', 'none', False, False, False, False), 9 | ('gpio_x3_aud_pbb4', None, 'in', 'up', False, True, False, False), 10 | ('dap1_din_pb1', 'i2s1', None, 'none', False, True, False, False), 11 | ('dap1_dout_pb2', 'i2s1', None, 'none', False, True, False, False), 12 | ('dap1_fs_pb0', 'i2s1', None, 'none', False, True, False, False), 13 | ('dap1_sclk_pb3', 'i2s1', None, 'none', False, True, False, False), 14 | ('spi2_mosi_pb4', None, 'in', 'up', False, True, False, False), 15 | ('spi2_miso_pb5', 'rsvd2', None, 'down', True, False, False, False), 16 | ('spi2_sck_pb6', 'rsvd2', None, 'down', True, False, False, False), 17 | ('spi2_cs0_pb7', 'rsvd2', None, 'down', True, False, False, False), 18 | ('spi2_cs1_pdd0', 'rsvd1', None, 'down', True, False, False, False), 19 | ('dmic1_clk_pe0', 'dmic1', None, 'none', False, False, False, False), 20 | ('dmic1_dat_pe1', 'dmic1', None, 'none', False, True, False, False), 21 | ('dmic2_clk_pe2', 'dmic2', None, 'none', False, False, False, False), 22 | ('dmic2_dat_pe3', 'dmic2', None, 'none', False, True, False, False), 23 | ('dmic3_clk_pe4', 'dmic3', None, 'none', False, False, False, False), 24 | ('dmic3_dat_pe5', 'dmic3', None, 'none', False, True, False, False), 25 | ('pe6', None, 'in', 'up', False, True, False, False), 26 | ('pe7', 'pwm3', None, 'none', False, False, False, False), 27 | ('gen3_i2c_scl_pf0', 'i2c3', None, 'none', False, True, False, False), 28 | ('gen3_i2c_sda_pf1', 'i2c3', None, 'none', False, True, False, False), 29 | ('cam_i2c_scl_ps2', 'i2cvi', None, 'none', False, True, False, False), 30 | ('cam_i2c_sda_ps3', 'i2cvi', None, 'none', False, True, False, False), 31 | ('cam1_mclk_ps0', 'extperiph3', None, 'none', False, False, False, False), 32 | ('cam2_mclk_ps1', 'extperiph3', None, 'none', False, False, False, False), 33 | ('cam_rst_ps4', None, 'out0', 'none', False, False, False, False), 34 | ('cam_af_en_ps5', None, 'out0', 'none', False, False, False, False), 35 | ('cam_flash_en_ps6', None, 'out0', 'none', False, False, False, False), 36 | ('cam1_pwdn_ps7', None, 'out0', 'none', False, False, False, False), 37 | ('cam2_pwdn_pt0', None, 'out0', 'none', False, False, False, False), 38 | ('cam1_strobe_pt1', None, 'out0', 'none', False, False, False, False), 39 | ('pex_l0_clkreq_n_pa1', 'pe0', None, 'up', False, True, False, False), 40 | ('pex_l0_rst_n_pa0', 'pe0', None, 'none', False, False, False, False), 41 | ('pex_l1_clkreq_n_pa4', 'pe1', None, 'up', False, True, False, False), 42 | ('pex_l1_rst_n_pa3', 'pe1', None, 'none', False, False, False, False), 43 | ('pex_wake_n_pa2', 'pe', None, 'up', False, True, False, False), 44 | ('sata_led_active_pa5', None, 'in', 'up', False, True, False, False), 45 | ('pa6', None, 'in', 'up', False, True, False, False), 46 | ('sdmmc1_clk_pm0', 'sdmmc1', None, 'none', False, True, False, False), 47 | ('sdmmc1_cmd_pm1', 'sdmmc1', None, 'up', False, True, False, False), 48 | ('sdmmc1_dat0_pm5', 'sdmmc1', None, 'up', False, True, False, False), 49 | ('sdmmc1_dat1_pm4', 'sdmmc1', None, 'up', False, True, False, False), 50 | ('sdmmc1_dat2_pm3', 'sdmmc1', None, 'up', False, True, False, False), 51 | ('sdmmc1_dat3_pm2', 'sdmmc1', None, 'up', False, True, False, False), 52 | ('sdmmc3_clk_pp0', 'sdmmc3', None, 'none', False, True, False, False), 53 | ('sdmmc3_cmd_pp1', 'sdmmc3', None, 'up', False, True, False, False), 54 | ('sdmmc3_dat0_pp5', 'sdmmc3', None, 'up', False, True, False, False), 55 | ('sdmmc3_dat1_pp4', 'sdmmc3', None, 'up', False, True, False, False), 56 | ('sdmmc3_dat2_pp3', 'sdmmc3', None, 'up', False, True, False, False), 57 | ('sdmmc3_dat3_pp2', 'sdmmc3', None, 'up', False, True, False, False), 58 | ('als_prox_int_px3', None, 'in', 'up', False, True, False, False), 59 | ('temp_alert_px4', None, 'in', 'up', False, True, False, False), 60 | ('motion_int_px2', None, 'in', 'up', False, True, False, False), 61 | ('touch_rst_pv6', None, 'out0', 'none', False, False, False, False), 62 | ('touch_clk_pv7', 'touch', None, 'none', False, False, False, False), 63 | ('touch_int_px1', None, 'in', 'up', False, True, False, False), 64 | ('modem_wake_ap_px0', None, 'in', 'up', False, True, False, False), 65 | ('shutdown', 'shutdown', None, 'none', False, False, False, False), 66 | ('button_power_on_px5', None, 'in', 'up', False, True, False, False), 67 | ('button_vol_up_px6', None, 'in', 'up', False, True, False, False), 68 | ('button_vol_down_px7', None, 'in', 'up', False, True, False, False), 69 | ('button_slide_sw_py0', None, 'in', 'up', False, True, False, False), 70 | ('button_home_py1', None, 'in', 'up', False, True, False, False), 71 | ('lcd_te_py2', 'displaya', None, 'down', False, True, False, False), 72 | ('lcd_bl_pwm_pv0', 'pwm0', None, 'none', False, False, False, False), 73 | ('lcd_bl_en_pv1', None, 'out0', 'none', False, False, False, False), 74 | ('lcd_rst_pv2', None, 'out0', 'none', False, False, False, False), 75 | ('lcd_gpio1_pv3', None, 'in', 'up', False, True, False, False), 76 | ('lcd_gpio2_pv4', 'pwm1', None, 'none', False, False, False, False), 77 | ('ap_ready_pv5', None, 'out0', 'none', False, False, False, False), 78 | ('pwr_i2c_scl_py3', 'i2cpmu', None, 'none', False, True, False, False), 79 | ('pwr_i2c_sda_py4', 'i2cpmu', None, 'none', False, True, False, False), 80 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 81 | ('clk_32k_out_py5', 'soc', None, 'up', False, True, False, False), 82 | ('pz0', None, 'in', 'up', False, True, False, False), 83 | ('pz1', 'sdmmc1', None, 'up', False, True, False, False), 84 | ('pz2', 'sdmmc3', None, 'up', False, True, False, False), 85 | ('pz3', 'sdmmc3', None, 'up', False, True, False, False), 86 | ('pz4', None, 'out0', 'none', False, False, False, False), 87 | ('pz5', 'soc', None, 'up', False, True, False, False), 88 | ('clk_req', 'sys', None, 'none', False, False, False, False), 89 | ('core_pwr_req', 'core', None, 'none', False, False, False, False), 90 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 91 | ('pwr_int_n', 'pmi', None, 'up', False, True, False, False), 92 | ('dap4_din_pj5', 'i2s4b', None, 'none', False, True, False, False), 93 | ('dap4_dout_pj6', 'i2s4b', None, 'none', False, True, False, False), 94 | ('dap4_fs_pj4', 'i2s4b', None, 'none', False, True, False, False), 95 | ('dap4_sclk_pj7', 'i2s4b', None, 'none', False, True, False, False), 96 | ('gen1_i2c_scl_pj1', 'i2c1', None, 'none', False, True, False, False), 97 | ('gen1_i2c_sda_pj0', 'i2c1', None, 'none', False, True, False, False), 98 | ('gen2_i2c_scl_pj2', 'i2c2', None, 'none', False, True, False, False), 99 | ('gen2_i2c_sda_pj3', 'i2c2', None, 'none', False, True, False, False), 100 | ('uart2_tx_pg0', 'uart', None, 'none', False, False, False, False), 101 | ('uart2_rx_pg1', 'uart', None, 'up', False, True, False, False), 102 | ('uart2_rts_pg2', None, 'out0', 'none', False, False, False, False), 103 | ('uart2_cts_pg3', None, 'out0', 'none', False, False, False, False), 104 | ('uart1_tx_pu0', 'uarta', None, 'none', False, False, False, False), 105 | ('uart1_rx_pu1', 'uarta', None, 'up', False, True, False, False), 106 | ('uart1_rts_pu2', 'uarta', None, 'none', False, False, False, False), 107 | ('uart1_cts_pu3', 'uarta', None, 'up', False, True, False, False), 108 | ('jtag_rtck', 'jtag', None, 'none', False, False, False, False), 109 | ('pk0', None, 'in', 'none', False, True, False, False), 110 | ('pk1', None, 'out0', 'none', False, False, False, False), 111 | ('pk2', None, 'out0', 'none', False, False, False, False), 112 | ('pk3', None, 'out0', 'none', False, False, False, False), 113 | ('pk4', None, 'in', 'none', False, True, False, False), 114 | ('pk5', None, 'out0', 'none', False, False, False, False), 115 | ('pk6', None, 'in', 'none', False, True, False, False), 116 | ('pk7', None, 'out0', 'none', False, False, False, False), 117 | ('pl0', None, 'out0', 'none', False, False, False, False), 118 | ('pl1', 'soc', None, 'up', False, True, False, False), 119 | ('spi1_mosi_pc0', 'spi1', None, 'none', False, False, False, False), 120 | ('spi1_miso_pc1', 'spi1', None, 'none', False, True, False, False), 121 | ('spi1_sck_pc2', 'spi1', None, 'none', False, False, False, False), 122 | ('spi1_cs0_pc3', 'spi1', None, 'none', False, False, False, False), 123 | ('spi1_cs1_pc4', 'spi1', None, 'none', False, False, False, False), 124 | ('spi4_mosi_pc7', 'spi4', None, 'none', False, False, False, False), 125 | ('spi4_miso_pd0', 'spi4', None, 'none', False, True, False, False), 126 | ('spi4_sck_pc5', 'spi4', None, 'none', False, False, False, False), 127 | ('spi4_cs0_pc6', 'spi4', None, 'none', False, False, False, False), 128 | ('uart3_tx_pd1', 'uartc', None, 'none', False, False, False, False), 129 | ('uart3_rx_pd2', 'uartc', None, 'none', False, True, False, False), 130 | ('uart3_rts_pd3', 'uartc', None, 'none', False, False, False, False), 131 | ('uart3_cts_pd4', 'uartc', None, 'none', False, True, False, False), 132 | ('wifi_en_ph0', None, 'out0', 'none', False, False, False, False), 133 | ('wifi_rst_ph1', None, 'out0', 'none', False, False, False, False), 134 | ('wifi_wake_ap_ph2', None, 'in', 'up', False, True, False, False), 135 | ('ap_wake_bt_ph3', None, 'out0', 'none', False, False, False, False), 136 | ('bt_rst_ph4', None, 'out0', 'none', False, False, False, False), 137 | ('bt_wake_ap_ph5', None, 'in', 'up', False, True, False, False), 138 | ('ph6', None, 'out0', 'none', False, False, False, False), 139 | ('ap_wake_nfc_ph7', None, 'out0', 'none', False, False, False, False), 140 | ('nfc_en_pi0', None, 'out0', 'none', False, False, False, False), 141 | ('nfc_int_pi1', None, 'in', 'none', False, True, False, False), 142 | ('gps_en_pi2', None, 'out0', 'none', False, False, False, False), 143 | ('gps_rst_pi3', None, 'out0', 'none', False, False, False, False), 144 | ('uart4_tx_pi4', 'uartd', None, 'none', False, False, False, False), 145 | ('uart4_rx_pi5', 'uartd', None, 'none', False, True, False, False), 146 | ('uart4_rts_pi6', 'uartd', None, 'none', False, False, False, False), 147 | ('uart4_cts_pi7', 'uartd', None, 'none', False, True, False, False), 148 | ('qspi_io0_pee2', 'qspi', None, 'none', False, True, False, False), 149 | ('qspi_io1_pee3', 'qspi', None, 'none', False, True, False, False), 150 | ('qspi_sck_pee0', 'qspi', None, 'none', False, True, False, False), 151 | ('qspi_cs_n_pee1', 'qspi', None, 'none', False, False, False, False), 152 | ('qspi_io2_pee4', 'qspi', None, 'none', False, True, False, False), 153 | ('qspi_io3_pee5', 'qspi', None, 'none', False, True, False, False), 154 | ('dap2_din_paa2', 'i2s2', None, 'none', False, True, False, False), 155 | ('dap2_dout_paa3', 'i2s2', None, 'none', False, True, False, False), 156 | ('dap2_fs_paa0', 'i2s2', None, 'none', False, True, False, False), 157 | ('dap2_sclk_paa1', 'i2s2', None, 'none', False, True, False, False), 158 | ('pcc7', None, 'out0', 'none', False, False, False, False), 159 | ('spdif_out_pcc2', 'spdif', None, 'none', False, False, False, False), 160 | ('spdif_in_pcc3', 'spdif', None, 'none', False, True, False, False), 161 | ('usb_vbus_en0_pcc4', 'usb', None, 'none', False, True, False, True), 162 | ('usb_vbus_en1_pcc5', None, 'out0', 'none', False, False, False, False), 163 | ('dp_hpd0_pcc6', None, 'in', 'down', False, True, False, False), 164 | ('hdmi_int_dp_hpd_pcc1', None, 'in', 'down', False, True, False, False), 165 | ('hdmi_cec_pcc0', 'cec', None, 'none', False, True, False, True), 166 | ) 167 | 168 | drive_groups = ( 169 | ) 170 | 171 | mipi_pad_ctrl_groups = ( 172 | #pin, mux 173 | ) 174 | -------------------------------------------------------------------------------- /configs/norrin.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra124' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, rcv_sel 5 | ('dap_mclk1_pw4', 'extperiph1', None, 'none', False, False, False, False), 6 | ('dap_mclk1_req_pee2', 'rsvd4', None, 'down', True, False, False, False), 7 | ('dap1_din_pn1', 'rsvd4', None, 'down', True, False, False, False), 8 | ('dap1_dout_pn2', 'i2s0', None, 'down', True, False, False, False), 9 | ('dap1_fs_pn0', 'rsvd4', None, 'down', True, False, False, False), 10 | ('dap1_sclk_pn3', 'rsvd4', None, 'down', True, False, False, False), 11 | ('dap2_din_pa4', 'i2s1', None, 'none', False, True, False, False), 12 | ('dap2_dout_pa5', 'i2s1', None, 'none', False, True, False, False), 13 | ('dap2_fs_pa2', 'i2s1', None, 'none', False, True, False, False), 14 | ('dap2_sclk_pa3', 'i2s1', None, 'none', False, True, False, False), 15 | ('gpio_x4_aud_px4', None, 'in', 'none', False, True, False, False), 16 | ('gpio_x5_aud_px5', 'rsvd4', None, 'down', True, False, False, False), 17 | ('gpio_x6_aud_px6', 'gmi', None, 'down', True, False, False, False), 18 | ('gpio_x7_aud_px7', None, 'out0', 'none', False, False, False, False), 19 | ('gpio_w2_aud_pw2', 'rsvd2', None, 'down', True, False, False, False), 20 | ('gpio_w3_aud_pw3', None, 'in', 'none', False, True, False, False), 21 | ('dvfs_pwm_px0', 'cldvfs', None, 'none', False, False, False, False), 22 | ('gpio_x1_aud_px1', None, 'in', 'none', False, True, False, False), 23 | ('dvfs_clk_px2', 'cldvfs', None, 'none', False, False, False, False), 24 | ('gpio_x3_aud_px3', 'rsvd4', None, 'down', True, False, False, False), 25 | ('dap3_din_pp1', 'i2s2', None, 'down', True, False, False, False), 26 | ('dap3_dout_pp2', None, 'out0', 'none', False, False, False, False), 27 | ('dap3_fs_pp0', 'i2s2', None, 'down', True, False, False, False), 28 | ('dap3_sclk_pp3', 'rsvd3', None, 'down', True, False, False, False), 29 | ('pv0', None, 'in', 'none', False, True, False, False), 30 | ('pv1', 'rsvd1', None, 'down', True, False, False, False), 31 | ('ulpi_clk_py0', 'spi1', None, 'none', False, False, False, False), 32 | ('ulpi_data0_po1', 'ulpi', None, 'down', True, False, False, False), 33 | ('ulpi_data1_po2', 'ulpi', None, 'down', True, False, False, False), 34 | ('ulpi_data2_po3', 'ulpi', None, 'down', True, False, False, False), 35 | ('ulpi_data3_po4', 'ulpi', None, 'down', True, False, False, False), 36 | ('ulpi_data4_po5', 'ulpi', None, 'down', True, False, False, False), 37 | ('ulpi_data5_po6', 'ulpi', None, 'down', True, False, False, False), 38 | ('ulpi_data6_po7', 'ulpi', None, 'down', True, False, False, False), 39 | ('ulpi_data7_po0', 'ulpi', None, 'down', True, False, False, False), 40 | ('ulpi_dir_py1', 'spi1', None, 'none', False, True, False, False), 41 | ('ulpi_nxt_py2', 'spi1', None, 'none', False, False, False, False), 42 | ('ulpi_stp_py3', 'spi1', None, 'none', False, False, False, False), 43 | ('cam_i2c_scl_pbb1', 'rsvd3', None, 'down', True, False, False, False), 44 | ('cam_i2c_sda_pbb2', 'rsvd3', None, 'down', True, False, False, False), 45 | ('cam_mclk_pcc0', 'vi', None, 'down', True, False, False, False), 46 | ('pbb0', 'vgp6', None, 'down', True, False, False, False), 47 | ('pbb3', 'vgp3', None, 'down', True, False, False, False), 48 | ('pbb4', 'vgp4', None, 'down', True, False, False, False), 49 | ('pbb5', 'rsvd3', None, 'down', True, False, False, False), 50 | ('pbb6', 'rsvd2', None, 'down', True, False, False, False), 51 | ('pbb7', 'rsvd2', None, 'down', True, False, False, False), 52 | ('pcc1', 'rsvd2', None, 'down', True, False, False, False), 53 | ('pcc2', 'rsvd2', None, 'down', True, False, False, False), 54 | ('gen2_i2c_scl_pt5', 'i2c2', None, 'none', False, True, True, False), 55 | ('gen2_i2c_sda_pt6', 'i2c2', None, 'none', False, True, True, False), 56 | ('pj7', None, 'in', 'none', False, True, False, False), 57 | ('pb0', 'rsvd2', None, 'down', True, False, False, False), 58 | ('pb1', 'rsvd2', None, 'down', True, False, False, False), 59 | ('pk7', None, 'in', 'none', False, True, False, False), 60 | ('pg0', None, 'in', 'none', False, True, False, False), 61 | ('pg1', None, 'in', 'none', False, True, False, False), 62 | ('ph2', None, 'in', 'none', False, True, False, False), 63 | ('ph3', 'gmi', None, 'down', True, False, False, False), 64 | ('ph4', None, 'in', 'none', False, True, False, False), 65 | ('ph5', 'rsvd2', None, 'down', True, False, False, False), 66 | ('ph6', None, 'in', 'none', False, True, False, False), 67 | ('ph7', None, 'out1', 'none', False, False, False, False), 68 | ('pg2', None, 'in', 'none', False, True, False, False), 69 | ('pg3', None, 'in', 'none', False, True, False, False), 70 | ('pg4', 'spi4', None, 'none', False, False, False, False), 71 | ('pg5', 'spi4', None, 'none', False, False, False, False), 72 | ('pg6', 'spi4', None, 'none', False, False, False, False), 73 | ('pg7', 'spi4', None, 'none', False, True, False, False), 74 | ('ph0', 'gmi', None, 'down', True, False, False, False), 75 | ('ph1', 'pwm1', None, 'none', False, False, False, False), 76 | ('pk0', 'rsvd1', None, 'down', True, False, False, False), 77 | ('pk1', None, 'out0', 'none', False, False, False, False), 78 | ('pj0', None, 'in', 'up', False, True, False, False), 79 | ('pj2', 'rsvd1', None, 'down', True, False, False, False), 80 | ('pk3', 'gmi', None, 'down', True, False, False, False), 81 | ('pk4', None, 'out0', 'up', False, False, False, False), 82 | ('pk2', None, 'in', 'none', False, True, False, False), 83 | ('pi3', 'spi4', None, 'none', False, False, False, False), 84 | ('pi6', None, 'in', 'none', False, True, False, False), 85 | ('pi2', 'rsvd4', None, 'down', True, False, False, False), 86 | ('pi5', None, 'out1', 'none', False, False, False, False), 87 | ('pi1', None, 'in', 'none', False, True, False, False), 88 | ('pi4', 'gmi', None, 'down', True, False, False, False), 89 | ('pi7', None, 'in', 'none', False, True, False, False), 90 | ('pc7', None, 'in', 'none', False, True, False, False), 91 | ('pi0', None, 'in', 'none', False, True, False, False), 92 | ('pex_l0_clkreq_n_pdd2', 'rsvd2', None, 'down', True, False, False, False), 93 | ('pex_l0_rst_n_pdd1', 'rsvd2', None, 'down', True, False, False, False), 94 | ('pex_l1_clkreq_n_pdd6', 'rsvd2', None, 'down', True, False, False, False), 95 | ('pex_l1_rst_n_pdd5', 'rsvd2', None, 'down', True, False, False, False), 96 | ('pex_wake_n_pdd3', 'rsvd2', None, 'down', True, False, False, False), 97 | ('usb_vbus_en2_pff1', 'rsvd2', None, 'down', True, False, False, False), 98 | ('pff2', 'rsvd2', None, 'down', True, False, False, False), 99 | ('clk2_out_pw5', 'rsvd2', None, 'down', True, False, False, False), 100 | ('clk2_req_pcc5', 'rsvd2', None, 'down', True, False, False, False), 101 | ('sdmmc1_wp_n_pv3', 'sdmmc1', None, 'down', True, False, False, False), 102 | ('sdmmc1_clk_pz0', 'sdmmc1', None, 'none', False, True, False, False), 103 | ('sdmmc1_cmd_pz1', 'sdmmc1', None, 'up', False, True, False, False), 104 | ('sdmmc1_dat0_py7', 'sdmmc1', None, 'up', False, True, False, False), 105 | ('sdmmc1_dat1_py6', 'sdmmc1', None, 'up', False, True, False, False), 106 | ('sdmmc1_dat2_py5', 'sdmmc1', None, 'up', False, True, False, False), 107 | ('sdmmc1_dat3_py4', 'sdmmc1', None, 'up', False, True, False, False), 108 | ('sdmmc3_clk_pa6', 'sdmmc3', None, 'none', False, False, False, False), 109 | ('sdmmc3_cmd_pa7', 'sdmmc3', None, 'up', False, True, False, False), 110 | ('sdmmc3_dat0_pb7', 'sdmmc3', None, 'up', False, True, False, False), 111 | ('sdmmc3_dat1_pb6', 'sdmmc3', None, 'up', False, True, False, False), 112 | ('sdmmc3_dat2_pb5', 'sdmmc3', None, 'up', False, True, False, False), 113 | ('sdmmc3_dat3_pb4', 'sdmmc3', None, 'up', False, True, False, False), 114 | ('sdmmc3_clk_lb_out_pee4', 'sdmmc3', None, 'none', False, False, False, False), 115 | ('sdmmc3_clk_lb_in_pee5', 'sdmmc3', None, 'up', False, True, False, False), 116 | ('sdmmc4_clk_pcc4', 'sdmmc4', None, 'none', False, True, False, False), 117 | ('sdmmc4_cmd_pt7', 'sdmmc4', None, 'none', False, True, False, False), 118 | ('sdmmc4_dat0_paa0', 'sdmmc4', None, 'up', False, True, False, False), 119 | ('sdmmc4_dat1_paa1', 'sdmmc4', None, 'up', False, True, False, False), 120 | ('sdmmc4_dat2_paa2', 'sdmmc4', None, 'up', False, True, False, False), 121 | ('sdmmc4_dat3_paa3', 'sdmmc4', None, 'up', False, True, False, False), 122 | ('sdmmc4_dat4_paa4', 'sdmmc4', None, 'up', False, True, False, False), 123 | ('sdmmc4_dat5_paa5', 'sdmmc4', None, 'up', False, True, False, False), 124 | ('sdmmc4_dat6_paa6', 'sdmmc4', None, 'up', False, True, False, False), 125 | ('sdmmc4_dat7_paa7', 'sdmmc4', None, 'up', False, True, False, False), 126 | ('kb_col0_pq0', None, 'in', 'none', False, True, False, False), 127 | ('kb_col1_pq1', 'rsvd2', None, 'down', True, False, False, False), 128 | ('kb_col2_pq2', None, 'in', 'none', False, True, False, False), 129 | ('kb_col3_pq3', None, 'in', 'none', False, True, False, False), 130 | ('kb_col4_pq4', 'sdmmc3', None, 'up', False, True, False, False), 131 | ('kb_col5_pq5', 'rsvd2', None, 'down', True, False, False, False), 132 | ('kb_col6_pq6', None, 'in', 'none', False, True, False, False), 133 | ('kb_col7_pq7', None, 'in', 'none', False, True, False, False), 134 | ('kb_row0_pr0', None, 'out0', 'none', False, False, False, False), 135 | ('kb_row1_pr1', None, 'in', 'none', False, True, False, False), 136 | ('kb_row10_ps2', 'uarta', None, 'none', False, True, False, False), 137 | ('kb_row11_ps3', None, 'out0', 'none', False, False, False, False), 138 | ('kb_row12_ps4', None, 'out0', 'none', False, False, False, False), 139 | ('kb_row13_ps5', 'rsvd2', None, 'down', True, False, False, False), 140 | ('kb_row14_ps6', 'rsvd2', None, 'down', True, False, False, False), 141 | ('kb_row15_ps7', None, 'in', 'none', False, True, False, False), 142 | ('kb_row16_pt0', 'rsvd2', None, 'down', True, False, False, False), 143 | ('kb_row17_pt1', None, 'in', 'none', False, True, False, False), 144 | ('kb_row2_pr2', 'rsvd2', None, 'down', True, False, False, False), 145 | ('kb_row3_pr3', 'kbc', None, 'down', True, False, False, False), 146 | ('kb_row4_pr4', None, 'in', 'none', False, True, False, False), 147 | ('kb_row5_pr5', 'rsvd3', None, 'down', True, False, False, False), 148 | ('kb_row6_pr6', 'kbc', None, 'down', True, False, False, False), 149 | ('kb_row7_pr7', None, 'in', 'none', False, True, False, False), 150 | ('kb_row8_ps0', 'rsvd2', None, 'down', True, False, False, False), 151 | ('kb_row9_ps1', 'uarta', None, 'down', False, False, False, False), 152 | ('sdmmc3_cd_n_pv2', 'sdmmc3', None, 'up', False, True, False, False), 153 | ('clk_32k_out_pa0', None, 'in', 'none', False, True, False, False), 154 | ('pwr_i2c_scl_pz6', 'i2cpwr', None, 'none', False, True, True, False), 155 | ('pwr_i2c_sda_pz7', 'i2cpwr', None, 'none', False, True, True, False), 156 | ('jtag_rtck', 'rtck', None, 'none', False, False, False, False), 157 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 158 | ('core_pwr_req', 'pwron', None, 'none', False, False, False, False), 159 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 160 | ('pwr_int_n', 'pmi', None, 'none', False, True, False, False), 161 | ('reset_out_n', 'reset_out_n', None, 'none', False, False, False, False), 162 | ('clk3_out_pee0', 'rsvd2', None, 'down', True, False, False, False), 163 | ('clk3_req_pee1', 'rsvd2', None, 'down', True, False, False, False), 164 | ('dap4_din_pp5', 'rsvd3', None, 'down', True, False, False, False), 165 | ('dap4_dout_pp6', 'rsvd4', None, 'down', True, False, False, False), 166 | ('dap4_fs_pp4', 'rsvd4', None, 'down', True, False, False, False), 167 | ('dap4_sclk_pp7', 'rsvd3', None, 'down', True, False, False, False), 168 | ('gen1_i2c_scl_pc4', 'i2c1', None, 'none', False, True, True, False), 169 | ('gen1_i2c_sda_pc5', 'i2c1', None, 'none', False, True, True, False), 170 | ('pu0', 'rsvd4', None, 'down', True, False, False, False), 171 | ('pu1', 'rsvd1', None, 'down', True, False, False, False), 172 | ('pu2', 'rsvd1', None, 'down', True, False, False, False), 173 | ('pu3', 'gmi', None, 'down', True, False, False, False), 174 | ('pu4', None, 'in', 'none', False, True, False, False), 175 | ('pu5', None, 'in', 'up', False, True, False, False), 176 | ('pu6', None, 'in', 'up', False, True, False, False), 177 | ('uart2_cts_n_pj5', 'gmi', None, 'down', True, False, False, False), 178 | ('uart2_rts_n_pj6', 'gmi', None, 'down', True, False, False, False), 179 | ('uart2_rxd_pc3', 'irda', None, 'down', True, False, False, False), 180 | ('uart2_txd_pc2', 'irda', None, 'down', True, False, False, False), 181 | ('uart3_cts_n_pa1', 'gmi', None, 'down', True, False, False, False), 182 | ('uart3_rts_n_pc0', 'gmi', None, 'down', True, False, False, False), 183 | ('uart3_rxd_pw7', 'rsvd2', None, 'down', True, False, False, False), 184 | ('uart3_txd_pw6', 'rsvd2', None, 'down', True, False, False, False), 185 | ('owr', 'rsvd2', None, 'down', True, False, False, False), 186 | ('hdmi_cec_pee3', 'cec', None, 'none', False, True, True, False), 187 | ('hdmi_int_pn7', None, 'in', 'down', False, True, False, False), 188 | ('ddc_scl_pv4', 'i2c4', None, 'none', False, True, False, False), 189 | ('ddc_sda_pv5', 'i2c4', None, 'none', False, True, False, False), 190 | ('spdif_out_pk5', 'rsvd2', None, 'down', True, False, False, False), 191 | ('spdif_in_pk6', None, 'out0', 'down', False, False, False, False), 192 | ('usb_vbus_en0_pn4', 'usb', None, 'none', False, True, True, False), 193 | ('usb_vbus_en1_pn5', 'usb', None, 'none', False, True, True, False), 194 | ('dp_hpd_pff0', 'dp', None, 'up', False, True, False, False), 195 | ) 196 | 197 | drive_groups = ( 198 | ) 199 | -------------------------------------------------------------------------------- /configs/nyan-big.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra124' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, rcv_sel 5 | ('dap_mclk1_pw4', 'extperiph1', None, 'none', False, False, False, False), 6 | ('dap_mclk1_req_pee2', 'rsvd4', None, 'down', True, False, False, False), 7 | ('dap1_din_pn1', 'rsvd4', None, 'down', True, False, False, False), 8 | ('dap1_dout_pn2', 'i2s0', None, 'down', True, False, False, False), 9 | ('dap1_fs_pn0', 'rsvd4', None, 'down', True, False, False, False), 10 | ('dap1_sclk_pn3', 'rsvd4', None, 'down', True, False, False, False), 11 | ('dap2_din_pa4', 'i2s1', None, 'none', False, True, False, False), 12 | ('dap2_dout_pa5', 'i2s1', None, 'none', False, True, False, False), 13 | ('dap2_fs_pa2', 'i2s1', None, 'none', False, True, False, False), 14 | ('dap2_sclk_pa3', 'i2s1', None, 'none', False, True, False, False), 15 | ('gpio_x4_aud_px4', None, 'in', 'none', False, True, False, False), 16 | ('gpio_x5_aud_px5', 'rsvd4', None, 'down', True, False, False, False), 17 | ('gpio_x6_aud_px6', 'gmi', None, 'down', True, False, False, False), 18 | ('gpio_x7_aud_px7', None, 'out0', 'none', False, False, False, False), 19 | ('gpio_w2_aud_pw2', 'rsvd2', None, 'down', True, False, False, False), 20 | ('gpio_w3_aud_pw3', None, 'in', 'none', False, True, False, False), 21 | ('dvfs_pwm_px0', 'cldvfs', None, 'none', False, False, False, False), 22 | ('gpio_x1_aud_px1', None, 'in', 'none', False, True, False, False), 23 | ('dvfs_clk_px2', 'cldvfs', None, 'none', False, False, False, False), 24 | ('gpio_x3_aud_px3', 'rsvd4', None, 'down', True, False, False, False), 25 | ('dap3_din_pp1', 'i2s2', None, 'down', True, False, False, False), 26 | ('dap3_dout_pp2', None, 'out0', 'none', False, False, False, False), 27 | ('dap3_fs_pp0', 'i2s2', None, 'down', True, False, False, False), 28 | ('dap3_sclk_pp3', 'rsvd3', None, 'down', True, False, False, False), 29 | ('pv0', None, 'in', 'none', False, True, False, False), 30 | ('pv1', 'rsvd1', None, 'down', True, False, False, False), 31 | ('ulpi_clk_py0', 'spi1', None, 'none', False, False, False, False), 32 | ('ulpi_data0_po1', 'ulpi', None, 'down', True, False, False, False), 33 | ('ulpi_data1_po2', 'ulpi', None, 'down', True, False, False, False), 34 | ('ulpi_data2_po3', 'ulpi', None, 'down', True, False, False, False), 35 | ('ulpi_data3_po4', 'ulpi', None, 'down', True, False, False, False), 36 | ('ulpi_data4_po5', 'ulpi', None, 'down', True, False, False, False), 37 | ('ulpi_data5_po6', 'ulpi', None, 'down', True, False, False, False), 38 | ('ulpi_data6_po7', 'ulpi', None, 'down', True, False, False, False), 39 | ('ulpi_data7_po0', 'ulpi', None, 'down', True, False, False, False), 40 | ('ulpi_dir_py1', 'spi1', None, 'none', False, True, False, False), 41 | ('ulpi_nxt_py2', 'spi1', None, 'none', False, False, False, False), 42 | ('ulpi_stp_py3', 'spi1', None, 'none', False, False, False, False), 43 | ('cam_i2c_scl_pbb1', 'i2c3', None, 'none', False, True, True, False), 44 | ('cam_i2c_sda_pbb2', 'i2c3', None, 'none', False, True, True, False), 45 | ('cam_mclk_pcc0', 'vi', None, 'down', True, False, False, False), 46 | ('pbb0', 'vgp6', None, 'down', True, False, False, False), 47 | ('pbb3', 'vgp3', None, 'down', True, False, False, False), 48 | ('pbb4', 'vgp4', None, 'down', True, False, False, False), 49 | ('pbb5', 'rsvd3', None, 'down', True, False, False, False), 50 | ('pbb6', 'rsvd2', None, 'down', True, False, False, False), 51 | ('pbb7', 'rsvd2', None, 'down', True, False, False, False), 52 | ('pcc1', 'rsvd2', None, 'down', True, False, False, False), 53 | ('pcc2', 'rsvd2', None, 'down', True, False, False, False), 54 | ('gen2_i2c_scl_pt5', 'i2c2', None, 'none', False, True, True, False), 55 | ('gen2_i2c_sda_pt6', 'i2c2', None, 'none', False, True, True, False), 56 | ('pj7', None, 'in', 'none', False, True, False, False), 57 | ('pb0', 'rsvd2', None, 'down', True, False, False, False), 58 | ('pb1', 'rsvd2', None, 'down', True, False, False, False), 59 | ('pk7', None, 'in', 'none', False, True, False, False), 60 | ('pg0', None, 'in', 'none', False, True, False, False), 61 | ('pg1', None, 'in', 'none', False, True, False, False), 62 | ('ph2', None, 'in', 'none', False, True, False, False), 63 | ('ph3', 'gmi', None, 'down', True, False, False, False), 64 | ('ph4', None, 'in', 'none', False, True, False, False), 65 | ('ph5', 'rsvd2', None, 'down', True, False, False, False), 66 | ('ph6', None, 'in', 'none', False, True, False, False), 67 | ('ph7', None, 'out1', 'none', False, False, False, False), 68 | ('pg2', None, 'in', 'none', False, True, False, False), 69 | ('pg3', None, 'in', 'none', False, True, False, False), 70 | ('pg4', 'spi4', None, 'none', False, False, False, False), 71 | ('pg5', 'spi4', None, 'none', False, False, False, False), 72 | ('pg6', 'spi4', None, 'none', False, False, False, False), 73 | ('pg7', 'spi4', None, 'none', False, True, False, False), 74 | ('ph0', 'gmi', None, 'down', True, False, False, False), 75 | ('ph1', 'pwm1', None, 'none', False, False, False, False), 76 | ('pk0', 'rsvd1', None, 'down', True, False, False, False), 77 | ('pk1', None, 'out0', 'none', False, False, False, False), 78 | ('pj0', None, 'in', 'up', False, True, False, False), 79 | ('pj2', 'rsvd1', None, 'down', True, False, False, False), 80 | ('pk3', 'gmi', None, 'down', True, False, False, False), 81 | ('pk4', None, 'out0', 'up', False, False, False, False), 82 | ('pk2', None, 'in', 'none', False, True, False, False), 83 | ('pi3', 'spi4', None, 'none', False, False, False, False), 84 | ('pi6', None, 'in', 'none', False, True, False, False), 85 | ('pi2', 'rsvd4', None, 'down', True, False, False, False), 86 | ('pi5', None, 'out1', 'up', False, False, False, False), 87 | ('pi1', None, 'in', 'none', False, True, False, False), 88 | ('pi4', 'gmi', None, 'down', True, False, False, False), 89 | ('pi7', None, 'in', 'none', False, True, False, False), 90 | ('pc7', None, 'in', 'none', False, True, False, False), 91 | ('pi0', None, 'in', 'none', False, True, False, False), 92 | ('pex_l0_clkreq_n_pdd2', 'rsvd2', None, 'down', True, False, False, False), 93 | ('pex_l0_rst_n_pdd1', 'rsvd2', None, 'down', True, False, False, False), 94 | ('pex_l1_clkreq_n_pdd6', 'rsvd2', None, 'down', True, False, False, False), 95 | ('pex_l1_rst_n_pdd5', 'rsvd2', None, 'down', True, False, False, False), 96 | ('pex_wake_n_pdd3', 'rsvd2', None, 'down', True, False, False, False), 97 | ('usb_vbus_en2_pff1', 'rsvd2', None, 'down', True, False, False, False), 98 | ('pff2', 'rsvd2', None, 'down', True, False, False, False), 99 | ('clk2_out_pw5', 'rsvd2', None, 'down', True, False, False, False), 100 | ('clk2_req_pcc5', 'rsvd2', None, 'down', True, False, False, False), 101 | ('sdmmc1_wp_n_pv3', 'sdmmc1', None, 'down', True, False, False, False), 102 | ('sdmmc1_clk_pz0', 'sdmmc1', None, 'none', False, True, False, False), 103 | ('sdmmc1_cmd_pz1', 'sdmmc1', None, 'up', False, True, False, False), 104 | ('sdmmc1_dat0_py7', 'sdmmc1', None, 'up', False, True, False, False), 105 | ('sdmmc1_dat1_py6', 'sdmmc1', None, 'up', False, True, False, False), 106 | ('sdmmc1_dat2_py5', 'sdmmc1', None, 'up', False, True, False, False), 107 | ('sdmmc1_dat3_py4', 'sdmmc1', None, 'up', False, True, False, False), 108 | ('sdmmc3_clk_pa6', 'sdmmc3', None, 'none', False, False, False, False), 109 | ('sdmmc3_cmd_pa7', 'sdmmc3', None, 'up', False, True, False, False), 110 | ('sdmmc3_dat0_pb7', 'sdmmc3', None, 'up', False, True, False, False), 111 | ('sdmmc3_dat1_pb6', 'sdmmc3', None, 'up', False, True, False, False), 112 | ('sdmmc3_dat2_pb5', 'sdmmc3', None, 'up', False, True, False, False), 113 | ('sdmmc3_dat3_pb4', 'sdmmc3', None, 'up', False, True, False, False), 114 | ('sdmmc3_clk_lb_out_pee4', 'sdmmc3', None, 'none', False, False, False, False), 115 | ('sdmmc3_clk_lb_in_pee5', 'sdmmc3', None, 'up', False, True, False, False), 116 | ('sdmmc4_clk_pcc4', 'sdmmc4', None, 'none', False, True, False, False), 117 | ('sdmmc4_cmd_pt7', 'sdmmc4', None, 'none', False, True, False, False), 118 | ('sdmmc4_dat0_paa0', 'sdmmc4', None, 'up', False, True, False, False), 119 | ('sdmmc4_dat1_paa1', 'sdmmc4', None, 'up', False, True, False, False), 120 | ('sdmmc4_dat2_paa2', 'sdmmc4', None, 'up', False, True, False, False), 121 | ('sdmmc4_dat3_paa3', 'sdmmc4', None, 'up', False, True, False, False), 122 | ('sdmmc4_dat4_paa4', 'sdmmc4', None, 'up', False, True, False, False), 123 | ('sdmmc4_dat5_paa5', 'sdmmc4', None, 'up', False, True, False, False), 124 | ('sdmmc4_dat6_paa6', 'sdmmc4', None, 'up', False, True, False, False), 125 | ('sdmmc4_dat7_paa7', 'sdmmc4', None, 'up', False, True, False, False), 126 | ('kb_col0_pq0', None, 'in', 'none', False, True, False, False), 127 | ('kb_col1_pq1', 'rsvd2', None, 'down', True, False, False, False), 128 | ('kb_col2_pq2', None, 'in', 'none', False, True, False, False), 129 | ('kb_col3_pq3', None, 'in', 'none', False, True, False, False), 130 | ('kb_col4_pq4', 'sdmmc3', None, 'up', False, True, False, False), 131 | ('kb_col5_pq5', 'rsvd2', None, 'down', True, False, False, False), 132 | ('kb_col6_pq6', None, 'in', 'none', False, True, False, False), 133 | ('kb_col7_pq7', None, 'in', 'none', False, True, False, False), 134 | ('kb_row0_pr0', None, 'out0', 'none', False, False, False, False), 135 | ('kb_row1_pr1', None, 'in', 'none', False, True, False, False), 136 | ('kb_row10_ps2', 'uarta', None, 'none', False, True, False, False), 137 | ('kb_row11_ps3', None, 'out0', 'none', False, False, False, False), 138 | ('kb_row12_ps4', None, 'out0', 'none', False, False, False, False), 139 | ('kb_row13_ps5', 'rsvd2', None, 'down', True, False, False, False), 140 | ('kb_row14_ps6', 'rsvd2', None, 'down', True, False, False, False), 141 | ('kb_row15_ps7', None, 'in', 'none', False, True, False, False), 142 | ('kb_row16_pt0', 'rsvd2', None, 'down', True, False, False, False), 143 | ('kb_row17_pt1', None, 'in', 'none', False, True, False, False), 144 | ('kb_row2_pr2', 'rsvd2', None, 'down', True, False, False, False), 145 | ('kb_row3_pr3', 'kbc', None, 'down', True, False, False, False), 146 | ('kb_row4_pr4', None, 'in', 'none', False, True, False, False), 147 | ('kb_row5_pr5', 'rsvd3', None, 'down', True, False, False, False), 148 | ('kb_row6_pr6', 'kbc', None, 'down', True, False, False, False), 149 | ('kb_row7_pr7', None, 'in', 'none', False, True, False, False), 150 | ('kb_row8_ps0', 'rsvd2', None, 'down', True, False, False, False), 151 | ('kb_row9_ps1', 'uarta', None, 'down', False, False, False, False), 152 | ('sdmmc3_cd_n_pv2', 'sdmmc3', None, 'up', False, True, False, False), 153 | ('clk_32k_out_pa0', None, 'in', 'none', False, True, False, False), 154 | ('pwr_i2c_scl_pz6', 'i2cpwr', None, 'none', False, True, True, False), 155 | ('pwr_i2c_sda_pz7', 'i2cpwr', None, 'none', False, True, True, False), 156 | ('jtag_rtck', 'rtck', None, 'none', False, False, False, False), 157 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 158 | ('core_pwr_req', 'pwron', None, 'none', False, False, False, False), 159 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 160 | ('pwr_int_n', 'pmi', None, 'none', False, True, False, False), 161 | ('reset_out_n', 'reset_out_n', None, 'none', False, False, False, False), 162 | ('clk3_out_pee0', 'rsvd2', None, 'down', True, False, False, False), 163 | ('clk3_req_pee1', 'rsvd2', None, 'down', True, False, False, False), 164 | ('dap4_din_pp5', 'rsvd3', None, 'down', True, False, False, False), 165 | ('dap4_dout_pp6', 'rsvd4', None, 'down', True, False, False, False), 166 | ('dap4_fs_pp4', 'rsvd4', None, 'down', True, False, False, False), 167 | ('dap4_sclk_pp7', 'rsvd3', None, 'down', True, False, False, False), 168 | ('gen1_i2c_scl_pc4', 'i2c1', None, 'none', False, True, True, False), 169 | ('gen1_i2c_sda_pc5', 'i2c1', None, 'none', False, True, True, False), 170 | ('pu0', 'rsvd4', None, 'down', True, False, False, False), 171 | ('pu1', 'rsvd1', None, 'down', True, False, False, False), 172 | ('pu2', 'rsvd1', None, 'down', True, False, False, False), 173 | ('pu3', 'gmi', None, 'down', True, False, False, False), 174 | ('pu4', None, 'in', 'none', False, True, False, False), 175 | ('pu5', None, 'in', 'up', False, True, False, False), 176 | ('pu6', None, 'in', 'up', False, True, False, False), 177 | ('uart2_cts_n_pj5', 'gmi', None, 'down', True, False, False, False), 178 | ('uart2_rts_n_pj6', 'gmi', None, 'down', True, False, False, False), 179 | ('uart2_rxd_pc3', 'irda', None, 'down', True, False, False, False), 180 | ('uart2_txd_pc2', 'irda', None, 'down', True, False, False, False), 181 | ('uart3_cts_n_pa1', 'gmi', None, 'down', True, False, False, False), 182 | ('uart3_rts_n_pc0', 'gmi', None, 'down', True, False, False, False), 183 | ('uart3_rxd_pw7', 'rsvd2', None, 'down', True, False, False, False), 184 | ('uart3_txd_pw6', 'rsvd2', None, 'down', True, False, False, False), 185 | ('owr', 'rsvd2', None, 'down', True, False, False, False), 186 | ('hdmi_cec_pee3', 'cec', None, 'none', False, True, True, False), 187 | ('hdmi_int_pn7', None, 'in', 'down', False, True, False, False), 188 | ('ddc_scl_pv4', 'i2c4', None, 'none', False, True, False, False), 189 | ('ddc_sda_pv5', 'i2c4', None, 'none', False, True, False, False), 190 | ('spdif_out_pk5', 'rsvd2', None, 'down', True, False, False, False), 191 | ('spdif_in_pk6', None, 'out0', 'down', False, False, False, False), 192 | ('usb_vbus_en0_pn4', 'usb', None, 'none', False, True, True, False), 193 | ('usb_vbus_en1_pn5', 'usb', None, 'none', False, True, True, False), 194 | ('dp_hpd_pff0', 'dp', None, 'none', False, True, False, False), 195 | ) 196 | 197 | drive_groups = ( 198 | ) 199 | -------------------------------------------------------------------------------- /configs/nyan-blaze.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra124' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, rcv_sel 5 | ('dap_mclk1_pw4', 'extperiph1', None, 'none', False, False, False, False), 6 | ('dap_mclk1_req_pee2', 'rsvd4', None, 'down', True, False, False, False), 7 | ('dap1_din_pn1', 'rsvd4', None, 'down', True, False, False, False), 8 | ('dap1_dout_pn2', 'i2s0', None, 'down', True, False, False, False), 9 | ('dap1_fs_pn0', 'rsvd4', None, 'down', True, False, False, False), 10 | ('dap1_sclk_pn3', 'rsvd4', None, 'down', True, False, False, False), 11 | ('dap2_din_pa4', 'i2s1', None, 'none', False, True, False, False), 12 | ('dap2_dout_pa5', 'i2s1', None, 'none', False, True, False, False), 13 | ('dap2_fs_pa2', 'i2s1', None, 'none', False, True, False, False), 14 | ('dap2_sclk_pa3', 'i2s1', None, 'none', False, True, False, False), 15 | ('gpio_x4_aud_px4', None, 'in', 'none', False, True, False, False), 16 | ('gpio_x5_aud_px5', 'rsvd4', None, 'down', True, False, False, False), 17 | ('gpio_x6_aud_px6', 'gmi', None, 'down', True, False, False, False), 18 | ('gpio_x7_aud_px7', None, 'out0', 'none', False, False, False, False), 19 | ('gpio_w2_aud_pw2', 'rsvd2', None, 'down', True, False, False, False), 20 | ('gpio_w3_aud_pw3', None, 'in', 'none', False, True, False, False), 21 | ('dvfs_pwm_px0', 'cldvfs', None, 'none', False, False, False, False), 22 | ('gpio_x1_aud_px1', None, 'in', 'none', False, True, False, False), 23 | ('dvfs_clk_px2', 'cldvfs', None, 'none', False, False, False, False), 24 | ('gpio_x3_aud_px3', 'rsvd4', None, 'down', True, False, False, False), 25 | ('dap3_din_pp1', 'i2s2', None, 'down', True, False, False, False), 26 | ('dap3_dout_pp2', None, 'out0', 'none', False, False, False, False), 27 | ('dap3_fs_pp0', 'i2s2', None, 'down', True, False, False, False), 28 | ('dap3_sclk_pp3', 'rsvd3', None, 'down', True, False, False, False), 29 | ('pv0', None, 'in', 'none', False, True, False, False), 30 | ('pv1', 'rsvd1', None, 'down', True, False, False, False), 31 | ('ulpi_clk_py0', 'spi1', None, 'none', False, False, False, False), 32 | ('ulpi_data0_po1', 'ulpi', None, 'down', True, False, False, False), 33 | ('ulpi_data1_po2', 'ulpi', None, 'down', True, False, False, False), 34 | ('ulpi_data2_po3', 'ulpi', None, 'down', True, False, False, False), 35 | ('ulpi_data3_po4', 'ulpi', None, 'down', True, False, False, False), 36 | ('ulpi_data4_po5', 'ulpi', None, 'down', True, False, False, False), 37 | ('ulpi_data5_po6', 'ulpi', None, 'down', True, False, False, False), 38 | ('ulpi_data6_po7', 'ulpi', None, 'down', True, False, False, False), 39 | ('ulpi_data7_po0', 'ulpi', None, 'down', True, False, False, False), 40 | ('ulpi_dir_py1', 'spi1', None, 'none', False, True, False, False), 41 | ('ulpi_nxt_py2', 'spi1', None, 'none', False, False, False, False), 42 | ('ulpi_stp_py3', 'spi1', None, 'none', False, False, False, False), 43 | ('cam_i2c_scl_pbb1', 'i2c3', None, 'none', False, True, True, False), 44 | ('cam_i2c_sda_pbb2', 'i2c3', None, 'none', False, True, True, False), 45 | ('cam_mclk_pcc0', 'vi', None, 'down', True, False, False, False), 46 | ('pbb0', 'vgp6', None, 'down', True, False, False, False), 47 | ('pbb3', 'vgp3', None, 'down', True, False, False, False), 48 | ('pbb4', 'vgp4', None, 'down', True, False, False, False), 49 | ('pbb5', 'rsvd3', None, 'down', True, False, False, False), 50 | ('pbb6', 'rsvd2', None, 'down', True, False, False, False), 51 | ('pbb7', 'rsvd2', None, 'down', True, False, False, False), 52 | ('pcc1', 'rsvd2', None, 'down', True, False, False, False), 53 | ('pcc2', 'rsvd2', None, 'down', True, False, False, False), 54 | ('gen2_i2c_scl_pt5', 'i2c2', None, 'none', False, True, True, False), 55 | ('gen2_i2c_sda_pt6', 'i2c2', None, 'none', False, True, True, False), 56 | ('pj7', None, 'in', 'none', False, True, False, False), 57 | ('pb0', 'rsvd2', None, 'down', True, False, False, False), 58 | ('pb1', 'rsvd2', None, 'down', True, False, False, False), 59 | ('pk7', None, 'in', 'none', False, True, False, False), 60 | ('pg0', None, 'in', 'none', False, True, False, False), 61 | ('pg1', None, 'in', 'none', False, True, False, False), 62 | ('ph2', None, 'in', 'none', False, True, False, False), 63 | ('ph3', 'gmi', None, 'down', True, False, False, False), 64 | ('ph4', None, 'in', 'none', False, True, False, False), 65 | ('ph5', 'rsvd2', None, 'down', True, False, False, False), 66 | ('ph6', None, 'in', 'none', False, True, False, False), 67 | ('ph7', None, 'out1', 'none', False, False, False, False), 68 | ('pg2', None, 'in', 'none', False, True, False, False), 69 | ('pg3', None, 'in', 'none', False, True, False, False), 70 | ('pg4', 'spi4', None, 'none', False, False, False, False), 71 | ('pg5', 'spi4', None, 'none', False, False, False, False), 72 | ('pg6', 'spi4', None, 'none', False, False, False, False), 73 | ('pg7', 'spi4', None, 'none', False, True, False, False), 74 | ('ph0', 'gmi', None, 'down', True, False, False, False), 75 | ('ph1', 'pwm1', None, 'none', False, False, False, False), 76 | ('pk0', 'rsvd1', None, 'down', True, False, False, False), 77 | ('pk1', None, 'out0', 'none', False, False, False, False), 78 | ('pj0', None, 'in', 'up', False, True, False, False), 79 | ('pj2', 'rsvd1', None, 'down', True, False, False, False), 80 | ('pk3', 'gmi', None, 'down', True, False, False, False), 81 | ('pk4', None, 'out0', 'up', False, False, False, False), 82 | ('pk2', None, 'in', 'none', False, True, False, False), 83 | ('pi3', 'spi4', None, 'none', False, False, False, False), 84 | ('pi6', None, 'in', 'none', False, True, False, False), 85 | ('pi2', 'rsvd4', None, 'down', True, False, False, False), 86 | ('pi5', None, 'out1', 'up', False, False, False, False), 87 | ('pi1', None, 'in', 'none', False, True, False, False), 88 | ('pi4', 'gmi', None, 'down', True, False, False, False), 89 | ('pi7', None, 'in', 'none', False, True, False, False), 90 | ('pc7', None, 'in', 'none', False, True, False, False), 91 | ('pi0', None, 'in', 'none', False, True, False, False), 92 | ('pex_l0_clkreq_n_pdd2', 'rsvd2', None, 'down', True, False, False, False), 93 | ('pex_l0_rst_n_pdd1', 'rsvd2', None, 'down', True, False, False, False), 94 | ('pex_l1_clkreq_n_pdd6', 'rsvd2', None, 'down', True, False, False, False), 95 | ('pex_l1_rst_n_pdd5', 'rsvd2', None, 'down', True, False, False, False), 96 | ('pex_wake_n_pdd3', 'rsvd2', None, 'down', True, False, False, False), 97 | ('usb_vbus_en2_pff1', 'rsvd2', None, 'down', True, False, False, False), 98 | ('pff2', 'rsvd2', None, 'down', True, False, False, False), 99 | ('clk2_out_pw5', 'rsvd2', None, 'down', True, False, False, False), 100 | ('clk2_req_pcc5', 'rsvd2', None, 'down', True, False, False, False), 101 | ('sdmmc1_wp_n_pv3', 'sdmmc1', None, 'down', True, False, False, False), 102 | ('sdmmc1_clk_pz0', 'sdmmc1', None, 'none', False, True, False, False), 103 | ('sdmmc1_cmd_pz1', 'sdmmc1', None, 'up', False, True, False, False), 104 | ('sdmmc1_dat0_py7', 'sdmmc1', None, 'up', False, True, False, False), 105 | ('sdmmc1_dat1_py6', 'sdmmc1', None, 'up', False, True, False, False), 106 | ('sdmmc1_dat2_py5', 'sdmmc1', None, 'up', False, True, False, False), 107 | ('sdmmc1_dat3_py4', 'sdmmc1', None, 'up', False, True, False, False), 108 | ('sdmmc3_clk_pa6', 'sdmmc3', None, 'none', False, False, False, False), 109 | ('sdmmc3_cmd_pa7', 'sdmmc3', None, 'up', False, True, False, False), 110 | ('sdmmc3_dat0_pb7', 'sdmmc3', None, 'up', False, True, False, False), 111 | ('sdmmc3_dat1_pb6', 'sdmmc3', None, 'up', False, True, False, False), 112 | ('sdmmc3_dat2_pb5', 'sdmmc3', None, 'up', False, True, False, False), 113 | ('sdmmc3_dat3_pb4', 'sdmmc3', None, 'up', False, True, False, False), 114 | ('sdmmc3_clk_lb_out_pee4', 'sdmmc3', None, 'none', False, False, False, False), 115 | ('sdmmc3_clk_lb_in_pee5', 'sdmmc3', None, 'up', False, True, False, False), 116 | ('sdmmc4_clk_pcc4', 'sdmmc4', None, 'none', False, True, False, False), 117 | ('sdmmc4_cmd_pt7', 'sdmmc4', None, 'none', False, True, False, False), 118 | ('sdmmc4_dat0_paa0', 'sdmmc4', None, 'up', False, True, False, False), 119 | ('sdmmc4_dat1_paa1', 'sdmmc4', None, 'up', False, True, False, False), 120 | ('sdmmc4_dat2_paa2', 'sdmmc4', None, 'up', False, True, False, False), 121 | ('sdmmc4_dat3_paa3', 'sdmmc4', None, 'up', False, True, False, False), 122 | ('sdmmc4_dat4_paa4', 'sdmmc4', None, 'up', False, True, False, False), 123 | ('sdmmc4_dat5_paa5', 'sdmmc4', None, 'up', False, True, False, False), 124 | ('sdmmc4_dat6_paa6', 'sdmmc4', None, 'up', False, True, False, False), 125 | ('sdmmc4_dat7_paa7', 'sdmmc4', None, 'up', False, True, False, False), 126 | ('kb_col0_pq0', None, 'in', 'none', False, True, False, False), 127 | ('kb_col1_pq1', 'rsvd2', None, 'down', True, False, False, False), 128 | ('kb_col2_pq2', None, 'in', 'none', False, True, False, False), 129 | ('kb_col3_pq3', None, 'in', 'none', False, True, False, False), 130 | ('kb_col4_pq4', 'sdmmc3', None, 'up', False, True, False, False), 131 | ('kb_col5_pq5', 'rsvd2', None, 'down', True, False, False, False), 132 | ('kb_col6_pq6', None, 'in', 'none', False, True, False, False), 133 | ('kb_col7_pq7', None, 'in', 'none', False, True, False, False), 134 | ('kb_row0_pr0', None, 'out0', 'none', False, False, False, False), 135 | ('kb_row1_pr1', None, 'in', 'none', False, True, False, False), 136 | ('kb_row10_ps2', 'uarta', None, 'none', False, True, False, False), 137 | ('kb_row11_ps3', None, 'out0', 'none', False, False, False, False), 138 | ('kb_row12_ps4', None, 'out0', 'none', False, False, False, False), 139 | ('kb_row13_ps5', 'rsvd2', None, 'down', True, False, False, False), 140 | ('kb_row14_ps6', 'rsvd2', None, 'down', True, False, False, False), 141 | ('kb_row15_ps7', None, 'in', 'none', False, True, False, False), 142 | ('kb_row16_pt0', 'rsvd2', None, 'down', True, False, False, False), 143 | ('kb_row17_pt1', None, 'in', 'none', False, True, False, False), 144 | ('kb_row2_pr2', 'rsvd2', None, 'down', True, False, False, False), 145 | ('kb_row3_pr3', 'kbc', None, 'down', True, False, False, False), 146 | ('kb_row4_pr4', None, 'in', 'none', False, True, False, False), 147 | ('kb_row5_pr5', 'rsvd3', None, 'down', True, False, False, False), 148 | ('kb_row6_pr6', 'kbc', None, 'down', True, False, False, False), 149 | ('kb_row7_pr7', None, 'in', 'none', False, True, False, False), 150 | ('kb_row8_ps0', 'rsvd2', None, 'down', True, False, False, False), 151 | ('kb_row9_ps1', 'uarta', None, 'down', False, False, False, False), 152 | ('sdmmc3_cd_n_pv2', 'sdmmc3', None, 'up', False, True, False, False), 153 | ('clk_32k_out_pa0', None, 'in', 'none', False, True, False, False), 154 | ('pwr_i2c_scl_pz6', 'i2cpwr', None, 'none', False, True, True, False), 155 | ('pwr_i2c_sda_pz7', 'i2cpwr', None, 'none', False, True, True, False), 156 | ('jtag_rtck', 'rtck', None, 'none', False, False, False, False), 157 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 158 | ('core_pwr_req', 'pwron', None, 'none', False, False, False, False), 159 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 160 | ('pwr_int_n', 'pmi', None, 'none', False, True, False, False), 161 | ('reset_out_n', 'reset_out_n', None, 'none', False, False, False, False), 162 | ('clk3_out_pee0', 'rsvd2', None, 'down', True, False, False, False), 163 | ('clk3_req_pee1', 'rsvd2', None, 'down', True, False, False, False), 164 | ('dap4_din_pp5', 'rsvd3', None, 'down', True, False, False, False), 165 | ('dap4_dout_pp6', 'rsvd4', None, 'down', True, False, False, False), 166 | ('dap4_fs_pp4', 'rsvd4', None, 'down', True, False, False, False), 167 | ('dap4_sclk_pp7', 'rsvd3', None, 'down', True, False, False, False), 168 | ('gen1_i2c_scl_pc4', 'i2c1', None, 'none', False, True, True, False), 169 | ('gen1_i2c_sda_pc5', 'i2c1', None, 'none', False, True, True, False), 170 | ('pu0', 'rsvd4', None, 'down', True, False, False, False), 171 | ('pu1', 'rsvd1', None, 'down', True, False, False, False), 172 | ('pu2', 'rsvd1', None, 'down', True, False, False, False), 173 | ('pu3', 'gmi', None, 'down', True, False, False, False), 174 | ('pu4', None, 'in', 'none', False, True, False, False), 175 | ('pu5', None, 'in', 'up', False, True, False, False), 176 | ('pu6', None, 'in', 'up', False, True, False, False), 177 | ('uart2_cts_n_pj5', 'gmi', None, 'down', True, False, False, False), 178 | ('uart2_rts_n_pj6', 'gmi', None, 'down', True, False, False, False), 179 | ('uart2_rxd_pc3', 'irda', None, 'down', True, False, False, False), 180 | ('uart2_txd_pc2', 'irda', None, 'down', True, False, False, False), 181 | ('uart3_cts_n_pa1', 'gmi', None, 'down', True, False, False, False), 182 | ('uart3_rts_n_pc0', 'gmi', None, 'down', True, False, False, False), 183 | ('uart3_rxd_pw7', 'rsvd2', None, 'down', True, False, False, False), 184 | ('uart3_txd_pw6', 'rsvd2', None, 'down', True, False, False, False), 185 | ('owr', 'rsvd2', None, 'down', True, False, False, False), 186 | ('hdmi_cec_pee3', 'cec', None, 'none', False, True, True, False), 187 | ('hdmi_int_pn7', None, 'in', 'down', False, True, False, False), 188 | ('ddc_scl_pv4', 'i2c4', None, 'none', False, True, False, False), 189 | ('ddc_sda_pv5', 'i2c4', None, 'none', False, True, False, False), 190 | ('spdif_out_pk5', 'rsvd2', None, 'down', True, False, False, False), 191 | ('spdif_in_pk6', None, 'out0', 'down', False, False, False, False), 192 | ('usb_vbus_en0_pn4', 'usb', None, 'up', False, True, False, False), 193 | ('usb_vbus_en1_pn5', 'usb', None, 'up', False, True, False, False), 194 | ('dp_hpd_pff0', 'dp', None, 'none', False, True, False, False), 195 | ) 196 | 197 | drive_groups = ( 198 | ) 199 | -------------------------------------------------------------------------------- /configs/p2371-0000.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra210' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, e_io_hv 5 | ('aud_mclk_pbb0', 'aud', None, 'none', False, False, False, False), 6 | ('dvfs_pwm_pbb1', 'cldvfs', None, 'none', True, False, False, False), 7 | ('dvfs_clk_pbb2', None, 'out0', 'none', False, False, False, False), 8 | ('gpio_x1_aud_pbb3', None, 'out0', 'none', False, False, False, False), 9 | ('gpio_x3_aud_pbb4', 'rsvd0', None, 'down', True, False, False, False), 10 | ('dap1_din_pb1', 'i2s1', None, 'none', False, True, False, False), 11 | ('dap1_dout_pb2', 'i2s1', None, 'none', False, True, False, False), 12 | ('dap1_fs_pb0', 'i2s1', None, 'none', False, True, False, False), 13 | ('dap1_sclk_pb3', 'i2s1', None, 'none', False, True, False, False), 14 | ('spi2_mosi_pb4', 'rsvd2', None, 'down', True, False, False, False), 15 | ('spi2_miso_pb5', 'rsvd2', None, 'down', True, False, False, False), 16 | ('spi2_sck_pb6', 'rsvd2', None, 'down', True, False, False, False), 17 | ('spi2_cs0_pb7', 'rsvd2', None, 'down', True, False, False, False), 18 | ('spi2_cs1_pdd0', 'rsvd1', None, 'down', True, False, False, False), 19 | ('dmic1_clk_pe0', 'dmic1', None, 'none', False, False, False, False), 20 | ('dmic1_dat_pe1', 'dmic1', None, 'down', False, True, False, False), 21 | ('dmic2_clk_pe2', 'dmic2', None, 'none', False, False, False, False), 22 | ('dmic2_dat_pe3', 'dmic2', None, 'down', False, True, False, False), 23 | ('dmic3_clk_pe4', None, 'out0', 'none', False, False, False, False), 24 | ('dmic3_dat_pe5', 'rsvd2', None, 'down', True, False, False, False), 25 | ('pe6', None, 'in', 'up', False, True, False, False), 26 | ('pe7', 'pwm3', None, 'none', False, False, False, False), 27 | ('gen3_i2c_scl_pf0', 'i2c3', None, 'none', False, True, False, False), 28 | ('gen3_i2c_sda_pf1', 'i2c3', None, 'none', False, True, False, False), 29 | ('cam_i2c_scl_ps2', 'i2cvi', None, 'none', False, True, False, False), 30 | ('cam_i2c_sda_ps3', 'i2cvi', None, 'none', False, True, False, False), 31 | ('cam1_mclk_ps0', 'extperiph3', None, 'none', False, False, False, False), 32 | ('cam2_mclk_ps1', 'extperiph3', None, 'none', False, False, False, False), 33 | ('cam_rst_ps4', None, 'out0', 'none', False, False, False, False), 34 | ('cam_af_en_ps5', None, 'out0', 'none', False, False, False, False), 35 | ('cam_flash_en_ps6', None, 'out0', 'none', False, False, False, False), 36 | ('cam1_pwdn_ps7', None, 'out0', 'none', False, False, False, False), 37 | ('cam2_pwdn_pt0', None, 'out0', 'none', False, False, False, False), 38 | ('cam1_strobe_pt1', None, 'out0', 'none', False, False, False, False), 39 | ('pex_l0_clkreq_n_pa1', 'pe0', None, 'none', False, True, False, True), 40 | ('pex_l0_rst_n_pa0', 'pe0', None, 'none', False, False, False, True), 41 | ('pex_l1_clkreq_n_pa4', 'pe1', None, 'none', False, True, False, True), 42 | ('pex_l1_rst_n_pa3', 'pe1', None, 'none', False, False, False, True), 43 | ('pex_wake_n_pa2', 'pe', None, 'none', False, True, False, True), 44 | ('sata_led_active_pa5', None, 'in', 'up', False, True, False, False), 45 | ('pa6', 'rsvd1', None, 'down', True, False, False, False), 46 | ('sdmmc1_clk_pm0', 'sdmmc1', None, 'none', False, True, False, False), 47 | ('sdmmc1_cmd_pm1', 'sdmmc1', None, 'up', False, True, False, False), 48 | ('sdmmc1_dat0_pm5', 'sdmmc1', None, 'up', False, True, False, False), 49 | ('sdmmc1_dat1_pm4', 'sdmmc1', None, 'up', False, True, False, False), 50 | ('sdmmc1_dat2_pm3', 'sdmmc1', None, 'up', False, True, False, False), 51 | ('sdmmc1_dat3_pm2', 'sdmmc1', None, 'up', False, True, False, False), 52 | ('sdmmc3_clk_pp0', 'sdmmc3', None, 'none', False, True, False, False), 53 | ('sdmmc3_cmd_pp1', 'sdmmc3', None, 'up', False, True, False, False), 54 | ('sdmmc3_dat0_pp5', 'sdmmc3', None, 'up', False, True, False, False), 55 | ('sdmmc3_dat1_pp4', 'sdmmc3', None, 'up', False, True, False, False), 56 | ('sdmmc3_dat2_pp3', 'sdmmc3', None, 'up', False, True, False, False), 57 | ('sdmmc3_dat3_pp2', 'sdmmc3', None, 'up', False, True, False, False), 58 | ('als_prox_int_px3', None, 'in', 'up', False, True, False, False), 59 | ('temp_alert_px4', None, 'in', 'up', False, True, False, False), 60 | ('motion_int_px2', None, 'in', 'up', False, True, False, False), 61 | ('touch_rst_pv6', None, 'out0', 'none', False, False, False, False), 62 | ('touch_clk_pv7', None, 'out1', 'none', False, False, False, False), 63 | ('touch_int_px1', None, 'in', 'up', False, True, False, False), 64 | ('modem_wake_ap_px0', None, 'in', 'up', False, True, False, False), 65 | ('shutdown', 'shutdown', None, 'none', False, False, False, False), 66 | ('button_power_on_px5', None, 'in', 'up', False, True, False, False), 67 | ('button_vol_up_px6', None, 'in', 'up', False, True, False, False), 68 | ('button_vol_down_px7', None, 'in', 'up', False, True, False, False), 69 | ('button_slide_sw_py0', 'rsvd0', None, 'down', True, False, False, False), 70 | ('button_home_py1', None, 'in', 'up', False, True, False, False), 71 | ('lcd_te_py2', 'displaya', None, 'down', False, True, False, False), 72 | ('lcd_bl_pwm_pv0', 'pwm0', None, 'none', False, False, False, False), 73 | ('lcd_bl_en_pv1', None, 'out0', 'none', False, False, False, False), 74 | ('lcd_rst_pv2', None, 'out0', 'none', False, False, False, False), 75 | ('lcd_gpio1_pv3', 'rsvd1', None, 'down', True, False, False, False), 76 | ('lcd_gpio2_pv4', 'pwm1', None, 'none', False, False, False, False), 77 | ('ap_ready_pv5', None, 'out0', 'none', False, False, False, False), 78 | ('pwr_i2c_scl_py3', 'i2cpmu', None, 'none', False, True, False, False), 79 | ('pwr_i2c_sda_py4', 'i2cpmu', None, 'none', False, True, False, False), 80 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 81 | ('clk_32k_out_py5', 'soc', None, 'up', False, True, False, False), 82 | ('pz0', None, 'in', 'up', False, True, False, False), 83 | ('pz1', 'sdmmc1', None, 'up', False, True, False, False), 84 | ('pz2', 'rsvd2', None, 'down', True, False, False, False), 85 | ('pz3', 'rsvd1', None, 'down', True, False, False, False), 86 | ('pz4', None, 'out0', 'none', False, False, False, False), 87 | ('pz5', 'soc', None, 'up', False, True, False, False), 88 | ('clk_req', 'sys', None, 'none', False, False, False, False), 89 | ('core_pwr_req', 'core', None, 'none', False, False, False, False), 90 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 91 | ('pwr_int_n', 'pmi', None, 'up', False, True, False, False), 92 | ('dap4_din_pj5', 'i2s4b', None, 'none', False, True, False, False), 93 | ('dap4_dout_pj6', 'i2s4b', None, 'none', False, True, False, False), 94 | ('dap4_fs_pj4', 'i2s4b', None, 'none', False, True, False, False), 95 | ('dap4_sclk_pj7', 'i2s4b', None, 'none', False, True, False, False), 96 | ('gen1_i2c_scl_pj1', 'i2c1', None, 'none', False, True, False, False), 97 | ('gen1_i2c_sda_pj0', 'i2c1', None, 'none', False, True, False, False), 98 | ('gen2_i2c_scl_pj2', 'i2c2', None, 'none', False, True, False, True), 99 | ('gen2_i2c_sda_pj3', 'i2c2', None, 'none', False, True, False, True), 100 | ('uart2_tx_pg0', None, 'in', 'none', False, True, False, False), 101 | ('uart2_rx_pg1', 'uartb', None, 'down', True, False, False, False), 102 | ('uart2_rts_pg2', 'rsvd2', None, 'down', True, False, False, False), 103 | ('uart2_cts_pg3', None, 'out0', 'none', False, False, False, False), 104 | ('uart1_tx_pu0', 'uarta', None, 'none', False, False, False, False), 105 | ('uart1_rx_pu1', 'uarta', None, 'up', False, True, False, False), 106 | ('uart1_rts_pu2', 'uarta', None, 'none', False, False, False, False), 107 | ('uart1_cts_pu3', 'uarta', None, 'up', False, True, False, False), 108 | ('jtag_rtck', 'jtag', None, 'none', False, False, False, False), 109 | ('pk0', 'i2s5b', None, 'up', False, True, False, False), 110 | ('pk1', 'i2s5b', None, 'up', False, True, False, False), 111 | ('pk2', 'i2s5b', None, 'up', False, True, False, False), 112 | ('pk3', 'i2s5b', None, 'up', False, True, False, False), 113 | ('pk4', None, 'in', 'none', False, True, False, False), 114 | ('pk5', None, 'out0', 'none', False, False, False, False), 115 | ('pk6', None, 'in', 'none', False, True, False, False), 116 | ('pk7', None, 'out0', 'none', False, False, False, False), 117 | ('pl0', None, 'out0', 'none', False, False, False, False), 118 | ('pl1', 'soc', None, 'up', False, True, False, False), 119 | ('spi1_mosi_pc0', 'spi1', None, 'down', False, True, False, False), 120 | ('spi1_miso_pc1', 'spi1', None, 'down', False, True, False, False), 121 | ('spi1_sck_pc2', 'spi1', None, 'down', False, True, False, False), 122 | ('spi1_cs0_pc3', 'spi1', None, 'up', False, True, False, False), 123 | ('spi1_cs1_pc4', 'spi1', None, 'up', False, True, False, False), 124 | ('spi4_mosi_pc7', 'spi4', None, 'none', False, False, False, False), 125 | ('spi4_miso_pd0', 'spi4', None, 'none', False, True, False, False), 126 | ('spi4_sck_pc5', 'spi4', None, 'none', False, False, False, False), 127 | ('spi4_cs0_pc6', 'spi4', None, 'none', False, False, False, False), 128 | ('uart3_tx_pd1', 'uartc', None, 'none', False, False, False, False), 129 | ('uart3_rx_pd2', 'uartc', None, 'up', False, True, False, False), 130 | ('uart3_rts_pd3', 'uartc', None, 'none', False, False, False, False), 131 | ('uart3_cts_pd4', 'uartc', None, 'up', False, True, False, False), 132 | ('wifi_en_ph0', None, 'out0', 'none', False, False, False, False), 133 | ('wifi_rst_ph1', 'rsvd0', None, 'down', True, False, False, False), 134 | ('wifi_wake_ap_ph2', None, 'in', 'up', False, True, False, False), 135 | ('ap_wake_bt_ph3', None, 'out0', 'none', False, False, False, False), 136 | ('bt_rst_ph4', None, 'out0', 'none', False, False, False, False), 137 | ('bt_wake_ap_ph5', None, 'in', 'up', False, True, False, False), 138 | ('ph6', None, 'out0', 'none', False, False, False, False), 139 | ('ap_wake_nfc_ph7', None, 'out0', 'none', False, False, False, False), 140 | ('nfc_en_pi0', None, 'out0', 'none', False, False, False, False), 141 | ('nfc_int_pi1', None, 'in', 'none', False, True, False, False), 142 | ('gps_en_pi2', None, 'out0', 'none', False, False, False, False), 143 | ('gps_rst_pi3', None, 'out0', 'none', False, False, False, False), 144 | ('uart4_tx_pi4', 'uartd', None, 'none', False, False, False, False), 145 | ('uart4_rx_pi5', 'uartd', None, 'none', False, True, False, False), 146 | ('uart4_rts_pi6', 'uartd', None, 'none', False, False, False, False), 147 | ('uart4_cts_pi7', 'uartd', None, 'none', False, True, False, False), 148 | ('qspi_io0_pee2', 'rsvd1', None, 'down', True, False, False, False), 149 | ('qspi_io1_pee3', 'rsvd1', None, 'down', True, False, False, False), 150 | ('qspi_sck_pee0', 'rsvd1', None, 'down', True, False, False, False), 151 | ('qspi_cs_n_pee1', 'rsvd1', None, 'down', True, False, False, False), 152 | ('qspi_io2_pee4', 'rsvd1', None, 'down', True, False, False, False), 153 | ('qspi_io3_pee5', 'rsvd1', None, 'down', True, False, False, False), 154 | ('dap2_din_paa2', 'i2s2', None, 'none', False, True, False, False), 155 | ('dap2_dout_paa3', 'i2s2', None, 'none', False, True, False, False), 156 | ('dap2_fs_paa0', 'i2s2', None, 'none', False, True, False, False), 157 | ('dap2_sclk_paa1', 'i2s2', None, 'none', False, True, False, False), 158 | ('pcc7', None, 'out0', 'none', False, False, False, False), 159 | ('spdif_out_pcc2', 'rsvd1', None, 'down', True, False, False, False), 160 | ('spdif_in_pcc3', 'rsvd1', None, 'down', True, False, False, False), 161 | ('usb_vbus_en0_pcc4', 'usb', None, 'none', False, True, False, True), 162 | ('usb_vbus_en1_pcc5', 'rsvd1', None, 'down', True, False, False, False), 163 | ('dp_hpd0_pcc6', None, 'in', 'down', False, True, False, False), 164 | ('hdmi_int_dp_hpd_pcc1', None, 'in', 'down', False, True, False, False), 165 | ('hdmi_cec_pcc0', 'cec', None, 'none', False, True, False, True), 166 | ) 167 | 168 | drive_groups = ( 169 | ) 170 | 171 | mipi_pad_ctrl_groups = ( 172 | #pin, mux 173 | ) 174 | -------------------------------------------------------------------------------- /configs/p2371-2180.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra210' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, e_io_hv 5 | ('aud_mclk_pbb0', None, 'in', 'up', False, True, False, False), 6 | ('gpio_x1_aud_pbb3', None, 'in', 'up', False, True, False, False), 7 | ('pe6', None, 'in', 'down', False, True, False, False), 8 | ('dap1_din_pb1', None, 'in', 'down', False, True, False, False), 9 | ('dap1_dout_pb2', None, 'in', 'down', False, True, False, False), 10 | ('dap1_fs_pb0', None, 'in', 'down', False, True, False, False), 11 | ('dap1_sclk_pb3', None, 'in', 'down', False, True, False, False), 12 | ('pk0', 'i2s5b', None, 'none', False, True, False, False), 13 | ('pk1', 'i2s5b', None, 'none', False, True, False, False), 14 | ('pk2', 'i2s5b', None, 'none', False, True, False, False), 15 | ('pk3', 'i2s5b', None, 'none', False, True, False, False), 16 | ('dmic1_clk_pe0', 'i2s3', None, 'none', False, True, False, False), 17 | ('dmic1_dat_pe1', 'i2s3', None, 'none', False, True, False, False), 18 | ('dmic2_clk_pe2', 'i2s3', None, 'none', False, True, False, False), 19 | ('dmic2_dat_pe3', 'i2s3', None, 'none', False, True, False, False), 20 | ('dap4_din_pj5', 'i2s4b', None, 'none', False, True, False, False), 21 | ('dap4_dout_pj6', 'i2s4b', None, 'none', False, True, False, False), 22 | ('dap4_fs_pj4', 'i2s4b', None, 'none', False, True, False, False), 23 | ('dap4_sclk_pj7', 'i2s4b', None, 'none', False, True, False, False), 24 | ('dmic3_clk_pe4', None, 'in', 'down', False, True, False, False), 25 | ('dmic3_dat_pe5', None, 'in', 'down', False, True, False, False), 26 | ('gen1_i2c_scl_pj1', 'i2c1', None, 'none', False, True, False, False), 27 | ('gen1_i2c_sda_pj0', 'i2c1', None, 'none', False, True, False, False), 28 | ('gen2_i2c_scl_pj2', 'i2c2', None, 'none', False, True, False, True), 29 | ('gen2_i2c_sda_pj3', 'i2c2', None, 'none', False, True, False, True), 30 | ('cam_i2c_scl_ps2', 'i2cvi', None, 'none', False, True, False, False), 31 | ('cam_i2c_sda_ps3', 'i2cvi', None, 'none', False, True, False, False), 32 | ('cam1_mclk_ps0', 'extperiph3', None, 'none', False, False, False, False), 33 | ('cam2_mclk_ps1', 'extperiph3', None, 'none', False, False, False, False), 34 | ('cam_rst_ps4', None, 'out0', 'none', False, False, False, False), 35 | ('cam_af_en_ps5', None, 'out0', 'none', False, False, False, False), 36 | ('cam_flash_en_ps6', None, 'out0', 'none', False, False, False, False), 37 | ('cam1_pwdn_ps7', None, 'out0', 'none', False, False, False, False), 38 | ('cam2_pwdn_pt0', None, 'out0', 'none', False, False, False, False), 39 | ('cam1_strobe_pt1', None, 'out0', 'none', False, False, False, False), 40 | ('pex_l0_clkreq_n_pa1', 'pe0', None, 'none', False, True, False, True), 41 | ('pex_l0_rst_n_pa0', 'pe0', None, 'none', False, False, False, True), 42 | ('pex_l1_clkreq_n_pa4', 'pe1', None, 'none', False, True, False, True), 43 | ('pex_l1_rst_n_pa3', 'pe1', None, 'none', False, False, False, True), 44 | ('pex_wake_n_pa2', 'pe', None, 'none', False, True, False, True), 45 | ('pa6', 'sata', None, 'none', False, False, False, False), 46 | ('sdmmc1_clk_pm0', 'sdmmc1', None, 'none', False, True, False, False), 47 | ('sdmmc1_cmd_pm1', 'sdmmc1', None, 'up', False, True, False, False), 48 | ('sdmmc1_dat0_pm5', 'sdmmc1', None, 'up', False, True, False, False), 49 | ('sdmmc1_dat1_pm4', 'sdmmc1', None, 'up', False, True, False, False), 50 | ('sdmmc1_dat2_pm3', 'sdmmc1', None, 'up', False, True, False, False), 51 | ('sdmmc1_dat3_pm2', 'sdmmc1', None, 'up', False, True, False, False), 52 | ('pz3', None, 'out0', 'none', False, False, False, False), 53 | ('pz1', 'sdmmc1', None, 'up', False, True, False, False), 54 | ('pz4', 'sdmmc1', None, 'up', False, True, False, False), 55 | ('sdmmc3_clk_pp0', 'sdmmc3', None, 'none', False, True, False, False), 56 | ('sdmmc3_cmd_pp1', 'sdmmc3', None, 'up', False, True, False, False), 57 | ('sdmmc3_dat0_pp5', 'sdmmc3', None, 'up', False, True, False, False), 58 | ('sdmmc3_dat1_pp4', 'sdmmc3', None, 'up', False, True, False, False), 59 | ('sdmmc3_dat2_pp3', 'sdmmc3', None, 'up', False, True, False, False), 60 | ('sdmmc3_dat3_pp2', 'sdmmc3', None, 'up', False, True, False, False), 61 | ('nfc_en_pi0', None, 'out0', 'none', False, False, False, False), 62 | ('touch_int_px1', None, 'in', 'up', False, True, False, False), 63 | ('touch_rst_pv6', None, 'out0', 'none', False, False, False, False), 64 | ('touch_clk_pv7', 'touch', None, 'none', False, False, False, False), 65 | ('lcd_te_py2', 'displaya', None, 'down', False, True, False, False), 66 | ('lcd_bl_pwm_pv0', 'pwm0', None, 'none', False, False, False, False), 67 | ('lcd_bl_en_pv1', None, 'out0', 'none', False, False, False, False), 68 | ('lcd_rst_pv2', None, 'out0', 'none', False, False, False, False), 69 | ('gen3_i2c_scl_pf0', 'i2c3', None, 'none', False, True, False, False), 70 | ('gen3_i2c_sda_pf1', 'i2c3', None, 'none', False, True, False, False), 71 | ('pe7', 'pwm3', None, 'none', False, False, False, False), 72 | ('button_power_on_px5', None, 'in', 'up', False, True, False, False), 73 | ('button_vol_up_px6', None, 'in', 'up', False, True, False, False), 74 | ('button_vol_down_px7', None, 'in', 'up', False, True, False, False), 75 | ('button_slide_sw_py0', None, 'in', 'up', False, True, False, False), 76 | ('lcd_gpio1_pv3', None, 'in', 'none', False, True, False, False), 77 | ('pk7', None, 'in', 'up', False, True, False, False), 78 | ('uart1_tx_pu0', 'uarta', None, 'none', False, False, False, False), 79 | ('uart1_rx_pu1', 'uarta', None, 'up', False, True, False, False), 80 | ('uart1_rts_pu2', None, 'in', 'down', False, True, False, False), 81 | ('uart1_cts_pu3', None, 'in', 'down', False, True, False, False), 82 | ('uart3_tx_pd1', 'uartc', None, 'none', False, False, False, False), 83 | ('uart3_rx_pd2', 'uartc', None, 'up', False, True, False, False), 84 | ('uart3_rts_pd3', 'uartc', None, 'none', False, False, False, False), 85 | ('uart3_cts_pd4', 'uartc', None, 'up', False, True, False, False), 86 | ('uart2_tx_pg0', 'uartb', None, 'none', False, False, False, False), 87 | ('uart2_rx_pg1', 'uartb', None, 'up', False, True, False, False), 88 | ('uart2_rts_pg2', 'uartb', None, 'none', False, False, False, False), 89 | ('uart2_cts_pg3', 'uartb', None, 'up', False, True, False, False), 90 | ('jtag_rtck', 'jtag', None, 'none', False, False, False, False), 91 | ('als_prox_int_px3', None, 'in', 'down', False, True, False, False), 92 | ('motion_int_px2', None, 'in', 'up', False, True, False, False), 93 | ('nfc_int_pi1', None, 'in', 'up', False, True, False, False), 94 | ('ap_wake_nfc_ph7', None, 'in', 'down', False, True, False, False), 95 | ('gps_en_pi2', None, 'out0', 'none', False, False, False, False), 96 | ('ph6', None, 'in', 'up', False, True, False, False), 97 | ('pk5', None, 'out0', 'none', False, False, False, False), 98 | ('ap_ready_pv5', None, 'out0', 'none', False, False, False, False), 99 | ('modem_wake_ap_px0', None, 'in', 'down', False, True, False, False), 100 | ('pk4', None, 'in', 'up', False, True, False, False), 101 | ('pk6', None, 'in', 'up', False, True, False, False), 102 | ('pl1', None, 'in', 'up', False, True, False, False), 103 | ('pz2', None, 'in', 'up', False, True, False, False), 104 | ('spi4_mosi_pc7', 'spi4', None, 'down', False, True, False, False), 105 | ('spi4_miso_pd0', 'spi4', None, 'down', False, True, False, False), 106 | ('spi4_sck_pc5', 'spi4', None, 'down', False, True, False, False), 107 | ('spi4_cs0_pc6', 'spi4', None, 'up', False, True, False, False), 108 | ('spi1_mosi_pc0', None, 'in', 'down', False, True, False, False), 109 | ('spi1_miso_pc1', None, 'in', 'down', False, True, False, False), 110 | ('spi1_sck_pc2', None, 'in', 'down', False, True, False, False), 111 | ('spi1_cs0_pc3', None, 'in', 'up', False, True, False, False), 112 | ('spi1_cs1_pc4', None, 'in', 'up', False, True, False, False), 113 | ('spi2_mosi_pb4', 'spi2', None, 'none', False, True, False, False), 114 | ('spi2_miso_pb5', 'spi2', None, 'none', False, True, False, False), 115 | ('spi2_sck_pb6', 'spi2', None, 'none', False, True, False, False), 116 | ('spi2_cs0_pb7', 'spi2', None, 'up', False, True, False, False), 117 | ('spi2_cs1_pdd0', 'spi2', None, 'up', False, True, False, False), 118 | ('usb_vbus_en0_pcc4', 'usb', None, 'none', False, True, False, True), 119 | ('usb_vbus_en1_pcc5', 'usb', None, 'none', False, True, False, True), 120 | ('pz0', None, 'in', 'up', False, True, False, False), 121 | ('dp_hpd0_pcc6', 'dp', None, 'down', False, True, False, False), 122 | ('hdmi_int_dp_hpd_pcc1', None, 'in', 'down', False, True, False, False), 123 | ('hdmi_cec_pcc0', 'cec', None, 'none', False, True, False, True), 124 | ('qspi_io0_pee2', 'rsvd1', None, 'down', True, False, False, False), 125 | ('qspi_io1_pee3', 'rsvd1', None, 'down', True, False, False, False), 126 | ('qspi_sck_pee0', 'rsvd1', None, 'down', True, False, False, False), 127 | ('qspi_cs_n_pee1', 'rsvd1', None, 'down', True, False, False, False), 128 | ('qspi_io2_pee4', 'rsvd1', None, 'down', True, False, False, False), 129 | ('qspi_io3_pee5', 'rsvd1', None, 'down', True, False, False, False), 130 | ('dap2_din_paa2', 'i2s2', None, 'none', False, True, False, False), 131 | ('dap2_dout_paa3', 'i2s2', None, 'none', False, True, False, False), 132 | ('dap2_fs_paa0', 'i2s2', None, 'none', False, True, False, False), 133 | ('dap2_sclk_paa1', 'i2s2', None, 'none', False, True, False, False), 134 | ('wifi_en_ph0', None, 'out0', 'none', False, False, False, False), 135 | ('wifi_rst_ph1', None, 'out0', 'none', False, False, False, False), 136 | ('wifi_wake_ap_ph2', None, 'in', 'up', False, True, False, False), 137 | ('ap_wake_bt_ph3', None, 'out0', 'none', False, False, False, False), 138 | ('bt_rst_ph4', None, 'out0', 'none', False, False, False, False), 139 | ('bt_wake_ap_ph5', None, 'in', 'up', False, True, False, False), 140 | ('gps_rst_pi3', 'rsvd0', None, 'down', True, False, False, False), 141 | ('uart4_tx_pi4', 'uartd', None, 'none', False, False, False, False), 142 | ('uart4_rx_pi5', 'uartd', None, 'none', False, True, False, False), 143 | ('uart4_rts_pi6', 'uartd', None, 'none', False, False, False, False), 144 | ('uart4_cts_pi7', 'uartd', None, 'none', False, True, False, False), 145 | ('pwr_i2c_scl_py3', 'i2cpmu', None, 'none', False, True, False, False), 146 | ('pwr_i2c_sda_py4', 'i2cpmu', None, 'none', False, True, False, False), 147 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 148 | ('clk_32k_out_py5', 'soc', None, 'up', False, True, False, False), 149 | ('dvfs_pwm_pbb1', 'cldvfs', None, 'none', True, False, False, False), 150 | ('dvfs_clk_pbb2', None, 'out0', 'none', False, False, False, False), 151 | ('lcd_gpio2_pv4', 'pwm1', None, 'none', False, False, False, False), 152 | ('button_home_py1', None, 'in', 'up', False, True, False, False), 153 | ('sata_led_active_pa5', None, 'in', 'up', False, True, False, False), 154 | ('gpio_x3_aud_pbb4', 'rsvd0', None, 'down', True, False, False, False), 155 | ('temp_alert_px4', None, 'in', 'up', False, True, False, False), 156 | ('shutdown', 'shutdown', None, 'none', False, False, False, False), 157 | ('pz5', 'soc', None, 'up', False, True, False, False), 158 | ('clk_req', 'rsvd1', None, 'down', True, False, False, False), 159 | ('core_pwr_req', 'core', None, 'none', False, False, False, False), 160 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 161 | ('pwr_int_n', 'pmi', None, 'up', False, True, False, False), 162 | ('pl0', 'rsvd0', None, 'down', True, False, False, False), 163 | ('pcc7', 'rsvd0', None, 'down', True, False, False, False), 164 | ('spdif_out_pcc2', 'rsvd1', None, 'down', True, False, False, False), 165 | ('spdif_in_pcc3', 'rsvd1', None, 'down', True, False, False, False), 166 | ) 167 | 168 | drive_groups = ( 169 | ) 170 | 171 | mipi_pad_ctrl_groups = ( 172 | #pin, mux 173 | ) 174 | -------------------------------------------------------------------------------- /configs/p2571.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra210' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, e_io_hv 5 | ('aud_mclk_pbb0', 'aud', None, 'none', False, False, False, False), 6 | ('dvfs_pwm_pbb1', 'cldvfs', None, 'none', True, False, False, False), 7 | ('dvfs_clk_pbb2', None, 'out0', 'none', False, False, False, False), 8 | ('gpio_x1_aud_pbb3', 'rsvd0', None, 'down', True, False, False, False), 9 | ('gpio_x3_aud_pbb4', 'rsvd0', None, 'down', True, False, False, False), 10 | ('dap1_din_pb1', 'rsvd1', None, 'down', True, False, False, False), 11 | ('dap1_dout_pb2', 'rsvd1', None, 'down', True, False, False, False), 12 | ('dap1_fs_pb0', 'rsvd1', None, 'down', True, False, False, False), 13 | ('dap1_sclk_pb3', 'rsvd1', None, 'down', True, False, False, False), 14 | ('spi2_mosi_pb4', 'rsvd2', None, 'down', True, False, False, False), 15 | ('spi2_miso_pb5', 'rsvd2', None, 'down', True, False, False, False), 16 | ('spi2_sck_pb6', 'rsvd2', None, 'down', True, False, False, False), 17 | ('spi2_cs0_pb7', 'rsvd2', None, 'down', True, False, False, False), 18 | ('spi2_cs1_pdd0', 'rsvd1', None, 'down', True, False, False, False), 19 | ('dmic1_clk_pe0', 'i2s3', None, 'none', False, True, False, False), 20 | ('dmic1_dat_pe1', 'i2s3', None, 'none', False, True, False, False), 21 | ('dmic2_clk_pe2', 'i2s3', None, 'none', False, True, False, False), 22 | ('dmic2_dat_pe3', 'i2s3', None, 'none', False, True, False, False), 23 | ('dmic3_clk_pe4', None, 'out0', 'none', False, False, False, False), 24 | ('dmic3_dat_pe5', 'rsvd2', None, 'down', True, False, False, False), 25 | ('pe6', 'rsvd0', None, 'down', True, False, False, False), 26 | ('pe7', 'pwm3', None, 'none', False, False, False, False), 27 | ('gen3_i2c_scl_pf0', 'i2c3', None, 'none', False, True, False, False), 28 | ('gen3_i2c_sda_pf1', 'i2c3', None, 'none', False, True, False, False), 29 | ('cam_i2c_scl_ps2', 'i2cvi', None, 'none', False, True, False, False), 30 | ('cam_i2c_sda_ps3', 'i2cvi', None, 'none', False, True, False, False), 31 | ('cam1_mclk_ps0', 'rsvd1', None, 'down', True, False, False, False), 32 | ('cam2_mclk_ps1', 'rsvd1', None, 'down', True, False, False, False), 33 | ('cam_rst_ps4', 'rsvd1', None, 'down', True, False, False, False), 34 | ('cam_af_en_ps5', 'rsvd2', None, 'down', True, False, False, False), 35 | ('cam_flash_en_ps6', 'rsvd2', None, 'down', True, False, False, False), 36 | ('cam1_pwdn_ps7', 'rsvd1', None, 'down', True, False, False, False), 37 | ('cam2_pwdn_pt0', 'rsvd1', None, 'down', True, False, False, False), 38 | ('cam1_strobe_pt1', 'rsvd1', None, 'down', True, False, False, False), 39 | ('pex_l0_clkreq_n_pa1', 'rsvd1', None, 'down', True, False, False, False), 40 | ('pex_l0_rst_n_pa0', None, 'in', 'up', False, True, False, False), 41 | ('pex_l1_clkreq_n_pa4', 'rsvd1', None, 'down', True, False, False, False), 42 | ('pex_l1_rst_n_pa3', 'rsvd1', None, 'down', True, False, False, False), 43 | ('pex_wake_n_pa2', 'rsvd1', None, 'down', True, False, False, False), 44 | ('sata_led_active_pa5', None, 'in', 'up', False, True, False, False), 45 | ('pa6', 'rsvd1', None, 'down', True, False, False, False), 46 | ('sdmmc1_clk_pm0', 'sdmmc1', None, 'none', False, True, False, False), 47 | ('sdmmc1_cmd_pm1', 'sdmmc1', None, 'up', False, True, False, False), 48 | ('sdmmc1_dat0_pm5', 'sdmmc1', None, 'up', False, True, False, False), 49 | ('sdmmc1_dat1_pm4', 'sdmmc1', None, 'up', False, True, False, False), 50 | ('sdmmc1_dat2_pm3', 'sdmmc1', None, 'up', False, True, False, False), 51 | ('sdmmc1_dat3_pm2', 'sdmmc1', None, 'up', False, True, False, False), 52 | ('sdmmc3_clk_pp0', 'sdmmc3', None, 'none', False, True, False, False), 53 | ('sdmmc3_cmd_pp1', 'sdmmc3', None, 'up', False, True, False, False), 54 | ('sdmmc3_dat0_pp5', 'sdmmc3', None, 'up', False, True, False, False), 55 | ('sdmmc3_dat1_pp4', 'sdmmc3', None, 'up', False, True, False, False), 56 | ('sdmmc3_dat2_pp3', 'sdmmc3', None, 'up', False, True, False, False), 57 | ('sdmmc3_dat3_pp2', 'sdmmc3', None, 'up', False, True, False, False), 58 | ('als_prox_int_px3', 'rsvd0', None, 'down', True, False, False, False), 59 | ('temp_alert_px4', None, 'in', 'up', False, True, False, False), 60 | ('motion_int_px2', 'rsvd0', None, 'down', True, False, False, False), 61 | ('touch_rst_pv6', None, 'out1', 'none', False, False, False, False), 62 | ('touch_clk_pv7', 'rsvd1', None, 'down', True, False, False, False), 63 | ('touch_int_px1', 'rsvd0', None, 'down', True, False, False, False), 64 | ('modem_wake_ap_px0', 'rsvd0', None, 'down', True, False, False, False), 65 | ('shutdown', 'shutdown', None, 'none', False, False, False, False), 66 | ('button_power_on_px5', 'rsvd0', None, 'down', True, False, False, False), 67 | ('button_vol_up_px6', None, 'in', 'up', False, True, False, False), 68 | ('button_vol_down_px7', None, 'in', 'up', False, True, False, False), 69 | ('button_slide_sw_py0', 'rsvd0', None, 'down', True, False, False, False), 70 | ('button_home_py1', None, 'in', 'up', False, True, False, False), 71 | ('lcd_te_py2', 'rsvd1', None, 'down', True, False, False, False), 72 | ('lcd_bl_pwm_pv0', 'pwm0', None, 'none', False, False, False, False), 73 | ('lcd_bl_en_pv1', None, 'out0', 'none', False, False, False, False), 74 | ('lcd_rst_pv2', 'rsvd0', None, 'down', True, False, False, False), 75 | ('lcd_gpio1_pv3', 'rsvd1', None, 'down', True, False, False, False), 76 | ('lcd_gpio2_pv4', 'pwm1', None, 'none', False, False, False, False), 77 | ('ap_ready_pv5', 'rsvd0', None, 'down', True, False, False, False), 78 | ('pwr_i2c_scl_py3', 'i2cpmu', None, 'none', False, True, False, False), 79 | ('pwr_i2c_sda_py4', 'i2cpmu', None, 'none', False, True, False, False), 80 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 81 | ('clk_32k_out_py5', 'soc', None, 'up', False, True, False, False), 82 | ('pz0', None, 'in', 'up', False, True, False, False), 83 | ('pz1', 'sdmmc1', None, 'up', False, True, False, False), 84 | ('pz2', 'rsvd2', None, 'down', True, False, False, False), 85 | ('pz3', 'rsvd1', None, 'down', True, False, False, False), 86 | ('pz4', None, 'out0', 'none', False, False, False, False), 87 | ('pz5', 'soc', None, 'up', False, True, False, False), 88 | ('clk_req', 'sys', None, 'none', False, False, False, False), 89 | ('core_pwr_req', 'core', None, 'none', False, False, False, False), 90 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 91 | ('pwr_int_n', 'pmi', None, 'up', False, True, False, False), 92 | ('dap4_din_pj5', 'rsvd1', None, 'down', True, False, False, False), 93 | ('dap4_dout_pj6', 'rsvd1', None, 'down', True, False, False, False), 94 | ('dap4_fs_pj4', 'rsvd1', None, 'down', True, False, False, False), 95 | ('dap4_sclk_pj7', 'rsvd1', None, 'down', True, False, False, False), 96 | ('gen1_i2c_scl_pj1', 'i2c1', None, 'none', False, True, False, False), 97 | ('gen1_i2c_sda_pj0', 'i2c1', None, 'none', False, True, False, False), 98 | ('gen2_i2c_scl_pj2', 'i2c2', None, 'none', False, True, False, True), 99 | ('gen2_i2c_sda_pj3', 'i2c2', None, 'none', False, True, False, True), 100 | ('uart2_tx_pg0', None, 'in', 'none', False, True, False, False), 101 | ('uart2_rx_pg1', 'uartb', None, 'down', True, False, False, False), 102 | ('uart2_rts_pg2', 'rsvd2', None, 'down', True, False, False, False), 103 | ('uart2_cts_pg3', 'rsvd2', None, 'down', True, False, False, False), 104 | ('uart1_tx_pu0', 'uarta', None, 'none', False, False, False, False), 105 | ('uart1_rx_pu1', 'uarta', None, 'up', False, True, False, False), 106 | ('uart1_rts_pu2', 'uarta', None, 'none', False, False, False, False), 107 | ('uart1_cts_pu3', 'uarta', None, 'up', False, True, False, False), 108 | ('jtag_rtck', 'jtag', None, 'none', False, False, False, False), 109 | ('pk0', 'rsvd2', None, 'down', True, False, False, False), 110 | ('pk1', 'rsvd2', None, 'down', True, False, False, False), 111 | ('pk2', 'rsvd2', None, 'down', True, False, False, False), 112 | ('pk3', 'rsvd2', None, 'down', True, False, False, False), 113 | ('pk4', 'rsvd1', None, 'down', True, False, False, False), 114 | ('pk5', 'rsvd1', None, 'down', True, False, False, False), 115 | ('pk6', 'rsvd1', None, 'down', True, False, False, False), 116 | ('pk7', 'rsvd1', None, 'down', True, False, False, False), 117 | ('pl0', 'rsvd0', None, 'down', True, False, False, False), 118 | ('pl1', 'rsvd1', None, 'down', True, False, False, False), 119 | ('spi1_mosi_pc0', 'rsvd1', None, 'down', True, False, False, False), 120 | ('spi1_miso_pc1', 'rsvd1', None, 'down', True, False, False, False), 121 | ('spi1_sck_pc2', 'rsvd1', None, 'down', True, False, False, False), 122 | ('spi1_cs0_pc3', 'rsvd1', None, 'down', True, False, False, False), 123 | ('spi1_cs1_pc4', 'rsvd1', None, 'down', True, False, False, False), 124 | ('spi4_mosi_pc7', 'rsvd1', None, 'down', True, False, False, False), 125 | ('spi4_miso_pd0', 'rsvd1', None, 'down', True, False, False, False), 126 | ('spi4_sck_pc5', 'rsvd1', None, 'down', True, False, False, False), 127 | ('spi4_cs0_pc6', 'rsvd1', None, 'down', True, False, False, False), 128 | ('uart3_tx_pd1', 'rsvd2', None, 'down', True, False, False, False), 129 | ('uart3_rx_pd2', 'rsvd2', None, 'down', True, False, False, False), 130 | ('uart3_rts_pd3', 'rsvd2', None, 'down', True, False, False, False), 131 | ('uart3_cts_pd4', None, 'in', 'none', False, True, False, False), 132 | ('wifi_en_ph0', None, 'out0', 'none', False, False, False, False), 133 | ('wifi_rst_ph1', 'rsvd0', None, 'down', True, False, False, False), 134 | ('wifi_wake_ap_ph2', None, 'in', 'up', False, True, False, False), 135 | ('ap_wake_bt_ph3', None, 'out0', 'none', False, False, False, False), 136 | ('bt_rst_ph4', None, 'out0', 'none', False, False, False, False), 137 | ('bt_wake_ap_ph5', None, 'in', 'up', False, True, False, False), 138 | ('ph6', 'rsvd0', None, 'down', True, False, False, False), 139 | ('ap_wake_nfc_ph7', 'rsvd0', None, 'down', True, False, False, False), 140 | ('nfc_en_pi0', None, 'out0', 'none', False, False, False, False), 141 | ('nfc_int_pi1', None, 'in', 'none', False, True, False, False), 142 | ('gps_en_pi2', 'rsvd0', None, 'down', True, False, False, False), 143 | ('gps_rst_pi3', 'rsvd0', None, 'down', True, False, False, False), 144 | ('uart4_tx_pi4', 'uartd', None, 'none', False, False, False, False), 145 | ('uart4_rx_pi5', 'uartd', None, 'none', False, True, False, False), 146 | ('uart4_rts_pi6', 'uartd', None, 'none', False, False, False, False), 147 | ('uart4_cts_pi7', 'uartd', None, 'none', False, True, False, False), 148 | ('qspi_io0_pee2', 'rsvd1', None, 'down', True, False, False, False), 149 | ('qspi_io1_pee3', 'rsvd1', None, 'down', True, False, False, False), 150 | ('qspi_sck_pee0', 'rsvd1', None, 'down', True, False, False, False), 151 | ('qspi_cs_n_pee1', 'rsvd1', None, 'down', True, False, False, False), 152 | ('qspi_io2_pee4', 'rsvd1', None, 'down', True, False, False, False), 153 | ('qspi_io3_pee5', 'rsvd1', None, 'down', True, False, False, False), 154 | ('dap2_din_paa2', 'i2s2', None, 'none', False, True, False, False), 155 | ('dap2_dout_paa3', 'i2s2', None, 'none', False, True, False, False), 156 | ('dap2_fs_paa0', 'i2s2', None, 'none', False, True, False, False), 157 | ('dap2_sclk_paa1', 'i2s2', None, 'none', False, True, False, False), 158 | ('pcc7', 'rsvd0', None, 'down', True, False, False, False), 159 | ('spdif_out_pcc2', 'rsvd1', None, 'down', True, False, False, False), 160 | ('spdif_in_pcc3', None, 'in', 'none', False, True, False, False), 161 | ('usb_vbus_en0_pcc4', 'usb', None, 'none', False, True, False, True), 162 | ('usb_vbus_en1_pcc5', 'usb', None, 'none', False, True, False, True), 163 | ('dp_hpd0_pcc6', 'rsvd1', None, 'down', True, False, False, False), 164 | ('hdmi_int_dp_hpd_pcc1', None, 'in', 'down', False, True, False, False), 165 | ('hdmi_cec_pcc0', 'cec', None, 'none', False, True, False, True), 166 | ) 167 | 168 | drive_groups = ( 169 | ) 170 | 171 | mipi_pad_ctrl_groups = ( 172 | #pin, mux 173 | ) 174 | -------------------------------------------------------------------------------- /configs/p3450-porg.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra210' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, e_io_hv 5 | ('aud_mclk_pbb0', None, 'in', 'up', False, True, False, False), 6 | ('dvfs_pwm_pbb1', 'cldvfs', None, 'none', True, False, False, False), 7 | ('dvfs_clk_pbb2', 'rsvd0', None, 'down', True, False, False, False), 8 | ('gpio_x1_aud_pbb3', 'rsvd0', None, 'down', True, False, False, False), 9 | ('gpio_x3_aud_pbb4', 'rsvd0', None, 'down', True, False, False, False), 10 | ('dap1_din_pb1', 'rsvd1', None, 'down', True, False, False, False), 11 | ('dap1_dout_pb2', 'rsvd1', None, 'down', True, False, False, False), 12 | ('dap1_fs_pb0', 'rsvd1', None, 'down', True, False, False, False), 13 | ('dap1_sclk_pb3', 'rsvd1', None, 'down', True, False, False, False), 14 | ('spi2_mosi_pb4', None, 'in', 'down', False, True, False, False), 15 | ('spi2_miso_pb5', None, 'in', 'down', False, True, False, False), 16 | ('spi2_sck_pb6', None, 'in', 'down', False, True, False, False), 17 | ('spi2_cs0_pb7', None, 'in', 'down', False, True, False, False), 18 | ('spi2_cs1_pdd0', None, 'in', 'down', False, True, False, False), 19 | ('dmic1_clk_pe0', 'i2s3', None, 'none', False, True, False, False), 20 | ('dmic1_dat_pe1', 'i2s3', None, 'none', False, True, False, False), 21 | ('dmic2_clk_pe2', 'i2s3', None, 'none', False, True, False, False), 22 | ('dmic2_dat_pe3', 'i2s3', None, 'none', False, True, False, False), 23 | ('dmic3_clk_pe4', 'rsvd2', None, 'down', True, False, False, False), 24 | ('dmic3_dat_pe5', 'rsvd2', None, 'down', True, False, False, False), 25 | ('pe6', None, 'in', 'down', False, True, False, False), 26 | ('pe7', 'pwm3', None, 'none', False, False, False, False), 27 | ('gen3_i2c_scl_pf0', 'i2c3', None, 'none', False, True, False, False), 28 | ('gen3_i2c_sda_pf1', 'i2c3', None, 'none', False, True, False, False), 29 | ('cam_i2c_scl_ps2', 'i2cvi', None, 'none', False, True, False, True), 30 | ('cam_i2c_sda_ps3', 'i2cvi', None, 'none', False, True, False, True), 31 | ('cam1_mclk_ps0', 'extperiph3', None, 'none', False, False, False, False), 32 | ('cam2_mclk_ps1', 'extperiph3', None, 'none', False, False, False, False), 33 | ('cam_rst_ps4', 'rsvd1', None, 'down', True, False, False, False), 34 | ('cam_af_en_ps5', None, 'in', 'up', False, True, False, False), 35 | ('cam_flash_en_ps6', 'rsvd2', None, 'down', True, False, False, False), 36 | ('cam1_pwdn_ps7', None, 'out0', 'none', False, False, False, False), 37 | ('cam2_pwdn_pt0', None, 'out0', 'none', False, False, False, False), 38 | ('cam1_strobe_pt1', 'rsvd1', None, 'down', True, False, False, False), 39 | ('pex_l0_clkreq_n_pa1', 'pe0', None, 'none', False, True, False, True), 40 | ('pex_l0_rst_n_pa0', 'pe0', None, 'none', False, False, False, True), 41 | ('pex_l1_clkreq_n_pa4', 'pe1', None, 'none', False, True, False, True), 42 | ('pex_l1_rst_n_pa3', 'pe1', None, 'none', False, False, False, True), 43 | ('pex_wake_n_pa2', 'pe', None, 'none', False, True, False, True), 44 | ('sata_led_active_pa5', None, 'in', 'up', False, True, False, False), 45 | ('pa6', None, 'out0', 'none', False, False, False, False), 46 | ('sdmmc1_clk_pm0', 'rsvd1', None, 'down', True, False, False, False), 47 | ('sdmmc1_cmd_pm1', 'rsvd2', None, 'down', True, False, False, False), 48 | ('sdmmc1_dat0_pm5', 'rsvd1', None, 'down', True, False, False, False), 49 | ('sdmmc1_dat1_pm4', 'rsvd2', None, 'down', True, False, False, False), 50 | ('sdmmc1_dat2_pm3', 'rsvd2', None, 'down', True, False, False, False), 51 | ('sdmmc1_dat3_pm2', 'rsvd2', None, 'down', True, False, False, False), 52 | ('sdmmc3_clk_pp0', 'sdmmc3', None, 'none', False, True, False, False), 53 | ('sdmmc3_cmd_pp1', 'sdmmc3', None, 'up', False, True, False, False), 54 | ('sdmmc3_dat0_pp5', 'sdmmc3', None, 'up', False, True, False, False), 55 | ('sdmmc3_dat1_pp4', 'sdmmc3', None, 'up', False, True, False, False), 56 | ('sdmmc3_dat2_pp3', 'sdmmc3', None, 'up', False, True, False, False), 57 | ('sdmmc3_dat3_pp2', 'sdmmc3', None, 'up', False, True, False, False), 58 | ('als_prox_int_px3', None, 'out1', 'none', False, False, False, False), 59 | ('temp_alert_px4', None, 'in', 'up', False, True, False, False), 60 | ('motion_int_px2', 'rsvd0', None, 'down', True, False, False, False), 61 | ('touch_rst_pv6', 'rsvd0', None, 'down', True, False, False, False), 62 | ('touch_clk_pv7', 'rsvd1', None, 'down', True, False, False, False), 63 | ('touch_int_px1', 'rsvd0', None, 'down', True, False, False, False), 64 | ('modem_wake_ap_px0', 'rsvd0', None, 'down', True, False, False, False), 65 | ('shutdown', 'shutdown', None, 'none', False, False, False, False), 66 | ('button_power_on_px5', None, 'in', 'up', False, True, False, False), 67 | ('button_vol_up_px6', None, 'in', 'up', False, True, False, False), 68 | ('button_vol_down_px7', 'rsvd0', None, 'down', True, False, False, False), 69 | ('button_slide_sw_py0', 'rsvd0', None, 'down', True, False, False, False), 70 | ('button_home_py1', None, 'in', 'up', False, True, False, False), 71 | ('lcd_te_py2', None, 'in', 'down', False, True, False, False), 72 | ('lcd_bl_pwm_pv0', None, 'in', 'down', False, True, False, False), 73 | ('lcd_bl_en_pv1', None, 'in', 'none', False, True, False, False), 74 | ('lcd_rst_pv2', 'rsvd0', None, 'down', True, False, False, False), 75 | ('lcd_gpio1_pv3', 'rsvd1', None, 'down', True, False, False, False), 76 | ('lcd_gpio2_pv4', 'pwm1', None, 'none', False, False, False, False), 77 | ('ap_ready_pv5', 'rsvd0', None, 'down', True, False, False, False), 78 | ('pwr_i2c_scl_py3', 'i2cpmu', None, 'none', False, True, False, False), 79 | ('pwr_i2c_sda_py4', 'i2cpmu', None, 'none', False, True, False, False), 80 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 81 | ('clk_32k_out_py5', 'rsvd2', None, 'down', True, False, False, False), 82 | ('pz0', None, 'in', 'up', False, True, False, False), 83 | ('pz1', 'sdmmc1', None, 'up', False, True, False, False), 84 | ('pz2', None, 'in', 'up', False, True, False, False), 85 | ('pz3', None, 'out0', 'none', False, False, False, False), 86 | ('pz4', 'rsvd1', None, 'down', True, False, False, False), 87 | ('pz5', 'soc', None, 'up', False, True, False, False), 88 | ('clk_req', 'rsvd1', None, 'down', True, False, False, False), 89 | ('core_pwr_req', 'core', None, 'none', False, False, False, False), 90 | ('cpu_pwr_req', 'rsvd1', None, 'down', True, False, False, False), 91 | ('pwr_int_n', 'pmi', None, 'up', False, True, False, False), 92 | ('dap4_din_pj5', None, 'in', 'down', False, True, False, False), 93 | ('dap4_dout_pj6', None, 'in', 'down', False, True, False, False), 94 | ('dap4_fs_pj4', None, 'in', 'down', False, True, False, False), 95 | ('dap4_sclk_pj7', None, 'in', 'down', False, True, False, False), 96 | ('gen1_i2c_scl_pj1', 'i2c1', None, 'none', False, True, False, True), 97 | ('gen1_i2c_sda_pj0', 'i2c1', None, 'none', False, True, False, True), 98 | ('gen2_i2c_scl_pj2', 'i2c2', None, 'none', False, True, False, True), 99 | ('gen2_i2c_sda_pj3', 'i2c2', None, 'none', False, True, False, True), 100 | ('uart2_tx_pg0', 'uartb', None, 'none', False, False, False, False), 101 | ('uart2_rx_pg1', 'uartb', None, 'down', False, True, False, False), 102 | ('uart2_rts_pg2', None, 'in', 'down', False, True, False, False), 103 | ('uart2_cts_pg3', None, 'in', 'down', False, True, False, False), 104 | ('uart1_tx_pu0', 'uarta', None, 'none', False, False, False, False), 105 | ('uart1_rx_pu1', 'uarta', None, 'none', False, True, False, False), 106 | ('uart1_rts_pu2', 'rsvd1', None, 'down', True, False, False, False), 107 | ('uart1_cts_pu3', 'rsvd1', None, 'down', True, False, False, False), 108 | ('jtag_rtck', 'jtag', None, 'none', False, False, False, False), 109 | ('pk0', 'rsvd2', None, 'down', True, False, False, False), 110 | ('pk1', 'rsvd2', None, 'down', True, False, False, False), 111 | ('pk2', 'rsvd2', None, 'down', True, False, False, False), 112 | ('pk3', 'rsvd2', None, 'down', True, False, False, False), 113 | ('pk4', 'rsvd1', None, 'down', True, False, False, False), 114 | ('pk5', 'rsvd1', None, 'down', True, False, False, False), 115 | ('pk6', 'rsvd1', None, 'down', True, False, False, False), 116 | ('pk7', 'rsvd1', None, 'down', True, False, False, False), 117 | ('pl0', 'rsvd0', None, 'down', True, False, False, False), 118 | ('pl1', 'rsvd1', None, 'down', True, False, False, False), 119 | ('spi1_mosi_pc0', None, 'in', 'down', False, True, False, False), 120 | ('spi1_miso_pc1', None, 'in', 'down', False, True, False, False), 121 | ('spi1_sck_pc2', None, 'in', 'down', False, True, False, False), 122 | ('spi1_cs0_pc3', None, 'in', 'up', False, True, False, False), 123 | ('spi1_cs1_pc4', None, 'in', 'up', False, True, False, False), 124 | ('spi4_mosi_pc7', 'rsvd1', None, 'down', True, False, False, False), 125 | ('spi4_miso_pd0', 'rsvd1', None, 'down', True, False, False, False), 126 | ('spi4_sck_pc5', 'rsvd1', None, 'down', True, False, False, False), 127 | ('spi4_cs0_pc6', 'rsvd1', None, 'down', True, False, False, False), 128 | ('uart3_tx_pd1', 'uartc', None, 'none', False, False, False, False), 129 | ('uart3_rx_pd2', 'uartc', None, 'none', False, True, False, False), 130 | ('uart3_rts_pd3', 'uartc', None, 'up', False, False, False, False), 131 | ('uart3_cts_pd4', 'uartc', None, 'up', False, True, False, False), 132 | ('wifi_en_ph0', None, 'out0', 'none', False, False, False, False), 133 | ('wifi_rst_ph1', 'rsvd0', None, 'down', True, False, False, False), 134 | ('wifi_wake_ap_ph2', None, 'in', 'down', False, True, False, False), 135 | ('ap_wake_bt_ph3', None, 'out0', 'none', False, False, False, False), 136 | ('bt_rst_ph4', None, 'out0', 'none', False, False, False, False), 137 | ('bt_wake_ap_ph5', None, 'in', 'up', False, True, False, False), 138 | ('ph6', None, 'in', 'up', False, True, False, False), 139 | ('ap_wake_nfc_ph7', None, 'out0', 'none', False, False, False, False), 140 | ('nfc_en_pi0', None, 'out0', 'none', False, False, False, False), 141 | ('nfc_int_pi1', None, 'out0', 'none', False, False, False, False), 142 | ('gps_en_pi2', None, 'out0', 'none', False, False, False, False), 143 | ('gps_rst_pi3', 'rsvd0', None, 'down', True, False, False, False), 144 | ('uart4_tx_pi4', 'uartd', None, 'none', False, False, False, False), 145 | ('uart4_rx_pi5', 'uartd', None, 'none', False, True, False, False), 146 | ('uart4_rts_pi6', 'uartd', None, 'none', False, False, False, False), 147 | ('uart4_cts_pi7', 'uartd', None, 'up', False, True, False, False), 148 | ('qspi_io0_pee2', 'rsvd1', None, 'down', True, False, False, False), 149 | ('qspi_io1_pee3', 'rsvd1', None, 'down', True, False, False, False), 150 | ('qspi_sck_pee0', 'rsvd1', None, 'down', True, False, False, False), 151 | ('qspi_cs_n_pee1', 'rsvd1', None, 'down', True, False, False, False), 152 | ('qspi_io2_pee4', 'rsvd1', None, 'down', True, False, False, False), 153 | ('qspi_io3_pee5', 'rsvd1', None, 'down', True, False, False, False), 154 | ('dap2_din_paa2', 'i2s2', None, 'none', False, True, False, False), 155 | ('dap2_dout_paa3', 'i2s2', None, 'none', False, True, False, False), 156 | ('dap2_fs_paa0', 'i2s2', None, 'none', False, True, False, False), 157 | ('dap2_sclk_paa1', 'i2s2', None, 'none', False, True, False, False), 158 | ('pcc7', None, 'out1', 'none', False, False, False, False), 159 | ('spdif_out_pcc2', 'rsvd1', None, 'down', True, False, False, False), 160 | ('spdif_in_pcc3', 'rsvd1', None, 'down', True, False, False, False), 161 | ('usb_vbus_en0_pcc4', None, 'in', 'up', False, True, False, False), 162 | ('usb_vbus_en1_pcc5', 'rsvd1', None, 'down', True, False, False, False), 163 | ('dp_hpd0_pcc6', 'dp', None, 'none', False, True, False, False), 164 | ('hdmi_int_dp_hpd_pcc1', 'dp', None, 'none', False, True, False, False), 165 | ('hdmi_cec_pcc0', 'cec', None, 'none', False, True, False, True), 166 | ) 167 | 168 | drive_groups = ( 169 | ) 170 | 171 | mipi_pad_ctrl_groups = ( 172 | #pin, mux 173 | ) 174 | -------------------------------------------------------------------------------- /configs/tegra210-smaug.board: -------------------------------------------------------------------------------- 1 | soc = 'tegra210' 2 | 3 | pins = ( 4 | #pin, mux, gpio_init, pull, tri, e_inp, od, e_io_hv 5 | ('aud_mclk_pbb0', 'aud', None, 'none', False, False, False, False), 6 | ('dvfs_pwm_pbb1', 'rsvd0', None, 'down', True, False, False, False), 7 | ('dvfs_clk_pbb2', 'rsvd0', None, 'down', True, False, False, False), 8 | ('gpio_x1_aud_pbb3', None, 'out0', 'none', False, False, False, False), 9 | ('gpio_x3_aud_pbb4', None, 'in', 'up', False, True, False, False), 10 | ('dap1_din_pb1', 'i2s1', None, 'none', False, True, False, False), 11 | ('dap1_dout_pb2', 'i2s1', None, 'none', False, False, False, False), 12 | ('dap1_fs_pb0', 'i2s1', None, 'none', False, False, False, False), 13 | ('dap1_sclk_pb3', 'i2s1', None, 'none', False, False, False, False), 14 | ('spi2_mosi_pb4', None, 'in', 'up', False, True, False, False), 15 | ('spi2_miso_pb5', 'rsvd2', None, 'down', True, False, False, False), 16 | ('spi2_sck_pb6', 'rsvd2', None, 'down', True, False, False, False), 17 | ('spi2_cs0_pb7', 'rsvd2', None, 'down', True, False, False, False), 18 | ('spi2_cs1_pdd0', 'rsvd1', None, 'down', True, False, False, False), 19 | ('dmic1_clk_pe0', None, 'in', 'none', False, True, False, False), 20 | ('dmic1_dat_pe1', None, 'out0', 'none', False, False, False, False), 21 | ('dmic2_clk_pe2', None, 'in', 'none', False, True, False, False), 22 | ('dmic2_dat_pe3', None, 'in', 'up', False, True, False, False), 23 | ('dmic3_clk_pe4', None, 'in', 'none', False, True, False, False), 24 | ('dmic3_dat_pe5', 'rsvd2', None, 'down', True, False, False, False), 25 | ('pe6', None, 'in', 'up', False, True, False, False), 26 | ('pe7', None, 'in', 'up', False, True, False, False), 27 | ('gen3_i2c_scl_pf0', 'i2c3', None, 'none', False, True, False, False), 28 | ('gen3_i2c_sda_pf1', 'i2c3', None, 'none', False, True, False, False), 29 | ('cam_i2c_scl_ps2', 'i2cvi', None, 'none', False, True, False, False), 30 | ('cam_i2c_sda_ps3', 'i2cvi', None, 'none', False, True, False, False), 31 | ('cam1_mclk_ps0', 'extperiph3', None, 'none', False, False, False, False), 32 | ('cam2_mclk_ps1', 'extperiph3', None, 'none', False, False, False, False), 33 | ('cam_rst_ps4', 'rsvd1', None, 'down', True, False, False, False), 34 | ('cam_af_en_ps5', None, 'out0', 'none', False, False, False, False), 35 | ('cam_flash_en_ps6', 'rsvd2', None, 'down', True, False, False, False), 36 | ('cam1_pwdn_ps7', None, 'out0', 'none', False, False, False, False), 37 | ('cam2_pwdn_pt0', None, 'out0', 'none', False, False, False, False), 38 | ('cam1_strobe_pt1', 'rsvd1', None, 'down', True, False, False, False), 39 | ('pex_l0_clkreq_n_pa1', 'rsvd1', None, 'down', True, False, False, False), 40 | ('pex_l0_rst_n_pa0', 'rsvd1', None, 'down', True, False, False, False), 41 | ('pex_l1_clkreq_n_pa4', 'rsvd1', None, 'down', True, False, False, False), 42 | ('pex_l1_rst_n_pa3', 'rsvd1', None, 'down', True, False, False, False), 43 | ('pex_wake_n_pa2', 'rsvd1', None, 'down', True, False, False, False), 44 | ('sata_led_active_pa5', 'rsvd1', None, 'down', True, False, False, False), 45 | ('pa6', 'rsvd1', None, 'down', True, False, False, False), 46 | ('sdmmc1_clk_pm0', 'rsvd1', None, 'down', True, False, False, False), 47 | ('sdmmc1_cmd_pm1', 'rsvd2', None, 'down', True, False, False, False), 48 | ('sdmmc1_dat0_pm5', None, 'out1', 'none', False, False, False, False), 49 | ('sdmmc1_dat1_pm4', None, 'in', 'none', False, True, False, False), 50 | ('sdmmc1_dat2_pm3', 'rsvd2', None, 'down', True, False, False, False), 51 | ('sdmmc1_dat3_pm2', 'rsvd2', None, 'down', True, False, False, False), 52 | ('sdmmc3_clk_pp0', 'rsvd1', None, 'down', True, False, False, False), 53 | ('sdmmc3_cmd_pp1', 'rsvd1', None, 'down', True, False, False, False), 54 | ('sdmmc3_dat0_pp5', 'rsvd1', None, 'down', True, False, False, False), 55 | ('sdmmc3_dat1_pp4', 'rsvd1', None, 'down', True, False, False, False), 56 | ('sdmmc3_dat2_pp3', 'rsvd1', None, 'down', True, False, False, False), 57 | ('sdmmc3_dat3_pp2', 'rsvd1', None, 'down', True, False, False, False), 58 | ('als_prox_int_px3', 'rsvd0', None, 'down', True, False, False, False), 59 | ('temp_alert_px4', None, 'in', 'up', False, True, False, False), 60 | ('motion_int_px2', 'rsvd0', None, 'down', True, False, False, False), 61 | ('touch_rst_pv6', None, 'out0', 'none', False, False, False, False), 62 | ('touch_clk_pv7', 'touch', None, 'none', False, False, False, False), 63 | ('touch_int_px1', None, 'in', 'none', False, True, False, False), 64 | ('modem_wake_ap_px0', 'rsvd0', None, 'down', True, False, False, False), 65 | ('shutdown', 'shutdown', None, 'none', False, False, False, False), 66 | ('button_power_on_px5', None, 'in', 'up', False, True, False, False), 67 | ('button_vol_up_px6', None, 'in', 'none', False, True, False, False), 68 | ('button_vol_down_px7', None, 'in', 'up', False, True, False, False), 69 | ('button_slide_sw_py0', None, 'in', 'up', False, True, False, False), 70 | ('button_home_py1', None, 'in', 'up', False, True, False, False), 71 | ('lcd_te_py2', 'displaya', None, 'none', False, True, False, False), 72 | ('lcd_bl_pwm_pv0', 'rsvd3', None, 'down', True, False, False, False), 73 | ('lcd_bl_en_pv1', None, 'out0', 'none', False, False, False, False), 74 | ('lcd_rst_pv2', None, 'out0', 'none', False, False, False, False), 75 | ('lcd_gpio1_pv3', None, 'out0', 'none', False, False, False, False), 76 | ('lcd_gpio2_pv4', None, 'out0', 'none', False, False, False, False), 77 | ('ap_ready_pv5', 'rsvd0', None, 'down', True, False, False, False), 78 | ('pwr_i2c_scl_py3', 'i2cpmu', None, 'none', False, True, False, False), 79 | ('pwr_i2c_sda_py4', 'i2cpmu', None, 'none', False, True, False, False), 80 | ('clk_32k_in', 'clk', None, 'none', False, True, False, False), 81 | ('clk_32k_out_py5', 'soc', None, 'up', False, True, False, False), 82 | ('pz0', None, 'in', 'up', False, True, False, False), 83 | ('pz1', None, 'in', 'up', False, True, False, False), 84 | ('pz2', None, 'in', 'up', False, True, False, False), 85 | ('pz3', 'rsvd1', None, 'down', True, False, False, False), 86 | ('pz4', 'rsvd1', None, 'down', True, False, False, False), 87 | ('pz5', 'soc', None, 'up', False, True, False, False), 88 | ('clk_req', 'rsvd1', None, 'down', True, False, False, False), 89 | ('core_pwr_req', 'core', None, 'none', False, False, False, False), 90 | ('cpu_pwr_req', 'cpu', None, 'none', False, False, False, False), 91 | ('pwr_int_n', 'pmi', None, 'up', False, True, False, False), 92 | ('dap4_din_pj5', 'rsvd1', None, 'down', True, False, False, False), 93 | ('dap4_dout_pj6', 'rsvd1', None, 'down', True, False, False, False), 94 | ('dap4_fs_pj4', 'rsvd1', None, 'down', True, False, False, False), 95 | ('dap4_sclk_pj7', 'rsvd1', None, 'down', True, False, False, False), 96 | ('gen1_i2c_scl_pj1', 'i2c1', None, 'none', False, True, False, False), 97 | ('gen1_i2c_sda_pj0', 'i2c1', None, 'none', False, True, False, False), 98 | ('gen2_i2c_scl_pj2', 'i2c2', None, 'none', False, True, False, True), 99 | ('gen2_i2c_sda_pj3', 'i2c2', None, 'none', False, True, False, True), 100 | ('uart2_tx_pg0', 'uartb', None, 'down', True, False, False, False), 101 | ('uart2_rx_pg1', 'uartb', None, 'down', True, False, False, False), 102 | ('uart2_rts_pg2', 'rsvd2', None, 'down', True, False, False, False), 103 | ('uart2_cts_pg3', None, 'out0', 'none', False, False, False, False), 104 | ('uart1_tx_pu0', 'uarta', None, 'none', False, False, False, False), 105 | ('uart1_rx_pu1', 'uarta', None, 'none', False, True, False, False), 106 | ('uart1_rts_pu2', 'rsvd1', None, 'down', True, False, False, False), 107 | ('uart1_cts_pu3', 'rsvd1', None, 'down', True, False, False, False), 108 | ('jtag_rtck', 'jtag', None, 'up', False, False, False, False), 109 | ('pk0', None, 'in', 'none', False, True, False, False), 110 | ('pk1', None, 'in', 'none', False, True, False, False), 111 | ('pk2', None, 'in', 'none', False, True, False, False), 112 | ('pk3', None, 'out0', 'none', False, False, False, False), 113 | ('pk4', 'rsvd1', None, 'down', True, False, False, False), 114 | ('pk5', 'rsvd1', None, 'down', True, False, False, False), 115 | ('pk6', 'rsvd1', None, 'down', True, False, False, False), 116 | ('pk7', 'rsvd1', None, 'down', True, False, False, False), 117 | ('pl0', 'rsvd0', None, 'down', True, False, False, False), 118 | ('pl1', 'rsvd1', None, 'down', True, False, False, False), 119 | ('spi1_mosi_pc0', 'spi1', None, 'none', False, False, False, False), 120 | ('spi1_miso_pc1', 'spi1', None, 'none', False, True, False, False), 121 | ('spi1_sck_pc2', 'spi1', None, 'none', False, False, False, False), 122 | ('spi1_cs0_pc3', 'spi1', None, 'none', False, False, False, False), 123 | ('spi1_cs1_pc4', 'rsvd1', None, 'down', True, False, False, False), 124 | ('spi4_mosi_pc7', 'rsvd1', None, 'down', True, False, False, False), 125 | ('spi4_miso_pd0', 'rsvd1', None, 'down', True, False, False, False), 126 | ('spi4_sck_pc5', 'rsvd1', None, 'down', True, False, False, False), 127 | ('spi4_cs0_pc6', 'rsvd1', None, 'down', True, False, False, False), 128 | ('uart3_tx_pd1', 'uartc', None, 'none', False, False, False, False), 129 | ('uart3_rx_pd2', 'uartc', None, 'none', False, True, False, False), 130 | ('uart3_rts_pd3', 'uartc', None, 'none', False, False, False, False), 131 | ('uart3_cts_pd4', 'uartc', None, 'none', False, True, False, False), 132 | ('wifi_en_ph0', None, 'out0', 'none', False, False, False, False), 133 | ('wifi_rst_ph1', None, 'out0', 'none', False, False, False, False), 134 | ('wifi_wake_ap_ph2', None, 'in', 'none', False, True, False, False), 135 | ('ap_wake_bt_ph3', None, 'out0', 'none', False, False, False, False), 136 | ('bt_rst_ph4', None, 'out0', 'none', False, False, False, False), 137 | ('bt_wake_ap_ph5', None, 'in', 'none', False, True, False, False), 138 | ('ph6', None, 'in', 'none', False, True, False, False), 139 | ('ap_wake_nfc_ph7', 'rsvd0', None, 'down', True, False, False, False), 140 | ('nfc_en_pi0', 'rsvd0', None, 'down', True, False, False, False), 141 | ('nfc_int_pi1', 'rsvd0', None, 'down', True, False, False, False), 142 | ('gps_en_pi2', None, 'out0', 'none', False, False, False, False), 143 | ('gps_rst_pi3', 'rsvd0', None, 'down', True, False, False, False), 144 | ('uart4_tx_pi4', 'uartd', None, 'none', False, False, False, False), 145 | ('uart4_rx_pi5', 'uartd', None, 'none', False, True, False, False), 146 | ('uart4_rts_pi6', 'uartd', None, 'none', False, False, False, False), 147 | ('uart4_cts_pi7', 'uartd', None, 'none', False, True, False, False), 148 | ('qspi_io0_pee2', 'qspi', None, 'none', False, False, False, False), 149 | ('qspi_io1_pee3', 'qspi', None, 'none', False, True, False, False), 150 | ('qspi_sck_pee0', 'qspi', None, 'none', False, False, False, False), 151 | ('qspi_cs_n_pee1', 'qspi', None, 'none', False, False, False, False), 152 | ('qspi_io2_pee4', 'rsvd1', None, 'down', True, False, False, False), 153 | ('qspi_io3_pee5', 'rsvd1', None, 'down', True, False, False, False), 154 | ('dap2_din_paa2', 'i2s2', None, 'none', False, True, False, False), 155 | ('dap2_dout_paa3', 'i2s2', None, 'none', False, False, False, False), 156 | ('dap2_fs_paa0', 'i2s2', None, 'none', False, False, False, False), 157 | ('dap2_sclk_paa1', 'i2s2', None, 'none', False, False, False, False), 158 | ('pcc7', None, 'in', 'none', False, True, False, False), 159 | ('spdif_out_pcc2', 'rsvd1', None, 'down', True, False, False, False), 160 | ('spdif_in_pcc3', 'rsvd1', None, 'down', True, False, False, False), 161 | ('usb_vbus_en0_pcc4', 'rsvd1', None, 'down', True, False, False, False), 162 | ('usb_vbus_en1_pcc5', 'rsvd1', None, 'down', True, False, False, False), 163 | ('dp_hpd0_pcc6', None, 'in', 'none', False, True, False, False), 164 | ('hdmi_int_dp_hpd_pcc1', None, 'in', 'none', False, True, False, False), 165 | ('hdmi_cec_pcc0', 'rsvd1', None, 'down', True, False, False, False), 166 | ) 167 | 168 | drive_groups = ( 169 | ) 170 | 171 | mipi_pad_ctrl_groups = ( 172 | #pin, mux 173 | ) 174 | -------------------------------------------------------------------------------- /csv-to-board.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | 3 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a 6 | # copy of this software and associated documentation files (the "Software"), 7 | # to deal in the Software without restriction, including without limitation 8 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | # and/or sell copies of the Software, and to permit persons to whom the 10 | # Software is furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | # DEALINGS IN THE SOFTWARE. 22 | 23 | # This parses a CSV version of Logan_customer_pinmux_release.xlsm 24 | 25 | import argparse 26 | import csv 27 | import os 28 | import os.path 29 | import sys 30 | import tegra_pmx_soc_parser 31 | from tegra_pmx_utils import * 32 | 33 | dbg = False 34 | 35 | parser = argparse.ArgumentParser(description='Create a board config' + 36 | 'from a CSV version of the Venice2 pinmux spreadsheet') 37 | parser.add_argument('--debug', action='store_true', help='Turn on debugging prints') 38 | parser.add_argument('--csv', default=argparse.SUPPRESS, help='CSV file to parse') 39 | parser.add_argument('--csv-rsvd-0based', action='store_true', dest='csv_rsvd_0based', default=argparse.SUPPRESS, help='Assume 0-based RSVD numbering') 40 | parser.add_argument('--csv-rsvd-1based', action='store_false', dest='csv_rsvd_0based', default=argparse.SUPPRESS, help='Assume 1-based RSVD numbering') 41 | parser.add_argument('board', help='Board name') 42 | args = parser.parse_args() 43 | if args.debug: 44 | dbg = True 45 | if dbg: print(args) 46 | 47 | # Boards in alphabetical order in this dictionary: 48 | supported_boards = { 49 | 'cei-tk1-som': { 50 | # tk1-som_pinmux_V2.4.xlsm Colorado TK1-SOM Configuration (1-based rsvd) 51 | # updated to version 11 by Peter Chubb 52 | 'filename': 'csv/cei-tk1-som.csv', 53 | 'rsvd_base': 1, 54 | 'soc': 'tegra124', 55 | }, 56 | 'e2220-1170': { 57 | # T210_customer_pinmux.xlsm worksheet [elided] (0-based rsvd) 58 | 'filename': 'csv/e2220-1170.csv', 59 | 'rsvd_base': 0, 60 | 'soc': 'tegra210', 61 | }, 62 | 'jetson-tk1': { 63 | # Jetson_TK1_customer_pinmux.xlsm worksheet Jetson TK1 Configuration (1-based rsvd) from: 64 | # https://developer.nvidia.com/hardware-design-and-development 65 | 'filename': 'csv/jetson-tk1.csv', 66 | 'rsvd_base': 1, 67 | 'soc': 'tegra124', 68 | }, 69 | 'norrin': { 70 | # PM370_T124_customer_pinmux_1.1.xlsm worksheet Customer_Configuration (0-based rsvd) 71 | 'filename': 'nv-internal-data/PM370_T124_customer_pinmux_1.1.csv', 72 | 'rsvd_base': 0, 73 | 'soc': 'tegra124', 74 | }, 75 | 'p2371-0000': { 76 | # T210_customer_pinmux.xlsm worksheet [elided] Configuration (0-based rsvd) 77 | 'filename': 'csv/p2371-0000.csv', 78 | 'rsvd_base': 0, 79 | 'soc': 'tegra210', 80 | }, 81 | 'p2371-2180': { 82 | # T210_customer_pinmux.xlsm worksheet [elided] Configuration (0-based rsvd) 83 | 'filename': 'csv/p2371-2180.csv', 84 | 'rsvd_base': 0, 85 | 'soc': 'tegra210', 86 | }, 87 | 'p3450-porg': { 88 | # Jetson_Nano_DeveloperKit_Users_Pinmux_Configuration.xlsm (0-based rsvd) 89 | 'filename': 'csv/p3450-porg.csv', 90 | 'rsvd_base': 0, 91 | 'soc': 'tegra210', 92 | }, 93 | 'p2571': { 94 | # T210_customer_pinmux.xlsm worksheet [elided] Configuration (0-based rsvd) 95 | 'filename': 'csv/p2571.csv', 96 | 'rsvd_base': 0, 97 | 'soc': 'tegra210', 98 | }, 99 | 'tegra210-smaug': { 100 | # erista_customer_pinmux_v04_0420.xlsm 101 | 'filename': 'csv/tegra210-smaug-v04_0420.csv', 102 | 'rsvd_base': 0, 103 | 'soc': 'tegra210', 104 | }, 105 | 'venice2': { 106 | # Venice2_T124_customer_pinmux_based_on_P4_rev47_2013-07-12.xlsm worksheet Customer_Configuration (0-based rsvd) 107 | 'filename': 'nv-internal-data/Venice2_T124_customer_pinmux_based_on_P4_rev47_2013-07-12.csv', 108 | 'rsvd_base': 0, 109 | 'soc': 'tegra124', 110 | }, 111 | } 112 | 113 | if not args.board in supported_boards: 114 | print('ERROR: Unsupported board %s' % args.board, file=sys.stderr) 115 | sys.exit(1) 116 | board_conf = supported_boards[args.board] 117 | if 'csv' in args: 118 | board_conf['filename'] = args.csv 119 | if 'csv_rsvd_0based' in args: 120 | board_conf['rsvd_base'] = {True: 0, False: 1}[args.csv_rsvd_0based] 121 | if dbg: print(board_conf) 122 | 123 | soc = tegra_pmx_soc_parser.load_soc(board_conf['soc']) 124 | 125 | COL_BALL_NAME = 0 126 | COL_BALL_MID = 1 127 | COL_BALL_DSC = 2 128 | COL_GPIO = 3 129 | COL_F0 = 4 130 | COL_F1 = 5 131 | COL_F2 = 6 132 | COL_F3 = 7 133 | COL_FS = 8 134 | COL_MUX = 9 135 | COL_PUPD = 10 136 | COL_TRI = 11 137 | COL_E_INPUT = 12 138 | COL_GPIO_INIT_VAL = 13 139 | COL_DIRECTION = 14 140 | COL_RCV_SEL = 15 141 | 142 | col_names = { 143 | COL_BALL_NAME: 'Ball Name', 144 | COL_BALL_MID: 'MID', 145 | COL_BALL_DSC: 'DSC', 146 | COL_GPIO: 'GPIO', 147 | COL_F0: 'F0', 148 | COL_F1: 'F1', 149 | COL_F2: 'F2', 150 | COL_F3: 'F3', 151 | COL_FS: 'FS', 152 | COL_MUX: 'Pin Group', 153 | COL_PUPD: 'PUPD', 154 | COL_TRI: 'Tristate', 155 | COL_E_INPUT: 'E_Input', 156 | COL_GPIO_INIT_VAL: 'GPIO Init Value', 157 | COL_DIRECTION: 'Pin Direction', 158 | } 159 | 160 | if soc.soc_pins_have_rcv_sel: 161 | col_names[COL_RCV_SEL] = 'High or Normal VIL/VIH' 162 | 163 | if soc.soc_pins_have_e_io_hv: 164 | col_names[COL_RCV_SEL] = '3.3V Tolerance Enable' 165 | 166 | cols = {} 167 | 168 | def func_munge(f): 169 | if board_conf['soc'] == 'tegra124': 170 | if f in ('sdmmc2a', 'sdmmc2b'): 171 | return 'sdmmc2' 172 | if f in ('ir3_rxd', 'ir3_txd'): 173 | return 'irda' 174 | if soc.soc_rsvd_base != board_conf['rsvd_base']: 175 | if soc.soc_rsvd_base: 176 | return rsvd_0base_to_1base(f) 177 | else: 178 | raise Exception('CSV 1-based to SoC 0-based not supported') 179 | return f 180 | 181 | def pupd_munge(d): 182 | return { 183 | 'NORMAL': 'none', 184 | 'PULL_UP': 'up', 185 | 'PULL_DOWN': 'down', 186 | }[d] 187 | 188 | def tri_munge(d): 189 | return { 190 | 'NORMAL': False, 191 | 'TRISTATE': True, 192 | }[d] 193 | 194 | def e_input_munge(d): 195 | return { 196 | 'DISABLE': False, 197 | 'ENABLE': True, 198 | }[d] 199 | 200 | warn_empty_gpio_init_val = False 201 | def gpio_init_val_munge(d): 202 | global warn_empty_gpio_init_val 203 | if d == '': 204 | warn_empty_gpio_init_val = True 205 | return { 206 | '': 'out?', 207 | '0': 'out0', 208 | '1': 'out1', 209 | }[d] 210 | 211 | def od_from_direction(d): 212 | return d == 'Open-Drain' 213 | 214 | def rcv_sel_munge(d): 215 | return { 216 | '': False, 217 | 'NORMAL': False, 218 | 'HIGH': True, 219 | 'Disable': False, 220 | 'Enable': True, 221 | }[d] 222 | 223 | found_header = False 224 | pin_table = [] 225 | mipi_table = [] 226 | with open(board_conf['filename'], newline='') as fh: 227 | csv = csv.reader(fh) 228 | lnum = 0 229 | for row in csv: 230 | lnum += 1 231 | 232 | # Header rows 233 | if not found_header: 234 | if 'Ball Name' not in row: 235 | if lnum > 25: 236 | print('ERROR: Header row not found', file=sys.stderr) 237 | sys.exit(1) 238 | continue 239 | for colid, coltext in col_names.items(): 240 | try: 241 | cols[colid] = row.index(coltext) 242 | except: 243 | if colid in (COL_BALL_MID, COL_BALL_DSC): 244 | pass 245 | else: 246 | if board_conf['soc'] != 'tegra124': 247 | raise 248 | if colid != COL_RCV_SEL: 249 | print('ERROR: Header column "%s" not found' % coltext, file=sys.stderr) 250 | sys.exit(1) 251 | cols[colid] = None 252 | found_header = True 253 | continue 254 | 255 | ball_name = row[cols[COL_BALL_NAME]].lower() 256 | if ball_name.startswith('mipi_pad_ctrl_'): 257 | ball_name = ball_name[14:] 258 | mipi = soc.mipi_pad_ctrl_group_by_name(ball_name) 259 | else: 260 | mipi = None 261 | 262 | if cols[COL_BALL_MID]: 263 | ball_mid = row[cols[COL_BALL_MID]] 264 | else: 265 | ball_mid = None 266 | if cols[COL_BALL_DSC]: 267 | ball_dsc = row[cols[COL_BALL_DSC]] 268 | else: 269 | ball_dsc = None 270 | 271 | 272 | # Section title row 273 | if not ball_mid and not ball_dsc and not mipi: 274 | continue 275 | 276 | mux = func_munge(row[cols[COL_MUX]].lower()) 277 | 278 | if mipi: 279 | mipi_table.append((repr(mipi.name), repr(mux))) 280 | continue 281 | 282 | # Pin not affected by pinmux 283 | if mux in ('', '0', '#n/a'): 284 | continue 285 | 286 | if dbg: print(ball_name) 287 | 288 | gpio = row[cols[COL_GPIO]].lower() 289 | f0 = func_munge(row[cols[COL_F0]].lower()) 290 | f1 = func_munge(row[cols[COL_F1]].lower()) 291 | f2 = func_munge(row[cols[COL_F2]].lower()) 292 | f3 = func_munge(row[cols[COL_F3]].lower()) 293 | fs = func_munge(row[cols[COL_FS]].lower()) 294 | pupd = pupd_munge(row[cols[COL_PUPD]]) 295 | tri = tri_munge(row[cols[COL_TRI]]) 296 | e_input = e_input_munge(row[cols[COL_E_INPUT]]) 297 | od = od_from_direction(row[cols[COL_DIRECTION]]) 298 | if cols[COL_RCV_SEL]: 299 | rcv_sel = rcv_sel_munge(row[cols[COL_RCV_SEL]]) 300 | else: 301 | rcv_sel = False 302 | 303 | mux_gpio = mux.startswith('gpio_p') or (mux == gpio) 304 | if mux_gpio: 305 | mux = None 306 | if e_input: 307 | gpio_init = 'in' 308 | else: 309 | gpio_init = gpio_init_val_munge(row[cols[COL_GPIO_INIT_VAL]]) 310 | else: 311 | gpio_init = None 312 | 313 | gpio_pin = soc.gpio_or_pin_by_name(ball_name) 314 | for i, func in enumerate((f0, f1, f2, f3)): 315 | alt_rsvd = 'rsvd' + str(soc.soc_rsvd_base + i) 316 | if func != gpio_pin.funcs[i] and func != alt_rsvd: 317 | print('WARNING: %s: F%d mismatch CSV %s vs SOC %s' % (ball_name, i, repr(func), repr(gpio_pin.funcs[i])), file=sys.stderr) 318 | for i, func in enumerate((f0, f1, f2, f3)): 319 | alt_rsvd = 'rsvd' + str(soc.soc_rsvd_base + i) 320 | if func not in gpio_pin.funcs and func != alt_rsvd: 321 | print('ERROR: %s: F%d CSV %s not in SOC list %s' % (ball_name, i, repr(func), repr(gpio_pin.funcs)), file=sys.stderr) 322 | sys.exit(1) 323 | if fs not in (f0, f1, f2, f3): 324 | print('ERROR: %s: FSAFE CSV %s not in CSV F0..3 %s' % (ball_name, fs, repr((f0, f1, f2, f3))), file=sys.stderr) 325 | sys.exit(1) 326 | if mux and mux not in (f0, f1, f2, f3): 327 | print('ERROR: %s: MUX CSV %s not in CSV F0..3 %s' % (ball_name, mux, repr((f0, f1, f2, f3))), file=sys.stderr) 328 | sys.exit(1) 329 | if mux and mux not in gpio_pin.funcs: 330 | print('ERROR: %s: MUX CSV %s not in SOC F0..3 %s' % (ball_name, mux, repr(gpio_pin.funcs)), file=sys.stderr) 331 | sys.exit(1) 332 | 333 | if (board_conf['soc'] == 'tegra124') and (ball_name in ('reset_out_n', 'owr', 'hdmi_int', 'ddc_scl', 'ddc_sda')): 334 | # These balls' pad type is always OD, so we don't need to set it 335 | # FIXME: The SoC data structure should tell us the pad type instead of hard-coding it 336 | od = False 337 | 338 | if od and not gpio_pin.od: 339 | print('WARNING: %s: OD in board file, but pin has no OD' % ball_name, file=sys.stderr) 340 | od = False 341 | pin_has_rcv_sel = False 342 | if soc.soc_pins_have_rcv_sel: 343 | pin_has_rcv_sel = gpio_pin.rcv_sel 344 | if soc.soc_pins_have_e_io_hv: 345 | pin_has_rcv_sel = gpio_pin.e_io_hv 346 | if rcv_sel and not pin_has_rcv_sel: 347 | print('WARNING: %s: RCV_SEL/E_IO_HV in board file, but pin does not support it' % ball_name, file=sys.stderr) 348 | rcv_sel = False 349 | 350 | pin_table.append((repr(gpio_pin.fullname), repr(mux), repr(gpio_init), repr(pupd), repr(tri), repr(e_input), repr(od), repr(rcv_sel))) 351 | 352 | pin_headings = ('pin', 'mux', 'gpio_init', 'pull', 'tri', 'e_inp', 'od') 353 | if soc.soc_pins_have_e_io_hv: 354 | pin_headings += ('e_io_hv',) 355 | if soc.soc_pins_have_rcv_sel: 356 | pin_headings += ('rcv_sel',) 357 | 358 | mipi_headings = ('pin', 'mux') 359 | 360 | cfgfile = os.path.join('configs', args.board + '.board') 361 | with open(cfgfile, 'wt') as fh: 362 | print('soc = \'%s\'' % board_conf['soc'], file=fh) 363 | print(file=fh) 364 | print('pins = (', file=fh) 365 | dump_py_table(pin_headings, pin_table, file=fh) 366 | print(')', file=fh) 367 | print('', file=fh) 368 | print('drive_groups = (', file=fh) 369 | print(')', file=fh) 370 | print('', file=fh) 371 | print('mipi_pad_ctrl_groups = (', file=fh) 372 | dump_py_table(mipi_headings, mipi_table, file=fh) 373 | print(')', file=fh) 374 | 375 | if warn_empty_gpio_init_val: 376 | print('WARNING: Missing gpio_init_vals detected. Manual fixup required', file=sys.stderr) 377 | -------------------------------------------------------------------------------- /soc-to-uboot-driver.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a 6 | # copy of this software and associated documentation files (the "Software"), 7 | # to deal in the Software without restriction, including without limitation 8 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 | # and/or sell copies of the Software, and to permit persons to whom the 10 | # Software is furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 | # DEALINGS IN THE SOFTWARE. 22 | 23 | import argparse 24 | import os 25 | import os.path 26 | import sys 27 | import tegra_pmx_soc_parser 28 | from tegra_pmx_utils import * 29 | 30 | dbg = False 31 | 32 | parser = argparse.ArgumentParser(description='Create a U-Boot pinctrl ' + 33 | 'driver from an SoC config file') 34 | parser.add_argument('--debug', action='store_true', help='Turn on debugging prints') 35 | parser.add_argument('soc', help='SoC to process') 36 | parser.add_argument('header', help='Header file to generate') 37 | parser.add_argument('cfile', help='C file to generate') 38 | args = parser.parse_args() 39 | if args.debug: 40 | dbg = True 41 | if dbg: print(args) 42 | 43 | soc = tegra_pmx_soc_parser.load_soc(args.soc) 44 | 45 | f = open(args.header, 'wt') 46 | 47 | print('''\ 48 | /* 49 | * Copyright (c) %s, NVIDIA CORPORATION. All rights reserved. 50 | * 51 | * SPDX-License-Identifier: GPL-2.0+ 52 | */ 53 | 54 | #ifndef _%s_PINMUX_H_ 55 | #define _%s_PINMUX_H_ 56 | 57 | enum pmux_pingrp { 58 | ''' % (soc.uboot_copyright_years, soc.name.upper(), soc.name.upper()), file=f, end='') 59 | 60 | last_reg = 0x3000 - 4 61 | for pin in soc.gpios_pins_by_reg(): 62 | if pin.reg != last_reg + 4: 63 | eqs = ' = (0x%x / 4)' % (pin.reg - 0x3000) 64 | else: 65 | eqs = '' 66 | print('\tPMUX_PINGRP_%s%s,' % (pin.fullname.upper(), eqs), file=f) 67 | last_reg = pin.reg 68 | 69 | print('''\ 70 | PMUX_PINGRP_COUNT, 71 | }; 72 | 73 | enum pmux_drvgrp { 74 | ''', file=f, end='') 75 | 76 | last_reg = soc.soc_drv_reg_base - 4 77 | for group in soc.drive_groups_by_reg(): 78 | if group.reg != last_reg + 4: 79 | eqs = ' = (0x%x / 4)' % (group.reg - soc.soc_drv_reg_base) 80 | else: 81 | eqs = '' 82 | print('\tPMUX_DRVGRP_%s%s,' % (group.fullname.upper()[6:], eqs), file=f) 83 | last_reg = group.reg 84 | 85 | print('''\ 86 | PMUX_DRVGRP_COUNT, 87 | }; 88 | ''', file=f, end='') 89 | 90 | if len(soc.mipi_pad_ctrl_groups_by_reg()): 91 | print('''\ 92 | 93 | enum pmux_mipipadctrlgrp { 94 | ''', file=f, end='') 95 | 96 | last_reg = soc.soc_mipipadctrl_reg_base - 4 97 | for group in soc.mipi_pad_ctrl_groups_by_reg(): 98 | if group.reg != last_reg + 4: 99 | eqs = ' = (0x%x / 4)' % (group.reg - soc.soc_mipipadctrl_reg_base) 100 | else: 101 | eqs = '' 102 | print('\tPMUX_MIPIPADCTRLGRP_%s%s,' % (group.name.upper(), eqs), file=f) 103 | 104 | print('''\ 105 | PMUX_MIPIPADCTRLGRP_COUNT, 106 | }; 107 | ''', file=f, end='') 108 | 109 | print('''\ 110 | 111 | enum pmux_func { 112 | PMUX_FUNC_DEFAULT, 113 | ''', file=f, end='') 114 | 115 | for func in soc.functions_by_alpha(): 116 | if func.name.startswith('rsvd'): 117 | continue 118 | print('\tPMUX_FUNC_%s,' % func.name.upper(), file=f) 119 | 120 | 121 | print('''\ 122 | PMUX_FUNC_RSVD%d, 123 | PMUX_FUNC_RSVD%d, 124 | PMUX_FUNC_RSVD%d, 125 | PMUX_FUNC_RSVD%d, 126 | PMUX_FUNC_COUNT, 127 | }; 128 | 129 | ''' % tuple(soc.soc_rsvd_base + i for i in range(4)), file=f, end='') 130 | 131 | print('#define TEGRA_PMX_SOC_DRV_GROUP_BASE_REG 0x%x' % soc.soc_drv_reg_base, file=f) 132 | if len(soc.mipi_pad_ctrl_groups_by_reg()): 133 | print('#define TEGRA_PMX_SOC_MIPIPADCTRL_BASE_REG 0x%x' % soc.soc_mipipadctrl_reg_base, file=f) 134 | 135 | if soc.soc_has_io_clamping: 136 | print('#define TEGRA_PMX_SOC_HAS_IO_CLAMPING', file=f) 137 | 138 | print('#define TEGRA_PMX_SOC_HAS_DRVGRPS', file=f) 139 | 140 | if len(soc.mipi_pad_ctrl_groups_by_reg()): 141 | print('#define TEGRA_PMX_SOC_HAS_MIPI_PAD_CTRL_GRPS', file=f) 142 | 143 | if soc.soc_drvgroups_have_lpmd: 144 | print('#define TEGRA_PMX_GRPS_HAVE_LPMD', file=f) 145 | 146 | if soc.soc_drvgroups_have_schmitt: 147 | print('#define TEGRA_PMX_GRPS_HAVE_SCHMT', file=f) 148 | 149 | if soc.soc_drvgroups_have_hsm: 150 | print('#define TEGRA_PMX_GRPS_HAVE_HSM', file=f) 151 | 152 | print('#define TEGRA_PMX_PINS_HAVE_E_INPUT', file=f) 153 | print('#define TEGRA_PMX_PINS_HAVE_LOCK', file=f) 154 | 155 | if soc.soc_pins_have_od: 156 | print('#define TEGRA_PMX_PINS_HAVE_OD', file=f) 157 | 158 | if soc.soc_pins_have_ior: 159 | print('#define TEGRA_PMX_PINS_HAVE_IO_RESET', file=f) 160 | 161 | if soc.soc_pins_have_rcv_sel: 162 | print('#define TEGRA_PMX_PINS_HAVE_RCV_SEL', file=f) 163 | 164 | if soc.soc_pins_have_e_io_hv: 165 | print('#define TEGRA_PMX_PINS_HAVE_E_IO_HV', file=f) 166 | 167 | print('''\ 168 | #include 169 | 170 | #endif /* _%s_PINMUX_H_ */ 171 | ''' % soc.name.upper(), file=f, end='') 172 | 173 | f.close() 174 | f = open(args.cfile, 'wt') 175 | 176 | print('''\ 177 | /* 178 | * Copyright (c) %s, NVIDIA CORPORATION. All rights reserved. 179 | * 180 | * SPDX-License-Identifier: GPL-2.0+ 181 | */ 182 | 183 | #include 184 | #include 185 | #include 186 | 187 | #define PIN(pin, f0, f1, f2, f3) \\ 188 | { \\ 189 | .funcs = { \\ 190 | PMUX_FUNC_##f0, \\ 191 | PMUX_FUNC_##f1, \\ 192 | PMUX_FUNC_##f2, \\ 193 | PMUX_FUNC_##f3, \\ 194 | }, \\ 195 | } 196 | 197 | #define PIN_RESERVED {} 198 | 199 | static const struct pmux_pingrp_desc %s_pingroups[] = { 200 | ''' % (soc.uboot_copyright_years, soc.name), file=f, end='') 201 | 202 | headings = ('pin', 'f0', 'f1', 'f2', 'f3') 203 | 204 | rows = [] 205 | last_reg = 0 206 | for pin in soc.gpios_pins_by_reg(): 207 | if pin.reg != last_reg + 4: 208 | if last_reg: 209 | for i in range(((pin.reg - last_reg) // 4) - 1): 210 | rows.append('\tPIN_RESERVED,',) 211 | rows.append('\t/* Offset 0x%x */' % pin.reg,) 212 | last_reg = pin.reg 213 | row = (pin.fullname.upper(),) 214 | for i in range(4): 215 | row += (pin.funcs[i].upper(),) 216 | rows.append(row) 217 | dump_c_table(headings, 'PIN', rows, file=f) 218 | 219 | print('''\ 220 | }; 221 | const struct pmux_pingrp_desc *tegra_soc_pingroups = %s_pingroups; 222 | ''' % soc.name, file=f, end='') 223 | 224 | if len(soc.mipi_pad_ctrl_groups_by_reg()): 225 | print('''\ 226 | 227 | #define MIPIPADCTRL_GRP(grp, f0, f1) \\ 228 | { \\ 229 | .funcs = { \\ 230 | PMUX_FUNC_##f0, \\ 231 | PMUX_FUNC_##f1, \\ 232 | }, \\ 233 | } 234 | 235 | #define MIPIPADCTRL_RESERVED {} 236 | 237 | static const struct pmux_mipipadctrlgrp_desc %s_mipipadctrl_groups[] = { 238 | ''' % soc.name, file=f, end='') 239 | 240 | headings = ('pin', 'f0', 'f1') 241 | rows = [] 242 | last_reg = 0 243 | for grp in soc.mipi_pad_ctrl_groups_by_reg(): 244 | if grp.reg != last_reg + 4: 245 | if last_reg: 246 | for i in range(((grp.reg - last_reg) // 4) - 1): 247 | rows.append('\tMIPIPACTRL_RESERVED,',) 248 | rows.append('\t/* Offset 0x%x */' % grp.reg,) 249 | last_reg = grp.reg 250 | row = (grp.name.upper(),) 251 | for i in range(2): 252 | row += (grp.funcs[i].upper(),) 253 | rows.append(row) 254 | dump_c_table(headings, 'MIPIPADCTRL_GRP', rows, file=f) 255 | 256 | print('''\ 257 | }; 258 | const struct pmux_mipipadctrlgrp_desc *tegra_soc_mipipadctrl_groups = %s_mipipadctrl_groups; 259 | ''' % soc.name, file=f, end='') 260 | 261 | f.close() 262 | -------------------------------------------------------------------------------- /tegra_pmx_board_parser.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 2 | # 3 | # Permission is hereby granted, free of charge, to any person obtaining a 4 | # copy of this software and associated documentation files (the "Software"), 5 | # to deal in the Software without restriction, including without limitation 6 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | # and/or sell copies of the Software, and to permit persons to whom the 8 | # Software is furnished to do so, subject to the following conditions: 9 | # 10 | # The above copyright notice and this permission notice shall be included in 11 | # all copies or substantial portions of the Software. 12 | # 13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | # DEALINGS IN THE SOFTWARE. 20 | 21 | import os.path 22 | import sys 23 | import tegra_pmx_soc_parser 24 | from tegra_pmx_parser_utils import * 25 | 26 | script_dir = os.path.dirname(os.path.abspath(__file__)) 27 | configs_dir = os.path.join(script_dir, 'configs') 28 | 29 | class PinConfig(ReprDictObj): 30 | def __init__(self, soc, data): 31 | fields = ('fullname', 'mux', 'gpio_init', 'pull', 'tri', 'e_inp', 'od') 32 | if soc.soc_pins_have_rcv_sel: 33 | fields += ('rcv_sel', ) 34 | if soc.soc_pins_have_e_io_hv: 35 | fields += ('e_io_hv', ) 36 | for i, field in enumerate(fields): 37 | self.__setattr__(field, data[i]) 38 | self.gpio_pin = soc.gpio_or_pin_by_fullname(self.fullname) 39 | 40 | class MipiPadCtrlConfig(ReprDictObj): 41 | def __init__(self, soc, data): 42 | fields = ('name', 'mux') 43 | for i, field in enumerate(fields): 44 | self.__setattr__(field, data[i]) 45 | self.mipi_pad_ctrl_group = soc.mipi_pad_ctrl_group_by_name(self.name) 46 | 47 | class Board(TopLevelParsedObj): 48 | def __init__(self, name, data): 49 | TopLevelParsedObj.__init__(self, name, (), data) 50 | 51 | self.varname = name.lower().replace('-', '_') 52 | self.definename = name.upper().replace('-', '_') 53 | 54 | self.soc = tegra_pmx_soc_parser.load_soc(data['soc']) 55 | 56 | self._pincfgs = [] 57 | for num, pindata in enumerate(data['pins']): 58 | pincfg = PinConfig(self.soc, pindata) 59 | self._pincfgs.append(pincfg) 60 | 61 | # FIXME: fill this in... 62 | self.drvcfg = [] 63 | 64 | self._mipipadctrlcfgs = [] 65 | if 'mipi_pad_ctrl_groups' in data: 66 | for num, pindata in enumerate(data['mipi_pad_ctrl_groups']): 67 | mipipadctrlcfg = MipiPadCtrlConfig(self.soc, pindata) 68 | self._mipipadctrlcfgs.append(mipipadctrlcfg) 69 | 70 | self._generate_derived_data() 71 | 72 | def _generate_derived_data(self): 73 | self._pincfgs_by_num = sorted(self._pincfgs, key=lambda pincfg: pincfg.gpio_pin.sort_by_num_key()) 74 | self._mipipadctrlcfgs_by_num = sorted(self._mipipadctrlcfgs, key=lambda cfg: cfg.mipi_pad_ctrl_group.reg) 75 | 76 | def pincfgs_by_conf_order(self): 77 | return self._pincfgs 78 | 79 | def pincfgs_by_num(self): 80 | return self._pincfgs_by_num 81 | 82 | def mipipadctrlcfgs_by_conf_order(self): 83 | return self._mipipadctrlcfgs 84 | 85 | def mipipadctrlcfgs_by_num(self): 86 | return self._mipipadctrlcfgs_by_num 87 | 88 | def warn_about_unconfigured_pins(self): 89 | unconfigured_gpio_pins = [gpio_pin.fullname for gpio_pin in self.soc.gpios_pins_by_num() if gpio_pin.reg] 90 | for gpio_pin in self.pincfgs_by_num(): 91 | unconfigured_gpio_pins.remove(gpio_pin.gpio_pin.fullname) 92 | for gpio_pin in unconfigured_gpio_pins: 93 | print('WARNING: Unconfigured pin ' + gpio_pin, file=sys.stderr) 94 | 95 | def load_board(boardname): 96 | fn = os.path.join(configs_dir, boardname + '.board') 97 | d = {} 98 | with open(fn) as f: 99 | code = compile(f.read(), fn, 'exec') 100 | exec(code, globals(), d) 101 | 102 | return Board(boardname, d) 103 | -------------------------------------------------------------------------------- /tegra_pmx_parser_utils.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 2 | # 3 | # Permission is hereby granted, free of charge, to any person obtaining a 4 | # copy of this software and associated documentation files (the "Software"), 5 | # to deal in the Software without restriction, including without limitation 6 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | # and/or sell copies of the Software, and to permit persons to whom the 8 | # Software is furnished to do so, subject to the following conditions: 9 | # 10 | # The above copyright notice and this permission notice shall be included in 11 | # all copies or substantial portions of the Software. 12 | # 13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | # DEALINGS IN THE SOFTWARE. 20 | 21 | class ReprDictObj(object): 22 | def __repr__(self): 23 | return self.__class__.__name__ + '(' + repr(self.__dict__) + ')' 24 | 25 | def __str__(self): 26 | return self.__class__.__name__ + '(' + str(self.__dict__) + ')' 27 | 28 | class TopLevelParsedObj(ReprDictObj): 29 | def __init__(self, name, copy_attrs, data): 30 | self.name = name 31 | self.titlename = name.title() 32 | 33 | for attr, default in copy_attrs: 34 | if attr in data: 35 | val = data[attr] 36 | else: 37 | if default is None: 38 | raise Exception('Missing variable ' + attr) 39 | val = default 40 | self.__setattr__(attr, val) 41 | -------------------------------------------------------------------------------- /tegra_pmx_soc_parser.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 2 | # 3 | # Permission is hereby granted, free of charge, to any person obtaining a 4 | # copy of this software and associated documentation files (the "Software"), 5 | # to deal in the Software without restriction, including without limitation 6 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | # and/or sell copies of the Software, and to permit persons to whom the 8 | # Software is furnished to do so, subject to the following conditions: 9 | # 10 | # The above copyright notice and this permission notice shall be included in 11 | # all copies or substantial portions of the Software. 12 | # 13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | # DEALINGS IN THE SOFTWARE. 20 | 21 | import collections 22 | import os.path 23 | from tegra_pmx_parser_utils import * 24 | 25 | script_dir = os.path.dirname(os.path.abspath(__file__)) 26 | configs_dir = os.path.join(script_dir, 'configs') 27 | 28 | class PinBase(ReprDictObj): 29 | def __init__(self, soc, signal, gpio, num, data): 30 | self.signal = signal 31 | self.gpio = gpio 32 | self.num = num 33 | fields = [] 34 | if self.signal: 35 | fields += (self.signal,) 36 | if self.gpio: 37 | fields += ('p' + self.gpio,) 38 | self.fullname = '_'.join((fields)) 39 | if self.signal: 40 | self.shortname = self.signal 41 | else: 42 | self.shortname = self.gpio 43 | self.define = 'TEGRA_PIN_' + '_'.join(fields).upper() 44 | self.desc = ' '.join(fields).upper() 45 | if not data: 46 | self.reg = None 47 | return 48 | fields = ('reg', 'f0', 'f1', 'f2', 'f3',) 49 | if soc.soc_pins_all_have_od: 50 | self.od = True 51 | elif soc.soc_pins_have_od: 52 | fields += ('od',) 53 | if soc.soc_pins_have_ior: 54 | fields += ('ior',) 55 | if soc.soc_pins_have_rcv_sel: 56 | fields += ('rcv_sel', ) 57 | if soc.soc_pins_have_hsm: 58 | fields += ('hsm', ) 59 | if soc.soc_pins_all_have_schmitt: 60 | self.schmitt = True 61 | elif soc.soc_pins_have_schmitt: 62 | fields += ('schmitt', ) 63 | if soc.soc_pins_have_drvtype: 64 | fields += ('drvtype', ) 65 | if soc.soc_pins_have_e_io_hv: 66 | fields += ('e_io_hv', ) 67 | for i, field in enumerate(fields): 68 | self.__setattr__(field, data[i]) 69 | self.funcs = (self.f0, self.f1, self.f2, self.f3) 70 | self.per_pin_drive_group = None 71 | 72 | def set_per_pin_drive_group(self, g): 73 | self.per_pin_drive_group = g 74 | 75 | def sort_by_num_key(self): 76 | return (self.__class__ == Pin, self.num) 77 | 78 | def _gpio_number(gpion): 79 | if len(gpion) == 2: 80 | bank = ord(gpion[0]) - ord('a') 81 | index = ord(gpion[1]) - ord('0') 82 | else: 83 | bank = ord(gpion[0]) - ord('a') + 26 84 | index = ord(gpion[2]) - ord('0') 85 | return (bank * 8) + index 86 | 87 | class Gpio(PinBase): 88 | def __init__(self, soc, data): 89 | num = _gpio_number(data[1]) 90 | PinBase.__init__(self, soc, data[0], data[1], num, data[2:]) 91 | 92 | class Pin(PinBase): 93 | def __init__(self, soc, num, data): 94 | PinBase.__init__(self, soc, data[0], '', num, data[1:]) 95 | 96 | class DriveGroup(ReprDictObj): 97 | def __init__(self, soc, data, gpios_pins): 98 | fields = ('name', 'reg', ) 99 | if soc.soc_drvgroups_have_hsm: 100 | fields += ('hsm_b',) 101 | if soc.soc_drvgroups_have_schmitt: 102 | fields += ('schmitt_b',) 103 | if soc.soc_drvgroups_have_lpmd: 104 | fields += ('lpmd_b',) 105 | if soc.soc_drvgroups_have_parked: 106 | fields += ('prk_mask',) 107 | fields += ('drvdn_b', 'drvdn_w', 'drvup_b', 'drvup_w', 'slwr_b', 108 | 'slwr_w', 'slwf_b', 'slwf_w') 109 | if soc.soc_drvgroups_have_drvtype: 110 | fields += ('drvtype', ) 111 | for i, field in enumerate(fields): 112 | self.__setattr__(field, data[i]) 113 | self.gpios_pins = gpios_pins 114 | self.fullname = 'drive_' + self.name 115 | self.has_matching_pin = ( 116 | soc.soc_combine_pin_drvgroup and 117 | (len(gpios_pins) == 1) and 118 | (gpios_pins[0].shortname == self.name) 119 | ) 120 | if self.has_matching_pin: 121 | gpios_pins[0].set_per_pin_drive_group(self) 122 | 123 | 124 | class MipiPadCtrlGroup(ReprDictObj): 125 | def __init__(self, soc, data, gpios_pins): 126 | fields = ('name', 'reg', 'bit', 'f0', 'f1') 127 | for i, field in enumerate(fields): 128 | self.__setattr__(field, data[i]) 129 | self.gpios_pins = gpios_pins 130 | self.fullname = 'mipi_pad_ctrl_' + self.name 131 | self.funcs = (self.f0, self.f1) 132 | 133 | class Function(ReprDictObj): 134 | def __init__(self, name): 135 | self.name = name 136 | self.pins = [] 137 | 138 | def _add_pin(self, pin): 139 | self.pins.append(pin) 140 | 141 | class Soc(TopLevelParsedObj): 142 | def __init__(self, name, data): 143 | copy_attrs = ( 144 | ('kernel_copyright_years', 2014), 145 | ('kernel_author', 'NVIDIA'), 146 | ('uboot_copyright_years', 2014), 147 | ('soc_has_io_clamping', None), 148 | ('soc_combine_pin_drvgroup', None), 149 | ('soc_rsvd_base', None), 150 | ('soc_drvgroups_have_drvtype', None), 151 | ('soc_drvgroups_have_hsm', None), 152 | ('soc_drvgroups_have_lpmd', None), 153 | ('soc_drvgroups_have_parked', None), 154 | ('soc_drvgroups_have_schmitt', None), 155 | ('soc_pins_all_have_od', None), 156 | ('soc_pins_all_have_parked', None), 157 | ('soc_pins_all_have_schmitt', None), 158 | ('soc_pins_have_drvtype', None), 159 | ('soc_pins_have_e_io_hv', None), 160 | ('soc_pins_have_hsm', None), 161 | ('soc_pins_have_ior', None), 162 | ('soc_pins_have_od', None), 163 | ('soc_pins_have_rcv_sel', None), 164 | ('soc_pins_have_schmitt', None), 165 | ('soc_drv_reg_base', None), 166 | ('soc_mipipadctrl_reg_base', 0), 167 | ('soc_einput_b', None), 168 | ('soc_odrain_b', None), 169 | ('soc_parked_bit', None), 170 | ) 171 | TopLevelParsedObj.__init__(self, name, copy_attrs, data) 172 | 173 | gpios_pins_by_fullname = {} 174 | gpios_pins_by_shortname = {} 175 | 176 | self._gpios = [] 177 | for gpiodata in data['gpios']: 178 | gpio = Gpio(self, gpiodata) 179 | gpios_pins_by_fullname[gpio.fullname] = gpio 180 | gpios_pins_by_shortname[gpio.shortname] = gpio 181 | self._gpios.append(gpio) 182 | 183 | self._pins = [] 184 | for num, pindata in enumerate(data['pins']): 185 | pin = Pin(self, num, pindata) 186 | gpios_pins_by_fullname[pin.fullname] = pin 187 | gpios_pins_by_shortname[pin.shortname] = pin 188 | self._pins.append(pin) 189 | 190 | self._drive_groups = [] 191 | for drive_group in data['drive_groups']: 192 | names = data['drive_group_pins'][drive_group[0]] 193 | gpios_pins = [] 194 | for name in names: 195 | gpios_pins.append(gpios_pins_by_fullname[name]) 196 | self._drive_groups.append(DriveGroup(self, drive_group, gpios_pins)) 197 | 198 | self._mipi_pad_ctrl_groups = [] 199 | for group in data.get('mipi_pad_ctrl_groups', []): 200 | names = data['mipi_pad_ctrl_group_pins'][group[0]] 201 | gpios_pins = [] 202 | for name in names: 203 | gpios_pins.append(gpios_pins_by_fullname[name]) 204 | self._mipi_pad_ctrl_groups.append(MipiPadCtrlGroup(self, group, gpios_pins)) 205 | 206 | self._generate_derived_data() 207 | 208 | def _generate_derived_data(self): 209 | self._gpios_by_num = sorted(self._gpios, key=lambda gpio: gpio.num) 210 | self._pins_by_num = sorted(self._pins, key=lambda pin: pin.num) 211 | self._gpios_pins_by_num = sorted(self._gpios + self._pins, key=lambda gpio_pin: gpio_pin.sort_by_num_key()) 212 | 213 | gpios_with_reg = [gpio for gpio in self._gpios if gpio.reg] 214 | pins_with_reg = [pin for pin in self._pins if pin.reg] 215 | 216 | self._gpios_by_reg = sorted(gpios_with_reg, key=lambda gpio: gpio.reg) 217 | self._pins_by_reg = sorted(pins_with_reg, key=lambda pin: pin.reg) 218 | self._gpios_pins_by_reg = sorted(gpios_with_reg + pins_with_reg, key=lambda gpio_pin: gpio_pin.reg) 219 | 220 | self._drive_groups_by_reg = sorted(self._drive_groups, key=lambda drive_group: drive_group.reg) 221 | self._drive_groups_by_alpha = sorted(self._drive_groups, key=lambda drive_group: drive_group.name) 222 | 223 | self._mipi_pad_ctrl_groups_by_reg = sorted(self._mipi_pad_ctrl_groups, key=lambda group: group.reg) 224 | self._mipi_pad_ctrl_groups_by_alpha = sorted(self._mipi_pad_ctrl_groups, key=lambda group: group.name) 225 | 226 | functions = collections.OrderedDict() 227 | for pin in self._gpios + self._pins: 228 | if not pin.reg: 229 | continue 230 | for func in pin.funcs: 231 | if func not in functions: 232 | functions[func] = Function(func) 233 | functions[func]._add_pin(pin) 234 | for group in self._mipi_pad_ctrl_groups: 235 | for func in (group.f0, group.f1): 236 | if func not in functions: 237 | functions[func] = Function(func) 238 | self._functions = functions.values() 239 | self._functions_by_alpha = sorted(self._functions, key=lambda f: f.name) 240 | 241 | def gpios_by_conf_order(self): 242 | return self._gpios 243 | 244 | def gpios_by_num(self): 245 | return self._gpios_by_num 246 | 247 | def gpios_by_reg(self): 248 | return self._gpios_by_reg 249 | 250 | def pins_by_conf_order(self): 251 | return self._pins 252 | 253 | def pins_by_num(self): 254 | return self._pins_by_num 255 | 256 | def pins_by_reg(self): 257 | return self._pins_by_reg 258 | 259 | def gpios_pins_by_num(self): 260 | return self._gpios_pins_by_num 261 | 262 | def gpios_pins_by_reg(self): 263 | return self._gpios_pins_by_reg 264 | 265 | def gpio_or_pin_by_name(self, name): 266 | for gpio_pin in self._gpios_pins_by_num: 267 | if name == gpio_pin.signal: 268 | return gpio_pin 269 | if name == 'gpio_p' + gpio_pin.gpio: 270 | return gpio_pin 271 | return None 272 | 273 | def gpio_or_pin_by_fullname(self, name): 274 | for gpio_pin in self._gpios_pins_by_num: 275 | if name == gpio_pin.fullname: 276 | return gpio_pin 277 | return None 278 | 279 | def drive_groups_by_conf_order(self): 280 | return self._drive_groups 281 | 282 | def drive_groups_by_reg(self): 283 | return self._drive_groups_by_reg 284 | 285 | def drive_groups_by_alpha(self): 286 | return self._drive_groups_by_alpha 287 | 288 | def mipi_pad_ctrl_groups_by_conf_order(self): 289 | return self._mipi_pad_ctrl_groups 290 | 291 | def mipi_pad_ctrl_groups_by_reg(self): 292 | return self._mipi_pad_ctrl_groups_by_reg 293 | 294 | def mipi_pad_ctrl_groups_by_alpha(self): 295 | return self._mipi_pad_ctrl_groups_by_alpha 296 | 297 | def mipi_pad_ctrl_group_by_name(self, name): 298 | for mipi_pad_ctrl in self._mipi_pad_ctrl_groups: 299 | if name == mipi_pad_ctrl.name: 300 | return mipi_pad_ctrl 301 | return None 302 | 303 | def functions(self): 304 | return self._functions 305 | 306 | def functions_by_alpha(self): 307 | return self._functions_by_alpha 308 | 309 | def load_soc(socname): 310 | fn = os.path.join(configs_dir, socname + '.soc') 311 | d = {} 312 | with open(fn) as f: 313 | code = compile(f.read(), fn, 'exec') 314 | exec(code, globals(), d) 315 | 316 | return Soc(socname, d) 317 | -------------------------------------------------------------------------------- /tegra_pmx_utils.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) 2014, NVIDIA CORPORATION. All rights reserved. 2 | # 3 | # Permission is hereby granted, free of charge, to any person obtaining a 4 | # copy of this software and associated documentation files (the "Software"), 5 | # to deal in the Software without restriction, including without limitation 6 | # the rights to use, copy, modify, merge, publish, distribute, sublicense, 7 | # and/or sell copies of the Software, and to permit persons to whom the 8 | # Software is furnished to do so, subject to the following conditions: 9 | # 10 | # The above copyright notice and this permission notice shall be included in 11 | # all copies or substantial portions of the Software. 12 | # 13 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 16 | # THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18 | # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19 | # DEALINGS IN THE SOFTWARE. 20 | 21 | import sys 22 | 23 | def gen_tab_padding_to(curpos, targetpos): 24 | curpos -= 1 25 | targetpos -= 1 26 | if (targetpos & 7): 27 | raise Exception(str(targetpos) + ' is not a TAB stop') 28 | left = targetpos - curpos 29 | tabs = (left + 7) // 8 30 | return '\t' * tabs 31 | 32 | def emit_tab_padding_to(curpos, targetpos): 33 | print(gen_tab_padding_to(curpos, targetpos), end='') 34 | 35 | def emit_padded_field(s, maxl, skip_comma=False, right_justify=False, file=sys.stdout): 36 | pad = (' ' * (maxl - len(s))) 37 | if right_justify: 38 | print(pad, file=file, end='') 39 | print(s, file=file, end='') 40 | if skip_comma: 41 | return 42 | print(', ', file=file, end='') 43 | if not right_justify: 44 | print(pad, file=file, end='') 45 | 46 | def emit_define(define, value, valuecol): 47 | s = '#define ' + define 48 | print(s, end='') 49 | emit_tab_padding_to(len(s) + 1, valuecol) 50 | print(value) 51 | 52 | def gen_wrapped_c_macro_header(macro, params): 53 | intro = '#define %s(' % macro 54 | intro_space = ' ' * len(intro) 55 | s = '' 56 | l = intro 57 | for i, param in enumerate(params): 58 | if i != 0: 59 | prefix = ' ' 60 | else: 61 | prefix = '' 62 | if i == len(params) - 1: 63 | suffix = ')' 64 | else: 65 | suffix = ',' 66 | # ', ' ',' 67 | if (len(l) + len(prefix) + len(param) + len(suffix)) < 71: 68 | l += prefix + param + suffix 69 | else: 70 | s += l + '\n' 71 | l = intro_space + param + suffix 72 | if l: 73 | s += l 74 | s += '\n' 75 | return s 76 | 77 | def len_evaluating_tabs(s): 78 | l = 0 79 | for c in s: 80 | if c == '\t': 81 | l = (l + 8) & ~7 82 | else: 83 | l += 1 84 | return l 85 | 86 | def append_aligned_tabs_indent_with_tabs(s, min_slashpos): 87 | lines = s.split('\n') 88 | if lines[-1].strip() == '': 89 | del lines[-1] 90 | # This is intended to translate leading spaces to TABs, so that callers 91 | # don't have to work out the right number of TABs to use. It also would 92 | # affect intra-line space, but there is none in practice so far. 93 | for i, l in enumerate(lines): 94 | lines[i] = l.replace(' ', '\t') 95 | max_len = 0 96 | for l in lines: 97 | max_len = max(max_len, len_evaluating_tabs(l)) 98 | max_len = max(max_len, min_slashpos) 99 | tabpos = (max_len + 7) & ~7 100 | for i, l in enumerate(lines): 101 | lines[i] += gen_tab_padding_to(len_evaluating_tabs(l) + 1, tabpos + 1) + '\\' 102 | return '\n'.join(lines) 103 | 104 | def yn_to_boolean(s): 105 | return {'N': False, 'Y': True}[s] 106 | 107 | def boolean_to_yn(val): 108 | return {True: 'Y', False: 'N'}[val] 109 | 110 | def boolean_to_c_bool(val): 111 | return {True: 'true', False: 'false'}[val] 112 | 113 | def dump_table(heading_prefix, heading_suffix, headings, row_prefix, row_suffix, rows, col_widths, file, right_justifies): 114 | num_cols = 0 115 | if headings: 116 | num_cols = max(num_cols, len(headings)) 117 | if col_widths: 118 | num_cols = max(num_cols, len(col_widths)) 119 | for row in rows: 120 | if type(row) == str: 121 | continue 122 | num_cols = max(num_cols, len(row)) 123 | widths = [0] * num_cols 124 | 125 | if col_widths: 126 | for col, val in enumerate(col_widths): 127 | if not val: 128 | continue 129 | widths[col] = val 130 | 131 | if headings: 132 | for col, val in enumerate(headings): 133 | if col_widths and col_widths[col]: 134 | continue 135 | widths[col] = len(val) 136 | 137 | for row in rows: 138 | if type(row) == str: 139 | continue 140 | for col, val in enumerate(row): 141 | if col_widths and col_widths[col]: 142 | continue 143 | widths[col] = max(widths[col], len(val)) 144 | 145 | if headings: 146 | print(heading_prefix, end='', file=file) 147 | for col, heading in enumerate(headings): 148 | emit_padded_field(heading, widths[col], skip_comma = (col == len(headings) - 1), file=file) 149 | print(heading_suffix, file=file) 150 | 151 | for row in rows: 152 | if type(row) == str: 153 | print(row, file=file) 154 | else: 155 | print(row_prefix, end='', file=file) 156 | force_comma = len(row) == 1 157 | for col, val in enumerate(row): 158 | if right_justifies: 159 | right_justify = right_justifies[col] 160 | else: 161 | right_justify = False 162 | emit_padded_field(val, widths[col], skip_comma = (col == len(row) - 1) and not force_comma, file=file, right_justify=right_justify) 163 | print(row_suffix, file=file) 164 | 165 | def dump_py_table(headings, rows, col_widths=None, file=sys.stdout, right_justifies=None): 166 | dump_table(' #', '', headings, ' (', '),', rows, col_widths, file, right_justifies) 167 | 168 | def dump_c_table(headings, macro_name, rows, col_widths=None, file=sys.stdout, right_justifies=None, row_indent='\t'): 169 | dump_table(row_indent + '/* ' + ' ' * (len(macro_name) - 2), ' */', headings, row_indent + macro_name + '(', '),', rows, col_widths, file, right_justifies) 170 | 171 | def spreadsheet_col_name_to_num(col): 172 | if len(col) == 2: 173 | return ((ord(col[0]) - ord('A') + 1) * 26) + (ord(col[1]) - ord('A')) 174 | elif len(col) == 1: 175 | return ord(col[0]) - ord('A') 176 | else: 177 | raise Exception('Bad column name ' + col) 178 | 179 | def rsvd_0base_to_1base(f): 180 | if not f.startswith('rsvd'): 181 | return f 182 | n = int(f[4:]) 183 | n += 1 184 | return 'rsvd' + str(n) 185 | --------------------------------------------------------------------------------