diff options
author | Michael Krufky <mkrufky@linuxtv.org> | 2008-06-18 22:09:55 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@infradead.org> | 2008-07-20 07:22:27 -0300 |
commit | 1c11d546b6c31399ac60f42d3103227cc1164d80 (patch) | |
tree | 4998b2168547180e0cf2ed22b7d7279c485fe011 /drivers/media/dvb/siano/smsusb.c | |
parent | dd5b2a5c2a6c793d855910864593ad26dd844154 (diff) |
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>
Diffstat (limited to 'drivers/media/dvb/siano/smsusb.c')
-rw-r--r-- | drivers/media/dvb/siano/smsusb.c | 44 |
1 files changed, 18 insertions, 26 deletions
diff --git a/drivers/media/dvb/siano/smsusb.c b/drivers/media/dvb/siano/smsusb.c index 29183884d7e..bb8a364477f 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 @@ void smsusb_term_device(struct usb_interface *intf) 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 @@ int smsusb_init_device(struct usb_interface *intf) usb_set_intfdata(intf, dev); dev->udev = interface_to_usbdev(intf); - switch (dev->udev->descriptor.idProduct) { + board = sms_get_board(board_id); + + switch (board->type) { - case USB_PID_STELLAR: + case SMS_STELLAR: dev->buffer_size = USB1_BUFFER_SIZE; params.setmode_handler = smsusb1_setmode; @@ -316,19 +312,22 @@ int smsusb_init_device(struct usb_interface *intf) 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 @@ int smsusb_init_device(struct usb_interface *intf) 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 @@ int smsusb_probe(struct usb_interface *intf, const struct usb_device_id *id) 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 @@ void smsusb_disconnect(struct usb_interface *intf) 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, |