|
@@ -215,7 +215,7 @@ static const u8 mi0360_initVGA_JPG[][4] = {
|
|
|
{0xb3, 0x15, 0x00, 0xcc},
|
|
|
{0xb3, 0x16, 0x02, 0xcc},
|
|
|
{0xb3, 0x17, 0x7f, 0xcc},
|
|
|
- {0xb3, 0x35, 0xdd, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xdd, 0xcc}, /* i2c add: 5d */
|
|
|
{0xb3, 0x34, 0x02, 0xcc},
|
|
|
{0xb3, 0x00, 0x25, 0xcc},
|
|
|
{0xbc, 0x00, 0x71, 0xcc},
|
|
@@ -435,7 +435,7 @@ static const u8 mi1310_socinitVGA_JPG[][4] = {
|
|
|
{0xb3, 0x08, 0x01, 0xcc},
|
|
|
{0xb3, 0x09, 0x0c, 0xcc},
|
|
|
{0xb3, 0x34, 0x02, 0xcc},
|
|
|
- {0xb3, 0x35, 0xdd, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xdd, 0xcc}, /* i2c add: 5d */
|
|
|
{0xb3, 0x02, 0x00, 0xcc},
|
|
|
{0xb3, 0x03, 0x0a, 0xcc},
|
|
|
{0xb3, 0x04, 0x05, 0xcc},
|
|
@@ -860,7 +860,8 @@ static const u8 mi1320_initVGA_data[][4] = {
|
|
|
{0xb0, 0x16, 0x03, 0xcc}, {0xb3, 0x05, 0x00, 0xcc},
|
|
|
{0xb3, 0x06, 0x00, 0xcc}, {0xb3, 0x08, 0x01, 0xcc},
|
|
|
{0xb3, 0x09, 0x0c, 0xcc}, {0xb3, 0x34, 0x02, 0xcc},
|
|
|
- {0xb3, 0x35, 0xc8, 0xcc}, {0xb3, 0x02, 0x00, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xc8, 0xcc}, /* i2c add: 48 */
|
|
|
+ {0xb3, 0x02, 0x00, 0xcc},
|
|
|
{0xb3, 0x03, 0x0a, 0xcc}, {0xb3, 0x04, 0x05, 0xcc},
|
|
|
{0xb3, 0x20, 0x00, 0xcc}, {0xb3, 0x21, 0x00, 0xcc},
|
|
|
{0xb3, 0x22, 0x03, 0xcc}, {0xb3, 0x23, 0xc0, 0xcc},
|
|
@@ -901,7 +902,8 @@ static const u8 mi1320_initVGA_data[][4] = {
|
|
|
{0xc3, 0x01, 0x03, 0xbb}, {0xc4, 0x00, 0x04, 0xbb},
|
|
|
{0xf0, 0x00, 0x00, 0xbb}, {0x05, 0x01, 0x13, 0xbb},
|
|
|
{0x06, 0x00, 0x11, 0xbb}, {0x07, 0x00, 0x85, 0xbb},
|
|
|
- {0x08, 0x00, 0x27, 0xbb}, {0x20, 0x01, 0x03, 0xbb},
|
|
|
+ {0x08, 0x00, 0x27, 0xbb},
|
|
|
+ {0x20, 0x01, 0x00, 0xbb}, /* h/v flips - was 03 */
|
|
|
{0x21, 0x80, 0x00, 0xbb}, {0x22, 0x0d, 0x0f, 0xbb},
|
|
|
{0x24, 0x80, 0x00, 0xbb}, {0x59, 0x00, 0xff, 0xbb},
|
|
|
{0xf0, 0x00, 0x02, 0xbb}, {0x39, 0x03, 0x0d, 0xbb},
|
|
@@ -1012,7 +1014,7 @@ static const u8 mi1320_soc_InitVGA[][4] = {
|
|
|
{0xb3, 0x08, 0x01, 0xcc},
|
|
|
{0xb3, 0x09, 0x0c, 0xcc},
|
|
|
{0xb3, 0x34, 0x02, 0xcc},
|
|
|
- {0xb3, 0x35, 0xc8, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xc8, 0xcc}, /* i2c add: 48 */
|
|
|
{0xb3, 0x02, 0x00, 0xcc},
|
|
|
{0xb3, 0x03, 0x0a, 0xcc},
|
|
|
{0xb3, 0x04, 0x05, 0xcc},
|
|
@@ -1359,7 +1361,8 @@ static const u8 po3130_initVGA_data[][4] = {
|
|
|
{0xb3, 0x23, 0xe8, 0xcc}, {0xb8, 0x08, 0xe8, 0xcc},
|
|
|
{0xb3, 0x14, 0x00, 0xcc}, {0xb3, 0x15, 0x00, 0xcc},
|
|
|
{0xb3, 0x16, 0x02, 0xcc}, {0xb3, 0x17, 0x7f, 0xcc},
|
|
|
- {0xb3, 0x34, 0x01, 0xcc}, {0xb3, 0x35, 0xf6, 0xcc},
|
|
|
+ {0xb3, 0x34, 0x01, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xf6, 0xcc}, /* i2c add: 76 */
|
|
|
{0xb3, 0x00, 0x27, 0xcc}, {0xbc, 0x00, 0x71, 0xcc},
|
|
|
{0xb8, 0x00, 0x21, 0xcc}, {0xb8, 0x27, 0x20, 0xcc},
|
|
|
{0xb8, 0x01, 0x79, 0xcc}, {0xb8, 0x81, 0x09, 0xcc},
|
|
@@ -1561,7 +1564,7 @@ static const u8 hv7131r_initVGA_data[][4] = {
|
|
|
{0xb3, 0x16, 0x02, 0xcc},
|
|
|
{0xb3, 0x17, 0x7f, 0xcc},
|
|
|
{0xb3, 0x34, 0x01, 0xcc},
|
|
|
- {0xb3, 0x35, 0x91, 0xcc},
|
|
|
+ {0xb3, 0x35, 0x91, 0xcc}, /* i2c add: 11 */
|
|
|
{0xb3, 0x00, 0x27, 0xcc},
|
|
|
{0xbc, 0x00, 0x73, 0xcc},
|
|
|
{0xb8, 0x00, 0x23, 0xcc},
|
|
@@ -1747,7 +1750,8 @@ static const u8 ov7660_initVGA_data[][4] = {
|
|
|
{0xb3, 0x23, 0xe0, 0xcc}, {0xb3, 0x1d, 0x01, 0xcc},
|
|
|
{0xb3, 0x1f, 0x02, 0xcc},
|
|
|
{0xb3, 0x34, 0x01, 0xcc},
|
|
|
- {0xb3, 0x35, 0xa1, 0xcc}, {0xb3, 0x00, 0x26, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xa1, 0xcc}, /* i2c add: 21 */
|
|
|
+ {0xb3, 0x00, 0x26, 0xcc},
|
|
|
{0xb8, 0x00, 0x33, 0xcc}, /* 13 */
|
|
|
{0xb8, 0x01, 0x7d, 0xcc},
|
|
|
{0xbc, 0x00, 0x73, 0xcc}, {0xb8, 0x81, 0x09, 0xcc},
|
|
@@ -1883,7 +1887,8 @@ static const u8 ov7670_initVGA_JPG[][4] = {
|
|
|
{0x00, 0x00, 0x10, 0xdd},
|
|
|
{0xb0, 0x04, 0x02, 0xcc}, {0x00, 0x00, 0x10, 0xdd},
|
|
|
{0xb3, 0x00, 0x66, 0xcc}, {0xb3, 0x00, 0x67, 0xcc},
|
|
|
- {0xb3, 0x35, 0xa1, 0xcc}, {0xb3, 0x34, 0x01, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xa1, 0xcc}, /* i2c add: 21 */
|
|
|
+ {0xb3, 0x34, 0x01, 0xcc},
|
|
|
{0xb3, 0x05, 0x01, 0xcc}, {0xb3, 0x06, 0x01, 0xcc},
|
|
|
{0xb3, 0x08, 0x01, 0xcc}, {0xb3, 0x09, 0x0c, 0xcc},
|
|
|
{0xb3, 0x02, 0x02, 0xcc}, {0xb3, 0x03, 0x1f, 0xcc},
|
|
@@ -2181,7 +2186,7 @@ static const u8 po1200_initVGA_data[][4] = {
|
|
|
{0xb0, 0x54, 0x13, 0xcc},
|
|
|
{0xb3, 0x00, 0x67, 0xcc},
|
|
|
{0xb3, 0x34, 0x01, 0xcc},
|
|
|
- {0xb3, 0x35, 0xdc, 0xcc},
|
|
|
+ {0xb3, 0x35, 0xdc, 0xcc}, /* i2c add: 5c */
|
|
|
{0x00, 0x03, 0x00, 0xaa},
|
|
|
{0x00, 0x12, 0x05, 0xaa},
|
|
|
{0x00, 0x13, 0x02, 0xaa},
|
|
@@ -2420,33 +2425,89 @@ struct sensor_info {
|
|
|
u8 op;
|
|
|
};
|
|
|
|
|
|
-static const struct sensor_info sensor_info_data[] = {
|
|
|
-/* sensorId, I2cAdd, IdAdd, VpId, m1, m2, op */
|
|
|
+/* probe values */
|
|
|
+static const struct sensor_info vc0321_probe_data[] = {
|
|
|
+/* sensorId, I2cAdd, IdAdd, VpId, m1, m2, op */
|
|
|
+/* 0 OV9640 */
|
|
|
{-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
|
|
|
+/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */
|
|
|
{-1, 0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},
|
|
|
-/* (tested in vc032x_probe_sensor) */
|
|
|
-/* {-1, 0x80 | 0x20, 0x83, 0x0000, 0x24, 0x25, 0x01}, */
|
|
|
- {SENSOR_PO3130NC, 0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01},
|
|
|
+/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/
|
|
|
+ {-1, 0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 3 MI1310 */
|
|
|
+ {-1, 0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 4 MI360 - tested in vc032x_probe_sensor */
|
|
|
+/* {SENSOR_MI0360, 0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */
|
|
|
+/* 5 7131R */
|
|
|
+ {SENSOR_HV7131R, 0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},
|
|
|
+/* 6 OV7649 */
|
|
|
+ {-1, 0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},
|
|
|
+/* 7 PAS302BCW */
|
|
|
+ {-1, 0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},
|
|
|
+/* 8 OV7660 */
|
|
|
+ {SENSOR_OV7660, 0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},
|
|
|
+/* 9 PO3130NC - (tested in vc032x_probe_sensor) */
|
|
|
+/* {SENSOR_PO3130NC, 0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */
|
|
|
+/* 10 PO1030KC */
|
|
|
+ {-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 11 MI1310_SOC */
|
|
|
{SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},
|
|
|
-/* (tested in vc032x_probe_sensor) */
|
|
|
+/* 12 OV9650 */
|
|
|
+ {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
|
|
|
+/* 13 S5K532 */
|
|
|
+ {-1, 0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 14 MI360_SOC - ??? */
|
|
|
+/* 15 PO1200N */
|
|
|
+ {SENSOR_PO1200, 0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},
|
|
|
+/* 16 PO3030K */
|
|
|
+ {-1, 0x80 | 0x18, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 17 PO2030 */
|
|
|
+ {-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* ?? */
|
|
|
+ {-1, 0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},
|
|
|
+ {SENSOR_MI1320, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x65, 0x01},
|
|
|
+};
|
|
|
+static const struct sensor_info vc0323_probe_data[] = {
|
|
|
+/* sensorId, I2cAdd, IdAdd, VpId, m1, m2, op */
|
|
|
+/* 0 OV9640 */
|
|
|
+ {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
|
|
|
+/* 1 ICM108T (may respond on IdAdd == 0x83 - tested in vc032x_probe_sensor) */
|
|
|
+ {-1, 0x80 | 0x20, 0x82, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 2 PO2130 (may detect PO3130NC - tested in vc032x_probe_sensor)*/
|
|
|
+ {-1, 0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 3 MI1310 */
|
|
|
+ {-1, 0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 4 MI360 - tested in vc032x_probe_sensor */
|
|
|
/* {SENSOR_MI0360, 0x80 | 0x5d, 0x00, 0x8243, 0x24, 0x25, 0x01}, */
|
|
|
+/* 5 7131R */
|
|
|
{SENSOR_HV7131R, 0x80 | 0x11, 0x00, 0x0209, 0x24, 0x25, 0x01},
|
|
|
+/* 6 OV7649 */
|
|
|
{-1, 0x80 | 0x21, 0x0a, 0x0000, 0x21, 0x20, 0x05},
|
|
|
+/* 7 PAS302BCW */
|
|
|
{-1, 0x80 | 0x40, 0x00, 0x0000, 0x20, 0x22, 0x05},
|
|
|
+/* 8 OV7660 */
|
|
|
{SENSOR_OV7660, 0x80 | 0x21, 0x0a, 0x7660, 0x26, 0x26, 0x05},
|
|
|
-/* {SENSOR_PO3130NC, 0x80 | 0x76, 0x00, 0x0000, 0x24, 0x25, 0x01}, */
|
|
|
+/* 9 PO3130NC - (tested in vc032x_probe_sensor) */
|
|
|
+/* {SENSOR_PO3130NC, 0x80 | 0x76, 0x00, 0x3130, 0x24, 0x25, 0x01}, */
|
|
|
+/* 10 PO1030KC */
|
|
|
{-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
-/* {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x0000, 0x24, 0x25, 0x01}, */
|
|
|
-/* {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05}, */
|
|
|
+/* 11 MI1310_SOC */
|
|
|
+ {SENSOR_MI1310_SOC, 0x80 | 0x5d, 0x00, 0x143a, 0x24, 0x25, 0x01},
|
|
|
+/* 12 OV9650 */
|
|
|
+ {-1, 0x80 | 0x30, 0x0a, 0x0000, 0x25, 0x24, 0x05},
|
|
|
+/* 13 S5K532 */
|
|
|
{-1, 0x80 | 0x11, 0x39, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* 14 MI360_SOC - ??? */
|
|
|
+/* 15 PO1200N */
|
|
|
{SENSOR_PO1200, 0x80 | 0x5c, 0x00, 0x1200, 0x67, 0x67, 0x01},
|
|
|
+/* 16 ?? */
|
|
|
{-1, 0x80 | 0x2d, 0x00, 0x0000, 0x65, 0x67, 0x01},
|
|
|
+/* 17 PO2030 */
|
|
|
{-1, 0x80 | 0x6e, 0x00, 0x0000, 0x24, 0x25, 0x01},
|
|
|
+/* ?? */
|
|
|
{-1, 0x80 | 0x56, 0x01, 0x0000, 0x64, 0x67, 0x01},
|
|
|
{SENSOR_MI1320_SOC, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x67, 0x01},
|
|
|
-/*fixme: previously detected?*/
|
|
|
- {SENSOR_MI1320, 0x80 | 0x48, 0x00, 0x148c, 0x64, 0x65, 0x01},
|
|
|
-/*fixme: not in the ms-win probe - may be found before?*/
|
|
|
+/*fixme: not in the ms-win probe - may be found before? */
|
|
|
{SENSOR_OV7670, 0x80 | 0x21, 0x0a, 0x7673, 0x66, 0x67, 0x05},
|
|
|
};
|
|
|
|
|
@@ -2520,7 +2581,7 @@ static int vc032x_probe_sensor(struct gspca_dev *gspca_dev)
|
|
|
{
|
|
|
struct sd *sd = (struct sd *) gspca_dev;
|
|
|
struct usb_device *dev = gspca_dev->dev;
|
|
|
- int i;
|
|
|
+ int i, n;
|
|
|
u16 value;
|
|
|
const struct sensor_info *ptsensor_info;
|
|
|
|
|
@@ -2531,9 +2592,16 @@ static int vc032x_probe_sensor(struct gspca_dev *gspca_dev)
|
|
|
}
|
|
|
|
|
|
reg_r(gspca_dev, 0xa1, 0xbfcf, 1);
|
|
|
- PDEBUG(D_PROBE, "check sensor header %02x", gspca_dev->usb_buf[0]);
|
|
|
- for (i = 0; i < ARRAY_SIZE(sensor_info_data); i++) {
|
|
|
- ptsensor_info = &sensor_info_data[i];
|
|
|
+ PDEBUG(D_PROBE, "vc032%d check sensor header %02x",
|
|
|
+ sd->bridge == BRIDGE_VC0321 ? 1 : 3, gspca_dev->usb_buf[0]);
|
|
|
+ if (sd->bridge == BRIDGE_VC0321) {
|
|
|
+ ptsensor_info = vc0321_probe_data;
|
|
|
+ n = ARRAY_SIZE(vc0321_probe_data);
|
|
|
+ } else {
|
|
|
+ ptsensor_info = vc0323_probe_data;
|
|
|
+ n = ARRAY_SIZE(vc0323_probe_data);
|
|
|
+ }
|
|
|
+ for (i = 0; i < n; i++) {
|
|
|
reg_w(dev, 0xa0, 0x02, 0xb334);
|
|
|
reg_w(dev, 0xa0, ptsensor_info->m1, 0xb300);
|
|
|
reg_w(dev, 0xa0, ptsensor_info->m2, 0xb300);
|
|
@@ -2551,13 +2619,15 @@ static int vc032x_probe_sensor(struct gspca_dev *gspca_dev)
|
|
|
return ptsensor_info->sensorId;
|
|
|
|
|
|
switch (value) {
|
|
|
+ case 0x3130:
|
|
|
+ return SENSOR_PO3130NC;
|
|
|
case 0x7673:
|
|
|
return SENSOR_OV7670;
|
|
|
case 0x8243:
|
|
|
return SENSOR_MI0360;
|
|
|
}
|
|
|
-/*fixme: should return here*/
|
|
|
}
|
|
|
+ ptsensor_info++;
|
|
|
}
|
|
|
return -1;
|
|
|
}
|