if (pdata->pin_list) {
                error = peripheral_request_list(pdata->pin_list,
-                                               dev_name(&pdev->dev));
+                                               dev_name(dev));
                if (error) {
                        dev_err(dev, "requesting peripherals failed: %d\n",
                                error);
                        return error;
                }
 
-               error = devm_add_action(dev, bfin_rotary_free_action,
-                                       pdata->pin_list);
+               error = devm_add_action_or_reset(dev, bfin_rotary_free_action,
+                                                pdata->pin_list);
                if (error) {
                        dev_err(dev, "setting cleanup action failed: %d\n",
                                error);
-                       peripheral_free_list(pdata->pin_list);
                        return error;
                }
        }
 
        input->name = pdev->name;
        input->phys = "bfin-rotary/input0";
-       input->dev.parent = &pdev->dev;
+       input->dev.parent = dev;
 
        input_set_drvdata(input, rotary);
 
        }
 
        platform_set_drvdata(pdev, rotary);
-       device_init_wakeup(&pdev->dev, 1);
+       device_init_wakeup(dev, 1);
 
        return 0;
 }