greybus: control: return error pointer when failing to create control device
authorJohan Hovold <johan@hovoldconsulting.com>
Wed, 13 Apr 2016 17:19:05 +0000 (19:19 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Thu, 21 Apr 2016 01:09:03 +0000 (10:09 +0900)
Return an error pointer when failing to create a control device.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/control.c
drivers/staging/greybus/interface.c

index 58a3d608970132fb8fb844df3c327889c0c47ede..20aa366c3883ac34dd46b080fee12cd701aaa8ad 100644 (file)
@@ -257,23 +257,26 @@ struct device_type greybus_control_type = {
 
 struct gb_control *gb_control_create(struct gb_interface *intf)
 {
+       struct gb_connection *connection;
        struct gb_control *control;
 
        control = kzalloc(sizeof(*control), GFP_KERNEL);
        if (!control)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        control->intf = intf;
 
-       control->connection = gb_connection_create_control(intf);
-       if (IS_ERR(control->connection)) {
+       connection = gb_connection_create_control(intf);
+       if (IS_ERR(connection)) {
                dev_err(&intf->dev,
                                "failed to create control connection: %ld\n",
-                               PTR_ERR(control->connection));
+                               PTR_ERR(connection));
                kfree(control);
-               return NULL;
+               return ERR_CAST(connection);
        }
 
+       control->connection = connection;
+
        control->dev.parent = &intf->dev;
        control->dev.bus = &greybus_bus_type;
        control->dev.type = &greybus_control_type;
index ed56f2de7dbd19cf37cdacbcb6a095a9c02c7578..f6271127ffaa79dfdaa67011f62daad605e3eaa7 100644 (file)
@@ -381,6 +381,7 @@ struct device_type greybus_interface_type = {
 struct gb_interface *gb_interface_create(struct gb_host_device *hd,
                                         u8 interface_id)
 {
+       struct gb_control *control;
        struct gb_interface *intf;
 
        intf = kzalloc(sizeof(*intf), GFP_KERNEL);
@@ -403,11 +404,12 @@ struct gb_interface *gb_interface_create(struct gb_host_device *hd,
        device_initialize(&intf->dev);
        dev_set_name(&intf->dev, "%d-%d", hd->bus_id, interface_id);
 
-       intf->control = gb_control_create(intf);
-       if (!intf->control) {
+       control = gb_control_create(intf);
+       if (IS_ERR(control)) {
                put_device(&intf->dev);
                return NULL;
        }
+       intf->control = control;
 
        list_add(&intf->links, &hd->interfaces);