GFP_KERNEL);
        if (!pdata->dma_slave) {
                dev_err(&pdev->dev, "could not allocate memory for dma_slave\n");
-               devm_kfree(&pdev->dev, pdata);
                return ERR_PTR(-ENOMEM);
        }
 
        unsigned long sha_phys_size;
        int err;
 
-       sha_dd = kzalloc(sizeof(struct atmel_sha_dev), GFP_KERNEL);
+       sha_dd = devm_kzalloc(&pdev->dev, sizeof(struct atmel_sha_dev),
+                               GFP_KERNEL);
        if (sha_dd == NULL) {
                dev_err(dev, "unable to alloc data struct.\n");
                err = -ENOMEM;
        free_irq(sha_dd->irq, sha_dd);
 res_err:
        tasklet_kill(&sha_dd->done_task);
-       kfree(sha_dd);
-       sha_dd = NULL;
 sha_dd_err:
        dev_err(dev, "initialization failed.\n");
 
        if (sha_dd->irq >= 0)
                free_irq(sha_dd->irq, sha_dd);
 
-       kfree(sha_dd);
-       sha_dd = NULL;
-
        return 0;
 }