aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2009-11-07 12:51:01 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-12-05 15:41:21 -0500
commitfc099f0e0e52a349a3fe92bfb8d3fb6ec5378174 (patch)
tree8bdfdbb81df84571a341c8e064bbe602ff8c14f0
parent8337fc3053f4189fb64d60495ed89df5befa2a6b (diff)
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>
-rw-r--r--drivers/media/video/em28xx/em28xx-core.c13
-rw-r--r--drivers/media/video/em28xx/em28xx.h3
2 files changed, 12 insertions, 4 deletions
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c
index a88257a7d94f..33586004eb44 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]");
50 printk(KERN_INFO "%s %s :"fmt, \ 50 printk(KERN_INFO "%s %s :"fmt, \
51 dev->name, __func__ , ##arg); } while (0) 51 dev->name, __func__ , ##arg); } while (0)
52 52
53static int alt = EM28XX_PINOUT; 53static int alt;
54module_param(alt, int, 0644); 54module_param(alt, int, 0644);
55MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint"); 55MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
56 56
@@ -778,6 +778,16 @@ int em28xx_set_alternate(struct em28xx *dev)
778 int i; 778 int i;
779 unsigned int min_pkt_size = dev->width * 2 + 4; 779 unsigned int min_pkt_size = dev->width * 2 + 4;
780 780
781 /*
782 * alt = 0 is used only for control messages, so, only values
783 * greater than 0 can be used for streaming.
784 */
785 if (alt && alt < dev->num_alt) {
786 em28xx_coredbg("alternate forced to %d\n", dev->alt);
787 dev->alt = alt;
788 goto set_alt;
789 }
790
781 /* When image size is bigger than a certain value, 791 /* When image size is bigger than a certain value,
782 the frame size should be increased, otherwise, only 792 the frame size should be increased, otherwise, only
783 green screen will be received. 793 green screen will be received.
@@ -798,6 +808,7 @@ int em28xx_set_alternate(struct em28xx *dev)
798 dev->alt = i; 808 dev->alt = i;
799 } 809 }
800 810
811set_alt:
801 if (dev->alt != prev_alt) { 812 if (dev->alt != prev_alt) {
802 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n", 813 em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
803 min_pkt_size, dev->alt); 814 min_pkt_size, dev->alt);
diff --git a/drivers/media/video/em28xx/em28xx.h b/drivers/media/video/em28xx/em28xx.h
index a476f7bb7bf8..bca5cbb7931c 100644
--- a/drivers/media/video/em28xx/em28xx.h
+++ b/drivers/media/video/em28xx/em28xx.h
@@ -143,9 +143,6 @@
143 */ 143 */
144#define EM28XX_NUM_PACKETS 40 144#define EM28XX_NUM_PACKETS 40
145 145
146/* default alternate; 0 means choose the best */
147#define EM28XX_PINOUT 0
148
149#define EM28XX_INTERLACED_DEFAULT 1 146#define EM28XX_INTERLACED_DEFAULT 1
150 147
151/* 148/*