aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/em28xx/em28xx-core.c
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2009-11-07 14:51:01 -0300
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 18:41:21 -0200
commitfc099f0e0e52a349a3fe92bfb8d3fb6ec5378174 (patch)
tree8bdfdbb81df84571a341c8e064bbe602ff8c14f0 /drivers/media/video/em28xx/em28xx-core.c
parent8337fc3053f4189fb64d60495ed89df5befa2a6b (diff)
downloadkernel_samsung_smdk4412-fc099f0e0e52a349a3fe92bfb8d3fb6ec5378174.zip
kernel_samsung_smdk4412-fc099f0e0e52a349a3fe92bfb8d3fb6ec5378174.tar.gz
kernel_samsung_smdk4412-fc099f0e0e52a349a3fe92bfb8d3fb6ec5378174.tar.bz2
V4L/DVB (13327): em28xx: fix alt modprobe parameter
It seems that some patch broke alt modprobe parameter. Fix it to allow changing alternate interfaces during module load and at runtime. If changed during runtime, you'll need to stop a and restart stream for the parameter to be used. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-core.c')
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
index a88257a..3358600 100644
--- a/drivers/media/video/em28xx/em28xx-core.c
+++ b/drivers/media/video/em28xx/em28xx-core.c
@@ -50,7 +50,7 @@ MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
printk(KERN_INFO "%s %s :"fmt, \
dev->name, __func__ , ##arg); } while (0)
-static int alt = EM28XX_PINOUT;
+static int alt;
module_param(alt, int, 0644);
MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
@@ -778,6 +778,16 @@ int em28xx_set_alternate(struct em28xx *dev)
int i;
unsigned int min_pkt_size = dev->width * 2 + 4;
+ /*
+ * alt = 0 is used only for control messages, so, only values
+ * greater than 0 can be used for streaming.
+ */
+ if (alt && alt < dev->num_alt) {
+ em28xx_coredbg("alternate forced to %d\n", dev->alt);
+ dev->alt = alt;
+ goto set_alt;
+ }
+
/* When image size is bigger than a certain value,
the frame size should be increased, otherwise, only
green screen will be received.
@@ -798,6 +808,7 @@ int em28xx_set_alternate(struct em28xx *dev)
dev->alt = i;
}
+set_alt:
if (dev->alt != prev_alt) {
em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
min_pkt_size, dev->alt);