diff options
author | Dean Anderson <linux-dev@sensoray.com> | 2014-02-05 12:58:06 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-02-28 12:18:49 -0500 |
commit | 9da62eb01f7b38af3c9e75e786eed5dfdb622753 (patch) | |
tree | c8c616352057a8eb9b8a6012c89cc7e4d73ada3b /drivers/media/usb | |
parent | 5e950faffc74e71be416ea3cf4e68ab3f326535c (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.c | 16 |
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 | ||
375 | static struct usb_driver s2255_driver; | 375 | static struct usb_driver s2255_driver; |
376 | 376 | ||
377 | /* Declare static vars that will be used as parameters */ | ||
378 | static unsigned int vid_limit = 16; /* Video memory limit, in Mb */ | ||
379 | |||
380 | /* start video number */ | 377 | /* start video number */ |
381 | static int video_nr = -1; /* /dev/videoN, -1 for autodetect */ | 378 | static int video_nr = -1; /* /dev/videoN, -1 for autodetect */ |
382 | 379 | ||
@@ -385,8 +382,6 @@ static int jpeg_enable = 1; | |||
385 | 382 | ||
386 | module_param(debug, int, 0644); | 383 | module_param(debug, int, 0644); |
387 | MODULE_PARM_DESC(debug, "Debug level(0-100) default 0"); | 384 | MODULE_PARM_DESC(debug, "Debug level(0-100) default 0"); |
388 | module_param(vid_limit, int, 0644); | ||
389 | MODULE_PARM_DESC(vid_limit, "video memory limit(Mb)"); | ||
390 | module_param(video_nr, int, 0644); | 385 | module_param(video_nr, int, 0644); |
391 | MODULE_PARM_DESC(video_nr, "start video minor(-1 default autodetect)"); | 386 | MODULE_PARM_DESC(video_nr, "start video minor(-1 default autodetect)"); |
392 | module_param(jpeg_enable, int, 0644); | 387 | module_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 | ||
674 | static int buffer_setup(struct videobuf_queue *vq, unsigned int *count, | 669 | static 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 | } |