[media] staging: as102: Properly handle multiple product names
authorDevin Heitmueller <dheitmueller@kernellabs.com>
Mon, 31 Oct 2011 15:24:48 +0000 (12:24 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Thu, 3 Nov 2011 09:43:51 +0000 (07:43 -0200)
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>
drivers/staging/media/as102/as102_drv.c
drivers/staging/media/as102/as102_drv.h
drivers/staging/media/as102/as102_fe.c
drivers/staging/media/as102/as102_usb_drv.c
drivers/staging/media/as102/as102_usb_drv.h

index 9e5d81bb343259f621a53f5087e6e0c958e74b5b..e1e32be22ce72f4ef15bdc2d1390b25e166285fe 100644 (file)
@@ -209,7 +209,7 @@ int as102_dvb_register(struct as102_dev_t *as102_dev)
 
 #if defined(CONFIG_DVB_CORE) || defined(CONFIG_DVB_CORE_MODULE)
        ret = dvb_register_adapter(&as102_dev->dvb_adap,
-                                  DEVICE_FULL_NAME,
+                                  as102_dev->name,
                                   THIS_MODULE,
 #if defined(CONFIG_AS102_USB)
                                   &as102_dev->bus_adap.usb_dev->dev
index f50bb9f67fcecf6fb0b68fd043579c738de946f4..cd11b1628f44cfa8dddf70d81c51cdc2ab0f67d9 100644 (file)
@@ -106,6 +106,7 @@ struct as102_bus_adapter_t {
 };
 
 struct as102_dev_t {
+       const char *name;
        struct as102_bus_adapter_t bus_adap;
        struct list_head device_entry;
        struct kref kref;
index e9f7188ee44ca06218b5340162f8a6af155fa1b1..049548677111d9a32bc6dd9db3078eb460eaa52a 100644 (file)
@@ -346,7 +346,7 @@ static int as102_fe_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
 
 static struct dvb_frontend_ops as102_fe_ops = {
        .info = {
-               .name                   = DEVICE_FULL_NAME,
+               .name                   = "Unknown AS102 device",
                .type                   = FE_OFDM,
                .frequency_min          = 174000000,
                .frequency_max          = 862000000,
@@ -408,6 +408,8 @@ int as102_dvb_register_fe(struct as102_dev_t *as102_dev,
 
        /* init frontend callback ops */
        memcpy(&dvb_fe->ops, &as102_fe_ops, sizeof(struct dvb_frontend_ops));
+       strncpy(dvb_fe->ops.info.name, as102_dev->name,
+               sizeof(dvb_fe->ops.info.name));
 
        /* register dbvb frontend */
        errno = dvb_register_frontend(dvb_adap, dvb_fe);
index d749e0630ffde30cf0710490ef2b054ad4706d28..3a3dd777f70a4790cf8b5e524db1a0bfa4d9c1e9 100644 (file)
@@ -44,6 +44,15 @@ static struct usb_device_id as102_usb_id_table[] = {
        { } /* Terminating entry */
 };
 
+/* Note that this table must always have the same number of entries as the
+   as102_usb_id_table struct */
+static const char *as102_device_names[] = {
+       AS102_REFERENCE_DESIGN,
+       AS102_PCTV_74E,
+       AS102_ELGATO_EYETV_DTT_NAME,
+       NULL /* Terminating entry */
+};
+
 struct usb_driver as102_usb_driver = {
        .name       =  DRIVER_FULL_NAME,
        .probe      =  as102_usb_probe,
@@ -344,6 +353,7 @@ static int as102_usb_probe(struct usb_interface *intf,
 {
        int ret;
        struct as102_dev_t *as102_dev;
+       int i;
 
        ENTER();
 
@@ -353,6 +363,23 @@ static int as102_usb_probe(struct usb_interface *intf,
                return -ENOMEM;
        }
 
+       /* This should never actually happen */
+       if ((sizeof(as102_usb_id_table) / sizeof(struct usb_device_id)) !=
+           (sizeof(as102_device_names) / sizeof(const char *))) {
+               printk(KERN_ERR "Device names table invalid size");
+               return -EINVAL;
+       }
+
+       /* Assign the user-friendly device name */
+       for (i = 0; i < (sizeof(as102_usb_id_table) /
+                        sizeof(struct usb_device_id)); i++) {
+               if (id == &as102_usb_id_table[i])
+                       as102_dev->name = as102_device_names[i];
+       }
+
+       if (as102_dev->name == NULL)
+               as102_dev->name = "Unknown AS102 device";
+
        /* set private callback functions */
        as102_dev->bus_adap.ops = &as102_priv_ops;
 
index a81a895aa0582a516ff154b35cea789abadf27a5..a74146277fbd003b49dedb439971b5bbaa1d92ce 100644 (file)
 /* define these values to match the supported devices */
 
 /* Abilis system: "TITAN" */
+#define AS102_REFERENCE_DESIGN         "Abilis Systems DVB-Titan"
 #define AS102_USB_DEVICE_VENDOR_ID     0x1BA6
 #define AS102_USB_DEVICE_PID_0001      0x0001
 
 /* PCTV Systems: PCTV picoStick (74e) */
-#define DEVICE_FULL_NAME               "PCTV Systems : PCTV picoStick (74e)"
+#define AS102_PCTV_74E                 "PCTV Systems picoStick (74e)"
 #define PCTV_74E_USB_VID               0x2013
 #define PCTV_74E_USB_PID               0x0246
 
 /* Elgato: EyeTV DTT Deluxe */
-#define ELGATO_EYETV_DTT_NAME          "Elgato EyeTV DTT Deluxe"
+#define AS102_ELGATO_EYETV_DTT_NAME    "Elgato EyeTV DTT Deluxe"
 #define ELGATO_EYETV_DTT_USB_VID       0x0fd9
 #define ELGATO_EYETV_DTT_USB_PID       0x002c