[media] gspca - ov519: Define the sensor types in an enum
authorJean-François Moine <moinejf@free.fr>
Thu, 11 Nov 2010 11:27:24 +0000 (08:27 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Wed, 29 Dec 2010 10:16:41 +0000 (08:16 -0200)
This patch also checks if the sensor is well detected at connection time.

Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/ov519.c

index d73e1c75541b299c966e90e544b141af89fc75bc..5da1a4e3737d17374a60040c8b8696301d593019 100644 (file)
@@ -107,21 +107,7 @@ struct sd {
        u8 frame_rate;          /* current Framerate */
        u8 clockdiv;            /* clockdiv override */
 
-       u8 sensor;              /* Type of image sensor chip (SEN_*) */
-#define SEN_UNKNOWN 0
-#define SEN_OV2610 1
-#define SEN_OV3610 2
-#define SEN_OV6620 3
-#define SEN_OV6630 4
-#define SEN_OV66308AF 5
-#define SEN_OV7610 6
-#define SEN_OV7620 7
-#define SEN_OV7620AE 8
-#define SEN_OV7640 9
-#define SEN_OV7648 10
-#define SEN_OV7670 11
-#define SEN_OV76BE 12
-#define SEN_OV8610 13
+       s8 sensor;              /* Type of image sensor chip (SEN_*) */
 
        u8 sensor_addr;
        u16 sensor_width;
@@ -130,6 +116,21 @@ struct sd {
 
        u8 jpeg_hdr[JPEG_HDR_SZ];
 };
+enum sensors {
+       SEN_OV2610,
+       SEN_OV3610,
+       SEN_OV6620,
+       SEN_OV6630,
+       SEN_OV66308AF,
+       SEN_OV7610,
+       SEN_OV7620,
+       SEN_OV7620AE,
+       SEN_OV7640,
+       SEN_OV7648,
+       SEN_OV7670,
+       SEN_OV76BE,
+       SEN_OV8610,
+};
 
 /* Note this is a bit of a hack, but the w9968cf driver needs the code for all
    the ov sensors which is already present here. When we have the time we
@@ -3010,6 +3011,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
        /* The OV519 must be more aggressive about sensor detection since
         * I2C write will never fail if the sensor is not present. We have
         * to try to initialize the sensor to detect its presence */
+       sd->sensor = -1;
 
        /* Test for 76xx */
        if (init_ov_sensor(sd, OV7xx0_SID) >= 0) {
@@ -3040,6 +3042,9 @@ static int sd_config(struct gspca_dev *gspca_dev,
                goto error;
        }
 
+       if (sd->sensor < 0)
+               goto error;
+
        switch (sd->bridge) {
        case BRIDGE_OV511:
        case BRIDGE_OV511PLUS:
@@ -3117,7 +3122,7 @@ static int sd_config(struct gspca_dev *gspca_dev,
        return 0;
 error:
        PDEBUG(D_ERR, "OV519 Config failed");
-       return -EBUSY;
+       return -EINVAL;
 }
 
 /* this function is called at probe and resume time */