static int config_dma(void) { u32 i = 0; pr_debug("%s\n", __func__); /* fill descriptor table */ for (i = 0; i < 326; i++) { /* point to next desc table */ dma_desc_table[2 * i] = (unsigned long)&dma_desc_table[2 * i + 2]; } /* last descriptor points to first */ dma_desc_table[2 * 326] = (unsigned long)&dma_desc_table[0]; #ifdef CONFIG_FB_HITACHI_TX09_LANDSCAPE dma_desc_table[0 + 1] = (unsigned long)fb_buffer; for (i = 0; i < 7; i++) { /* blanking lines point to first line of fb_buffer */ dma_desc_table[2 * i + 1] = (unsigned long)fb_buffer + 319 * 2; } for (i = 7; i < 327; i++) { /* visible lines */ dma_desc_table[2 * i + 1] = (unsigned long)fb_buffer + (319 - (i - 7)) * 2; } #else /* portrait mode */ for (i = 0; i < 7; i++) { /* blanking lines point to first line of fb_buffer */ dma_desc_table[2 * i + 1] = (unsigned long)fb_buffer; } for (i = 7; i < 327; i++) { /* visible lines */ dma_desc_table[2 * i + 1] = (unsigned long)fb_buffer + 2 * 240 * (i - 7); } #endif #ifdef CONFIG_FB_HITACHI_TX09_LANDSCAPE set_dma_x_count(CH_PPI, 240); set_dma_x_modify(CH_PPI, 2 * 320); set_dma_y_count(CH_PPI, 0); set_dma_y_modify(CH_PPI, 0); set_dma_next_desc_addr(CH_PPI, (unsigned long)dma_desc_table[2 * 326]); #else set_dma_x_count(CH_PPI, 240); set_dma_x_modify(CH_PPI, 2); set_dma_y_count(CH_PPI, 0); set_dma_y_modify(CH_PPI, 0); set_dma_next_desc_addr(CH_PPI, (unsigned long)dma_desc_table[2 * 326]); #endif set_dma_config(CH_PPI, 0x7404); return 0; }
void sport_rx_start(struct sport_device *sport) { set_dma_next_desc_addr(sport->rx_dma_chan, sport->rx_desc); set_dma_config(sport->rx_dma_chan, DMAFLOW_LIST | DI_EN | WNR | compute_wdsize(sport->wdsize) | NDSIZE_6); enable_dma(sport->rx_dma_chan); sport->rx_regs->spctl |= SPORT_CTL_SPENPRI; SSYNC(); }
static int config_dma(void) { u32 i; if(landscape) { for (i=0;i<U_LINES;i++) { //blanking lines point to first line of fb_buffer dma_desc_table[2*i] = (unsigned long)&dma_desc_table[2*i+2]; dma_desc_table[2*i+1] = (unsigned long)fb_buffer; } for (i=U_LINES;i<U_LINES+LCD_Y_RES;i++) { // visible lines dma_desc_table[2*i] = (unsigned long)&dma_desc_table[2*i+2]; dma_desc_table[2*i+1] = (unsigned long)fb_buffer + (LCD_Y_RES+U_LINES-1-i)*2; } //last descriptor points to first dma_desc_table[2*(LCD_Y_RES+U_LINES-1)] = (unsigned long)&dma_desc_table[0]; set_dma_x_count(CH_PPI, LCD_X_RES); set_dma_x_modify(CH_PPI, LCD_Y_RES*(LCD_BBP/8)); set_dma_y_count(CH_PPI, 0); set_dma_y_modify(CH_PPI, 0); set_dma_next_desc_addr(CH_PPI, (void *)dma_desc_table[0]); set_dma_config(CH_PPI, DMAFLOW_LARGE | NDSIZE_4 | WDSIZE_16); } else { set_dma_config(CH_PPI, set_bfin_dma_config(DIR_READ, DMA_FLOW_AUTO, INTR_DISABLE, DIMENSION_2D, DATA_SIZE_16, DMA_NOSYNC_KEEP_DMA_BUF)); set_dma_x_count(CH_PPI, LCD_X_RES); set_dma_x_modify(CH_PPI,LCD_BBP/8); set_dma_y_count(CH_PPI, LCD_Y_RES+U_LINES); set_dma_y_modify(CH_PPI, LCD_BBP/8); set_dma_start_addr(CH_PPI, ((unsigned long) fb_buffer)); } return 0; }