GPIO Services: Difference between revisions
		
		
		
		Jump to navigation
		Jump to search
		
| No edit summary | |||
| Line 64: | Line 64: | ||
| |- | |- | ||
| | 0x00070040 | | 0x00070040 | ||
| | GetIRGPIO(u32  | | GetIRGPIO(u32 bitmask) Output u32 is written to cmdreply[2]. | ||
| | 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028 | | 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028 | ||
| |- | |- | ||
| Line 78: | Line 78: | ||
| | [[GPIO:UnbindInterrupt|UnbindInterrupt]] | | [[GPIO:UnbindInterrupt|UnbindInterrupt]] | ||
| | None | | None | ||
| |} | |||
| =GPIO Bitmask= | |||
| The bitmask used by GetIRGPIO(and likely others) determines which bits in the GPIO registers to access. The output value from GetIRGPIO uses the same format as the bitmask: the values of bits in the output field are set to the value of GPIO data when those bits are set in the input bitmask. | |||
| {| class="wikitable" border="1" | |||
| |- | |||
| !  Bits in the bitmask | |||
| !  Register | |||
| !  Bits from register | |||
| |- | |||
| | 0-2 (0x7) | |||
| | 0x10147000 | |||
| | 0-2 | |||
| |- | |||
| | 3-4 (0x18) | |||
| | 0x10147010 | |||
| | 0-1 | |||
| |- | |||
| | 5 (0x20) | |||
| | 0x10147014 | |||
| | 0 | |||
| |- | |||
| | 6-17 (0x3FFC0) | |||
| | 0x10147020 | |||
| | 0-11 | |||
| |- | |||
| | 18 (0x40000) | |||
| | 0x10147028 | |||
| | 0 | |||
| |} | |} | ||
Revision as of 21:14, 19 January 2017
GPIO Service Names
| Service name | Permitted interrupts bitmasks | 
|---|---|
| gpio:CDC | 0x48 | 
| gpio:MCU | 0x48020 | 
| gpio:HID | 0x4301 | 
| gpio:NWM | 0x40020 | 
| gpio:IR | 0xEC0 | 
| gpio:NFC | 0x13000 | 
| gpio:QTM | 0x20000 | 
For the mapping between interrupts bitmasks and IRQs see: GPIO:BindInterrupt#Supported_values.
The commands for these services are identical.
GPIO Services
| Command Header | Description | Uses GPIO Regs | 
|---|---|---|
| 0x0001.... | ?(u32 unk1,u32* ret) | 0x10147010, 0x10147020 | 
| 0x00020080 | ?(u32 unk1,u32 unk2) | 0x10147010, 0x10147020 | 
| 0x0003.... | ?(u32 unk1,u32* ret) | 0x10147010, 0x10147024 | 
| 0x00040080 | ?(u32 unk1,u32 unk2) | 0x10147010, 0x10147024 | 
| 0x0005.... | ?(u32 unk1,u32* ret) | 0x10147010, 0x10147024 | 
| 0x00060080 | ?(u32 unk1,u32 unk2) | 0x10147010, 0x10147024 | 
| 0x00070040 | GetIRGPIO(u32 bitmask) Output u32 is written to cmdreply[2]. | 0x10147000, 0x10147010, 0x10147014, 0x10147020, 0x10147028 | 
| 0x00080080 | SetIRGPIO(u32 unk1,u32 unk2) | 0x10147010, 0x10147014, 0x10147020, 0x10147028 | 
| 0x00090082 | BindInterrupt | None | 
| 0x000A0042 | UnbindInterrupt | None | 
GPIO Bitmask
The bitmask used by GetIRGPIO(and likely others) determines which bits in the GPIO registers to access. The output value from GetIRGPIO uses the same format as the bitmask: the values of bits in the output field are set to the value of GPIO data when those bits are set in the input bitmask.
| Bits in the bitmask | Register | Bits from register | 
|---|---|---|
| 0-2 (0x7) | 0x10147000 | 0-2 | 
| 3-4 (0x18) | 0x10147010 | 0-1 | 
| 5 (0x20) | 0x10147014 | 0 | 
| 6-17 (0x3FFC0) | 0x10147020 | 0-11 | 
| 18 (0x40000) | 0x10147028 | 0 |