fman = kzalloc(sizeof(*fman), GFP_KERNEL);
        if (!fman)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        fm_node = of_node_get(of_dev->dev.of_node);
 
        fman->dts_params.id = (u8)val;
 
        /* Get the FM interrupt */
-       res = platform_get_resource(of_dev, IORESOURCE_IRQ, 0);
-       if (!res) {
-               dev_err(&of_dev->dev, "%s: Can't get FMan IRQ resource\n",
-                       __func__);
+       err = platform_get_irq(of_dev, 0);
+       if (err < 0)
                goto fman_node_put;
-       }
-       irq = res->start;
+       irq = err;
 
        /* Get the FM error interrupt */
-       res = platform_get_resource(of_dev, IORESOURCE_IRQ, 1);
-       if (!res) {
-               dev_err(&of_dev->dev, "%s: Can't get FMan Error IRQ resource\n",
-                       __func__);
+       err = platform_get_irq(of_dev, 1);
+       if (err < 0)
                goto fman_node_put;
-       }
-       fman->dts_params.err_irq = res->start;
+       fman->dts_params.err_irq = err;
 
        /* Get the FM address */
        res = platform_get_resource(of_dev, IORESOURCE_MEM, 0);
        if (!res) {
+               err = -EINVAL;
                dev_err(&of_dev->dev, "%s: Can't get FMan memory resource\n",
                        __func__);
                goto fman_node_put;
 
        clk = of_clk_get(fm_node, 0);
        if (IS_ERR(clk)) {
+               err = PTR_ERR(clk);
                dev_err(&of_dev->dev, "%s: Failed to get FM%d clock structure\n",
                        __func__, fman->dts_params.id);
                goto fman_node_put;
 
        clk_rate = clk_get_rate(clk);
        if (!clk_rate) {
+               err = -EINVAL;
                dev_err(&of_dev->dev, "%s: Failed to determine FM%d clock rate\n",
                        __func__, fman->dts_params.id);
                goto fman_node_put;
        /* Get the MURAM base address and size */
        muram_node = of_find_matching_node(fm_node, fman_muram_match);
        if (!muram_node) {
+               err = -EINVAL;
                dev_err(&of_dev->dev, "%s: could not find MURAM node\n",
                        __func__);
                goto fman_free;
                devm_request_mem_region(&of_dev->dev, phys_base_addr,
                                        mem_size, "fman");
        if (!fman->dts_params.res) {
+               err = -EBUSY;
                dev_err(&of_dev->dev, "%s: request_mem_region() failed\n",
                        __func__);
                goto fman_free;
        fman->dts_params.base_addr =
                devm_ioremap(&of_dev->dev, phys_base_addr, mem_size);
        if (!fman->dts_params.base_addr) {
+               err = -ENOMEM;
                dev_err(&of_dev->dev, "%s: devm_ioremap() failed\n", __func__);
                goto fman_free;
        }
        of_node_put(fm_node);
 fman_free:
        kfree(fman);
-       return NULL;
+       return ERR_PTR(err);
 }
 
 static int fman_probe(struct platform_device *of_dev)
        dev = &of_dev->dev;
 
        fman = read_dts_node(of_dev);
-       if (!fman)
-               return -EIO;
+       if (IS_ERR(fman))
+               return PTR_ERR(fman);
 
        err = fman_config(fman);
        if (err) {