summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJean-François Moine <moinejf@free.fr>2010-11-11 12:27:24 +0100
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-12-29 11:16:41 +0100
commit7bbe6b8d1f63c2f7482c93d8cd986b1774e6436d (patch)
tree45edc75d50ebcddd835c9aa6448ac96e2bda99a0
parent[media] gspca - ov519: Reduce the size of some variables (diff)
downloadlinux-7bbe6b8d1f63c2f7482c93d8cd986b1774e6436d.tar.xz
linux-7bbe6b8d1f63c2f7482c93d8cd986b1774e6436d.zip
[media] gspca - ov519: Define the sensor types in an enum
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>
-rw-r--r--drivers/media/video/gspca/ov519.c37
1 files changed, 21 insertions, 16 deletions
diff --git a/drivers/media/video/gspca/ov519.c b/drivers/media/video/gspca/ov519.c
index d73e1c75541b..5da1a4e3737d 100644
--- a/drivers/media/video/gspca/ov519.c
+++ b/drivers/media/video/gspca/ov519.c
@@ -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 */