Bus services
gpio
This is "nn::gpio::IManager".
Cmd | Name |
---|---|
0 | #OpenSessionForDev |
1 | #OpenSession |
2 | #OpenSessionForTest |
3 | [1.0.0-6.2.0] IsWakeEventActive |
4 | [1.0.0-6.2.0] GetWakeEventActiveFlagSet |
5 | [1.0.0-6.2.0] SetWakeEventActiveFlagSetForDebug |
6 | SetWakePinDebugMode |
7 | [5.0.0+] #OpenSession2 |
8 | [5.0.0+] IsWakeEventActive2 |
9 | [5.0.0+] SetWakeEventActiveFlagSetForDebug2 |
10 | [6.0.0+] |
Known Devices
GpioPadName | GpioPadDescriptor | DeviceCode | Tegra (port, pin) | Usage | Direction | Used by |
---|---|---|---|---|---|---|
0x01 | 0xCC | 0x33000002 | Z, 4 | Audio Codec (ALC5639) Power (CODEC_LDO_EN_TEMP) | Out | Audio services, Fatal services |
0x02 | 0x24 | 0x3C000001 | E, 4 | SDCard Power (POW_SD_EN) | Out | PCV services |
0x03 | 0x3C | 0x37000002 | H, 4 | Bluetooth Reset (BT_RST_PH4) | Out | Bluetooth Driver services |
0x04 | 0xDA | 0xC9000402 | BB, 2 | Secondary Boot Device Configration (RAM_CODE3) | In | |
0x05 | 0xDB | 0x3C000402 | BB, 3 | GcAsic Reset (GC_RST) | Out | Filesystem services |
0x06 | 0xDC | 0x33000003 | BB, 4 | Audio Codec (ALC5639) Alert (CODEC_ALERT) | In | Audio services |
0x07 | 0x25 | 0x3C000401 | E, 5 | GcAsic Power (POW_GC) | Out | |
0x08 | 0x90 | 0x350000CA | S, 0 | Debug Pad Detect (DEBUG_CONTROLLER_DET) | In | HID services |
0x09 | 0x91 | 0x39000407 | S, 1 | Battery Charge Status (BATT_CHG_STATUS) | In | |
0x0A | 0x96 | 0x39000003 | S, 6 | Charger IC (BQ24193) Charge Enable (BATT_CHG_ENABLE_N) | Out | PTM services |
0x0B | 0x97 | 0x3D000002 | S, 7 | Fan Tachometer (FAN_TACH) | In | |
0x0C | 0x26 | 0x3500040B | E, 6 | Joy-Con(L) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) (EXTCON_DET_S) | In | HID services |
0x0D | 0x05 | 0x39000401 | A, 5 | Fan and Joy-Con Rails Power (Battery - BQ24193 5V) (VDD50A_EN) | Out | PTM services |
0x0E | 0x78 | 0xCA000402 | P, 0 | SDEV Coax Select (SDEV_COAX_SEL_1) | In | |
0x0F | 0x93 | 0x3C000403 | S, 3 | GcAsic Card Detect (GC_CD) | In | Filesystem services |
0x10 | 0x7D | 0xC900040B | P, 5 | PROD_TYPE_0 | In | |
0x11 | 0x7C | 0xC900040C | P, 4 | PROD_TYPE_1 | In | |
0x12 | 0x7B | 0xC900040D | P, 3 | PROD_TYPE_2 | In | |
0x13 | 0x7A | 0xC900040E | P, 2 | PROD_TYPE_3 | In | |
0x14 | 0xBC | 0x3E000002 | X, 4 | Temperature Sensor (TEMP_ALERT) | In | |
0x15 | 0xAE | 0x33000004 | V, 6 | Audio Codec (ALC5639) Headphone Detect (CODEC_HP_DET_IRQ) | In | Audio services |
0x16 | 0xBA | 0x35000041 | X, 2 | MOTION_INT_PX2 | In | |
0x17 | 0xB9 | 0x35000036 | X, 1 | TouchPanel IRQ (TP_IRQ) (unused - polled instead) | In | HID services |
0x18 | 0xBD | 0x35000001 | X, 5 | Power Button (BUTTON_POWER_ON_PX5) | In | |
0x19 | 0xBE | 0x35000002 | X, 6 | Volume Up (BUTTON_VOL_UP_PX6) | In | Boot2, Audio services |
0x1A | 0xBF | 0x35000003 | X, 7 | Volume Down (BUTTON_VOL_DOWN_PX7) | In | Boot2, Audio services |
0x1B | 0xC0 | 0x39000034 | Y, 0 | Fuel Gauge IC (MAX17050) IRQ (BATT_MGIC_IRQ) | In | PTM services |
0x1C | 0xC1 | 0x35000004 | Y, 1 | Recovery Mode Key (BUTTON_HOME_PY1) | In | |
0x1D | 0xA9 | 0x3400003E | V, 1 | Backlight Enable (LCD_BL_EN_PV1) | Out | NV services, Backlight services |
0x1E | 0xAA | 0x34000033 | V, 2 | Backlight Reset (LCD_RST_PV2) | Out | NV services |
0x1F | 0x55 | 0x040000CC | K, 5 | USB-PD Controller (RHOM BM92T30MWV) VCONN Power (PD_VCONN_EN) | Out | PTM services, USB services |
0x20 | 0xAD | 0x040000CA | V, 5 | USB-PD Controller (RHOM BM92T30MWV) Reset (PD_RST) | Out | USB services |
0x21 | 0xC8 | 0x39000002 | Z, 0 | Charger IC (BQ24193) IRQ (BQ24193_IRQ) | In | PTM services |
0x22 | 0xCA | 0xCA000401 | Z, 2 | SDEV Coax Select (SDEV_COAX_SEL_0) | In | |
0x23 | 0xCB | 0x3C000003 | Z, 3 | SDCard Write Protect (SD_WP) | In | |
0x24 | 0x4F | 0x35000035 | J, 7 | TouchPanel Reset (TP_RST) | Out | HID services |
0x25 | 0x50 | 0x37000401 | K, 0 | BT_GPIO_2 | In | |
0x26 | 0x51 | 0x37000402 | K, 1 | BT_GPIO_3 | In | |
0x27 | 0x52 | 0x37000403 | K, 2 | BT_GPIO_4 | In | |
0x28 | 0x54 | 0x040000CB | K, 4 | USB-PD Controller (RHOM BM92T30MWV) IRQ (PD_IRQ) | In | USB services |
0x29 | 0x56 | 0x3E000003 | K, 6 | POW_VCPU_INT | In | |
0x2A | 0x57 | 0x3E000004 | K, 7 | MAX77621_GPU_INT | In | |
0x2B | 0x53 | 0x35000402 | K, 3 | Joy-Con(R) Charge (EXTCON_CHG_U) | Out | HID services |
0x2C | 0xE3 | 0x3500040C | CC, 3 | Joy-Con(L) Charge (EXTCON_CHG_S) | Out | HID services |
0x2D | 0x38 | 0x38000003 | H, 0 | WIFI_RF_DISABLE | Out | |
0x2E | 0x39 | 0x38000002 | H, 1 | WiFi Reset (WIFI_RST_PH1) | Out | WLAN services, PCIe services |
0x2F | 0x3B | 0x37000003 | H, 3 | AP_WAKE_BT_PH3 | Out | Bluetooth Driver services |
0x30 | 0x3D | 0x37000004 | H, 5 | BT_WAKE_AP | In | |
0x31 | 0x3F | 0x37000404 | H, 7 | BT_GPIO_5 | Out | |
0x32 | 0x40 | 0x34000034 | I, 0 | Backlight +5V (LCD_VDD_P_EN) | Out | NV services |
0x33 | 0x41 | 0x34000035 | I, 1 | Backlight -5V (LCD_VDD_N_EN) | Out | NV services |
0x34 | 0x3E | 0x35000401 | H, 6 | Joy-Con(R) IsAttached (insertion, Joy-Con pin 5/console TX, pulled low on insert?) (EXTCON_DET_U) | In | HID services |
0x35 | 0xE2 | 0xC9000401 | CC, 2 | Secondary Boot Device Configration (RAM_CODE2) | In | |
0x36 | 0xE4 | 0x39000402 | CC, 4 | Fan and Joy-Con Rails Power (USB 5V) (VDD50B_EN) | Out | PTM services |
0x37 | 0x3A | 0x38000004 | H, 2 | WIFI_WAKE_HOST | In | |
0x38 | 0xC9 | 0x3C000002 | Z, 1 | SDCard Card Detect (SD_CD) | In | Filesystem services |
0x39 | 0x4D | 0x39000404 | J, 5 | Charger IC (BQ24193) OTG Charge Select (OTG_FET_1) | Out | PTM services, USB services |
0x3A | 0x58 | 0x39000405 | L, 0 | Charger IC (BQ24193) OTG Charge Select (OTG_FET_2) | Out | PTM services, USB services |
0x3B | 0x3E | 0x35000403 | H, 6 | Joy-Con(R) Wake Detect (EXTCON_DET_U) | In | |
0x3C | 0x26 | 0x3500040D | E, 6 | Joy-Con(L) Wake Detect (EXTCON_DET_S) | In | |
0x3D | -1 | 0x39000406 | ||||
0x3E | 0x33 | 0x35000404 | G, 3 | Joy-Con(R) CTS (checked low) (EXT_UART2_CTS) | In | HID services |
0x3F | 0x1C | 0x3500040E | D, 4 | Joy-Con(L) CTS (checked low) (EXT_UART3_CTS) | In | HID services |
0x40 | 0xD9 | 0x39000408 | BB, 1 | 5V Step-Down Regulator Power (5V_STEPDOWN_EN) | Out | (SDEV only) |
0x41 | 0x0C | 0x04000401 | B, 4 | USB Root Port 2 Over Current (USB_B2_OC) | In | USB services (SDEV only) |
0x42 | 0x0D | 0x39000409 | B, 5 | 5V Step-Down Regulator Power Good Flag (5V_STEPDOWN_PG) | In | (SDEV only) |
0x43 | 0x21 | 0x04000402 | E, 1 | USB Power (USB_A_EN) | Out | USB services (SDEV only) |
0x44 | 0x27 | 0x04000403 | E, 7 | USB Power Flag (USB_A_FLAG) | In | USB services (SDEV only) |
0x45 | 0x92 | 0x04000404 | S, 2 | USB Root Port 3 Over Current (USB_B3_OC) | In | USB services (SDEV only) |
0x46 | 0x95 | 0x04000405 | S, 5 | USB Root Port 3 Power (USB_B3_EN) | Out | USB services (SDEV only) |
0x47 | 0x98 | 0x04000406 | T, 0 | USB Root Port 2 Power (USB_B2_EN) | Out | USB services (SDEV only) |
0x48 | 0x10 | 0x34000004 | C, 0 | HDMI 5V (HDMI_5V_EN) | Out | [2.0.0+] NV services |
0x49 | 0x11 | 0x04000407 | C, 1 | USB Root Port 1 Power (USB_B1_EN) | Out | USB services |
0x4A | 0x12 | 0x34000005 | C, 2 | HDMI/Power Delivery Switch (HDMI_PD_TR_EN) | Out | NV services |
0x4B | 0x42 | 0x3D000003 | I, 2 | Fan Enable (FAN_EN) | Out | PTM services |
0x4C | 0xE6 | 0x04000408 | CC, 6 | USB Root Port 1 Over Current (USB_B1_OC) | In | USB services (SDEV only) |
[2.0.0+] 0x4D | 0xAC | 0x3D000001 | V, 4 | Fan Pulse-Width Modulation Control (PWM_FAN) | Out | PTM services |
[2.0.0+] 0x4E | 0xE1 | 0x34000006 | CC, 1 | HDMI Hot Plug Detect (HDMI_INT_DP_HPD_PCC1) | In | NV services |
[5.0.0+] 0x4F | 0x56 | 0x3E000003 | K, 6 | MAX77812_IRQ | ||
[6.0.0+] 0x50 | 0x20 | 0xCA000001 | E, 0 | |||
[6.0.0+] 0x51 | 0x21 | 0xCA000002 | E, 1 | |||
[6.0.0+] 0x52 | 0x22 | 0xCA000003 | E, 2 | |||
[6.0.0+] 0x53 | 0x23 | 0xCA000004 | E, 3 | |||
[6.0.0+] 0x54 | 0x4C | 0x36000004 | J, 4 | NFC_IRQ | ||
[6.0.0+] 0x55 | 0x57 | 0x36000003 | K, 7 | NFC_RST | ||
[6.0.0+] 0x56 | 0x27 ([6.0.0-8.0.0] 0x94) | 0x35000415 | S, 4 | MCU_IRQ | ||
[6.0.0+] 0x57 | 0x98 | 0x35000416 | T, 0 | MCU_BOOT | ||
[6.0.0+] 0x58 | 0x99 | 0x35000417 | T, 1 | MCU_RST | ||
[6.0.0+] 0x59 | 0xBB | 0x39000403 | X, 3 | Fan Power (5V3) (VDD5V3_EN) | PTM services | |
[6.0.0+] 0x5A | 0xE5 | 0x35000418 | CC, 5 | MCU_POR | ||
[6.0.0+] 0x5B | 0xAB | 0x35000005 | V, 3 | |||
[6.0.0+] 0x5C | 0x4E | 0x36000002 | J, 6 | |||
[7.0.0+] - | 0x32 | 0x35000406 | G, 2 | Joy-Con(R) RTS | ||
[7.0.0+] - | 0x1B | 0x35000410 | D, 3 | Joy-Con(L) RTS | ||
[7.0.0+] - | 0x17 | 0x3500041B | C, 7 | |||
[7.0.0+] - | 0x18 | 0x3500041C | D, 0 | |||
[7.0.0+] - | 0x15 | 0x3500041D | C, 5 | |||
[7.0.0+] - | 0x16 | 0x3500041E | C, 6 |
GpioPadDescriptor
Bits | Description |
---|---|
7-5 | Controller index |
4-3 | Port index |
2-0 | Pin number |
OpenSessionForDev
Takes a raw #GpioPadDescriptor and returns a #IPadSession session for it.
OpenSession
Same thing as #OpenSessionForDev except it takes a GpioPadName which is then converted to a #GpioPadDescriptor. Returns an #IPadSession session.
OpenSessionForTest
Same as #OpenSession but panics on failure.
OpenSession2
Same as #OpenSession but takes a DeviceCode instead of a GpioPadName and an u32 DeviceUnk.
IPadSession
This is "nn::gpio::IPadSession".
Cmd | Name |
---|---|
0 | SetDirection |
1 | GetDirection |
2 | SetInterruptMode |
3 | GetInterruptMode |
4 | SetInterruptEnable |
5 | GetInterruptEnable |
6 | GetInterruptStatus |
7 | ClearInterruptStatus |
8 | SetValue |
9 | GetValue |
10 | BindInterrupt |
11 | UnbindInterrupt |
12 | SetDebounceEnabled |
13 | GetDebounceEnabled |
14 | SetDebounceTime |
15 | GetDebounceTime |
16 | [4.0.0+] SetValueForSleepState |
17 | [6.0.0+] GetValueForSleepState |
i2c, i2c:pcv
This is "nn::i2c::IManager".
Cmd | Name |
---|---|
0 | OpenSessionForDev |
1 | OpenSession |
[1.0.0-5.1.0] 2 | HasDevice |
[1.0.0-5.1.0] 3 | HasDeviceForDev |
4 | [6.0.0+] OpenSession2 |
Known Devices
Name | DeviceCode | Port:Addr | Is10bit | Speed | Max Retries | Retry Delay | Usage | Used by |
---|---|---|---|---|---|---|---|---|
0 | 0x350000C9 | 0:52 | N | 100000 | 0 | 0 | DebugPadDriver | HID services |
1 | 0x35000033 | 2:49 | N | 400000 | 0 | 0 | TouchPanel | HID services |
2 | 0x3E000001 | 0:4c | N | 100000 | 0 | 0 | Temperature Sensor (TMP451 or NCT72) | PTM services |
3 | 0x3E000001 | 0:4c | N | 100000 | 0 | 0 | Temperature Sensor (TMP451 or NCT72) (duplicate) | PTM services |
4 | 0x33000001 | 0:1c | N | 100000 | 0 | 0 | Audio Codec (ALC5639) | Audio services, Fatal services |
5 | 0x3B000001 | 4:68 | N | 400000 | 3 | 5000000 | PMIC RTC (max77620_rtc0), max77620_irq0 | PCV services |
6 | 0x3A000001 | 4:3c | N | 400000 | 3 | 5000000 | PMIC (MAX77620), max77620_irq0 | PCV services |
7 | 0x3A000003 | 4:1b | N | 400000 | 3 | 5000000 | Sub-PMIC for CPU (max77621_cpu) | PCV services |
8 | 0x3A000004 | 4:1c | N | 400000 | 3 | 5000000 | Sub-PMIC for GPU (max77621_gpu) | PCV services |
9 | 0x39000001 | 0:6b | N | 100000 | 3 | 5000000 | Charger IC (BQ24193) | PTM services |
10 | 0x39000033 | 0:36 | N | 100000 | 3 | 5000000 | Fuel Gauge IC (MAX17050) | PTM services, PCV services |
11 | 0x040000C9 | 0:18 | N | 100000 | 3 | 5000000 | USB-PD controller (RHOM BM92T30MWV) | USB services |
12 | 0x3F000401 | 1:40 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VDD15V0-HB) | Factory testing |
13 | 0x3F000001 | 1:41 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VSYS-CPU-DS) | Factory testing |
14 | 0x3F000002 | 1:44 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VSYS-GPU-DS) | Factory testing |
15 | 0x3F000003 | 1:45 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VSYS-DDR-DS) | Factory testing |
16 | 0x3F000402 | 1:46 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VSYS-AP) | Factory testing |
17 | 0x3F000403 | 1:47 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VSYS-BL-DS) | Factory testing |
18 | 0x35000047 | 1:29 | N | 400000 | 3 | 5000000 | Ambient Light Sensor (BH1730) | Backlight services |
19 | 0x3F000404 | 1:48 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_CORE) | Factory testing |
20 | 0x3F000405 | 1:49 | N | 400000 | 3 | 5000000 | Power Monitor (ina226_Soc-1V8) | Factory testing |
21 | 0x3F000406 | 1:4a | N | 400000 | 3 | 5000000 | Power Monitor (ina226_LPDDR4-1V8) | Factory testing |
22 | 0x3F000407 | 1:4b | N | 400000 | 3 | 5000000 | Power Monitor (ina226_REG1V32) | Factory testing |
23 | 0x3F000408 | 1:4d | N | 400000 | 3 | 5000000 | Power Monitor (ina226_VDD3V3-SYS) | Factory testing |
[2.0.0+] 24 | 0x34000001 | 3:50 | N | 100000 | 0 | 0 | HDMI DDC | NV services |
[2.0.0+] 25 | 0x34000002 | 3:54 | N | 100000 | 0 | 0 | HDMI SCDC | NV services |
[2.0.0+] 26 | 0x34000003 | 3:3a | N | 100000 | 0 | 0 | HDMI HDCP | NV services |
[4.0.0+] 27 | 0x3A000005 | 4:52 ([4.0.0-8.0.0] 4:a4) | N | 400000 | 0 | 0 | Buck Regulator (FAN53528) | |
[4.0.0+] 28 | 0x3A000002 | 4:33 ([4.0.0-8.0.0] 4:31) | N | 400000 | 0 | 0 | PMIC (MAX77812) | PCV services |
[4.0.0+] 29 | 0x3A000002 | 4:33 ([4.0.0-8.0.0] 4:31) | N | 400000 | 0 | 0 | PMIC (MAX77812) | PCV services |
[4.0.0+] 30 | 0x3F000409 | 1:4e | N | 400000 | 3 | 5000000 | Power Monitor (ina226_V_VDD-DDR-0V6) | Factory testing |
[8.0.0+] 31 | 0x36000001 | 1:08 | N | 400000 | 3 | 5000000 |
OpenSessionForDev
Takes an u32 port, an u16 addr, an AddressingMode (1 for 10-bit, 0 otherwise) and a SpeedMode (400000 or 100000). Returns a #II2cSession session.
OpenSession
Takes an I2cDevice and returns a #II2cSession session for it.
HasDevice
Takes an I2cDevice and returns true if the device exists or false otherwise.
HasDeviceForDev
Takes an u32 port, an u16 addr, an AddressingMode (1 for 10-bit, 0 otherwise) and a SpeedMode (400000 or 100000). Returns true if the device exists or false otherwise.
OpenSession2
Same as OpenSession but takes a DeviceCode instead of a I2cDevice.
II2cSession
This is "nn::i2c::ISession".
Cmd | Name |
---|---|
[1.0.0-5.1.0] 0 | Send |
[1.0.0-5.1.0] 1 | Receive |
[1.0.0-5.1.0] 2 | ExecuteCommandList |
10 | #SendAuto |
11 | ReceiveAuto |
12 | #ExecuteCommandListAuto |
13 | [6.0.0+] |
SendAuto
Takes bytes to write in either a static buffer or a receive buffer, returns an error code for success
ExecuteCommandListAuto
Takes a command list from either a static buffer or a receive buffer, returns data in either a static (or recieve?) buffer.
Commands
- 0x40 [u8 len] <bytes> - Write bytes to device
- 0xC1 [u8 len] - Receive bytes from device
uart
This is "nn::uart::IManager".
Cmd | Name |
---|---|
0 | #DoesUartExist |
1 | DoesUartExistForTest |
2 | #IsUartBaudrateValid |
3 | IsUartBaudrateValidForTest |
4 | #IsSomethingUartValid |
5 | IsSomethingUartValidForTest |
6 | #GetSession |
7 | IsSomethingUartValid2 |
8 | IsSomethingUartValid2ForTest |
9 | [7.0.0+] IsSomethingUartValid3 |
10 | [7.0.0+] IsSomethingUartValid3ForTest |
DoesUartExist
Takes a u32 #UartPort and returns boolean success value
IsUartBaudrateValid
Takes a u32 #UartPort and a u32 baudrate and returns boolean success value
IsSomethingUartValid
Takes a u32 #UartPort and returns boolean success value
GetSession
Takes a u32 #UartPort and returns an #IPortSession
UartPort
Name | DeviceCode | Port | Usage |
---|---|---|---|
1 | 0x37000001 | UART-D | Bluetooth |
2 | 0x35000405 | UART-B | Joy-Con(R) |
3 | 0x3500040F | UART-C | Joy-Con(L) |
4 | 0x35000419 |
IPortSession
This is "nn::uart::IPortSession".
Cmd | Name |
---|---|
0 | OpenSession |
1 | OpenSessionForTest |
2 | |
3 | |
4 | |
5 | |
6 | |
7 |
[7.0.0+] OpenSession/OpenSessionForTest now takes an additional 0x8-bytes of input.
Port Mapping
OpenSession translates user IDs to to the #UartPort index.
OpenSessionForTest takes the port index verbatim.
pwm
This is "nn::pwm::IManager".
Cmd | Name |
---|---|
0 | OpenSessionForDev |
1 | OpenSession |
2 | [6.0.0+] OpenSession2 |
Known Channels
Name | DeviceCode | Interface | Usage | Used by |
---|---|---|---|---|
1 | 0x3D000001 | PWM Channel 1 | Fan | PTM services |
2 | 0x3400003D | PWM Channel 0 | Backlight | Backlight services, NV services |
3 | 0x35000065 | PMC Blinker |
IChannelSession
This is "nn::pwm::IChannelSession".
Cmd | Name |
---|---|
0 | SetPeriod |
1 | GetPeriod |
2 | SetDuty |
3 | GetDuty |
4 | SetEnabled |
5 | GetEnabled |
6 | [6.0.0+] |
7 | [6.0.0+] |
pinmux
This is "nn::pinmux::IManager".
Cmd | Name |
---|---|
0 | OpenSession |
ISession
This is "nn::pinmux::ISession".
Cmd | Name |
---|---|
0 | SetPinAssignment |
1 | GetPinAssignment |
2 | SetPinAssignmentForHardwareTest |
sasbus
This is "nn::sasbus::IManager".
Cmd | Name |
---|---|
0 | OpenSession |
ISession
This is "nn::sasbus::ISession".
Cmd | Name |
---|---|
0 | |
1 | |
2 | |
3 |