From ee32ffbf8e446e9b8c247ae9c9ba032979c3eafc Mon Sep 17 00:00:00 2001 From: Jean-François Moine Date: Tue, 22 Mar 2011 05:58:19 -0300 Subject: [media] gspca - nw80x: Check the bridge from the webcam type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jean-François Moine Signed-off-by: Mauro Carvalho Chehab --- drivers/media/video/gspca/nw80x.c | 146 ++++++++++++++++++++------------------ 1 file changed, 78 insertions(+), 68 deletions(-) (limited to 'drivers/media/video/gspca') diff --git a/drivers/media/video/gspca/nw80x.c b/drivers/media/video/gspca/nw80x.c index d2d356e8753..f2adf6f0426 100644 --- a/drivers/media/video/gspca/nw80x.c +++ b/drivers/media/video/gspca/nw80x.c @@ -79,75 +79,80 @@ enum webcams { NWEBCAMS /* number of webcams */ }; +static const u8 webcam_chip[NWEBCAMS] = { + [Generic800] = BRIDGE_NW800, /* 06a5:0000 + * Typhoon Webcam 100 USB */ + + [SpaceCam] = BRIDGE_NW800, /* 06a5:d800 + * Trust SpaceCam120 or SpaceCam100 PORTABLE */ + + [SpaceCam2] = BRIDGE_NW800, /* 06a5:d800 - pas106 + * other Trust SpaceCam120 or SpaceCam100 PORTABLE */ + + [Cvideopro] = BRIDGE_NW802, /* 06a5:d001 + * Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' */ + + [Dlink350c] = BRIDGE_NW802, /* 06a5:d001 + * D-Link NetQam Pro 250plus */ + + [DS3303u] = BRIDGE_NW801, /* 06a5:d001 + * Plustek Opticam 500U or ProLink DS3303u */ + + [Kr651us] = BRIDGE_NW802, /* 06a5:d001 + * Panasonic GP-KR651US */ + + [Kritter] = BRIDGE_NW802, /* 06a5:d001 + * iRez Kritter cam */ + + [Mustek300] = BRIDGE_NW802, /* 055f:d001 + * Mustek Wcam 300 mini */ + + [Proscope] = BRIDGE_NW802, /* 06a5:d001 + * Scalar USB Microscope (ProScope) */ + + [Twinkle] = BRIDGE_NW800, /* 06a5:d800 - hv7121b? (seems pas106) + * Divio Chicony TwinkleCam + * DSB-C110 */ + + [DvcV6] = BRIDGE_NW802, /* 0502:d001 + * DVC V6 */ + + [P35u] = BRIDGE_NW801, /* 052b:d001, 06a5:d001 and 06be:d001 + * EZCam Pro p35u */ + + [Generic802] = BRIDGE_NW802, +}; +/* + * other webcams: + * - nw801 046d:d001 + * Logitech QuickCam Pro (dark focus ring) + * - nw801 0728:d001 + * AVerMedia Camguard + * - nw??? 06a5:d001 + * D-Link NetQam Pro 250plus + * - nw800 065a:d800 + * Showcam NGS webcam + * - nw??? ????:???? + * Sceptre svc300 + */ + /* - - webcams: - - Typhoon Webcam 100 USB (06a5:0000) - nw800 - - Trust SpaceCam120 or SpaceCam100 PORTABLE (06a5:d800) - nw801 SpaceCam.init - or trust_space.init if no LED (?) - - Divio Chicony TwinkleCam (06a5:d800) ? - nw800 Twinkle.init - - Plustek Opticam 500U or ProLink DS3303u - nw801 DS3303u.init - - Logitech QuickCam Pro (dark focus ring) (046d:d001) - nw801 - - EZCam Pro p35u (052b:d001, 06a5:d001 and 06be:d001) - nw801 - sensor Sharp IR3Y38M - - AVerMedia Camguard (0728:d001) - nw801 - - Panasonic GP-KR651US (06a5:d001) - nw802 kr651us.init - - iRez Kritter cam - nw802 kritter.init - - D-link dru-350c cam - nw802 d-link-350c.init - - The Scope USB Microscope M2 (ProScope) - = Divio ProLink DS3303u WebCam (06a5:d001) - = Scalar USB Microscope M2 (Proscope) - nw802 proscope.init - - Conceptronic Video Pro 'CVIDEOPRO USB Webcam CCD' (06a5:d001) - nw802 cvideopro.init - - Mustek Wcam 300 mini - nw802 mustek_300_mini.init - - D-Link NetQam Pro 250plus (06a5:d001) - - Showcam NGS webcam (065a:d800) - - sceptre svc300 - - DSB-C110 (06a5:d800) - et31x110 - - DVC V6 (0502:d001) - nw802 - - registers - nw800/et31x110 nw801 nw802 - 0000..009e 0000..00a1 0000..009e - 0200..0211 id id - 0300..0302 id id - 0400..0406 (inex) 0400..0406 - 0500..0505 0500..0506 (inex) - 0600..061a 0600..0601 0600..0601 - 0800..0814 id id - 1000..109c 1000..10a1 1000..109a - - 080c: luma (nw800/nw802) - 080d: luma (nw801) - 1004: LUT (?) - 100b: R gain (0..63) - 100c: B gain - 100d: G gain - 100e: Y gain - 100f: U gain - 1010: V gain - 1019: clock (nw801 - bit 0x08: indoor/outdoor) - 101b: shutter 1 (0..255) - 101c: shutter 2 - 1026: BP = gain (nw801) - 1041, 1052, 1063, 1074: LUT base (nw802) - 1048, 1059, 106a, 107b: LUT base (nw801) - - resolutions - nw800 352x288 - nw801/nw802 320x240 - 640x480 -*/ + * registers + * nw800/et31x110 nw801 nw802 + * 0000..009e 0000..00a1 0000..009e + * 0200..0211 id id + * 0300..0302 id id + * 0400..0406 (inex) 0400..0406 + * 0500..0505 0500..0506 (inex) + * 0600..061a 0600..0601 0600..0601 + * 0800..0814 id id + * 1000..109c 1000..10a1 1000..109a + */ +/* resolutions + * nw800: 320x240, 352x288 + * nw801/802: 320x240, 640x480 + */ static const struct v4l2_pix_format cif_mode[] = { {352, 288, V4L2_PIX_FMT_JPGL, V4L2_FIELD_NONE, .bytesperline = 352, @@ -1769,7 +1774,12 @@ static int sd_config(struct gspca_dev *gspca_dev, if (sd->webcam == Generic800) sd->webcam = P35u; } - PDEBUG(D_PROBE, "Bridge nw80%d", sd->bridge); + if (webcam_chip[sd->webcam] != sd->bridge) { + err("Bad webcam type %d for NW80%d", sd->webcam, sd->bridge); + gspca_dev->usb_err = -ENODEV; + return gspca_dev->usb_err; + } + PDEBUG(D_PROBE, "Bridge nw80%d - type: %d", sd->bridge, sd->webcam); if (sd->bridge == BRIDGE_NW800) { gspca_dev->cam.cam_mode = cif_mode; -- cgit v1.2.3