@waterwingz
After a long night of tinkering around with switch_mode_usb() i figured out my set_control_event() address was wrong. Signature Finder (stubs_entry.S) address is correct.
Since reverting to sigfinder address "ptpcam --chdk" --> mode command does work.
Check your set_control_event() address. Compare your firmware to SD990 or SD4000 to verify your set_control_event() address.
SD4000:
ROM:FF895504 set_control_event ; CODE XREF: sub_FF89570C
ROM:FF895504 ; sub_FF89576C:loc_FF8957C0
ROM:FF895504 AND R1, R0, #0xFF00 ; Sigfinder OK
ROM:FF895508 AND R12, R0, #0x40000000
ROM:FF89550C CMN R0, #1
ROM:FF895510 MOV R12, R12,LSR#30
ROM:FF895514 MOV R1, R1,LSR#8
ROM:FF895518 AND R2, R0, #0xFF
ROM:FF89551C MOV R3, R0,LSR#31
ROM:FF895520 BXEQ LR
ROM:FF895524 CMP R12, #0
ROM:FF895528 LDR R0, =0x3D460
ROM:FF89552C BNE loc_FF89554C
ROM:FF895530 MOV R12, #1
ROM:FF895534 CMP R3, #0
ROM:FF895538 LDR R3, [R0,R1,LSL#2]
ROM:FF89553C MOV R2, R12,LSL R2
ROM:FF895540 MVNEQ R2, R2
ROM:FF895544 ANDEQ R2, R3, R2
ROM:FF895548 ORRNE R2, R3, R2
ROM:FF89554C
ROM:FF89554C loc_FF89554C ; CODE XREF: set_control_event_sigfinder
ROM:FF89554C STR R2, [R0,R1,LSL#2]
ROM:FF895550 BX LR
ROM:FF895550 ; End of function set_control_event