mfd: ucb1x00-core: Rewrite ucb1x00_add_dev()
[linux-2.6-microblaze.git] / drivers / mfd / ucb1x00-core.c
index b7cf98f..d5966e6 100644 (file)
@@ -393,22 +393,24 @@ static struct irq_chip ucb1x00_irqchip = {
 static int ucb1x00_add_dev(struct ucb1x00 *ucb, struct ucb1x00_driver *drv)
 {
        struct ucb1x00_dev *dev;
-       int ret = -ENOMEM;
+       int ret;
 
        dev = kmalloc(sizeof(struct ucb1x00_dev), GFP_KERNEL);
-       if (dev) {
-               dev->ucb = ucb;
-               dev->drv = drv;
-
-               ret = drv->add(dev);
-
-               if (ret == 0) {
-                       list_add_tail(&dev->dev_node, &ucb->devs);
-                       list_add_tail(&dev->drv_node, &drv->devs);
-               } else {
-                       kfree(dev);
-               }
+       if (!dev)
+               return -ENOMEM;
+
+       dev->ucb = ucb;
+       dev->drv = drv;
+
+       ret = drv->add(dev);
+       if (ret) {
+               kfree(dev);
+               return ret;
        }
+
+       list_add_tail(&dev->dev_node, &ucb->devs);
+       list_add_tail(&dev->drv_node, &drv->devs);
+
        return ret;
 }