{
        struct ccp_device *ccp;
 
-       ccp = kzalloc(sizeof(*ccp), GFP_KERNEL);
+       ccp = devm_kzalloc(dev, sizeof(*ccp), GFP_KERNEL);
        if (!ccp)
                return NULL;
        ccp->dev = dev;
 
        if (!ccp)
                goto e_err;
 
-       ccp_pci = kzalloc(sizeof(*ccp_pci), GFP_KERNEL);
-       if (!ccp_pci) {
-               ret = -ENOMEM;
-               goto e_free1;
-       }
+       ccp_pci = devm_kzalloc(dev, sizeof(*ccp_pci), GFP_KERNEL);
+       if (!ccp_pci)
+               goto e_err;
+
        ccp->dev_specific = ccp_pci;
        ccp->get_irq = ccp_get_irqs;
        ccp->free_irq = ccp_free_irqs;
        ret = pci_request_regions(pdev, "ccp");
        if (ret) {
                dev_err(dev, "pci_request_regions failed (%d)\n", ret);
-               goto e_free2;
+               goto e_err;
        }
 
        ret = pci_enable_device(pdev);
 e_regions:
        pci_release_regions(pdev);
 
-e_free2:
-       kfree(ccp_pci);
-
-e_free1:
-       kfree(ccp);
-
 e_err:
        dev_notice(dev, "initialization failed\n");
        return ret;
 
        pci_release_regions(pdev);
 
-       kfree(ccp);
-
        dev_notice(dev, "disabled\n");
 }
 
 
        ccp->io_map = devm_ioremap_resource(dev, ior);
        if (IS_ERR(ccp->io_map)) {
                ret = PTR_ERR(ccp->io_map);
-               goto e_free;
+               goto e_err;
        }
        ccp->io_regs = ccp->io_map;
 
        ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(48));
        if (ret) {
                dev_err(dev, "dma_set_mask_and_coherent failed (%d)\n", ret);
-               goto e_free;
+               goto e_err;
        }
 
        if (of_property_read_bool(dev->of_node, "dma-coherent"))
 
        ret = ccp_init(ccp);
        if (ret)
-               goto e_free;
+               goto e_err;
 
        dev_notice(dev, "enabled\n");
 
        return 0;
 
-e_free:
-       kfree(ccp);
-
 e_err:
        dev_notice(dev, "initialization failed\n");
        return ret;
 
        ccp_destroy(ccp);
 
-       kfree(ccp);
-
        dev_notice(dev, "disabled\n");
 
        return 0;