summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/export/system.h5
-rw-r--r--firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c3
-rw-r--r--firmware/target/arm/pcm-pp.c9
3 files changed, 12 insertions, 5 deletions
diff --git a/firmware/export/system.h b/firmware/export/system.h
index 3db38c9c7b..66a21332fc 100644
--- a/firmware/export/system.h
+++ b/firmware/export/system.h
@@ -314,11 +314,14 @@ static inline int set_irq_level(int level)
314 return (cpsr >> 7) & 1; 314 return (cpsr >> 7) & 1;
315} 315}
316 316
317static inline void enable_fiq(void(*fiq_handler)(void)) 317static inline void set_fiq_handler(void(*fiq_handler)(void))
318{ 318{
319 /* Install the FIQ handler */ 319 /* Install the FIQ handler */
320 *((unsigned int*)(15*4)) = (unsigned int)fiq_handler; 320 *((unsigned int*)(15*4)) = (unsigned int)fiq_handler;
321}
321 322
323static inline void enable_fiq(void)
324{
322 /* Clear FIQ disable bit */ 325 /* Clear FIQ disable bit */
323 asm volatile ( 326 asm volatile (
324 "mrs r0, cpsr \n"\ 327 "mrs r0, cpsr \n"\
diff --git a/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c b/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c
index 936b8362d7..04e1bbbd47 100644
--- a/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c
+++ b/firmware/target/arm/gigabeat/meg-fx/pcm-meg-fx.c
@@ -146,7 +146,8 @@ void pcm_play_dma_start(const void *addr, size_t size)
146 /* clear pending DMA interrupt */ 146 /* clear pending DMA interrupt */
147 SRCPND = 1<<19; 147 SRCPND = 1<<19;
148 148
149 enable_fiq(fiq); 149 set_fiq_handler(fiq);
150 enable_fiq();
150 151
151 /* unmask the DMA interrupt */ 152 /* unmask the DMA interrupt */
152 INTMSK &= ~(1<<19); 153 INTMSK &= ~(1<<19);
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c
index f6f71d774e..9ee3acd94e 100644
--- a/firmware/target/arm/pcm-pp.c
+++ b/firmware/target/arm/pcm-pp.c
@@ -217,7 +217,8 @@ void pcm_play_dma_start(const void *addr, size_t size)
217#endif 217#endif
218 218
219 /* Clear the FIQ disable bit in cpsr_c */ 219 /* Clear the FIQ disable bit in cpsr_c */
220 enable_fiq(fiq); 220 set_fiq_handler(fiq);
221 enable_fiq();
221 222
222 /* Enable playback FIFO */ 223 /* Enable playback FIFO */
223#if CONFIG_CPU == PP5020 224#if CONFIG_CPU == PP5020
@@ -290,7 +291,8 @@ void pcm_play_pause_unpause(void)
290{ 291{
291 /* Enable the FIFO and fill it */ 292 /* Enable the FIFO and fill it */
292 293
293 enable_fiq(fiq); 294 set_fiq_handler(fiq);
295 enable_fiq();
294 296
295 /* Enable playback FIFO */ 297 /* Enable playback FIFO */
296#if CONFIG_CPU == PP5020 298#if CONFIG_CPU == PP5020
@@ -459,7 +461,8 @@ void pcm_rec_dma_start(void *addr, size_t size)
459 /* enable record fifo */ 461 /* enable record fifo */
460 outl(inl(0x70002800) | 0x10000000, 0x70002800); 462 outl(inl(0x70002800) | 0x10000000, 0x70002800);
461 463
462 enable_fiq(fiq_record); 464 set_fiq_handler(fiq_record);
465 enable_fiq();
463} 466}
464 467
465void pcm_close_recording(void) 468void pcm_close_recording(void)