Commit fc099f0e authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

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: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 8337fc30
...@@ -50,7 +50,7 @@ MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]"); ...@@ -50,7 +50,7 @@ MODULE_PARM_DESC(reg_debug, "enable debug messages [URB reg]");
printk(KERN_INFO "%s %s :"fmt, \ printk(KERN_INFO "%s %s :"fmt, \
dev->name, __func__ , ##arg); } while (0) dev->name, __func__ , ##arg); } while (0)
static int alt = EM28XX_PINOUT; static int alt;
module_param(alt, int, 0644); module_param(alt, int, 0644);
MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint"); MODULE_PARM_DESC(alt, "alternate setting to use for video endpoint");
...@@ -778,6 +778,16 @@ int em28xx_set_alternate(struct em28xx *dev) ...@@ -778,6 +778,16 @@ int em28xx_set_alternate(struct em28xx *dev)
int i; int i;
unsigned int min_pkt_size = dev->width * 2 + 4; 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, /* When image size is bigger than a certain value,
the frame size should be increased, otherwise, only the frame size should be increased, otherwise, only
green screen will be received. green screen will be received.
...@@ -798,6 +808,7 @@ int em28xx_set_alternate(struct em28xx *dev) ...@@ -798,6 +808,7 @@ int em28xx_set_alternate(struct em28xx *dev)
dev->alt = i; dev->alt = i;
} }
set_alt:
if (dev->alt != prev_alt) { if (dev->alt != prev_alt) {
em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n", em28xx_coredbg("minimum isoc packet size: %u (alt=%d)\n",
min_pkt_size, dev->alt); min_pkt_size, dev->alt);
......
...@@ -143,9 +143,6 @@ ...@@ -143,9 +143,6 @@
*/ */
#define EM28XX_NUM_PACKETS 40 #define EM28XX_NUM_PACKETS 40
/* default alternate; 0 means choose the best */
#define EM28XX_PINOUT 0
#define EM28XX_INTERLACED_DEFAULT 1 #define EM28XX_INTERLACED_DEFAULT 1
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment