V4L/DVB (11387): Sensor orientation reporting
authorAdam Baker <linux@baker-net.org.uk>
Sun, 29 Mar 2009 22:17:10 +0000 (19:17 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 7 Apr 2009 00:44:29 +0000 (21:44 -0300)
Add support to the SQ-905 driver to pass back to user space the
sensor orientation information obtained from the camera during init.
Modifies gspca and the videodev2.h header to create the necessary
API.

[mchehab@redhat.com: Changed "Output is" to "Frames are" at the comments, as suggested at LMML]
Signed-off-by: Adam Baker <linux@baker-net.org.uk>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/gspca.c
drivers/media/video/gspca/gspca.h
drivers/media/video/gspca/sq905.c
include/linux/videodev2.h

index a75c1ca2db41d05953c8d9c6cba9c8ddc3701861..a2741d7dccfeca4696c0167fce5b317f5eba7e56 100644 (file)
@@ -1132,6 +1132,7 @@ static int vidioc_enum_input(struct file *file, void *priv,
        if (input->index != 0)
                return -EINVAL;
        input->type = V4L2_INPUT_TYPE_CAMERA;
+       input->status = gspca_dev->cam.input_flags;
        strncpy(input->name, gspca_dev->sd_desc->name,
                sizeof input->name);
        return 0;
index e4d4cf6ce05a2825828e8d6599770e15fc0e949c..58e8ff02136a46bbca14802753c3c09e45115314 100644 (file)
@@ -56,6 +56,7 @@ struct cam {
                                 * - cannot be > MAX_NURBS
                                 * - when 0 and bulk_size != 0 means
                                 *   1 URB and submit done by subdriver */
+       u32 input_flags;        /* value for ENUM_INPUT status flags */
 };
 
 struct gspca_dev;
index 04e3ae57a2e3867c1cd8cd0fc43e932fab806be9..2e1cdf068fda896043f2222622ac17a3798a982f 100644 (file)
@@ -360,6 +360,12 @@ static int sd_init(struct gspca_dev *gspca_dev)
        gspca_dev->cam.nmodes = ARRAY_SIZE(sq905_mode);
        if (!(ident & SQ905_HIRES_MASK))
                gspca_dev->cam.nmodes--;
+
+       if (ident & SQ905_ORIENTATION_MASK)
+               gspca_dev->cam.input_flags = V4L2_IN_ST_VFLIP;
+       else
+               gspca_dev->cam.input_flags = V4L2_IN_ST_VFLIP |
+                                            V4L2_IN_ST_HFLIP;
        return 0;
 }
 
index 139d234923cdc5003fa6e53bfa95e67bb8bb673f..ebb2ea6b499598d20c066f2d670381dedc8758c9 100644 (file)
@@ -737,6 +737,11 @@ struct v4l2_input {
 #define V4L2_IN_ST_NO_SIGNAL   0x00000002
 #define V4L2_IN_ST_NO_COLOR    0x00000004
 
+/* field 'status' - sensor orientation */
+/* If sensor is mounted upside down set both bits */
+#define V4L2_IN_ST_HFLIP       0x00000010 /* Frames are flipped horizontally */
+#define V4L2_IN_ST_VFLIP       0x00000020 /* Frames are flipped vertically */
+
 /* field 'status' - analog */
 #define V4L2_IN_ST_NO_H_LOCK   0x00000100  /* No horizontal sync lock */
 #define V4L2_IN_ST_COLOR_KILL  0x00000200  /* Color killer is active */