summaryrefslogtreecommitdiff
path: root/utils/hwpatcher/patch.S
diff options
context:
space:
mode:
Diffstat (limited to 'utils/hwpatcher/patch.S')
-rw-r--r--utils/hwpatcher/patch.S87
1 files changed, 87 insertions, 0 deletions
diff --git a/utils/hwpatcher/patch.S b/utils/hwpatcher/patch.S
new file mode 100644
index 0000000000..6c27e299d9
--- /dev/null
+++ b/utils/hwpatcher/patch.S
@@ -0,0 +1,87 @@
1.text
2.global _start
3_start:
4 b exec
5branch_addr:
6 .word kill
7hw_power_sts:
8#if defined(CREATIVE_ZEN)
9 .word 0x800440b0 /* STMP3700 */
10#else
11 .word 0x800440c0 /* IMX233 */
12#endif
13hw_pinctrl_din0:
14 .word 0x80018600
15hw_pinctrl_din1:
16 .word 0x80018610
17hw_pinctrl_din2:
18 .word 0x80018620
19kill:
20 ldr pc, branch_addr
21exec:
22#if defined(SANSA_FUZEPLUS)
23 /* check PSWITCH=1 (power button pressed) */
24 ldr r0, hw_power_sts
25 ldr r0, [r0]
26 mov r0, r0, lsr #20
27 and r0, #3
28 cmp r0, #1
29 bne ret
30 /* check B1P30=0 (volume down pressed) */
31 ldr r0, hw_pinctrl_din1
32 ldr r0, [r0]
33 mov r0, r0, lsr #30
34 ands r0, #1
35 beq kill
36#elif defined(CREATIVE_ZENXFI3)
37 /* check PSWITCH=1 (power button pressed) */
38 ldr r0, hw_power_sts
39 ldr r0, [r0]
40 mov r0, r0, lsr #20
41 and r0, #3
42 cmp r0, #1
43 bne ret
44 /* check B2P07=0 (volume down pressed) */
45 ldr r0, hw_pinctrl_din2
46 ldr r0, [r0]
47 mov r0, r0, lsr #7
48 ands r0, #1
49 beq kill
50#elif defined(CREATIVE_ZENXFI2)
51 /* check B0P11=0 (power button pressed) and B0P14 (select button pressed) */
52 ldr r0, hw_pinctrl_din0
53 ldr r0, [r0]
54 mov r0, r0, lsr #11
55 tst r0, #1
56 bne ret
57 mov r0, r0, lsr #3
58 tst r0, #1
59 beq kill
60#elif defined(CREATIVE_ZEN)
61 /* check PSWITCH=1 (power button pressed) */
62 ldr r0, hw_power_sts
63 ldr r0, [r0]
64 mov r0, r0, lsr #18
65 and r0, #3
66 cmp r0, #0
67 bne kill
68#elif defined(SONY_NWZ)
69 /* check PSWITCH=3 (power button pressed) */
70 ldr r0, hw_power_sts
71 ldr r0, [r0]
72 mov r0, r0, lsr #20
73 and r0, #3
74 cmp r0, #3
75 beq kill
76#elif defined(CREATIVE_ZENXFISTYLE)
77 /* check PSWITCH=1 (power button pressed) */
78 ldr r0, hw_power_sts
79 ldr r0, [r0]
80 mov r0, r0, lsr #20
81 and r0, #3
82 cmp r0, #1
83 beq kill
84#else
85#error implement me
86#endif
87ret: \ No newline at end of file