[media] saa7164: allow the number of encoder buffers to be user configurable
authorSteven Toth <stoth@kernellabs.com>
Sat, 31 Jul 2010 18:09:25 +0000 (15:09 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 21 Oct 2010 09:54:51 +0000 (07:54 -0200)
Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/saa7164/saa7164-core.c
drivers/media/video/saa7164/saa7164-encoder.c
drivers/media/video/saa7164/saa7164.h

index 0c10aea081f8923237a6af6edc8bb56b1938c045..ffe71566996c57aa043db7b0cb7921d8cb33d8a3 100644 (file)
@@ -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. */
index cedeeece3c3f6e56776a5ba393b60a18405ecf91..e340a6e39dfcd4bb442becf7a1d7532516cf388a 100644 (file)
@@ -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) {
index 25044a0de8b0afd82e561eba5858410a9039f9b3..b561d6666b036e16b54fd18d1e4dbeebc623c6a4 100644 (file)
@@ -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                                              */