Merge tag 'pull-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
[sfrench/cifs-2.6.git] / drivers / crypto / amcc / crypto4xx_core.c
index 8278d98074e9ada52f58748a1764d89df73acb6f..280f4b0e71334cd35cbd48ee418fdc1a979cd728 100644 (file)
@@ -1378,6 +1378,7 @@ static int crypto4xx_probe(struct platform_device *ofdev)
        struct resource res;
        struct device *dev = &ofdev->dev;
        struct crypto4xx_core_device *core_dev;
+       struct device_node *np;
        u32 pvr;
        bool is_revb = true;
 
@@ -1385,29 +1386,36 @@ static int crypto4xx_probe(struct platform_device *ofdev)
        if (rc)
                return -ENODEV;
 
-       if (of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-crypto")) {
+       np = of_find_compatible_node(NULL, NULL, "amcc,ppc460ex-crypto");
+       if (np) {
                mtdcri(SDR0, PPC460EX_SDR0_SRST,
                       mfdcri(SDR0, PPC460EX_SDR0_SRST) | PPC460EX_CE_RESET);
                mtdcri(SDR0, PPC460EX_SDR0_SRST,
                       mfdcri(SDR0, PPC460EX_SDR0_SRST) & ~PPC460EX_CE_RESET);
-       } else if (of_find_compatible_node(NULL, NULL,
-                       "amcc,ppc405ex-crypto")) {
-               mtdcri(SDR0, PPC405EX_SDR0_SRST,
-                      mfdcri(SDR0, PPC405EX_SDR0_SRST) | PPC405EX_CE_RESET);
-               mtdcri(SDR0, PPC405EX_SDR0_SRST,
-                      mfdcri(SDR0, PPC405EX_SDR0_SRST) & ~PPC405EX_CE_RESET);
-               is_revb = false;
-       } else if (of_find_compatible_node(NULL, NULL,
-                       "amcc,ppc460sx-crypto")) {
-               mtdcri(SDR0, PPC460SX_SDR0_SRST,
-                      mfdcri(SDR0, PPC460SX_SDR0_SRST) | PPC460SX_CE_RESET);
-               mtdcri(SDR0, PPC460SX_SDR0_SRST,
-                      mfdcri(SDR0, PPC460SX_SDR0_SRST) & ~PPC460SX_CE_RESET);
        } else {
-               printk(KERN_ERR "Crypto Function Not supported!\n");
-               return -EINVAL;
+               np = of_find_compatible_node(NULL, NULL, "amcc,ppc405ex-crypto");
+               if (np) {
+                       mtdcri(SDR0, PPC405EX_SDR0_SRST,
+                                  mfdcri(SDR0, PPC405EX_SDR0_SRST) | PPC405EX_CE_RESET);
+                       mtdcri(SDR0, PPC405EX_SDR0_SRST,
+                                  mfdcri(SDR0, PPC405EX_SDR0_SRST) & ~PPC405EX_CE_RESET);
+                       is_revb = false;
+               } else {
+                       np = of_find_compatible_node(NULL, NULL, "amcc,ppc460sx-crypto");
+                       if (np) {
+                               mtdcri(SDR0, PPC460SX_SDR0_SRST,
+                                       mfdcri(SDR0, PPC460SX_SDR0_SRST) | PPC460SX_CE_RESET);
+                               mtdcri(SDR0, PPC460SX_SDR0_SRST,
+                                       mfdcri(SDR0, PPC460SX_SDR0_SRST) & ~PPC460SX_CE_RESET);
+                       } else {
+                               printk(KERN_ERR "Crypto Function Not supported!\n");
+                               return -EINVAL;
+                       }
+               }
        }
 
+       of_node_put(np);
+
        core_dev = kzalloc(sizeof(struct crypto4xx_core_device), GFP_KERNEL);
        if (!core_dev)
                return -ENOMEM;