summaryrefslogtreecommitdiff
path: root/firmware/target/arm
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/as3525/ascodec-as3525.c6
-rw-r--r--firmware/target/arm/as3525/audio-as3525.c2
-rw-r--r--firmware/target/arm/as3525/dma-pl081.c4
-rw-r--r--firmware/target/arm/as3525/kernel-as3525.c2
-rw-r--r--firmware/target/arm/as3525/pcm-as3525.c12
-rw-r--r--firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c2
-rw-r--r--firmware/target/arm/as3525/sd-as3525.c4
-rw-r--r--firmware/target/arm/as3525/sd-as3525v2.c6
-rw-r--r--firmware/target/arm/as3525/timer-as3525.c14
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525.c4
-rw-r--r--firmware/target/arm/as3525/usb-drv-as3525v2.c2
11 files changed, 35 insertions, 23 deletions
diff --git a/firmware/target/arm/as3525/ascodec-as3525.c b/firmware/target/arm/as3525/ascodec-as3525.c
index ca77be32a4..822d48e241 100644
--- a/firmware/target/arm/as3525/ascodec-as3525.c
+++ b/firmware/target/arm/as3525/ascodec-as3525.c
@@ -160,7 +160,7 @@ static void ascodec_finish_req(struct ascodec_request *req)
160 */ 160 */
161 while (i2c_busy()); 161 while (i2c_busy());
162 162
163 /* disable clock */ 163 /* disable clock - already in IRQ context */
164 CGU_PERI &= ~CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE; 164 CGU_PERI &= ~CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE;
165 165
166 req->status = 1; 166 req->status = 1;
@@ -205,7 +205,7 @@ static void ascodec_start_req(struct ascodec_request *req)
205 int unmask = 0; 205 int unmask = 0;
206 206
207 /* enable clock */ 207 /* enable clock */
208 CGU_PERI |= CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE; 208 bitset32(&CGU_PERI, CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE);
209 209
210 /* start transfer */ 210 /* start transfer */
211 I2C2_SADDR = req->index; 211 I2C2_SADDR = req->index;
@@ -266,7 +266,7 @@ void ascodec_init(void)
266 wakeup_init(&adc_wkup); 266 wakeup_init(&adc_wkup);
267 267
268 /* enable clock */ 268 /* enable clock */
269 CGU_PERI |= CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE; 269 bitset32(&CGU_PERI, CGU_I2C_AUDIO_MASTER_CLOCK_ENABLE);
270 270
271 /* prescaler for i2c clock */ 271 /* prescaler for i2c clock */
272 prescaler = AS3525_I2C_PRESCALER; 272 prescaler = AS3525_I2C_PRESCALER;
diff --git a/firmware/target/arm/as3525/audio-as3525.c b/firmware/target/arm/as3525/audio-as3525.c
index 8dd85929c0..10c6161881 100644
--- a/firmware/target/arm/as3525/audio-as3525.c
+++ b/firmware/target/arm/as3525/audio-as3525.c
@@ -29,7 +29,7 @@ int audio_channels = 2;
29 29
30void audio_set_output_source(int source) 30void audio_set_output_source(int source)
31{ 31{
32 CGU_PERI |= CGU_I2SOUT_APB_CLOCK_ENABLE; 32 bitset32(&CGU_PERI, CGU_I2SOUT_APB_CLOCK_ENABLE);
33 if (source == AUDIO_SRC_PLAYBACK) 33 if (source == AUDIO_SRC_PLAYBACK)
34 I2SOUT_CONTROL &= ~(1<<5); 34 I2SOUT_CONTROL &= ~(1<<5);
35 else 35 else
diff --git a/firmware/target/arm/as3525/dma-pl081.c b/firmware/target/arm/as3525/dma-pl081.c
index 149488c7d1..b8c12257de 100644
--- a/firmware/target/arm/as3525/dma-pl081.c
+++ b/firmware/target/arm/as3525/dma-pl081.c
@@ -33,7 +33,7 @@ void dma_retain(void)
33{ 33{
34 if(++dma_used == 1) 34 if(++dma_used == 1)
35 { 35 {
36 CGU_PERI |= CGU_DMA_CLOCK_ENABLE; 36 bitset32(&CGU_PERI, CGU_DMA_CLOCK_ENABLE);
37 DMAC_CONFIGURATION |= (1<<0); 37 DMAC_CONFIGURATION |= (1<<0);
38 } 38 }
39} 39}
@@ -43,7 +43,7 @@ void dma_release(void)
43 if(--dma_used == 0) 43 if(--dma_used == 0)
44 { 44 {
45 DMAC_CONFIGURATION &= ~(1<<0); 45 DMAC_CONFIGURATION &= ~(1<<0);
46 CGU_PERI &= ~CGU_DMA_CLOCK_ENABLE; 46 bitclr32(&CGU_PERI, CGU_DMA_CLOCK_ENABLE);
47 } 47 }
48 if (dma_used < 0) 48 if (dma_used < 0)
49 panicf("dma_used < 0!"); 49 panicf("dma_used < 0!");
diff --git a/firmware/target/arm/as3525/kernel-as3525.c b/firmware/target/arm/as3525/kernel-as3525.c
index 34ef54cfdf..d44b120387 100644
--- a/firmware/target/arm/as3525/kernel-as3525.c
+++ b/firmware/target/arm/as3525/kernel-as3525.c
@@ -168,7 +168,7 @@ void tick_start(unsigned int interval_in_ms)
168{ 168{
169 int cycles = KERNEL_TIMER_FREQ / 1000 * interval_in_ms; 169 int cycles = KERNEL_TIMER_FREQ / 1000 * interval_in_ms;
170 170
171 CGU_PERI |= CGU_TIMER2_CLOCK_ENABLE; /* enable peripheral */ 171 bitset32(&CGU_PERI, CGU_TIMER2_CLOCK_ENABLE); /* enable peripheral */
172 VIC_INT_ENABLE = INTERRUPT_TIMER2; /* enable interrupt */ 172 VIC_INT_ENABLE = INTERRUPT_TIMER2; /* enable interrupt */
173 173
174 set_timer2_cycles_per_tick(cycles); 174 set_timer2_cycles_per_tick(cycles);
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c
index 8c5bb67076..720f615ba9 100644
--- a/firmware/target/arm/as3525/pcm-as3525.c
+++ b/firmware/target/arm/as3525/pcm-as3525.c
@@ -103,7 +103,7 @@ void pcm_play_dma_start(const void *addr, size_t size)
103 dma_size = size; 103 dma_size = size;
104 dma_start_addr = (unsigned char*)addr; 104 dma_start_addr = (unsigned char*)addr;
105 105
106 CGU_PERI |= CGU_I2SOUT_APB_CLOCK_ENABLE; 106 bitset32(&CGU_PERI, CGU_I2SOUT_APB_CLOCK_ENABLE);
107 CGU_AUDIO |= (1<<11); 107 CGU_AUDIO |= (1<<11);
108 108
109 dma_retain(); 109 dma_retain();
@@ -121,7 +121,7 @@ void pcm_play_dma_stop(void)
121 121
122 dma_release(); 122 dma_release();
123 123
124 CGU_PERI &= ~CGU_I2SOUT_APB_CLOCK_ENABLE; 124 bitclr32(&CGU_PERI, CGU_I2SOUT_APB_CLOCK_ENABLE);
125 CGU_AUDIO &= ~(1<<11); 125 CGU_AUDIO &= ~(1<<11);
126} 126}
127 127
@@ -137,7 +137,7 @@ void pcm_play_dma_pause(bool pause)
137 137
138void pcm_play_dma_init(void) 138void pcm_play_dma_init(void)
139{ 139{
140 CGU_PERI |= CGU_I2SOUT_APB_CLOCK_ENABLE; 140 bitset32(&CGU_PERI, CGU_I2SOUT_APB_CLOCK_ENABLE);
141 141
142 I2SOUT_CONTROL = (1<<6)|(1<<3) /* enable dma, stereo */; 142 I2SOUT_CONTROL = (1<<6)|(1<<3) /* enable dma, stereo */;
143 143
@@ -339,7 +339,8 @@ void pcm_rec_dma_stop(void)
339 I2SIN_CONTROL &= ~(1<<11); /* disable dma */ 339 I2SIN_CONTROL &= ~(1<<11); /* disable dma */
340 340
341 CGU_AUDIO &= ~((1<<23)|(1<<11)); 341 CGU_AUDIO &= ~((1<<23)|(1<<11));
342 CGU_PERI &= ~(CGU_I2SIN_APB_CLOCK_ENABLE|CGU_I2SOUT_APB_CLOCK_ENABLE); 342 bitclr32(&CGU_PERI, CGU_I2SIN_APB_CLOCK_ENABLE |
343 CGU_I2SOUT_APB_CLOCK_ENABLE);
343} 344}
344 345
345 346
@@ -354,7 +355,8 @@ void pcm_rec_dma_start(void *addr, size_t size)
354 355
355 dma_retain(); 356 dma_retain();
356 357
357 CGU_PERI |= CGU_I2SIN_APB_CLOCK_ENABLE|CGU_I2SOUT_APB_CLOCK_ENABLE; 358 bitset32(&CGU_PERI, CGU_I2SIN_APB_CLOCK_ENABLE |
359 CGU_I2SOUT_APB_CLOCK_ENABLE);
358 CGU_AUDIO |= ((1<<23)|(1<<11)); 360 CGU_AUDIO |= ((1<<23)|(1<<11));
359 361
360 I2SIN_CONTROL |= (1<<11)|(1<<5); /* enable dma, 14bits samples */ 362 I2SIN_CONTROL |= (1<<11)|(1<<5); /* enable dma, 14bits samples */
diff --git a/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c b/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
index 1a94547505..7be0199df1 100644
--- a/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
+++ b/firmware/target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
@@ -28,7 +28,7 @@
28 28
29void lcd_hw_init(void) 29void lcd_hw_init(void)
30{ 30{
31 CGU_PERI |= CGU_SSP_CLOCK_ENABLE; 31 bitset32(&CGU_PERI, CGU_SSP_CLOCK_ENABLE);
32 32
33 SSP_CPSR = AS3525_SSP_PRESCALER; /* OF = 0x10 */ 33 SSP_CPSR = AS3525_SSP_PRESCALER; /* OF = 0x10 */
34 SSP_CR0 = (1<<7) | (1<<6) | 7; /* Motorola SPI frame format, 8 bits */ 34 SSP_CR0 = (1<<7) | (1<<6) | 7; /* Motorola SPI frame format, 8 bits */
diff --git a/firmware/target/arm/as3525/sd-as3525.c b/firmware/target/arm/as3525/sd-as3525.c
index 9bfb2a9412..6e5845cf0a 100644
--- a/firmware/target/arm/as3525/sd-as3525.c
+++ b/firmware/target/arm/as3525/sd-as3525.c
@@ -561,9 +561,9 @@ int sd_init(void)
561 | (AS3525_IDE_DIV << 2) 561 | (AS3525_IDE_DIV << 2)
562 | AS3525_CLK_PLLA; /* clock source = PLLA */ 562 | AS3525_CLK_PLLA; /* clock source = PLLA */
563 563
564 CGU_PERI |= CGU_NAF_CLOCK_ENABLE; 564 bitset32(&CGU_PERI, CGU_NAF_CLOCK_ENABLE);
565#ifdef HAVE_MULTIDRIVE 565#ifdef HAVE_MULTIDRIVE
566 CGU_PERI |= CGU_MCI_CLOCK_ENABLE; 566 bitset32(&CGU_PERI, CGU_MCI_CLOCK_ENABLE);
567 CCU_IO &= ~(1<<3); /* bits 3:2 = 01, xpd is SD interface */ 567 CCU_IO &= ~(1<<3); /* bits 3:2 = 01, xpd is SD interface */
568 CCU_IO |= (1<<2); 568 CCU_IO |= (1<<2);
569#endif 569#endif
diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c
index 238cd7a5eb..9756d9e1f0 100644
--- a/firmware/target/arm/as3525/sd-as3525v2.c
+++ b/firmware/target/arm/as3525/sd-as3525v2.c
@@ -708,7 +708,7 @@ int sd_init(void)
708{ 708{
709 int ret; 709 int ret;
710 710
711 CGU_PERI |= CGU_MCI_CLOCK_ENABLE; 711 bitset32(&CGU_PERI, CGU_MCI_CLOCK_ENABLE);
712 712
713 CGU_IDE = (1<<7) /* AHB interface enable */ 713 CGU_IDE = (1<<7) /* AHB interface enable */
714 | (AS3525_IDE_DIV << 2) 714 | (AS3525_IDE_DIV << 2)
@@ -974,7 +974,7 @@ void sd_enable(bool on)
974{ 974{
975 if (on) 975 if (on)
976 { 976 {
977 CGU_PERI |= CGU_MCI_CLOCK_ENABLE; 977 bitset32(&CGU_PERI, CGU_MCI_CLOCK_ENABLE);
978 CGU_IDE |= (1<<7); /* AHB interface enable */ 978 CGU_IDE |= (1<<7); /* AHB interface enable */
979 CGU_MEMSTICK |= (1<<7); /* interface enable */ 979 CGU_MEMSTICK |= (1<<7); /* interface enable */
980 CGU_SDSLOT |= (1<<7); /* interface enable */ 980 CGU_SDSLOT |= (1<<7); /* interface enable */
@@ -984,7 +984,7 @@ void sd_enable(bool on)
984 CGU_SDSLOT &= ~(1<<7); /* interface enable */ 984 CGU_SDSLOT &= ~(1<<7); /* interface enable */
985 CGU_MEMSTICK &= ~(1<<7); /* interface enable */ 985 CGU_MEMSTICK &= ~(1<<7); /* interface enable */
986 CGU_IDE &= ~(1<<7); /* AHB interface enable */ 986 CGU_IDE &= ~(1<<7); /* AHB interface enable */
987 CGU_PERI &= ~CGU_MCI_CLOCK_ENABLE; 987 bitclr32(&CGU_PERI, CGU_MCI_CLOCK_ENABLE);
988 } 988 }
989} 989}
990 990
diff --git a/firmware/target/arm/as3525/timer-as3525.c b/firmware/target/arm/as3525/timer-as3525.c
index f5ff60e0f8..420eb489fb 100644
--- a/firmware/target/arm/as3525/timer-as3525.c
+++ b/firmware/target/arm/as3525/timer-as3525.c
@@ -19,7 +19,8 @@
19* 19*
20****************************************************************************/ 20****************************************************************************/
21 21
22#include "as3525.h" 22#include "config.h"
23#include "system.h"
23#include "timer.h" 24#include "timer.h"
24#include "stdlib.h" 25#include "stdlib.h"
25 26
@@ -33,6 +34,8 @@ void INT_TIMER1(void)
33 34
34bool timer_set(long cycles, bool start) 35bool timer_set(long cycles, bool start)
35{ 36{
37 int oldstatus = disable_irq_save();
38
36 if (start) 39 if (start)
37 { 40 {
38 if (pfn_unregister != NULL) 41 if (pfn_unregister != NULL)
@@ -50,19 +53,26 @@ bool timer_set(long cycles, bool start)
50 TIMER_PERIODIC | 53 TIMER_PERIODIC |
51 TIMER_INT_ENABLE | 54 TIMER_INT_ENABLE |
52 TIMER_32_BIT; 55 TIMER_32_BIT;
56
57 restore_irq(oldstatus);
58
53 return true; 59 return true;
54} 60}
55 61
56bool timer_start(void) 62bool timer_start(void)
57{ 63{
58 CGU_PERI |= CGU_TIMER1_CLOCK_ENABLE; /* enable peripheral */ 64 int oldstatus = disable_irq_save();
65 CGU_PERI |= CGU_TIMER1_CLOCK_ENABLE; /* enable peripheral */
59 VIC_INT_ENABLE = INTERRUPT_TIMER1; 66 VIC_INT_ENABLE = INTERRUPT_TIMER1;
67 restore_irq(oldstatus);
60 return true; 68 return true;
61} 69}
62 70
63void timer_stop(void) 71void timer_stop(void)
64{ 72{
73 int oldstatus = disable_irq_save();
65 TIMER1_CONTROL &= 0x10; /* disable timer 1 (don't modify bit 4) */ 74 TIMER1_CONTROL &= 0x10; /* disable timer 1 (don't modify bit 4) */
66 VIC_INT_EN_CLEAR = INTERRUPT_TIMER1; /* disable interrupt */ 75 VIC_INT_EN_CLEAR = INTERRUPT_TIMER1; /* disable interrupt */
67 CGU_PERI &= ~CGU_TIMER1_CLOCK_ENABLE; /* disable peripheral */ 76 CGU_PERI &= ~CGU_TIMER1_CLOCK_ENABLE; /* disable peripheral */
77 restore_irq(oldstatus);
68} 78}
diff --git a/firmware/target/arm/as3525/usb-drv-as3525.c b/firmware/target/arm/as3525/usb-drv-as3525.c
index 88ebf671ec..f98db62596 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525.c
@@ -236,7 +236,7 @@ void usb_drv_init(void)
236 ascodec_write(AS3514_CVDD_DCDC3, ascodec_read(AS3514_CVDD_DCDC3) | 1<<2); 236 ascodec_write(AS3514_CVDD_DCDC3, ascodec_read(AS3514_CVDD_DCDC3) | 1<<2);
237 237
238 /* AHB part */ 238 /* AHB part */
239 CGU_PERI |= CGU_USB_CLOCK_ENABLE; 239 bitset32(&CGU_PERI, CGU_USB_CLOCK_ENABLE);
240 240
241 /* reset AHB */ 241 /* reset AHB */
242 CCU_SRC = CCU_SRC_USB_AHB_EN; 242 CCU_SRC = CCU_SRC_USB_AHB_EN;
@@ -319,7 +319,7 @@ void usb_drv_exit(void)
319 USB_DEV_INTR_MASK = 0xffffffff; 319 USB_DEV_INTR_MASK = 0xffffffff;
320 VIC_INT_EN_CLEAR = INTERRUPT_USB; 320 VIC_INT_EN_CLEAR = INTERRUPT_USB;
321 CGU_USB &= ~(1<<5); 321 CGU_USB &= ~(1<<5);
322 CGU_PERI &= ~CGU_USB_CLOCK_ENABLE; 322 bitclr32(&CGU_PERI, CGU_USB_CLOCK_ENABLE);
323 /* Disable UVDD generating LDO */ 323 /* Disable UVDD generating LDO */
324 ascodec_write(AS3515_USB_UTIL, ascodec_read(AS3515_USB_UTIL) & ~(1<<4)); 324 ascodec_write(AS3515_USB_UTIL, ascodec_read(AS3515_USB_UTIL) & ~(1<<4));
325 usb_disable_pll(); 325 usb_disable_pll();
diff --git a/firmware/target/arm/as3525/usb-drv-as3525v2.c b/firmware/target/arm/as3525/usb-drv-as3525v2.c
index e324a168ac..2c0ca7011c 100644
--- a/firmware/target/arm/as3525/usb-drv-as3525v2.c
+++ b/firmware/target/arm/as3525/usb-drv-as3525v2.c
@@ -122,7 +122,7 @@ static void as3525v2_connect(void)
122{ 122{
123 logf("usb-drv: init as3525v2"); 123 logf("usb-drv: init as3525v2");
124 /* 1) enable usb core clock */ 124 /* 1) enable usb core clock */
125 CGU_PERI |= CGU_USB_CLOCK_ENABLE; 125 bitset32(&CGU_PERI, CGU_USB_CLOCK_ENABLE);
126 usb_delay(); 126 usb_delay();
127 /* 2) enable usb phy clock */ 127 /* 2) enable usb phy clock */
128 /* PHY clock */ 128 /* PHY clock */