detach the kernel driver before mode switch
authorFelix Fietkau <nbd@openwrt.org>
Thu, 30 May 2013 17:28:19 +0000 (19:28 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Thu, 30 May 2013 17:28:19 +0000 (19:28 +0200)
switch.c

index 7c5cff4831ba637b909eb6bb56a9a2c2bb8f5756..15933d4eb2ccf45c55156c0835c1b78cb1a0ad95 100644 (file)
--- a/switch.c
+++ b/switch.c
@@ -7,9 +7,14 @@ enum {
        __DATA_MAX
 };
 
+static void detach_driver(struct usbdev_data *data)
+{
+       libusb_detach_kernel_driver(data->devh, data->interface);
+}
+
 static void handle_generic(struct usbdev_data *data, struct blob_attr **tb)
 {
-       fprintf(stderr, "Do generic switch!\n");
+       detach_driver(data);
 }
 
 static void handle_huawei(struct usbdev_data *data, struct blob_attr **tb)
@@ -34,11 +39,13 @@ static void handle_qisda(struct usbdev_data *data, struct blob_attr **tb)
 
 static void handle_gct(struct usbdev_data *data, struct blob_attr **tb)
 {
+       detach_driver(data);
        /* TODO */
 }
 
 static void handle_kobil(struct usbdev_data *data, struct blob_attr **tb)
 {
+       detach_driver(data);
        /* TODO */
 }
 
@@ -54,6 +61,7 @@ static void handle_mobile_action(struct usbdev_data *data, struct blob_attr **tb
 
 static void handle_cisco(struct usbdev_data *data, struct blob_attr **tb)
 {
+       detach_driver(data);
        /* TODO */
 }