Merge tag 'backlight-for-linus-4.4' of git://git.kernel.org/pub/scm/linux/kernel...
[firefly-linux-kernel-4.4.55.git] / drivers / staging / fsl-mc / bus / mc-allocator.c
index c3222c6c7e1fb05a8e2c621edd7c91549f3a6084..88d1857521a530c07e50c626b91a67f0dc86f315 100644 (file)
@@ -111,7 +111,7 @@ static int __must_check fsl_mc_resource_pool_remove_device(struct fsl_mc_device
                goto out;
 
        resource = mc_dev->resource;
-       if (WARN_ON(resource->data != mc_dev))
+       if (WARN_ON(!resource || resource->data != mc_dev))
                goto out;
 
        mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
@@ -373,30 +373,17 @@ EXPORT_SYMBOL_GPL(fsl_mc_portal_free);
 int fsl_mc_portal_reset(struct fsl_mc_io *mc_io)
 {
        int error;
-       u16 token;
        struct fsl_mc_device *dpmcp_dev = mc_io->dpmcp_dev;
 
        if (WARN_ON(!dpmcp_dev))
                return -EINVAL;
 
-       error = dpmcp_open(mc_io, 0, dpmcp_dev->obj_desc.id, &token);
-       if (error < 0) {
-               dev_err(&dpmcp_dev->dev, "dpmcp_open() failed: %d\n", error);
-               return error;
-       }
-
-       error = dpmcp_reset(mc_io, 0, token);
+       error = dpmcp_reset(mc_io, 0, dpmcp_dev->mc_handle);
        if (error < 0) {
                dev_err(&dpmcp_dev->dev, "dpmcp_reset() failed: %d\n", error);
                return error;
        }
 
-       error = dpmcp_close(mc_io, 0, token);
-       if (error < 0) {
-               dev_err(&dpmcp_dev->dev, "dpmcp_close() failed: %d\n", error);
-               return error;
-       }
-
        return 0;
 }
 EXPORT_SYMBOL_GPL(fsl_mc_portal_reset);
@@ -487,30 +474,27 @@ static int fsl_mc_allocator_probe(struct fsl_mc_device *mc_dev)
        enum fsl_mc_pool_type pool_type;
        struct fsl_mc_device *mc_bus_dev;
        struct fsl_mc_bus *mc_bus;
-       int error = -EINVAL;
+       int error;
 
        if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
-               goto error;
+               return -EINVAL;
 
        mc_bus_dev = to_fsl_mc_device(mc_dev->dev.parent);
        if (WARN_ON(mc_bus_dev->dev.bus != &fsl_mc_bus_type))
-               goto error;
+               return -EINVAL;
 
        mc_bus = to_fsl_mc_bus(mc_bus_dev);
        error = object_type_to_pool_type(mc_dev->obj_desc.type, &pool_type);
        if (error < 0)
-               goto error;
+               return error;
 
        error = fsl_mc_resource_pool_add_device(mc_bus, pool_type, mc_dev);
        if (error < 0)
-               goto error;
+               return error;
 
-       dev_info(&mc_dev->dev,
-                "Allocatable MC object device bound to fsl_mc_allocator driver");
+       dev_dbg(&mc_dev->dev,
+               "Allocatable MC object device bound to fsl_mc_allocator driver");
        return 0;
-error:
-
-       return error;
 }
 
 /**
@@ -519,20 +503,20 @@ error:
  */
 static int fsl_mc_allocator_remove(struct fsl_mc_device *mc_dev)
 {
-       int error = -EINVAL;
+       int error;
 
        if (WARN_ON(!FSL_MC_IS_ALLOCATABLE(mc_dev->obj_desc.type)))
-               goto out;
+               return -EINVAL;
 
-       error = fsl_mc_resource_pool_remove_device(mc_dev);
-       if (error < 0)
-               goto out;
+       if (mc_dev->resource) {
+               error = fsl_mc_resource_pool_remove_device(mc_dev);
+               if (error < 0)
+                       return error;
+       }
 
-       dev_info(&mc_dev->dev,
-                "Allocatable MC object device unbound from fsl_mc_allocator driver");
-       error = 0;
-out:
-       return error;
+       dev_dbg(&mc_dev->dev,
+               "Allocatable MC object device unbound from fsl_mc_allocator driver");
+       return 0;
 }
 
 static const struct fsl_mc_device_match_id match_id_table[] = {