Commit 3647fea8 authored by Hans de Goede's avatar Hans de Goede Committed by Mauro Carvalho Chehab

V4L/DVB (8356): gspca: 352x288 mode fix and source clean-up for Sonix bridges.

sonixb:   Bad initialization of sensor for 352x288 mode.
                (from Hans de Goede)
sonixj:   Clean-up source.
Signed-off-by: default avatarHans de Goede <j.w.r.degoede@hhs.nl>
Signed-off-by: default avatarJean-Francois Moine <moinejf@free.fr>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent ad5ef80d
...@@ -199,11 +199,11 @@ vc032x 0ac8:c002 Sony embedded vimicro ...@@ -199,11 +199,11 @@ vc032x 0ac8:c002 Sony embedded vimicro
spca508 0af9:0010 Hama USB Sightcam 100 spca508 0af9:0010 Hama USB Sightcam 100
spca508 0af9:0011 Hama USB Sightcam 100 spca508 0af9:0011 Hama USB Sightcam 100
sonixb 0c45:6001 Genius VideoCAM NB sonixb 0c45:6001 Genius VideoCAM NB
sonixb 0c45:6005 Sweex Tas5110 sonixb 0c45:6005 Microdia Sweex Mini Webcam
sonixb 0c45:6007 Sonix sn9c101 + Tas5110D sonixb 0c45:6007 Sonix sn9c101 + Tas5110D
sonixb 0c45:6009 spcaCam@120 sonixb 0c45:6009 spcaCam@120
sonixb 0c45:600d spcaCam@120 sonixb 0c45:600d spcaCam@120
sonixb 0c45:6011 MAX Webcam (Microdia - OV6650 - SN9C101G) sonixb 0c45:6011 Microdia PC Camera (SN9C102)
sonixb 0c45:6019 Generic Sonix OV7630 sonixb 0c45:6019 Generic Sonix OV7630
sonixb 0c45:6024 Generic Sonix Tas5130c sonixb 0c45:6024 Generic Sonix Tas5130c
sonixb 0c45:6025 Xcam Shanga sonixb 0c45:6025 Xcam Shanga
......
...@@ -168,7 +168,7 @@ static void isoc_irq(struct urb *urb ...@@ -168,7 +168,7 @@ static void isoc_irq(struct urb *urb
{ {
struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context; struct gspca_dev *gspca_dev = (struct gspca_dev *) urb->context;
PDEBUG(D_PACK, "isoc irq mmap"); PDEBUG(D_PACK, "isoc irq");
if (!gspca_dev->streaming) if (!gspca_dev->streaming)
return; return;
fill_frame(gspca_dev, urb); fill_frame(gspca_dev, urb);
......
...@@ -244,7 +244,7 @@ static const __u8 initOv7630_3[] = { ...@@ -244,7 +244,7 @@ static const __u8 initOv7630_3[] = {
0x44, 0x44, 0x00, 0x1a, 0x20, 0x20, 0x20, 0x80, /* r01 .. r08 */ 0x44, 0x44, 0x00, 0x1a, 0x20, 0x20, 0x20, 0x80, /* r01 .. r08 */
0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, /* r09 .. r10 */ 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, /* r09 .. r10 */
0x00, 0x01, 0x01, 0x0a, /* r11 .. r14 */ 0x00, 0x01, 0x01, 0x0a, /* r11 .. r14 */
0x16, 0x12, /* H & V sizes r15 .. r16 */ 0x28, 0x1e, /* H & V sizes r15 .. r16 */
0x68, 0x8f, MCK_INIT1, /* r17 .. r19 */ 0x68, 0x8f, MCK_INIT1, /* r17 .. r19 */
0x1d, 0x10, 0x02, 0x03, 0x0f, 0x0c, 0x00, /* r1a .. r20 */ 0x1d, 0x10, 0x02, 0x03, 0x0f, 0x0c, 0x00, /* r1a .. r20 */
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, /* r21 .. r28 */ 0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80, /* r21 .. r28 */
...@@ -785,7 +785,6 @@ static void sd_start(struct gspca_dev *gspca_dev) ...@@ -785,7 +785,6 @@ static void sd_start(struct gspca_dev *gspca_dev)
const __u8 *sn9c10x; const __u8 *sn9c10x;
__u8 reg01, reg17; __u8 reg01, reg17;
__u8 reg17_19[3]; __u8 reg17_19[3];
static const __u8 reg15[2] = { 0x28, 0x1e };
mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv; mode = gspca_dev->cam.cam_mode[(int) gspca_dev->curr_mode].priv;
switch (sd->sensor) { switch (sd->sensor) {
...@@ -905,8 +904,8 @@ static void sd_start(struct gspca_dev *gspca_dev) ...@@ -905,8 +904,8 @@ static void sd_start(struct gspca_dev *gspca_dev)
sizeof tas5130_sensor_init); sizeof tas5130_sensor_init);
break; break;
} }
/* H_size V_size 0x28, 0x1e maybe 640x480 */ /* H_size V_size 0x28, 0x1e -> 640x480. 0x16, 0x12 -> 352x288 */
reg_w(gspca_dev, 0x15, reg15, 2); reg_w(gspca_dev, 0x15, &sn9c10x[0x15 - 1], 2);
/* compression register */ /* compression register */
reg_w(gspca_dev, 0x18, &reg17_19[1], 1); reg_w(gspca_dev, 0x18, &reg17_19[1], 1);
if (sd->sensor != SENSOR_OV7630_3) { if (sd->sensor != SENSOR_OV7630_3) {
......
...@@ -47,20 +47,19 @@ struct sd { ...@@ -47,20 +47,19 @@ struct sd {
#define AG_CNT_START 13 #define AG_CNT_START 13
char qindex; char qindex;
unsigned char bridge;
#define BRIDGE_SN9C102P 0
#define BRIDGE_SN9C105 1
#define BRIDGE_SN9C110 2
#define BRIDGE_SN9C120 3
#define BRIDGE_SN9C325 4
char sensor; /* Type of image sensor chip */ char sensor; /* Type of image sensor chip */
#define SENSOR_HV7131R 0 #define SENSOR_HV7131R 0
#define SENSOR_MI0360 1 #define SENSOR_MI0360 1
#define SENSOR_MO4000 2 #define SENSOR_MO4000 2
#define SENSOR_OV7648 3 #define SENSOR_OV7648 3
#define SENSOR_OV7660 4 #define SENSOR_OV7660 4
unsigned char customid;
#define SN9C102P 0
#define SN9C105 1
#define SN9C110 2
#define SN9C120 3
#define SN9C325 4
unsigned char i2c_base; unsigned char i2c_base;
unsigned char i2c_ctrl_reg;
}; };
/* V4L2 controls supported by the driver */ /* V4L2 controls supported by the driver */
...@@ -563,7 +562,7 @@ static void i2c_w2(struct gspca_dev *gspca_dev, ...@@ -563,7 +562,7 @@ static void i2c_w2(struct gspca_dev *gspca_dev,
__u8 mode[8]; __u8 mode[8];
/* is i2c ready */ /* is i2c ready */
mode[0] = sd->i2c_ctrl_reg | (2 << 4); mode[0] = 0x81 | (2 << 4);
mode[1] = sd->i2c_base; mode[1] = sd->i2c_base;
mode[2] = buffer[0]; mode[2] = buffer[0];
mode[3] = buffer[1]; mode[3] = buffer[1];
...@@ -588,7 +587,7 @@ static void i2c_r5(struct gspca_dev *gspca_dev, __u8 reg) ...@@ -588,7 +587,7 @@ static void i2c_r5(struct gspca_dev *gspca_dev, __u8 reg)
struct sd *sd = (struct sd *) gspca_dev; struct sd *sd = (struct sd *) gspca_dev;
__u8 mode[8]; __u8 mode[8];
mode[0] = sd->i2c_ctrl_reg | 0x10; mode[0] = 0x81 | 0x10;
mode[1] = sd->i2c_base; mode[1] = sd->i2c_base;
mode[2] = reg; mode[2] = reg;
mode[3] = 0; mode[3] = 0;
...@@ -597,7 +596,7 @@ static void i2c_r5(struct gspca_dev *gspca_dev, __u8 reg) ...@@ -597,7 +596,7 @@ static void i2c_r5(struct gspca_dev *gspca_dev, __u8 reg)
mode[6] = 0; mode[6] = 0;
mode[7] = 0x10; mode[7] = 0x10;
i2c_w8(gspca_dev, mode); i2c_w8(gspca_dev, mode);
mode[0] = sd->i2c_ctrl_reg | (5 << 4) | 0x02; mode[0] = 0x81 | (5 << 4) | 0x02;
mode[2] = 0; mode[2] = 0;
i2c_w8(gspca_dev, mode); i2c_w8(gspca_dev, mode);
reg_r(gspca_dev, 0x0a, 5); reg_r(gspca_dev, 0x0a, 5);
...@@ -658,11 +657,11 @@ static int configure_gpio(struct gspca_dev *gspca_dev, ...@@ -658,11 +657,11 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
reg_w(gspca_dev, 0x01, &sn9c1xx[1], 2); reg_w(gspca_dev, 0x01, &sn9c1xx[1], 2);
reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2); reg_w(gspca_dev, 0x08, &sn9c1xx[8], 2);
reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 3); reg_w(gspca_dev, 0x17, &sn9c1xx[0x17], 3);
switch (sd->customid) { switch (sd->bridge) {
case SN9C325: case BRIDGE_SN9C325:
reg9a = reg9a_sn9c325; reg9a = reg9a_sn9c325;
break; break;
case SN9C120: case BRIDGE_SN9C120:
reg9a = reg9a_sn9c120; reg9a = reg9a_sn9c120;
break; break;
default: default:
...@@ -676,8 +675,8 @@ static int configure_gpio(struct gspca_dev *gspca_dev, ...@@ -676,8 +675,8 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
reg_w(gspca_dev, 0x03, &sn9c1xx[3], 0x0f); reg_w(gspca_dev, 0x03, &sn9c1xx[3], 0x0f);
switch (sd->customid) { switch (sd->bridge) {
case SN9C120: /* from win trace */ case BRIDGE_SN9C120: /* from win trace */
data = 0x61; data = 0x61;
reg_w(gspca_dev, 0x01, &data, 1); reg_w(gspca_dev, 0x01, &data, 1);
data = 0x20; data = 0x20;
...@@ -685,7 +684,7 @@ static int configure_gpio(struct gspca_dev *gspca_dev, ...@@ -685,7 +684,7 @@ static int configure_gpio(struct gspca_dev *gspca_dev,
data = 0x60; data = 0x60;
reg_w(gspca_dev, 0x01, &data, 1); reg_w(gspca_dev, 0x01, &data, 1);
break; break;
case SN9C325: case BRIDGE_SN9C325:
data = 0x43; data = 0x43;
reg_w(gspca_dev, 0x01, &data, 1); reg_w(gspca_dev, 0x01, &data, 1);
data = 0xae; data = 0xae;
...@@ -778,9 +777,8 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -778,9 +777,8 @@ static int sd_config(struct gspca_dev *gspca_dev,
case 0x0458: /* Genius */ case 0x0458: /* Genius */
/* switch (product) { /* switch (product) {
case 0x7025: */ case 0x7025: */
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_MI0360; sd->sensor = SENSOR_MI0360;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x5d; sd->i2c_base = 0x5d;
/* break; /* break;
} */ } */
...@@ -789,9 +787,8 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -789,9 +787,8 @@ static int sd_config(struct gspca_dev *gspca_dev,
/* switch (product) { /* switch (product) {
case 0x00f5: case 0x00f5:
case 0x00f7: */ case 0x00f7: */
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_OV7660; sd->sensor = SENSOR_OV7660;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
/* break; /* break;
} */ } */
...@@ -801,9 +798,8 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -801,9 +798,8 @@ static int sd_config(struct gspca_dev *gspca_dev,
case 0x0327: case 0x0327:
case 0x0328: case 0x0328:
case 0x0330: */ case 0x0330: */
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_MI0360; sd->sensor = SENSOR_MI0360;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x5d; sd->i2c_base = 0x5d;
/* break; /* break;
} */ } */
...@@ -811,161 +807,135 @@ static int sd_config(struct gspca_dev *gspca_dev, ...@@ -811,161 +807,135 @@ static int sd_config(struct gspca_dev *gspca_dev,
case 0x0c45: /* Sonix */ case 0x0c45: /* Sonix */
switch (product) { switch (product) {
case 0x6040: case 0x6040:
sd->customid = SN9C102P; sd->bridge = BRIDGE_SN9C102P;
sd->sensor = SENSOR_MI0360; /* from BW600.inf */ sd->sensor = SENSOR_MI0360; /* from BW600.inf */
/* sd->sensor = SENSOR_HV7131R; * gspcav1 value */ /* sd->sensor = SENSOR_HV7131R; * gspcav1 value */
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x11; sd->i2c_base = 0x11;
break; break;
/* case 0x607a: * from BW600.inf /* case 0x607a: * from BW600.inf
sd->customid = SN9C102P; sd->bridge = BRIDGE_SN9C102P;
sd->sensor = SENSOR_OV7648; sd->sensor = SENSOR_OV7648;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x607c: case 0x607c:
sd->customid = SN9C102P; sd->bridge = BRIDGE_SN9C102P;
sd->sensor = SENSOR_HV7131R; sd->sensor = SENSOR_HV7131R;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x11; sd->i2c_base = 0x11;
break; break;
/* case 0x607e: * from BW600.inf /* case 0x607e: * from BW600.inf
sd->customid = SN9C102P; sd->bridge = BRIDGE_SN9C102P;
sd->sensor = SENSOR_OV7630; sd->sensor = SENSOR_OV7630;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x60c0: case 0x60c0:
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_MI0360; sd->sensor = SENSOR_MI0360;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x5d; sd->i2c_base = 0x5d;
break; break;
/* case 0x60c8: * from BW600.inf /* case 0x60c8: * from BW600.inf
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_OM6801; sd->sensor = SENSOR_OM6801;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
/* case 0x60cc: * from BW600.inf /* case 0x60cc: * from BW600.inf
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_HV7131GP; sd->sensor = SENSOR_HV7131GP;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x60ec: case 0x60ec:
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_MO4000; sd->sensor = SENSOR_MO4000;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
break; break;
/* case 0x60ef: * from BW600.inf /* case 0x60ef: * from BW600.inf
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_ICM105C; sd->sensor = SENSOR_ICM105C;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
/* case 0x60fa: * from BW600.inf /* case 0x60fa: * from BW600.inf
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_OV7648; sd->sensor = SENSOR_OV7648;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x60fb: case 0x60fb:
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_OV7660; sd->sensor = SENSOR_OV7660;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
break; break;
case 0x60fc: case 0x60fc:
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_HV7131R; sd->sensor = SENSOR_HV7131R;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x11; sd->i2c_base = 0x11;
break; break;
/* case 0x60fe: * from BW600.inf /* case 0x60fe: * from BW600.inf
sd->customid = SN9C105; sd->bridge = BRIDGE_SN9C105;
sd->sensor = SENSOR_OV7630; sd->sensor = SENSOR_OV7630;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
/* case 0x6108: * from BW600.inf /* case 0x6108: * from BW600.inf
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_OM6801; sd->sensor = SENSOR_OM6801;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
/* case 0x6122: * from BW600.inf /* case 0x6122: * from BW600.inf
sd->customid = SN9C110; sd->bridge = BRIDGE_SN9C110;
sd->sensor = SENSOR_ICM105C; sd->sensor = SENSOR_ICM105C;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x612a: case 0x612a:
/* sd->customid = SN9C110; * in BW600.inf */ /* sd->bridge = BRIDGE_SN9C110; * in BW600.inf */
sd->customid = SN9C325; sd->bridge = BRIDGE_SN9C325;
sd->sensor = SENSOR_OV7648; sd->sensor = SENSOR_OV7648;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
break; break;
/* case 0x6123: * from BW600.inf /* case 0x6123: * from BW600.inf
sd->customid = SN9C110; sd->bridge = BRIDGE_SN9C110;
sd->sensor = SENSOR_SanyoCCD; sd->sensor = SENSOR_SanyoCCD;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x612c: case 0x612c:
sd->customid = SN9C110; sd->bridge = BRIDGE_SN9C110;
sd->sensor = SENSOR_MO4000; sd->sensor = SENSOR_MO4000;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
break; break;
/* case 0x612e: * from BW600.inf /* case 0x612e: * from BW600.inf
sd->customid = SN9C110; sd->bridge = BRIDGE_SN9C110;
sd->sensor = SENSOR_OV7630; sd->sensor = SENSOR_OV7630;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
/* case 0x612f: * from BW600.inf /* case 0x612f: * from BW600.inf
sd->customid = SN9C110; sd->bridge = BRIDGE_SN9C110;
sd->sensor = SENSOR_ICM105C; sd->sensor = SENSOR_ICM105C;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x6130: case 0x6130:
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_MI0360; sd->sensor = SENSOR_MI0360;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x5d; sd->i2c_base = 0x5d;
break; break;
case 0x6138: case 0x6138:
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_MO4000; sd->sensor = SENSOR_MO4000;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
break; break;
/* case 0x613a: * from BW600.inf /* case 0x613a: * from BW600.inf
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_OV7648; sd->sensor = SENSOR_OV7648;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
case 0x613b: case 0x613b:
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_OV7660; sd->sensor = SENSOR_OV7660;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x21; sd->i2c_base = 0x21;
break; break;
case 0x613c: case 0x613c:
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_HV7131R; sd->sensor = SENSOR_HV7131R;
sd->i2c_ctrl_reg = 0x81;
sd->i2c_base = 0x11; sd->i2c_base = 0x11;
break; break;
/* case 0x613e: * from BW600.inf /* case 0x613e: * from BW600.inf
sd->customid = SN9C120; sd->bridge = BRIDGE_SN9C120;
sd->sensor = SENSOR_OV7630; sd->sensor = SENSOR_OV7630;
sd->i2c_ctrl_reg = 0x??;
sd->i2c_base = 0x??; sd->i2c_base = 0x??;
break; */ break; */
} }
...@@ -999,7 +969,7 @@ static int sd_open(struct gspca_dev *gspca_dev) ...@@ -999,7 +969,7 @@ static int sd_open(struct gspca_dev *gspca_dev)
__u8 regF1; __u8 regF1;
__u8 regGpio[] = { 0x29, 0x74 }; __u8 regGpio[] = { 0x29, 0x74 };
/* setup a selector by customid */ /* setup a selector by bridge */
regF1 = 0x01; regF1 = 0x01;
reg_w(gspca_dev, 0xf1, &regF1, 1); reg_w(gspca_dev, 0xf1, &regF1, 1);
reg_r(gspca_dev, 0x00, 1); /* -> regF1 = 0x00 */ reg_r(gspca_dev, 0x00, 1); /* -> regF1 = 0x00 */
...@@ -1007,31 +977,31 @@ static int sd_open(struct gspca_dev *gspca_dev) ...@@ -1007,31 +977,31 @@ static int sd_open(struct gspca_dev *gspca_dev)
reg_w(gspca_dev, 0xf1, &regF1, 1); reg_w(gspca_dev, 0xf1, &regF1, 1);
reg_r(gspca_dev, 0x00, 1); reg_r(gspca_dev, 0x00, 1);
regF1 = gspca_dev->usb_buf[0]; regF1 = gspca_dev->usb_buf[0];
switch (sd->customid) { switch (sd->bridge) {
case SN9C102P: case BRIDGE_SN9C102P:
if (regF1 != 0x11) if (regF1 != 0x11)
return -ENODEV; return -ENODEV;
reg_w(gspca_dev, 0x02, &regGpio[1], 1); reg_w(gspca_dev, 0x02, &regGpio[1], 1);
break; break;
case SN9C105: case BRIDGE_SN9C105:
if (regF1 != 0x11) if (regF1 != 0x11)
return -ENODEV; return -ENODEV;
reg_w(gspca_dev, 0x02, regGpio, 2); reg_w(gspca_dev, 0x02, regGpio, 2);
break; break;
case SN9C110: case BRIDGE_SN9C110:
if (regF1 != 0x12) if (regF1 != 0x12)
return -ENODEV; return -ENODEV;
regGpio[1] = 0x62; regGpio[1] = 0x62;
reg_w(gspca_dev, 0x02, &regGpio[1], 1); reg_w(gspca_dev, 0x02, &regGpio[1], 1);
break; break;
case SN9C120: case BRIDGE_SN9C120:
if (regF1 != 0x12) if (regF1 != 0x12)
return -ENODEV; return -ENODEV;
regGpio[1] = 0x70; regGpio[1] = 0x70;
reg_w(gspca_dev, 0x02, regGpio, 2); reg_w(gspca_dev, 0x02, regGpio, 2);
break; break;
default: default:
/* case SN9C325: */ /* case BRIDGE_SN9C325: */
if (regF1 != 0x12) if (regF1 != 0x12)
return -ENODEV; return -ENODEV;
regGpio[1] = 0x62; regGpio[1] = 0x62;
...@@ -1207,7 +1177,7 @@ static void sd_start(struct gspca_dev *gspca_dev) ...@@ -1207,7 +1177,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
reg_w(gspca_dev, 0xc9, &DC29[5], 1); reg_w(gspca_dev, 0xc9, &DC29[5], 1);
/*fixme:jfm end of ending sequence */ /*fixme:jfm end of ending sequence */
reg_w(gspca_dev, 0x18, &sn9c1xx[0x18], 1); reg_w(gspca_dev, 0x18, &sn9c1xx[0x18], 1);
if (sd->customid == SN9C325) if (sd->bridge == BRIDGE_SN9C325)
data = 0xae; data = 0xae;
else else
data = 0x60; data = 0x60;
...@@ -1216,7 +1186,7 @@ static void sd_start(struct gspca_dev *gspca_dev) ...@@ -1216,7 +1186,7 @@ static void sd_start(struct gspca_dev *gspca_dev)
reg_w(gspca_dev, 0x07, &sn9c1xx[7], 1); reg_w(gspca_dev, 0x07, &sn9c1xx[7], 1);
reg_w(gspca_dev, 0x06, &sn9c1xx[6], 1); reg_w(gspca_dev, 0x06, &sn9c1xx[6], 1);
reg_w(gspca_dev, 0x14, &sn9c1xx[0x14], 1); reg_w(gspca_dev, 0x14, &sn9c1xx[0x14], 1);
if (sd->customid == SN9C325) { if (sd->bridge == BRIDGE_SN9C325) {
reg_w(gspca_dev, 0x20, regsn20_sn9c325, 0x11); reg_w(gspca_dev, 0x20, regsn20_sn9c325, 0x11);
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
reg_w(gspca_dev, 0x84, reg84_sn9c325, 0x15); reg_w(gspca_dev, 0x84, reg84_sn9c325, 0x15);
...@@ -1285,17 +1255,17 @@ static void sd_start(struct gspca_dev *gspca_dev) ...@@ -1285,17 +1255,17 @@ static void sd_start(struct gspca_dev *gspca_dev)
break; break;
} }
reg_w(gspca_dev, 0xc0, C0, 6); reg_w(gspca_dev, 0xc0, C0, 6);
switch (sd->customid) { switch (sd->bridge) {
case SN9C120: /*jfm ?? */ case BRIDGE_SN9C120: /*jfm ?? */
reg_w(gspca_dev, 0xca, CA_sn9c120, 4); reg_w(gspca_dev, 0xca, CA_sn9c120, 4);
break; break;
default: default:
reg_w(gspca_dev, 0xca, CA, 4); reg_w(gspca_dev, 0xca, CA, 4);
break; break;
} }
switch (sd->customid) { switch (sd->bridge) {
case SN9C120: /*jfm ?? */ case BRIDGE_SN9C120: /*jfm ?? */
case SN9C325: case BRIDGE_SN9C325:
reg_w(gspca_dev, 0xce, CE_sn9c325, 4); reg_w(gspca_dev, 0xce, CE_sn9c325, 4);
break; break;
default: default:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment