summaryrefslogtreecommitdiff
path: root/linux/drivers
diff options
context:
space:
mode:
authorTrent Piepho <xyzzy@speakeasy.org>2007-04-14 15:16:26 -0300
committerTrent Piepho <xyzzy@speakeasy.org>2007-04-14 15:16:26 -0300
commite54bc97df6d51a83c65d22e20e600459e4d717f9 (patch)
tree993039a52c2fbcf39c4b99910a6817426b325db1 /linux/drivers
parent76f2329ed08d1515452081209e66a9352842fbb5 (diff)
downloadmediapointer-dvb-s2-e54bc97df6d51a83c65d22e20e600459e4d717f9.tar.gz
mediapointer-dvb-s2-e54bc97df6d51a83c65d22e20e600459e4d717f9.tar.bz2
usbvision: store the device database more efficiently
From: Trent Piepho <xyzzy@speakeasy.org> One bit wide bitfields need to declared unsigned to have the range 0 to 1, or they have the range -1 to 0. A few techniques to reduce the driver's size by about 1700 bytes on ia32, probably more on x86-64. Put the biggest fields first, less padding is necessary that way. Put fields with a limited range into a smaller type. For example VideoChannels will fit in 3 bits, and TunerType can use 8 bits. Vin_Reg1, Vin_Reg2, and Dvi_yuv define values for 8-bit registers, but they can't just go into an 8-bit field with no changes, since -1 was used as a flag to indicate a value was not present. So what we do is create a one-bit flag for each one to indicate if a value is or is not present. This only takes 9 bits and has the added advantage that when the register isn't overridden (Vin_Reg[12] never are) it doesn't need to appear in the structure definition since the default value for the flag will be zero. Acked-by: Thierry MERLE <thierry.merle@free.fr> Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
Diffstat (limited to 'linux/drivers')
-rw-r--r--linux/drivers/media/video/usbvision/usbvision-cards.c195
-rw-r--r--linux/drivers/media/video/usbvision/usbvision-core.c8
-rw-r--r--linux/drivers/media/video/usbvision/usbvision-video.c37
-rw-r--r--linux/drivers/media/video/usbvision/usbvision.h31
4 files changed, 89 insertions, 182 deletions
diff --git a/linux/drivers/media/video/usbvision/usbvision-cards.c b/linux/drivers/media/video/usbvision/usbvision-cards.c
index 109f6b039..849cc5482 100644
--- a/linux/drivers/media/video/usbvision/usbvision-cards.c
+++ b/linux/drivers/media/video/usbvision/usbvision-cards.c
@@ -43,11 +43,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Custom Dummy USBVision Device",
},
[XANBOO] = {
@@ -60,11 +57,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Xanboo",
},
[BELKIN_VIDEOBUS_II] = {
@@ -77,10 +71,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Belkin USB VideoBus II Adapter",
},
@@ -94,11 +87,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Belkin Components USB VideoBus",
},
[BELKIN_USB_VIDEOBUS_II] = {
@@ -111,10 +101,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Belkin USB VideoBus II",
},
@@ -128,10 +117,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "echoFX InterView Lite",
},
@@ -145,11 +133,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "USBGear USBG-V1 resp. HAMA USB",
},
[D_LINK_V100] = {
@@ -162,10 +147,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "D-Link V100",
},
@@ -179,11 +163,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "X10 USB Camera",
},
[HPG_WINTV_LIVE_PAL_BG] = {
@@ -196,10 +177,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Live (PAL B/G)",
},
@@ -213,10 +193,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Live Pro (NTSC M/N)",
},
@@ -230,10 +209,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Zoran Co. PMD (Nogatech) AV-grabber Manhattan",
},
@@ -247,11 +225,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = 20,
- .Dvi_yuv = -1,
.ModelString = "Nogatech USB-TV (NTSC) FM",
},
[PNY_USB_TV_NTSC_FM] = {
@@ -264,11 +239,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = 20,
- .Dvi_yuv = -1,
.ModelString = "PNY USB-TV (NTSC) FM",
},
[PV_PLAYTV_USB_PRO_PAL_FM] = {
@@ -281,10 +253,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "PixelView PlayTv-USB PRO (PAL) FM",
},
@@ -298,10 +269,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "ZTV ZT-721 2.4GHz USB A/V Receiver",
},
@@ -315,11 +285,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = 20,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (NTSC M/N)",
},
[HPG_WINTV_PAL_BG] = {
@@ -332,11 +299,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL B/G)",
},
[HPG_WINTV_PAL_I] = {
@@ -349,11 +313,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL I)",
},
[HPG_WINTV_PAL_SECAM_L] = {
@@ -366,11 +327,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_SECAM,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL/SECAM L)",
},
[HPG_WINTV_PAL_D_K] = {
@@ -383,11 +341,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL D/K)",
},
[HPG_WINTV_NTSC_FM] = {
@@ -400,11 +355,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (NTSC FM)",
},
[HPG_WINTV_PAL_BG_FM] = {
@@ -417,11 +369,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL B/G FM)",
},
[HPG_WINTV_PAL_I_FM] = {
@@ -434,11 +383,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL I FM)",
},
[HPG_WINTV_PAL_D_K_FM] = {
@@ -451,11 +397,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTV USB (PAL D/K FM)",
},
[HPG_WINTV_PRO_NTSC_MN] = {
@@ -468,10 +411,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_MICROTUNE_4049FM5,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (NTSC M/N)",
},
@@ -485,10 +427,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_MICROTUNE_4049FM5,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (NTSC M/N) V2",
},
@@ -502,10 +443,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_FM1216ME_MK3,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L)",
},
@@ -519,10 +459,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (NTSC M/N) V3",
},
@@ -536,10 +475,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL B/G)",
},
@@ -553,10 +491,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL I)",
},
@@ -570,10 +507,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_SECAM,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM L)",
},
@@ -587,10 +523,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL D/K)",
},
@@ -604,10 +539,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_SECAM,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L)",
},
@@ -621,10 +555,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_SECAM,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM BGDK/I/L) V2",
},
@@ -638,10 +571,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_ALPS_TSBE1_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL B/G) V2",
},
@@ -655,10 +587,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_ALPS_TSBE1_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL B/G,D/K)",
},
@@ -672,10 +603,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL I,D/K)",
},
@@ -689,10 +619,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (NTSC M/N FM)",
},
@@ -706,10 +635,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL B/G FM)",
},
@@ -723,10 +651,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL I FM)",
},
@@ -740,10 +667,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL D/K FM)",
},
@@ -757,10 +683,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_MICROTUNE_4049FM5,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (Temic PAL/SECAM B/G/I/D/K/L FM)",
},
@@ -774,10 +699,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_MICROTUNE_4049FM5,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (Temic PAL B/G FM)",
},
@@ -791,10 +715,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_FM1216ME_MK3,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (PAL/SECAM B/G/I/D/K/L FM)",
},
@@ -808,10 +731,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Hauppauge WinTV USB Pro (NTSC M/N FM) V2",
},
@@ -825,11 +747,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 5,
.Y_Offset = 5,
- .Dvi_yuv = -1,
.ModelString = "Camtel Technology USB TV Genie Pro FM Model TVB330",
},
[DIGITAL_VIDEO_CREATOR_I] = {
@@ -842,10 +761,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Digital Video Creator I",
},
@@ -859,10 +777,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 82,
.Y_Offset = 20,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Global Village GV-007 (NTSC)",
},
@@ -876,10 +793,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Dazzle Fusion Model DVC-50 Rev 1 (NTSC)",
},
@@ -893,10 +809,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Dazzle Fusion Model DVC-80 Rev 1 (PAL)",
},
@@ -910,10 +825,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Dazzle Fusion Model DVC-90 Rev 1 (SECAM)",
},
@@ -927,10 +841,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_FM1216ME_MK3,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Eskape Labs MyTV2Go",
},
@@ -944,11 +857,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 0,
.Tuner = 1,
.TunerType = TUNER_TEMIC_4066FY5_PAL_I,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Pinnacle Studio PCTV USB (PAL)",
},
[PINNA_PCTV_USB_SECAM] = {
@@ -961,11 +871,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_SECAM,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Pinnacle Studio PCTV USB (SECAM)",
},
[PINNA_PCTV_USB_PAL_FM] = {
@@ -978,11 +885,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 128,
.Y_Offset = 23,
- .Dvi_yuv = -1,
.ModelString = "Pinnacle Studio PCTV USB (PAL) FM",
},
[MIRO_PCTV_USB] = {
@@ -995,11 +899,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Miro PCTV USB",
},
[PINNA_PCTV_USB_NTSC_FM] = {
@@ -1012,11 +913,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Pinnacle Studio PCTV USB (NTSC) FM",
},
[PINNA_PCTV_USB_PAL_FM_V2] = {
@@ -1029,10 +927,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_TEMIC_4009FR5_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Pinnacle Studio PCTV USB (PAL) FM V2",
},
@@ -1046,10 +943,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_TEMIC_4039FR5_NTSC,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Pinnacle Studio PCTV USB (NTSC) FM V2",
},
@@ -1063,10 +959,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_TEMIC_4009FR5_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Pinnacle Studio PCTV USB (PAL) FM V3",
},
@@ -1080,10 +975,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Pinnacle Studio Linx Video input cable (NTSC)",
},
@@ -1097,10 +991,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 0,
.TunerType = 0,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Pinnacle Studio Linx Video input cable (PAL)",
},
@@ -1114,10 +1007,9 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_TEMIC_4009FR5_PAL,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = 0,
.Y_Offset = 3,
+ .Dvi_yuv_override = 1,
.Dvi_yuv = 7,
.ModelString = "Pinnacle PCTV Bungee USB (PAL) FM",
},
@@ -1131,11 +1023,8 @@ struct usbvision_device_data_st usbvision_device_data[] = {
.vbi = 1,
.Tuner = 1,
.TunerType = TUNER_PHILIPS_NTSC_M,
- .Vin_Reg1 = -1,
- .Vin_Reg2 = -1,
.X_Offset = -1,
.Y_Offset = -1,
- .Dvi_yuv = -1,
.ModelString = "Hauppauge WinTv-USB",
},
};
diff --git a/linux/drivers/media/video/usbvision/usbvision-core.c b/linux/drivers/media/video/usbvision/usbvision-core.c
index 2d8dc023d..bcbe6f332 100644
--- a/linux/drivers/media/video/usbvision/usbvision-core.c
+++ b/linux/drivers/media/video/usbvision/usbvision-core.c
@@ -2103,8 +2103,8 @@ int usbvision_set_input(struct usb_usbvision *usbvision)
return 0;
/* Set input format expected from decoder*/
- if (usbvision_device_data[usbvision->DevModel].Vin_Reg1 >= 0) {
- value[0] = usbvision_device_data[usbvision->DevModel].Vin_Reg1 & 0xff;
+ if (usbvision_device_data[usbvision->DevModel].Vin_Reg1_override) {
+ value[0] = usbvision_device_data[usbvision->DevModel].Vin_Reg1;
} else if(usbvision_device_data[usbvision->DevModel].Codec == CODEC_SAA7113) {
/* SAA7113 uses 8 bit output */
value[0] = USBVISION_8_422_SYNC;
@@ -2175,8 +2175,8 @@ int usbvision_set_input(struct usb_usbvision *usbvision)
dvi_yuv_value = 0x00; /* U comes after V, Ya comes after U/V, Yb comes after Yb */
- if(usbvision_device_data[usbvision->DevModel].Dvi_yuv >= 0){
- dvi_yuv_value = usbvision_device_data[usbvision->DevModel].Dvi_yuv & 0xff;
+ if(usbvision_device_data[usbvision->DevModel].Dvi_yuv_override){
+ dvi_yuv_value = usbvision_device_data[usbvision->DevModel].Dvi_yuv;
}
else if(usbvision_device_data[usbvision->DevModel].Codec == CODEC_SAA7113) {
/* This changes as the fine sync control changes. Further investigation necessary */
diff --git a/linux/drivers/media/video/usbvision/usbvision-video.c b/linux/drivers/media/video/usbvision/usbvision-video.c
index 9792b093f..925d1352a 100644
--- a/linux/drivers/media/video/usbvision/usbvision-video.c
+++ b/linux/drivers/media/video/usbvision/usbvision-video.c
@@ -1914,8 +1914,8 @@ static void usbvision_configure_video(struct usb_usbvision *usbvision)
model = usbvision->DevModel;
usbvision->palette = usbvision_v4l2_format[2]; // V4L2_PIX_FMT_RGB24;
- if (usbvision_device_data[usbvision->DevModel].Vin_Reg2 >= 0) {
- usbvision->Vin_Reg2_Preset = usbvision_device_data[usbvision->DevModel].Vin_Reg2 & 0xff;
+ if (usbvision_device_data[usbvision->DevModel].Vin_Reg2_override) {
+ usbvision->Vin_Reg2_Preset = usbvision_device_data[usbvision->DevModel].Vin_Reg2;
} else {
usbvision->Vin_Reg2_Preset = 0;
}
@@ -2149,6 +2149,7 @@ static void customdevice_process(void)
if(CustomDevice)
{
char *parse=CustomDevice;
+ int tmp;
PDEBUG(DBG_PROBE, "CustomDevice=%s", CustomDevice);
@@ -2188,10 +2189,11 @@ static void customdevice_process(void)
sscanf(parse,"%d",&usbvision_device_data[0].Interface);
goto2next(parse);
PDEBUG(DBG_PROBE, "Interface=%d", usbvision_device_data[0].Interface);
- sscanf(parse,"%d",&usbvision_device_data[0].Codec);
+ sscanf(parse,"%hd",&usbvision_device_data[0].Codec);
goto2next(parse);
PDEBUG(DBG_PROBE, "Codec=%d", usbvision_device_data[0].Codec);
- sscanf(parse,"%d",&usbvision_device_data[0].VideoChannels);
+ sscanf(parse,"%d",&tmp);
+ usbvision_device_data[0].VideoChannels = tmp;
goto2next(parse);
PDEBUG(DBG_PROBE, "VideoChannels=%d", usbvision_device_data[0].VideoChannels);
@@ -2219,7 +2221,8 @@ static void customdevice_process(void)
}
goto2next(parse);
- sscanf(parse,"%d",&usbvision_device_data[0].AudioChannels);
+ sscanf(parse,"%d",&tmp);
+ usbvision_device_data[0].AudioChannels = tmp;
goto2next(parse);
PDEBUG(DBG_PROBE, "AudioChannels=%d", usbvision_device_data[0].AudioChannels);
sscanf(parse,"%d",&radio);
@@ -2230,22 +2233,34 @@ static void customdevice_process(void)
usbvision_device_data[0].Tuner=(tuner?1:0);
goto2next(parse);
PDEBUG(DBG_PROBE, "Tuner=%d", usbvision_device_data[0].Tuner);
- sscanf(parse,"%d",&usbvision_device_data[0].TunerType);
+ sscanf(parse,"%hhu",&usbvision_device_data[0].TunerType);
goto2next(parse);
PDEBUG(DBG_PROBE, "TunerType=%d", usbvision_device_data[0].TunerType);
- sscanf(parse,"%d",&usbvision_device_data[0].Vin_Reg1);
+ sscanf(parse,"%d",&tmp);
+ if(tmp>0) {
+ usbvision_device_data[0].Vin_Reg1_override = 1;
+ usbvision_device_data[0].Vin_Reg1 = tmp&0xff;
+ }
goto2next(parse);
PDEBUG(DBG_PROBE, "Vin_Reg1=%d", usbvision_device_data[0].Vin_Reg1);
- sscanf(parse,"%d",&usbvision_device_data[0].Vin_Reg2);
+ sscanf(parse,"%d",&tmp);
+ if(tmp>0) {
+ usbvision_device_data[0].Vin_Reg2_override = 1;
+ usbvision_device_data[0].Vin_Reg2 = tmp&0xff;
+ }
goto2next(parse);
PDEBUG(DBG_PROBE, "Vin_Reg2=%d", usbvision_device_data[0].Vin_Reg2);
- sscanf(parse,"%d",&usbvision_device_data[0].X_Offset);
+ sscanf(parse,"%hd",&usbvision_device_data[0].X_Offset);
goto2next(parse);
PDEBUG(DBG_PROBE, "X_Offset=%d", usbvision_device_data[0].X_Offset);
- sscanf(parse,"%d",&usbvision_device_data[0].Y_Offset);
+ sscanf(parse,"%hd",&usbvision_device_data[0].Y_Offset);
goto2next(parse);
PDEBUG(DBG_PROBE, "Y_Offset=%d", usbvision_device_data[0].Y_Offset);
- sscanf(parse,"%d",&usbvision_device_data[0].Dvi_yuv);
+ sscanf(parse,"%d",&tmp);
+ if(tmp>0) {
+ usbvision_device_data[0].Dvi_yuv_override = 1;
+ usbvision_device_data[0].Dvi_yuv = tmp&0xff;
+ }
PDEBUG(DBG_PROBE, "Dvi_yuv=%d", usbvision_device_data[0].Dvi_yuv);
//add to usbvision_table also
diff --git a/linux/drivers/media/video/usbvision/usbvision.h b/linux/drivers/media/video/usbvision/usbvision.h
index 90e71f58c..1d69d940b 100644
--- a/linux/drivers/media/video/usbvision/usbvision.h
+++ b/linux/drivers/media/video/usbvision/usbvision.h
@@ -342,21 +342,24 @@ struct usbvision_frame {
#define BRIDGE_NT1005 1005
struct usbvision_device_data_st {
- int Interface; /* to handle special interface number like BELKIN and Hauppauge WinTV-USB II */
- int Codec;
- int VideoChannels;
__u64 VideoNorm;
- int AudioChannels;
- int Radio:1;
- int vbi:1;
- int Tuner:1;
- int TunerType;
- int Vin_Reg1;
- int Vin_Reg2;
- int X_Offset;
- int Y_Offset;
- int Dvi_yuv;
- char *ModelString;
+ const char *ModelString;
+ int Interface; /* to handle special interface number like BELKIN and Hauppauge WinTV-USB II */
+ __u16 Codec;
+ unsigned VideoChannels:3;
+ unsigned AudioChannels:2;
+ unsigned Radio:1;
+ unsigned vbi:1;
+ unsigned Tuner:1;
+ unsigned Vin_Reg1_override:1; /* Override default value with */
+ unsigned Vin_Reg2_override:1; /* Vin_Reg1, Vin_Reg2, etc. */
+ unsigned Dvi_yuv_override:1;
+ __u8 Vin_Reg1;
+ __u8 Vin_Reg2;
+ __u8 Dvi_yuv;
+ __u8 TunerType;
+ __s16 X_Offset;
+ __s16 Y_Offset;
};
/* Declared on usbvision-cards.c */