<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shuffle2</id>
	<title>Nintendo Switch Brew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://switchbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shuffle2"/>
	<link rel="alternate" type="text/html" href="https://switchbrew.org/wiki/Special:Contributions/Shuffle2"/>
	<updated>2026-05-05T04:49:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Gamecard&amp;diff=9673</id>
		<title>Gamecard</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Gamecard&amp;diff=9673"/>
		<updated>2020-06-21T06:37:28Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Renumber cart pins to make end-end trace easier, at expense of dat lines becoming swizzled&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the Nintendo Switch Gamecard.&lt;br /&gt;
&lt;br /&gt;
{|  style=&amp;quot;float:right; margin-left: 0px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:ZeldaFront.jpg|200px|thumb|right|A Switch game cartridge, frontside]] &lt;br /&gt;
| [[File:ZeldaBack.jpg|200px|thumb|right|A Switch game cartridge, backside]] &lt;br /&gt;
|-&lt;br /&gt;
| [[File:CartridgeFront.jpeg|200px|thumb|right|Close-up of frontside PCB]]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|[[File:CartridgeBack.jpeg|200px|thumb|right|Close-up of backside PCB]]&lt;br /&gt;
|-&lt;br /&gt;
|[[File:CartridgeFrontBare.jpeg|200px|thumb|right|Close-up of stripped frontside PCB]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the Gamecard partitions that can be [[Filesystem_services|mounted]], see [[Gamecard_Partition|here]].&lt;br /&gt;
&lt;br /&gt;
For the Gamecard image format, see [[Gamecard_Format|here]].&lt;br /&gt;
&lt;br /&gt;
For the Gamecard ASIC, see [[Gamecard_ASIC|here]].&lt;br /&gt;
&lt;br /&gt;
= Pinout =&lt;br /&gt;
[[File:Gamecard-pinout.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Pin&lt;br /&gt;
! Name&lt;br /&gt;
! Direction&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 1, 2&lt;br /&gt;
| CD#&lt;br /&gt;
| Output&lt;br /&gt;
| Card Detect; Single pin on cartridge side (hardwired to GND). Bridges pin 1 (GND) and 2 (CD#) on slot side as cartridge is inserted&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| CLK&lt;br /&gt;
| Input&lt;br /&gt;
| Clock, 25MHz&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| RCLK&lt;br /&gt;
| Output&lt;br /&gt;
| Return clock; Game cartridge sends back CLK signal delayed by a few ns&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| CS#&lt;br /&gt;
| Input&lt;br /&gt;
| Chip Select&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| DAT1&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 1&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| DAT0&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 0&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| VCC 3.3v&lt;br /&gt;
| Input&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| DAT3&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 3&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| DAT2&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 2&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| VCC 1.8v&lt;br /&gt;
| Input&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| DAT5&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 5&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| DAT4&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 4&lt;br /&gt;
|- &lt;br /&gt;
| 14&lt;br /&gt;
| DAT6&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 6&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| DAT7&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 7&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GND&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RST#&lt;br /&gt;
| Input&lt;br /&gt;
| Reset&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All IO use 1.8V for logic HIGH and 0V for logic LOW.&lt;br /&gt;
&lt;br /&gt;
= Slot Pinout =&lt;br /&gt;
[[File:Card_slot.jpg|500px|thumb|right|Annotated slot pinout]]&lt;br /&gt;
&lt;br /&gt;
This just maps the [[#Pinout|cartridge pinout]] onto the slot on the console.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Pin&lt;br /&gt;
! Name&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| GND&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| CD#&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| CLK&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| RCLK&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| CS#&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| DAT1&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| DAT0&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| VCC 3.3v&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| DAT3&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| DAT2&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| VCC 1.8v&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| DAT5&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| DAT4&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| DAT6&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| DAT7&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GND&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RST#&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
Switch game cartridges use a simple (but Nintendo proprietery) SPI-like bus with 8-bit width (DAT7..0). It is very similar to the bus interface of 3DS game cartridges, except with very different commands.&lt;br /&gt;
&lt;br /&gt;
The Switch host starts a transfer by first pulling CS low, followed by clocking a byte each clock cycle. The bus data will always be ready before the rising edge of the CLK signal, so that it can be captured on the rising edge.&lt;br /&gt;
After command bytes are written to the bus, the direction of the bus implicitly changes and the game cartridge responds. The Switch host keeps clocking while the game cartridge responds.&lt;br /&gt;
After the transfer is ended, the CS line is pulled high again.&lt;br /&gt;
&lt;br /&gt;
Commands are 16 bytes long, and followed immediately by a 4-byte CRC-32 over the command bytes. After this, the Switch stops driving the data bus, and the bus will be &#039;floating&#039;. Due to the pull-ups on the bus, it will slowly converge to logic HIGH state. The Switch will clock 2 cycles to allow the bus to settle a direction change. The Switch host will then clock another cycle and if the game cartridge didn&#039;t receive the CRC OK, it will respond with &amp;quot;01&amp;quot;. Otherwise it will respond with &amp;quot;00&amp;quot; and pull DAT0 low on the next cycle to signal it is busy. The Switch host will then keep clocking until the cartridge is ready.&lt;br /&gt;
&lt;br /&gt;
When the game cartridge is ready to send the actual data response, it will pull the DAT0 pin high for 2 cycles to let the Switch host know. After this, the game cartridge will send the actual data response bytes.&lt;br /&gt;
&lt;br /&gt;
The actual response bytes are also followed immediately by a 4-byte CRC-32 over the actual data response bytes.&lt;br /&gt;
&lt;br /&gt;
A typical boot up sequence of a game cartridge (in this case, the game &amp;quot;1,2 Switch&amp;quot;) looks like this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;5B000000000000010000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read sector 0, contains &amp;quot;HEAD&amp;quot; blob&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;5B000000000000010000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read sector 0, contains &amp;quot;HEAD&amp;quot; blob&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;56000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read card id &amp;quot;AE F8 01 21&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;28000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;02 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;A5000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;00 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;56000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read card id &amp;quot;AE F8 01 21&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;28000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;02 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;5B000000380000010000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read sector 0x38, contains &amp;quot;CERT&amp;quot; blob&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;E2000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;01 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;E0000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read crypto-challenge header&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;200838A25A344F818ABB6456694D4E8D&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Enter crypto mode1 with HOST-RANDOM &amp;quot;0838A25A344F818ABB6456694D4E8D&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;7EE41FDF12C01C157CC899910673A0CF&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x40&lt;br /&gt;
| Encrypted crypto mode1 command, reads CART-RANDOM&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;263C8230EC15FAE3CE79365BD850F4BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x0&lt;br /&gt;
| Encrypted mode1 command, enters crypto mode2 with (HOST-RANDOM, CART-RANDOM)&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;B6FDA6F37FFA29E18831D0B217DFBDBE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Encrypted mode2 command, possibly read card id?&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;7B97F7DF07240AA9870E1C974336FA8A&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Encrypted mode2 command&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Manufacturers =&lt;br /&gt;
;Macronix (MX)&lt;br /&gt;
: Uses package: LGA, TSOP-48&lt;br /&gt;
: Uses card id: 0xC2&lt;br /&gt;
;Renesas &lt;br /&gt;
: Uses package: LGA, TSOP-48&lt;br /&gt;
: Uses card id: 0x23&lt;br /&gt;
;SanDisk?&lt;br /&gt;
: Uses package: ??&lt;br /&gt;
: Uses card id: 0x45 ?&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=File:Gamecard-pinout.png&amp;diff=9672</id>
		<title>File:Gamecard-pinout.png</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=File:Gamecard-pinout.png&amp;diff=9672"/>
		<updated>2020-06-21T06:24:57Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Shuffle2 uploaded a new version of File:Gamecard-pinout.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=File:Gamecard-pinout.png&amp;diff=9671</id>
		<title>File:Gamecard-pinout.png</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=File:Gamecard-pinout.png&amp;diff=9671"/>
		<updated>2020-06-21T06:23:15Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Shuffle2 reverted File:Gamecard-pinout.png to an old version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=File:Gamecard-pinout.png&amp;diff=9670</id>
		<title>File:Gamecard-pinout.png</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=File:Gamecard-pinout.png&amp;diff=9670"/>
		<updated>2020-06-21T06:22:29Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Shuffle2 uploaded a new version of File:Gamecard-pinout.png&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Gamecard&amp;diff=9669</id>
		<title>Gamecard</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Gamecard&amp;diff=9669"/>
		<updated>2020-06-21T05:43:33Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents the Nintendo Switch Gamecard.&lt;br /&gt;
&lt;br /&gt;
{|  style=&amp;quot;float:right; margin-left: 0px;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| [[File:ZeldaFront.jpg|200px|thumb|right|A Switch game cartridge, frontside]] &lt;br /&gt;
| [[File:ZeldaBack.jpg|200px|thumb|right|A Switch game cartridge, backside]] &lt;br /&gt;
|-&lt;br /&gt;
| [[File:CartridgeFront.jpeg|200px|thumb|right|Close-up of frontside PCB]]&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|[[File:CartridgeBack.jpeg|200px|thumb|right|Close-up of backside PCB]]&lt;br /&gt;
|-&lt;br /&gt;
|[[File:CartridgeFrontBare.jpeg|200px|thumb|right|Close-up of stripped frontside PCB]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For the Gamecard partitions that can be [[Filesystem_services|mounted]], see [[Gamecard_Partition|here]].&lt;br /&gt;
&lt;br /&gt;
For the Gamecard image format, see [[Gamecard_Format|here]].&lt;br /&gt;
&lt;br /&gt;
For the Gamecard ASIC, see [[Gamecard_ASIC|here]].&lt;br /&gt;
&lt;br /&gt;
= Pinout =&lt;br /&gt;
[[File:Gamecard-pinout.png|400px]]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Pin&lt;br /&gt;
! Name&lt;br /&gt;
! Direction&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| CD# (Card Detect)&lt;br /&gt;
| Output&lt;br /&gt;
| Single pin on cartridge side (hardwired to gnd), which bridges pin 1 (gnd) and 2 (Card Detect) on the slot side as cartridge is inserted.&lt;br /&gt;
|- &lt;br /&gt;
| 1 &lt;br /&gt;
| RCLK&lt;br /&gt;
| Output&lt;br /&gt;
| Return clock; Game cartridge sends back CLK signal delayed by a few ns&lt;br /&gt;
|- &lt;br /&gt;
| 2 &lt;br /&gt;
| CLK &lt;br /&gt;
| Input&lt;br /&gt;
| Clock, 25MHz&lt;br /&gt;
|- &lt;br /&gt;
| 3 &lt;br /&gt;
| CS#&lt;br /&gt;
| Input&lt;br /&gt;
| Chip Select&lt;br /&gt;
|- &lt;br /&gt;
| 4&lt;br /&gt;
| DAT0 &lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 0&lt;br /&gt;
|- &lt;br /&gt;
| 5 &lt;br /&gt;
| DAT1 &lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 1&lt;br /&gt;
|- &lt;br /&gt;
| 6 &lt;br /&gt;
| VCC 3.3v &lt;br /&gt;
| Input&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| 7 &lt;br /&gt;
| DAT2 &lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 2&lt;br /&gt;
|- &lt;br /&gt;
| 8 &lt;br /&gt;
| DAT3 &lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 3&lt;br /&gt;
|- &lt;br /&gt;
| 9 &lt;br /&gt;
| VCC 1.8v &lt;br /&gt;
| Input&lt;br /&gt;
|&lt;br /&gt;
|- &lt;br /&gt;
| 10 &lt;br /&gt;
| DAT4 &lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 4&lt;br /&gt;
|- &lt;br /&gt;
| 11 &lt;br /&gt;
| DAT5&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 5&lt;br /&gt;
|- &lt;br /&gt;
| 12 &lt;br /&gt;
| DAT6&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 6&lt;br /&gt;
|- &lt;br /&gt;
| 13 &lt;br /&gt;
| DAT7&lt;br /&gt;
| Inout&lt;br /&gt;
| Data bus pin 7&lt;br /&gt;
|- &lt;br /&gt;
| 14 &lt;br /&gt;
| GND&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|- &lt;br /&gt;
| 15 &lt;br /&gt;
| RST#&lt;br /&gt;
| Input&lt;br /&gt;
| Reset&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All IO use 1.8V for logic HIGH and 0V for logic LOW.&lt;br /&gt;
&lt;br /&gt;
= Slot Pinout =&lt;br /&gt;
[[File:Card_slot.jpg|500px|thumb|right|Annotated slot pinout]]&lt;br /&gt;
&lt;br /&gt;
The just maps the [[#Pinout|cartridge pinout]] onto the slot on the console.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Pin&lt;br /&gt;
! Name&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| GND&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| CD#&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| CLK&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| RCLK&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| CS#&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| DAT1&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| DAT0&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| VCC 3.3v&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| DAT3&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| DAT2&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| VCC 1.8v&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| DAT5&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| DAT4&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| DAT6&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| DAT7&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| GND&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| RST#&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Protocol =&lt;br /&gt;
Switch game cartridges use a simple (but Nintendo proprietery) SPI-like bus with 8-bit width (DAT7..0). It is very similar to the bus interface of 3DS game cartridges, except with very different commands.&lt;br /&gt;
&lt;br /&gt;
The Switch host starts a transfer by first pulling CS low, followed by clocking a byte each clock cycle. The bus data will always be ready before the rising edge of the CLK signal, so that it can be captured on the rising edge.&lt;br /&gt;
After command bytes are written to the bus, the direction of the bus implicitly changes and the game cartridge responds. The Switch host keeps clocking while the game cartridge responds.&lt;br /&gt;
After the transfer is ended, the CS line is pulled high again.&lt;br /&gt;
&lt;br /&gt;
Commands are 16 bytes long, and followed immediately by a 4-byte CRC-32 over the command bytes. After this, the Switch stops driving the data bus, and the bus will be &#039;floating&#039;. Due to the pull-ups on the bus, it will slowly converge to logic HIGH state. The Switch will clock 2 cycles to allow the bus to settle a direction change. The Switch host will then clock another cycle and if the game cartridge didn&#039;t receive the CRC OK, it will respond with &amp;quot;01&amp;quot;. Otherwise it will respond with &amp;quot;00&amp;quot; and pull DAT0 low on the next cycle to signal it is busy. The Switch host will then keep clocking until the cartridge is ready.&lt;br /&gt;
&lt;br /&gt;
When the game cartridge is ready to send the actual data response, it will pull the DAT0 pin high for 2 cycles to let the Switch host know. After this, the game cartridge will send the actual data response bytes.&lt;br /&gt;
&lt;br /&gt;
The actual response bytes are also followed immediately by a 4-byte CRC-32 over the actual data response bytes.&lt;br /&gt;
&lt;br /&gt;
A typical boot up sequence of a game cartridge (in this case, the game &amp;quot;1,2 Switch&amp;quot;) looks like this:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Size&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;5B000000000000010000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read sector 0, contains &amp;quot;HEAD&amp;quot; blob&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;5B000000000000010000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read sector 0, contains &amp;quot;HEAD&amp;quot; blob&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;56000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read card id &amp;quot;AE F8 01 21&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;28000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;02 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;A5000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;00 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;56000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read card id &amp;quot;AE F8 01 21&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;28000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;02 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;5B000000380000010000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read sector 0x38, contains &amp;quot;CERT&amp;quot; blob&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;E2000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Read ??? &amp;quot;01 00 00 00&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;E0000000000000000000000000000000&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x200&lt;br /&gt;
| Read crypto-challenge header&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;200838A25A344F818ABB6456694D4E8D&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0&lt;br /&gt;
| Enter crypto mode1 with HOST-RANDOM &amp;quot;0838A25A344F818ABB6456694D4E8D&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;7EE41FDF12C01C157CC899910673A0CF&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x40&lt;br /&gt;
| Encrypted crypto mode1 command, reads CART-RANDOM&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;263C8230EC15FAE3CE79365BD850F4BD&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x0&lt;br /&gt;
| Encrypted mode1 command, enters crypto mode2 with (HOST-RANDOM, CART-RANDOM)&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;B6FDA6F37FFA29E18831D0B217DFBDBE&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Encrypted mode2 command, possibly read card id?&lt;br /&gt;
|- &lt;br /&gt;
| &amp;lt;code&amp;gt;7B97F7DF07240AA9870E1C974336FA8A&amp;lt;/code&amp;gt;&lt;br /&gt;
| 0x4&lt;br /&gt;
| Encrypted mode2 command&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Manufacturers =&lt;br /&gt;
;Macronix (MX)&lt;br /&gt;
: Uses package: LGA, TSOP-48&lt;br /&gt;
: Uses card id: 0xC2&lt;br /&gt;
;Renesas &lt;br /&gt;
: Uses package: LGA, TSOP-48&lt;br /&gt;
: Uses card id: 0x23&lt;br /&gt;
;SanDisk?&lt;br /&gt;
: Uses package: ??&lt;br /&gt;
: Uses card id: 0x45 ?&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=File:Card_slot.jpg&amp;diff=9668</id>
		<title>File:Card slot.jpg</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=File:Card_slot.jpg&amp;diff=9668"/>
		<updated>2020-06-21T05:22:43Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=8739</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=8739"/>
		<updated>2020-02-17T01:01:15Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Don&amp;#039;t blame me&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [1.0.0-6.2.0] IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || [1.0.0-6.2.0] GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [1.0.0-6.2.0] SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetWakePinDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [5.0.0+] [[#OpenSession2]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [5.0.0+] IsWakeEventActive2&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [5.0.0+] SetWakeEventActiveFlagSetForDebug2&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [6.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || DeviceCode || Tegra (port, pin) || Usage || Direction || Used by (services) || Used by (hardware)&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || 0x33000002 || Z, 4 || Audio Codec (ALC5639) Power (CODEC_LDO_EN_TEMP) || Out || [[Audio services]], [[Fatal services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || 0x3C000001 || E, 4 || SDCard Power (POW_SD_EN) || Out || [[PCV services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || 0x37000002 || H, 4 || Bluetooth Reset (BT_RST_PH4) || Out || [[Bluetooth Driver services]] || Icosa, Copper, Hoag, Iowa, Calcio &lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || 0xC9000402 || BB, 2 || Secondary Boot Device Configration (RAM_CODE3) || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || 0x3C000402 || BB, 3 || GcAsic Reset (GC_RST) || Out || [[Filesystem services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || 0x33000003 || BB, 4 || Audio Codec (ALC5639) Alert (CODEC_ALERT) || In || [[Audio services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || 0x3C000401 || E, 5 || GcAsic Power (POW_GC) (to card only, not GcAsic) || Out || || Icosa, Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || 0x350000CA || S, 0 || Debug Pad Detect (DEBUG_CONTROLLER_DET) || In || [[HID services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || 0x39000407 || S, 1 || Battery Charge Status (BATT_CHG_STATUS) || In || || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || 0x39000003 || S, 6 || Charger IC (BQ24193) Charge Enable (BATT_CHG_ENABLE_N) || Out || [[PTM services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || 0x3D000002 || S, 7 || Fan Tachometer (FAN_TACH) || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 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]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || 0x39000401 || A, 5 || Fan and Joy-Con Rails Power (Battery - BQ24193 5V) (VDD50A_EN) || Out || [[PTM services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || 0xCA000402 || P, 0 || SDEV Coax Select (SDEV_COAX_SEL_1) || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || 0x3C000403 || S, 3 || GcAsic Card Detect (GC_CD) || In || [[Filesystem services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || 0xC900040B || P, 5 || PROD_TYPE_0 || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || 0xC900040C || P, 4 || PROD_TYPE_1 || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || 0xC900040D || P, 3 || PROD_TYPE_2 || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || 0xC900040E || P, 2 || PROD_TYPE_3 || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || 0x3E000002 || X, 4 || Temperature Sensor (TEMP_ALERT) || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || 0x33000004 || V, 6 || Audio Codec (ALC5639) Headphone Detect (CODEC_HP_DET_IRQ) || In || [[Audio services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || 0x35000041 || X, 2 || MOTION_INT_PX2 || In || || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || 0x35000036 || X, 1 || TouchPanel IRQ (TP_IRQ) || In || [[HID services]] || Icosa, Copper, Hoag, Iowa &lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || 0x35000001 || X, 5 || Power Button (BUTTON_POWER_ON_PX5) || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || 0x35000002 || X, 6 || Volume Up (BUTTON_VOL_UP_PX6) || In || [[Boot2]], [[Audio services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || 0x35000003 || X, 7 || Volume Down (BUTTON_VOL_DOWN_PX7) || In || [[Boot2]], [[Audio services]] || Icosa, Copper, Hoag, Iowa, Calcio &lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || 0x39000034 || Y, 0 || Fuel Gauge IC (MAX17050) IRQ (BATT_MGIC_IRQ) || In || [[PTM services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || 0x35000004 || Y, 1 || Recovery Mode Key (BUTTON_HOME_PY1) || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || 0x3400003E || V, 1 || Backlight Enable (LCD_BL_EN_PV1) || Out || [[NV services]], [[Backlight services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || 0x34000033 || V, 2 || Backlight Reset (LCD_RST_PV2) || Out || [[NV services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || 0x040000CC || K, 5 || USB-PD Controller (RHOM BM92T30MWV) VCONN Power (PD_VCONN_EN) || Out || [[PTM services]], [[USB services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || 0x040000CA || V, 5 || USB-PD Controller (RHOM BM92T30MWV) Reset (PD_RST) || Out || [[USB services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || 0x39000002 || Z, 0 || Charger IC (BQ24193) IRQ (BQ24193_IRQ) || In || [[PTM services]] || Icosa, Copper, Hoag, Iowa &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || 0xCA000401 || Z, 2 || SDEV Coax Select (SDEV_COAX_SEL_0) || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || 0x3C000003 || Z, 3 || SDCard Write Protect (SD_WP) || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || 0x35000035 || J, 7 || TouchPanel Reset (TP_RST) || Out || [[HID services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || 0x37000401 || K, 0 || BT_GPIO_2 || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || 0x37000402 || K, 1 || BT_GPIO_3 || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || 0x37000403 || K, 2 || BT_GPIO_4 || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || 0x040000CB || K, 4 || USB-PD Controller (RHOM BM92T30MWV) IRQ (PD_IRQ) || In || [[USB services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || 0x3E000003 || K, 6 || POW_VCPU_INT || In || ||  Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || 0x3E000004 || K, 7 || MAX77621_GPU_INT || In || || Icosa, Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || 0x35000402 || K, 3 || Joy-Con(R) Charge (EXTCON_CHG_U) || Out || [[HID services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || 0x3500040C || CC, 3 || Joy-Con(L) Charge (EXTCON_CHG_S) || Out || [[HID services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || 0x38000003 || H, 0 || WIFI_RF_DISABLE || Out || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || 0x38000002 || H, 1 || WiFi Reset (WIFI_RST_PH1) || Out || [[WLAN services]], [[PCIe services]] || Icosa, Copper, Hoag, Iowa, Calcio &lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || 0x37000003 || H, 3 || AP_WAKE_BT_PH3 || Out || [[Bluetooth Driver services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || 0x37000004 || H, 5 || BT_WAKE_AP || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || 0x37000404 || H, 7 || BT_GPIO_5 || Out || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || 0x34000034 || I, 0 || Backlight +5V (LCD_VDD_P_EN) || Out || [[NV services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || 0x34000035 || I, 1 || Backlight -5V (LCD_VDD_N_EN) || Out || [[NV services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 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]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || 0xC9000401 || CC, 2 || Secondary Boot Device Configration (RAM_CODE2) || In || || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || 0x39000402 || CC, 4 || Fan and Joy-Con Rails Power (USB 5V) (VDD50B_EN) || Out || [[PTM services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || 0x38000004 || H, 2 || WIFI_WAKE_HOST || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || 0x3C000002 || Z, 1 || SDCard Card Detect (SD_CD) || In || [[Filesystem services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || 0x39000404 || J, 5 || Charger IC (BQ24193) OTG Charge Select (OTG_FET_1) || Out || [[PTM services]], [[USB services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || 0x39000405 || L, 0 || Charger IC (BQ24193) OTG Charge Select (OTG_FET_2) || Out || [[PTM services]], [[USB services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || 0x35000403 || H, 6 || Joy-Con(R) Wake Detect (EXTCON_DET_U) || In || || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || 0x3500040D || E, 6 || Joy-Con(L) Wake Detect (EXTCON_DET_S) || In || || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || 0x39000406 || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || 0x35000404 || G, 3 || Joy-Con(R) CTS (checked low) (EXT_UART2_CTS) || In || [[HID services]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || 0x3500040E || D, 4 || Joy-Con(L) CTS (checked low) (EXT_UART3_CTS) || In || [[HID services]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || 0x39000408 || BB, 1 || 5V Step-Down Regulator Power (5V_STEPDOWN_EN) || Out || || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || 0x04000401 || B, 4 || USB Root Port 2 Over Current (USB_B2_OC) || In || [[USB services]] || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || 0x39000409 || B, 5 || 5V Step-Down Regulator Power Good Flag (5V_STEPDOWN_PG) || In || || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || 0x04000402 || E, 1 || USB Power (USB_A_EN) || Out || [[USB services]] || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || 0x04000403 || E, 7 || USB Power Flag (USB_A_FLAG) || In || [[USB services]] || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || 0x04000404 || S, 2 || USB Root Port 3 Over Current (USB_B3_OC) || In || [[USB services]] || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || 0x04000405 || S, 5 || USB Root Port 3 Power (USB_B3_EN) || Out || [[USB services]] || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || 0x04000406 || T, 0 || USB Root Port 2 Power (USB_B2_EN) || Out || [[USB services]] || Copper&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || 0x34000004 || C, 0 || HDMI 5V (HDMI_5V_EN) || Out || [[NV services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || 0x04000407 || C, 1 || USB Root Port 1 Power (USB_B1_EN) || Out || [[USB services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || 0x34000005 || C, 2 || HDMI/Power Delivery Switch (HDMI_PD_TR_EN) || Out || [[NV services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || 0x3D000003 || I, 2 || Fan Enable (FAN_EN) || Out || [[PTM services]] || &lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || 0x04000408 || CC, 6 || USB Root Port 1 Over Current (USB_B1_OC) || In || [[USB services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4D || 0xAC || 0x3D000001 || V, 4 || Pulse-Width Modulation Fan Control (PWM_FAN) || Out || [[PTM services]] || &lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 0x4E || 0xE1 || 0x34000006 || CC, 1 || HDMI Hot Plug Detect (HDMI_INT_DP_HPD_PCC1) || In || [[NV services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [5.0.0+] 0x4F || 0x56 || 0x3E000003 || K, 6 || MAX77812_IRQ || In || || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x50 || 0x20 || 0xCA000001 || E, 0 || || Out || || Hoag, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x51 || 0x21 || 0xCA000002 || E, 1 || || Out || || Hoag, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x52 || 0x22 || 0xCA000003 || E, 2 || || Out || || Hoag, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x53 || 0x23 || 0xCA000004 || E, 3 || || Out || || Hoag, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x54 || 0x4C || 0x36000004 || J, 4 || NFC_IRQ || In || [[NFC services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x55 || 0x57 || 0x36000003 || K, 7 || NFC_RST || Out || [[NFC services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x56 || 0x27 ([6.0.0-8.0.0] 0x94) || 0x35000415 || S, 4 || MCU_IRQ || In || || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x57 || 0x98 || 0x35000416 || T, 0 || MCU_BOOT || Out || [[HID services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x58 || 0x99 || 0x35000417 || T, 1 || MCU_RST || Out || [[HID services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x59 || 0xBB || 0x39000403 || X, 3 || Fan Power (5V3) (VDD5V3_EN) || Out || [[PTM services]] || Hoag, Iowa &lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x5A || 0xE5 || 0x35000418 || CC, 5 || MCU_POR || Out || [[HID services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x5B || 0xAB || 0x35000005 || V, 3 || SioH Input (LCD_GPIO1_PV3)|| In || [[HID services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [6.0.0+] 0x5C || 0x4E || 0x36000002 || J, 6 || NFC_EN || Out || [[NFC services]] || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] - || 0x32 || 0x35000406 || G, 2 || Joy-Con(R) RTS (EXT_UART2_RTS) || In || || &lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] - || 0x1B || 0x35000410 || D, 3 || Joy-Con(L) RTS (EXT_UART3_RTS) || In || || &lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] - || 0x17 || 0x3500041B || C, 7 || || In || || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] - || 0x18 || 0x3500041C || D, 0 || || In || || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] - || 0x15 || 0x3500041D || C, 5 || || In || || Hoag&lt;br /&gt;
|-&lt;br /&gt;
| [7.0.0+] - || 0x16 || 0x3500041E || C, 6 || || In || || Hoag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw [[#GpioPadDescriptor]] and returns an [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as [[#OpenSessionForDev]] except it takes a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; which is then converted to a [[#GpioPadDescriptor]]. Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;GpioPadName&#039;&#039;&#039; and an u32 &#039;&#039;&#039;DeviceUnk&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [4.0.0+] SetValueForSleepState&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [6.0.0+] GetValueForSleepState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c, i2c:pcv =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev_2|OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession_2|OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-5.1.0] 2 || [[#HasDevice|HasDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-5.1.0] 3 || [[#HasDeviceForDev|HasDeviceForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [6.0.0+] [[#OpenSession2_2|OpenSession2]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || DeviceCode || Port:Addr || Is10bit || Speed || Max Retries || Retry Delay || Usage || Used by (services) || Used by (hardware)&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0x350000C9 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]] || Icosa, Copper, Iowa&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 0x35000033 || 2:49 || N || 400000 || 0 ||       0 || TouchPanel || [[HID services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0x3E000001 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) || [[PTM services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0x3E000001 || 0:4c || N || 100000 || 0 ||       0 || Temperature Sensor (TMP451 or NCT72) (duplicate) || [[PTM services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0x33000001 || 0:1c || N || 100000 || 0 ||       0 || Audio Codec (ALC5639) || [[Audio services]], [[Fatal services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 0x3B000001 || 4:68 || N || 400000 || 3 || 5000000 || PMIC RTC (max77620_rtc0), max77620_irq0 || [[PCV services]] || Icosa, Copper&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 0x3A000001 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (MAX77620), max77620_irq0 || [[PCV services]] || Icosa, Copper&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 0x3A000003 || 4:1b || N || 400000 || 3 || 5000000 || Sub-PMIC for CPU (max77621_cpu) || [[PCV services]] || Icosa, Copper&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 0x3A000004 || 4:1c || N || 400000 || 3 || 5000000 || Sub-PMIC for GPU (max77621_gpu) || [[PCV services]] || Icosa, Copper&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0x39000001 || 0:6b || N || 100000 || 3 || 5000000 || Charger IC (BQ24193) || [[PTM services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0x39000033 || 0:36 || N || 100000 || 3 || 5000000 || Fuel Gauge IC (MAX17050) || [[PTM services]], [[PCV services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0x040000C9 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (RHOM BM92T30MWV) || [[USB services]] || Icosa, Copper, Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 0x3F000401 || 1:40 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD15V0-HB) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 0x3F000001 || 1:41 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-CPU-DS) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 0x3F000002 || 1:44 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-GPU-DS) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 0x3F000003 || 1:45 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-DDR-DS) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 0x3F000402 || 1:46 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-AP) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 0x3F000403 || 1:47 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VSYS-BL-DS) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 0x35000047 || 1:29 || N || 400000 || 3 || 5000000 || Ambient Light Sensor (BH1730) || [[Backlight services]] || Icosa, Copper, Hoag, Iowa&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 0x3F000404 || 1:48 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_CORE) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 0x3F000405 || 1:49 || N || 400000 || 3 || 5000000 || Power Monitor (ina226_Soc-1V8) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 0x3F000406 || 1:4a || N || 400000 || 3 || 5000000 || Power Monitor (ina226_LPDDR4-1V8) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 0x3F000407 || 1:4b || N || 400000 || 3 || 5000000 || Power Monitor (ina226_REG1V32) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 0x3F000408 || 1:4d || N || 400000 || 3 || 5000000 || Power Monitor (ina226_VDD3V3-SYS) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 24 || 0x34000001 || 3:50 || N || 100000 || 0 ||       0 || HDMI DDC || [[NV services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 25 || 0x34000002 || 3:54 || N || 100000 || 0 ||       0 || HDMI SCDC || [[NV services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [2.0.0+] 26 || 0x34000003 || 3:3a || N || 100000 || 0 ||       0 || HDMI HDCP || [[NV services]] || Copper, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 27 || 0x3A000005 || 4:52 ([4.0.0-8.0.0] 4:a4) || N || 400000 || 0 ||       0 || Buck Regulator (FAN53528) || || Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 28 || 0x3A000002 || 4:33 ([4.0.0-8.0.0] 4:31) || N || 400000 || 0 ||       0 || PMIC (MAX77812) || [[PCV services]] || Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 29 || 0x3A000002 || 4:33 ([4.0.0-8.0.0] 4:31) || N || 400000 || 0 ||       0 || PMIC (MAX77812) || [[PCV services]] || Hoag, Iowa, Calcio&lt;br /&gt;
|-&lt;br /&gt;
| [4.0.0+] 30 || 0x3F000409 || 1:4e || N || 400000 || 3 || 5000000 || Power Monitor (ina226_V_VDD-DDR-0V6) || || Factory&lt;br /&gt;
|-&lt;br /&gt;
| [8.0.0+] 31 || 0x36000001 || 1:08 || N || 400000 || 3 || 5000000 || NFC IC || || Hoag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns an [[#II2cSession]] session.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns an [[#II2cSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== HasDevice ==&lt;br /&gt;
Takes an &#039;&#039;&#039;I2cDevice&#039;&#039;&#039; and returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== HasDeviceForDev ==&lt;br /&gt;
Takes an u32 &#039;&#039;&#039;port&#039;&#039;&#039;, an u16 &#039;&#039;&#039;addr&#039;&#039;&#039;, an &#039;&#039;&#039;AddressingMode&#039;&#039;&#039; (1 for 10-bit, 0 otherwise) and a &#039;&#039;&#039;SpeedMode&#039;&#039;&#039; (400000 or 100000). Returns true if the device exists or false otherwise.&lt;br /&gt;
&lt;br /&gt;
== OpenSession2 ==&lt;br /&gt;
Same as [[#OpenSession_2|OpenSession]] but takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; instead of a &#039;&#039;&#039;I2cDevice&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-5.1.0] 0 || Send&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-5.1.0] 1 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-5.1.0] 2 || ExecuteCommandList&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#SendAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ReceiveAuto&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#ExecuteCommandListAuto]]&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [6.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SendAuto ==&lt;br /&gt;
Takes bytes to write in either a static buffer or a receive buffer, returns an error code for success&lt;br /&gt;
&lt;br /&gt;
== ExecuteCommandListAuto ==&lt;br /&gt;
Takes a command list from either a static buffer or a receive buffer, returns data in either a static (or recieve?) buffer.&lt;br /&gt;
&lt;br /&gt;
=== Commands ===&lt;br /&gt;
* 0x40 [u8 len] &amp;lt;bytes&amp;gt; - Write bytes to device&lt;br /&gt;
* 0xC1 [u8 len] - Receive bytes from device&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#HasPort]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#HasPortForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#IsSupportedBaudRate]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#IsSupportedBaudRateForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#IsSupportedFlowControlMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#IsSupportedFlowControlModeForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#CreatePortSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#IsSupportedPortEvent]]&lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#IsSupportedPortEventForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [7.0.0+] [[#IsSupportedDevice]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [7.0.0+] [[#IsSupportedDeviceForDev]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== HasPort ==&lt;br /&gt;
Takes an u32 [[#UartPort]]. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
== HasPortForDev ==&lt;br /&gt;
Takes an u32 [[#UartPortForDev]]. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
== IsSupportedBaudRate ==&lt;br /&gt;
Takes an u32 [[#UartPort]] and an u32 &#039;&#039;&#039;BaudRate&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported baud rates are 57600, 115200, 1000000 and 3000000.&lt;br /&gt;
&lt;br /&gt;
== IsSupportedBaudRateForDev ==&lt;br /&gt;
Takes an u32 [[#UartPortForDev]] and an u32 &#039;&#039;&#039;BaudRate&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported baud rates are 57600, 115200, 1000000 and 3000000.&lt;br /&gt;
&lt;br /&gt;
== IsSupportedFlowControlMode ==&lt;br /&gt;
Takes an u32 [[#UartPort]] and an u32 &#039;&#039;&#039;FlowControlMode&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported modes are 0 (RTS) and 1 (CTS).&lt;br /&gt;
&lt;br /&gt;
== IsSupportedFlowControlModeForDev ==&lt;br /&gt;
Takes an u32 [[#UartPortForDev]] and an u32 &#039;&#039;&#039;FlowControlMode&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported modes are 0 (RTS) and 1 (CTS).&lt;br /&gt;
&lt;br /&gt;
== CreatePortSession ==&lt;br /&gt;
No input. Returns an [[#IPortSession]].&lt;br /&gt;
&lt;br /&gt;
== IsSupportedPortEvent ==&lt;br /&gt;
Takes an u32 [[#UartPort]] and an u32 &#039;&#039;&#039;PortEvent&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported events are 0 (data), 1 (break), 2 (unknown) and 3 (unknown).&lt;br /&gt;
&lt;br /&gt;
== IsSupportedPortEventForDev ==&lt;br /&gt;
Takes an u32 [[#UartPortForDev]] and an u32 &#039;&#039;&#039;PortEvent&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported events are 0 (data), 1 (break), 2 (unknown) and 3 (unknown).&lt;br /&gt;
&lt;br /&gt;
== IsSupportedDevice ==&lt;br /&gt;
Takes an u32 [[#UartPort]] and an u32 &#039;&#039;&#039;Device&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported devices are 0 (Bluetooth) for UART-D, 0 (Joy-Con(R)) for UART-B, 0 (Joy-Con(L)) and 1 (MCU) for UART-C.&lt;br /&gt;
&lt;br /&gt;
== IsSupportedDeviceForDev ==&lt;br /&gt;
Takes an u32 [[#UartPortForDev]] and an u32 &#039;&#039;&#039;Device&#039;&#039;&#039;. Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
Supported devices are 0 (Bluetooth) for UART-D, 0 (Joy-Con(R)) for UART-B, 0 (Joy-Con(L)) and 1 (MCU) for UART-C.&lt;br /&gt;
&lt;br /&gt;
== UartPort ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || DeviceCode (internal) || DeviceCode (mapped) || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x03000001 || || UART-A || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x03000004 || 0x37000001 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x03000002 || 0x35000405 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x03000003 || 0x3500040F || UART-C || Joy-Con(L)&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0x03000003 || 0x35000419 || UART-C || MCU&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UartPortForDev ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || DeviceCode (internal) || DeviceCode (mapped) || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 0 || 0x03000001 || || UART-A || Invalid&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x03000002 || 0x35000405 || UART-B || Joy-Con(R)&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x03000003 || 0x3500040F || UART-C || Joy-Con(L)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x03000004 || 0x37000001 || UART-D || Bluetooth&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenPort]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenPortForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWritableLength&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetReadableLength&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 6 || BindPortEvent&lt;br /&gt;
|-&lt;br /&gt;
| 7 || UnbindPortEvent&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OpenPort ===&lt;br /&gt;
Takes an u32 [[#UartPort]], 3 u32s, 2 copy handles and 4 u8s (each padded to u32). Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] Now takes an additional u64.&lt;br /&gt;
&lt;br /&gt;
=== OpenPortForDev ===&lt;br /&gt;
Takes an u32 [[#UartPortForDev]], 3 u32s, 2 copy handles and 4 u8s (each padded to u32). Returns a boolean success value.&lt;br /&gt;
&lt;br /&gt;
[7.0.0+] Now takes an additional u64.&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [6.0.0+] OpenSession2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || DeviceCode || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0x3D000001 || PWM Channel 1 || Fan || [[PTM_services#fan|PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x3400003D || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x35000065 || PMC LED Soft Blink || Led || [[Bus services#led|Bus services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 6 || [6.0.0+]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [6.0.0+]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pinmux =&lt;br /&gt;
This is &amp;quot;nn::pinmux::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::pinmux::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPinAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetPinAssignmentForHardwareTest&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= sasbus =&lt;br /&gt;
This is &amp;quot;nn::sasbus::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [3.0.0+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSession_3|OpenSession]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Takes an u32 that must be 0 and returns an [[#ISession_2|ISession]].&lt;br /&gt;
&lt;br /&gt;
This opens a session for communicating over SPI4. While code exists to support both SPI1 and SPI4 communication, SPI4 is currently hardcoded as the only available interface.&lt;br /&gt;
&lt;br /&gt;
== ISession ==&lt;br /&gt;
This is &amp;quot;nn::sasbus::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#StartPeriodicReceiveMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#StopPeriodicReceiveMode]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Write ===&lt;br /&gt;
Takes a type-0x21 input buffer and an u8 &#039;&#039;&#039;SpiCommand&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== Read ===&lt;br /&gt;
Takes a type-0x22 output buffer and an u8 &#039;&#039;&#039;SpiCommand&#039;&#039;&#039;. No output.&lt;br /&gt;
&lt;br /&gt;
=== StartPeriodicReceiveMode ===&lt;br /&gt;
Takes an u8 &#039;&#039;&#039;SpiCommand&#039;&#039;&#039; (padded to u32), an u32, two u64s and a copy handle. No output.&lt;br /&gt;
&lt;br /&gt;
=== StopPeriodicReceiveMode ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
= led =&lt;br /&gt;
This is &amp;quot;nn::led::detail::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [8.1.1+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenController]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenController ==&lt;br /&gt;
Takes a &#039;&#039;&#039;DeviceCode&#039;&#039;&#039; and returns an [[#IController]] session for it.&lt;br /&gt;
&lt;br /&gt;
== IController ==&lt;br /&gt;
This is &amp;quot;nn::led::detail::IController&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
This was added with [8.1.1+].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || &lt;br /&gt;
|-&lt;br /&gt;
| 4 ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=8572</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=8572"/>
		<updated>2019-12-15T05:28:52Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Fix the UART-A pads. No idea why these were inverted.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || ||	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster B ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||  || DBVDD || || || || from ALC5639 pin 43&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D+ || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D- || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || +3.3V || XRST || || || || from M92T36 pin 4&lt;br /&gt;
|-&lt;br /&gt;
| 5 || +3.3V || VSVR || || || || from M92T36 pin 6&lt;br /&gt;
|-&lt;br /&gt;
| 5(b) || VUSB || VB || || || || from M92T36 pin 9&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND ||  || || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?? || || 0-1.8V || || || No clue. This is definitely important, we just have no idea how. May need to interface with dock for comms.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-A RX || || 0-1.8V || || || UART input&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-A TX || || 0-1.8V || || || UART output&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || +1.8V || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster D ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Seaker L + || || || || || Speaker Left +&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Seaker L - || || || || || Speaker Left - &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Vol (-)  || || || || || Button Vol (-)&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || Vdd Referance|| || || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster G ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || Vol(+) || || || || || Button Vol (+)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Li-Ion Batt Vdd Mirror || || || || || Power Supply&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BUTTON_HOME || || || || || RCM strap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D- || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D+ || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || || support fast charger : &amp;quot;normal mode = 5V+&amp;quot;  &amp;quot;Fast changer = 12V+&amp;quot; &lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND || || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6021</id>
		<title>TSEC</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=TSEC&amp;diff=6021"/>
		<updated>2019-01-11T01:04:21Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Operations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TSEC (Tegra Security Co-processor) is a dedicated unit powered by a NVIDIA Falcon microprocessor with crypto extensions.&lt;br /&gt;
&lt;br /&gt;
= Driver =&lt;br /&gt;
A host driver for communicating with the TSEC is mapped to physical address 0x54500000 with a total size of 0x40000 bytes and exposes several registers.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Registers from 0x54500000 to 0x54501000 are used to configure the host interface (HOST1X).&lt;br /&gt;
&lt;br /&gt;
Registers from 0x54501000 to 0x54502000 are a MMIO window for communicating with the Falcon microprocessor. From this range, the subset of registers from 0x54501400 to 0x54501FE8 are specific to the TSEC and are subdivided into:&lt;br /&gt;
* 0x54501400 to 0x54501500: SCP (Secure Crypto Processor?).&lt;br /&gt;
* 0x54501500 to 0x54501600: TRNG (True Random Number Generator).&lt;br /&gt;
* 0x54501600 to 0x54501700: TFBIF (Tegra Framebuffer Interface).&lt;br /&gt;
* 0x54501700 to 0x54501800: DMA.&lt;br /&gt;
* 0x54501800 to 0x54501900: TEGRA (miscellaneous interfaces). &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
!  Width&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT&lt;br /&gt;
| 0x54500000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_INCR_SYNCPT_ERR&lt;br /&gt;
| 0x54500008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW_INCR_SYNCPT&lt;br /&gt;
| 0x5450000C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CTXSW&lt;br /&gt;
| 0x54500020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CONT_SYNCPT_EOF&lt;br /&gt;
| 0x54500028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD0|TSEC_THI_METHOD0]]&lt;br /&gt;
| 0x54500040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_METHOD1|TSEC_THI_METHOD1]]&lt;br /&gt;
| 0x54500044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_STATUS|TSEC_THI_INT_STATUS]]&lt;br /&gt;
| 0x54500078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_THI_INT_MASK|TSEC_THI_INT_MASK]]&lt;br /&gt;
| 0x5450007C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_STATUS&lt;br /&gt;
| 0x54500084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_HIGH_A&lt;br /&gt;
| 0x54500088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_SLCG_OVERRIDE_LOW_A&lt;br /&gt;
| 0x5450008C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_THI_CLK_OVERRIDE&lt;br /&gt;
| 0x54500E00&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSSET|FALCON_IRQSSET]]&lt;br /&gt;
| 0x54501000&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSCLR|FALCON_IRQSCLR]]&lt;br /&gt;
| 0x54501004&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQSTAT|FALCON_IRQSTAT]]&lt;br /&gt;
| 0x54501008&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
| 0x5450100C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
| 0x54501010&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
| 0x54501014&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQMASK|FALCON_IRQMASK]]&lt;br /&gt;
| 0x54501018&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
| 0x5450101C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_PERIOD&lt;br /&gt;
| 0x54501020&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_TIME&lt;br /&gt;
| 0x54501024&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_GPTMR_ENABLE&lt;br /&gt;
| 0x54501028&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_LOW&lt;br /&gt;
| 0x5450102C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TIME_HIGH&lt;br /&gt;
| 0x54501030&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_TIME&lt;br /&gt;
| 0x54501034&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_WDTMR_ENABLE&lt;br /&gt;
| 0x54501038&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH0|FALCON_SCRATCH0]]&lt;br /&gt;
| 0x54501040&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCRATCH1|FALCON_SCRATCH1]]&lt;br /&gt;
| 0x54501044&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
| 0x54501048&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_IDLESTATE|FALCON_IDLESTATE]]&lt;br /&gt;
| 0x5450104C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CURCTX&lt;br /&gt;
| 0x54501050&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_NXTCTX&lt;br /&gt;
| 0x54501054&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CMDCTX&lt;br /&gt;
| 0x54501058&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_STATUS_MASK&lt;br /&gt;
| 0x5450105C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_VM_SUPERVISOR&lt;br /&gt;
| 0x54501060&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA&lt;br /&gt;
| 0x54501064&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_CMD&lt;br /&gt;
| 0x54501068&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_DATA_WR&lt;br /&gt;
| 0x5450106C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_OCCUPIED&lt;br /&gt;
| 0x54501070&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_ACK&lt;br /&gt;
| 0x54501074&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_MTHD_LIMIT&lt;br /&gt;
| 0x54501078&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SUBENGINE_RESET&lt;br /&gt;
| 0x5450107C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH2&lt;br /&gt;
| 0x54501080&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_SCRATCH3&lt;br /&gt;
| 0x54501084&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_TRIGGER&lt;br /&gt;
| 0x54501088&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_MODE&lt;br /&gt;
| 0x5450108C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DEBUG1&lt;br /&gt;
| 0x54501090&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DEBUGINFO|FALCON_DEBUGINFO]]&lt;br /&gt;
| 0x54501094&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT0&lt;br /&gt;
| 0x54501098&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BREAKPOINT1&lt;br /&gt;
| 0x5450109C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CGCTL&lt;br /&gt;
| 0x545010A0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ENGCTL&lt;br /&gt;
| 0x545010A4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_PM_SEL&lt;br /&gt;
| 0x545010A8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_HOST_IO_INDEX&lt;br /&gt;
| 0x545010AC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_EXCI|FALCON_EXCI]]&lt;br /&gt;
| 0x545010D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CPUCTL|FALCON_CPUCTL]]&lt;br /&gt;
| 0x54501100&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_BOOTVEC|FALCON_BOOTVEC]]&lt;br /&gt;
| 0x54501104&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG|FALCON_HWCFG]]&lt;br /&gt;
| 0x54501108&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
| 0x5450110C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_EXTBASE|FALCON_DMATRF_EXTBASE]]&lt;br /&gt;
| 0x54501110&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_VOFF|FALCON_DMATRF_VOFF]]&lt;br /&gt;
| 0x54501114&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFCMD|FALCON_DMATRFCMD]]&lt;br /&gt;
| 0x54501118&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRF_POFF|FALCON_DMATRF_POFF]]&lt;br /&gt;
| 0x5450111C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_DMATRFSTAT|FALCON_DMATRFSTAT]]&lt;br /&gt;
| 0x54501120&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_CRYPTTRFSTAT|FALCON_CRYPTTRFSTAT]]&lt;br /&gt;
| 0x54501124&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUSTAT&lt;br /&gt;
| 0x54501128&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_HWCFG2|FALCON_HWCFG2]]&lt;br /&gt;
| 0x5450112C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CPUCTL_ALIAS&lt;br /&gt;
| 0x54501130&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD&lt;br /&gt;
| 0x54501140&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_TLB_CMD_RES&lt;br /&gt;
| 0x54501144&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_CTRL&lt;br /&gt;
| 0x54501148&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_BRANCH_HISTORY_PC&lt;br /&gt;
| 0x5450114C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG0&lt;br /&gt;
| 0x54501150&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLRNG1&lt;br /&gt;
| 0x54501154&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_IMFILLCTL&lt;br /&gt;
| 0x54501158&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRWIN&lt;br /&gt;
| 0x54501160&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRCFG&lt;br /&gt;
| 0x54501164&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRADDR&lt;br /&gt;
| 0x54501168&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_EXTERRSTAT&lt;br /&gt;
| 0x5450116C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CG2&lt;br /&gt;
| 0x5450117C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_INDEX&lt;br /&gt;
| 0x54501180&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE&lt;br /&gt;
| 0x54501184&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_CODE_VIRT_ADDR&lt;br /&gt;
| 0x54501188&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX0&lt;br /&gt;
| 0x545011C0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA0&lt;br /&gt;
| 0x545011C4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX1&lt;br /&gt;
| 0x545011C8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA1&lt;br /&gt;
| 0x545011CC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX2&lt;br /&gt;
| 0x545011D0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA2&lt;br /&gt;
| 0x545011D4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX3&lt;br /&gt;
| 0x545011D8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA3&lt;br /&gt;
| 0x545011DC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX4&lt;br /&gt;
| 0x545011E0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA4&lt;br /&gt;
| 0x545011E4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX5&lt;br /&gt;
| 0x545011E8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA5&lt;br /&gt;
| 0x545011EC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX6&lt;br /&gt;
| 0x545011F0&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA6&lt;br /&gt;
| 0x545011F4&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA_INDEX7&lt;br /&gt;
| 0x545011F8&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_DATA7&lt;br /&gt;
| 0x545011FC&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_ICD_CMD|FALCON_ICD_CMD]]&lt;br /&gt;
| 0x54501200&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_ADDR&lt;br /&gt;
| 0x54501204&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_WDATA&lt;br /&gt;
| 0x54501208&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| FALCON_ICD_RDATA&lt;br /&gt;
| 0x5450120C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SCTL|FALCON_SCTL]]&lt;br /&gt;
| 0x54501240&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_IMEM|FALCON_SPROT_IMEM]]&lt;br /&gt;
| 0x54501280&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_DMEM|FALCON_SPROT_DMEM]]&lt;br /&gt;
| 0x54501284&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_CPUCTL|FALCON_SPROT_CPUCTL]]&lt;br /&gt;
| 0x54501288&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_MISC|FALCON_SPROT_MISC]]&lt;br /&gt;
| 0x5450128C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_IRQ|FALCON_SPROT_IRQ]]&lt;br /&gt;
| 0x54501290&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_MTHD|FALCON_SPROT_MTHD]]&lt;br /&gt;
| 0x54501294&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_SCTL|FALCON_SPROT_SCTL]]&lt;br /&gt;
| 0x54501298&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#FALCON_SPROT_WDTMR|FALCON_SPROT_WDTMR]]&lt;br /&gt;
| 0x5450129C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL0|TSEC_SCP_CTL0]]&lt;br /&gt;
| 0x54501400&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL1|TSEC_SCP_CTL1]]&lt;br /&gt;
| 0x54501404&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_STAT|TSEC_SCP_CTL_STAT]]&lt;br /&gt;
| 0x54501408&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_LOCK|TSEC_SCP_CTL_LOCK]]&lt;br /&gt;
| 0x5450140C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK0&lt;br /&gt;
| 0x54501410&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_CTL_PKEY|TSEC_SCP_CTL_PKEY]]&lt;br /&gt;
| 0x54501418&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]]&lt;br /&gt;
| 0x54501420&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_SEQ_STAT|TSEC_SCP_SEQ_STAT]]&lt;br /&gt;
| 0x54501428&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]]&lt;br /&gt;
| 0x54501430&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK2&lt;br /&gt;
| 0x54501454&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]]&lt;br /&gt;
| 0x54501458&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK3&lt;br /&gt;
| 0x54501470&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT]]&lt;br /&gt;
| 0x54501480&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_IRQMASK|TSEC_SCP_IRQMASK]]&lt;br /&gt;
| 0x54501484&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_SCP_UNK4&lt;br /&gt;
| 0x54501490&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_SCP_ERR|TSEC_SCP_ERR]]&lt;br /&gt;
| 0x54501498&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_CLKDIV&lt;br /&gt;
| 0x54501500&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK0&lt;br /&gt;
| 0x54501504&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_CTL&lt;br /&gt;
| 0x5450150C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_CFG0&lt;br /&gt;
| 0x54501510&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_SEED0&lt;br /&gt;
| 0x54501514&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_CFG1&lt;br /&gt;
| 0x54501518&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_TEST_SEED1&lt;br /&gt;
| 0x5450151C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK1&lt;br /&gt;
| 0x54501528&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TRNG_UNK2&lt;br /&gt;
| 0x5450152C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK0&lt;br /&gt;
| 0x54501600&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL|TSEC_TFBIF_MCCIF_FIFOCTRL]]&lt;br /&gt;
| 0x54501604&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK1&lt;br /&gt;
| 0x54501608&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK2&lt;br /&gt;
| 0x5450160C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK3&lt;br /&gt;
| 0x54501630&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_MCCIF_FIFOCTRL1|TSEC_TFBIF_MCCIF_FIFOCTRL1]]&lt;br /&gt;
| 0x54501634&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TFBIF_UNK4&lt;br /&gt;
| 0x54501640&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK5|TSEC_TFBIF_UNK5]]&lt;br /&gt;
| 0x54501644&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TFBIF_UNK6|TSEC_TFBIF_UNK6]]&lt;br /&gt;
| 0x54501648&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_CMD|TSEC_DMA_CMD]]&lt;br /&gt;
| 0x54501700&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_ADDR|TSEC_DMA_ADDR]]&lt;br /&gt;
| 0x54501704&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_VAL|TSEC_DMA_VAL]]&lt;br /&gt;
| 0x54501708&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_DMA_UNK|TSEC_DMA_UNK]]&lt;br /&gt;
| 0x5450170C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_FALCON_IP_VER&lt;br /&gt;
| 0x54501800&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK0&lt;br /&gt;
| 0x54501824&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK1&lt;br /&gt;
| 0x54501828&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| TSEC_TEGRA_UNK2&lt;br /&gt;
| 0x5450182C&lt;br /&gt;
| 0x04&lt;br /&gt;
|-&lt;br /&gt;
| [[#TSEC_TEGRA_CTL|TSEC_TEGRA_CTL]]&lt;br /&gt;
| 0x54501838&lt;br /&gt;
| 0x04&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  ID&lt;br /&gt;
!  Method&lt;br /&gt;
|-&lt;br /&gt;
| 0x200&lt;br /&gt;
| SET_APPLICATION_ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x300&lt;br /&gt;
| EXECUTE&lt;br /&gt;
|-&lt;br /&gt;
| 0x500&lt;br /&gt;
| HDCP_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x504&lt;br /&gt;
| HDCP_CREATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x508&lt;br /&gt;
| HDCP_VERIFY_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x50C&lt;br /&gt;
| HDCP_GENERATE_EKM&lt;br /&gt;
|-&lt;br /&gt;
| 0x510&lt;br /&gt;
| HDCP_REVOCATION_CHECK&lt;br /&gt;
|-&lt;br /&gt;
| 0x514&lt;br /&gt;
| HDCP_VERIFY_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x518&lt;br /&gt;
| HDCP_ENCRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x51C&lt;br /&gt;
| HDCP_DECRYPT_PAIRING_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x520&lt;br /&gt;
| HDCP_UPDATE_SESSION&lt;br /&gt;
|-&lt;br /&gt;
| 0x524&lt;br /&gt;
| HDCP_GENERATE_LC_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x528&lt;br /&gt;
| HDCP_VERIFY_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x52C&lt;br /&gt;
| HDCP_GENERATE_SKE_INIT&lt;br /&gt;
|-&lt;br /&gt;
| 0x530&lt;br /&gt;
| HDCP_VERIFY_VPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x534&lt;br /&gt;
| HDCP_ENCRYPTION_RUN_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x538&lt;br /&gt;
| HDCP_SESSION_CTRL&lt;br /&gt;
|-&lt;br /&gt;
| 0x53C&lt;br /&gt;
| HDCP_COMPUTE_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x540&lt;br /&gt;
| HDCP_GET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x544&lt;br /&gt;
| HDCP_EXCHANGE_INFO&lt;br /&gt;
|-&lt;br /&gt;
| 0x548&lt;br /&gt;
| HDCP_DECRYPT_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x54C&lt;br /&gt;
| HDCP_GET_HPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x550&lt;br /&gt;
| HDCP_GENERATE_EKH_KM&lt;br /&gt;
|-&lt;br /&gt;
| 0x554&lt;br /&gt;
| HDCP_VERIFY_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x558&lt;br /&gt;
| HDCP_GET_LPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x55C&lt;br /&gt;
| HDCP_DECRYPT_KS&lt;br /&gt;
|-&lt;br /&gt;
| 0x560&lt;br /&gt;
| HDCP_DECRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x564&lt;br /&gt;
| HDCP_GET_RRX&lt;br /&gt;
|-&lt;br /&gt;
| 0x568&lt;br /&gt;
| HDCP_DECRYPT_REENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x56C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x570&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x574&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x578&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x57C&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x700&lt;br /&gt;
| HDCP_VALIDATE_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x704&lt;br /&gt;
| HDCP_VALIDATE_STREAM&lt;br /&gt;
|-&lt;br /&gt;
| 0x708&lt;br /&gt;
| HDCP_TEST_SECURE_STATUS&lt;br /&gt;
|-&lt;br /&gt;
| 0x70C&lt;br /&gt;
| HDCP_SET_DCP_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x710&lt;br /&gt;
| HDCP_SET_RX_KPUB&lt;br /&gt;
|-&lt;br /&gt;
| 0x714&lt;br /&gt;
| HDCP_SET_CERT_RX&lt;br /&gt;
|-&lt;br /&gt;
| 0x718&lt;br /&gt;
| HDCP_SET_SCRATCH_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x71C&lt;br /&gt;
| HDCP_SET_SRM&lt;br /&gt;
|-&lt;br /&gt;
| 0x720&lt;br /&gt;
| HDCP_SET_RECEIVER_ID_LIST&lt;br /&gt;
|-&lt;br /&gt;
| 0x724&lt;br /&gt;
| HDCP_SET_SPRIME&lt;br /&gt;
|-&lt;br /&gt;
| 0x728&lt;br /&gt;
| HDCP_SET_ENC_INPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x72C&lt;br /&gt;
| HDCP_SET_ENC_OUTPUT_BUFFER&lt;br /&gt;
|-&lt;br /&gt;
| 0x730&lt;br /&gt;
| HDCP_GET_RTT_CHALLENGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x734&lt;br /&gt;
| HDCP_STREAM_MANAGE&lt;br /&gt;
|-&lt;br /&gt;
| 0x738&lt;br /&gt;
| HDCP_READ_CAPS&lt;br /&gt;
|-&lt;br /&gt;
| 0x73C&lt;br /&gt;
| HDCP_ENCRYPT&lt;br /&gt;
|-&lt;br /&gt;
| 0x740&lt;br /&gt;
| [6.0.0+] HDCP_GET_CURRENT_NONCE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used to encode and send a method&#039;s ID over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_METHOD1 ===&lt;br /&gt;
Used to encode and send a method&#039;s data over HOST1X to TSEC. This register mirrors the functionality of HOST1X&#039;s channel opcode submission.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_STATUS ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| TSEC_THI_INT_STATUS_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_THI_INT_MASK ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| TSEC_THI_INT_MASK_FALCON_INT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSSET ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQSSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSCLR ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQSCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQSTAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQSTAT_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQSTAT_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQSTAT_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQSTAT_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQSTAT_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQSTAT_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQSTAT_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMODE ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQMODE_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMODE_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMODE_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMODE_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMODE_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMODE_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMODE_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMODE_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMODE_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for changing the mode Falcon&#039;s IRQs. A value of 1 means level triggered while a value of 0 means edge triggered.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMSET ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQMSET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMSET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMSET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMSET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMSET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMSET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMSET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMSET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMSET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for setting the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMCLR ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQMCLR_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMCLR_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMCLR_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMCLR_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMCLR_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMCLR_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMCLR_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMCLR_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for clearing the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQMASK ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQMASK_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQMASK_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQMASK_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQMASK_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQMASK_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQMASK_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQMASK_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQMASK_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IRQDEST ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IRQDEST_HOST_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_IRQDEST_HOST_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_IRQDEST_HOST_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_IRQDEST_HOST_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_IRQDEST_HOST_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_IRQDEST_HOST_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 8-15&lt;br /&gt;
| FALCON_IRQDEST_HOST_EXT&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| FALCON_IRQDEST_TARGET_GPTMR&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| FALCON_IRQDEST_TARGET_WDTMR&lt;br /&gt;
|-&lt;br /&gt;
| 18&lt;br /&gt;
| FALCON_IRQDEST_TARGET_MTHD&lt;br /&gt;
|-&lt;br /&gt;
| 19&lt;br /&gt;
| FALCON_IRQDEST_TARGET_CTXSW&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| FALCON_IRQDEST_TARGET_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 21&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXTERR&lt;br /&gt;
|-&lt;br /&gt;
| 22&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN0&lt;br /&gt;
|-&lt;br /&gt;
| 23&lt;br /&gt;
| FALCON_IRQDEST_TARGET_SWGEN1&lt;br /&gt;
|-&lt;br /&gt;
| 24-31&lt;br /&gt;
| FALCON_IRQDEST_TARGET_EXT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for routing Falcon&#039;s IRQs.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH0 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCRATCH1 ===&lt;br /&gt;
Scratch register for reading/writing data to Falcon.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ITFEN ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_ITFEN_CTXEN&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_ITFEN_MTHDEN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for enabling/disabling Falcon interfaces.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_IDLESTATE ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_IDLESTATE_FALCON_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 1-15&lt;br /&gt;
| FALCON_IDLESTATE_EXT_BUSY&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for detecting if Falcon is busy or not.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DEBUGINFO ===&lt;br /&gt;
Used for UCODE self revocation. This register takes the base address of the GSC carveout shifted right by 8.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] [[NV_services|nvservices]] sets this to 0x8005FF00 &amp;gt;&amp;gt; 8 (physical DRAM address inside the GPU UCODE carveout) before starting the nvhost_tsec firmware.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_EXCI ===&lt;br /&gt;
Contains information about raised exceptions.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CPUCTL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_CPUCTL_IINVAL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CPUCTL_STARTCPU&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_CPUCTL_SRESET&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| FALCON_CPUCTL_HRESET&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_CPUCTL_HALTED&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CPUCTL_STOPPED&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| FALCON_CPUCTL_START_SCP_LS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for signaling the Falcon CPU.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_BOOTVEC ===&lt;br /&gt;
Takes the Falcon&#039;s boot vector address.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-8&lt;br /&gt;
| FALCON_HWCFG_IMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 9-17&lt;br /&gt;
| FALCON_HWCFG_DMEM_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| FALCON_HWCFG_MTHD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 26-31&lt;br /&gt;
| FALCON_HWCFG_DMATRF_SLOTS&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMACTL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_DMACTL_REQUIRE_CTX&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMACTL_DMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| FALCON_DMACTL_IMEM_SCRUBBING&lt;br /&gt;
|-&lt;br /&gt;
| 3-6&lt;br /&gt;
| FALCON_DMACTL_DMAQ_NUM&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| FALCON_DMACTL_SECURE_STAT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring the Falcon&#039;s DMA engine.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_EXTBASE ===&lt;br /&gt;
Base of the external memory buffer.&lt;br /&gt;
&lt;br /&gt;
The base of the transfer is calculated by adding [[#FALCON_DMATRF_POFF]] to the base.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_VOFF ===&lt;br /&gt;
For transfers to DMEM: the destination address.&lt;br /&gt;
For transfers to IMEM: the destination virtual IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRF_POFF ===&lt;br /&gt;
For transfers to IMEM: the destination physical IMEM page.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFCMD ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_DMATRFCMD_FULL&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_DMATRFCMD_IDLE&lt;br /&gt;
|-&lt;br /&gt;
| 2-3&lt;br /&gt;
| FALCON_DMATRFCMD_SEC&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| FALCON_DMATRFCMD_IMEM&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_DMATRFCMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 8-10&lt;br /&gt;
| FALCON_DMATRFCMD_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 12-14&lt;br /&gt;
| FALCON_DMATRFCMD_CTXDMA&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for configuring DMA transfers.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_DMATRFSTAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| FALCON_DMATRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_DMATRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_CRYPTTRFSTAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_ENABLED&lt;br /&gt;
|-&lt;br /&gt;
| 16-18&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_STORES_PENDING&lt;br /&gt;
|-&lt;br /&gt;
| 24-26&lt;br /&gt;
| FALCON_CRYPTTRFSTAT_NUM_LOADS_PENDING&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_HWCFG2 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| FALCON_HWCFG2_VERSION&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_HWCFG2_SCP_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_HWCFG2_SUBVERSION&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| FALCON_HWCFG2_IMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| FALCON_HWCFG2_DMEM_PORTS&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| FALCON_HWCFG2_VM_PAGES_LOG2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_ICD_CMD ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| FALCON_ICD_CMD_OPC&lt;br /&gt;
 0x0: BREAK&lt;br /&gt;
 0x1: CONTINUE_FROM_PC&lt;br /&gt;
 0x2: CONTINUE_FROM_ADDR&lt;br /&gt;
 0x3: CONTINUE_UNK1_FROM_PC&lt;br /&gt;
 0x4: CONTINUE_UNK1_FROM_ADDR&lt;br /&gt;
 0x5: SINGLE_STEP_FROM_PC&lt;br /&gt;
 0x6: SINGLE_STEP_FROM_ADDR&lt;br /&gt;
 0x7: SET_BREAK_MASK&lt;br /&gt;
 0x8: REG_READ&lt;br /&gt;
 0x9: REG_WRITE&lt;br /&gt;
 0xA: DATA_READ&lt;br /&gt;
 0xB: DATA_WRITE&lt;br /&gt;
 0xC: IO_READ&lt;br /&gt;
 0xD: IO_WRITE&lt;br /&gt;
 0xE: STATUS_READ&lt;br /&gt;
|-&lt;br /&gt;
| 6-7&lt;br /&gt;
| FALCON_ICD_CMD_DATA_SIZE&lt;br /&gt;
|-&lt;br /&gt;
| 8-12&lt;br /&gt;
| FALCON_ICD_CMD_IDX&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| FALCON_ICD_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 15&lt;br /&gt;
| FALCON_ICD_CMD_DONE&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| FALCON_ICD_CMD_BREAK_MASK&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SCTL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| FALCON_SCTL_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 4-5&lt;br /&gt;
| FALCON_SCTL_OLD_SEC_MODE&lt;br /&gt;
 0: Non-secure&lt;br /&gt;
 1: Light Secure&lt;br /&gt;
 2: Heavy Secure&lt;br /&gt;
|-&lt;br /&gt;
| 12-13&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 14&lt;br /&gt;
| Initialize the transition to LS mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_IMEM ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to Falcon IMEM.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_DMEM ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to Falcon DMEM.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_CPUCTL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the [[#FALCON_CPUCTL|FALCON_CPUCTL]] register.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_MISC ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* FALCON_VM_SUPERVISOR&lt;br /&gt;
* FALCON_SUBENGINE_RESET&lt;br /&gt;
* FALCON_HOST_IO_INDEX&lt;br /&gt;
* [[#FALCON_DMACTL|FALCON_DMACTL]]&lt;br /&gt;
* FALCON_TLB_CMD&lt;br /&gt;
* FALCON_TLB_CMD_RES&lt;br /&gt;
* FALCON_UNK_250&lt;br /&gt;
* FALCON_UNK_2E0&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_IRQ ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* [[#FALCON_IRQMODE|FALCON_IRQMODE]]&lt;br /&gt;
* [[#FALCON_IRQMSET|FALCON_IRQMSET]]&lt;br /&gt;
* [[#FALCON_IRQMCLR|FALCON_IRQMCLR]]&lt;br /&gt;
* [[#FALCON_IRQDEST|FALCON_IRQDEST]]&lt;br /&gt;
* FALCON_GPTMR_PERIOD&lt;br /&gt;
* FALCON_GPTMR_TIME&lt;br /&gt;
* FALCON_GPTMR_ENABLE&lt;br /&gt;
* FALCON_UNK_3C&lt;br /&gt;
* FALCON_UNK_E0&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_MTHD ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* [[#FALCON_ITFEN|FALCON_ITFEN]]&lt;br /&gt;
* FALCON_CURCTX&lt;br /&gt;
* FALCON_NXTCTX&lt;br /&gt;
* FALCON_CMDCTX&lt;br /&gt;
* FALCON_MTHD_DATA&lt;br /&gt;
* FALCON_MTHD_CMD&lt;br /&gt;
* FALCON_MTHD_DATA_WR&lt;br /&gt;
* FALCON_MTHD_OCCUPIED&lt;br /&gt;
* FALCON_MTHD_ACK&lt;br /&gt;
* FALCON_MTHD_LIMIT&lt;br /&gt;
* FALCON_DEBUG1&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_SCTL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the [[#FALCON_SCTL|FALCON_SCTL]] register.&lt;br /&gt;
&lt;br /&gt;
=== FALCON_SPROT_WDTMR ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Read access level&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Write access level&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Controls accesses to the following registers:&lt;br /&gt;
* FALCON_WDTMR_TIME&lt;br /&gt;
* FALCON_WDTMR_ENABLE&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL0 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Enable TSEC_SCP_INSN_STAT register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL1 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| Enable TRNG testing mode&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Enable the TRNG&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_STAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_CTL_STAT_DEBUG_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_LOCK ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Disable reads for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Disable reads for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Disable reads for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Disable reads for the TEGRA register block&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Disable writes for the TRNG register block&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Disable writes for the TFBIF register block&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Disable writes for the DMA register block&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Disable writes for the TEGRA register block&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Locks accesses to the other sub-engines and can only be cleared in Heavy Secure mode.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_CTL_PKEY ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_REQUEST_RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_CTL_PKEY_LOADED&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ0_STAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 8-11&lt;br /&gt;
| Size of current cs0begin macro&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_SEQ_STAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Set if crypto sequence recording (cs0begin/cs1begin) is active&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| Number of instructions left for the crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 12-15&lt;br /&gt;
| Active crypto key register&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto sequence (cs0 or cs1) executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_INSN_STAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-3&lt;br /&gt;
| Crypto fuc5 destination register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 8-13&lt;br /&gt;
| Crypto fuc5 source register or immediate value&lt;br /&gt;
|-&lt;br /&gt;
| 20-24&lt;br /&gt;
| Crypto fuc5 operation&lt;br /&gt;
 0x0:  nop (fuc5 opcode 0x00) &lt;br /&gt;
 0x1:  cmov (fuc5 opcode 0x84)&lt;br /&gt;
 0x2:  cxsin (fuc5 opcode 0x88) or xdst (with cxset)&lt;br /&gt;
 0x3:  cxsout (fuc5 opcode 0x8C) or xdld (with cxset) &lt;br /&gt;
 0x4:  crnd (fuc5 opcode 0x90)&lt;br /&gt;
 0x5:  cs0begin (fuc5 opcode 0x94)&lt;br /&gt;
 0x6:  cs0exec (fuc5 opcode 0x98)&lt;br /&gt;
 0x7:  cs1begin (fuc5 opcode 0x9C)&lt;br /&gt;
 0x8:  cs1exec (fuc5 opcode 0xA0)&lt;br /&gt;
 0x9:  invalid (fuc5 opcode 0xA4)&lt;br /&gt;
 0xA:  cchmod (fuc5 opcode 0xA8)&lt;br /&gt;
 0xB:  cxor (fuc5 opcode 0xAC)&lt;br /&gt;
 0xC:  cadd (fuc5 opcode 0xB0)&lt;br /&gt;
 0xD:  cand (fuc5 opcode 0xB4)&lt;br /&gt;
 0xE:  crev (fuc5 opcode 0xB8)&lt;br /&gt;
 0xF:  cprecmac (fuc5 opcode 0xBC)&lt;br /&gt;
 0x10: csecret (fuc5 opcode 0xC0)&lt;br /&gt;
 0x11: ckeyreg (fuc5 opcode 0xC4)&lt;br /&gt;
 0x12: ckexp (fuc5 opcode 0xC8)&lt;br /&gt;
 0x13: ckrexp (fuc5 opcode 0xCC)&lt;br /&gt;
 0x14: cenc (fuc5 opcode 0xD0)&lt;br /&gt;
 0x15: cdec (fuc5 opcode 0xD4)&lt;br /&gt;
 0x16: csigauth (fuc5 opcode 0xD8)&lt;br /&gt;
 0x17: csigenc (fuc5 opcode 0xDC)&lt;br /&gt;
 0x18: csigclr (fuc5 opcode 0xE0)&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| Set if running in secure mode (cauth)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last crypto instruction executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_AES_STAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| First opcode&lt;br /&gt;
|-&lt;br /&gt;
| 5-9&lt;br /&gt;
| Second opcode&lt;br /&gt;
|-&lt;br /&gt;
| 15-16&lt;br /&gt;
| AES operation&lt;br /&gt;
 0: Encryption&lt;br /&gt;
 1: Decryption&lt;br /&gt;
 2: Key expansion&lt;br /&gt;
 3: Key reverse expansion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on the last AES sequence executed.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQSTAT ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_IRQSTAT_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQSTAT_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQSTAT_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQSTAT_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the status of crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_IRQMASK ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_SCP_IRQMASK_TRNG&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_SCP_IRQMASK_HALT&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_SCP_IRQMASK_INSN_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| TSEC_SCP_IRQMASK_SINGLE_STEP&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 28&lt;br /&gt;
| Unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Used for getting the value of the mask for crypto IRQs.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_SCP_ERR ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Invalid instruction&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| Empty crypto sequence&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Crypto sequence is too long&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| Crypto sequence was not finished&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| Invalid cauth signature (during csigenc, csigclr or csigauth)&lt;br /&gt;
|-&lt;br /&gt;
| 20&lt;br /&gt;
| Wrong access level (during csigauth)&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| Forbidden instruction&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Contains information on crypto errors generated by the [[#TSEC_SCP_IRQSTAT|TSEC_SCP_IRQSTAT_INSN_ERROR]] IRQ.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_MCCIF_FIFOCTRL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRCL_MCLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDMC_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WRMC_CLLE2X&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RDCL_RDFAST&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_CCLK_OVERRIDE&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_RCLK_OVR_MODE&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL_WCLK_OVR_MODE&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_MCCIF_FIFOCTRL1 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-15&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SRD2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|-&lt;br /&gt;
| 16-31&lt;br /&gt;
| TSEC_TFBIF_MCCIF_FIFOCTRL1_SWR2MC_REORDER_DEPTH_LIMIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK5 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to 0x10 or 0x111110 before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TFBIF_UNK6 ===&lt;br /&gt;
Used to control accesses to DRAM.&lt;br /&gt;
&lt;br /&gt;
[6.0.0+] The nvhost_tsec firmware sets this register to (data_size &amp;lt;&amp;lt; 4) before reading memory from the GPU UCODE carveout.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_CMD ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| TSEC_DMA_CMD_READ&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TSEC_DMA_CMD_WRITE&lt;br /&gt;
|-&lt;br /&gt;
| 4-7&lt;br /&gt;
| TSEC_DMA_CMD_UNK&lt;br /&gt;
|-&lt;br /&gt;
| 12&lt;br /&gt;
| TSEC_DMA_CMD_BUSY&lt;br /&gt;
|-&lt;br /&gt;
| 13&lt;br /&gt;
| TSEC_DMA_CMD_ERROR&lt;br /&gt;
|-&lt;br /&gt;
| 31&lt;br /&gt;
| TSEC_DMA_CMD_INIT&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
A DMA read/write operation requires bits TSEC_DMA_CMD_INIT and TSEC_DMA_CMD_READ/TSEC_DMA_CMD_WRITE to be set in TSEC_DMA_CMD.&lt;br /&gt;
&lt;br /&gt;
During the transfer, the TSEC_DMA_CMD_BUSY bit is set.&lt;br /&gt;
&lt;br /&gt;
Accessing an invalid address causes bit TSEC_DMA_CMD_ERROR to be set.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_ADDR ===&lt;br /&gt;
Takes the address for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_VAL ===&lt;br /&gt;
Takes the value for DMA transfers between TSEC and HOST1X (master and clients).&lt;br /&gt;
&lt;br /&gt;
=== TSEC_DMA_UNK ===&lt;br /&gt;
Always 0xFFF.&lt;br /&gt;
&lt;br /&gt;
=== TSEC_TEGRA_CTL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 16&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 17&lt;br /&gt;
| TSEC_TEGRA_CTL_TKFI_RESTART_FSM_KFUSE&lt;br /&gt;
|-&lt;br /&gt;
| 24&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_FORCE_IDLE_INPUTS_I2C&lt;br /&gt;
|-&lt;br /&gt;
| 25&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_HOST1X&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_RESTART_FSM_APB&lt;br /&gt;
|-&lt;br /&gt;
| 27&lt;br /&gt;
| TSEC_TEGRA_CTL_TMPI_DISABLE_OUTPUT_I2C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SCP ==&lt;br /&gt;
Part of the information here (which hasn&#039;t made it into envytools documentation yet) was shared by [https://wiki.0x04.net/wiki/Marcin_Ko%C5%9Bcielnicki mwk] from reverse engineering falcon processors over the years.&lt;br /&gt;
&lt;br /&gt;
=== Authenticated Mode ===&lt;br /&gt;
==== Entry ====&lt;br /&gt;
From non-secure mode, upon jumping to a page marked as secret, a secret fault occurs. This causes the CPU to verify the region specified in $cauth against the MAC loaded in $c6. If the comparison is successful, the valid bit (bit0) is set on all pages in the $cauth region, and $pc is set to the base of the $cauth region. If the comparsion fails, the CPU is halted.&lt;br /&gt;
&lt;br /&gt;
==== Exit ====&lt;br /&gt;
The CPU automatically goes back to non-secure mode when returning back into non-secret pages. When this happens, the valid bit (bit0) in the TLB flags is cleared for all secret pages.&lt;br /&gt;
&lt;br /&gt;
==== Implementation ====&lt;br /&gt;
Under certain circumstances, it is possible to observe [[#csigauth|csigauth]] being briefly written to [[#TSEC_SCP_INSN_STAT|TSEC_SCP_INSN_STAT]] as &amp;quot;csigauth $c4 $c6&amp;quot; while the opcodes in [[#TSEC_SCP_AES_STAT|TSEC_SCP_AES_STAT]] are set to &amp;quot;cxsin&amp;quot; and &amp;quot;csigauth&amp;quot;, respectively.&lt;br /&gt;
&lt;br /&gt;
Via [[#TSEC_SCP_SEQ0_STAT|TSEC_SCP_SEQ0_STAT]] it can be observed that a 3-sized macro sequence is loaded into cs0 during a secure mode transition.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Opcode&lt;br /&gt;
!  Name&lt;br /&gt;
!  Operand0&lt;br /&gt;
!  Operand1&lt;br /&gt;
!  Operation&lt;br /&gt;
!  Condition&lt;br /&gt;
|-&lt;br /&gt;
| 0 || nop || N/A || N/A || ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 || mov || $cX || $cY || &amp;lt;code&amp;gt;$cX = $cY; ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || sin || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_stream(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || sout || $cX || N/A || &amp;lt;code&amp;gt;write_stream($cX);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 4 || rnd || $cX || N/A || &amp;lt;code&amp;gt;$cX = read_trng(); ACL(X) = ???;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || s0begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || s0exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(0, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || s1begin || immX || N/A || &amp;lt;code&amp;gt;record_macro_for_N_instructions(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 8 || s1exec || immX || N/A || &amp;lt;code&amp;gt;execute_macro_N_times(1, immX);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 || &amp;lt;invalid&amp;gt; || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || chmod || $cX || immY || Complicated, see [[#ACL|ACL]]. ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || xor || $cX || $cY || &amp;lt;code&amp;gt;$cX ^= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || add || $cX || immY || &amp;lt;code&amp;gt;$cX += immY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || and || $cX || $cY || &amp;lt;code&amp;gt;$cX &amp;amp;= $cY;&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(X) &amp;amp; 2) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || rev || $cX || $cY || &amp;lt;code&amp;gt;$cX = endian_swap128($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0xF || gfmul || $cX || $cY || &amp;lt;code&amp;gt;$cX = gfmul($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || secret || $cX || immY || &amp;lt;code&amp;gt;$cX = load_secret(immY); ACL(X) = load_secret_acl(immY);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || keyreg || immX || N/A || &amp;lt;code&amp;gt;active_key_idx = immX;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || kexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || krexp || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_kexp_reverse($cY); ACL(X) = ACL(Y);&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || enc || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_enc(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || dec || $cX || $cY || &amp;lt;code&amp;gt;$cX = aes_dec(active_key_idx, $cY);&amp;lt;/code&amp;gt; || &amp;lt;code&amp;gt;(ACL(active_key_idx) &amp;amp; 1) &amp;amp;&amp;amp; (ACL(Y) &amp;amp; 2)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || csigauth || $cX || $cY || &amp;lt;code&amp;gt;if (hash_verify($cX, $cY)) { has_sig = true; current_sig = $cX; }&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || csigclr || N/A || N/A || &amp;lt;code&amp;gt;has_sig = false;&amp;lt;/code&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || csigenc || $cX || $cY || &amp;lt;code&amp;gt;if (has_sig) $cX = aes_enc($cY, current_sig);&amp;lt;/code&amp;gt; || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== csigauth ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY d8     csigauth $cY $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Takes 2 crypto registers as operands and is automatically executed when jumping to a code region previously uploaded as secret. This instruction does not work in secure mode.&lt;br /&gt;
&lt;br /&gt;
==== csigclr ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 00 e0     csigclr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes no operands and appears to clear the saved cauth signature used by the csigenc instruction.&lt;br /&gt;
&lt;br /&gt;
==== cchmod ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c XY a8     cchmod $cY 0X&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;00000000: f5 3c XY a9     cchmod $cY 1X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction takes a crypto register and a 5 bit immediate value which represents the [[#ACL|ACL]] mask to set.&lt;br /&gt;
&lt;br /&gt;
==== crnd ====&lt;br /&gt;
&amp;lt;code&amp;gt;00000000: f5 3c 0X 90     crnd $cX&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This instruction initializes a crypto register with random data.&lt;br /&gt;
&lt;br /&gt;
Executing this instruction only succeeds if the TRNG is enabled for the SCP, which requires taking the following steps:&lt;br /&gt;
* Write 0x7FFF to TSEC_TRNG_CLKDIV.&lt;br /&gt;
* Write 0x3FF0000 to TSEC_TRNG_UNK0.&lt;br /&gt;
* Write 0xFF00 to TSEC_TRNG_UNK2.&lt;br /&gt;
* Write 0x1000 to [[#TSEC_SCP_CTL1|TSEC_SCP_CTL1]].&lt;br /&gt;
&lt;br /&gt;
Otherwise it hangs forever.&lt;br /&gt;
&lt;br /&gt;
=== ACL ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Meaning&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Secure key. Forced set if bit1 is set. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Secure readable. Once cleared, cannot be set again.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Insecure key. Forced set if bit3 is set. Forced clear if bit0 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Insecure readable. Forced clear if bit1 is clear. Can be toggled back and forth.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Insecure overwritable. Can be toggled back and forth.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Initial values ====&lt;br /&gt;
On SCP boot, the ACL is 0x1F for all $cX.&lt;br /&gt;
&lt;br /&gt;
Loading into $cX using xdst instruction sets ACL($cX) to 0x13 and 0x1F, for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Spilling a $cX to DMEM using xdld instruction is allowed if (ACL($cX) &amp;amp; 2) or (ACL($cX) &amp;amp; 8), for secure and insecure mode respectively.&lt;br /&gt;
&lt;br /&gt;
Loading a secret into $cX sets a per-secret ACL, unconditionally.&lt;br /&gt;
&lt;br /&gt;
=== cauth ===&lt;br /&gt;
$cauth is a special purpose register in the CPU.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-7 || Start of region to authenticate (in 0x100 pages)&lt;br /&gt;
|-&lt;br /&gt;
| 8-15 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 16 || Use secret xfers (?)&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Region is encrypted (?)&lt;br /&gt;
|-&lt;br /&gt;
| 18 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 19 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 20-23 || Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 24-31 || Size of region to authenticate (in 0x100 pages)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== cxset ===&lt;br /&gt;
cxset instruction provides a way to change behavior of a variable amount of successively executed DMA-related instructions.&lt;br /&gt;
&lt;br /&gt;
for example: &amp;lt;code&amp;gt;000000de: f4 3c 02              cxset 0x2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
can be read as: &amp;lt;code&amp;gt;dma_override(type=crypto_reg, count=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The argument to cxset specifies the type of behavior change in the top 3 bits, and the number of DMA-related instructions the effect lasts for in the lower 5 bits.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4 || Number of instructions it is valid for (0x1f is a special value meaning infinitely many instructions -- until overriden by another cxset)&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Crypto destination/source select (0=crypto register, 1=crypto stream)&lt;br /&gt;
|-&lt;br /&gt;
| 6 || External memory override (0=Disabled, 1=Enabled)&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Internal memory select (0=DMEM, 1=IMEM)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== DMA-Related Instructions ====&lt;br /&gt;
At least the following instructions may have changed behavior, and count against the cxset &amp;quot;count&amp;quot; argument: &amp;lt;code&amp;gt;xdwait&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;xdld&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
For example, if override type=0b000, then the &amp;quot;length&amp;quot; argument to &amp;lt;code&amp;gt;xdst&amp;lt;/code&amp;gt; is instead treated as the index of the target $cX register.&lt;br /&gt;
&lt;br /&gt;
=== Secrets ===&lt;br /&gt;
Falcon&#039;s Authenticated Mode has access to 64 128-bit keys which are burned at factory. These keys can be loaded by using the $csecret instruction which takes the target crypto register and the key index as arguments.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Index || ACL || Console-unique || Notes &lt;br /&gt;
|-&lt;br /&gt;
| 0x00 || 0x13 || No || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0x10 || No || Used by nvhost_nvdec_bl020_prod firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x11 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0x13 || No || Used by nvhost_tsec, nvhost_nvdec_bl020_prod, nvhost_nvdec020_prod, nvhost_nvdec020_ns and acr_ucode firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x11 || No || Used by [6.0.0+] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x10 || No || Used by nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x11 || No || Used by [1.0.0-5.1.0] nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0x13 || No || Used by nvhost_nvdec_bl020_prod, [5.0.0+] nvhost_nvdec020_prod, [5.0.0+] nvhost_nvdec020_ns and [6.0.0+] nvhost_tsec firmwares.&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x10 || No || Used by [[TSEC_Firmware#KeygenLdr|KeygenLdr]].&lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x13 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x13 || No || Used by nvhost_tsec firmware.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || 0x11 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x10 || No ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x10 || Yes || Used by [[TSEC_Firmware#Keygen|Keygen]], nvhost_tsec, nvhost_nvdec020_prod and nvhost_nvdec020_ns firmwares.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=5128</id>
		<title>PCV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=5128"/>
		<updated>2018-09-30T04:08:49Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Voltage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= bpc =&lt;br /&gt;
This is &amp;quot;nn::bpc::IBoardPowerControlManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ShutdownSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RebootSystem&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWakeupReason&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetShutdownReason&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAcOk&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBoardPowerControlEvent&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSleepButtonState&lt;br /&gt;
|-&lt;br /&gt;
| 7 || GetPowerEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bpc:r =&lt;br /&gt;
This is &amp;quot;nn::bpc::IRtcManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadExternalRtcResetFlag&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ClearExternalRtcResetFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GetExternalRtcValue / SetExternalRtcValue directly accesses the max77620_rtc0 device.&lt;br /&gt;
&lt;br /&gt;
= pcv =&lt;br /&gt;
This is &amp;quot;nn::pcv::detail::IPcvService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPowerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetClockEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetPossibleClockRates&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetMinVClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetReset&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetVoltageRange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetTemperatureThresholds&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IsInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 18 || PowerOn&lt;br /&gt;
|-&lt;br /&gt;
| 19 || PowerOff&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ChangeVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetPowerClockInfoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetOscillatorClock&lt;br /&gt;
|-&lt;br /&gt;
| 23 || GetDvfsTable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GetModuleStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GetPowerDomainStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 26 || GetFuseInfo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Name to Block Maps ==&lt;br /&gt;
&lt;br /&gt;
=== Power Switch / Clocking / Reset ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Rail || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || CpuBus || vdd_cpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || GPU || vdd_gpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || I2S1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || I2S2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || I2S3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || PWM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  6 || I2C1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  7 || I2C2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  8 || I2C3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  9 || I2C4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || I2C5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || I2C6 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SPI1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || SPI2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SPI3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SPI4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DISP1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DISP2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || SDMMC4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || - || - || Not actual block. Used for debug and stuff.&lt;br /&gt;
|-&lt;br /&gt;
| 25 || CSITE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || TSEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || MSELECT || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || HDA2CODEC_2X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ACTMON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 30 || I2C_SLOW || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SOR1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 33 || HDA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 34 || XUSB_CORE_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 35 || XUSB_FALCON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 36 || XUSB_FS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 37 || XUSB_CORE_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 38 || XUSB_SS_HOSTDEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UARTA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UARTB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 41 || UARTC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 42 || UARTD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 43 || HOST1X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 44 || ENTROPY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 45 || SOC_THERM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 46 || VIC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 47 || NVENC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 48 || NVJPG || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 49 || NVDEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 50 || QSPI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 52 || TSECB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 53 || APE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 54 || ACLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 55 || UARTAPE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 56 || EMC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 57 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 58 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 59 || DSI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 60 || MAUD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DPAUX1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 62 || MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 63 || UART_FST_MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 64 || OSC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 65 || SCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 66 || SOR_SAFE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 67 || XUSB_SS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 68 || XUSB_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 69 || XUSB_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 70 || EXTPERIPH1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 71 || AHUB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 72 || HDA2HDMICODEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 73 || PLLP5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 74 || USBD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 75 || USB2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 76 || PCIE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 77 || AFI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || PCIEXCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 79 || PEX_USB_UPHY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 80 || XUSB_PADCTL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 81 || APBDMA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 82 || USB2_TRK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 83 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 84 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 85 || CEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Voltage ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || max77620_sd0 || &lt;br /&gt;
|-&lt;br /&gt;
|  1 || max77620_sd1 || &lt;br /&gt;
|-&lt;br /&gt;
|  2 || max77620_sd2 || &lt;br /&gt;
|-&lt;br /&gt;
|  3 || max77620_sd3 || &lt;br /&gt;
|-&lt;br /&gt;
|  4 || max77620_ldo0 || 1.2v&lt;br /&gt;
|-&lt;br /&gt;
|  5 || max77620_ldo1 || &lt;br /&gt;
|-&lt;br /&gt;
|  6 || max77620_ldo2 || SDcard power, 1.8v - 3.3v&lt;br /&gt;
|-&lt;br /&gt;
|  7 || max77620_ldo3 || GC ASIC 3.1v&lt;br /&gt;
|-&lt;br /&gt;
|  8 || max77620_ldo4 || RTC power, 0.85v&lt;br /&gt;
|-&lt;br /&gt;
|  9 || max77620_ldo5 || GC ASIC 1.8v&lt;br /&gt;
|-&lt;br /&gt;
| 10 || max77620_ldo6 || AVDD touchscreen, 2.9v&lt;br /&gt;
|-&lt;br /&gt;
| 11 || max77620_ldo7 || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || max77620_ldo8 || DisplayPort, 1.05v&lt;br /&gt;
|-&lt;br /&gt;
| 13 || max77621_cpu || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || max77621_gpu || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: max77620 GPIOs are only used internally by the driver during init, and not exposed via an API.&lt;br /&gt;
&lt;br /&gt;
= pcv:arb =&lt;br /&gt;
This is &amp;quot;nn::pcv::IArbitrationManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ReleaseControl&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:imm =&lt;br /&gt;
This is &amp;quot;nn::pcv::IImmediateManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= time:u, time:a, time:s =&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::IStaticService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [4.0.0+] GetEphemeralNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 50 || [4.0.0+] SetStandardSteadyClockInternalOffset || &lt;br /&gt;
|-&lt;br /&gt;
| 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 102 || [5.0.0+] GetStandardUserSystemClockInitialYear || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || [3.0.0+] IsStandardNetworkSystemClockAccuracySufficient || &lt;br /&gt;
|-&lt;br /&gt;
| 300 || [4.0.0+] CalculateMonotonicSystemClockBaseTimePoint || &lt;br /&gt;
|-&lt;br /&gt;
| 400 || [4.0.0+] GetClockSnapshot || &lt;br /&gt;
|-&lt;br /&gt;
| 401 || [4.0.0+] GetClockSnapshotFromSystemClockContext || &lt;br /&gt;
|-&lt;br /&gt;
| 500 || [4.0.0+] CalculateStandardUserSystemClockDifferenceByUser || &lt;br /&gt;
|-&lt;br /&gt;
| 501 || [4.0.0+] CalculateSpanBetween || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISteadyClock ==&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::ISteadyClock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTimePoint || No input, returns an output [[#SteadyClockTimePoint]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTestOffset || No input, returns an output [[#TimeSpanType]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetTestOffset || Takes an input [[#TimeSpanType]], no output.&lt;br /&gt;
|-&lt;br /&gt;
| 100 || [2.0.0+] GetRtcValue || No input, returns an output s64.&lt;br /&gt;
|-&lt;br /&gt;
| 101 || [2.0.0+] IsRtcResetDetected || No input, returns an output u8 bool.&lt;br /&gt;
|-&lt;br /&gt;
| 102 || [2.0.0+] GetSetupResultValue || No input, returns an output u32.&lt;br /&gt;
|-&lt;br /&gt;
| 200 || [3.0.0+] GetInternalOffset || No input, returns an output [[#TimeSpanType]].&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [3.0.0-3.0.2] SetInternalOffset || Takes an input [[#TimeSpanType]], no output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SteadyClockTimePoint ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8|| a u64 representing a point in time.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x10 || ?&lt;br /&gt;
|}&lt;br /&gt;
This is a 0x18-byte struct.&lt;br /&gt;
&lt;br /&gt;
=== TimeSpanType ===&lt;br /&gt;
This is an u64.&lt;br /&gt;
&lt;br /&gt;
== ISystemClock ==&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::ISystemClock&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTime || Returns an output [[#PosixTime]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetCurrentTime || Takes an input [[#PosixTime]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSystemClockContext || Returns an output [[#SystemClockContext]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSystemClockContext  || Takes an input [[#SystemClockContext]].&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== PosixTime ===&lt;br /&gt;
This is an u64 for UTC POSIX time.&lt;br /&gt;
&lt;br /&gt;
=== SystemClockContext ===&lt;br /&gt;
This is an 0x20-byte struct.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8|| a [[#PosixTime]] representing the system clock epoch.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x18 || a [[#SteadyClockTimePoint]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ITimeZoneService ==&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::ITimeZoneService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetDeviceLocationName || No input, returns an output [[#LocationName]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeviceLocationName || Takes an input [[#LocationName]], no output.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTotalLocationNameCount || No input, returns an output s32.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LoadLocationNameList || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || LoadTimeZoneRule || Takes an input [[#LocationName]] and a type-0x16 output buffer for [[#TimeZoneRule]], no output.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [2.0.0+] GetTimeZoneRuleVersion ||  No input, returns an output [[#TimeZoneRuleVersion]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || ToCalendarTime || Takes an input [[#PosixTime]] and a type-0x15 input buffer for [[#TimeZoneRule]], returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| 101 || ToCalendarTimeWithMyRule || Takes an input [[#PosixTime]], returns an output [[#CalendarTime]] and [[#CalendarAdditionalInfo]].&lt;br /&gt;
|-&lt;br /&gt;
| 201 || ToPosixTime || Takes an input [[#CalendarTime]], a type-0x15 input buffer for [[#TimeZoneRule]], an type-0xA output buffer for [[#PosixTime]] array, and returns an output s32.&lt;br /&gt;
|-&lt;br /&gt;
| 202 || ToPosixTimeWithMyRule || Takes an input [[#CalendarTime]], an type-0xA output buffer for [[#PosixTime]] array, and returns an output s32.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== LoadLocationNameList ===&lt;br /&gt;
Takes an input s32 LocationName_index and a type-0x6 output buffer for [[#LocationName]], returns an output s32 for total output entries.&lt;br /&gt;
&lt;br /&gt;
=== LocationName ===&lt;br /&gt;
This contains a TimeZone location string with a max size of 0x24 bytes.&lt;br /&gt;
&lt;br /&gt;
=== TimeZoneRule ===&lt;br /&gt;
This is an 0x4000-byte struct. Official sw uses fixed-size 0x4000 for the buffer size with the above commands.&lt;br /&gt;
&lt;br /&gt;
=== TimeZoneRuleVersion ===&lt;br /&gt;
This is an u128.&lt;br /&gt;
&lt;br /&gt;
=== CalendarTime ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || Day&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || Hour&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || Minute&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || Second&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || Padding / unknown?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is an 0x8-byte struct.&lt;br /&gt;
&lt;br /&gt;
=== CalendarAdditionalInfo ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || 0-based day-of-week.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || 0-based day-of-year.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || ? || Timezone name string.&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x4 || 0 = no DST, 1 = DST.&lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0x4 || s32 seconds relative to UTC for this timezone.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is an 0x18-byte struct. This stores timezone info.&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=4946</id>
		<title>Joy-Con</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Joy-Con&amp;diff=4946"/>
		<updated>2018-08-30T02:30:59Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Reverted edits by AveSatanas (talk) to last revision by HolyToaster&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Joy-Con is the name for the Switch&#039;s primary game controllers. The controllers communicate to the console through bluetooth and can be disconnected from the main unit.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
The controllers themselves are simple to disassemble and identify.&lt;br /&gt;
[[File:JoyconFront.jpg|400px|thumb|The front of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
[[File:JoyconRear.jpg|400px|thumb|The rear of the Joy-Con internal[https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263]]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color || Item&lt;br /&gt;
|-&lt;br /&gt;
| Red || Broadcom BCM20734 Bluetooth 4.1/2.4 GHz Transceiver&lt;br /&gt;
|-&lt;br /&gt;
| Orange || STMicroelectronics NFCBEA 812006 33 (Likely NFC reader IC)&lt;br /&gt;
|-&lt;br /&gt;
| Yellow|| Macronix International MX25U4033E 4 Mb CMOS Flash&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Firmware==&lt;br /&gt;
&#039;&#039;See also: [[Joy-Con Firmware]]&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The firmware of the Joy-Cons seems to be generic across all instances. Details such as the handedness of the controller and the color is just indicated in a configuration part of the flash. Judging by quick glance at the firmware, it&#039;s probably identical to that used on the Pro Controller as well.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Controller || 1.0.0&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Left (Blue) || [[:File:pad.L.bin|flash dump]]&lt;br /&gt;
|-&lt;br /&gt;
| Joy-Con Right (Red) || [[:File:pad.R.bin|flash dump]]&lt;br /&gt;
|}&lt;br /&gt;
The flash is in a patch-ram format. Tools for dealing with it are available [https://github.com/shuffle2/nxpad].&lt;br /&gt;
A dump of the ROM region (taken while firmware was running) can be found [[:File:bcm20734_rom.bin|here]]. Note this is the same SoC used on the other controller models, as well.&lt;br /&gt;
&lt;br /&gt;
== Left &amp;amp; Right Separate Joy-con ==&lt;br /&gt;
&lt;br /&gt;
When paired directly to a computer over bluetooth, the joy-con both provide identical HID input report descriptor. This does not appear to include motion controls, IR data, or NFC. They both behave as detached single-player controllers.&lt;br /&gt;
&lt;br /&gt;
HID Input Report Descriptor (Hexadecimal):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
00000000: 05010905 A1010601 FF852109 21750895  ....¡...ÿ…!.!u.•&lt;br /&gt;
00000010: 30810285 30093075 08953081 02853109  0..…0.0u.•0..…1.&lt;br /&gt;
00000020: 31750896 69018102 85320932 75089669  1u.–i...…2.2u.–i&lt;br /&gt;
00000030: 01810285 33093375 08966901 8102853F  ...…3.3u.–i...…?&lt;br /&gt;
00000040: 05091901 29101500 25017501 95108102  ....)...%.u.•...&lt;br /&gt;
00000050: 05010939 15002507 75049501 81420509  ...9..%.u.•..B..&lt;br /&gt;
00000060: 75049501 81010501 09300931 09330934  u.•......0.1.3.4&lt;br /&gt;
00000070: 16000027 FFFF0000 75109504 81020601  ...&#039;ÿÿ..u.•.....&lt;br /&gt;
00000080: FF850109 01750895 30910285 10091075  ÿ…...u.•0‘.…...u&lt;br /&gt;
00000090: 08953091 02851109 11750895 30910285  .•0‘.…...u.•0‘.…&lt;br /&gt;
000000A0: 12091275 08953091 02C0               ...u.•0‘.À&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Parsed Bytes || Description&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        || Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x05,        || Usage (Game Pad)&lt;br /&gt;
|-&lt;br /&gt;
|0xA1, 0x01,        || Collection (Application)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x21,        ||   Report ID (33)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x21,        ||   Usage (0x21)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x30,        ||   Report ID (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (0x30)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x31,        ||   Report ID (49)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (0x31)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x32,        ||   Report ID (50)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x32,        ||   Usage (0x32)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x33,        ||   Report ID (51)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (0x33)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x96, 0x69, 0x01,  ||   Report Count (361)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x3F,        ||   Report ID (63)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x19, 0x01,        ||   Usage Minimum (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x29, 0x10,        ||   Usage Maximum (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x01,        ||   Logical Maximum (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x01,        ||   Report Size (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x10,        ||   Report Count (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x39,        ||   Usage (Hat switch)&lt;br /&gt;
|-&lt;br /&gt;
|0x15, 0x00,        ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x25, 0x07,        ||   Logical Maximum (7)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x42,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,Null State)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x09,        ||   Usage Page (Button)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x04,        ||   Report Size (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x01,        ||   Report Count (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x01,        ||   Input (Const,Array,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x05, 0x01,        ||   Usage Page (Generic Desktop Ctrls)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x30,        ||   Usage (X)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x31,        ||   Usage (Y)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x33,        ||   Usage (Rx)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x34,        ||   Usage (Ry)&lt;br /&gt;
|-&lt;br /&gt;
|0x16, 0x00, 0x00,  ||   Logical Minimum (0)&lt;br /&gt;
|-&lt;br /&gt;
|0x27, 0xFF, 0xFF, 0x00, 0x00,  ||   Logical Maximum (65534)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x10,        ||   Report Size (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x04,        ||   Report Count (4)&lt;br /&gt;
|-&lt;br /&gt;
|0x81, 0x02,        ||   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)&lt;br /&gt;
|-&lt;br /&gt;
|0x06, 0x01, 0xFF,  ||   Usage Page (Vendor Defined 0xFF01)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x01,        ||   Report ID (1)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x01,        ||   Usage (0x01)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x10,        ||   Report ID (16)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x10,        ||   Usage (0x10)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x11,        ||   Report ID (17)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x11,        ||   Usage (0x11)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0x85, 0x12,        ||   Report ID (18)&lt;br /&gt;
|-&lt;br /&gt;
|0x09, 0x12,        ||   Usage (0x12)&lt;br /&gt;
|-&lt;br /&gt;
|0x75, 0x08,        ||   Report Size (8)&lt;br /&gt;
|-&lt;br /&gt;
|0x95, 0x30,        ||   Report Count (48)&lt;br /&gt;
|-&lt;br /&gt;
|0x91, 0x02,        ||   Output (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)&lt;br /&gt;
|-&lt;br /&gt;
|0xC0,              || End Collection&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Colors==&lt;br /&gt;
HEX codes for the colors shown in the &amp;quot;Controllers&amp;quot; menu of the Switch UI can be found in a Joy-con SPI dump starting at offset 0x6050. Body color is first followed by button color and each is 3 bytes long. These values are able to be re-written with any HEX color value to make the Joy-cons show up as different colors in the UI. The following is a list of official HEX colors recovered from SPI dumps.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Color Name || Body HEX || Button HEX&lt;br /&gt;
|-&lt;br /&gt;
| Gray || #828282 || #0F0F0F&lt;br /&gt;
|-&lt;br /&gt;
| Neon Red || #FF3C28 || #1E0A0A&lt;br /&gt;
|-&lt;br /&gt;
| Neon Blue || #0AB9E6 || #001E1E&lt;br /&gt;
|-&lt;br /&gt;
| Neon Yellow || #E6FF00 || #142800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Green || #1EDC00 || #002800&lt;br /&gt;
|-&lt;br /&gt;
| Neon Pink || #FF3278 || #28001E&lt;br /&gt;
|-&lt;br /&gt;
| Mario Red || #E10F00 || #280A0A&lt;br /&gt;
|-&lt;br /&gt;
| Black Pro Controller || #323232 or #323231 || ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Additional Links==&lt;br /&gt;
[https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering Reverse Engineering of the Joy-Con by Github user dekuNukem]&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=4863</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=4863"/>
		<updated>2018-08-02T02:01:01Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: Undo revision 4861 by Godzivan (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || ||	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster B ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D+ || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D- || USB-C || || || || Cluster B - 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?? || || 0-1.8V || || || No clue. This is definitely important, we just have no idea how. May need to interface with dock for comms.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-A RX || || 0-1.8V || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-A TX || || 0-1.8V || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || ?? || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || VOL (-)  || || || || || Button Vol -&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster G ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BUTTON_HOME || || || || || RCM strap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || D- || USB-C || || || || Cluster B - 3&lt;br /&gt;
|-&lt;br /&gt;
| 3 || D+ || USB-C || || || || Cluster B - 2&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GND || || || || ||&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=4780</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=4780"/>
		<updated>2018-06-20T16:33:57Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || ||	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?? || || 0-1.8V || || || No clue. This is definitely important, we just have no idea how. May need to interface with dock for comms.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-A RX || || 0-1.8V || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-A TX || || 0-1.8V || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || ?? || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster G ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BUTTON_HOME || || || || || RCM strap&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Unknown || ?? || 3.3V-0V || None known || N/A? || Falls around same time pad K-7 falls, but immediately. No data observed as of yet.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Unknown || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Testpads&amp;diff=4779</id>
		<title>Testpads</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Testpads&amp;diff=4779"/>
		<updated>2018-06-20T16:25:17Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Cluster C */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch mainboard has a series of testpads on the front and back, presumably used in factory test, diagnostics, and early board bringup procedures.&lt;br /&gt;
&lt;br /&gt;
== Raw Logic captures ==&lt;br /&gt;
&lt;br /&gt;
These are reference materials, taken from poking at I/O on various testpads. https://github.com/hedgeberg/Switch-Logic-Captures&lt;br /&gt;
&lt;br /&gt;
== Photos ==&lt;br /&gt;
&lt;br /&gt;
[[File:Switchre_side1.jpg|200px]]&lt;br /&gt;
[[File:Switchre_side2.jpg|200px]]&lt;br /&gt;
&lt;br /&gt;
== Pinouts ==&lt;br /&gt;
&lt;br /&gt;
=== Cluster A ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Batt GND? || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Battery pulse? || Pulse train || 0-3.3V || L-5? || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Battery Vdd || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || Square wave || 0-3.3V || || 329kHz? (undersampled?) || Square wave when screen on, but looks like vias to Speaker R&lt;br /&gt;
|-&lt;br /&gt;
| 6 || Weak GND? || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SDA || I2C || 0-1.8V || || ||	&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SCL || I2C || 0-1.8V  || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || USB-PWR-WAVE? || Square wave || 0-3.3V || K-4, K-5? || ~11 Hz || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster C ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ?? || || 0-1.8V || || No clue. This is definitely important, we just have no idea how. May need to interface with dock for comms.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-A RX || || 0-1.8V || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-A TX || || 0-1.8V || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || ?? || || 0-1.8V || || || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || ?? || || 0-1.8V || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster E ===&lt;br /&gt;
&lt;br /&gt;
DON&#039;T FUCK WITH CLUSTER E.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 10 || Reset || || || || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster I ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Screen_on || On/Off || 0-1.8V || || || Screen power state, active high&lt;br /&gt;
|-&lt;br /&gt;
| 3 || || UART || 0-1.8V || || 1.5MBaud? || needs testing with screen plugged in. Sends string ‘Nintendo Switch’ + some stuff. long string of 00&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || UART || 0-1.8V || || 1.5MBaud? || needs testing with screen plugged in. some kind of call/response for pad I-3&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Flow control || 0-1.8V || || || Flow control for pad I-4?&lt;br /&gt;
|-&lt;br /&gt;
| 6 || || || 0-1.8V || || || Needs testing with chip/touch screen interface board plugged in&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster J ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-3&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ? || Edge || 0-1.8V || || || Turns on around same time as pad J-1, slightly after&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Power button || Pushbutton || 4V-0V || || || Active low&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ? || Constant? || 0V || Ground?-NT || ||&lt;br /&gt;
|-&lt;br /&gt;
| 6 || ? || Edge || 0-1.8V || || || Turns on with pad J-6, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ? || Edge || 0-1.8V || || || Turns on with pad J-5, ~1s after J-1/J-3&lt;br /&gt;
|-&lt;br /&gt;
| 8 || ? || Edge? || 0-1.8V || || || Turns on ~1s after J-6/J-7, turns off at unknown point&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster K ===&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GND || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Unknown || ?? || 3.3V-0V || None known || N/A? || Falls around same time pad K-7 falls, but immediately. No data observed as of yet.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Unknown || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz ||&lt;br /&gt;
|-&lt;br /&gt;
| 5 || USB-PWR-WAVE? || Square wave || 0V-3.3V || A-9, A-10? || ~11 Hz || Appears to mirror K4. Duty cycle 66.67%. Low on screen lock. Off until first interaction.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || USB-C V+ || Supply power || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 7 || Unknown || Power supply? || ~3V-0V || None known || N/A || 0 when usb-c not plugged in, falls slowly on first interaction if USB-C plugged in. Power draw related?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Cluster L ===&lt;br /&gt;
&lt;br /&gt;
TODO: Update diagram&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable&lt;br /&gt;
! Pad # || Name || Type || Levels || Continuity || Frequency || Comment&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Li-Ion Batt Vdd Mirror || Power Supply || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GND || || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Li-Ion Batt Vdd || Battery Input || Std. Li-Ion || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Mirrored Ground? || || || || || Holds steady @ 0, looks like a decoupled isolated ground&lt;br /&gt;
|-&lt;br /&gt;
| 5 || Battery pulse? ||  || || || &amp;lt;1 Hz || Duty cycle ~0%&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Fuses&amp;diff=4473</id>
		<title>Fuses</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Fuses&amp;diff=4473"/>
		<updated>2018-04-16T10:34:23Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* bootrom_ipatch */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Nintendo Switch makes use of Tegra&#039;s fuse driver for a number of operations. This driver is mapped to physical address 0x7000F800 with a total size of 0x400 bytes and exposes several registers for fuse programming.&lt;br /&gt;
&lt;br /&gt;
Registers from 0x7000F800 to 0x7000F800 + 0xFF can be used to directly program the hardware fuse array, while registers from 0x7000F800 + 0x100 (FUSE_CHIP_REG_START_OFFSET) to 0x7000F800 + 0x3FC (FUSE_CHIP_REG_END_OFFSET) represent cached values read from certain fuses.&lt;br /&gt;
&lt;br /&gt;
== Registers ==&lt;br /&gt;
Below is a list of fuse driver registers used by the Switch&#039;s bootloaders.&lt;br /&gt;
&lt;br /&gt;
=== Driver registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_CTRL|FUSE_CTRL]]&lt;br /&gt;
| 0x7000F800&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_ADDR|FUSE_REG_ADDR]]&lt;br /&gt;
| 0x7000F804&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_READ|FUSE_REG_READ]]&lt;br /&gt;
| 0x7000F808&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_REG_WRITE|FUSE_REG_WRITE]]&lt;br /&gt;
| 0x7000F80C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD1&lt;br /&gt;
| 0x7000F810&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_RD2&lt;br /&gt;
| 0x7000F814&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TIME_PGM1&lt;br /&gt;
| 0x7000F818&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_TIME_PGM2|FUSE_TIME_PGM2]]&lt;br /&gt;
| 0x7000F81C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIV2INTFC&lt;br /&gt;
| 0x7000F820&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FUSEBYPASS&lt;br /&gt;
| 0x7000F824&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRIVATEKEYDISABLE&lt;br /&gt;
| 0x7000F828&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_DIS_PGM|FUSE_DIS_PGM]]&lt;br /&gt;
| 0x7000F82C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_WRITE_ACCESS|FUSE_WRITE_ACCESS]]&lt;br /&gt;
| 0x7000F830&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PWR_GOOD_SW&lt;br /&gt;
| 0x7000F834&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_CTRL ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Fuse command (1 = FUSE_READ; 2 = FUSE_WRITE; 3 = FUSE_SENSE)&lt;br /&gt;
|-&lt;br /&gt;
| 26&lt;br /&gt;
| Fuse power down mode flag (FUSE_CTRL_PD)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Before fuse reading/writing the power down mode must be disabled.&lt;br /&gt;
FUSE_SENSE mode flushes programmed values into the [[Fuses#Cache_registers|cache registers]].&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_ADDR ====&lt;br /&gt;
This register takes the address of the fuse to be read/written/sensed.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_READ ====&lt;br /&gt;
This register receives the value read from the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_REG_WRITE ====&lt;br /&gt;
This register takes the value to be written to the fuse.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_TIME_PGM2 ====&lt;br /&gt;
This register takes the fuse programming pulse (0xC0 == 19200 kHz).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_DIS_PGM ====&lt;br /&gt;
If set to 0x01, this register disables fuse programming.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_WRITE_ACCESS ====&lt;br /&gt;
If set to 0x01, this register disables software writes to the fuse driver registers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Cache registers ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Address&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_PRODUCTION_MODE&lt;br /&gt;
| 0x7000F900&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SKU_INFO|FUSE_SKU_INFO]]&lt;br /&gt;
| 0x7000F910&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_0&lt;br /&gt;
| 0x7000F914&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_IDDQ&lt;br /&gt;
| 0x7000F918&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FT_REV&lt;br /&gt;
| 0x7000F928&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_1&lt;br /&gt;
| 0x7000F92C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CPU_SPEEDO_2&lt;br /&gt;
| 0x7000F930&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_0&lt;br /&gt;
| 0x7000F934&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SOC_SPEEDO_1|FUSE_SOC_SPEEDO_1]]&lt;br /&gt;
| 0x7000F938&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_SPEEDO_2&lt;br /&gt;
| 0x7000F93C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SOC_IDDQ&lt;br /&gt;
| 0x7000F940&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_FA|FUSE_FA]]&lt;br /&gt;
| 0x7000F948&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY0]]&lt;br /&gt;
| 0x7000F964&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY1]]&lt;br /&gt;
| 0x7000F968&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY2]]&lt;br /&gt;
| 0x7000F96C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY3]]&lt;br /&gt;
| 0x7000F970&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY4]]&lt;br /&gt;
| 0x7000F974&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY5]]&lt;br /&gt;
| 0x7000F978&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY6]]&lt;br /&gt;
| 0x7000F97C&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PUBLIC_KEY|FUSE_PUBLIC_KEY7]]&lt;br /&gt;
| 0x7000F980&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_1&lt;br /&gt;
| 0x7000F984&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_2&lt;br /&gt;
| 0x7000F988&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_CP_REV&lt;br /&gt;
| 0x7000F990&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_0&lt;br /&gt;
| 0x7000F998&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FIRST_BOOTROM_PATCH_SIZE_REG&lt;br /&gt;
| 0x7000F99C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURITY_MODE&lt;br /&gt;
| 0x7000F9A0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY0]]&lt;br /&gt;
| 0x7000F9A4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY1]]&lt;br /&gt;
| 0x7000F9A8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY2]]&lt;br /&gt;
| 0x7000F9AC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY3]]&lt;br /&gt;
| 0x7000F9B0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PRIVATE_KEY|FUSE_PRIVATE_KEY4]]&lt;br /&gt;
| 0x7000F9B4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_BOOT_DEVICE_INFO&lt;br /&gt;
| 0x7000F9BC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_SW|FUSE_RESERVED_SW]]&lt;br /&gt;
| 0x7000F9C0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VP8_ENABLE&lt;br /&gt;
| 0x7000F9C4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM0|FUSE_RESERVED_ODM0]]&lt;br /&gt;
| 0x7000F9C8&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM1|FUSE_RESERVED_ODM1]]&lt;br /&gt;
| 0x7000F9CC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM2|FUSE_RESERVED_ODM2]]&lt;br /&gt;
| 0x7000F9D0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM3|FUSE_RESERVED_ODM3]]&lt;br /&gt;
| 0x7000F9D4&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM4|FUSE_RESERVED_ODM4]]&lt;br /&gt;
| 0x7000F9D8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_ODM5&lt;br /&gt;
| 0x7000F9DC&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]]&lt;br /&gt;
| 0x7000F9E0&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]]&lt;br /&gt;
| 0x7000F9E4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_USB_CALIB&lt;br /&gt;
| 0x7000F9F0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SKU_DIRECT_CONFIG&lt;br /&gt;
| 0x7000F9F4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_VENDOR_CODE&lt;br /&gt;
| 0x7000FA00&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_FAB_CODE&lt;br /&gt;
| 0x7000FA04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_0&lt;br /&gt;
| 0x7000FA08&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_LOT_CODE_1&lt;br /&gt;
| 0x7000FA0C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_WAFER_ID&lt;br /&gt;
| 0x7000FA10&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_X_COORDINATE&lt;br /&gt;
| 0x7000FA14&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_Y_COORDINATE&lt;br /&gt;
| 0x7000FA18&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SATA_CALIB&lt;br /&gt;
| 0x7000FA24&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_GPU_IDDQ&lt;br /&gt;
| 0x7000FA28&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_3&lt;br /&gt;
| 0x7000FA2C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_SUBREVISION&lt;br /&gt;
| 0x7000FA48&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_4&lt;br /&gt;
| 0x7000FA54&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_5&lt;br /&gt;
| 0x7000FA58&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_6&lt;br /&gt;
| 0x7000FA5C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_7&lt;br /&gt;
| 0x7000FA60&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_OPT_PRIV_SEC_DIS&lt;br /&gt;
| 0x7000FA64&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_PKC_DISABLE|FUSE_PKC_DISABLE]]&lt;br /&gt;
| 0x7000FA68&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_COMMON&lt;br /&gt;
| 0x7000FA80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_DEBUG_AUTH_OVERRIDE&lt;br /&gt;
| 0x7000FA9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_8&lt;br /&gt;
| 0x7000FAD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SECURE_PROVISION_INDEX&lt;br /&gt;
| 0x7000FAE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_RESERVED_CALIB&lt;br /&gt;
| 0x7000FB04&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_TSENSOR_9&lt;br /&gt;
| 0x7000FB1C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_USB_CALIB_EXT&lt;br /&gt;
| 0x7000FB50&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_0&lt;br /&gt;
| 0x7000FB80&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_1&lt;br /&gt;
| 0x7000FB84&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_2&lt;br /&gt;
| 0x7000FB88&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_3&lt;br /&gt;
| 0x7000FB8C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_4&lt;br /&gt;
| 0x7000FB90&lt;br /&gt;
|-&lt;br /&gt;
| [[#FUSE_SPARE_BIT_5|FUSE_SPARE_BIT_5]]&lt;br /&gt;
| 0x7000FB94&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_6&lt;br /&gt;
| 0x7000FB98&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_7&lt;br /&gt;
| 0x7000FB9C&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_8&lt;br /&gt;
| 0x7000FBA0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_9&lt;br /&gt;
| 0x7000FBA4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_10&lt;br /&gt;
| 0x7000FBA8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_11&lt;br /&gt;
| 0x7000FBAC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_12&lt;br /&gt;
| 0x7000FBB0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_13&lt;br /&gt;
| 0x7000FBB4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_14&lt;br /&gt;
| 0x7000FBB8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_15&lt;br /&gt;
| 0x7000FBBC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_16&lt;br /&gt;
| 0x7000FBC0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_17&lt;br /&gt;
| 0x7000FBC4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_18&lt;br /&gt;
| 0x7000FBC8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_19&lt;br /&gt;
| 0x7000FBCC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_20&lt;br /&gt;
| 0x7000FBD0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_21&lt;br /&gt;
| 0x7000FBD4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_22&lt;br /&gt;
| 0x7000FBD8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_23&lt;br /&gt;
| 0x7000FBDC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_24&lt;br /&gt;
| 0x7000FBE0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_25&lt;br /&gt;
| 0x7000FBE4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_26&lt;br /&gt;
| 0x7000FBE8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_27&lt;br /&gt;
| 0x7000FBEC&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_28&lt;br /&gt;
| 0x7000FBF0&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_29&lt;br /&gt;
| 0x7000FBF4&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_30&lt;br /&gt;
| 0x7000FBF8&lt;br /&gt;
|-&lt;br /&gt;
| FUSE_SPARE_BIT_31&lt;br /&gt;
| 0x7000FBFC&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SKU_INFO ====&lt;br /&gt;
Stores the SKU ID (must be 0x83).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_FA ====&lt;br /&gt;
Stores failure analysis mode.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SOC_SPEEDO_1 ====&lt;br /&gt;
Stores the bootrom patch version.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM0 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM1 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM2 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-4&lt;br /&gt;
| [5.0.0+] Used as key generation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM3 ====&lt;br /&gt;
This appears to store an hardware ID.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM4 ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-1&lt;br /&gt;
| Unit type (3 = debug; 0 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown config (must be 1 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| [1.0.0-3.0.2] 3-5&lt;br /&gt;
[4.0.0+] 3-7&lt;br /&gt;
| DRAM id&lt;br /&gt;
|-&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown config mask (must be 0 on retail)&lt;br /&gt;
|-&lt;br /&gt;
| 9&lt;br /&gt;
| Unit type mask (0 = debug; 1 = retail)&lt;br /&gt;
|-&lt;br /&gt;
| 10&lt;br /&gt;
| [4.0.0+] Kiosk mode (0 = retail; 1 = kiosk)&lt;br /&gt;
|-&lt;br /&gt;
| 11&lt;br /&gt;
| [5.0.0+] SoC variant (0 = T210; 1 = T214)&lt;br /&gt;
|-&lt;br /&gt;
| 16-19&lt;br /&gt;
| [4.0.0+] New unit type&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores some device configuration parameters.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM6 ====&lt;br /&gt;
This register returns the value programmed into index 0x3A of the fuse array. &lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_ODM7 ====&lt;br /&gt;
This register returns the value programmed into index 0x3C of the fuse array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_SPARE_BIT_5 ====&lt;br /&gt;
Must be non-zero on retail units, otherwise the first bootloader panics.&lt;br /&gt;
On debug units it can be zero, which tells the bootloader to choose from two debug master key seeds. If set to non-zero on a debug unit, it tells the bootloader to choose from two retail master key seeds (only the last one matches the retail master key seed).&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PRIVATE_KEY ====&lt;br /&gt;
This stores the 160-bit private key (128 bit SBK + 32-bit device key).&lt;br /&gt;
Reads to these registers after the SBK is locked out produce all-FF output.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PUBLIC_KEY ====&lt;br /&gt;
This stores the SHA256 hash of the 2048-bit RSA key expected at BCT+0x210.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_RESERVED_SW ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bits&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0-2&lt;br /&gt;
| Boot device&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Skip device selection straps (0 = don&#039;t skip; 1 = skip)&lt;br /&gt;
|-&lt;br /&gt;
| 4&lt;br /&gt;
| ENABLE_CHARGER_DETECT&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| ENABLE_WATCHDOG&lt;br /&gt;
|-&lt;br /&gt;
| 6&lt;br /&gt;
| Forced RCM two button mode (0 = Only VOLUME_UP; 1 = VOLUME_UP + HOME)&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| RCM USB controller mode (0 = USB 2.0; 1 = XUSB)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This caches the value of the sw_reserved fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
==== FUSE_PKC_DISABLE ====&lt;br /&gt;
This caches the value of the pkc_disable fuse from the hardware array.&lt;br /&gt;
&lt;br /&gt;
== eFuses ==&lt;br /&gt;
The actual hardware fuses can be programmed through the fuse driver after enabling fuse programming.&lt;br /&gt;
&lt;br /&gt;
Below is a list of common fuse indexes used by Tegra devices (and applicable to the Switch).&lt;br /&gt;
Note that the indexes are relative to the start of the fuse array and each element is a 4 byte word. A single fuse write operation always writes the same word at both fuse_array + 0 (PRIMARY_ALIAS) and fuse_array + 1 (REDUNDANT_ALIAS).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Name&lt;br /&gt;
!  Index&lt;br /&gt;
!  Bits&lt;br /&gt;
|-&lt;br /&gt;
| jtag_disable&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_production_mode&lt;br /&gt;
| 0x00&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| odm_lock&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| public_key&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| secure_boot_key&lt;br /&gt;
| 0x22&lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| device_key&lt;br /&gt;
| 0x2A&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_cfg&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 16&lt;br /&gt;
|-&lt;br /&gt;
| sec_boot_dev_sel&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 3&lt;br /&gt;
|-&lt;br /&gt;
| sw_reserved&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 12&lt;br /&gt;
|-&lt;br /&gt;
| ignore_dev_sel_straps&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#odm_reserved|odm_reserved]]&lt;br /&gt;
| 0x2E&lt;br /&gt;
| 256&lt;br /&gt;
|-&lt;br /&gt;
| pkc_disable&lt;br /&gt;
| 0x52&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| [[#bootrom_ipatch|bootrom_ipatch]]&lt;br /&gt;
| 0x72&lt;br /&gt;
| 624&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== odm_reserved ===&lt;br /&gt;
The first bootloader only burns fuses in this region.&lt;br /&gt;
Both fuse indexes 0x3A (odm_reserved + 0x0C) and 0x3C (odm_reserved + 0x0E) are used for anti-downgrade control. These fuses will have their values cached into [[#FUSE_RESERVED_ODM6|FUSE_RESERVED_ODM6]] and [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]].&lt;br /&gt;
&lt;br /&gt;
=== bootrom_ipatch ===&lt;br /&gt;
Tegra210 based hardware such as the Switch provides support for bootrom patches. The patch data is burned to the hardware fuse array using a specific format (see [https://gist.github.com/shuffle2/f8728159da100e9df2606d43925de0af shuffle2&#039;s ipatch decoder]). The bootrom reads these fuses in order to initialize the IPATCH hardware, which allows overriding data returned for code and data fetches done by BPMP.&lt;br /&gt;
&lt;br /&gt;
The revision stored in FUSE_CP_REV indicates the unique set of values stored in ipatch fuses.&lt;br /&gt;
&lt;br /&gt;
The following represents the patch data dumped from a Switch console:&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
RAM:00000000 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000&lt;br /&gt;
RAM:00000000 irom_svc_dispatch&lt;br /&gt;
RAM:00000000   STMFD   SP!, {R0-R2}                  ; ipatches:&lt;br /&gt;
RAM:00000000                                         ;  0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:00000000                                         ;  1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:00000000                                         ;  2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000000                                         ;  3 7d9e2000     fb3c     2000 : movs r0, #0x00&lt;br /&gt;
RAM:00000000                                         ;  4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:00000000                                         ;  5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:00000000                                         ;  6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:00000000                                         ;  7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:00000000                                         ;  8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000000                                         ;  9 bba2ac57    17744     ac57 : data&lt;br /&gt;
RAM:00000000                                         ; 10 bbac3d19    17758     3d19 : data&lt;br /&gt;
RAM:00000000                                         ; 11 1e952001     3d2a     2001 : movs r0, #0x01&lt;br /&gt;
RAM:00000004   MOV     R2, LR&lt;br /&gt;
RAM:00000008   SUB     R2, R2, #2&lt;br /&gt;
RAM:0000000C   LDR     R2, [R2]&lt;br /&gt;
RAM:00000010   AND     R2, R2, #0xFF&lt;br /&gt;
RAM:00000014   MOV     R2, R2,LSL#1&lt;br /&gt;
RAM:00000018   LDR     R0, =0x1007B0&lt;br /&gt;
RAM:0000001C   LDR     R1, =0x1007F8&lt;br /&gt;
RAM:00000020   SUB     R1, R1, R0&lt;br /&gt;
RAM:00000024   LDR     R0, =0x40004C30&lt;br /&gt;
RAM:00000028   ADD     R0, R0, R1&lt;br /&gt;
RAM:0000002C   ADD     R2, R2, R0&lt;br /&gt;
RAM:00000030   ORR     R2, R2, #1&lt;br /&gt;
RAM:00000034   LDMFD   SP!, {R0,R1}&lt;br /&gt;
RAM:00000038   BX      R2&lt;br /&gt;
RAM:00000038 ; End of function irom_svc_dispatch&lt;br /&gt;
RAM:00000038&lt;br /&gt;
RAM:00000038 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000003C dword_3C DCD 0x1007B0                   ; DATA XREF: irom_svc_dispatch+18↑r&lt;br /&gt;
RAM:00000040 dword_40 DCD 0x1007F8                   ; DATA XREF: irom_svc_dispatch+1C↑r&lt;br /&gt;
RAM:00000044 dword_44 DCD 0x40004C30                 ; DATA XREF: irom_svc_dispatch+24↑r&lt;br /&gt;
RAM:00000048   CODE16&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048&lt;br /&gt;
RAM:00000048 sub_48&lt;br /&gt;
RAM:00000048   MOVS    R2, #0                        ; 0  b57df00     16ae     df00 : svc #0x00 (offset 0x48)&lt;br /&gt;
RAM:0000004A   MVNS    R2, R2&lt;br /&gt;
RAM:0000004C   LDR     R1, =0x60006410&lt;br /&gt;
RAM:0000004E   STR     R2, [R1,#0x30]&lt;br /&gt;
RAM:00000050   STR     R2, [R1,#0x38]&lt;br /&gt;
RAM:00000052   LDR     R1, =0x600060F8&lt;br /&gt;
RAM:00000054   STR     R2, [R1]&lt;br /&gt;
RAM:00000056   STR     R2, [R1,#4]&lt;br /&gt;
RAM:00000058   LDR     R1, =0x60006284&lt;br /&gt;
RAM:0000005A   STR     R2, [R1]&lt;br /&gt;
RAM:0000005C   STR     R2, [R1,#0x18]&lt;br /&gt;
RAM:0000005E   ADDS    R1, #0x80&lt;br /&gt;
RAM:00000060   ADDS    R1, #0x1C&lt;br /&gt;
RAM:00000062   STR     R2, [R1]&lt;br /&gt;
RAM:00000064   STR     R2, [R1,#8]&lt;br /&gt;
RAM:00000066   STR     R2, [R1,#0x10]&lt;br /&gt;
RAM:00000068   ADDS    R1, #0x80&lt;br /&gt;
RAM:0000006A   STR     R2, [R1]&lt;br /&gt;
RAM:0000006C   STR     R2, [R1,#4]&lt;br /&gt;
RAM:0000006E   LDR     R1, =0x60006554&lt;br /&gt;
RAM:00000070   STR     R2, [R1]&lt;br /&gt;
RAM:00000072   MOVS    R2, #0xA0000000&lt;br /&gt;
RAM:00000076   LDR     R1, =0x60006148&lt;br /&gt;
RAM:00000078   STR     R2, [R1]&lt;br /&gt;
RAM:0000007A   ADDS    R1, #0x38 ; &#039;8&#039;&lt;br /&gt;
RAM:0000007C   STR     R2, [R1]&lt;br /&gt;
RAM:0000007E   MOVS    R2, #0xE0000000&lt;br /&gt;
RAM:00000082   LDR     R1, =0x600066A0&lt;br /&gt;
RAM:00000084   STR     R2, [R1]&lt;br /&gt;
RAM:00000086   MOVS    R1, #0&lt;br /&gt;
RAM:00000088   MOVS    R0, #0xE&lt;br /&gt;
RAM:0000008A   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000008A ; End of function sub_48&lt;br /&gt;
RAM:0000008A&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C&lt;br /&gt;
RAM:0000008C sub_8C&lt;br /&gt;
RAM:0000008C   LDR     R0, [R1,#0x18]                ; 1 1820df22     3040     df22 : svc #0x22 (offset 0x8c)&lt;br /&gt;
RAM:0000008E   MOVS    R2, #1&lt;br /&gt;
RAM:00000090   ORRS    R0, R2&lt;br /&gt;
RAM:00000092   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:00000092 ; End of function sub_8C&lt;br /&gt;
RAM:00000092&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094&lt;br /&gt;
RAM:00000094 sub_94&lt;br /&gt;
RAM:00000094   LDR     R2, [R4,#0x50]                ; 2 3797df26     6f2e     df26 : svc #0x26 (offset 0x94)&lt;br /&gt;
RAM:00000096   ADDS    R2, R2, #2&lt;br /&gt;
RAM:00000098   STR     R2, [R4,#0x50]&lt;br /&gt;
RAM:0000009A   SUBS    R1, #0x80&lt;br /&gt;
RAM:0000009C   STR     R1, [R4,#0x34]&lt;br /&gt;
RAM:0000009E   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000009E ; End of function sub_94&lt;br /&gt;
RAM:0000009E&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 sub_A0&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0 ; FUNCTION CHUNK AT RAM:00000148 SIZE 00000004 BYTES&lt;br /&gt;
RAM:000000A0&lt;br /&gt;
RAM:000000A0   MOVS    R0, #0x70000000               ; 4  42bdf2c      856     df2c : svc #0x2c (offset 0xa0)&lt;br /&gt;
RAM:000000A4   LDR     R6, =dword_7000EF14&lt;br /&gt;
RAM:000000A6   LDR     R2, =dword_7000E5B4&lt;br /&gt;
RAM:000000A8   LDR     R2, [R2]&lt;br /&gt;
RAM:000000AA   CMP     R2, #0&lt;br /&gt;
RAM:000000AC   BEQ     loc_B4&lt;br /&gt;
RAM:000000AE   LDR     R2, [R6]&lt;br /&gt;
RAM:000000B0   STR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B2   B       loc_BC&lt;br /&gt;
RAM:000000B4 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:000000B4&lt;br /&gt;
RAM:000000B4 loc_B4                                  ; CODE XREF: sub_A0+C↑j&lt;br /&gt;
RAM:000000B4   LDR     R2, [R0,#8]&lt;br /&gt;
RAM:000000B6   LSRS    R0, R0, #0x12&lt;br /&gt;
RAM:000000B8   ORRS    R2, R0&lt;br /&gt;
RAM:000000BA   STR     R2, [R6]&lt;br /&gt;
RAM:000000BC&lt;br /&gt;
RAM:000000BC loc_BC                                  ; CODE XREF: sub_A0+12↑j&lt;br /&gt;
RAM:000000BC   LDR     R6, =dword_7000E9C0&lt;br /&gt;
RAM:000000BE   LDR     R0, [R6]&lt;br /&gt;
RAM:000000C0   MOVS    R2, #0x4000&lt;br /&gt;
RAM:000000C4   ORRS    R2, R0&lt;br /&gt;
RAM:000000C6   STR     R2, [R6]&lt;br /&gt;
RAM:000000C8   LDR     R0, [R5,#0x10]&lt;br /&gt;
RAM:000000CA   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000CA ; End of function sub_A0&lt;br /&gt;
RAM:000000CA&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC&lt;br /&gt;
RAM:000000CC sub_CC&lt;br /&gt;
RAM:000000CC   MOVS    R2, #0xF000000                ; 5 37aadf42     6f54     df42 : svc #0x42 (offset 0xcc)&lt;br /&gt;
RAM:000000D0   BICS    R1, R2&lt;br /&gt;
RAM:000000D2   STR     R1, [R4,#0x10]&lt;br /&gt;
RAM:000000D4   LDR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000D6   MOVS    R2, #7&lt;br /&gt;
RAM:000000D8   BICS    R1, R2&lt;br /&gt;
RAM:000000DA   STR     R1, [R4,#0x50]&lt;br /&gt;
RAM:000000DC   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000DC ; End of function sub_CC&lt;br /&gt;
RAM:000000DC&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE&lt;br /&gt;
RAM:000000DE sub_DE&lt;br /&gt;
RAM:000000DE   LDR     R2, =dword_7000FA9C           ; 6  972df4b     12e4     df4b : svc #0x4b (offset 0xde)&lt;br /&gt;
RAM:000000E0   LDR     R2, [R2]&lt;br /&gt;
RAM:000000E2   LSRS    R2, R2, #8&lt;br /&gt;
RAM:000000E4   LSLS    R2, R2, #1&lt;br /&gt;
RAM:000000E6   LDR     R1, [R4]&lt;br /&gt;
RAM:000000E8   BICS    R1, R2&lt;br /&gt;
RAM:000000EA   STR     R1, [R4]&lt;br /&gt;
RAM:000000EC   CMP     R0, #0&lt;br /&gt;
RAM:000000EE   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:000000EE ; End of function sub_DE&lt;br /&gt;
RAM:000000EE&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 sub_F0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0 arg_0=  0&lt;br /&gt;
RAM:000000F0&lt;br /&gt;
RAM:000000F0   LDR     R0, =0x400049F0               ; 7 2293df54     4526     df54 : svc #0x54 (offset 0xf0)&lt;br /&gt;
RAM:000000F2   LDR     R2, [R0]&lt;br /&gt;
RAM:000000F4   STR     R2, [SP,#arg_0]&lt;br /&gt;
RAM:000000F6   LDR     R0, =0x40010000&lt;br /&gt;
RAM:000000F8   LSRS    R2, R2, #17&lt;br /&gt;
RAM:000000FA   BEQ     pop_r2_mov_pc_lr              ; if ([0x400049F0] &amp;gt;&amp;gt; 17) == 0) {&lt;br /&gt;
RAM:000000FA                                         ;   r2 = [0x400049F0];&lt;br /&gt;
RAM:000000FA                                         ; } else {&lt;br /&gt;
RAM:000000FC   LDR     R0, =APBDEV_PMC_CNTRL_0&lt;br /&gt;
RAM:000000FE   STR     R4, [R0]                      ;  write APBDEV_PMC_CNTRL&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000100 loc_100                                 ; CODE XREF: sub_F0:loc_100↓j&lt;br /&gt;
RAM:00000100   B       loc_100                       ;  hang&lt;br /&gt;
RAM:00000100 ; End of function sub_F0                ; }&lt;br /&gt;
RAM:00000100&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 ; =============== S U B R O U T I N E =======================================&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 sub_102&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102 arg_0=  0&lt;br /&gt;
RAM:00000102&lt;br /&gt;
RAM:00000102   LDR     R2, =0x40010220               ; 8 21fadf5d     43f4     df5d : svc #0x5d (offset 0x102)&lt;br /&gt;
RAM:00000104   STR     R2, [SP,#arg_0]               ; set r2 retval = [0x40010220]&lt;br /&gt;
RAM:00000106   LDR     R2, [R2,#0x18]&lt;br /&gt;
RAM:00000108   ADDS    R0, #0xFC&lt;br /&gt;
RAM:0000010A   STR     R2, [R0,#0x1C]                ; [r0+0x118] = [0x40010220 + 0x18]&lt;br /&gt;
RAM:0000010C   B       pop_r2_mov_pc_lr&lt;br /&gt;
RAM:0000010C ; End of function sub_102&lt;br /&gt;
RAM:0000010C&lt;br /&gt;
RAM:0000010C ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:0000010E   DCB    0&lt;br /&gt;
RAM:0000010F   DCB    0&lt;br /&gt;
RAM:00000110 off_110 DCD 0x60006410                  ; DATA XREF: sub_48+4↑r&lt;br /&gt;
RAM:00000114 off_114 DCD 0x600060F8                  ; DATA XREF: sub_48+A↑r&lt;br /&gt;
RAM:00000118 off_118 DCD 0x60006284                  ; DATA XREF: sub_48+10↑r&lt;br /&gt;
RAM:0000011C off_11C DCD 0x60006554                  ; DATA XREF: sub_48+26↑r&lt;br /&gt;
RAM:00000120 off_120 DCD 0x60006148                  ; DATA XREF: sub_48+2E↑r&lt;br /&gt;
RAM:00000124 off_124 DCD 0x600066A0                  ; DATA XREF: sub_48+3A↑r&lt;br /&gt;
RAM:00000128 off_128 DCD dword_7000EF14              ; DATA XREF: sub_A0+4↑r&lt;br /&gt;
RAM:0000012C off_12C DCD dword_7000E5B4              ; DATA XREF: sub_A0+6↑r&lt;br /&gt;
RAM:00000130 off_130 DCD dword_7000E9C0              ; DATA XREF: sub_A0:loc_BC↑r&lt;br /&gt;
RAM:00000134 off_134 DCD dword_7000FA9C              ; DATA XREF: sub_DE↑r&lt;br /&gt;
RAM:00000138 off_138 DCD 0x400049F0                  ; DATA XREF: sub_F0↑r&lt;br /&gt;
RAM:0000013C dword_13C DCD 0x40010000                ; DATA XREF: sub_F0+6↑r&lt;br /&gt;
RAM:00000140 off_140 DCD APBDEV_PMC_CNTRL_0          ; DATA XREF: sub_F0+C↑r&lt;br /&gt;
RAM:00000144 off_144 DCD 0x40010220                  ; DATA XREF: sub_102↑r&lt;br /&gt;
RAM:00000148 ; ---------------------------------------------------------------------------&lt;br /&gt;
RAM:00000148 ; START OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
RAM:00000148&lt;br /&gt;
RAM:00000148 pop_r2_mov_pc_lr                        ; CODE XREF: sub_48+42↑j&lt;br /&gt;
RAM:00000148                                         ; sub_8C+6↑j ...&lt;br /&gt;
RAM:00000148   POP     {R2}&lt;br /&gt;
RAM:0000014A   MOV     PC, LR&lt;br /&gt;
RAM:0000014A ; END OF FUNCTION CHUNK FOR sub_A0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The last 4 patches are exclusive to the Switch, while the remaining ones are often included in most Tegra210 based devices.&lt;br /&gt;
&lt;br /&gt;
== Anti-downgrade ==&lt;br /&gt;
The first bootloader verifies [[#FUSE_RESERVED_ODM7|FUSE_RESERVED_ODM7]] to prevent downgrading.&lt;br /&gt;
How many fuses are expected to be burnt depends the device&#039;s unit type as below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! System version&lt;br /&gt;
! Expected number of burnt fuses (retail)&lt;br /&gt;
! Expected number of burnt fuses (non-retail)&lt;br /&gt;
|-&lt;br /&gt;
| 1.0.0&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 2.0.0-2.3.0&lt;br /&gt;
| 2&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.0&lt;br /&gt;
| 3&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3.0.1-3.0.2&lt;br /&gt;
| 4&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 4.0.0-4.1.0&lt;br /&gt;
| 5&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 5.0.0&lt;br /&gt;
| 6&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
If too many fuses are burnt the bootloader will panic immediately.&lt;br /&gt;
&lt;br /&gt;
If too few are burnt, the bootloader will enable fuse programming and write the expected value to fuse indexes 0x3A and 0x3C. Afterwards, fuse programming is disabled and the panic value 0x21 is written to PMC_SCRATCH200 register (0x7000EC40). Finally, the watchdog timer is initialized and programmed to force a reset.&lt;br /&gt;
&lt;br /&gt;
On a subsequent boot, after the anti-downgrade fuses are checked again, the PMC_RST_STATUS register (0x7000E5B4) is checked and if set to 0x01 (watchdog reset) the PMC_SCRATCH200 register (0x7000EC40) will be checked for the panic value 0x21.&lt;br /&gt;
PMC_RST_STATUS will only be set back to 0 (power on reset) if the fuse count matches the new expected value, otherwise the system will panic.&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3874</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3874"/>
		<updated>2018-02-25T21:50:36Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Channels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT reset || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || BT wake || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 1 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 0 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3861</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3861"/>
		<updated>2018-02-25T07:12:14Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 0x01 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x02 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x03 || 0x3C || H, 4 || BT reset || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x05 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x06 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x07 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x08 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x09 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0A || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0B || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0C || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0D || 0x05 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0E || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x0F || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || BT wake || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3854</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3854"/>
		<updated>2018-02-24T22:31:25Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || BT reset || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || BT wake || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3849</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3849"/>
		<updated>2018-02-24T16:35:02Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || BT reset || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || BT wake || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3848</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3848"/>
		<updated>2018-02-24T16:21:28Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || BT reset || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || Touchscreen irq (unused - polled instead) || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || BT wake || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3819</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3819"/>
		<updated>2018-02-21T03:23:03Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || BT reset || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || BT wake || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3818</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3818"/>
		<updated>2018-02-21T02:57:14Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* uart */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSession || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSessionForTest || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Port Mapping ===&lt;br /&gt;
OpenSession translates user IDs to to the uart port index.&lt;br /&gt;
&lt;br /&gt;
OpenSessionForTest takes the port index verbatim.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port || Usage&lt;br /&gt;
|-&lt;br /&gt;
| 1 || UART-D || Bluetooth&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UART-B || Joycon(R)&lt;br /&gt;
|-&lt;br /&gt;
| 3 || UART-C || Joycon(L)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3807</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3807"/>
		<updated>2018-02-20T13:31:13Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || bq24192 Charge Enable || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Fan enable (normal) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || max17050 irq || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || bq24192 irq || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || bm92t36 irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Fan enable (high power) || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || bq24192 OTG charge select || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3806</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3806"/>
		<updated>2018-02-20T09:18:27Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 5 || A, 5 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=USB_services&amp;diff=3798</id>
		<title>USB services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=USB_services&amp;diff=3798"/>
		<updated>2018-02-20T00:39:02Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Session */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One symbol in USB-sysmodule is: &amp;quot;vtable for nn::usb::detail::UsbComplexTegra21x&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= usb:ds =&lt;br /&gt;
This is &amp;quot;nn::usb::ds::IDsService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Used for Switch&amp;lt;&amp;gt;PC USB comms, aka Switch-as-device. This seems to only be usable in handheld-mode with the Switch directly connected to a host via an USB cable, not(?) in docked-mode.&lt;br /&gt;
This service is used during [[Factory Setup|factory setup]] by [[Manu Services|manu]].&lt;br /&gt;
&lt;br /&gt;
This service session is used as an IPC [[IPC_Marshalling|domain]] by [[Manu Services|manu]]. All of these {get-session} commands also return an output u8 and the u32 &amp;lt;[[IPC_Marshalling|domainID]]&amp;gt;, for using those sessions as domains.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#BindDevice]] || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#BindClientProcess]] || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetDsInterface]] || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetStateChangeEvent]] || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GetState]] || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [2.0.0+] [[#SetVidPidBcd]] || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Initialization done by [[Manu Services|manu]]:&lt;br /&gt;
* Initial service init:&lt;br /&gt;
** Get service/etc.&lt;br /&gt;
** Uses [[#BindDevice]].&lt;br /&gt;
** Uses [[#BindClientProcess]].&lt;br /&gt;
** Uses [[#GetStateChangeEvent]].&lt;br /&gt;
** Uses [[#SetVidPidBcd]].&lt;br /&gt;
* Interface init:&lt;br /&gt;
** Uses [[#GetDsInterface]], then uses commands from that with the rest of the following.&lt;br /&gt;
** Uses [[#GetSetupEvent]].&lt;br /&gt;
** Uses [[#GetCtrlInCompletionEvent]].&lt;br /&gt;
** Uses [[#GetCtrlOutCompletionEvent]].&lt;br /&gt;
* Initializes two endpoints via using [[#GetDsEndpoint]] twice.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
The following is the default USB config strings, while the usbds service isn&#039;t being used. All of the below configuration will reset to the defaults when all usbds-related sessions are closed. These can be set with [[#SetVidPidBcd]]. The default string for Product is loaded from [[Settings_services|settings]] config. The default is referred to by usb-sysmodule as &amp;quot;Dummy&amp;quot;.&lt;br /&gt;
  Product: Nintendo Switch&lt;br /&gt;
  Manufacturer: Nintendo&lt;br /&gt;
  SerialNumber: SerialNumber&lt;br /&gt;
&lt;br /&gt;
The following is the default &amp;lt;code&amp;gt;lsusb -v {...}&amp;lt;/code&amp;gt; output when the usbds service wasn&#039;t used.&lt;br /&gt;
&lt;br /&gt;
The endpoints are configured using [[#GetDsEndpoint]], the total number of endpoints is the number of open [[#IDsEndpoint]] sessions. bInterfaceNumber is {0-based index for the enabled [[#IDsInterface]] session.} Some of the interface fields are configured using [[#GetDsInterface]].&lt;br /&gt;
&lt;br /&gt;
Additional descriptors for use with interfaces and endpoints can&#039;t be configured with usbds, even though the former is used for the default HID interface. This seems to be the main(?) restriction with using usbds for Switch-as-arbitrary-devices. The device class fields can&#039;t be configured, interface class fields are set instead.&lt;br /&gt;
&lt;br /&gt;
When usbds is in use where [[#SetVidPidBcd]] wasn&#039;t used, the VID/PID is 057e:3000.&lt;br /&gt;
&lt;br /&gt;
  Bus 003 Device 006: ID 057e:2000 Nintendo Co., Ltd &lt;br /&gt;
  Couldn&#039;t open device, some information will be missing&lt;br /&gt;
  Device Descriptor:&lt;br /&gt;
    bLength                18&lt;br /&gt;
    bDescriptorType         1&lt;br /&gt;
    bcdUSB               2.00&lt;br /&gt;
    bDeviceClass            0 (Defined at Interface level)&lt;br /&gt;
    bDeviceSubClass         0 &lt;br /&gt;
    bDeviceProtocol         0 &lt;br /&gt;
    bMaxPacketSize0        64&lt;br /&gt;
    idVendor           0x057e Nintendo Co., Ltd&lt;br /&gt;
    idProduct          0x2000 &lt;br /&gt;
    bcdDevice            1.00&lt;br /&gt;
    iManufacturer           1 &lt;br /&gt;
    iProduct                2 &lt;br /&gt;
    iSerial                 3 &lt;br /&gt;
    bNumConfigurations      1&lt;br /&gt;
    Configuration Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         2&lt;br /&gt;
      wTotalLength           34&lt;br /&gt;
      bNumInterfaces          1&lt;br /&gt;
      bConfigurationValue     1&lt;br /&gt;
      iConfiguration          0 &lt;br /&gt;
      bmAttributes         0xc0&lt;br /&gt;
        Self Powered&lt;br /&gt;
      MaxPower              {...}&lt;br /&gt;
      Interface Descriptor:&lt;br /&gt;
        bLength                 9&lt;br /&gt;
        bDescriptorType         4&lt;br /&gt;
        bInterfaceNumber        0&lt;br /&gt;
        bAlternateSetting       0&lt;br /&gt;
        bNumEndpoints           1&lt;br /&gt;
        bInterfaceClass         3 Human Interface Device&lt;br /&gt;
        bInterfaceSubClass      0 No Subclass&lt;br /&gt;
        bInterfaceProtocol      0 None&lt;br /&gt;
        iInterface              0 &lt;br /&gt;
          HID Device Descriptor:&lt;br /&gt;
            bLength                 9&lt;br /&gt;
            bDescriptorType        33&lt;br /&gt;
            bcdHID               2.00&lt;br /&gt;
            bCountryCode            0 Not supported&lt;br /&gt;
            bNumDescriptors         1&lt;br /&gt;
            bDescriptorType        34 Report&lt;br /&gt;
            wDescriptorLength      26&lt;br /&gt;
           Report Descriptors: &lt;br /&gt;
             ** UNAVAILABLE **&lt;br /&gt;
        Endpoint Descriptor:&lt;br /&gt;
          bLength                 7&lt;br /&gt;
          bDescriptorType         5&lt;br /&gt;
          bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
          bmAttributes            3&lt;br /&gt;
            Transfer Type            Interrupt&lt;br /&gt;
            Synch Type               None&lt;br /&gt;
            Usage Type               Data&lt;br /&gt;
          wMaxPacketSize     0x0001  1x 1 bytes&lt;br /&gt;
          bInterval              16&lt;br /&gt;
&lt;br /&gt;
== BindDevice ==&lt;br /&gt;
Takes an u32 (&#039;&#039;&#039;complexId&#039;&#039;&#039;). [[Manu_Services|Manu]] sends 0x02.&lt;br /&gt;
&lt;br /&gt;
Binding more than once with the current session is not allowed. Once this command is used, the USB device will not be listed with &amp;lt;code&amp;gt;lsusb&amp;lt;/code&amp;gt; until [[#EnableInterface]] is used.&lt;br /&gt;
&lt;br /&gt;
Returns a not-found error when complexId isn&#039;t 0x02, for values 0x0-0x4 at least.&lt;br /&gt;
&lt;br /&gt;
== BindClientProcess ==&lt;br /&gt;
Takes 1 copy-handle for the current process (0xFFFF8001).&lt;br /&gt;
&lt;br /&gt;
== GetDsInterface ==&lt;br /&gt;
Takes 2 type-5 buffers and returns an [[#IDsInterface]]. [[Manu_Services|Manu]] sends a 0x09-byte command (e.g.: 0x09, 0x04, 0x04, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x00) in the first buffer and a string (&amp;quot;usb&amp;quot;) in the second buffer.&lt;br /&gt;
&lt;br /&gt;
When the strlen output for the second buffer is &amp;gt;=0x40, size 0x40 is used instead for copying the string. This is the interface name, it&#039;s not sent over USB.&lt;br /&gt;
&lt;br /&gt;
Returns an error when [[#BindDevice]] wasn&#039;t used.&lt;br /&gt;
&lt;br /&gt;
Up to 4 interfaces can be used+[[#EnableInterface|enabled]].&lt;br /&gt;
&lt;br /&gt;
Structure of the first buffer(this is the same as [http://libusb.sourceforge.net/api-1.0/structlibusb__interface__descriptor.html libusb__interface__descriptor]):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x1 || bLength. Must match 0x9.&lt;br /&gt;
|-&lt;br /&gt;
| 0x1 || 0x1 || bDescriptorType. Must match 0x4.&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x1 || bInterfaceNumber. When 0x4, the bInterfaceNumber is automatically allocated(error will be thrown if no space). Otherwise, it&#039;s used directly and must be &amp;lt;=3.&lt;br /&gt;
|-&lt;br /&gt;
| 0x3 || 0x1 || bAlternateSetting. Must match 0x0.&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x1 || bNumEndpoints. Ignored.&lt;br /&gt;
|-&lt;br /&gt;
| 0x5 || 0x1 || bInterfaceClass&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x1 || bInterfaceSubClass&lt;br /&gt;
|-&lt;br /&gt;
| 0x7 || 0x1 || bInterfaceProtocol&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || iInterface. Ignored.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Only the first 0x9-bytes are used.&lt;br /&gt;
&lt;br /&gt;
== GetStateChangeEvent ==&lt;br /&gt;
Returns an event handle for when the state returned by [[#GetState]] changes. Signalled when Switch&amp;lt;-&amp;gt;host USB comms change between started/stopped. USB cable connected/disconnected while at least 1 interface was enabled, or interface enabled/disabled while the USB cable was connected which then caused USB-comms state to change.&lt;br /&gt;
&lt;br /&gt;
== GetState ==&lt;br /&gt;
No input. Returns an output u32. Returns an error when [[#BindDevice]] wasn&#039;t used.&lt;br /&gt;
&lt;br /&gt;
Returns the current state. Values: &lt;br /&gt;
* 0: Initial state.&lt;br /&gt;
* 6: Device init starting.&lt;br /&gt;
* 3: {Initialization}, previous state is 6.&lt;br /&gt;
* 4: {Initialization}, previous state is 3.&lt;br /&gt;
* 5: Initialization done, data-transfer is now available.&lt;br /&gt;
&lt;br /&gt;
== SetVidPidBcd ==&lt;br /&gt;
Takes a type-5 buffer with 0x66 bytes of USB descriptor data (see [[Manu_Services#manu|manu]]).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x2 || VID (idVendor)&lt;br /&gt;
|-&lt;br /&gt;
| 0x2 || 0x2 || PID (idProduct)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x2 || bcdDevice&lt;br /&gt;
|-&lt;br /&gt;
| 0x6 || 0x20 || Manufacturer&lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x20 || Product&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x20 || SerialNumber&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The last 3 blocks are ASCII strings. The data following each string is all-zero, for padding to size 0x20.&lt;br /&gt;
&lt;br /&gt;
== IDsInterface ==&lt;br /&gt;
This is &amp;quot;nn::usb::ds::IDsInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetDsEndpoint]] || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#GetSetupEvent]] || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || || Takes a type-0x6 output buffer, no other output. Memcpys data to outbuf with outsize, uses size 0x8 if outsize is too large.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#EnableInterface]] || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#DisableInterface]] || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#CtrlInPostBufferAsync]] || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || [[#CtrlOutPostBufferAsync]] || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetCtrlInCompletionEvent]] || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || [[#GetCtrlInReportData]] || &lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#GetCtrlOutCompletionEvent]] || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#GetCtrlOutReportData]] || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#StallCtrl]] || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Commands cmd2, [[#CtrlInPostBufferAsync]], [[#CtrlOutPostBufferAsync]], and [[#StallCtrl]], will throw an error if the interface is not [[#EnableInterface|enabled]]. [[#GetDsEndpoint]] will throw an error if the interface is [[#EnableInterface|enabled]].&lt;br /&gt;
&lt;br /&gt;
=== GetDsEndpoint ===&lt;br /&gt;
Takes a type-5 buffer and returns an [[#IDsEndpoint]]. [[Manu_Services|Manu]] uses this twice for getting two endpoint sessions, with the following 0x7-byte buffer data:&lt;br /&gt;
* First endpoint: 0x07, 0x05, 0x80, 0x02, 0x00, 0x02, 0x00&lt;br /&gt;
** bLength=0x7&lt;br /&gt;
** bDescriptorType=LIBUSB_DT_ENDPOINT&lt;br /&gt;
** bEndpointAddress=LIBUSB_ENDPOINT_IN&lt;br /&gt;
** bmAttributes=LIBUSB_TRANSFER_TYPE_BULK&lt;br /&gt;
** wMaxPacketSize=0x200&lt;br /&gt;
** bInterval=0&lt;br /&gt;
* Second endpoint: Same as above except byte2 is 0x00(bEndpointAddress=LIBUSB_ENDPOINT_OUT).&lt;br /&gt;
&lt;br /&gt;
Each field is an u8, except for offset 0x4-0x5 which is an u16.&lt;br /&gt;
&lt;br /&gt;
This structure matches [http://libusb.sourceforge.net/api-1.0/structlibusb__endpoint__descriptor.html libusb_endpoint_descriptor], with audio-only-devices fields bRefresh and bSynchAddress removed.&lt;br /&gt;
&lt;br /&gt;
The buffer size must be &amp;gt;=0x7. Only the first 0x7-bytes from the buffer are used.&lt;br /&gt;
* Byte0(bLength) must match 0x7.&lt;br /&gt;
* Byte1(bDescriptorType) must match 0x5.&lt;br /&gt;
* Byte2(bEndpointAddress) is only compared with 0x80 to determine whether to use an input or output endpoint, the actual endpoint-number is allocated automatically by checking state. Hence, all input endpoints must use bEndpointAddress==0x80. Up to endpoint-number 0xF can be allocated for each endpoint-direction, for a total of 16 endpoints including control, and 15 for non-control endpoints([[#IDsEndpoint]] sessions for each direction). This matches the Tegra maximum.&lt;br /&gt;
&lt;br /&gt;
From the Tegra datasheet: &amp;quot;The maximum packet size supported on any endpoint is 1024 bytes in high-speed mode, for both device and host modes.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== GetSetupEvent ===&lt;br /&gt;
Returns an event handle. Unknown what triggers signalling, not signalled during interface-enable / device&amp;lt;&amp;gt;host USB-comms init.&lt;br /&gt;
&lt;br /&gt;
=== EnableInterface ===&lt;br /&gt;
Takes no arguments. Enables the current interface.&lt;br /&gt;
&lt;br /&gt;
Only one interface can be enabled at a time per bInterfaceNumber. When bInterfaceNumber is auto-allocate(0x4) for [[#GetDsEndpoint]] this isn&#039;t an issue since the final bInterfaceNumber will be unique.&lt;br /&gt;
&lt;br /&gt;
Once enabled, the device/interface can then actually be used over USB.&lt;br /&gt;
&lt;br /&gt;
=== DisableInterface ===&lt;br /&gt;
Takes no arguments. Disables the current interface.&lt;br /&gt;
&lt;br /&gt;
=== CtrlInPostBufferAsync ===&lt;br /&gt;
Same as [[#PostBufferAsync]](with same input/output), except this uses control input endpoint 0x80.&lt;br /&gt;
&lt;br /&gt;
=== CtrlOutPostBufferAsync ===&lt;br /&gt;
Same as [[#PostBufferAsync]](with same input/output), except this uses control output endpoint 0x00.&lt;br /&gt;
&lt;br /&gt;
=== GetCtrlInCompletionEvent ===&lt;br /&gt;
Returns an event handle for polling the completion of input control commands. Same as [[#GetCompletionEvent]], except this uses control input endpoint 0x80.&lt;br /&gt;
&lt;br /&gt;
=== GetCtrlInReportData ===&lt;br /&gt;
Same as [[#GetReportData]](with same input/output), except this uses control input endpoint 0x80.&lt;br /&gt;
&lt;br /&gt;
=== GetCtrlOutCompletionEvent ===&lt;br /&gt;
Returns an event handle for polling the completion of output control commands. Same as [[#GetCompletionEvent]], except this uses control output endpoint 0x00.&lt;br /&gt;
&lt;br /&gt;
=== GetCtrlOutReportData ===&lt;br /&gt;
Same as [[#GetReportData]](with same input/output), except this uses control output endpoint 0x00.&lt;br /&gt;
&lt;br /&gt;
=== StallCtrl ===&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Calls a function with both control endpoints(0x80 and 0x00) with the same function. From strings: &amp;quot;m_pProtocol-&amp;gt;Stall(0x80)&amp;quot; &amp;quot;m_pProtocol-&amp;gt;Stall(0x00)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== IDsEndpoint ===&lt;br /&gt;
This is &amp;quot;nn::usb::ds::IDsEndpoint&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#PostBufferAsync]] || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || || No input/output.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GetCompletionEvent]] || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#GetReportData]] || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#Stall]] || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || || Takes an input u8, no output.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== PostBufferAsync ====&lt;br /&gt;
Takes an u32 (&#039;&#039;&#039;size&#039;&#039;&#039;) and an u64 (&#039;&#039;&#039;buffer&#039;&#039;&#039;). Returns an output u32 (&#039;&#039;&#039;urbId&#039;&#039;&#039;). The output urbId can then be used while parsing the output of [[#GetReportData]], after waiting for the CompletionEvent to be signalled.&lt;br /&gt;
&lt;br /&gt;
The buffer address must be 0x1000-byte aligned. The input size doesn&#039;t matter.&lt;br /&gt;
&lt;br /&gt;
Used for data-transfer with input/output endpoints.&lt;br /&gt;
&lt;br /&gt;
The user-process must flush dcache for the buffer before using this command.&lt;br /&gt;
&lt;br /&gt;
When sending data where size is larger than wMaxPacketSize, it will automatically send multiple USB packets where last packet size = {remaining size}. Every {wMaxPacketSize}-bytes is a different packet. This only occurs in some cases. When &#039;&#039;&#039;size&#039;&#039;&#039; is ~0x1000000(exact size unknown), Switch-side silently hangs, while host-side will timeout(no traffic on USB bus indicating failure).&lt;br /&gt;
&lt;br /&gt;
For receiving data, if size is less than {actual received USB packet size} the rest of the packet will be discarded. Later PostBufferAsync cmd(s) will only return data from new packets, not the remainder of the earlier packet(s).&lt;br /&gt;
&lt;br /&gt;
==== GetCompletionEvent ====&lt;br /&gt;
No input. Returns an output event handle for polling the completion of [[#PostBufferAsync]], even when it finished via [[#Stall]].&lt;br /&gt;
&lt;br /&gt;
==== GetReportData ====&lt;br /&gt;
No input. Returns 0x84 bytes of report data from the endpoint. Seems to be eventually loaded from state, since this doesn&#039;t trigger any USB bus activity. All-zero before PostBufferAsync was used at least once.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x10*0x8(0x80) || 0x8 entries 0x10-bytes each for each report.&lt;br /&gt;
|-&lt;br /&gt;
| 0x80 || 0x4 || u32 report count&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Entry data:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x4 || u32 id (urbId from post-buffer commands)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4 || 0x4 || u32 requestedSize&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x4 || u32 transferredSize&lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x4 || u32 urb status, converted to error-codes. 0x3 = success, 0x4 = 0x828c, 0x5 = 0x748c. All other values are invalid.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Stall ====&lt;br /&gt;
No input/output.&lt;br /&gt;
&lt;br /&gt;
Calls the same function used by [[#StallCtrl]], except this uses the endpoint associated with the current session.&lt;br /&gt;
&lt;br /&gt;
Stops in-progress data-transfer done by [[#PostBufferAsync]].&lt;br /&gt;
&lt;br /&gt;
= usb:hs =&lt;br /&gt;
This is &amp;quot;nn::usb::hs::IClientRootSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
General USB devices usage, used by hid-sysmodule and bsdsockets-sysmodule.&lt;br /&gt;
&lt;br /&gt;
= usb:pd =&lt;br /&gt;
This is &amp;quot;nn::usb::pd::detail::IPdManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Only system-titles with access to this are [[PTM_services|PTM]] and [[AM_services|AM]].&lt;br /&gt;
&lt;br /&gt;
= usb:pd:c =&lt;br /&gt;
This is &amp;quot;nn::usb::pd::detail::IPdCradleManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
USB-sysmodule symbols for this refer to &amp;quot;Cradle&amp;quot;, which is the [[Dock]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||  || Returns a session handle for the below.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Session ==&lt;br /&gt;
This is &amp;quot;nn::usb::pd::detail::IPdCradleSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || VdmUserWrite || Input { u32 value; u32 VdmUserId; }. Output {}.&lt;br /&gt;
If Cradle or RelayBox is connected, issues given VDM with value.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || VdmUserRead || Input { u32 VdmUserId; }. Output { u32 value; }.&lt;br /&gt;
If Cradle or RelayBox is connected, returns u32 response from issuing given VDM.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Vdm20Init || No input/output.&lt;br /&gt;
If Cradle or RelayBox is connected, caches result of VDM 0x20.&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetFwType || No input. Returns an output u16.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetFwRevision || No input. Returns an output u16.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetManufacturerId || No input. Returns an output u16.&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetDeviceId || No input. Returns an output u16.&lt;br /&gt;
|}&lt;br /&gt;
Note: The VdmUserId given to VdmUserRead/VdmUserWrite is translated from the given (enum) value to the actual cmd to send.&lt;br /&gt;
&lt;br /&gt;
= usb:pm =&lt;br /&gt;
This is &amp;quot;nn::usb::pm::IPmService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Presumably Power Management, only system-title using this is [[PTM_services|PTM]].&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=3753</id>
		<title>SPL services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=SPL_services&amp;diff=3753"/>
		<updated>2018-02-17T18:44:57Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* GetConfig */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= csrng =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IRandomInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetRandomBytes]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetRandomBytes ==&lt;br /&gt;
Takes a type-6 buffer and fills it with random data. Same command for &amp;quot;spl:&amp;quot; and &amp;quot;csrng&amp;quot; services.&lt;br /&gt;
&lt;br /&gt;
= spl: =&lt;br /&gt;
This is &amp;quot;nn::spl::detail::IGeneralInterface&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Where previously only one AES engine was utilized, there is now support for 4 of them.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] When the session closes, all AES engines that were locked are automatically unlocked.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetConfig]] || Wrapper for [[SMC#GetConfig|GetConfig SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#UserExpMod]] || Speculative name. Wrapper for [[SMC#ExpMod|ExpMod SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#GenerateAesKek]] || Wrapper for [[SMC#GenerateAesKek|GenerateAesKek SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || [[#LoadAesKey]] || Wrapper for [[SMC#LoadAesKey|LoadAesKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || [[#GenerateAesKey]] || Decrypts 0x10 bytes using AES ECB and uses [[SMC#LoadAesKey|LoadAesKey SMC]] with a fixed Y.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || [[#SetConfig]] || Wrapper for [[SMC#SetConfig|SetConfig SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 7 || [[#GetRandomBytes]] || Uses [[SMC#GetRandomBytes|GetRandomBytes SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 9 || [[#DecryptImportPrivkForRsaOaep]] || Speculative name. Wrapper for [[SMC#LoadRsaPublicKey|LoadRsaPublicKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 10 || [[#DecryptRsaOaep]] || Speculative name. Uses [[SMC#PublicRsa|PublicRsa SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 11 || [[#IsDevelopment]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || [[#GenerateSpecificAesKey]] || Wrapper for [[SMC#GenerateSpecificAesKey|GenerateSpecificAesKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 13 || [[#DecryptPrivk]] || Speculative name. Wrapper for [[SMC#PrivateRsa|PrivateRsa SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 14 || [[#DecryptAesKey]] || Decrypts 0x10 bytes using AES ECB and uses [[SMC#LoadAesKey|LoadAesKey SMC]] with fixed X and Y.&lt;br /&gt;
|-&lt;br /&gt;
| 15 || [[#DecryptAesCtr]] || Wrapper for [[SMC#CryptAes|CryptAes SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 16 || [[#ComputeCmac]] || Wrapper for [[SMC#ComputeCmac|ComputeCmac SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 17 || [[#DecryptImportPrivkForExpMod1]] || Speculative name. Wrapper for [[SMC#LoadRsaPrivateKey|LoadRsaPrivateKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 18 || [[#UnwrapRsaWrappedTitleKey ]] || Speculative name. Wrapper for [[SMC#UnwrapRsaWrappedTitleKey|UnwrapRsaWrappedTitleKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 19 || [[#LoadTitleKey]] || Wrapper for [[SMC#LoadTitleKey|LoadTitleKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 20 || [2.0.0+] [[#UnwrapAesWrappedTitleKey ]] || Wrapper for [[SMC#UnwrapAesWrappedTitleKey|UnwrapAesWrappedTitleKey SMC]].&lt;br /&gt;
|-&lt;br /&gt;
| 21 || [2.0.0+] [[#LockAesEngine]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || [2.0.0+] [[#UnlockAesEngine]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || [2.0.0+] [[#GetSplWaitEvent]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || [3.0.0+] [[#SetSharedData]] ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || [3.0.0+] [[#GetSharedData]] ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GetConfig ==&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;ConfigItem&#039;&#039;&#039;), and returns a u64 (&#039;&#039;&#039;ConfigVal&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ConfigItem || Name&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DisableProgramVerification&lt;br /&gt;
|-&lt;br /&gt;
| 2 || MemoryConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SecurityEngineIRQNumber&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Returns 0x02?&lt;br /&gt;
|-&lt;br /&gt;
| 5 || HardwareType (0=Icosa (nx-abca2), 1=Copper (nx-abcb))&lt;br /&gt;
|-&lt;br /&gt;
| 6 || IsRetail&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsRecoveryBoot&lt;br /&gt;
|-&lt;br /&gt;
| 8 || DeviceId (byte7 clear)&lt;br /&gt;
|-&lt;br /&gt;
| 9 || BootReason&lt;br /&gt;
|-&lt;br /&gt;
| 10 || MemoryArrange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || IsDebugMode&lt;br /&gt;
|-&lt;br /&gt;
| 12 || KernelMemoryConfiguration&lt;br /&gt;
|-&lt;br /&gt;
| 13 || BatteryProfile&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Process Manager services|PM]] checks id1 and if non-zero, calls fsp-pr SetEnabledProgramVerification(false).&lt;br /&gt;
&lt;br /&gt;
[[PCV_services|PCV]] configures memory profiles based on id2.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Platform&lt;br /&gt;
!  Version @ 40800&lt;br /&gt;
!  Revision&lt;br /&gt;
!  id2&lt;br /&gt;
|-&lt;br /&gt;
|  jetson-tx1&lt;br /&gt;
|  11_40800_01_V9.8.3_V1.6&lt;br /&gt;
|  N/A&lt;br /&gt;
|  N/A&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abcb&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.4_V1.6&lt;br /&gt;
|  0&lt;br /&gt;
|  0&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|  0&lt;br /&gt;
|  0 or 3&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|  1&lt;br /&gt;
|  4&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|  2&lt;br /&gt;
|  1&lt;br /&gt;
|-&lt;br /&gt;
|  nx-abca2&lt;br /&gt;
|  10_40800_NoCfgVersion_V9.8.7_V1.6&lt;br /&gt;
|  3&lt;br /&gt;
|  2&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Hardware Types ===&lt;br /&gt;
&lt;br /&gt;
nx-abcb is the SDEV unit. Among other differences, this has extra hardware to support HDMI output.&lt;br /&gt;
&lt;br /&gt;
nx-abca2 hardware types are variations of the retail form factor.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;br /&gt;
&lt;br /&gt;
SPL uses id3 for setting up the security engine IRQ.&lt;br /&gt;
&lt;br /&gt;
[[NIM_services|NIM]] checks that id8 output must match the [[Settings_services|set:cal]] DeviceId with byte7 cleared, otherwise panic.&lt;br /&gt;
&lt;br /&gt;
[3.0.0+] [[Loader services|RO]] checks id11, if set then skipping NRR rsa signatures is allowed.&lt;br /&gt;
&lt;br /&gt;
Kernel uses id11 to determine behavior of svcBreak positive arguments. It will break instead of just force-exiting the process which is what happens on retail. [2.0.0+] This is also used with certain debug [[SVC|SVCs]].&lt;br /&gt;
&lt;br /&gt;
Kernel reads id12 when setting up memory-related code. If bit0 is set, it will memset various allocated memory-regions with 0x58, 0x59, 0x5A (&#039;X&#039;, &#039;Y&#039;, &#039;Z&#039;) instead of zero. This allows Nintendo devs to find uninitialized memory bugs. If bit17-16 is 0b01, the kernel assumes 6GB of DRAM instead of 4GB.&lt;br /&gt;
&lt;br /&gt;
== UserExpMod ==&lt;br /&gt;
Takes one type-10 (C descriptor) buffer (&#039;&#039;&#039;data_out_buf&#039;&#039;&#039;) and 3 type-9 (X descriptor) buffers (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;, &#039;&#039;&#039;exp_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Performs asymmetric crypto with user supplied modulus and exponent.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKek ==&lt;br /&gt;
Takes a 16-byte EKS (&#039;&#039;&#039;Encryption Key Source&#039;&#039;&#039;) and two words (&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; and &#039;&#039;&#039;option&#039;&#039;&#039;) as input.&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; ranges from 0 to 2.&lt;br /&gt;
&lt;br /&gt;
Returns a scrambled sealed KEK (&#039;&#039;&#039;Key Encryption Key&#039;&#039;&#039; used as &#039;&#039;&#039;key_x&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== LoadAesKey ==&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;keyslot&#039;&#039;&#039;) and two 16-byte keys (&#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Sets the specified &#039;&#039;&#039;keyslot&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Now verifies that the engine in use (0..3) is locked/owned by the current spl session, otherwise errors with 0xD21A. Previously engine was hardcoded to 0.&lt;br /&gt;
&lt;br /&gt;
== GenerateAesKey ==&lt;br /&gt;
Takes a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;) and a 16-byte encrypted key (&#039;&#039;&#039;enc_key&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Generates a new key by decrypting &#039;&#039;&#039;enc_key&#039;&#039;&#039; with a key generated from the supplied &#039;&#039;&#039;key_x&#039;&#039;&#039; and a fixed &#039;&#039;&#039;key_y&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Previously, it always used engine 0. Now it tries to allocate an engine to be used and returns 0xD01A if they&#039;re all busy. When the command is done, the engine is released.&lt;br /&gt;
&lt;br /&gt;
== SetConfig ==&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;ConfigItem&#039;&#039;&#039;) and a u64 (&#039;&#039;&#039;ConfigVal&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ConfigItem || Name&lt;br /&gt;
|-&lt;br /&gt;
| 13 || BatteryProfile&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Any other &#039;&#039;&#039;ConfigItem&#039;&#039;&#039;, besides 13, can&#039;t be set.&lt;br /&gt;
&lt;br /&gt;
== DecryptImportPrivkForRsaOaep ==&lt;br /&gt;
Takes one type-9 (X descriptor) buffer (&#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039;), a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;), a 16-byte key (&#039;&#039;&#039;key_y&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;version&#039;&#039;&#039;).&lt;br /&gt;
&#039;&#039;&#039;version&#039;&#039;&#039; is 0 for normal keys or 1 for extended keys.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
== DecryptRsaOaep ==&lt;br /&gt;
Takes one type-10 (C descriptor) buffer (&#039;&#039;&#039;data_out_buf&#039;&#039;&#039;) and 3 type-9 (X descriptor) buffers (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;, &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;label_hash_in_buf&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;data_in_buf&#039;&#039;&#039; into &#039;&#039;&#039;data_out_buf&#039;&#039;&#039; using the private key imported with [[#DecryptImportPrivkForRsaOaep]] and the supplied &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039;. Afterwards, verifies RSA-OAEP encoding using &#039;&#039;&#039;label_hash_in_buf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Returns an u32 (&#039;&#039;&#039;dec_data_size&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== IsDevelopment ==&lt;br /&gt;
No input params.&lt;br /&gt;
&lt;br /&gt;
Uses [[#GetConfig]] internally with id=6. Returns true if output from that is 0, or if the SMC returned error 2.&lt;br /&gt;
&lt;br /&gt;
Returns an u8 flag for whether the system is devunit. Output flag is 0 on retail.&lt;br /&gt;
&lt;br /&gt;
== GenerateSpecificAesKey ==&lt;br /&gt;
Takes a 16-byte seed (&#039;&#039;&#039;key_seed&#039;&#039;&#039;) and two words (&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; and &#039;&#039;&#039;option&#039;&#039;&#039;) as input.&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; ranges from 0 to 2.&lt;br /&gt;
&lt;br /&gt;
Returns a scrambled key (&#039;&#039;&#039;key_a&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== DecryptPrivk ==&lt;br /&gt;
Takes one type-10 (C descriptor) buffer (&#039;&#039;&#039;dec_privk_out_buf&#039;&#039;&#039;), one type-9 (X descriptor) buffer (&#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039;), a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;), a 16-byte key (&#039;&#039;&#039;key_y&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;version&#039;&#039;&#039;).&lt;br /&gt;
&#039;&#039;&#039;version&#039;&#039;&#039; is 0 for normal keys or 1 for extended keys.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039; into &#039;&#039;&#039;dec_privk_out_buf&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Used by [[SSL_services|SSL]]-sysmodule for TLS client-privk.&lt;br /&gt;
&lt;br /&gt;
== DecryptAesKey ==&lt;br /&gt;
Takes a 16-byte encrypted key (&#039;&#039;&#039;enc_key&#039;&#039;&#039;) and two words (&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; and &#039;&#039;&#039;option&#039;&#039;&#039;) as input.&lt;br /&gt;
&#039;&#039;&#039;KeyGeneration&#039;&#039;&#039; ranges from 0 to 2.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;enc_key&#039;&#039;&#039; with a key generated from fixed &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039; and returns a 16-byte decrypted key (&#039;&#039;&#039;dec_key&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Introduced same engine allocation code as for [[#GenerateAesKey]].&lt;br /&gt;
&lt;br /&gt;
== DecryptAesCtr ==&lt;br /&gt;
Takes a type-0x46 (B descriptor) buffer (&#039;&#039;&#039;data_out_buf&#039;&#039;&#039;), a u32 (&#039;&#039;&#039;keyslot&#039;&#039;&#039;), a type-0x45 (A descriptor) buffer (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;) and a 16-byte CTR (&#039;&#039;&#039;aes_ctr&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;data_in_buf&#039;&#039;&#039; into &#039;&#039;&#039;data_out_buf&#039;&#039;&#039; using the key set in the specified &#039;&#039;&#039;keyslot&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the engine is locked by current session.&lt;br /&gt;
&lt;br /&gt;
== ComputeCmac ==&lt;br /&gt;
Takes one type-9 (X descriptor) buffer (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;type?&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Returns a 16-byte CMAC calculated over &#039;&#039;&#039;data_in_buf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the engine is locked by current session.&lt;br /&gt;
&lt;br /&gt;
== DecryptImportPrivkForExpMod1 ==&lt;br /&gt;
Takes one type-9 (X descriptor) buffer (&#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039;), a 16-byte KEK (&#039;&#039;&#039;key_x&#039;&#039;&#039;), a 16-byte key (&#039;&#039;&#039;key_y&#039;&#039;&#039;) and a u32 (&#039;&#039;&#039;version&#039;&#039;&#039;).&lt;br /&gt;
&#039;&#039;&#039;version&#039;&#039;&#039; is 0 for normal keys or 1 for extended keys.&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;enc_privk_in_buf&#039;&#039;&#039; with a key generated from &#039;&#039;&#039;key_x&#039;&#039;&#039; and &#039;&#039;&#039;key_y&#039;&#039;&#039; and imports it for later usage.&lt;br /&gt;
&lt;br /&gt;
== UnwrapRsaWrappedTitleKey ==&lt;br /&gt;
Takes 3 type-9 (X descriptor) buffers (&#039;&#039;&#039;data_in_buf&#039;&#039;&#039;, &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;param0_in_buf&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Decrypts &#039;&#039;&#039;data_in_buf&#039;&#039;&#039; using the private key imported with [[#DecryptImportPrivkForExpMod1]] and the supplied &#039;&#039;&#039;mod_in_buf&#039;&#039;&#039; and &#039;&#039;&#039;param0_in_buf&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Generates and returns a 16-byte sealed titlekey.&lt;br /&gt;
&lt;br /&gt;
== LoadTitleKey ==&lt;br /&gt;
Takes a u32 (&#039;&#039;&#039;keyslot&#039;&#039;&#039;) and a 16-byte sealed titlekey.&lt;br /&gt;
&lt;br /&gt;
Sets the specified &#039;&#039;&#039;keyslot&#039;&#039;&#039; with the titlekey.&lt;br /&gt;
&lt;br /&gt;
[2.0.0+] Verifies the engine is locked by current session.&lt;br /&gt;
&lt;br /&gt;
== UnwrapAesWrappedTitleKey ==&lt;br /&gt;
Takes a 16-byte EKS (&#039;&#039;&#039;Encryption Key Source&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Returns a sealed titlekey.&lt;br /&gt;
&lt;br /&gt;
== LockAesEngine ==&lt;br /&gt;
Returns the id of the engine that was locked, or 0xD01A if all engines are busy. You need to lock an engine before using AES functions.&lt;br /&gt;
&lt;br /&gt;
== UnlockAesEngine ==&lt;br /&gt;
Takes a single u32 and unlocks the engine with that id. It must be owned by current session otherwise 0xD21A will be returned.&lt;br /&gt;
&lt;br /&gt;
== GetSplWaitEvent ==&lt;br /&gt;
Returns an event handle for synchronizing with the locked AES engine.&lt;br /&gt;
&lt;br /&gt;
== SetSharedData ==&lt;br /&gt;
Sets a static dword in spl .bss to the user input u32.&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] returns 0xD41A if a value has been previously set without being [[#GetSharedData|gotten]].&lt;br /&gt;
&lt;br /&gt;
== GetSharedData ==&lt;br /&gt;
Returns the static dword in spl .bss that can be set via [[#SetSharedData]].&lt;br /&gt;
&lt;br /&gt;
[4.0.0+] returns 0xD61A if a value has not previously been set, and unsets the value after getting it.&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Dock&amp;diff=3745</id>
		<title>Dock</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Dock&amp;diff=3745"/>
		<updated>2018-02-13T02:07:58Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Components */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The Dock is internally called &amp;quot;Cradle&amp;quot;(strings/symbols in system-titles).&lt;br /&gt;
&lt;br /&gt;
== Components ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Function || Component || Notes&lt;br /&gt;
|-&lt;br /&gt;
| MyDP -&amp;gt; HDMI Converter || MegaChips STDP2550 &amp;quot;Mystique&amp;quot; || 2Mb flash contains firmware &amp;lt;br&amp;gt; Based on STMicroelectronics Mystique family of DP converters.&lt;br /&gt;
|-&lt;br /&gt;
| USB Hub || VIA Labs VL210 USB 3.0 Hub Controller || 512Kb flash is configuration storage&lt;br /&gt;
|-&lt;br /&gt;
| USB Device || Cortex-M0 based (STM32F0-ish)&amp;lt;br&amp;gt;&amp;quot;32P048&amp;quot;&lt;br /&gt;
| SWD clearly labelled and enabled&amp;lt;br&amp;gt;Provides control of the Mystique&amp;lt;br&amp;gt;Dumps (fw-1.0.0):&amp;lt;br&amp;gt;[[:File:Dock.stm.08000000-08008000.bin|flash]]&amp;lt;br&amp;gt;[[:File:Dock.stm.1fffc400-1ffffc00.bin|sysmem]]&amp;lt;br&amp;gt;[[:File:Dock.stm.20000000-20001800.bin|SRAM]]&amp;lt;br&amp;gt;[http://www.st.com/content/ccc/resource/technical/document/reference_manual/c2/f8/8a/f2/18/e6/43/96/DM00031936.pdf/files/DM00031936.pdf/jcr:content/translations/en.DM00031936.pdf Relevant manual]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | Flash &lt;br /&gt;
| Macronix MX25L512E 512Kb CMOS || [[:File:Dock.512K.bin|dump (fw-1.0.0)]]&lt;br /&gt;
|-&lt;br /&gt;
| Macronix MX25V2006E 2Mb CMOS || [[:File:Dock.2M.bin|dump (fw-1.0.0)]]&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;2&amp;quot; | USB-PD&lt;br /&gt;
| ROHM BM92T17 || rowspan=&amp;quot;2&amp;quot; | One at i2c addr 0x18, the other at 0x1a&amp;lt;br&amp;gt;[http://www.rohm.com/web/global/datasheet/BM92T10MWV/bm92t10mwv-e bm92t1x datasheet]&amp;lt;br&amp;gt;[http://www.rohm.com/web/global/datasheet/BM92T50MWV/bm92t50mwv-e bm92t5x datasheet]&lt;br /&gt;
|-&lt;br /&gt;
| ROHM BM92T55&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Other Resources==&lt;br /&gt;
# [[List of compatible USB devices]]&lt;br /&gt;
# [https://www.ifixit.com/Teardown/Nintendo+Switch+Teardown/78263 iFixit&#039;s Nintendo Switch teardown]&lt;br /&gt;
# [https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering dekuNukem&#039;s Reverse Engineering]&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3744</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3744"/>
		<updated>2018-02-13T02:04:20Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || USB-PD controller (rohm bm92t36) || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3743</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3743"/>
		<updated>2018-02-12T22:40:25Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This table is believed to be complete - entries with empty &amp;quot;Used by&amp;quot; column haven&#039;t been seen being used (devices not present on switch?).&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3742</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3742"/>
		<updated>2018-02-12T22:37:20Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || duplicate, unused entry? ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || Audio codec (rt5639) || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 25 || 3:54 || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 26 || 3:3a || N || 100000 || 0 ||       0 || DisplayHdmiHotplugHandler || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3741</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3741"/>
		<updated>2018-02-12T21:58:53Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || -- unknown why this is duplicated -- ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || rohm ambient light sensor (bh1730fvc) || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3740</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3740"/>
		<updated>2018-02-12T21:36:31Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || -- unknown why this is duplicated -- ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq24192) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3739</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3739"/>
		<updated>2018-02-12T21:24:49Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || -- unknown why this is duplicated -- ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq2419x) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]], [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3738</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3738"/>
		<updated>2018-02-12T21:23:47Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || STM touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || TI Temperature Sensor (tmp451) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || -- unknown why this is duplicated -- ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || TI Charger (bq2419x) || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge (max17050) || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=HID_services&amp;diff=3727</id>
		<title>HID services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=HID_services&amp;diff=3727"/>
		<updated>2018-02-11T21:55:00Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* RomFS */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See [[HID_Shared_Memory|here]] for the HID shared-memory.&lt;br /&gt;
&lt;br /&gt;
= hid =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#CreateAppletResource]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || ActivateDebugPad&lt;br /&gt;
|-&lt;br /&gt;
| 11 || ActivateTouchScreen&lt;br /&gt;
|-&lt;br /&gt;
| 21 || ActivateMouse&lt;br /&gt;
|-&lt;br /&gt;
| 31 || ActivateKeyboard&lt;br /&gt;
|-&lt;br /&gt;
| 40 || AcquireXpadIdEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 41 || ReleaseXpadIdEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 51 || ActivateXpad&lt;br /&gt;
|-&lt;br /&gt;
| 55 || GetXpadIds&lt;br /&gt;
|-&lt;br /&gt;
| 56 || ActivateJoyXpad&lt;br /&gt;
|-&lt;br /&gt;
| 58 || GetJoyXpadLifoHandle&lt;br /&gt;
|-&lt;br /&gt;
| 59 || GetJoyXpadIds&lt;br /&gt;
|-&lt;br /&gt;
| 60 || ActivateSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DeactivateSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 62 || GetSixAxisSensorLifoHandle&lt;br /&gt;
|-&lt;br /&gt;
| 63 || ActivateJoySixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 64 || DeactivateJoySixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 65 || GetJoySixAxisSensorLifoHandle&lt;br /&gt;
|-&lt;br /&gt;
| 66 || StartSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 67 || StopSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 68 || IsSixAxisSensorFusionEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 69 || EnableSixAxisSensorFusion&lt;br /&gt;
|-&lt;br /&gt;
| 70 || SetSixAxisSensorFusionParameters&lt;br /&gt;
|-&lt;br /&gt;
| 71 || GetSixAxisSensorFusionParameters&lt;br /&gt;
|-&lt;br /&gt;
| 72 || ResetSixAxisSensorFusionParameters&lt;br /&gt;
|-&lt;br /&gt;
| 73 || SetAccelerometerParameters&lt;br /&gt;
|-&lt;br /&gt;
| 74 || GetAccelerometerParameters&lt;br /&gt;
|-&lt;br /&gt;
| 75 || ResetAccelerometerParameters&lt;br /&gt;
|-&lt;br /&gt;
| 76 || SetAccelerometerPlayMode&lt;br /&gt;
|-&lt;br /&gt;
| 77 || GetAccelerometerPlayMode&lt;br /&gt;
|-&lt;br /&gt;
| 78 || ResetAccelerometerPlayMode&lt;br /&gt;
|-&lt;br /&gt;
| 79 || SetGyroscopeZeroDriftMode&lt;br /&gt;
|-&lt;br /&gt;
| 80 || GetGyroscopeZeroDriftMode&lt;br /&gt;
|-&lt;br /&gt;
| 81 || ResetGyroscopeZeroDriftMode&lt;br /&gt;
|-&lt;br /&gt;
| 82 || IsSixAxisSensorAtRest&lt;br /&gt;
|-&lt;br /&gt;
| 91 || ActivateGesture&lt;br /&gt;
|-&lt;br /&gt;
| 100 || SetSupportedNpadStyleSet&lt;br /&gt;
|-&lt;br /&gt;
| 101 || GetSupportedNpadStyleSet&lt;br /&gt;
|-&lt;br /&gt;
| 102 || SetSupportedNpadIdType&lt;br /&gt;
|-&lt;br /&gt;
| 103 || ActivateNpad&lt;br /&gt;
|-&lt;br /&gt;
| 104 || DeactivateNpad&lt;br /&gt;
|-&lt;br /&gt;
| 106 || AcquireNpadStyleSetUpdateEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 107 || DisconnectNpad&lt;br /&gt;
|-&lt;br /&gt;
| 108 || GetPlayerLedPattern&lt;br /&gt;
|-&lt;br /&gt;
| 120 || SetNpadJoyHoldType&lt;br /&gt;
|-&lt;br /&gt;
| 121 || GetNpadJoyHoldType&lt;br /&gt;
|-&lt;br /&gt;
| 122 || SetNpadJoyAssignmentModeSingleByDefault&lt;br /&gt;
|-&lt;br /&gt;
| 123 || SetNpadJoyAssignmentModeSingle&lt;br /&gt;
|-&lt;br /&gt;
| 124 || [[#SetNpadJoyAssignmentModeDual]]&lt;br /&gt;
|-&lt;br /&gt;
| 125 || MergeSingleJoyAsDualJoy&lt;br /&gt;
|-&lt;br /&gt;
| 126 || StartLrAssignmentMode&lt;br /&gt;
|-&lt;br /&gt;
| 127 || StopLrAssignmentMode&lt;br /&gt;
|-&lt;br /&gt;
| 128 || SetNpadHandheldActivationMode&lt;br /&gt;
|-&lt;br /&gt;
| 129 || [[#GetNpadHandheldActivationMode]]&lt;br /&gt;
|-&lt;br /&gt;
| 130 || SwapNpadAssignment&lt;br /&gt;
|-&lt;br /&gt;
| 131 || IsUnintendedHomeButtonInputProtectionEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 132 || EnableUnintendedHomeButtonInputProtection&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetVibrationDeviceInfo&lt;br /&gt;
|-&lt;br /&gt;
| 201 || [[#SendVibrationValue]]&lt;br /&gt;
|-&lt;br /&gt;
| 202 || [[#GetActualVibrationValue]]&lt;br /&gt;
|-&lt;br /&gt;
| 203 || CreateActiveVibrationDeviceList&lt;br /&gt;
|-&lt;br /&gt;
| 204 || PermitVibration&lt;br /&gt;
|-&lt;br /&gt;
| 205 || IsVibrationPermitted&lt;br /&gt;
|-&lt;br /&gt;
| 206 || SendVibrationValues&lt;br /&gt;
|-&lt;br /&gt;
| 300 || ActivateConsoleSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 301 || StartConsoleSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 302 || StopConsoleSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 400 || IsUsbFullKeyControllerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 401 || EnableUsbFullKeyController&lt;br /&gt;
|-&lt;br /&gt;
| 402 || IsUsbFullKeyControllerConnected&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || SetNpadCommunicationMode&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || GetNpadCommunicationMode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CreateAppletResource ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an [[#IAppletResource]].&lt;br /&gt;
&lt;br /&gt;
==SetNpadJoyAssignmentModeDual==&lt;br /&gt;
Takes a PID-descriptor, an u32, and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
== GetNpadHandheldActivationMode ==&lt;br /&gt;
Takes a PID and an u64 [[AM_services|AppletResourceUserId]]. Returns an output u64. Official user-processes panic if the output u64 is not 0-2.&lt;br /&gt;
&lt;br /&gt;
== SendVibrationValue ==&lt;br /&gt;
Takes a PID-descriptor, an u32 VibrationDeviceHandle, 0x10-byte VibrationValue immediately after that, and an u64 [[AM_services|AppletResourceUserId]].&lt;br /&gt;
&lt;br /&gt;
== GetActualVibrationValue ==&lt;br /&gt;
Takes a PID-descriptor, an u32 VibrationDeviceHandle, and an u64 [[AM_services|AppletResourceUserId]]. Returns the 0x10-byte VibrationValue.&lt;br /&gt;
&lt;br /&gt;
== IAppletResource ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#GetSharedMemoryHandle]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== GetSharedMemoryHandle ===&lt;br /&gt;
No input. Returned a [[HID_Shared_Memory|sharedmem]] handle.&lt;br /&gt;
&lt;br /&gt;
= hid:dbg =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidDebugServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DeactivateDebugPad&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDebugPadAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 2 || UnsetDebugPadAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 10 || DeactivateTouchScreen&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetTouchScreenAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 12 || UnsetTouchScreenAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 20 || DeactivateMouse&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SetMouseAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 22 || UnsetMouseAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 30 || DeactivateKeyboard&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SetKeyboardAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 32 || UnsetKeyboardAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 50 || DeactivateXpad&lt;br /&gt;
|-&lt;br /&gt;
| 51 || SetXpadAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 52 || UnsetXpadAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 60 || DeactivateJoyXpad&lt;br /&gt;
|-&lt;br /&gt;
| 91 || DeactivateGesture&lt;br /&gt;
|-&lt;br /&gt;
| 110 || DeactivateHomeButton&lt;br /&gt;
|-&lt;br /&gt;
| 111 || SetHomeButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 112 || UnsetHomeButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 120 || DeactivateSleepButton&lt;br /&gt;
|-&lt;br /&gt;
| 121 || SetSleepButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 122 || UnsetSleepButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 123 || DeactivateInputDetector&lt;br /&gt;
|-&lt;br /&gt;
| 130 || DeactivateCaptureButton&lt;br /&gt;
|-&lt;br /&gt;
| 131 || SetCaptureButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 132 || UnsetCaptureButtonAutoPilotState&lt;br /&gt;
|-&lt;br /&gt;
| 133 || SetShiftAccelerometerCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 134 || GetShiftAccelerometerCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 135 || SetShiftGyroscopeCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 136 || GetShiftGyroscopeCalibrationValue&lt;br /&gt;
|-&lt;br /&gt;
| 140 || DeactivateConsoleSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 201 || ActivateFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 202 || DeactivateFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 203 || StartFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 204 || GetFirmwareUpdateStage&lt;br /&gt;
|-&lt;br /&gt;
| 205 || GetFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 206 || GetDestinationFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 207 || DiscardFirmwareInfoCacheForRevert&lt;br /&gt;
|-&lt;br /&gt;
| 208 || StartFirmwareUpdateForRevert&lt;br /&gt;
|-&lt;br /&gt;
| 209 || GetAvailableFirmwareVersionForRevert&lt;br /&gt;
|-&lt;br /&gt;
| 211 || UpdateControllerColor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= hid:sys =&lt;br /&gt;
This is &amp;quot;nn::hid::IHidSystemServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SendKeyboardLockKeyEvent&lt;br /&gt;
|-&lt;br /&gt;
| 101 || AcquireHomeButtonEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 111 || ActivateHomeButton&lt;br /&gt;
|-&lt;br /&gt;
| 121 || AcquireSleepButtonEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 131 || ActivateSleepButton&lt;br /&gt;
|-&lt;br /&gt;
| 141 || AcquireCaptureButtonEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 151|| ActivateCaptureButton&lt;br /&gt;
|-&lt;br /&gt;
| 210 || AcquireNfcDeviceUpdateEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 211 || GetNpadsWithNfc&lt;br /&gt;
|-&lt;br /&gt;
| 212 || AcquireNfcActivateEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 213 || ActivateNfc&lt;br /&gt;
|-&lt;br /&gt;
| 230 || AcquireIrSensorEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 231 || ActivateIrSensor&lt;br /&gt;
|-&lt;br /&gt;
| 301 || ActivateNpadSystem&lt;br /&gt;
|-&lt;br /&gt;
| 303 || ApplyNpadSystemCommonPolicy&lt;br /&gt;
|-&lt;br /&gt;
| 304 || EnableAssigningSingleOnSlSrPress&lt;br /&gt;
|-&lt;br /&gt;
| 305 || DisableAssigningSingleOnSlSrPress&lt;br /&gt;
|-&lt;br /&gt;
| 306 || GetLastActiveNpad&lt;br /&gt;
|-&lt;br /&gt;
| 307 || GetNpadSystemExtStyle&lt;br /&gt;
|-&lt;br /&gt;
| 311 || SetNpadPlayerLedBlinkingDevice&lt;br /&gt;
|-&lt;br /&gt;
| 321 || GetUniquePadsFromNpad&lt;br /&gt;
|-&lt;br /&gt;
| 322 || GetIrSensorState&lt;br /&gt;
|-&lt;br /&gt;
| 323 || GetXcdHandleForNpadWithIrSensor&lt;br /&gt;
|-&lt;br /&gt;
| 500 || SetAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 501 || RegisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 502 || UnregisterAppletResourceUserId&lt;br /&gt;
|-&lt;br /&gt;
| 503 || EnableAppletToGetInput&lt;br /&gt;
|-&lt;br /&gt;
| 504 || SetAruidValidForVibration&lt;br /&gt;
|-&lt;br /&gt;
| 505 || EnableAppletToGetSixAxisSensor&lt;br /&gt;
|-&lt;br /&gt;
| 510 || [[#SetVibrationMasterVolume]]&lt;br /&gt;
|-&lt;br /&gt;
| 511 || GetVibrationMasterVolume&lt;br /&gt;
|-&lt;br /&gt;
| 512 || BeginPermitVibrationSession&lt;br /&gt;
|-&lt;br /&gt;
| 513 || EndPermitVibrationSession&lt;br /&gt;
|-&lt;br /&gt;
| 520 || EnableHandheldHids&lt;br /&gt;
|-&lt;br /&gt;
| 521 || DisableHandheldHids&lt;br /&gt;
|-&lt;br /&gt;
| 540 || AcquirePlayReportControllerUsageUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| 541 || GetPlayReportControllerUsages&lt;br /&gt;
|-&lt;br /&gt;
| 542 || AcquirePlayReportRegisteredDeviceUpdateEvent&lt;br /&gt;
|-&lt;br /&gt;
| 543 || GetRegisteredDevices&lt;br /&gt;
|-&lt;br /&gt;
| 544 || AcquireConnectionTriggerTimeoutEvent&lt;br /&gt;
|-&lt;br /&gt;
| 545 || SendConnectionTrigger&lt;br /&gt;
|-&lt;br /&gt;
| 546 || AcquireDeviceRegisteredEventForControllerSupport&lt;br /&gt;
|-&lt;br /&gt;
| 547 || GetAllowedBluetoothLinksCount&lt;br /&gt;
|-&lt;br /&gt;
| 700 || ActivateUniquePad&lt;br /&gt;
|-&lt;br /&gt;
| 702 || AcquireUniquePadConnectionEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 703 || GetUniquePadIds&lt;br /&gt;
|-&lt;br /&gt;
| 751 || AcquireJoyDetachOnBluetoothOffEventHandle&lt;br /&gt;
|-&lt;br /&gt;
| 800 || ListSixAxisSensorHandles&lt;br /&gt;
|-&lt;br /&gt;
| 801 || IsSixAxisSensorUserCalibrationSupported&lt;br /&gt;
|-&lt;br /&gt;
| 802 || ResetSixAxisSensorCalibrationValues&lt;br /&gt;
|-&lt;br /&gt;
| 803 || StartSixAxisSensorUserCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 804 || CancelSixAxisSensorUserCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 805 || GetUniquePadBluetoothAddress&lt;br /&gt;
|-&lt;br /&gt;
| 806 || DisconnectUniquePad&lt;br /&gt;
|-&lt;br /&gt;
| 821 || StartAnalogStickManualCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 822 || RetryCurrentAnalogStickManualCalibrationStage&lt;br /&gt;
|-&lt;br /&gt;
| 823 || CancelAnalogStickManualCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 824 || ResetAnalogStickManualCalibration&lt;br /&gt;
|-&lt;br /&gt;
| 850 || IsUsbFullKeyControllerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 851 || EnableUsbFullKeyController&lt;br /&gt;
|-&lt;br /&gt;
| 852 || IsUsbConnected&lt;br /&gt;
|-&lt;br /&gt;
| 900 || ActivateInputDetector&lt;br /&gt;
|-&lt;br /&gt;
| 901 || NotifyInputDetector&lt;br /&gt;
|-&lt;br /&gt;
| 1000 || InitializeFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1001 || GetFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 1002 || GetAvailableFirmwareVersion&lt;br /&gt;
|-&lt;br /&gt;
| 1003 || IsFirmwareUpdateAvailable&lt;br /&gt;
|-&lt;br /&gt;
| 1004 || CheckFirmwareUpdateRequired&lt;br /&gt;
|-&lt;br /&gt;
| 1005 || StartFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1006 || AbortFirmwareUpdate&lt;br /&gt;
|-&lt;br /&gt;
| 1007 || GetFirmwareUpdateState&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SetVibrationMasterVolume ==&lt;br /&gt;
Takes an input 32bit float.&lt;br /&gt;
&lt;br /&gt;
=irs=&lt;br /&gt;
This is &amp;quot;nn::irsensor::IIrSensorServer&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 302 || [[#ActivateIrsensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 303 || [[#DeactivateIrsensor]]&lt;br /&gt;
|-&lt;br /&gt;
| 304 || [[#GetIrsensorSharedMemoryHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 305 || [[#StopImageProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 306 || [[#RunMomentProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 307 || [[#RunClusteringProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 308 || [[#RunImageTransferProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 309 || [[#GetImageTransferProcessorState]]&lt;br /&gt;
|-&lt;br /&gt;
| 310 || [[#RunTeraPluginProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 311 || [[#GetNpadIrCameraHandle]]&lt;br /&gt;
|-&lt;br /&gt;
| 312 || [[#RunDpdProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 313 || [[#SuspendImageProcessor]]&lt;br /&gt;
|-&lt;br /&gt;
| 314 || [3.0.0+] [[#CheckFirmwareVersion]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==ActivateIrsensor==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==DeactivateIrsensor==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==GetIrsensorSharedMemoryHandle==&lt;br /&gt;
Takes a PID-descriptor and an [[AM_services|AppletResourceUserId]]. Returns a SharedMemory handle.&lt;br /&gt;
&lt;br /&gt;
The SharedMemory is mapped with permissions=read-only and size=0x8000.&lt;br /&gt;
&lt;br /&gt;
==StopImageProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==RunMomentProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedMomentProcessorConfig]]. No output.&lt;br /&gt;
&lt;br /&gt;
==RunClusteringProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], and a [[#PackedClusteringProcessorConfig]]. No output.&lt;br /&gt;
&lt;br /&gt;
==RunImageTransferProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], an [[AM_services|AppletResourceUserId]], a [[#PackedImageTransferProcessorConfig]], an u64 for the TransferMemory_size, and a TransferMemory handle. No output.&lt;br /&gt;
&lt;br /&gt;
Official sw creates the TransferMemory with an user-specified buffer and permissions=0.&lt;br /&gt;
&lt;br /&gt;
==GetImageTransferProcessorState==&lt;br /&gt;
Takes a PID-descriptor, a type-0x6 output buffer, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. Returns an [[#ImageTransferProcessorState]]. No output.&lt;br /&gt;
&lt;br /&gt;
==RunTeraPluginProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedTeraPluginProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==GetNpadIrCameraHandle==&lt;br /&gt;
Takes an input u32. Returns an output [[#IrCameraHandle]].&lt;br /&gt;
&lt;br /&gt;
==RunDpdProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedDpdProcessorConfig]] (immediately after the previous word), and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==SuspendImageProcessor==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==CheckFirmwareVersion==&lt;br /&gt;
Takes a PID-descriptor, an [[#IrCameraHandle]], a [[#PackedMcuVersion]], and an [[AM_services|AppletResourceUserId]]. No output.&lt;br /&gt;
&lt;br /&gt;
==IrCameraHandle==&lt;br /&gt;
This is an u32.&lt;br /&gt;
&lt;br /&gt;
==PackedMomentProcessorConfig==&lt;br /&gt;
This is a 0x20-byte struct. This is converted from another structure by the official user-process.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Offset || Size || Description || DefaultConfig&lt;br /&gt;
|-&lt;br /&gt;
| 0x0 || 0x8 || ? || 0x493E0&lt;br /&gt;
|-&lt;br /&gt;
| 0x8 || 0x1 || ? || 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 0x9 || 0x1 || ? || 0x8&lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x1 || ? || 0x0&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x5 || Padding || &lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x8 || u16, u32, u16 || {Not written}, 0x1400000, 0xF0&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0x4 || Hard-coded to 0xA0003. || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0x1 || ? || 0x1&lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0x1 || ? || 0x50&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0x2 || Padding || &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==PackedClusteringProcessorConfig==&lt;br /&gt;
This is a 0x28-byte struct.&lt;br /&gt;
&lt;br /&gt;
==PackedImageTransferProcessorConfig==&lt;br /&gt;
This is a 0x18-byte struct. This is converted from another structure by the official user-process. The conversion is the same as PackedMomentProcessorConfig, except the code using out +0x1C/+0x1D was removed, and the constant is now located at out+0x10. The code which wrote to out u64 +0x10 from in+0x24 was replaced with code which writes an u8 to out+0x14.&lt;br /&gt;
&lt;br /&gt;
==ImageTransferProcessorState==&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
==PackedTeraPluginProcessorConfig==&lt;br /&gt;
This is an u64.&lt;br /&gt;
&lt;br /&gt;
==PackedDpdProcessorConfig==&lt;br /&gt;
This is a 0x10-byte struct.&lt;br /&gt;
&lt;br /&gt;
==PackedMcuVersion==&lt;br /&gt;
This is an u32.&lt;br /&gt;
&lt;br /&gt;
=RomFS=&lt;br /&gt;
The hid-sysmodule RomFS contains:&lt;br /&gt;
  ftmFwUpdate&lt;br /&gt;
    ├── NTD_4CD_1801.fts256&lt;br /&gt;
    └── NTD_4CD_2602.fts256&lt;br /&gt;
&lt;br /&gt;
These are firmware files for the touchscreen controller.&lt;br /&gt;
&lt;br /&gt;
=Firmware update=&lt;br /&gt;
Starting with [[3.0.0]] HID-sysmodule now contains strings for data stored in title [[Title_list|0100000000000822]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Services]]&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3713</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3713"/>
		<updated>2018-02-11T00:14:49Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || Backlight || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || Backlight || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || HdmiHotplug || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| -- || 0xE1 || CC, 1 || HdmiHotplug || In || [[NV services]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3712</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3712"/>
		<updated>2018-02-10T23:53:43Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Channels */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]], [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3710</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3710"/>
		<updated>2018-02-10T23:41:19Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Channels ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Interface || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || PWM Channel 0 || Fan ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 || PWM Channel 1 || Backlight || [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || PMC Blinker || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3709</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3709"/>
		<updated>2018-02-10T22:33:30Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: fake news&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3708</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3708"/>
		<updated>2018-02-10T22:25:26Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || joycon(L) NwcpDriver0.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon(R) NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon(L) NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || joycon(R) NwcpDriver1.GpioMonitorTask0 (insertion) || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || joycon(R) NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || joycon(L) NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3707</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3707"/>
		<updated>2018-02-10T22:10:24Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || NwcpDriver0.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || NwcpDriver1.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || DebugPadDriver || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3706</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3706"/>
		<updated>2018-02-10T22:07:44Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Known Devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || NwcpDriver0.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || NwcpDriver1.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || touchscreen || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3705</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3705"/>
		<updated>2018-02-10T21:53:47Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || DebugPadDriver || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || NwcpDriver0.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || Touchscreen power || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || NwcpDriver1.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3704</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3704"/>
		<updated>2018-02-10T21:51:05Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || NwcpDriver0.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || NwcpDriver1.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || NwcpDriver0.NwcpCharger || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || NwcpDriver1.GpioMonitorTask0 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || NwcpDriver1.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || NwcpDriver0.GpioMonitorTask1 || || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3703</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3703"/>
		<updated>2018-02-10T21:42:34Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || joycon charging? || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || joycon charging? || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3702</id>
		<title>PCV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3702"/>
		<updated>2018-02-10T14:41:52Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* bpc:r */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= bpc =&lt;br /&gt;
This is &amp;quot;nn::bpc::IBoardPowerControlManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ShutdownSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RebootSystem&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWakeupReason&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetShutdownReason&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAcOk&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBoardPowerControlEvent&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSleepButtonState&lt;br /&gt;
|-&lt;br /&gt;
| 7 || GetPowerEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bpc:r =&lt;br /&gt;
This is &amp;quot;nn::bpc::IRtcManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadExternalRtcResetFlag&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ClearExternalRtcResetFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
GetExternalRtcValue / SetExternalRtcValue directly accesses the max77620_rtc0 device.&lt;br /&gt;
&lt;br /&gt;
= pcv =&lt;br /&gt;
This is &amp;quot;nn::pcv::detail::IPcvService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPowerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetClockEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetPossibleClockRates&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetMinVClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetReset&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetVoltageRange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetTemperatureThresholds&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IsInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 18 || PowerOn&lt;br /&gt;
|-&lt;br /&gt;
| 19 || PowerOff&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ChangeVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetPowerClockInfoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetOscillatorClock&lt;br /&gt;
|-&lt;br /&gt;
| 23 || GetDvfsTable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GetModuleStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GetPowerDomainStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 26 || GetFuseInfo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Name to Block Maps ==&lt;br /&gt;
&lt;br /&gt;
=== Power Switch / Clocking / Reset ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Rail || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || CpuBus || vdd_cpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || GPU || vdd_gpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || I2S1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || I2S2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || I2S3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || PWM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  6 || I2C1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  7 || I2C2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  8 || I2C3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  9 || I2C4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || I2C5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || I2C6 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SPI1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || SPI2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SPI3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SPI4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DISP1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DISP2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || SDMMC4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || - || - || Not actual block. Used for debug and stuff.&lt;br /&gt;
|-&lt;br /&gt;
| 25 || CSITE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || TSEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || MSELECT || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || HDA2CODEC_2X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ACTMON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 30 || I2C_SLOW || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SOR1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 33 || HDA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 34 || XUSB_CORE_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 35 || XUSB_FALCON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 36 || XUSB_FS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 37 || XUSB_CORE_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 38 || XUSB_SS_HOSTDEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UARTA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UARTB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 41 || UARTC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 42 || UARTD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 43 || HOST1X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 44 || ENTROPY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 45 || SOC_THERM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 46 || VIC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 47 || NVENC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 48 || NVJPG || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 49 || NVDEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 50 || QSPI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 52 || TSECB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 53 || APE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 54 || ACLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 55 || UARTAPE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 56 || EMC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 57 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 58 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 59 || DSI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 60 || MAUD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DPAUX1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 62 || MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 63 || UART_FST_MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 64 || OSC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 65 || SCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 66 || SOR_SAFE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 67 || XUSB_SS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 68 || XUSB_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 69 || XUSB_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 70 || EXTPERIPH1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 71 || AHUB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 72 || HDA2HDMICODEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 73 || PLLP5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 74 || USBD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 75 || USB2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 76 || PCIE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 77 || AFI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || PCIEXCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 79 || PEX_USB_UPHY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 80 || XUSB_PADCTL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 81 || APBDMA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 82 || USB2_TRK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 83 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 84 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 85 || CEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Voltage ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || max77620_sd0 || &lt;br /&gt;
|-&lt;br /&gt;
|  1 || max77620_sd1 || &lt;br /&gt;
|-&lt;br /&gt;
|  2 || max77620_sd2 || &lt;br /&gt;
|-&lt;br /&gt;
|  3 || max77620_sd3 || &lt;br /&gt;
|-&lt;br /&gt;
|  4 || max77620_ldo0 || &lt;br /&gt;
|-&lt;br /&gt;
|  5 || max77620_ldo1 || &lt;br /&gt;
|-&lt;br /&gt;
|  6 || max77620_ldo2 || &lt;br /&gt;
|-&lt;br /&gt;
|  7 || max77620_ldo3 || &lt;br /&gt;
|-&lt;br /&gt;
|  8 || max77620_ldo4 || &lt;br /&gt;
|-&lt;br /&gt;
|  9 || max77620_ldo5 || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || max77620_ldo6 || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || max77620_ldo7 || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || max77620_ldo8 || &lt;br /&gt;
|-&lt;br /&gt;
| 13 || max77621_cpu || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || max77621_gpu || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: max77620 GPIOs are only used internally by the driver during init, and not exposed via an API.&lt;br /&gt;
&lt;br /&gt;
= pcv:arb =&lt;br /&gt;
This is &amp;quot;nn::pcv::IArbitrationManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ReleaseControl&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:imm =&lt;br /&gt;
This is &amp;quot;nn::pcv::IImmediateManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= time:u, time:a, time:s =&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::IStaticService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || IsStandardNetworkSystemClockAccuracySufficient || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISteadyClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTimePoint&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 100 || GetRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 101 || IsRtcResetDetected&lt;br /&gt;
|-&lt;br /&gt;
| 102 || GetSetupResultValue&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystemClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTime || Returns an nn::time::PosixTime (time since epoch).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetCurrentTime || Takes an nn::time::PosixTime.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSystemClockContext || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSystemClockContext  || Takes an nn::time::SystemClockContext&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ITimeZoneService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetDeviceLocationName || Returns an nn::time::LocationName (0x24 bytes).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeviceLocationName || Takes an nn::time::LocationName.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTotalLocationNameCount || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LoadLocationNameList || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || LoadTimeZoneRule || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetTimeZoneRuleVersion ||  &lt;br /&gt;
|-&lt;br /&gt;
| 100 || ToCalendarTime || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || ToCalendarTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || ToPosixTime || &lt;br /&gt;
|-&lt;br /&gt;
| 201 || ToPosixTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3596</id>
		<title>Bus services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=Bus_services&amp;diff=3596"/>
		<updated>2018-01-29T21:00:09Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* OpenSession */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= gpio =&lt;br /&gt;
This is &amp;quot;nn::gpio::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || [[#OpenSessionForDev]]&lt;br /&gt;
|-&lt;br /&gt;
| 1 || [[#OpenSession]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || [[#OpenSessionForTest]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || IsWakeEventActive &lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetWakeEventActiveFlagSet&lt;br /&gt;
|-&lt;br /&gt;
| 5 || SetWakeEventActiveFlagSetForDebug&lt;br /&gt;
|-&lt;br /&gt;
| 6 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForDev ==&lt;br /&gt;
Takes a raw GpioPadDescriptor and returns a [[#IPadSession]] session for it.&lt;br /&gt;
&lt;br /&gt;
== OpenSession ==&lt;br /&gt;
Same thing as OpenSessionForDev except the descriptor is looked up in the table below.&lt;br /&gt;
Returns an [[#IPadSession]] session.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! GpioPadName || GpioPadDescriptor || Tegra (port, pin) || Usage || Direction || Used by&lt;br /&gt;
|-&lt;br /&gt;
| 1 || 0xCC || Z, 4 || || Out || [[Audio services]], [[Fatal services]]&lt;br /&gt;
|-&lt;br /&gt;
| 2 || 0x24 || E, 4 || SDCard Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 3 || 0x3C || H, 4 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 4 || 0xDA || BB, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || 0xDB || BB, 3 || GcAsic Power || Out || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 6 || 0xDC || BB, 4 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 7 || 0x25 || E, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 8 || 0x90 || S, 0 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 9 || 0x91 || S, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xA || 0x96 || S, 6 || Power supply monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xB || 0x97 || S, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xC || 0x26 || E, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xD || 6 || A, 6 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0xE || 0x78 || P, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0xF || 0x93 || S, 3 || GcAsic irq || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x10 || 0x7D || P, 5 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x11 || 0x7C || P, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x12 || 0x7B || P, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x13 || 0x7A || P, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x14 || 0xBC || X, 4 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x15 || 0xAE || V, 6 || || In || [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x16 || 0xBA || X, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x17 || 0xB9 || X, 1 || || In || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x18 || 0xBD || X, 5 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x19 || 0xBE || X, 6 || Volume Up || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1A || 0xBF || X, 7 || Volume Down || In || [[Boot2]], [[Audio services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1B || 0xC0 || Y, 0 || Power supply monitor related. || In || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C || 0xC1 || Y, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x1D || 0xA9 || V, 1 || .. Backlight? || Out || [[NV services]], [[Backlight services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1E || 0xAA || V, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1F || 0x55 || K, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x20 || 0xAD || V, 5 || PD related || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x21 || 0xC8 || Z, 0 || Power supply monitor related. || In || [[PTM services]] &lt;br /&gt;
|-&lt;br /&gt;
| 0x22 || 0xCA || Z, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x23 || 0xCB || Z, 3 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x24 || 0x4F || J, 7 || || Out || [[HID services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x25 || 0x50 || K, 0 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x26 || 0x51 || K, 1 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x27 || 0x52 || K, 2 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x28 || 0x54 || K, 4 || PD related, irq || In || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x29 || 0x56 || K, 6 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2A || 0x57 || K, 7 || || || &lt;br /&gt;
|-&lt;br /&gt;
| 0x2B || 0x53 || K, 3 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C || 0xE3 || CC, 3 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2D || 0x38 || H, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x2E || 0x39 || H, 1 || || Out || [[Wlan services]], [[PCIe services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x2F || 0x3B || H, 3 || || Out || [[Bluetooth services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x30 || 0x3D || H, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x31 || 0x3F || H, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x32 || 0x40 || I, 0 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x33 || 0x41 || I, 1 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x34 || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x35 || 0xE2 || CC, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x36 || 0xE4 || CC, 4 || Battery event monitor related. || Out || [[PTM services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x37 || 0x3A || H, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x38 || 0xC9 || Z, 1 || SDCard Card Detect || In || [[Filesystem services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x39 || 0x4D || J, 5 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3A || 0x58 || L, 0 || Charger watchdog related. || Out || [[PTM services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x3B || 0x3E || H, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3C || 0x26 || E, 6 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3D || -1 || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3E || 0x33 || G, 3 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x3F || 0x1C || D, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x40 || 0xD9 || BB, 1 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x41 || 0x0C || B, 4 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x42 || 0x0D || B, 5 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x43 || 0x21 || E, 1 || USB power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x44 || 0x27 || E, 7 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x45 || 0x92 || S, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x46 || 0x95 || S, 5 || USB root port 4 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x47 || 0x98 || T, 0 || USB root port 3 power || Out || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x48 || 0x10 || C, 0 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x49 || 0x11 || C, 1 || USB root port 2 power || Out || [[NV services]], [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4A || 0x12 || C, 2 || || Out || [[NV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x4B || 0x42 || I, 2 || || ||&lt;br /&gt;
|-&lt;br /&gt;
| 0x4C || 0xE6 || CC, 6 || || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenSessionForTest ==&lt;br /&gt;
Same as [[#OpenSession]] but panics on failure.&lt;br /&gt;
&lt;br /&gt;
== IPadSession ==&lt;br /&gt;
This is &amp;quot;nn::gpio::IPadSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetDirection&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetInterruptMode&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetInterruptEnable&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 7 || ClearInterruptStatus&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetValue&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetValue&lt;br /&gt;
|-&lt;br /&gt;
| 10 || BindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 11 || UnbindInterrupt&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetDebounceEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetDebounceTime&lt;br /&gt;
|-&lt;br /&gt;
| 15 || GetDebounceTime&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== GpioPadDescriptor ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Bits || Description&lt;br /&gt;
|-&lt;br /&gt;
| 7-5 || Controller index&lt;br /&gt;
|-&lt;br /&gt;
| 4-3 || Port index&lt;br /&gt;
|-&lt;br /&gt;
| 2-0 || Pin number&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c =&lt;br /&gt;
This is &amp;quot;nn::i2c::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|-&lt;br /&gt;
| 2 || HasDevice&lt;br /&gt;
|-&lt;br /&gt;
| 3 || HasDeviceForDev&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Known Devices ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Port:Addr || 10bit? || Speed || Max Retries || Retry Delay || Usage || Used by&lt;br /&gt;
|-&lt;br /&gt;
|  0 || 0:52 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || 2:49 || N || 400000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || 0:4c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || 0:1c || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || 4:68 || N || 400000 || 3 || 5000000 || max77620_rtc0, max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  6 || 4:3c || N || 400000 || 3 || 5000000 || PMIC (max77620), max77620_irq0 || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  7 || 4:1b || N || 400000 || 3 || 5000000 || max77621_cpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  8 || 4:1c || N || 400000 || 3 || 5000000 || max77621_gpu || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
|  9 || 0:6b || N || 100000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || 0:36 || N || 100000 || 3 || 5000000 || Maxim Fuel Gauge || [[PCV services]]&lt;br /&gt;
|-&lt;br /&gt;
| 11 || 0:18 || N || 100000 || 3 || 5000000 || PD related || [[USB services]]&lt;br /&gt;
|-&lt;br /&gt;
| 12 || 1:40 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || 1:41 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || 1:44 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || 1:45 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || 1:46 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || 1:47 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 18 || 1:29 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 19 || 1:48 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || 1:49 || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || 1:4a || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || 1:4b || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || 1:4d || N || 400000 || 3 || 5000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || 3:50 || N || 100000 || 0 ||       0 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== II2cSession ==&lt;br /&gt;
This is &amp;quot;nn::i2c::ISession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || &lt;br /&gt;
|-&lt;br /&gt;
| 1 || &lt;br /&gt;
|-&lt;br /&gt;
| 2 || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || Send&lt;br /&gt;
|-&lt;br /&gt;
| 4 || Receive&lt;br /&gt;
|-&lt;br /&gt;
| 5 || ExecuteCommandList&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= i2c:pcv =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 ||&lt;br /&gt;
|-&lt;br /&gt;
| 1 ||&lt;br /&gt;
|-&lt;br /&gt;
| 2 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= uart =&lt;br /&gt;
This is &amp;quot;nn::uart::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || DoesUartExist&lt;br /&gt;
|-&lt;br /&gt;
| 1 || DoesUartExistForTest&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetUartBaudrate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetUartBaudrateForTest&lt;br /&gt;
|-&lt;br /&gt;
| 4 || IsSomethingUartValid&lt;br /&gt;
|-&lt;br /&gt;
| 5 || IsSomethingUartValidForTest&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSession&lt;br /&gt;
|-&lt;br /&gt;
| 7 || IsSomethingUartValid2&lt;br /&gt;
|-&lt;br /&gt;
| 8 || IsSomethingUartValid2ForTest&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IPortSession ==&lt;br /&gt;
This is &amp;quot;nn::uart::IPortSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 1 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 2 || || &lt;br /&gt;
|-&lt;br /&gt;
| 3 || || Takes marshalled arguments&lt;br /&gt;
|-&lt;br /&gt;
| 4 || || Returns 2x u64. Both zero.&lt;br /&gt;
|-&lt;br /&gt;
| 5 || || &lt;br /&gt;
|-&lt;br /&gt;
| 6 || || &lt;br /&gt;
|-&lt;br /&gt;
| 7 || || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pwm =&lt;br /&gt;
This is &amp;quot;nn::pwm::IManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || OpenSessionForDev&lt;br /&gt;
|-&lt;br /&gt;
| 1 || OpenSession&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IChannelSession ==&lt;br /&gt;
This is &amp;quot;nn::pwm::IChannelSession&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetPeriod&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetDuty&lt;br /&gt;
|-&lt;br /&gt;
| 4 || SetEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetEnabled&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3590</id>
		<title>PCV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3590"/>
		<updated>2018-01-28T05:48:42Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Power Switch / Clocking / Reset */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= bpc =&lt;br /&gt;
This is &amp;quot;nn::bpc::IBoardPowerControlManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ShutdownSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RebootSystem&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWakeupReason&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetShutdownReason&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAcOk&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBoardPowerControlEvent&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSleepButtonState&lt;br /&gt;
|-&lt;br /&gt;
| 7 || GetPowerEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bpc:r =&lt;br /&gt;
This is &amp;quot;nn::bpc::IRtcManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadExternalRtcResetFlag&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ClearExternalRtcResetFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv =&lt;br /&gt;
This is &amp;quot;nn::pcv::detail::IPcvService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPowerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetClockEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetPossibleClockRates&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetMinVClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetReset&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetVoltageRange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetTemperatureThresholds&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IsInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 18 || PowerOn&lt;br /&gt;
|-&lt;br /&gt;
| 19 || PowerOff&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ChangeVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetPowerClockInfoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetOscillatorClock&lt;br /&gt;
|-&lt;br /&gt;
| 23 || GetDvfsTable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GetModuleStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GetPowerDomainStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 26 || GetFuseInfo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Name to Block Maps ==&lt;br /&gt;
&lt;br /&gt;
=== Power Switch / Clocking / Reset ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Rail || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || CpuBus || vdd_cpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || GPU || vdd_gpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || I2S1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || I2S2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || I2S3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || PWM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  6 || I2C1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  7 || I2C2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  8 || I2C3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  9 || I2C4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || I2C5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || I2C6 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SPI1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || SPI2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SPI3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SPI4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DISP1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DISP2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || SDMMC4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 24 || - || - || Not actual block. Used for debug and stuff.&lt;br /&gt;
|-&lt;br /&gt;
| 25 || CSITE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || TSEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || MSELECT || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || HDA2CODEC_2X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ACTMON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 30 || I2C_SLOW || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SOR1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 33 || HDA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 34 || XUSB_CORE_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 35 || XUSB_FALCON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 36 || XUSB_FS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 37 || XUSB_CORE_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 38 || XUSB_SS_HOSTDEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UARTA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UARTB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 41 || UARTC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 42 || UARTD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 43 || HOST1X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 44 || ENTROPY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 45 || SOC_THERM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 46 || VIC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 47 || NVENC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 48 || NVJPG || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 49 || NVDEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 50 || QSPI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 52 || TSECB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 53 || APE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 54 || ACLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 55 || UARTAPE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 56 || EMC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 57 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 58 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 59 || DSI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 60 || MAUD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DPAUX1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 62 || MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 63 || UART_FST_MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 64 || OSC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 65 || SCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 66 || SOR_SAFE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 67 || XUSB_SS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 68 || XUSB_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 69 || XUSB_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 70 || EXTPERIPH1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 71 || AHUB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 72 || HDA2HDMICODEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 73 || PLLP5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 74 || USBD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 75 || USB2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 76 || PCIE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 77 || AFI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || PCIEXCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 79 || PEX_USB_UPHY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 80 || XUSB_PADCTL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 81 || APBDMA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 82 || USB2_TRK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 83 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 84 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 85 || CEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Voltage ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || max77620_sd0 || &lt;br /&gt;
|-&lt;br /&gt;
|  1 || max77620_sd1 || &lt;br /&gt;
|-&lt;br /&gt;
|  2 || max77620_sd2 || &lt;br /&gt;
|-&lt;br /&gt;
|  3 || max77620_sd3 || &lt;br /&gt;
|-&lt;br /&gt;
|  4 || max77620_ldo0 || &lt;br /&gt;
|-&lt;br /&gt;
|  5 || max77620_ldo1 || &lt;br /&gt;
|-&lt;br /&gt;
|  6 || max77620_ldo2 || &lt;br /&gt;
|-&lt;br /&gt;
|  7 || max77620_ldo3 || &lt;br /&gt;
|-&lt;br /&gt;
|  8 || max77620_ldo4 || &lt;br /&gt;
|-&lt;br /&gt;
|  9 || max77620_ldo5 || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || max77620_ldo6 || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || max77620_ldo7 || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || max77620_ldo8 || &lt;br /&gt;
|-&lt;br /&gt;
| 13 || max77621_cpu || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || max77621_gpu || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: max77620 GPIOs are only used internally by the driver during init, and not exposed via an API.&lt;br /&gt;
&lt;br /&gt;
= pcv:arb =&lt;br /&gt;
This is &amp;quot;nn::pcv::IArbitrationManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ReleaseControl&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:imm =&lt;br /&gt;
This is &amp;quot;nn::pcv::IImmediateManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= time:u, time:a, time:s =&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::IStaticService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || IsStandardNetworkSystemClockAccuracySufficient || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISteadyClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTimePoint&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 100 || GetRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 101 || IsRtcResetDetected&lt;br /&gt;
|-&lt;br /&gt;
| 102 || GetSetupResultValue&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystemClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTime || Returns an nn::time::PosixTime (time since epoch).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetCurrentTime || Takes an nn::time::PosixTime.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSystemClockContext || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSystemClockContext  || Takes an nn::time::SystemClockContext&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ITimeZoneService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetDeviceLocationName || Returns an nn::time::LocationName (0x24 bytes).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeviceLocationName || Takes an nn::time::LocationName.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTotalLocationNameCount || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LoadLocationNameList || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || LoadTimeZoneRule || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetTimeZoneRuleVersion ||  &lt;br /&gt;
|-&lt;br /&gt;
| 100 || ToCalendarTime || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || ToCalendarTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || ToPosixTime || &lt;br /&gt;
|-&lt;br /&gt;
| 201 || ToPosixTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3589</id>
		<title>PCV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3589"/>
		<updated>2018-01-28T02:38:54Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* Voltage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= bpc =&lt;br /&gt;
This is &amp;quot;nn::bpc::IBoardPowerControlManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ShutdownSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RebootSystem&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWakeupReason&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetShutdownReason&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAcOk&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBoardPowerControlEvent&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSleepButtonState&lt;br /&gt;
|-&lt;br /&gt;
| 7 || GetPowerEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bpc:r =&lt;br /&gt;
This is &amp;quot;nn::bpc::IRtcManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadExternalRtcResetFlag&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ClearExternalRtcResetFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv =&lt;br /&gt;
This is &amp;quot;nn::pcv::detail::IPcvService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPowerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetClockEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetPossibleClockRates&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetMinVClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetReset&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetVoltageRange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetTemperatureThresholds&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IsInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 18 || PowerOn&lt;br /&gt;
|-&lt;br /&gt;
| 19 || PowerOff&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ChangeVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetPowerClockInfoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetOscillatorClock&lt;br /&gt;
|-&lt;br /&gt;
| 23 || GetDvfsTable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GetModuleStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GetPowerDomainStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 26 || GetFuseInfo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Name to Block Maps ==&lt;br /&gt;
&lt;br /&gt;
=== Power Switch / Clocking / Reset ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Rail || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || CpuBus || vdd_cpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || GPU || vdd_gpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || I2S1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || I2S2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || I2S3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || PWM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  6 || I2C1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  7 || I2C2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  8 || I2C3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  9 || I2C4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || I2C5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || I2C6 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SPI1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || SPI2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SPI3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SPI4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DISP1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DISP2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || SDMMC4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || CSITE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || TSEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || MSELECT || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || HDA2CODEC_2X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ACTMON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 30 || I2C_SLOW || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SOR1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 33 || HDA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 34 || XUSB_CORE_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 35 || XUSB_FALCON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 36 || XUSB_FS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 37 || XUSB_CORE_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 38 || XUSB_SS_HOSTDEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UARTA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UARTB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 41 || UARTC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 42 || UARTD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 43 || HOST1X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 44 || ENTROPY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 45 || SOC_THERM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 46 || VIC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 47 || NVENC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 48 || NVJPG || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 49 || NVDEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 50 || QSPI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 52 || TSECB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 53 || APE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 54 || ACLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 55 || UARTAPE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 56 || EMC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 57 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 58 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 59 || DSI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 60 || MAUD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DPAUX1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 62 || MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 63 || UART_FST_MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 64 || OSC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 65 || SCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 66 || SOR_SAFE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 67 || XUSB_SS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 68 || XUSB_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 69 || XUSB_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 70 || EXTPERIPH1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 71 || AHUB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 72 || HDA2HDMICODEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 73 || PLLP5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 74 || USBD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 75 || USB2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 76 || PCIE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 77 || AFI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || PCIEXCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 79 || PEX_USB_UPHY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 80 || XUSB_PADCTL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 81 || APBDMA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 82 || USB2_TRK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 83 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 84 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 85 || CEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Voltage ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || max77620_sd0 || &lt;br /&gt;
|-&lt;br /&gt;
|  1 || max77620_sd1 || &lt;br /&gt;
|-&lt;br /&gt;
|  2 || max77620_sd2 || &lt;br /&gt;
|-&lt;br /&gt;
|  3 || max77620_sd3 || &lt;br /&gt;
|-&lt;br /&gt;
|  4 || max77620_ldo0 || &lt;br /&gt;
|-&lt;br /&gt;
|  5 || max77620_ldo1 || &lt;br /&gt;
|-&lt;br /&gt;
|  6 || max77620_ldo2 || &lt;br /&gt;
|-&lt;br /&gt;
|  7 || max77620_ldo3 || &lt;br /&gt;
|-&lt;br /&gt;
|  8 || max77620_ldo4 || &lt;br /&gt;
|-&lt;br /&gt;
|  9 || max77620_ldo5 || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || max77620_ldo6 || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || max77620_ldo7 || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || max77620_ldo8 || &lt;br /&gt;
|-&lt;br /&gt;
| 13 || max77621_cpu || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || max77621_gpu || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: max77620 GPIOs are only used internally by the driver during init, and not exposed via an API.&lt;br /&gt;
&lt;br /&gt;
= pcv:arb =&lt;br /&gt;
This is &amp;quot;nn::pcv::IArbitrationManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ReleaseControl&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:imm =&lt;br /&gt;
This is &amp;quot;nn::pcv::IImmediateManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= time:u, time:a, time:s =&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::IStaticService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || IsStandardNetworkSystemClockAccuracySufficient || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISteadyClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTimePoint&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 100 || GetRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 101 || IsRtcResetDetected&lt;br /&gt;
|-&lt;br /&gt;
| 102 || GetSetupResultValue&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystemClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTime || Returns an nn::time::PosixTime (time since epoch).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetCurrentTime || Takes an nn::time::PosixTime.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSystemClockContext || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSystemClockContext  || Takes an nn::time::SystemClockContext&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ITimeZoneService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetDeviceLocationName || Returns an nn::time::LocationName (0x24 bytes).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeviceLocationName || Takes an nn::time::LocationName.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTotalLocationNameCount || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LoadLocationNameList || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || LoadTimeZoneRule || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetTimeZoneRuleVersion ||  &lt;br /&gt;
|-&lt;br /&gt;
| 100 || ToCalendarTime || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || ToCalendarTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || ToPosixTime || &lt;br /&gt;
|-&lt;br /&gt;
| 201 || ToPosixTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
	<entry>
		<id>https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3588</id>
		<title>PCV services</title>
		<link rel="alternate" type="text/html" href="https://switchbrew.org/w/index.php?title=PCV_services&amp;diff=3588"/>
		<updated>2018-01-28T02:31:03Z</updated>

		<summary type="html">&lt;p&gt;Shuffle2: /* pcv */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= bpc =&lt;br /&gt;
This is &amp;quot;nn::bpc::IBoardPowerControlManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ShutdownSystem&lt;br /&gt;
|-&lt;br /&gt;
| 1 || RebootSystem&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetWakeupReason&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetShutdownReason&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetAcOk&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetBoardPowerControlEvent&lt;br /&gt;
|-&lt;br /&gt;
| 6 || GetSleepButtonState&lt;br /&gt;
|-&lt;br /&gt;
| 7 || GetPowerEvent&lt;br /&gt;
|-&lt;br /&gt;
| 8 ||&lt;br /&gt;
|-&lt;br /&gt;
| 9 ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= bpc:r =&lt;br /&gt;
This is &amp;quot;nn::bpc::IRtcManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetExternalRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 2 || ReadExternalRtcResetFlag&lt;br /&gt;
|-&lt;br /&gt;
| 3 || ClearExternalRtcResetFlag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv =&lt;br /&gt;
This is &amp;quot;nn::pcv::detail::IPcvService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetPowerEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetClockEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 2 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetState&lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetPossibleClockRates&lt;br /&gt;
|-&lt;br /&gt;
| 6 || SetMinVClockRate&lt;br /&gt;
|-&lt;br /&gt;
| 7 || SetReset&lt;br /&gt;
|-&lt;br /&gt;
| 8 || SetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 9 || GetVoltageEnabled&lt;br /&gt;
|-&lt;br /&gt;
| 10 || GetVoltageRange&lt;br /&gt;
|-&lt;br /&gt;
| 11 || SetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 12 || GetVoltageValue&lt;br /&gt;
|-&lt;br /&gt;
| 13 || GetTemperatureThresholds&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SetTemperature&lt;br /&gt;
|-&lt;br /&gt;
| 15 || Initialize&lt;br /&gt;
|-&lt;br /&gt;
| 16 || IsInitialized&lt;br /&gt;
|-&lt;br /&gt;
| 17 || Finalize&lt;br /&gt;
|-&lt;br /&gt;
| 18 || PowerOn&lt;br /&gt;
|-&lt;br /&gt;
| 19 || PowerOff&lt;br /&gt;
|-&lt;br /&gt;
| 20 || ChangeVoltage&lt;br /&gt;
|-&lt;br /&gt;
| 21 || GetPowerClockInfoEvent&lt;br /&gt;
|-&lt;br /&gt;
| 22 || GetOscillatorClock&lt;br /&gt;
|-&lt;br /&gt;
| 23 || GetDvfsTable&lt;br /&gt;
|-&lt;br /&gt;
| 24 || GetModuleStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 25 || GetPowerDomainStateTable&lt;br /&gt;
|-&lt;br /&gt;
| 26 || GetFuseInfo&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== User Name to Block Maps ==&lt;br /&gt;
&lt;br /&gt;
=== Power Switch / Clocking / Reset ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Rail || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || CpuBus || vdd_cpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  1 || GPU || vdd_gpu ||&lt;br /&gt;
|-&lt;br /&gt;
|  2 || I2S1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  3 || I2S2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  4 || I2S3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  5 || PWM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  6 || I2C1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  7 || I2C2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  8 || I2C3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|  9 || I2C4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 10 || I2C5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 11 || I2C6 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 12 || SPI1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 13 || SPI2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 14 || SPI3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 15 || SPI4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 16 || DISP1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 17 || DISP2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 20 || SDMMC1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 21 || SDMMC2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 22 || SDMMC3 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 23 || SDMMC4 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 25 || CSITE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 26 || TSEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 27 || MSELECT || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 28 || HDA2CODEC_2X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 29 || ACTMON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 30 || I2C_SLOW || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 31 || SOR1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 33 || HDA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 34 || XUSB_CORE_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 35 || XUSB_FALCON || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 36 || XUSB_FS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 37 || XUSB_CORE_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 38 || XUSB_SS_HOSTDEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 39 || UARTA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 40 || UARTB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 41 || UARTC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 42 || UARTD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 43 || HOST1X || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 44 || ENTROPY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 45 || SOC_THERM || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 46 || VIC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 47 || NVENC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 48 || NVJPG || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 49 || NVDEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 50 || QSPI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 52 || TSECB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 53 || APE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 54 || ACLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 55 || UARTAPE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 56 || EMC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 57 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 58 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 59 || DSI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 60 || MAUD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 61 || DPAUX1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 62 || MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 63 || UART_FST_MIPI_CAL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 64 || OSC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 65 || SCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 66 || SOR_SAFE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 67 || XUSB_SS || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 68 || XUSB_HOST || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 69 || XUSB_DEV || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 70 || EXTPERIPH1 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 71 || AHUB || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 72 || HDA2HDMICODEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 73 || PLLP5 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 74 || USBD || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 75 || USB2 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 76 || PCIE || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 77 || AFI || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 78 || PCIEXCLK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 79 || PEX_USB_UPHY || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 80 || XUSB_PADCTL || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 81 || APBDMA || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 82 || USB2_TRK || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 83 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 84 || PLLE0 || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
| 85 || CEC || vdd_soc ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Voltage ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Name || Block || Notes&lt;br /&gt;
|-&lt;br /&gt;
|  0 || max77620_sd0 || &lt;br /&gt;
|-&lt;br /&gt;
|  1 || max77620_sd1 || &lt;br /&gt;
|-&lt;br /&gt;
|  2 || max77620_sd2 || &lt;br /&gt;
|-&lt;br /&gt;
|  3 || max77620_sd3 || &lt;br /&gt;
|-&lt;br /&gt;
|  4 || max77620_ldo0 || &lt;br /&gt;
|-&lt;br /&gt;
|  5 || max77620_ldo1 || &lt;br /&gt;
|-&lt;br /&gt;
|  6 || max77620_ldo2 || &lt;br /&gt;
|-&lt;br /&gt;
|  7 || max77620_ldo3 || &lt;br /&gt;
|-&lt;br /&gt;
|  8 || max77620_ldo4 || &lt;br /&gt;
|-&lt;br /&gt;
|  9 || max77620_ldo5 || &lt;br /&gt;
|-&lt;br /&gt;
| 10 || max77620_ldo6 || &lt;br /&gt;
|-&lt;br /&gt;
| 11 || max77620_ldo7 || &lt;br /&gt;
|-&lt;br /&gt;
| 12 || max77620_ldo8 || &lt;br /&gt;
|-&lt;br /&gt;
| 13 || max77621_cpu || &lt;br /&gt;
|-&lt;br /&gt;
| 14 || max77621_gpu || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:arb =&lt;br /&gt;
This is &amp;quot;nn::pcv::IArbitrationManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || ReleaseControl&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= pcv:imm =&lt;br /&gt;
This is &amp;quot;nn::pcv::IImmediateManager&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || SetClockRate&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= time:u, time:a, time:s =&lt;br /&gt;
This is &amp;quot;nn::timesrv::detail::service::IStaticService&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetStandardUserSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 1 || GetStandardNetworkSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetStandardSteadyClock || Returns an [[#ISteadyClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 3 || GetTimeZoneService || Returns an [[#ITimeZoneService]].&lt;br /&gt;
|-&lt;br /&gt;
| 4 || GetStandardLocalSystemClock || Returns an [[#ISystemClock]].&lt;br /&gt;
|-&lt;br /&gt;
| 100 || IsStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || SetStandardUserSystemClockAutomaticCorrectionEnabled || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || IsStandardNetworkSystemClockAccuracySufficient || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISteadyClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTimePoint&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetTestOffset&lt;br /&gt;
|-&lt;br /&gt;
| 100 || GetRtcValue&lt;br /&gt;
|-&lt;br /&gt;
| 101 || IsRtcResetDetected&lt;br /&gt;
|-&lt;br /&gt;
| 102 || GetSetupResultValue&lt;br /&gt;
|-&lt;br /&gt;
| 200 || GetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
| 201 || SetInternalOffset&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ISystemClock ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetCurrentTime || Returns an nn::time::PosixTime (time since epoch).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetCurrentTime || Takes an nn::time::PosixTime.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetSystemClockContext || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || SetSystemClockContext  || Takes an nn::time::SystemClockContext&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ITimeZoneService ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Cmd || Name || Notes&lt;br /&gt;
|-&lt;br /&gt;
| 0 || GetDeviceLocationName || Returns an nn::time::LocationName (0x24 bytes).&lt;br /&gt;
|-&lt;br /&gt;
| 1 || SetDeviceLocationName || Takes an nn::time::LocationName.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || GetTotalLocationNameCount || Returns an 0x20 byte struct (nn::time::SystemClockContext).&lt;br /&gt;
|-&lt;br /&gt;
| 3 || LoadLocationNameList || &lt;br /&gt;
|-&lt;br /&gt;
| 4 || LoadTimeZoneRule || &lt;br /&gt;
|-&lt;br /&gt;
| 5 || GetTimeZoneRuleVersion ||  &lt;br /&gt;
|-&lt;br /&gt;
| 100 || ToCalendarTime || &lt;br /&gt;
|-&lt;br /&gt;
| 101 || ToCalendarTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
| 200 || ToPosixTime || &lt;br /&gt;
|-&lt;br /&gt;
| 201 || ToPosixTimeWithMyRule || &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Shuffle2</name></author>
	</entry>
</feed>