diff --git a/firmware/target/arm/s3c2440/dma-s3c2440.c b/firmware/target/arm/s3c2440/dma-s3c2440.c index 32be66d0a8..312a9bff68 100644 --- a/firmware/target/arm/s3c2440/dma-s3c2440.c +++ b/firmware/target/arm/s3c2440/dma-s3c2440.c @@ -34,13 +34,13 @@ static int dma_used = 0; /* Status flags */ #define STATUS_CHANNEL_ACTIVE (1<<0) -static struct dma_channel_state +static struct dma_channel_state { volatile unsigned status; void (*callback)(void); } dma_state [NUM_CHANNELS]; -struct dma_channel_regs +struct dma_channel_regs { volatile unsigned long disrc; volatile unsigned long disrcc; @@ -51,7 +51,7 @@ struct dma_channel_regs volatile unsigned long dcsrc; volatile unsigned long dcdst; volatile unsigned long dmasktrig; - volatile unsigned long reserved [7]; /* pad to 0x40 bytes */ + volatile unsigned long reserved [7]; /* pad to 0x40 bytes */ }; @@ -61,7 +61,7 @@ struct dma_channel_regs *dma_regs [4] = (struct dma_channel_regs *) &DISRC1, (struct dma_channel_regs *) &DISRC2, (struct dma_channel_regs *) &DISRC3 - } + } ; @@ -73,7 +73,7 @@ void dma_init(void) /* Clear pending source */ SRCPND = DMA0_MASK | DMA1_MASK | DMA2_MASK | DMA3_MASK; INTPND = DMA0_MASK | DMA1_MASK | DMA2_MASK | DMA3_MASK; - + /* Enable interrupt in controller */ bitclr32(&INTMOD, DMA0_MASK | DMA1_MASK | DMA2_MASK | DMA3_MASK); bitclr32(&INTMSK, DMA0_MASK | DMA1_MASK | DMA2_MASK | DMA3_MASK); @@ -101,15 +101,15 @@ void dma_release(void) } -inline void dma_disable_channel(int channel) +void dma_disable_channel(int channel) { - struct dma_channel_regs *regs = dma_regs [channel]; - + struct dma_channel_regs *regs = dma_regs [channel]; + /* disable the specified channel */ - + /* Reset the channel */ regs->dmasktrig |= DMASKTRIG_STOP; - + /* Wait for DMA controller to be ready */ while(regs->dmasktrig & DMASKTRIG_ON) ; @@ -120,35 +120,35 @@ inline void dma_disable_channel(int channel) void dma_enable_channel(int channel, struct dma_request *request) { struct dma_channel_regs *regs = dma_regs [channel]; - + /* TODO - transfer sizes (assumes word) */ - + if (DMA_GET_SRC(request->source_map, channel) == DMA_INVALID) panicf ("DMA: invalid channel"); - + /* setup a transfer on specified channel */ - dma_disable_channel (channel); - + dma_disable_channel(channel); + if((unsigned long)request->source_addr < UNCACHED_BASE_ADDR) regs->disrc = (unsigned long)request->source_addr + UNCACHED_BASE_ADDR; else regs->disrc = (unsigned long)request->source_addr; regs->disrcc = request->source_control; - + if((unsigned long)request->dest_addr < UNCACHED_BASE_ADDR) regs->didst = (unsigned long)request->dest_addr + UNCACHED_BASE_ADDR; else regs->didst = (unsigned long)request->dest_addr; regs->didstc = request->dest_control; - - regs->dcon = request->control | request->count | + + regs->dcon = request->control | request->count | DMA_GET_SRC(request->source_map, channel) * DCON_HWSRCSEL; dma_state [channel].callback = request->callback; - + /* Activate the channel */ commit_discard_dcache_range((void *)request->dest_addr, request->count * 4); - + dma_state [channel].status |= STATUS_CHANNEL_ACTIVE; regs->dmasktrig = DMASKTRIG_ON; @@ -157,7 +157,7 @@ void dma_enable_channel(int channel, struct dma_request *request) /* Start DMA */ regs->dmasktrig |= DMASKTRIG_SW_TRIG; } - + } /* ISRs */ @@ -168,7 +168,7 @@ static inline void generic_isr (unsigned channel) if (dma_state [channel].callback) /* call callback for relevant channel */ dma_state [channel].callback(); - + dma_state [channel].status &= ~STATUS_CHANNEL_ACTIVE; } } diff --git a/firmware/target/arm/s3c2440/dma-target.h b/firmware/target/arm/s3c2440/dma-target.h index bec1eadd0b..350a4a2d23 100644 --- a/firmware/target/arm/s3c2440/dma-target.h +++ b/firmware/target/arm/s3c2440/dma-target.h @@ -36,7 +36,7 @@ #error Unsupported target #endif -struct dma_request +struct dma_request { volatile void *source_addr; volatile void *dest_addr; @@ -51,7 +51,7 @@ struct dma_request void dma_init(void); void dma_enable_channel(int channel, struct dma_request *request); -inline void dma_disable_channel(int channel); +void dma_disable_channel(int channel); void dma_retain(void); void dma_release(void); diff --git a/firmware/target/arm/s3c2440/mini2440/touchscreen-mini2440.c b/firmware/target/arm/s3c2440/mini2440/touchscreen-mini2440.c index ce7c8d5dd7..4ab4a46351 100644 --- a/firmware/target/arm/s3c2440/mini2440/touchscreen-mini2440.c +++ b/firmware/target/arm/s3c2440/mini2440/touchscreen-mini2440.c @@ -1,6 +1,6 @@ /*************************************************************************** * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___void + * Open \______ \ ____ ____ | | _\_ |__ _______ ___void * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ @@ -25,6 +25,7 @@ #include "system.h" #include "stdlib.h" #include "button.h" +#include "tick.h" #include "touchscreen.h" #define NO_OF_TOUCH_DATA 5 @@ -99,9 +100,9 @@ void touchscreen_scan_device() static int touch_data_index = 0; int saveADCDLY; - - /* check touch state */ - if(ADCDAT1 & (1<<15)) + + /* check touch state */ + if(ADCDAT1 & (1<<15)) { return; } @@ -111,23 +112,23 @@ void touchscreen_scan_device() /* resets the index if the last touch could not be read 5 times */ touch_data_index = 0; } - - /* read touch data */ + + /* read touch data */ saveADCDLY = ADCDLY; - ADCDLY = 40000; /*delay ~0.8ms (1/50M)*4000 */ + ADCDLY = 40000; /*delay ~0.8ms (1/50M)*4000 */ ADCTSC = (1<<3)|(1<<2); /* pullup disable, seq x,y pos measure */ /* start adc */ - ADCCON|= 0x1; + ADCCON|= 0x1; /* wait for start and end */ while(ADCCON & 0x1); while(!(ADCCON & 0x8000)); x[touch_data_index] = ADCDAT0&0x3ff; y[touch_data_index] = ADCDAT1&0x3ff; - + ADCTSC = 0xd3; /* back to interrupt mode */ ADCDLY = saveADCDLY; - + touch_data_index++; if (touch_data_index > NO_OF_TOUCH_DATA - 1) @@ -161,18 +162,18 @@ int touchscreen_read_device(int *data, int *old_data) /* sort the 5 data taken and use the median value */ qsort(x, NO_OF_TOUCH_DATA, sizeof(short), short_cmp); qsort(y, NO_OF_TOUCH_DATA, sizeof(short), short_cmp); - + x_touch = last_x = x[(NO_OF_TOUCH_DATA - 1)/2]; y_touch = last_y = y[(NO_OF_TOUCH_DATA - 1)/2]; - + last_touch = current_tick; - + touch_hold = true; touch_available = false; } - + *old_data = *data = touch_to_pixels(x_touch, y_touch); - + btn |= touchscreen_to_pixels((*data&0xffff0000) >> 16, (*data&0x0000ffff), data); @@ -183,8 +184,6 @@ int touchscreen_read_device(int *data, int *old_data) /* put the touchscreen back into interrupt mode */ touch_hold = false; } - + return btn; } - - diff --git a/firmware/target/arm/s3c2440/sd-s3c2440.c b/firmware/target/arm/s3c2440/sd-s3c2440.c index 82fd60c711..5737366a88 100644 --- a/firmware/target/arm/s3c2440/sd-s3c2440.c +++ b/firmware/target/arm/s3c2440/sd-s3c2440.c @@ -799,7 +799,7 @@ int sd_read_sectors(IF_MD(int card_no,) sector_t start, int incount, ret = 0; /* assume success */ else #endif - ret = sd_transfer_sectors(card_no, start, incount, inbuf, false); + ret = sd_transfer_sectors(IF_MD_DRV(card_no), start, incount, inbuf, false); dbgprintf ("sd_read, ret=%d\n", ret); return ret; } @@ -827,7 +827,7 @@ int sd_write_sectors(IF_MD(int drive,) sector_t start, int count, return 0; /* assume success */ else #endif - return sd_transfer_sectors(drive, start, count, (void*)outbuf, true); + return sd_transfer_sectors(IF_MD_DRV(drive), start, count, (void*)outbuf, true); #endif } /*****************************************************************************/