summaryrefslogtreecommitdiff
path: root/linux/drivers/media/common/saa7146_hlp.c
diff options
context:
space:
mode:
Diffstat (limited to 'linux/drivers/media/common/saa7146_hlp.c')
-rw-r--r--linux/drivers/media/common/saa7146_hlp.c26
1 files changed, 12 insertions, 14 deletions
diff --git a/linux/drivers/media/common/saa7146_hlp.c b/linux/drivers/media/common/saa7146_hlp.c
index 4ebbfa2ff..ec6b97aa8 100644
--- a/linux/drivers/media/common/saa7146_hlp.c
+++ b/linux/drivers/media/common/saa7146_hlp.c
@@ -595,9 +595,10 @@ void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int w_heigh
/* calculate memory offsets for picture, look if we shall top-down-flip */
vdma1.pitch = 2*b_bpl;
if ( 0 == td_flip ) {
- vdma1.base_odd = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8));
- vdma1.base_even = vdma1.base_odd + (vdma1.pitch / 2);
- vdma1.prot_addr = vdma1.base_odd + (w_height * (vdma1.pitch / 2));
+ vdma1.base_even = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8));
+ vdma1.base_odd = vdma1.base_even + (vdma1.pitch / 2);
+ vdma1.prot_addr = vdma1.base_even + (w_height * (vdma1.pitch / 2));
+ printk("0x%08x,0x%08x\n",vdma1.base_even,vdma1.base_odd);
}
else {
vdma1.base_even = (u32)base + ((w_y+w_height) * (vdma1.pitch/2)) + (w_x * (b_depth / 8));
@@ -622,15 +623,7 @@ void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int w_heigh
vdma1.base_page = 0;
vdma1.num_line_byte = (dev->standard->v_field<<16)+dev->standard->h_pixels;
- saa7146_write(dev, BASE_EVEN1, vdma1.base_even);
- saa7146_write(dev, BASE_ODD1, vdma1.base_odd);
- saa7146_write(dev, PROT_ADDR1, vdma1.prot_addr);
- saa7146_write(dev, BASE_PAGE1, vdma1.base_page);
- saa7146_write(dev, PITCH1, vdma1.pitch);
- saa7146_write(dev, NUM_LINE_BYTE1, vdma1.num_line_byte);
-
- /* update the video dma 1 registers */
- saa7146_write(dev, MC2, (MASK_02 | MASK_18));
+ saa7146_write_out_dma(dev, 1, &vdma1);
}
static
@@ -725,8 +718,13 @@ void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_vi
/* calculate starting address */
where = (which-1)*0x18;
- saa7146_write(dev, where, vdma->base_odd);
- saa7146_write(dev, where+0x04, vdma->base_even);
+ if( 0 != (dev->ext->flags & SAA7146_EXT_SWAP_ODD_EVEN)) {
+ saa7146_write(dev, where, vdma->base_even);
+ saa7146_write(dev, where+0x04, vdma->base_odd);
+ } else {
+ saa7146_write(dev, where, vdma->base_odd);
+ saa7146_write(dev, where+0x04, vdma->base_even);
+ }
saa7146_write(dev, where+0x08, vdma->prot_addr);
saa7146_write(dev, where+0x0c, vdma->pitch);
saa7146_write(dev, where+0x10, vdma->base_page);