summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/saa7164
diff options
context:
space:
mode:
authorSteven Toth <stoth@kernellabs.com>2010-07-31 15:09:25 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-21 07:54:51 -0200
commit66e1d37884eb43214292ed433fcffb72692c4838 (patch)
treead574a2020c064f80f9d10c109b94f67ee9a5ad9 /drivers/media/video/saa7164
parent9230acaac461c492ff9dea24bbe6a7f568b62cf6 (diff)
[media] saa7164: allow the number of encoder buffers to be user configurable
Signed-off-by: Steven Toth <stoth@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/saa7164')
-rw-r--r--drivers/media/video/saa7164/saa7164-core.c10
-rw-r--r--drivers/media/video/saa7164/saa7164-encoder.c7
-rw-r--r--drivers/media/video/saa7164/saa7164.h3
3 files changed, 15 insertions, 5 deletions
diff --git a/drivers/media/video/saa7164/saa7164-core.c b/drivers/media/video/saa7164/saa7164-core.c
index 0c10aea081f..ffe71566996 100644
--- a/drivers/media/video/saa7164/saa7164-core.c
+++ b/drivers/media/video/saa7164/saa7164-core.c
@@ -49,9 +49,13 @@ unsigned int saa_debug;
module_param_named(debug, saa_debug, int, 0644);
MODULE_PARM_DESC(debug, "enable debug messages");
+unsigned int encoder_buffers = SAA7164_MAX_ENCODER_BUFFERS;
+module_param(encoder_buffers, int, 0644);
+MODULE_PARM_DESC(encoder_buffers, "Total buffers in read queue 16-512 def:64");
+
unsigned int waitsecs = 10;
module_param(waitsecs, int, 0644);
-MODULE_PARM_DESC(debug, "timeout on firmware messages");
+MODULE_PARM_DESC(waitsecs, "timeout on firmware messages");
static unsigned int card[] = {[0 ... (SAA7164_MAXBOARDS - 1)] = UNSET };
module_param_array(card, int, NULL, 0444);
@@ -59,7 +63,7 @@ MODULE_PARM_DESC(card, "card type");
unsigned int print_histogram = 64;
module_param(print_histogram, int, 0644);
-MODULE_PARM_DESC(debug, "print histogram values once");
+MODULE_PARM_DESC(print_histogram, "print histogram values once");
static unsigned int saa7164_devcount;
@@ -264,7 +268,7 @@ static void saa7164_work_enchandler(struct work_struct *w)
wake_up_interruptible(&port->wait_read);
} else
- printk(KERN_ERR "encirq no free buffers\n");
+ printk(KERN_ERR "encirq no free buffers, increase param encoder_buffers\n");
/* Ensure offset into buffer remains 0, fill buffer
* with known bad data. */
diff --git a/drivers/media/video/saa7164/saa7164-encoder.c b/drivers/media/video/saa7164/saa7164-encoder.c
index cedeeece3c3..e340a6e39df 100644
--- a/drivers/media/video/saa7164/saa7164-encoder.c
+++ b/drivers/media/video/saa7164/saa7164-encoder.c
@@ -1316,7 +1316,12 @@ int saa7164_encoder_register(struct saa7164_port *port)
len = port->hw_streamingparams.numberoflines *
port->hw_streamingparams.pitch;
- for (i = 0; i < SAA7164_MAX_ENCODER_BUFFERS; i++) {
+ if (encoder_buffers < 16)
+ encoder_buffers = 16;
+ if (encoder_buffers > 512)
+ encoder_buffers = 512;
+
+ for (i = 0; i < encoder_buffers; i++) {
ubuf = saa7164_buffer_alloc_user(dev, len);
if (ubuf) {
diff --git a/drivers/media/video/saa7164/saa7164.h b/drivers/media/video/saa7164/saa7164.h
index 25044a0de8b..b561d6666b0 100644
--- a/drivers/media/video/saa7164/saa7164.h
+++ b/drivers/media/video/saa7164/saa7164.h
@@ -85,7 +85,7 @@
#define SAA7164_MAX_UNITS 8
#define SAA7164_TS_NUMBER_OF_LINES 312
#define SAA7164_PT_ENTRIES 16 /* (312 * 188) / 4096 */
-#define SAA7164_MAX_ENCODER_BUFFERS 16
+#define SAA7164_MAX_ENCODER_BUFFERS 64 /* max 5secs of latency at 6Mbps */
/* Port related defines */
#define SAA7164_PORT_TS1 (0)
@@ -433,6 +433,7 @@ struct saa7164_dev {
extern struct list_head saa7164_devlist;
extern unsigned int waitsecs;
+extern unsigned int encoder_buffers;
/* ----------------------------------------------------------- */
/* saa7164-core.c */