@ -187,6 +187,24 @@ static int vpif_buffer_setup(struct videobuf_queue *q, unsigned int *count,
return 0 ;
* 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 ;
@ -828,7 +846,7 @@ static int vpif_reqbufs(struct file *file, void *priv,
common = & ch - > common [ index ] ;
if ( common - > fmt . type ! = reqbuf - > type )
if ( common - > fmt . type ! = reqbuf - > type | | ! vpif_dev )
return - EINVAL ;
if ( 0 ! = common - > io_usrs )
@ -845,7 +863,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 , field ,
sizeof ( struct videobuf_buffer ) , fh ,
@ -1690,9 +1708,9 @@ 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 ;
err = initialize_vpif ( ) ;
if ( err ) {
@ -1747,6 +1765,24 @@ 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_DISPLAY_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_DISPLAY_MAX_DEVICES ; j + + ) {
ch = vpif_obj . dev [ j ] ;
/* Initialize field of the channel objects */