From 66e1d37884eb43214292ed433fcffb72692c4838 Mon Sep 17 00:00:00 2001 From: Steven Toth Date: Sat, 31 Jul 2010 15:09:25 -0300 Subject: [PATCH] [media] saa7164: allow the number of encoder buffers to be user configurable Signed-off-by: Steven Toth Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/saa7164/saa7164-core.c | 10 +++++++--- drivers/media/video/saa7164/saa7164-encoder.c | 7 ++++++- drivers/media/video/saa7164/saa7164.h | 3 ++- 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 0c10aea..ffe7156 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 cedeeec..e340a6e 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 25044a0..b561d66 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 */ -- 2.7.4