rpms/kernel/devel linux-2.6-gspca-stv06xx-git.patch, NONE, 1.1 config-generic, 1.202, 1.203 kernel.spec, 1.1182, 1.1183 linux-2.6-gspca-git.patch, 1.1, 1.2
Hans de Goede
jwrdegoede at fedoraproject.org
Fri Dec 26 12:46:20 UTC 2008
Author: jwrdegoede
Update of /cvs/extras/rpms/kernel/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv28167
Modified Files:
config-generic kernel.spec linux-2.6-gspca-git.patch
Added Files:
linux-2.6-gspca-stv06xx-git.patch
Log Message:
* Fri Dec 26 2008 Hans de Goede <hdegoede at redhat.com>
- Rebase gspca git patch to latest gspca git
- Re-enable gspca git patch
- Add gscpa-stv06xx (qc-usb replacement) driver from its own git tree
linux-2.6-gspca-stv06xx-git.patch:
--- NEW FILE linux-2.6-gspca-stv06xx-git.patch ---
diff -urpN linux/drivers/media/video/gspca/Kconfig linux/drivers/media/video/gspca/Kconfig
--- linux/drivers/media/video/gspca/Kconfig 2008-12-09 21:37:33.000000000 +0100
+++ linux/drivers/media/video/gspca/Kconfig 2008-12-25 17:09:06.000000000 +0100
@@ -18,6 +18,7 @@ menuconfig USB_GSPCA
if USB_GSPCA && VIDEO_V4L2
source "drivers/media/video/gspca/m5602/Kconfig"
+source "drivers/media/video/gspca/stv06xx/Kconfig"
config USB_GSPCA_CONEX
tristate "Conexant Camera Driver"
diff -urpN linux/drivers/media/video/gspca/Makefile linux/drivers/media/video/gspca/Makefile
--- linux/drivers/media/video/gspca/Makefile 2008-12-09 21:37:33.000000000 +0100
+++ linux/drivers/media/video/gspca/Makefile 2008-12-25 17:09:06.000000000 +0100
@@ -47,4 +45,4 @@ gspca_vc032x-objs := vc032x.o
gspca_zc3xx-objs := zc3xx.o
obj-$(CONFIG_USB_M5602) += m5602/
-
+obj-$(CONFIG_USB_STV06XX) += stv06xx/
diff -urpN linux/drivers/media/video/gspca/gspca.h linux/drivers/media/video/gspca/gspca.h
--- linux/drivers/media/video/gspca/gspca.h 2008-12-10 19:53:43.000000000 +0100
+++ linux/drivers/media/video/gspca/gspca.h 2008-12-25 20:55:35.000000000 +0100
@@ -56,7 +56,7 @@ extern int gspca_debug;
/* device information - set at probe time */
struct cam {
int bulk_size; /* buffer size when image transfer by bulk */
- struct v4l2_pix_format *cam_mode; /* size nmodes */
+ const struct v4l2_pix_format *cam_mode; /* size nmodes */
char nmodes;
__u8 bulk_nurbs; /* number of URBs in bulk mode
* - cannot be > MAX_NURBS
diff -urpN linux/drivers/media/video/gspca/stv06xx/Kconfig linux/drivers/media/video/gspca/stv06xx/Kconfig
--- linux/drivers/media/video/gspca/stv06xx/Kconfig 1970-01-01 01:00:00.000000000 +0100
+++ linux/drivers/media/video/gspca/stv06xx/Kconfig 2008-12-25 17:09:06.000000000 +0100
@@ -0,0 +1,8 @@
+config USB_STV06XX
+ tristate "ST USB STV06XX Camera Driver"
+ depends on VIDEO_V4L2 && USB_GSPCA
+ help
+ Say Y here if you want support for cameras based on the ST STV06XX chip.
+
+ To compile this driver as a module, choose M here: the
+ module will be called gspca_stv06xx.
diff -urpN linux/drivers/media/video/gspca/stv06xx/Makefile linux/drivers/media/video/gspca/stv06xx/Makefile
--- linux/drivers/media/video/gspca/stv06xx/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ linux/drivers/media/video/gspca/stv06xx/Makefile 2008-12-25 17:09:06.000000000 +0100
@@ -0,0 +1,8 @@
+obj-$(CONFIG_USB_STV06XX) += gspca_stv06xx.o
+
+gspca_stv06xx-objs := stv06xx.o \
+ stv06xx_vv6410.o \
+ stv06xx_hdcs.o \
+ stv06xx_pb0100.o
+
+EXTRA_CFLAGS += -Idrivers/media/video/gspca
diff -urpN linux/drivers/media/video/gspca/stv06xx/stv06xx.c linux/drivers/media/video/gspca/stv06xx/stv06xx.c
--- linux/drivers/media/video/gspca/stv06xx/stv06xx.c 1970-01-01 01:00:00.000000000 +0100
+++ linux/drivers/media/video/gspca/stv06xx/stv06xx.c 2008-12-25 21:17:34.000000000 +0100
@@ -0,0 +1,522 @@
+/*
+ * Copyright (c) 2001 Jean-Fredric Clere, Nikolas Zimmermann, Georg Acher
+ * Mark Cave-Ayland, Carlo E Prelz, Dick Streefland
+ * Copyright (c) 2002, 2003 Tuukka Toivonen
+ * Copyright (c) 2008 Erik Andrén
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * P/N 861037: Sensor HDCS1000 ASIC STV0600
+ * P/N 861050-0010: Sensor HDCS1000 ASIC STV0600
+ * P/N 861050-0020: Sensor Photobit PB100 ASIC STV0600-1 - QuickCam Express
+ * P/N 861055: Sensor ST VV6410 ASIC STV0610 - LEGO cam
+ * P/N 861075-0040: Sensor HDCS1000 ASIC
+ * P/N 961179-0700: Sensor ST VV6410 ASIC STV0602 - Dexxa WebCam USB
+ * P/N 861040-0000: Sensor ST VV6410 ASIC STV0610 - QuickCam Web
+ */
+
+#include "stv06xx_sensor.h"
+
+MODULE_AUTHOR("Erik Andrén");
+MODULE_DESCRIPTION("STV06XX USB Camera Driver");
+MODULE_LICENSE("GPL");
+
+int dump_bridge;
+int dump_sensor;
+
+int stv06xx_write_bridge(struct sd *sd, u16 address, u16 i2c_data)
+{
+ int err;
+ struct usb_device *udev = sd->gspca_dev.dev;
+ __u8 *buf = sd->gspca_dev.usb_buf;
+ u8 len = (i2c_data > 0xff) ? 2 : 1;
+
+ buf[0] = i2c_data & 0xff;
+ buf[1] = (i2c_data >> 8) & 0xff;
+
+ err = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
+ 0x04, 0x40, address, 0, buf, len,
+ STV06XX_URB_MSG_TIMEOUT);
+
+
+ PDEBUG(D_CONF, "Written 0x%x to address 0x%x, status: %d",
+ i2c_data, address, err);
+
+ return (err < 0) ? err : 0;
+}
+
+int stv06xx_read_bridge(struct sd *sd, u16 address, u8 *i2c_data)
+{
+ int err;
+ struct usb_device *udev = sd->gspca_dev.dev;
+ __u8 *buf = sd->gspca_dev.usb_buf;
+
+ err = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0),
+ 0x04, 0xc0, address, 0, buf, 1,
+ STV06XX_URB_MSG_TIMEOUT);
+
+ *i2c_data = buf[0];
+
+ PDEBUG(D_CONF, "Read 0x%x from address 0x%x, status %d",
+ *i2c_data, address, err);
+
+ return (err < 0) ? err : 0;
+}
+
+/* Wraps the normal write sensor bytes / words functions for writing a
+ single value */
+int stv06xx_write_sensor(struct sd *sd, u8 address, u16 value)
+{
+ if (sd->sensor->i2c_len == 2) {
+ u16 data[2] = { address, value };
+ return stv06xx_write_sensor_words(sd, data, 1);
+ } else {
+ u8 data[2] = { address, value };
+ return stv06xx_write_sensor_bytes(sd, data, 1);
+ }
+}
+
+static int stv06xx_write_sensor_finish(struct sd *sd)
+{
+ int err = 0;
+
+ if (IS_850(sd)) {
+ struct usb_device *udev = sd->gspca_dev.dev;
+ __u8 *buf = sd->gspca_dev.usb_buf;
+
+ /* Quickam Web needs an extra packet */
+ buf[0] = 0;
+ err = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
+ 0x04, 0x40, 0x1704, 0, buf, 1,
+ STV06XX_URB_MSG_TIMEOUT);
+ }
+
+ return (err < 0) ? err : 0;
+}
+
+int stv06xx_write_sensor_bytes(struct sd *sd, const u8 *data, u8 len)
+{
+ int err, i, j;
+ struct usb_device *udev = sd->gspca_dev.dev;
+ __u8 *buf = sd->gspca_dev.usb_buf;
+
+ PDEBUG(D_USBO, "I2C: Command buffer contains %d entries", len);
+ for (i = 0; i < len;) {
+ /* Build the command buffer */
+ memset(buf, 0, I2C_BUFFER_LENGTH);
+ for (j = 0; j < I2C_MAX_BYTES && i < len; j++, i++) {
+ buf[j] = data[2*i];
+ buf[0x10 + j] = data[2*i+1];
+ PDEBUG(D_USBO, "I2C: Writing 0x%02x to reg 0x%02x",
+ data[2*i+1], data[2*i]);
+ }
+ buf[0x20] = sd->sensor->i2c_addr;
+ buf[0x21] = j - 1; /* Number of commands to send - 1 */
+ buf[0x22] = I2C_WRITE_CMD;
+ err = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
+ 0x04, 0x40, 0x0400, 0, buf,
+ I2C_BUFFER_LENGTH,
+ STV06XX_URB_MSG_TIMEOUT);
+ if (err < 0)
+ return err;
+ }
+ return stv06xx_write_sensor_finish(sd);
+}
+
+int stv06xx_write_sensor_words(struct sd *sd, const u16 *data, u8 len)
+{
[...2502 lines suppressed...]
+
+/* Dark line offset cancellation enable */
+#define VV6410_DARKOFFSETSETUP 0x2e
+
+/* Video timing registers */
+/* Line Length (Pixel Clocks) */
+#define VV6410_LINELENGTHH 0x52
+#define VV6410_LINELENGTHL 0x53
+
+/* X-co-ordinate of top left corner of region of interest (x-offset) */
+#define VV6410_XOFFSETH 0x57
+#define VV6410_XOFFSETL 0x58
+
+/* Y-coordinate of top left corner of region of interest (y-offset) */
+#define VV6410_YOFFSETH 0x59
+#define VV6410_YOFFSETL 0x5a
+
+/* Field length (Lines) */
+#define VV6410_FIELDLENGTHH 0x61
+#define VV6410_FIELDLENGTHL 0x62
+
+/* System registers */
+/* Black offset cancellation default value */
+#define VV6410_BLACKOFFSETH 0x70
+#define VV6410_BLACKOFFSETL 0x71
+
+/* Black offset cancellation setup */
+#define VV6410_BLACKOFFSETSETUP 0x72
+
+/* Analog Control Register 0 */
+#define VV6410_CR0 0x75
+
+/* Analog Control Register 1 */
+#define VV6410_CR1 0x76
+
+/* ADC Setup Register */
+#define VV6410_AS0 0x77
+
+/* Analog Test Register */
+#define VV6410_AT0 0x78
+
+/* Audio Amplifier Setup Register */
+#define VV6410_AT1 0x79
+
+#define VV6410_HFLIP (1 << 3)
+#define VV6410_VFLIP (1 << 4)
+
+#define VV6410_LOW_POWER_MODE (1 << 0)
+#define VV6410_SOFT_RESET (1 << 2)
+#define VV6410_PAL_25_FPS (0 << 3)
+
+#define VV6410_CLK_DIV_2 (1 << 1)
+
+#define VV6410_FINE_EXPOSURE 320
+#define VV6410_COARSE_EXPOSURE 192
+#define VV6410_DEFAULT_GAIN 11
+
+#define VV6410_SUBSAMPLE 0x01
+#define VV6410_CROP_TO_QVGA 0x02
+
+int vv6410_probe(struct sd *sd);
+int vv6410_start(struct sd *sd);
+int vv6410_init(struct sd *sd);
+int vv6410_stop(struct sd *sd);
+int vv6410_dump(struct sd *sd);
+
+/* V4L2 controls supported by the driver */
+int vv6410_get_hflip(struct gspca_dev *gspca_dev, __s32 *val);
+int vv6410_set_hflip(struct gspca_dev *gspca_dev, __s32 val);
+int vv6410_get_vflip(struct gspca_dev *gspca_dev, __s32 *val);
+int vv6410_set_vflip(struct gspca_dev *gspca_dev, __s32 val);
+int vv6410_get_analog_gain(struct gspca_dev *gspca_dev, __s32 *val);
+int vv6410_set_analog_gain(struct gspca_dev *gspca_dev, __s32 val);
+
+const struct stv06xx_sensor stv06xx_sensor_vv6410 = {
+ .name = "ST VV6410",
+ .i2c_flush = 5,
+ .i2c_addr = 0x20,
+ .i2c_len = 1,
+ .init = vv6410_init,
+ .probe = vv6410_probe,
+ .start = vv6410_start,
+ .stop = vv6410_stop,
+ .dump = vv6410_dump,
+
+ .nctrls = 3,
+ .ctrls = {
+ {
+ {
+ .id = V4L2_CID_HFLIP,
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
+ .name = "horizontal flip",
+ .minimum = 0,
+ .maximum = 1,
+ .step = 1,
+ .default_value = 0
+ },
+ .set = vv6410_set_hflip,
+ .get = vv6410_get_hflip
+ }, {
+ {
+ .id = V4L2_CID_VFLIP,
+ .type = V4L2_CTRL_TYPE_BOOLEAN,
+ .name = "vertical flip",
+ .minimum = 0,
+ .maximum = 1,
+ .step = 1,
+ .default_value = 0
+ },
+ .set = vv6410_set_vflip,
+ .get = vv6410_get_vflip
+ }, {
+ {
+ .id = V4L2_CID_GAIN,
+ .type = V4L2_CTRL_TYPE_INTEGER,
+ .name = "analog gain",
+ .minimum = 0,
+ .maximum = 15,
+ .step = 1,
+ .default_value = 0
+ },
+ .set = vv6410_set_analog_gain,
+ .get = vv6410_get_analog_gain
+ }
+ },
+
+ .nmodes = 1,
+ .modes = {
+ {
+ 356,
+ 292,
+ V4L2_PIX_FMT_SGRBG8,
+ V4L2_FIELD_NONE,
+ .sizeimage =
+ 356 * 292,
+ .bytesperline = 356,
+ .colorspace = V4L2_COLORSPACE_SRGB,
+ .priv = 0
+ }
+ }
+};
+
+/* If NULL, only single value to write, stored in len */
+struct stv_init {
+ const u8 *data;
+ u16 start;
+ u8 len;
+};
+
+static const u8 x1500[] = { /* 0x1500 - 0x150f */
+ 0x0b, 0xa7, 0xb7, 0x00, 0x00
+};
+
+static const u8 x1536[] = { /* 0x1536 - 0x153b */
+ 0x02, 0x00, 0x60, 0x01, 0x20, 0x01
+};
+
+static const u8 x15c1[] = { /* 0x15c1 - 0x15c2 */
+ 0xff, 0x03 /* Output word 0x03ff = 1023 (ISO size) */
+};
+
+static const struct stv_init stv_bridge_init[] = {
+ /* This reg is written twice. Some kind of reset? */
+ {NULL, 0x1620, 0x80},
+ {NULL, 0x1620, 0x00},
+ {NULL, 0x1423, 0x04},
+ {x1500, 0x1500, ARRAY_SIZE(x1500)},
+ {x1536, 0x1536, ARRAY_SIZE(x1536)},
+ {x15c1, 0x15c1, ARRAY_SIZE(x15c1)}
+};
+
+static const u8 vv6410_sensor_init[][2] = {
+ /* Setup registers */
+ {VV6410_SETUP0, VV6410_SOFT_RESET},
+ {VV6410_SETUP0, VV6410_LOW_POWER_MODE},
+ /* Use shuffled read-out mode */
+ {VV6410_SETUP1, BIT(6)},
+ /* All modes to 1 */
+ {VV6410_FGMODES, BIT(6) | BIT(4) | BIT(2) | BIT(0)},
+ {VV6410_PINMAPPING, 0x00},
+ /* Pre-clock generator divide off */
+ {VV6410_DATAFORMAT, BIT(7) | BIT(0)},
+
+ /* Exposure registers */
+ {VV6410_FINEH, VV6410_FINE_EXPOSURE >> 8},
+ {VV6410_FINEL, VV6410_FINE_EXPOSURE & 0xff},
+ {VV6410_COARSEH, VV6410_COARSE_EXPOSURE >> 8},
+ {VV6410_COARSEL, VV6410_COARSE_EXPOSURE & 0xff},
+ {VV6410_ANALOGGAIN, 0xf0 | VV6410_DEFAULT_GAIN},
+ {VV6410_CLKDIV, VV6410_CLK_DIV_2},
+
+ /* System registers */
+ /* Enable voltage doubler */
+ {VV6410_AS0, BIT(6) | BIT(4) | BIT(3) | BIT(2) | BIT(1)},
+ {VV6410_AT0, 0x00},
+ /* Power up audio, differential */
+ {VV6410_AT1, BIT(4)|BIT(0)},
+};
+
+#endif
Index: config-generic
===================================================================
RCS file: /cvs/extras/rpms/kernel/devel/config-generic,v
retrieving revision 1.202
retrieving revision 1.203
diff -u -r1.202 -r1.203
--- config-generic 25 Dec 2008 21:15:25 -0000 1.202
+++ config-generic 26 Dec 2008 12:45:49 -0000 1.203
@@ -2736,6 +2736,7 @@
CONFIG_USB_DSBR=m
CONFIG_USB_ET61X251=m
CONFIG_USB_M5602=m
+CONFIG_USB_STV06XX=m
CONFIG_USB_GSPCA=m
CONFIG_USB_GSPCA_CONEX=m
CONFIG_USB_GSPCA_ETOMS=m
Index: kernel.spec
===================================================================
RCS file: /cvs/extras/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.1182
retrieving revision 1.1183
diff -u -r1.1182 -r1.1183
--- kernel.spec 25 Dec 2008 21:15:26 -0000 1.1182
+++ kernel.spec 26 Dec 2008 12:45:49 -0000 1.1183
@@ -634,6 +634,7 @@
# webcam fixes
Patch900: linux-2.6-gspca-git.patch
+Patch901: linux-2.6-gspca-stv06xx-git.patch
Patch1515: linux-2.6.27-lirc.patch
Patch1520: linux-2.6-hdpvr.patch
@@ -1155,7 +1156,8 @@
ApplyPatch linux-2.6-at76.patch
# Webcam patches
-#ApplyPatch linux-2.6-gspca-git.patch
+ApplyPatch linux-2.6-gspca-git.patch
+ApplyPatch linux-2.6-gspca-stv06xx-git.patch
# http://www.lirc.org/
ApplyPatch linux-2.6.27-lirc.patch
@@ -1773,6 +1775,11 @@
%kernel_variant_files -k vmlinux %{with_kdump} kdump
%changelog
+* Fri Dec 26 2008 Hans de Goede <hdegoede at redhat.com>
+- Rebase gspca git patch to latest gspca git
+- Re-enable gspca git patch
+- Add gscpa-stv06xx (qc-usb replacement) driver from its own git tree
+
* Thu Dec 25 2008 Dave Jones <davej at redhat.com>
- Enable BOOT_TRACER during testing.
linux-2.6-gspca-git.patch:
View full diff with command:
/usr/bin/cvs -f diff -kk -u -N -r 1.1 -r 1.2 linux-2.6-gspca-git.patch
Index: linux-2.6-gspca-git.patch
===================================================================
RCS file: /cvs/extras/rpms/kernel/devel/linux-2.6-gspca-git.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-gspca-git.patch 11 Dec 2008 19:15:30 -0000 1.1
+++ linux-2.6-gspca-git.patch 26 Dec 2008 12:45:49 -0000 1.2
@@ -1,5 +1,5 @@
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/Kconfig linux/drivers/media/video/gspca/Kconfig
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/Kconfig 2008-12-10 19:44:21.000000000 +0100
+diff -urN linux/drivers/media/video/gspca/Kconfig linux/drivers/media/video/gspca/Kconfig
+--- linux/drivers/media/video/gspca/Kconfig 2008-12-25 00:26:37.000000000 +0100
+++ linux/drivers/media/video/gspca/Kconfig 2008-12-09 21:37:33.000000000 +0100
@@ -12,7 +12,7 @@
"Video For Linux" to use this driver.
@@ -60,8 +60,8 @@
config USB_GSPCA_T613
tristate "T613 (JPEG Compliance) USB Camera Driver"
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/Makefile linux/drivers/media/video/gspca/Makefile
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/Makefile 2008-12-10 19:44:21.000000000 +0100
+diff -urN linux/drivers/media/video/gspca/Makefile linux/drivers/media/video/gspca/Makefile
+--- linux/drivers/media/video/gspca/Makefile 2008-12-25 00:26:37.000000000 +0100
+++ linux/drivers/media/video/gspca/Makefile 2008-12-09 21:37:33.000000000 +0100
@@ -4,6 +4,7 @@
obj-$(CONFIG_USB_GSPCA_FINEPIX) += gspca_finepix.o
@@ -79,24 +79,8 @@
gspca_pac207-objs := pac207.o
gspca_pac7311-objs := pac7311.o
gspca_sonixb-objs := sonixb.o
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/etoms.c linux/drivers/media/video/gspca/etoms.c
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/etoms.c 2008-12-10 19:44:21.000000000 +0100
-+++ linux/drivers/media/video/gspca/etoms.c 2008-12-09 21:37:33.000000000 +0100
-@@ -733,6 +733,12 @@
-
- i2c_w(gspca_dev, PAS106_REG13, &i2cflags, 1, 3);
- i2c_w(gspca_dev, PAS106_REG0e, &gain, 1, 1);
-+#if 0
-+ i2c_w(gspca_dev, 0x09, &gain, 1, 1);
-+ i2c_w(gspca_dev, 0x0a, &gain, 1, 1);
-+ i2c_w(gspca_dev, 0x0b, &gain, 1, 1);
-+ i2c_w(gspca_dev, 0x0c, &gain, 1, 1);
-+#endif
- }
- }
-
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/finepix.c linux/drivers/media/video/gspca/finepix.c
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/finepix.c 2008-12-10 19:44:21.000000000 +0100
+diff -urN linux/drivers/media/video/gspca/finepix.c linux/drivers/media/video/gspca/finepix.c
+--- linux/drivers/media/video/gspca/finepix.c 2008-12-25 00:26:37.000000000 +0100
+++ linux/drivers/media/video/gspca/finepix.c 2008-12-09 21:37:33.000000000 +0100
@@ -314,9 +314,6 @@
int ret;
@@ -108,9 +92,9 @@
/* Init the device */
memset(gspca_dev->usb_buf, 0, 12);
gspca_dev->usb_buf[0] = 0xc6;
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/gspca.c linux/drivers/media/video/gspca/gspca.c
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/gspca.c 2008-12-10 19:44:21.000000000 +0100
-+++ linux/drivers/media/video/gspca/gspca.c 2008-12-10 19:53:43.000000000 +0100
+diff -urN linux/drivers/media/video/gspca/gspca.c linux/drivers/media/video/gspca/gspca.c
+--- linux/drivers/media/video/gspca/gspca.c 2008-12-25 00:26:37.000000000 +0100
++++ linux/drivers/media/video/gspca/gspca.c 2008-12-25 15:33:23.000000000 +0100
@@ -45,7 +48,7 @@
MODULE_DESCRIPTION("GSPCA USB Camera Driver");
MODULE_LICENSE("GPL");
@@ -141,7 +125,7 @@
st = usb_submit_urb(urb, GFP_ATOMIC);
if (st < 0)
PDEBUG(D_ERR|D_PACK, "usb_submit_urb() ret %d", st);
-@@ -200,11 +208,18 @@
+@@ -200,11 +204,18 @@
{
struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
struct gspca_frame *frame;
@@ -273,7 +257,25 @@
return -EINVAL;
}
}
-@@ -846,11 +879,11 @@
+@@ -752,8 +785,6 @@
+ struct gspca_dev *gspca_dev = priv;
+ int mode;
+
+- if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+- return -EINVAL;
+ mode = gspca_dev->curr_mode;
+ memcpy(&fmt->fmt.pix, &gspca_dev->cam.cam_mode[mode],
+ sizeof fmt->fmt.pix);
+@@ -765,8 +796,6 @@
+ {
+ int w, h, mode, mode2;
+
+- if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+- return -EINVAL;
+ w = fmt->fmt.pix.width;
+ h = fmt->fmt.pix.height;
+
+@@ -846,11 +875,11 @@
return ret;
}
@@ -288,7 +290,7 @@
kfree(gspca_dev->usb_buf);
kfree(gspca_dev);
-@@ -862,7 +895,7 @@
+@@ -862,7 +891,7 @@
int ret;
PDEBUG(D_STREAM, "%s open", current->comm);
@@ -297,7 +299,7 @@
if (mutex_lock_interruptible(&gspca_dev->queue_lock))
return -ERESTARTSYS;
if (!gspca_dev->present) {
-@@ -883,17 +916,14 @@
+@@ -883,17 +912,14 @@
gspca_dev->users++;
@@ -317,7 +319,7 @@
| V4L2_DEBUG_IOCTL_ARG);
#endif
ret = 0;
-@@ -932,8 +962,6 @@
+@@ -932,8 +958,6 @@
PDEBUG(D_STREAM, "close done");
@@ -326,7 +328,7 @@
return 0;
}
-@@ -1053,6 +1081,35 @@
+@@ -1053,6 +1077,35 @@
return -EINVAL;
}
@@ -362,7 +364,36 @@
static int vidioc_querymenu(struct file *file, void *priv,
struct v4l2_querymenu *qmenu)
{
-@@ -1236,7 +1293,6 @@
+@@ -1096,8 +1149,6 @@
+ struct gspca_dev *gspca_dev = priv;
+ int i, ret = 0;
+
+- if (rb->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
+- return -EINVAL;
+ switch (rb->memory) {
+ case GSPCA_MEMORY_READ: /* (internal call) */
+ case V4L2_MEMORY_MMAP:
+@@ -1162,8 +1213,7 @@
+ struct gspca_dev *gspca_dev = priv;
+ struct gspca_frame *frame;
+
+- if (v4l2_buf->type != V4L2_BUF_TYPE_VIDEO_CAPTURE
+- || v4l2_buf->index < 0
++ if (v4l2_buf->index < 0
+ || v4l2_buf->index >= gspca_dev->nframes)
+ return -EINVAL;
+
+@@ -1186,7 +1236,8 @@
+ ret = -ENODEV;
+ goto out;
+ }
+- if (gspca_dev->nframes == 0) {
++ if (gspca_dev->nframes == 0
++ || !(gspca_dev->frame[0].v4l2_buf.flags & V4L2_BUF_FLAG_QUEUED)) {
+ ret = -EINVAL;
+ goto out;
+ }
+@@ -1236,7 +1287,6 @@
gspca_dev->fr_i = gspca_dev->fr_o = gspca_dev->fr_q = 0;
gspca_dev->last_packet_type = DISCARD_PACKET;
gspca_dev->sequence = 0;
@@ -370,20 +401,7 @@
ret = 0;
out:
mutex_unlock(&gspca_dev->queue_lock);
-@@ -1264,10 +1320,10 @@
- struct gspca_dev *gspca_dev = priv;
- int ret;
-
-- if (mutex_lock_interruptible(&gspca_dev->usb_lock))
-- return -ERESTARTSYS;
- if (!gspca_dev->sd_desc->set_jcomp)
- return -EINVAL;
-+ if (mutex_lock_interruptible(&gspca_dev->usb_lock))
-+ return -ERESTARTSYS;
- ret = gspca_dev->sd_desc->set_jcomp(gspca_dev, jpegcomp);
- mutex_unlock(&gspca_dev->usb_lock);
- return ret;
-@@ -1281,6 +1337,17 @@
+@@ -1281,6 +1331,17 @@
memset(parm, 0, sizeof *parm);
parm->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
parm->parm.capture.readbuffers = gspca_dev->nbufread;
@@ -401,7 +419,7 @@
[...1918 lines suppressed...]
++ case SENSOR_PO1200:
++ data = 0;
++ i2c_write(gspca_dev, 0x03, &data, 1);
++ data = 0x80 * sd->hflip
++ | 0x40 * sd->vflip
++ | 0x06;
++ i2c_write(gspca_dev, 0x1e, &data, 1);
++ return;
+ default:
+ return;
+ }
@@ -4701,7 +5162,28 @@
}
static void setlightfreq(struct gspca_dev *gspca_dev)
-@@ -1551,6 +2157,17 @@
+@@ -1501,6 +2133,20 @@
+ usb_exchange(gspca_dev, ov7660_freq_tb[sd->lightfreq]);
+ }
+
++/* po1200 only */
++static void setsharpness(struct gspca_dev *gspca_dev)
++{
++ struct sd *sd = (struct sd *) gspca_dev;
++ __u8 data;
++
++ if (sd->sensor != SENSOR_PO1200)
++ return;
++ data = 0;
++ i2c_write(gspca_dev, 0x03, &data, 1);
++ data = 0xb5 + sd->sharpness * 3;
++ i2c_write(gspca_dev, 0x61, &data, 1);
++}
++
+ static int sd_start(struct gspca_dev *gspca_dev)
+ {
+ struct sd *sd = (struct sd *) gspca_dev;
+@@ -1551,6 +2197,17 @@
usb_exchange(gspca_dev, ov7670_initVGA_JPG);
}
break;
@@ -4719,7 +5201,7 @@
case SENSOR_MI1310_SOC:
if (mode) {
/* 320x240 */
-@@ -1583,6 +2200,11 @@
+@@ -1583,6 +2240,11 @@
}
usb_exchange(gspca_dev, po3130_rundata);
break;
@@ -4731,7 +5213,7 @@
default:
PDEBUG(D_PROBE, "Damned !! no sensor found Bye");
return -EMEDIUMTYPE;
-@@ -1615,11 +2237,15 @@
+@@ -1615,11 +2277,16 @@
reg_w(gspca_dev->dev, 0xa0, 0x23, 0xb800); * ISP CTRL_BAS
*/
/* set the led on 0x0892 0x0896 */
@@ -4743,36 +5225,38 @@
+ if (sd->sensor != SENSOR_PO1200) {
+ reg_w(gspca_dev->dev, 0x89, 0xffff, 0xfdff);
+ msleep(100);
-+ setquality(gspca_dev);
+ sethvflip(gspca_dev);
+ setlightfreq(gspca_dev);
+ } else {
++ setsharpness(gspca_dev);
++ sethvflip(gspca_dev);
+ reg_w(gspca_dev->dev, 0x89, 0x0400, 0x1415);
+ }
}
return 0;
}
-@@ -1665,24 +2291,49 @@
+@@ -1665,24 +2332,48 @@
data, len);
return;
}
+
+ /* The vc0321 sends some additional data after sending the complete
-+ frame, we ignore this. */
-+ if (sd->bridge == BRIDGE_VC0321 && ((frame->data_end - frame->data)
-+ + len) > frame->v4l2_buf.length)
++ * frame, we ignore this. */
++ if (sd->bridge == BRIDGE_VC0321
++ && len > frame->v4l2_buf.length - (frame->data_end - frame->data))
+ len = frame->v4l2_buf.length - (frame->data_end - frame->data);
-+
gspca_frame_add(gspca_dev, INTER_PACKET, frame, data, len);
}
-static int sd_setautogain(struct gspca_dev *gspca_dev, __s32 val)
+static int sd_sethflip(struct gspca_dev *gspca_dev, __s32 val)
-+{
-+ struct sd *sd = (struct sd *) gspca_dev;
-+
+ {
+ struct sd *sd = (struct sd *) gspca_dev;
+
+- sd->autogain = val;
+ sd->hflip = val;
-+ if (gspca_dev->streaming)
+ if (gspca_dev->streaming)
+- setautogain(gspca_dev);
+ sethvflip(gspca_dev);
+ return 0;
+}
@@ -4782,32 +5266,55 @@
+ struct sd *sd = (struct sd *) gspca_dev;
+
+ *val = sd->hflip;
-+ return 0;
-+}
-+
-+static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val)
- {
- struct sd *sd = (struct sd *) gspca_dev;
-
-- sd->autogain = val;
-+ sd->vflip = val;
- if (gspca_dev->streaming)
-- setautogain(gspca_dev);
-+ sethvflip(gspca_dev);
return 0;
}
-static int sd_getautogain(struct gspca_dev *gspca_dev, __s32 *val)
-+static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val)
++static int sd_setvflip(struct gspca_dev *gspca_dev, __s32 val)
{
struct sd *sd = (struct sd *) gspca_dev;
- *val = sd->autogain;
++ sd->vflip = val;
++ if (gspca_dev->streaming)
++ sethvflip(gspca_dev);
++ return 0;
++}
++
++static int sd_getvflip(struct gspca_dev *gspca_dev, __s32 *val)
++{
++ struct sd *sd = (struct sd *) gspca_dev;
++
+ *val = sd->vflip;
return 0;
}
-@@ -1748,6 +2399,7 @@
+@@ -1704,6 +2395,24 @@
+ return 0;
+ }
+
++static int sd_setsharpness(struct gspca_dev *gspca_dev, __s32 val)
++{
++ struct sd *sd = (struct sd *) gspca_dev;
++
++ sd->sharpness = val;
++ if (gspca_dev->streaming)
++ setsharpness(gspca_dev);
++ return 0;
++}
++
++static int sd_getsharpness(struct gspca_dev *gspca_dev, __s32 *val)
++{
++ struct sd *sd = (struct sd *) gspca_dev;
++
++ *val = sd->sharpness;
++ return 0;
++}
++
+ static int sd_querymenu(struct gspca_dev *gspca_dev,
+ struct v4l2_querymenu *menu)
+ {
+@@ -1748,6 +2457,7 @@
{USB_DEVICE(0x0ac8, 0x0328), .driver_info = BRIDGE_VC0321},
{USB_DEVICE(0x0ac8, 0xc001), .driver_info = BRIDGE_VC0321},
{USB_DEVICE(0x0ac8, 0xc002), .driver_info = BRIDGE_VC0321},
@@ -4815,8 +5322,8 @@
{USB_DEVICE(0x17ef, 0x4802), .driver_info = BRIDGE_VC0323},
{}
};
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/zc3xx-reg.h linux/drivers/media/video/gspca/zc3xx-reg.h
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/zc3xx-reg.h 2008-10-10 00:13:53.000000000 +0200
+diff -urN linux/drivers/media/video/gspca/zc3xx-reg.h linux/drivers/media/video/gspca/zc3xx-reg.h
+--- linux/drivers/media/video/gspca/zc3xx-reg.h 2008-12-25 00:26:37.000000000 +0100
+++ linux/drivers/media/video/gspca/zc3xx-reg.h 2008-12-09 21:37:33.000000000 +0100
@@ -244,14 +244,6 @@
#define ZC3XX_R1CA_SHARPNESS04 0x01ca
@@ -4833,8 +5340,8 @@
/* Dead pixels */
#define ZC3XX_R250_DEADPIXELSMODE 0x0250
-diff -urN /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/zc3xx.c linux/drivers/media/video/gspca/zc3xx.c
---- /home/hans/projects/fedora-extras/kernel/devel/kernel-2.6.27/linux-2.6.27.noarch/drivers/media/video/gspca/zc3xx.c 2008-12-10 19:44:21.000000000 +0100
+diff -urN linux/drivers/media/video/gspca/zc3xx.c linux/drivers/media/video/gspca/zc3xx.c
+--- linux/drivers/media/video/gspca/zc3xx.c 2008-12-25 00:26:37.000000000 +0100
+++ linux/drivers/media/video/gspca/zc3xx.c 2008-12-09 21:37:33.000000000 +0100
@@ -51,16 +51,16 @@
#define SENSOR_CS2102 0
More information about the fedora-extras-commits
mailing list