The gamepad's power management IC is a Texas Instruments SN1010007. So far no datasheet has been found.
It is connected to the UIC's I2C bus, where its device ID is 0x48.
| Pin | Desc. |
|---|---|
| 1 | ?? |
| 2 | ?? |
| 3 | ?? |
| 4 | ?? |
| 5 | Battery pin 1 (red) |
| 6 | Battery pin 1 (red) |
| 7 | ?? |
| 8 | ?? |
| 9 | ?? |
| 10 | 4.75V input from AC adapter |
| 11 | Battery pin 2 (gray) (through 510ohm resistor) |
| 12 | ?? |
| 13 | ?? |
| 14 | ?? |
| 15 | ?? |
| 16 | ?? |
| 17 | Ground |
| 18 | ?? |
| 19 | Vcc1 - 3.2V (UIC voltage?) |
| 20 | Vcc1 feedback |
| 21 | ?? |
| 22 | Vcc2 feedback |
| 23 | Vcc2 - 1.24V (SoC core voltage) |
| 24 | Power button output - to UIC pin 64 |
| 25 | Power button |
| 26 | CPU/etc active - to UIC pin 19 |
| 27 | UIC I2C - SDA |
| 28 | UIC I2C - SCL |
| 29 | Vcc3 - 2.8V output for peripherals (CPU, Flash, etc) |
| 30 | Ground |
| 31 | Vcc3 feedback |
| 32 | ?? |
| 33 | ?? |
| 34 | ?? |
| 35 | ?? |
| 36 | ?? |
| 37 | ?? |
| 38 | ?? |
| 39 | ?? |
| 40 | System active? - to UIC pin 17, with 100k pull-up resistor |
| 41 | ?? |
| 42 | Ground |
| 43 | Battery pin 4 (white) |
| 44 | ?? |
| 45 | ?? |
| 46 | ?? |
| 47 | ?? |
| 48 | ?? |
The gamepad is rated for 4.75V 1.6A. In practice, the PMIC accepts an input voltage of up to 5.2V (as often delivered by third-party AC adapters) without problem. This makes USB chargers a viable substitute for the proprietary AC adapter, as long as they can deliver enough current.
Communications to the PMIC always start by writing one byte, which is likely a register ID/address. Then further bytes are written or read in order to access the registers themselves.
The UIC firmware has code for accessing the following registers:
| Register | Description |
|---|---|
| 0x01 | Charge status – bit6=AC, bit7=USB (1=connected) |
| 0x02 | ?? |
| 0x03 | ?? |
| 0x04 | ?? |
| 0x06 | ?? |
| 0x07 | ?? |
| 0x08 | ?? – seemingly accessed after 0x07 |
| 0x09 | Battery level LSB (format/bounds unknown) |
| 0x0A | Battery level MSB |
| 0x0D | ?? |
| 0x0F | ?? |
| 0x18 | Backlight related – 0x90=on 0x10=off |
| 0x19 | Backlight related – maybe timeout/delay? |
Which battery level is read out of registers 0x09/0x0A seems to depend on settings in register 0x07.
Writes to register 0x07 (and 0x08):
90 06 - to turn on the CPU
D9 - to read current battery level
D0 - to read maximum battery level
D5 - ?? to read minimum battery level?? (unused)
00 07 - to turn off the CPU
Seems register 0x0D is set to 0xA0 after turning the CPU on/off?
Bit 5 in register 0x07 is some sort of ready bit that is checked after changing register 0x07 and before reading battery levels.