diff options
Diffstat (limited to 'linux/drivers/media/common/saa7146_hlp.c')
-rw-r--r-- | linux/drivers/media/common/saa7146_hlp.c | 26 |
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); |