gb_connection_disable(control->connection);
 }
 
+int gb_control_add(struct gb_control *control)
+{
+       int ret;
+
+       ret = device_add(&control->dev);
+       if (ret) {
+               dev_err(&control->dev,
+                               "failed to register control device: %d\n",
+                               ret);
+               return ret;
+       }
+
+       return 0;
+}
+
+void gb_control_del(struct gb_control *control)
+{
+       if (device_is_registered(&control->dev))
+               device_del(&control->dev);
+}
+
 void gb_control_put(struct gb_control *control)
 {
        put_device(&control->dev);
 
 struct gb_control *gb_control_create(struct gb_interface *intf);
 int gb_control_enable(struct gb_control *control);
 void gb_control_disable(struct gb_control *control);
+int gb_control_add(struct gb_control *control);
+void gb_control_del(struct gb_control *control);
 void gb_control_put(struct gb_control *control);
 
 int gb_control_get_bundle_versions(struct gb_control *control);
 
        list_for_each_entry_safe(bundle, next, &intf->bundles, links)
                gb_bundle_destroy(bundle);
 
+       gb_control_del(intf->control);
        gb_control_disable(intf->control);
 }
 
        dev_info(&intf->dev, "DDBL1 Manufacturer=0x%08x, Product=0x%08x\n",
                 intf->ddbl1_manufacturer_id, intf->ddbl1_product_id);
 
+       /* NOTE: ignoring errors for now */
+       gb_control_add(intf->control);
+
        list_for_each_entry_safe_reverse(bundle, tmp, &intf->bundles, links) {
                ret = gb_bundle_add(bundle);
                if (ret) {