mirror of
https://github.com/torvalds/linux.git
synced 2024-12-12 06:02:38 +00:00
[media] gspca_sonixj: Probe sensor type independent of bridge type
Looking at the windows inf file, for usb ids with a sensor type where probing is needed to determine the type (for example ov7630 or soi768), this is needed for all bridge variants with a usb id indicating this sensor type. So do the probing to determine the actual sensor type for types where the usb-id info is not 100% deterministic, independent of the bridge type. If you look through the list of currently active usb ids in sonixj, this effectively only changes the code path for 0c45:60fe (sn9c105 + ov7630) and 0c45:612e (sn9c110 + ov7630), which according to the inf file can have a soi768 instead of a ov7630 just like the sn9c120 + ov7630 models where we already probe for a soi7630. The main reason for this code change is to keep the code paths as bridge variant independent as possible, so that we don't need a lot of special per bridge cases, as we enable more usb-ids in the future. This change makes the 0c45:60fe code path identical to the successfully tested 0c45:613e, so also make sonixj the default driver for 0c45:60fe. Signed-off-by: Hans de Goede <hdegoede@redhat.com> Acked-by: Jean-Francois Moine <moinejf@free.fr> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
4944e27d85
commit
e530a5e3cf
@ -1822,44 +1822,46 @@ static int sd_init(struct gspca_dev *gspca_dev)
|
||||
PDEBUG(D_PROBE, "Sonix chip id: %02x", regF1);
|
||||
switch (sd->bridge) {
|
||||
case BRIDGE_SN9C102P:
|
||||
if (regF1 != 0x11)
|
||||
return -ENODEV;
|
||||
reg_w1(gspca_dev, 0x02, regGpio[1]);
|
||||
break;
|
||||
case BRIDGE_SN9C105:
|
||||
if (regF1 != 0x11)
|
||||
return -ENODEV;
|
||||
if (sd->sensor == SENSOR_MI0360)
|
||||
mi0360_probe(gspca_dev);
|
||||
reg_w(gspca_dev, 0x01, regGpio, 2);
|
||||
break;
|
||||
case BRIDGE_SN9C120:
|
||||
if (regF1 != 0x12)
|
||||
return -ENODEV;
|
||||
switch (sd->sensor) {
|
||||
case SENSOR_MI0360:
|
||||
mi0360_probe(gspca_dev);
|
||||
break;
|
||||
case SENSOR_OV7630:
|
||||
ov7630_probe(gspca_dev);
|
||||
break;
|
||||
case SENSOR_OV7648:
|
||||
ov7648_probe(gspca_dev);
|
||||
break;
|
||||
case SENSOR_PO2030N:
|
||||
po2030n_probe(gspca_dev);
|
||||
break;
|
||||
}
|
||||
regGpio[1] = 0x70; /* no audio */
|
||||
reg_w(gspca_dev, 0x01, regGpio, 2);
|
||||
break;
|
||||
default:
|
||||
/* case BRIDGE_SN9C110: */
|
||||
/* case BRIDGE_SN9C325: */
|
||||
/* case BRIDGE_SN9C120: */
|
||||
if (regF1 != 0x12)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
switch (sd->sensor) {
|
||||
case SENSOR_MI0360:
|
||||
mi0360_probe(gspca_dev);
|
||||
break;
|
||||
case SENSOR_OV7630:
|
||||
ov7630_probe(gspca_dev);
|
||||
break;
|
||||
case SENSOR_OV7648:
|
||||
ov7648_probe(gspca_dev);
|
||||
break;
|
||||
case SENSOR_PO2030N:
|
||||
po2030n_probe(gspca_dev);
|
||||
break;
|
||||
}
|
||||
|
||||
switch (sd->bridge) {
|
||||
case BRIDGE_SN9C102P:
|
||||
reg_w1(gspca_dev, 0x02, regGpio[1]);
|
||||
break;
|
||||
case BRIDGE_SN9C105:
|
||||
reg_w(gspca_dev, 0x01, regGpio, 2);
|
||||
break;
|
||||
case BRIDGE_SN9C110:
|
||||
reg_w1(gspca_dev, 0x02, 0x62);
|
||||
break;
|
||||
case BRIDGE_SN9C120:
|
||||
regGpio[1] = 0x70; /* no audio */
|
||||
reg_w(gspca_dev, 0x01, regGpio, 2);
|
||||
break;
|
||||
}
|
||||
|
||||
if (sd->sensor == SENSOR_OM6802)
|
||||
@ -2935,9 +2937,7 @@ static const __devinitdata struct usb_device_id device_table[] = {
|
||||
/* {USB_DEVICE(0x0c45, 0x60f2), BS(SN9C105, OV7660)}, */
|
||||
{USB_DEVICE(0x0c45, 0x60fb), BS(SN9C105, OV7660)},
|
||||
{USB_DEVICE(0x0c45, 0x60fc), BS(SN9C105, HV7131R)},
|
||||
#if !defined CONFIG_USB_SN9C102 && !defined CONFIG_USB_SN9C102_MODULE
|
||||
{USB_DEVICE(0x0c45, 0x60fe), BS(SN9C105, OV7630)},
|
||||
#endif
|
||||
{USB_DEVICE(0x0c45, 0x6100), BS(SN9C120, MI0360)}, /*sn9c128*/
|
||||
{USB_DEVICE(0x0c45, 0x6102), BS(SN9C120, PO2030N)}, /* /GC0305*/
|
||||
/* {USB_DEVICE(0x0c45, 0x6108), BS(SN9C120, OM6802)}, */
|
||||
|
@ -108,10 +108,8 @@ static const struct usb_device_id sn9c102_id_table[] = {
|
||||
/* { SN9C102_USB_DEVICE(0x0c45, 0x60fa, BRIDGE_SN9C105), }, OV7648 */
|
||||
{ SN9C102_USB_DEVICE(0x0c45, 0x60fb, BRIDGE_SN9C105), },
|
||||
{ SN9C102_USB_DEVICE(0x0c45, 0x60fc, BRIDGE_SN9C105), },
|
||||
#endif
|
||||
{ SN9C102_USB_DEVICE(0x0c45, 0x60fe, BRIDGE_SN9C105), },
|
||||
/* SN9C120 */
|
||||
#if !defined CONFIG_USB_GSPCA_SONIXJ && !defined CONFIG_USB_GSPCA_SONIXJ_MODULE
|
||||
{ SN9C102_USB_DEVICE(0x0458, 0x7025, BRIDGE_SN9C120), },
|
||||
/* { SN9C102_USB_DEVICE(0x0c45, 0x6102, BRIDGE_SN9C120), }, po2030 */
|
||||
/* { SN9C102_USB_DEVICE(0x0c45, 0x6108, BRIDGE_SN9C120), }, om6801 */
|
||||
|
Loading…
Reference in New Issue
Block a user