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 tdes_phys_size;
        int err;
 
-       tdes_dd = kzalloc(sizeof(struct atmel_tdes_dev), GFP_KERNEL);
+       tdes_dd = devm_kmalloc(&pdev->dev, sizeof(*tdes_dd), GFP_KERNEL);
        if (tdes_dd == NULL) {
                dev_err(dev, "unable to alloc data struct.\n");
                err = -ENOMEM;
 res_err:
        tasklet_kill(&tdes_dd->done_task);
        tasklet_kill(&tdes_dd->queue_task);
-       kfree(tdes_dd);
-       tdes_dd = NULL;
 tdes_dd_err:
        dev_err(dev, "initialization failed.\n");
 
        if (tdes_dd->irq >= 0)
                free_irq(tdes_dd->irq, tdes_dd);
 
-       kfree(tdes_dd);
-       tdes_dd = NULL;
-
        return 0;
 }