From patchwork Sat Apr 13 10:21:44 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Frank Schaefer X-Patchwork-Id: 17928 X-Patchwork-Delegate: hverkuil@xs4all.nl Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1UQxa3-0003Vv-Bl; Sat, 13 Apr 2013 12:21:11 +0200 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.75/mailfrontend-2) with esmtp id 1UQxa2-0001Cs-HL; Sat, 13 Apr 2013 12:21:11 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752764Ab3DMKU4 (ORCPT + 1 other); Sat, 13 Apr 2013 06:20:56 -0400 Received: from mail-ea0-f170.google.com ([209.85.215.170]:47710 "EHLO mail-ea0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752354Ab3DMKUz (ORCPT ); Sat, 13 Apr 2013 06:20:55 -0400 Received: by mail-ea0-f170.google.com with SMTP id a15so1520125eae.1 for ; Sat, 13 Apr 2013 03:20:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer:mime-version :content-type:content-transfer-encoding; bh=mA8sFhCDrVtVu6e7Rnp5CDp4Q7IaRw7cEtpRNJ/gPB0=; b=Sy4XPNTELJeBMJXJJ0EfmbD/td0bjm1Inq57tJE0CApOOIzzAem/OwAyOViDbalWuh gwJ76e/gtF1CkkJRC9U8vNFKfMWMqW7K3N/M5a3lKBYnPbVearZ1CkSzH/dANHBjbEh5 OQr/z5dE7ZU9ISN7ioAHUyp3Dksw6fQ421RTDT9+/7EACCWPQ5Ggk2XnngbYzSNXnn45 FdPvdS6gx0Stvilva8Xu+0q+cwYQwEfRBdHAP3n4HAQozIg2InnT/jhIV9O7WPgvhq13 /pghjICr0L75VoKO7g+BO9tx/OF89lJrlc2wsgU8qgBMsi0nKQsnzKHi7qdoSFsdqFEK 9rkg== X-Received: by 10.14.179.201 with SMTP id h49mr37766120eem.26.1365848453588; Sat, 13 Apr 2013 03:20:53 -0700 (PDT) Received: from Athlon64X2-5000.site (ip-109-90-247-142.unitymediagroup.de. [109.90.247.142]) by mx.google.com with ESMTPS id f47sm15611662eep.13.2013.04.13.03.20.52 (version=TLSv1.2 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 13 Apr 2013 03:20:53 -0700 (PDT) From: =?UTF-8?q?Frank=20Sch=C3=A4fer?= To: mchehab@redhat.com Cc: linux-media@vger.kernel.org, =?UTF-8?q?Frank=20Sch=C3=A4fer?= Subject: [PATCH] em28xx: add basic support for the "SpeedLink Vicious And Devine Laplace" webcam Date: Sat, 13 Apr 2013 12:21:44 +0200 Message-Id: <1365848504-3689-1-git-send-email-fschaefer.oss@googlemail.com> X-Mailer: git-send-email 1.7.10.4 MIME-Version: 1.0 Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2013.4.13.101216 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_5000_5999 0, BODY_SIZE_7000_LESS 0, CT_TEXT_PLAIN_UTF8_CAPS 0, DKIM_SIGNATURE 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_MEDIA_BODY 0, __CP_URI_IN_BODY 0, __CT 0, __CTE 0, __CT_TEXT_PLAIN 0, __FRAUD_BODY_WEBMAIL 0, __FRAUD_WEBMAIL 0, __FRAUD_WEBMAIL_FROM 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __MIME_TEXT_ONLY 0, __MIME_VERSION 0, __MULTIPLE_RCPTS_CC_X2 0, __PHISH_SPEAR_STRUCTURE_1 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_WWW 0, __URI_NS , __YOUTUBE_RCVD 0' The SpeedLink Vicious And Devine Laplace webcam uses an EM2765 bridge and an OV2640 sensor which allows capturing at a max. resoultion of 1600x1200 at max. 7-8 fps. It has a built-in microphone (USB standard device class) and provides 3 buttons (snapshot, mute, illumination) and 2 LEDs (capturing/mute and illumination/flash). It is also equipped with an eeprom. The device is available in two colors: white (1ae7:9003) and black (1ae7:9004). This patch adds only basic support for this device, the limitations are: - resolution limited to max. 640x480 - image quality needs to be improved - support for the 3 buttons (snapshot, mute, illumination) is missing - illumination/flash LED support is missing (capturing LED is functional) Signed-off-by: Frank Schäfer --- drivers/media/usb/em28xx/em28xx-cards.c | 34 ++++++++++++++++++++++++++++++- drivers/media/usb/em28xx/em28xx-video.c | 14 +++++++++++++ drivers/media/usb/em28xx/em28xx.h | 1 + 3 Dateien geändert, 48 Zeilen hinzugefügt(+), 1 Zeile entfernt(-) diff --git a/drivers/media/usb/em28xx/em28xx-cards.c b/drivers/media/usb/em28xx/em28xx-cards.c index e328159..c5d3fa56 100644 --- a/drivers/media/usb/em28xx/em28xx-cards.c +++ b/drivers/media/usb/em28xx/em28xx-cards.c @@ -411,6 +411,19 @@ static struct em28xx_reg_seq pctv_520e[] = { { -1, -1, -1, -1}, }; +/* 1ae7:9003/9004 SpeedLink Vicious And Devine Laplace webcam + * reg 0x80/0x84: + * GPIO_0: capturing LED, 0=on, 1=off + * GPIO_2: mute button, 0=pressed, 1=unpressed + * GPIO 3: illumination button, 0=pressed, 1=unpressed + * GPIO_6: illumination/flash LED, 0=on, 1=off + */ +static struct em28xx_reg_seq speedlink_vad_laplace_reg_seq[] = { + {EM28XX_R08_GPIO, 0xf7, 0xff, 10}, + {EM25XX_R80_GPIO_P0_W, 0xff, 0xff, 10}, + { -1, -1, -1, -1}, +}; + /* * Board definitions */ @@ -1787,7 +1800,6 @@ struct em28xx_board em28xx_boards[] = { .type = EM28XX_VMUX_TELEVISION, .vmux = TVP5150_COMPOSITE0, .amux = EM28XX_AMUX_VIDEO, - }, { .type = EM28XX_VMUX_COMPOSITE1, .vmux = TVP5150_COMPOSITE1, @@ -2016,6 +2028,22 @@ struct em28xx_board em28xx_boards[] = { .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | EM28XX_I2C_FREQ_400_KHZ, }, + /* 1ae7:9003/9004 SpeedLink Vicious And Devine Laplace webcam + * Empia EM2765 + OmniVision OV2640 */ + [EM2765_BOARD_SPEEDLINK_VAD_LAPLACE] = { + .name = "SpeedLink Vicious And Devine Laplace webcam", + .xclk = EM28XX_XCLK_FREQUENCY_24MHZ, + .i2c_speed = EM28XX_I2C_CLK_WAIT_ENABLE | + EM28XX_I2C_FREQ_100_KHZ, + .def_i2c_bus = 1, + .tuner_type = TUNER_ABSENT, + .is_webcam = 1, + .input = { { + .type = EM28XX_VMUX_COMPOSITE1, + .amux = EM28XX_AMUX_VIDEO, + .gpio = speedlink_vad_laplace_reg_seq, + } }, + }, }; const unsigned int em28xx_bcount = ARRAY_SIZE(em28xx_boards); @@ -2177,6 +2205,10 @@ struct usb_device_id em28xx_id_table[] = { .driver_info = EM2884_BOARD_PCTV_510E }, { USB_DEVICE(0x2013, 0x0251), .driver_info = EM2884_BOARD_PCTV_520E }, + { USB_DEVICE(0x1ae7, 0x9003), + .driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE }, + { USB_DEVICE(0x1ae7, 0x9004), + .driver_info = EM2765_BOARD_SPEEDLINK_VAD_LAPLACE }, { }, }; MODULE_DEVICE_TABLE(usb, em28xx_id_table); diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c index 792ead1..f949cdc 100644 --- a/drivers/media/usb/em28xx/em28xx-video.c +++ b/drivers/media/usb/em28xx/em28xx-video.c @@ -660,6 +660,13 @@ int em28xx_start_analog_streaming(struct vb2_queue *vq, unsigned int count) if (rc < 0) goto fail; + /* Switch on capturing LED */ + if (dev->model == EM2765_BOARD_SPEEDLINK_VAD_LAPLACE) + em28xx_write_regs_bits(dev, + EM25XX_R84_GPIO_P0_R, + EM25XX_R80_GPIO_P0_W, + 0x00, 0x01); + /* * djh: it's not clear whether this code is still needed. I'm * leaving it in here for now entirely out of concern for @@ -693,6 +700,13 @@ static int em28xx_stop_streaming(struct vb2_queue *vq) if (dev->streaming_users-- == 1) { /* Last active user, so shutdown all the URBS */ em28xx_uninit_usb_xfer(dev, EM28XX_ANALOG_MODE); + + /* Switch off capturing LED */ + if (dev->model == EM2765_BOARD_SPEEDLINK_VAD_LAPLACE) + em28xx_write_regs_bits(dev, + EM25XX_R84_GPIO_P0_R, + EM25XX_R80_GPIO_P0_W, + 0x01, 0x01); } spin_lock_irqsave(&dev->slock, flags); diff --git a/drivers/media/usb/em28xx/em28xx.h b/drivers/media/usb/em28xx/em28xx.h index a817c3d..d51f38f 100644 --- a/drivers/media/usb/em28xx/em28xx.h +++ b/drivers/media/usb/em28xx/em28xx.h @@ -130,6 +130,7 @@ #define EM2884_BOARD_PCTV_520E 86 #define EM2884_BOARD_TERRATEC_HTC_USB_XS 87 #define EM2884_BOARD_C3TECH_DIGITAL_DUO 88 +#define EM2765_BOARD_SPEEDLINK_VAD_LAPLACE 89 /* Limits minimum and default number of buffers */ #define EM28XX_MIN_BUF 4