dev_set_drvdata(&plat_dev->dev, new_drvdata);
        /* Get device resources */
        /* First CC registers space */
-       new_drvdata->res_mem = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
-       if (unlikely(!new_drvdata->res_mem)) {
-               SSI_LOG_ERR("Failed getting IO memory resource\n");
-               rc = -ENODEV;
-               goto init_cc_res_err;
-       }
-       SSI_LOG_DEBUG("Got MEM resource (%s): start=%pad end=%pad\n",
-                     new_drvdata->res_mem->name,
-                     new_drvdata->res_mem->start,
-                     new_drvdata->res_mem->end);
+       req_mem_cc_regs = platform_get_resource(plat_dev, IORESOURCE_MEM, 0);
        /* Map registers space */
-       req_mem_cc_regs = request_mem_region(new_drvdata->res_mem->start, resource_size(new_drvdata->res_mem), "arm_cc7x_regs");
-       if (unlikely(!req_mem_cc_regs)) {
-               SSI_LOG_ERR("Couldn't allocate registers memory region at "
-                            "0x%08X\n", (unsigned int)new_drvdata->res_mem->start);
-               rc = -EBUSY;
-               goto init_cc_res_err;
-       }
-       cc_base = ioremap(new_drvdata->res_mem->start, resource_size(new_drvdata->res_mem));
-       if (unlikely(!cc_base)) {
-               SSI_LOG_ERR("ioremap[CC](0x%08X,0x%08X) failed\n",
-                           (unsigned int)new_drvdata->res_mem->start,
-                           (unsigned int)resource_size(new_drvdata->res_mem));
-               rc = -ENOMEM;
+       new_drvdata->cc_base = devm_ioremap_resource(&plat_dev->dev,
+                                                    req_mem_cc_regs);
+       if (IS_ERR(new_drvdata->cc_base)) {
+               rc = PTR_ERR(new_drvdata->cc_base);
                goto init_cc_res_err;
        }
-       SSI_LOG_DEBUG("CC registers mapped from %pa to 0x%p\n", &new_drvdata->res_mem->start, cc_base);
-       new_drvdata->cc_base = cc_base;
-
+       SSI_LOG_DEBUG("Got MEM resource (%s): start=%pad end=%pad\n",
+                     req_mem_cc_regs->name,
+                     req_mem_cc_regs->start,
+                     req_mem_cc_regs->end);
+       SSI_LOG_DEBUG("CC registers mapped from %pa to 0x%p\n",
+                     &req_mem_cc_regs->start, new_drvdata->cc_base);
+       cc_base = new_drvdata->cc_base;
        /* Then IRQ */
        new_drvdata->res_irq = platform_get_resource(plat_dev, IORESOURCE_IRQ, 0);
        if (unlikely(!new_drvdata->res_irq)) {
 #ifdef ENABLE_CC_SYSFS
                ssi_sysfs_fini();
 #endif
-
-               if (req_mem_cc_regs) {
-                       if (irq_registered) {
-                               free_irq(new_drvdata->res_irq->start, new_drvdata);
-                               new_drvdata->res_irq = NULL;
-                               iounmap(cc_base);
-                               new_drvdata->cc_base = NULL;
-                       }
-                       release_mem_region(new_drvdata->res_mem->start,
-                                          resource_size(new_drvdata->res_mem));
-                       new_drvdata->res_mem = NULL;
+               if (irq_registered) {
+                       free_irq(new_drvdata->res_irq->start, new_drvdata);
+                       new_drvdata->res_irq = NULL;
                }
                dev_set_drvdata(&plat_dev->dev, NULL);
        }
        cc_clk_off(drvdata);
        free_irq(drvdata->res_irq->start, drvdata);
        drvdata->res_irq = NULL;
-
-       if (drvdata->cc_base) {
-               iounmap(drvdata->cc_base);
-               release_mem_region(drvdata->res_mem->start,
-                                  resource_size(drvdata->res_mem));
-               drvdata->cc_base = NULL;
-               drvdata->res_mem = NULL;
-       }
        dev_set_drvdata(&plat_dev->dev, NULL);
 }