]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/media/dvb-core/dvb_ca_en50221.c
Merge branch 'mvebu/drivers' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[karo-tx-linux.git] / drivers / media / dvb-core / dvb_ca_en50221.c
index 0aac3096728ee1faafa49a2ca8ad0986d18b0158..72937756f60c6f1e4b942366460aaad23cf4d0c7 100644 (file)
@@ -1638,15 +1638,17 @@ static const struct file_operations dvb_ca_fops = {
        .llseek = noop_llseek,
 };
 
-static struct dvb_device dvbdev_ca = {
+static const struct dvb_device dvbdev_ca = {
        .priv = NULL,
        .users = 1,
        .readers = 1,
        .writers = 1,
+#if defined(CONFIG_MEDIA_CONTROLLER_DVB)
+       .name = "dvb-ca-en50221",
+#endif
        .fops = &dvb_ca_fops,
 };
 
-
 /* ******************************************************************************** */
 /* Initialisation/shutdown functions */
 
@@ -1676,14 +1678,14 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
        /* initialise the system data */
        if ((ca = kzalloc(sizeof(struct dvb_ca_private), GFP_KERNEL)) == NULL) {
                ret = -ENOMEM;
-               goto error;
+               goto exit;
        }
        ca->pub = pubca;
        ca->flags = flags;
        ca->slot_count = slot_count;
        if ((ca->slot_info = kcalloc(slot_count, sizeof(struct dvb_ca_slot), GFP_KERNEL)) == NULL) {
                ret = -ENOMEM;
-               goto error;
+               goto free_ca;
        }
        init_waitqueue_head(&ca->wait_queue);
        ca->open = 0;
@@ -1694,7 +1696,7 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
        /* register the DVB device */
        ret = dvb_register_device(dvb_adapter, &ca->dvbdev, &dvbdev_ca, ca, DVB_DEVICE_CA);
        if (ret)
-               goto error;
+               goto free_slot_info;
 
        /* now initialise each slot */
        for (i = 0; i < slot_count; i++) {
@@ -1709,7 +1711,7 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
 
        if (signal_pending(current)) {
                ret = -EINTR;
-               goto error;
+               goto unregister_device;
        }
        mb();
 
@@ -1720,17 +1722,17 @@ int dvb_ca_en50221_init(struct dvb_adapter *dvb_adapter,
                ret = PTR_ERR(ca->thread);
                printk("dvb_ca_init: failed to start kernel_thread (%d)\n",
                        ret);
-               goto error;
+               goto unregister_device;
        }
        return 0;
 
-error:
-       if (ca != NULL) {
-               if (ca->dvbdev != NULL)
-                       dvb_unregister_device(ca->dvbdev);
-               kfree(ca->slot_info);
-               kfree(ca);
-       }
+unregister_device:
+       dvb_unregister_device(ca->dvbdev);
+free_slot_info:
+       kfree(ca->slot_info);
+free_ca:
+       kfree(ca);
+exit:
        pubca->private = NULL;
        return ret;
 }