| 
					
				 | 
			
			
				@@ -119,3 +119,126 @@ void omap_set_lcd_dma_b1_vxres(unsigned long vxres) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		BUG(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	lcd_dma.vxres = vxres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(omap_set_lcd_dma_b1_vxres); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void omap_set_lcd_dma_b1_scale(unsigned int xscale, unsigned int yscale) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (cpu_is_omap15xx()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		printk(KERN_ERR "DMA scale is not supported in 1510 mode\n"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BUG(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	lcd_dma.xscale = xscale; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	lcd_dma.yscale = yscale; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+EXPORT_SYMBOL(omap_set_lcd_dma_b1_scale); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+static void set_b1_regs(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned long top, bottom; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int es; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	u16 w; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned long en, fn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	long ei, fi; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned long vxres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	unsigned int xscale, yscale; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (lcd_dma.data_type) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case OMAP_DMA_DATA_TYPE_S8: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		es = 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case OMAP_DMA_DATA_TYPE_S16: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		es = 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case OMAP_DMA_DATA_TYPE_S32: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		es = 4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BUG(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	vxres = lcd_dma.vxres ? lcd_dma.vxres : lcd_dma.xres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	xscale = lcd_dma.xscale ? lcd_dma.xscale : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	yscale = lcd_dma.yscale ? lcd_dma.yscale : 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	BUG_ON(vxres < lcd_dma.xres); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PIXADDR(x, y) (lcd_dma.addr +					\ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		((y) * vxres * yscale + (x) * xscale) * es) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#define PIXSTEP(sx, sy, dx, dy) (PIXADDR(dx, dy) - PIXADDR(sx, sy) - es + 1) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	switch (lcd_dma.rotate) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case 0: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!lcd_dma.mirror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			/* 1510 DMA requires the bottom address to be 2 more 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			 * than the actual last memory access location. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (cpu_is_omap15xx() && 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				lcd_dma.data_type == OMAP_DMA_DATA_TYPE_S32) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					bottom += 2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(0, 0, 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(lcd_dma.xres - 1, 0, 0, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(lcd_dma.xres - 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(0, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(1, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(0, 0, lcd_dma.xres - 1, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		en = lcd_dma.xres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fn = lcd_dma.yres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case 90: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!lcd_dma.mirror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(0, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(lcd_dma.xres - 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(0, 1, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(0, 0, 1, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(0, 1, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(1, 0, 0, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		en = lcd_dma.yres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fn = lcd_dma.xres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case 180: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!lcd_dma.mirror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(1, 0, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(0, 1, lcd_dma.xres - 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(0, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(lcd_dma.xres - 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(0, 0, 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(lcd_dma.xres - 1, 1, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		en = lcd_dma.xres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fn = lcd_dma.yres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	case 270: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (!lcd_dma.mirror) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(lcd_dma.xres - 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(0, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(0, 0, 0, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(1, lcd_dma.yres - 1, 0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			top = PIXADDR(0, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bottom = PIXADDR(lcd_dma.xres - 1, lcd_dma.yres - 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			ei = PIXSTEP(0, 0, 0, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			fi = PIXSTEP(0, lcd_dma.yres - 1, 1, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		en = lcd_dma.yres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		fn = lcd_dma.xres; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	default: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		BUG(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return;	/* Suppress warning about uninitialized vars */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (cpu_is_omap15xx()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		omap_writew(top >> 16, OMAP1510_DMA_LCD_TOP_F1_U); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		omap_writew(top, OMAP1510_DMA_LCD_TOP_F1_L); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		omap_writew(bottom >> 16, OMAP1510_DMA_LCD_BOT_F1_U); 
			 |