aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb
diff options
context:
space:
mode:
authorDean Anderson <linux-dev@sensoray.com>2014-02-05 12:58:06 -0500
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-02-28 12:18:49 -0500
commit9da62eb01f7b38af3c9e75e786eed5dfdb622753 (patch)
treec8c616352057a8eb9b8a6012c89cc7e4d73ada3b /drivers/media/usb
parent5e950faffc74e71be416ea3cf4e68ab3f326535c (diff)
[media] s2255drv: buffer setup fix
Buffer setup should check if minimum number of buffers is used. Signed-off-by: Dean Anderson <linux-dev@sensoray.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/usb')
-rw-r--r--drivers/media/usb/s2255/s2255drv.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/media/usb/s2255/s2255drv.c b/drivers/media/usb/s2255/s2255drv.c
index 2e24aeecfed7..1b267b1bb5f6 100644
--- a/drivers/media/usb/s2255/s2255drv.c
+++ b/drivers/media/usb/s2255/s2255drv.c
@@ -69,7 +69,7 @@
69#define S2255_DSP_BOOTTIME 800 69#define S2255_DSP_BOOTTIME 800
70/* maximum time to wait for firmware to load (ms) */ 70/* maximum time to wait for firmware to load (ms) */
71#define S2255_LOAD_TIMEOUT (5000 + S2255_DSP_BOOTTIME) 71#define S2255_LOAD_TIMEOUT (5000 + S2255_DSP_BOOTTIME)
72#define S2255_DEF_BUFS 16 72#define S2255_MIN_BUFS 2
73#define S2255_SETMODE_TIMEOUT 500 73#define S2255_SETMODE_TIMEOUT 500
74#define S2255_VIDSTATUS_TIMEOUT 350 74#define S2255_VIDSTATUS_TIMEOUT 350
75#define S2255_MARKER_FRAME cpu_to_le32(0x2255DA4AL) 75#define S2255_MARKER_FRAME cpu_to_le32(0x2255DA4AL)
@@ -374,9 +374,6 @@ static long s2255_vendor_req(struct s2255_dev *dev, unsigned char req,
374 374
375static struct usb_driver s2255_driver; 375static struct usb_driver s2255_driver;
376 376
377/* Declare static vars that will be used as parameters */
378static unsigned int vid_limit = 16; /* Video memory limit, in Mb */
379
380/* start video number */ 377/* start video number */
381static int video_nr = -1; /* /dev/videoN, -1 for autodetect */ 378static int video_nr = -1; /* /dev/videoN, -1 for autodetect */
382 379
@@ -385,8 +382,6 @@ static int jpeg_enable = 1;
385 382
386module_param(debug, int, 0644); 383module_param(debug, int, 0644);
387MODULE_PARM_DESC(debug, "Debug level(0-100) default 0"); 384MODULE_PARM_DESC(debug, "Debug level(0-100) default 0");
388module_param(vid_limit, int, 0644);
389MODULE_PARM_DESC(vid_limit, "video memory limit(Mb)");
390module_param(video_nr, int, 0644); 385module_param(video_nr, int, 0644);
391MODULE_PARM_DESC(video_nr, "start video minor(-1 default autodetect)"); 386MODULE_PARM_DESC(video_nr, "start video minor(-1 default autodetect)");
392module_param(jpeg_enable, int, 0644); 387module_param(jpeg_enable, int, 0644);
@@ -671,18 +666,15 @@ static void s2255_fillbuff(struct s2255_vc *vc,
671 Videobuf operations 666 Videobuf operations
672 ------------------------------------------------------------------*/ 667 ------------------------------------------------------------------*/
673 668
674static int buffer_setup(struct videobuf_queue *vq, unsigned int *count, 669static int buffer_setup(struct videobuf_queue *vq, unsigned int *nbuffers,
675 unsigned int *size) 670 unsigned int *size)
676{ 671{
677 struct s2255_fh *fh = vq->priv_data; 672 struct s2255_fh *fh = vq->priv_data;
678 struct s2255_vc *vc = fh->vc; 673 struct s2255_vc *vc = fh->vc;
679 *size = vc->width * vc->height * (vc->fmt->depth >> 3); 674 *size = vc->width * vc->height * (vc->fmt->depth >> 3);
680 675
681 if (0 == *count) 676 if (*nbuffers < S2255_MIN_BUFS)
682 *count = S2255_DEF_BUFS; 677 *nbuffers = S2255_MIN_BUFS;
683
684 if (*size * *count > vid_limit * 1024 * 1024)
685 *count = (vid_limit * 1024 * 1024) / *size;
686 678
687 return 0; 679 return 0;
688} 680}