diff options
Diffstat (limited to 'firmware/target/arm/as3525/dbop-as3525.c')
-rw-r--r-- | firmware/target/arm/as3525/dbop-as3525.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/firmware/target/arm/as3525/dbop-as3525.c b/firmware/target/arm/as3525/dbop-as3525.c index 1730290d46..5ca551ca70 100644 --- a/firmware/target/arm/as3525/dbop-as3525.c +++ b/firmware/target/arm/as3525/dbop-as3525.c | |||
@@ -30,6 +30,8 @@ | |||
30 | #define DBOP_PRECHARGE 0xF0FF | 30 | #define DBOP_PRECHARGE 0xF0FF |
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #if CONFIG_CPU == AS3525 | ||
34 | /* doesn't work with the new ams sansas so far and is not needed */ | ||
33 | static short int dbop_input_value = 0; | 35 | static short int dbop_input_value = 0; |
34 | 36 | ||
35 | /* read the DBOP data pins */ | 37 | /* read the DBOP data pins */ |
@@ -77,13 +79,24 @@ unsigned short dbop_debug(void) | |||
77 | return dbop_input_value; | 79 | return dbop_input_value; |
78 | } | 80 | } |
79 | 81 | ||
82 | #endif | ||
83 | |||
80 | static inline void dbop_set_mode(int mode) | 84 | static inline void dbop_set_mode(int mode) |
81 | { | 85 | { |
82 | int delay = 10; | 86 | int delay = 10; |
83 | if (mode == 32 && (!(DBOP_CTRL & (1<<13|1<<14)))) | 87 | unsigned long ctrl = DBOP_CTRL; |
84 | DBOP_CTRL |= (1<<13|1<<14); | 88 | int curr_mode = (DBOP_CTRL >> 13) & 0x3; // bits 14:13 |
85 | else if (mode == 16 && (DBOP_CTRL & (1<<13|1<<14))) | 89 | #ifdef SANSA_FUZEV2 |
86 | DBOP_CTRL &= ~(1<<14|1<<13); | 90 | if (mode == 32 && curr_mode != 1<<1) |
91 | DBOP_CTRL = (ctrl & ~(1<<13)) | (1<<14); // 2 serial half words | ||
92 | else if (mode == 16 && curr_mode != 1<<0) | ||
93 | DBOP_CTRL = (ctrl & ~(1<<14)) | (1<<13); // 2 serial bytes | ||
94 | #else | ||
95 | if (mode == 32 && curr_mode == 0) | ||
96 | DBOP_CTRL = ctrl | (1<<13|1<<14); /* 2 serial half words */ | ||
97 | else if (mode == 16 && curr_mode == (1<<1|1<<0)) | ||
98 | DBOP_CTRL = ctrl & ~(1<<14|1<<13); /* 1 serial half word */ | ||
99 | #endif | ||
87 | else | 100 | else |
88 | return; | 101 | return; |
89 | while(delay--) asm volatile("nop"); | 102 | while(delay--) asm volatile("nop"); |