The BCM590XX PMU can handle a power-on key (the responsible section is nicknamed PONKEY).
Key press detection
When a key is pressed, the internal IRQ for a key press (BCM59054_IRQ_POK_PRESSED/BCM59056_IRQ_PONKEYB_F) is raised; when it is released, the internal IRQ for a key release (BCM59054_IRQ_POK_RELEASED/BCM59056_IRQ_PONKEYB_R) is raised. A driver can interpret these IRQs to toggle a key on/off (in downstream, it's wired up to KEY_POWER by default.
Debounce interval
A debounce interval can be configured independently for button press and release. The debounce values are 3 bits wide and stored in PONKEYCTRL1.
For the BCM59054/BCM59056, the allowed values are 330ns, 1.2ms, 10ms, 50ms, 100ms, 500ms, 1000ms and 2000ms. For the BCM59039/BCM59042/BCM59055, the allowed values are undocumented, but different from BCM59054/56 - 3 is equal to 100ms (whereas it's 50ms on 54/56).
Timer
TODO. Seems like it might be possible to control long-press function using a timer (one of "poweroff", "restart" or "smart reset"). Relevant kernel sources, notably commented out.
Registers (BCM59054)
All of them are on MAP0.
PONKEYCTRL1 (0x08)
| Name | Bit | Description | 
| Reserved/unknown | 7 | Reserved/unknown | 
| RELEASE_DEB | 5:3 | Represents the release debounce. | 
| PRESS_DEB | 2:0 | Represents the press debounce. | 
PONKEYCTRL2 (0x09)
| Name | Bit | Description | 
| TX1_ACTION | 7:6 | TODO | 
| TX1_DLY | 5:3 | TODO | 
| TX1_DEB | 2:0 | TODO | 
PONKEYCTRL3 (0x0A)
| Name | Bit | Description | 
| TX2_ACTION | 7:6 | TODO | 
| TX2_DLY | 5:3 | TODO | 
| TX2_DEB | 2:0 | TODO | 
PONKEYCTRL4 (0x0B)
| Name | Bit | Description | 
| Reserved/unknown | 7 | Reserved/unknown | 
| KEY_PAD_LOCK_MODE | 6 | TODO | 
| KEY_PAD_LOCK | 5 | TODO | 
| POK_RESTART_EN | 4 | TODO | 
| Reserved/unknown | 3 | Reserved/unknown | 
| POK_WAKUP_DEB | 2:0 | TODO | 
PONKEYCTRL5 (0x0C)
| Name | Bit | Description | 
| Reserved/unknown | 7:0 | Reserved/unknown | 
PONKEYCTRL6 (0x0D)
| Name | Bit | Description | 
| Reserved/unknown | 7:5 | Reserved/unknown | 
| SMART_RST_DLY | 4:3 | TODO | 
| SMART_RST_STATUS | 2 | TODO | 
| SMART_RST_PWR_EN | 1 | TODO | 
| SMART_RST_EN | 0 | TODO | 
PONKEYCTRL7 (0x0E)
| Name | Bit | Description | 
| Reserved/unknown | 7:0 | Reserved/unknown | 
PONKEYCTRL8 (0x0F)
| Name | Bit | Description | 
| TX3_ACTION | 7:6 | TODO | 
| TX3_DLY | 5:3 | TODO | 
| TX3_DEB | 2:0 | TODO |