V4L/DVB (8292): sms1xxx: add code to allow device-specific functionality

Set board ID in the usb_device_id table's driver_info field.
Use board name when registering the dvb adapter.

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c
index 2918388..bb8a364 100644
--- a/drivers/media/dvb/siano/smsusb.c
+++ b/drivers/media/dvb/siano/smsusb.c
@@ -25,6 +25,7 @@
 #include <linux/firmware.h>
 
 #include "smscoreapi.h"
+#include "sms-cards.h"
 
 #define USB1_BUFFER_SIZE		0x1000
 #define USB2_BUFFER_SIZE		0x4000
@@ -32,14 +33,6 @@
 #define MAX_BUFFERS		50
 #define MAX_URBS		10
 
-/* TO DO: move these to a header file */
-#define USB_VID_SIANO 0x187f
-
-#define USB_PID_STELLAR 0x0100
-#define USB_PID_NOVA_A 0x0200
-#define USB_PID_NOVA_B 0x0201
-#define USB_PID_VEGA 0x0300
-
 struct smsusb_device_t;
 
 struct smsusb_urb_t {
@@ -287,10 +280,11 @@
 	usb_set_intfdata(intf, NULL);
 }
 
-int smsusb_init_device(struct usb_interface *intf)
+int smsusb_init_device(struct usb_interface *intf, int board_id)
 {
 	struct smsdevice_params_t params;
 	struct smsusb_device_t *dev;
+	struct sms_board *board;
 	int i, rc;
 
 	/* create device object */
@@ -305,9 +299,11 @@
 	usb_set_intfdata(intf, dev);
 	dev->udev = interface_to_usbdev(intf);
 
-	switch (dev->udev->descriptor.idProduct) {
+	board = sms_get_board(board_id);
 
-	case USB_PID_STELLAR:
+	switch (board->type) {
+
+	case SMS_STELLAR:
 		dev->buffer_size = USB1_BUFFER_SIZE;
 
 		params.setmode_handler = smsusb1_setmode;
@@ -316,19 +312,22 @@
 		printk(KERN_INFO "%s stellar device found\n", __func__);
 		break;
 	default:
-		switch (dev->udev->descriptor.idProduct) {
-		case USB_PID_NOVA_A:
+		switch (board->type) {
+		case SMS_NOVA_A0:
 			params.device_type = SMS_NOVA_A0;
 			printk(KERN_INFO "%s nova A0 found\n", __func__);
 			break;
-		default:
-		case USB_PID_NOVA_B:
+		case SMS_NOVA_B0:
 			params.device_type = SMS_NOVA_B0;
 			printk(KERN_INFO "%s nova B0 found\n", __func__);
 			break;
-		case USB_PID_VEGA:
+		case SMS_VEGA:
 			params.device_type = SMS_VEGA;
 			printk(KERN_INFO "%s Vega found\n", __func__);
+			break;
+		default:
+			printk(KERN_ERR "%s Unspecified sms device type!\n",
+			       __func__);
 		}
 
 		dev->buffer_size = USB2_BUFFER_SIZE;
@@ -357,6 +356,8 @@
 		return rc;
 	}
 
+	smscore_set_board_id(dev->coredev, board_id);
+
 	/* initialize urbs */
 	for (i = 0; i < MAX_URBS; i++) {
 		dev->surbs[i].dev = dev;
@@ -426,7 +427,7 @@
 				udev, smscore_registry_getmode(devpath));
 	}
 
-	rc = smsusb_init_device(intf);
+	rc = smsusb_init_device(intf, id->driver_info);
 	printk(KERN_INFO "%s rc %d\n", __func__, rc);
 	return rc;
 }
@@ -436,15 +437,6 @@
 	smsusb_term_device(intf);
 }
 
-static struct usb_device_id smsusb_id_table [] = {
-	{ USB_DEVICE(USB_VID_SIANO, USB_PID_STELLAR) },
-	{ USB_DEVICE(USB_VID_SIANO, USB_PID_NOVA_A) },
-	{ USB_DEVICE(USB_VID_SIANO, USB_PID_NOVA_B) },
-	{ USB_DEVICE(USB_VID_SIANO, USB_PID_VEGA) },
-	{ }		/* Terminating entry */
-};
-MODULE_DEVICE_TABLE(usb, smsusb_id_table);
-
 static struct usb_driver smsusb_driver = {
 	.name			= "smsusb",
 	.probe			= smsusb_probe,