Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 320612
b: refs/heads/master
c: 764af39
h: refs/heads/master
v: v3
  • Loading branch information
Manjunath Hadli authored and Mauro Carvalho Chehab committed Jul 30, 2012
1 parent 5e6d8d7 commit 5997caf
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: fc613d44e08a9f0986e493e2605132161b5b39a5
refs/heads/master: 764af39aa415c9418f035d2a4bd606d7a7814a68
39 changes: 37 additions & 2 deletions trunk/drivers/media/video/davinci/vpif_capture.c
Original file line number Diff line number Diff line change
Expand Up @@ -217,6 +217,23 @@ static int vpif_buffer_setup(struct videobuf_queue *q, unsigned int *count,
/* Calculate the size of the buffer */
*size = config_params.channel_bufsize[ch->channel_id];

/*
* Checking if the buffer size exceeds the available buffer
* ycmux_mode = 0 means 1 channel mode HD and
* ycmux_mode = 1 means 2 channels mode SD
*/
if (ch->vpifparams.std_info.ycmux_mode == 0) {
if (config_params.video_limit[ch->channel_id])
while (*size * *count > (config_params.video_limit[0]
+ config_params.video_limit[1]))
(*count)--;
} else {
if (config_params.video_limit[ch->channel_id])
while (*size * *count >
config_params.video_limit[ch->channel_id])
(*count)--;
}

if (*count < config_params.min_numbuffers)
*count = config_params.min_numbuffers;
return 0;
Expand Down Expand Up @@ -890,7 +907,7 @@ static int vpif_reqbufs(struct file *file, void *priv,
}
}

if (V4L2_BUF_TYPE_VIDEO_CAPTURE != reqbuf->type)
if (V4L2_BUF_TYPE_VIDEO_CAPTURE != reqbuf->type || !vpif_dev)
return -EINVAL;

index = VPIF_VIDEO_INDEX;
Expand All @@ -902,7 +919,7 @@ static int vpif_reqbufs(struct file *file, void *priv,

/* Initialize videobuf queue as per the buffer type */
videobuf_queue_dma_contig_init(&common->buffer_queue,
&video_qops, NULL,
&video_qops, vpif_dev,
&common->irqlock,
reqbuf->type,
common->fmt.fmt.pix.field,
Expand Down Expand Up @@ -2171,6 +2188,7 @@ static __init int vpif_probe(struct platform_device *pdev)
struct video_device *vfd;
struct resource *res;
int subdev_count;
size_t size;

vpif_dev = &pdev->dev;

Expand Down Expand Up @@ -2225,6 +2243,23 @@ static __init int vpif_probe(struct platform_device *pdev)
ch->video_dev = vfd;
}

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (res) {
size = resource_size(res);
/* The resources are divided into two equal memory and when we
* have HD output we can add them together
*/
for (j = 0; j < VPIF_CAPTURE_MAX_DEVICES; j++) {
ch = vpif_obj.dev[j];
ch->channel_id = j;
/* only enabled if second resource exists */
config_params.video_limit[ch->channel_id] = 0;
if (size)
config_params.video_limit[ch->channel_id] =
size/2;
}
}

for (j = 0; j < VPIF_CAPTURE_MAX_DEVICES; j++) {
ch = vpif_obj.dev[j];
ch->channel_id = j;
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/media/video/davinci/vpif_capture.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ struct vpif_config_params {
u32 min_bufsize[VPIF_CAPTURE_NUM_CHANNELS];
u32 channel_bufsize[VPIF_CAPTURE_NUM_CHANNELS];
u8 default_device[VPIF_CAPTURE_NUM_CHANNELS];
u32 video_limit[VPIF_CAPTURE_NUM_CHANNELS];
u8 max_device_type;
};
/* Struct which keeps track of the line numbers for the sliced vbi service */
Expand Down

0 comments on commit 5997caf

Please sign in to comment.