@@ -1078,8 +1078,22 @@ static int sd_getvflip(struct gspca_dev
return 0;
}
-/* sub-driver description */
-static struct sd_desc sd_desc = {
+/* sub-driver description for pac7302 */
+static struct sd_desc pac7302_sd_desc = {
+ .name = MODULE_NAME,
+ .ctrls = sd_ctrls,
+ .nctrls = ARRAY_SIZE(sd_ctrls),
+ .config = sd_config,
+ .init = sd_init,
+ .start = sd_start,
+ .stopN = sd_stopN,
+ .stop0 = sd_stop0,
+ .pkt_scan = sd_pkt_scan,
+ .dq_callback = do_autogain,
+};
+
+/* sub-driver description for pac7311 */
+static struct sd_desc pac7311_sd_desc = {
.name = MODULE_NAME,
.ctrls = sd_ctrls,
.nctrls = ARRAY_SIZE(sd_ctrls),
@@ -1117,8 +1131,12 @@ MODULE_DEVICE_TABLE(usb, device_table);
static int sd_probe(struct usb_interface *intf,
const struct usb_device_id *id)
{
- return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd),
- THIS_MODULE);
+ if (id->driver_info == SENSOR_PAC7302)
+ return gspca_dev_probe(intf, id, &pac7302_sd_desc,
+ sizeof(struct sd), THIS_MODULE);
+ else
+ return gspca_dev_probe(intf, id, &pac7311_sd_desc,
+ sizeof(struct sd), THIS_MODULE);
}
static struct usb_driver sd_driver = {