.irqhandler = ccp_irq_handler,
 };
 
-struct ccp_vdata ccpv3 = {
+const struct ccp_vdata ccpv3 = {
        .version = CCP_VERSION(3, 0),
        .setup = NULL,
        .perform = &ccp3_actions,
 
        /* Register the DMA engine support */
        ret = ccp_dmaengine_register(ccp);
        if (ret)
-               goto e_kthread;
+               goto e_hwrng;
 
        return 0;
 
+e_hwrng:
+       ccp_unregister_rng(ccp);
+
 e_kthread:
        for (i = 0; i < ccp->cmd_q_count; i++)
                if (ccp->cmd_q[i].kthread)
        .irqhandler = ccp5_irq_handler,
 };
 
-struct ccp_vdata ccpv5 = {
+const struct ccp_vdata ccpv5a = {
        .version = CCP_VERSION(5, 0),
        .setup = ccp5_config,
        .perform = &ccp5_actions,
        .offset = 0x0,
 };
 
-struct ccp_vdata ccpv5other = {
+const struct ccp_vdata ccpv5b = {
        .version = CCP_VERSION(5, 0),
        .setup = ccp5other_config,
        .perform = &ccp5_actions,
 
        const unsigned int offset;
 };
 
-extern struct ccp_vdata ccpv3;
-extern struct ccp_vdata ccpv5;
-extern struct ccp_vdata ccpv5other;
+extern const struct ccp_vdata ccpv3;
+extern const struct ccp_vdata ccpv5a;
+extern const struct ccp_vdata ccpv5b;
 
 #endif
 
 
 static const struct pci_device_id ccp_pci_table[] = {
        { PCI_VDEVICE(AMD, 0x1537), (kernel_ulong_t)&ccpv3 },
-       { PCI_VDEVICE(AMD, 0x1456), (kernel_ulong_t)&ccpv5 },
-       { PCI_VDEVICE(AMD, 0x1468), (kernel_ulong_t)&ccpv5other },
+       { PCI_VDEVICE(AMD, 0x1456), (kernel_ulong_t)&ccpv5a },
+       { PCI_VDEVICE(AMD, 0x1468), (kernel_ulong_t)&ccpv5b },
        /* Last entry must be zero */
        { 0, }
 };