Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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();
}
Exemplo n.º 3
0
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;
}