aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorDevin Heitmueller <dheitmueller@kernellabs.com>2011-10-31 11:24:48 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-11-03 05:43:51 -0400
commit4f7b7c01fd2ca12c6c2d9eaa2a63e1c534f372ae (patch)
tree004cb06a080610f5b66419f83fee7f5c3c9aa0e6 /drivers/staging
parent5f9745b2c942b2ab220831b2c51a18c3f1374249 (diff)
[media] staging: as102: Properly handle multiple product names
Properly handle the case where the driver can be associated with multiple different products (as opposed to always saying the device is named after the value in a #define). Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Piotr Chmura <chmooreck@poczta.onet.pl> Signed-off-by: Sylwester Nawrocki <snjw23@gmail.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/media/as102/as102_drv.c2
-rw-r--r--drivers/staging/media/as102/as102_drv.h1
-rw-r--r--drivers/staging/media/as102/as102_fe.c4
-rw-r--r--drivers/staging/media/as102/as102_usb_drv.c27
-rw-r--r--drivers/staging/media/as102/as102_usb_drv.h5
5 files changed, 35 insertions, 4 deletions
diff --git a/drivers/staging/media/as102/as102_drv.c b/drivers/staging/media/as102/as102_drv.c
index 9e5d81bb3432..e1e32be22ce7 100644
--- a/drivers/staging/media/as102/as102_drv.c
+++ b/drivers/staging/media/as102/as102_drv.c
@@ -209,7 +209,7 @@ int as102_dvb_register(struct as102_dev_t *as102_dev)
209 209
210#if defined(CONFIG_DVB_CORE) || defined(CONFIG_DVB_CORE_MODULE) 210#if defined(CONFIG_DVB_CORE) || defined(CONFIG_DVB_CORE_MODULE)
211 ret = dvb_register_adapter(&as102_dev->dvb_adap, 211 ret = dvb_register_adapter(&as102_dev->dvb_adap,
212 DEVICE_FULL_NAME, 212 as102_dev->name,
213 THIS_MODULE, 213 THIS_MODULE,
214#if defined(CONFIG_AS102_USB) 214#if defined(CONFIG_AS102_USB)
215 &as102_dev->bus_adap.usb_dev->dev 215 &as102_dev->bus_adap.usb_dev->dev
diff --git a/drivers/staging/media/as102/as102_drv.h b/drivers/staging/media/as102/as102_drv.h
index f50bb9f67fce..cd11b1628f44 100644
--- a/drivers/staging/media/as102/as102_drv.h
+++ b/drivers/staging/media/as102/as102_drv.h
@@ -106,6 +106,7 @@ struct as102_bus_adapter_t {
106}; 106};
107 107
108struct as102_dev_t { 108struct as102_dev_t {
109 const char *name;
109 struct as102_bus_adapter_t bus_adap; 110 struct as102_bus_adapter_t bus_adap;
110 struct list_head device_entry; 111 struct list_head device_entry;
111 struct kref kref; 112 struct kref kref;
diff --git a/drivers/staging/media/as102/as102_fe.c b/drivers/staging/media/as102/as102_fe.c
index e9f7188ee44c..049548677111 100644
--- a/drivers/staging/media/as102/as102_fe.c
+++ b/drivers/staging/media/as102/as102_fe.c
@@ -346,7 +346,7 @@ static int as102_fe_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
346 346
347static struct dvb_frontend_ops as102_fe_ops = { 347static struct dvb_frontend_ops as102_fe_ops = {
348 .info = { 348 .info = {
349 .name = DEVICE_FULL_NAME, 349 .name = "Unknown AS102 device",
350 .type = FE_OFDM, 350 .type = FE_OFDM,
351 .frequency_min = 174000000, 351 .frequency_min = 174000000,
352 .frequency_max = 862000000, 352 .frequency_max = 862000000,
@@ -408,6 +408,8 @@ int as102_dvb_register_fe(struct as102_dev_t *as102_dev,
408 408
409 /* init frontend callback ops */ 409 /* init frontend callback ops */
410 memcpy(&dvb_fe->ops, &as102_fe_ops, sizeof(struct dvb_frontend_ops)); 410 memcpy(&dvb_fe->ops, &as102_fe_ops, sizeof(struct dvb_frontend_ops));
411 strncpy(dvb_fe->ops.info.name, as102_dev->name,
412 sizeof(dvb_fe->ops.info.name));
411 413
412 /* register dbvb frontend */ 414 /* register dbvb frontend */
413 errno = dvb_register_frontend(dvb_adap, dvb_fe); 415 errno = dvb_register_frontend(dvb_adap, dvb_fe);
diff --git a/drivers/staging/media/as102/as102_usb_drv.c b/drivers/staging/media/as102/as102_usb_drv.c
index d749e0630ffd..3a3dd777f70a 100644
--- a/drivers/staging/media/as102/as102_usb_drv.c
+++ b/drivers/staging/media/as102/as102_usb_drv.c
@@ -44,6 +44,15 @@ static struct usb_device_id as102_usb_id_table[] = {
44 { } /* Terminating entry */ 44 { } /* Terminating entry */
45}; 45};
46 46
47/* Note that this table must always have the same number of entries as the
48 as102_usb_id_table struct */
49static const char *as102_device_names[] = {
50 AS102_REFERENCE_DESIGN,
51 AS102_PCTV_74E,
52 AS102_ELGATO_EYETV_DTT_NAME,
53 NULL /* Terminating entry */
54};
55
47struct usb_driver as102_usb_driver = { 56struct usb_driver as102_usb_driver = {
48 .name = DRIVER_FULL_NAME, 57 .name = DRIVER_FULL_NAME,
49 .probe = as102_usb_probe, 58 .probe = as102_usb_probe,
@@ -344,6 +353,7 @@ static int as102_usb_probe(struct usb_interface *intf,
344{ 353{
345 int ret; 354 int ret;
346 struct as102_dev_t *as102_dev; 355 struct as102_dev_t *as102_dev;
356 int i;
347 357
348 ENTER(); 358 ENTER();
349 359
@@ -353,6 +363,23 @@ static int as102_usb_probe(struct usb_interface *intf,
353 return -ENOMEM; 363 return -ENOMEM;
354 } 364 }
355 365
366 /* This should never actually happen */
367 if ((sizeof(as102_usb_id_table) / sizeof(struct usb_device_id)) !=
368 (sizeof(as102_device_names) / sizeof(const char *))) {
369 printk(KERN_ERR "Device names table invalid size");
370 return -EINVAL;
371 }
372
373 /* Assign the user-friendly device name */
374 for (i = 0; i < (sizeof(as102_usb_id_table) /
375 sizeof(struct usb_device_id)); i++) {
376 if (id == &as102_usb_id_table[i])
377 as102_dev->name = as102_device_names[i];
378 }
379
380 if (as102_dev->name == NULL)
381 as102_dev->name = "Unknown AS102 device";
382
356 /* set private callback functions */ 383 /* set private callback functions */
357 as102_dev->bus_adap.ops = &as102_priv_ops; 384 as102_dev->bus_adap.ops = &as102_priv_ops;
358 385
diff --git a/drivers/staging/media/as102/as102_usb_drv.h b/drivers/staging/media/as102/as102_usb_drv.h
index a81a895aa058..a74146277fbd 100644
--- a/drivers/staging/media/as102/as102_usb_drv.h
+++ b/drivers/staging/media/as102/as102_usb_drv.h
@@ -28,16 +28,17 @@
28/* define these values to match the supported devices */ 28/* define these values to match the supported devices */
29 29
30/* Abilis system: "TITAN" */ 30/* Abilis system: "TITAN" */
31#define AS102_REFERENCE_DESIGN "Abilis Systems DVB-Titan"
31#define AS102_USB_DEVICE_VENDOR_ID 0x1BA6 32#define AS102_USB_DEVICE_VENDOR_ID 0x1BA6
32#define AS102_USB_DEVICE_PID_0001 0x0001 33#define AS102_USB_DEVICE_PID_0001 0x0001
33 34
34/* PCTV Systems: PCTV picoStick (74e) */ 35/* PCTV Systems: PCTV picoStick (74e) */
35#define DEVICE_FULL_NAME "PCTV Systems : PCTV picoStick (74e)" 36#define AS102_PCTV_74E "PCTV Systems picoStick (74e)"
36#define PCTV_74E_USB_VID 0x2013 37#define PCTV_74E_USB_VID 0x2013
37#define PCTV_74E_USB_PID 0x0246 38#define PCTV_74E_USB_PID 0x0246
38 39
39/* Elgato: EyeTV DTT Deluxe */ 40/* Elgato: EyeTV DTT Deluxe */
40#define ELGATO_EYETV_DTT_NAME "Elgato EyeTV DTT Deluxe" 41#define AS102_ELGATO_EYETV_DTT_NAME "Elgato EyeTV DTT Deluxe"
41#define ELGATO_EYETV_DTT_USB_VID 0x0fd9 42#define ELGATO_EYETV_DTT_USB_VID 0x0fd9
42#define ELGATO_EYETV_DTT_USB_PID 0x002c 43#define ELGATO_EYETV_DTT_USB_PID 0x002c
43 44