diff
+	bool pctldev_freed = false;
 	error = pinctrl_claim_hogs(pctldev);
 	if (error) {
 		dev_err(pctldev->dev, "could not claim hogs: %i\n",
 			error);
 		pinctrl_free_pindescs(pctldev, pctldev->desc->pins,
 				      pctldev->desc->npins);
 		mutex_destroy(&pctldev->mutex);
 		kfree(pctldev);
+		pctldev_freed = true;
 		return error;
 	}
+	if (!pctldev_freed) {
 	mutex_lock(&pinctrldev_list_mutex);
 	list_add_tail(&pctldev->node, &pinctrldev_list);
 	mutex_unlock(&pinctrldev_list_mutex);
 
 	pinctrl_init_device_debugfs(pctldev);
+	}
