Skip to content

Commit

Permalink
V4L/DVB (8720): gspca: V4L2_CAP_SENSOR_UPSIDE_DOWN added as a cap for…
Browse files Browse the repository at this point in the history
… some webcams.

This patch adds a V4L2_CAP_SENSOR_UPSIDE_DOWN flag to the capabilities flags,
and sets this flag for the Philips SPC200NC cam (which has its sensor installed
upside down). The same flag is also needed and added for the Philips SPC300NC.

Together with a patch to libv4l which adds flipping the image in software this
fixes the upside down display with the SPC200NC cam.

Signed-of-by: Hans de Goede <j.w.r.degoede@hhs.nl>

Signed-off-by: Jean-Francois Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Hans de Goede authored and Mauro Carvalho Chehab committed Sep 3, 2008
1 parent f9b4a37 commit 89a44b8
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 12 deletions.
2 changes: 2 additions & 0 deletions drivers/media/video/gspca/gspca.c
Original file line number Diff line number Diff line change
Expand Up @@ -851,6 +851,8 @@ static int vidioc_querycap(struct file *file, void *priv,
cap->capabilities = V4L2_CAP_VIDEO_CAPTURE
| V4L2_CAP_STREAMING
| V4L2_CAP_READWRITE;
if (gspca_dev->flags & GSPCA_SENSOR_UPSIDE_DOWN_FLAG)
cap->capabilities |= V4L2_CAP_SENSOR_UPSIDE_DOWN;
return 0;
}

Expand Down
4 changes: 4 additions & 0 deletions drivers/media/video/gspca/gspca.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,9 @@ struct gspca_frame {
struct v4l2_buffer v4l2_buf;
};

/* defines for the flags member */
#define GSPCA_SENSOR_UPSIDE_DOWN_FLAG 0x01

struct gspca_dev {
struct video_device vdev; /* !! must be the first item */
struct file_operations fops;
Expand Down Expand Up @@ -163,6 +166,7 @@ struct gspca_dev {
char nurbs; /* number of allocated URBs */
char memory; /* memory type (V4L2_MEMORY_xxx) */
__u8 nbalt; /* number of USB alternate settings */
__u8 flags; /* see GSPCA_XXX_FLAG defines */
};

int gspca_dev_probe(struct usb_interface *intf,
Expand Down
31 changes: 19 additions & 12 deletions drivers/media/video/gspca/zc3xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ struct sd {
unsigned short chip_revision;
};

#define DRIVER_INFO(sensor, flags) .driver_info = ((sensor) << 8) | (flags)
#define DRIVER_INFO_GET_SENSOR(driver_info) ((driver_info) >> 8)
#define DRIVER_INFO_GET_FLAGS(driver_info) ((driver_info) & 0xff)

/* V4L2 controls supported by the driver */
static int sd_setbrightness(struct gspca_dev *gspca_dev, __s32 val);
static int sd_getbrightness(struct gspca_dev *gspca_dev, __s32 *val);
Expand Down Expand Up @@ -7015,7 +7019,8 @@ static int sd_config(struct gspca_dev *gspca_dev,

/* define some sensors from the vendor/product */
sd->sharpness = 2;
sd->sensor = id->driver_info;
sd->sensor = DRIVER_INFO_GET_SENSOR(id->driver_info);
gspca_dev->flags = DRIVER_INFO_GET_FLAGS(id->driver_info);
sensor = zcxx_probeSensor(gspca_dev);
if (sensor >= 0)
PDEBUG(D_PROBE, "probe sensor -> %02x", sensor);
Expand Down Expand Up @@ -7505,19 +7510,19 @@ static const __devinitdata struct usb_device_id device_table[] = {
{USB_DEVICE(0x041e, 0x041e)},
#ifndef CONFIG_USB_ZC0301
{USB_DEVICE(0x041e, 0x4017)},
{USB_DEVICE(0x041e, 0x401c), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x041e, 0x401c), DRIVER_INFO(SENSOR_PAS106, 0)},
{USB_DEVICE(0x041e, 0x401e)},
{USB_DEVICE(0x041e, 0x401f)},
#endif
{USB_DEVICE(0x041e, 0x4029)},
#ifndef CONFIG_USB_ZC0301
{USB_DEVICE(0x041e, 0x4034), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x041e, 0x4035), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x041e, 0x4034), DRIVER_INFO(SENSOR_PAS106, 0)},
{USB_DEVICE(0x041e, 0x4035), DRIVER_INFO(SENSOR_PAS106, 0)},
{USB_DEVICE(0x041e, 0x4036)},
{USB_DEVICE(0x041e, 0x403a)},
#endif
{USB_DEVICE(0x041e, 0x4051), .driver_info = SENSOR_TAS5130C_VF0250},
{USB_DEVICE(0x041e, 0x4053), .driver_info = SENSOR_TAS5130C_VF0250},
{USB_DEVICE(0x041e, 0x4051), DRIVER_INFO(SENSOR_TAS5130C_VF0250, 0)},
{USB_DEVICE(0x041e, 0x4053), DRIVER_INFO(SENSOR_TAS5130C_VF0250, 0)},
#ifndef CONFIG_USB_ZC0301
{USB_DEVICE(0x0458, 0x7007)},
{USB_DEVICE(0x0458, 0x700c)},
Expand All @@ -7543,11 +7548,13 @@ static const __devinitdata struct usb_device_id device_table[] = {
{USB_DEVICE(0x046d, 0x08d9)},
{USB_DEVICE(0x046d, 0x08d8)},
{USB_DEVICE(0x046d, 0x08da)},
{USB_DEVICE(0x046d, 0x08dd), .driver_info = SENSOR_MC501CB},
{USB_DEVICE(0x0471, 0x0325), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x0471, 0x0326), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x0471, 0x032d), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x0471, 0x032e), .driver_info = SENSOR_PAS106},
{USB_DEVICE(0x046d, 0x08dd), DRIVER_INFO(SENSOR_MC501CB, 0)},
{USB_DEVICE(0x0471, 0x0325), DRIVER_INFO(SENSOR_PAS106,
GSPCA_SENSOR_UPSIDE_DOWN_FLAG)},
{USB_DEVICE(0x0471, 0x0326), DRIVER_INFO(SENSOR_PAS106,
GSPCA_SENSOR_UPSIDE_DOWN_FLAG)},
{USB_DEVICE(0x0471, 0x032d), DRIVER_INFO(SENSOR_PAS106, 0)},
{USB_DEVICE(0x0471, 0x032e), DRIVER_INFO(SENSOR_PAS106, 0)},
{USB_DEVICE(0x055f, 0xc005)},
#ifndef CONFIG_USB_ZC0301
{USB_DEVICE(0x055f, 0xd003)},
Expand All @@ -7559,7 +7566,7 @@ static const __devinitdata struct usb_device_id device_table[] = {
{USB_DEVICE(0x0ac8, 0x301b)},
{USB_DEVICE(0x0ac8, 0x303b)},
#endif
{USB_DEVICE(0x0ac8, 0x305b), .driver_info = SENSOR_TAS5130C_VF0250},
{USB_DEVICE(0x0ac8, 0x305b), DRIVER_INFO(SENSOR_TAS5130C_VF0250, 0)},
#ifndef CONFIG_USB_ZC0301
{USB_DEVICE(0x0ac8, 0x307b)},
{USB_DEVICE(0x10fd, 0x0128)},
Expand Down
5 changes: 5 additions & 0 deletions include/linux/videodev2.h
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,11 @@ struct v4l2_capability {
#define V4L2_CAP_ASYNCIO 0x02000000 /* async I/O */
#define V4L2_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */

/* This flags gets set if the "sensor" is known to be upside down and this can
*not* be fixed using v4l2 flipx/y controls. Note that absence of this flag
is not a guarantee for the image not being upside down. */
#define V4L2_CAP_SENSOR_UPSIDE_DOWN 0x10000000

/*
* V I D E O I M A G E F O R M A T
*/
Expand Down

0 comments on commit 89a44b8

Please sign in to comment.