summaryrefslogtreecommitdiffstats
path: root/sys/dev/bktr/bktr_core.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/bktr/bktr_core.c')
-rw-r--r--sys/dev/bktr/bktr_core.c28
1 files changed, 11 insertions, 17 deletions
diff --git a/sys/dev/bktr/bktr_core.c b/sys/dev/bktr/bktr_core.c
index e55e6f2..a6158c5 100644
--- a/sys/dev/bktr/bktr_core.c
+++ b/sys/dev/bktr/bktr_core.c
@@ -702,11 +702,11 @@ common_bktr_intr( void *arg )
/*
- * Process the VBI data if it is being captured. We do this once
+ * Process the VBI data if /dev/vbi is open. We do this after
* both Odd and Even VBI data is captured. Therefore we do this
* in the Even field interrupt handler.
*/
- if ((bktr->vbiflags & VBI_CAPTURE)&&(field==EVEN_F)) {
+ if ((bktr->vbiflags & VBI_OPEN)&&(field==EVEN_F)) {
/* Put VBI data into circular buffer */
vbidecode(bktr);
@@ -2527,7 +2527,8 @@ static bool_t split(bktr_reg_t * bktr, volatile u_long **dma_prog, int width ,
flag = OP_SOL | OP_EOL;
} else if (bktr->current_col == 0 ) {
flag = OP_SOL;
- } else if (bktr->current_col == cols) {
+ } else if (bktr->current_col == cols
+ || bktr->current_col + width >= cols) {
flag = OP_EOL;
} else flag = 0;
@@ -2553,7 +2554,8 @@ static bool_t split(bktr_reg_t * bktr, volatile u_long **dma_prog, int width ,
} else if (bktr->current_col == 0 ) {
flag = OP_SOL;
flag2 = 0;
- } else if (bktr->current_col >= cols) {
+ } else if (bktr->current_col >= cols
+ || bktr->current_col + width >= cols) {
flag = 0;
flag2 = OP_EOL;
} else {
@@ -2676,7 +2678,7 @@ rgb_vbi_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace )
*dma_prog++ = OP_SYNC | BKTR_FM1;
*dma_prog++ = 0; /* NULL WORD */
width = cols;
- for (i = 0; i < (rows/interlace); i++) {
+ for (i = 0; i < rows; i += interlace) {
target = target_buffer;
if ( notclipped(bktr, i, width)) {
split(bktr, (volatile u_long **) &dma_prog,
@@ -2733,7 +2735,7 @@ rgb_vbi_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace )
*dma_prog++ = OP_SYNC | BKTR_FM1;
*dma_prog++ = 0; /* NULL WORD */
width = cols;
- for (i = 0; i < (rows/interlace); i++) {
+ for (i = 1; i < rows; i += interlace) {
target = target_buffer;
if ( notclipped(bktr, i, width)) {
split(bktr, (volatile u_long **) &dma_prog,
@@ -2834,7 +2836,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace )
/* sync, mode indicator packed data */
*dma_prog++ = 0; /* NULL WORD */
width = cols;
- for (i = 0; i < (rows/interlace); i++) {
+ for (i = 0; i < rows; i += interlace) {
target = target_buffer;
if ( notclipped(bktr, i, width)) {
split(bktr, (volatile u_long **) &dma_prog,
@@ -2900,7 +2902,7 @@ rgb_prog( bktr_ptr_t bktr, char i_flag, int cols, int rows, int interlace )
*dma_prog++ = OP_SYNC | BKTR_RESYNC | BKTR_FM1;
*dma_prog++ = 0; /* NULL WORD */
width = cols;
- for (i = 0; i < (rows/interlace); i++) {
+ for (i = 1; i < rows; i += interlace) {
target = target_buffer;
if ( notclipped(bktr, i, width)) {
split(bktr, (volatile u_long **) &dma_prog,
@@ -3448,18 +3450,10 @@ build_dma_prog( bktr_ptr_t bktr, char i_flag )
rows = bktr->rows;
cols = bktr->cols;
- bktr->vbiflags &= ~VBI_CAPTURE; /* default - no vbi capture */
-
/* If /dev/vbi is already open, then use the rgb_vbi RISC program */
- if ( (pf_int->public.type == METEOR_PIXTYPE_RGB)
- &&(bktr->vbiflags & VBI_OPEN) ) {
- if (i_flag==1) bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_EVEN;
- if (i_flag==2) bktr->bktr_cap_ctl |= BT848_CAP_CTL_VBI_ODD;
- if (i_flag==3) bktr->bktr_cap_ctl |=
- BT848_CAP_CTL_VBI_EVEN | BT848_CAP_CTL_VBI_ODD;
+ if (pf_int->public.type == METEOR_PIXTYPE_RGB) {
bktr->bktr_cap_ctl |=
BT848_CAP_CTL_VBI_EVEN | BT848_CAP_CTL_VBI_ODD;
- bktr->vbiflags |= VBI_CAPTURE;
rgb_vbi_prog(bktr, i_flag, cols, rows, interlace);
return;
}
OpenPOWER on IntegriCloud