From c682b3a7fb8ec69ac73511bbb6a378e40aa35f35 Mon Sep 17 00:00:00 2001 From: Trent Piepho Date: Sat, 14 Apr 2007 15:16:26 -0300 Subject: [PATCH] V4L/DVB (5517): Usbvision: store the device database more efficiently 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. Signed-off-by: Trent Piepho Acked-by: Thierry MERLE Signed-off-by: Mauro Carvalho Chehab --- .../media/video/usbvision/usbvision-cards.c | 195 ++++-------------- .../media/video/usbvision/usbvision-core.c | 8 +- .../media/video/usbvision/usbvision-video.c | 37 +++- drivers/media/video/usbvision/usbvision.h | 31 +-- 4 files changed, 89 insertions(+), 182 deletions(-) diff --git a/drivers/media/video/usbvision/usbvision-cards.c b/drivers/media/video/usbvision/usbvision-cards.c index 4ba96349e7..c632f12525 100644 --- a/drivers/media/video/usbvision/usbvision-cards.c +++ b/drivers/media/video/usbvision/usbvision-cards.c @@ -42,11 +42,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] = { @@ -59,11 +56,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] = { @@ -76,10 +70,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", }, @@ -93,11 +86,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] = { @@ -110,10 +100,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", }, @@ -127,10 +116,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", }, @@ -144,11 +132,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] = { @@ -161,10 +146,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", }, @@ -178,11 +162,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] = { @@ -195,10 +176,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)", }, @@ -212,10 +192,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)", }, @@ -229,10 +208,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", }, @@ -246,11 +224,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] = { @@ -263,11 +238,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] = { @@ -280,10 +252,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", }, @@ -297,10 +268,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", }, @@ -314,11 +284,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] = { @@ -331,11 +298,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] = { @@ -348,11 +312,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] = { @@ -365,11 +326,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] = { @@ -382,11 +340,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] = { @@ -399,11 +354,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] = { @@ -416,11 +368,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] = { @@ -433,11 +382,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] = { @@ -450,11 +396,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] = { @@ -467,10 +410,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)", }, @@ -484,10 +426,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", }, @@ -501,10 +442,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)", }, @@ -518,10 +458,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", }, @@ -535,10 +474,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)", }, @@ -552,10 +490,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)", }, @@ -569,10 +506,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)", }, @@ -586,10 +522,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)", }, @@ -603,10 +538,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)", }, @@ -620,10 +554,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", }, @@ -637,10 +570,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", }, @@ -654,10 +586,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)", }, @@ -671,10 +602,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)", }, @@ -688,10 +618,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)", }, @@ -705,10 +634,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)", }, @@ -722,10 +650,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)", }, @@ -739,10 +666,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)", }, @@ -756,10 +682,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)", }, @@ -773,10 +698,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)", }, @@ -790,10 +714,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)", }, @@ -807,10 +730,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", }, @@ -824,11 +746,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] = { @@ -841,10 +760,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", }, @@ -858,10 +776,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)", }, @@ -875,10 +792,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)", }, @@ -892,10 +808,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)", }, @@ -909,10 +824,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)", }, @@ -926,10 +840,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", }, @@ -943,11 +856,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] = { @@ -960,11 +870,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] = { @@ -977,11 +884,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] = { @@ -994,11 +898,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] = { @@ -1011,11 +912,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] = { @@ -1028,10 +926,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", }, @@ -1045,10 +942,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", }, @@ -1062,10 +958,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", }, @@ -1079,10 +974,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)", }, @@ -1096,10 +990,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)", }, @@ -1113,10 +1006,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", }, @@ -1130,11 +1022,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/drivers/media/video/usbvision/usbvision-core.c b/drivers/media/video/usbvision/usbvision-core.c index f2154dc072..fee4548a9c 100644 --- a/drivers/media/video/usbvision/usbvision-core.c +++ b/drivers/media/video/usbvision/usbvision-core.c @@ -2040,8 +2040,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; @@ -2112,8 +2112,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/drivers/media/video/usbvision/usbvision-video.c b/drivers/media/video/usbvision/usbvision-video.c index 49281ffa84..aa6509391b 100644 --- a/drivers/media/video/usbvision/usbvision-video.c +++ b/drivers/media/video/usbvision/usbvision-video.c @@ -1745,8 +1745,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; } @@ -1957,6 +1957,7 @@ static void customdevice_process(void) if(CustomDevice) { char *parse=CustomDevice; + int tmp; PDEBUG(DBG_PROBE, "CustomDevice=%s", CustomDevice); @@ -1996,10 +1997,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); @@ -2027,7 +2029,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); @@ -2038,22 +2041,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/drivers/media/video/usbvision/usbvision.h b/drivers/media/video/usbvision/usbvision.h index b4412a5014..9cad777334 100644 --- a/drivers/media/video/usbvision/usbvision.h +++ b/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 */ -- 2.39.2