summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2013-05-30 19:28:19 +0200
committerFelix Fietkau <nbd@openwrt.org>2013-05-30 19:28:19 +0200
commitc90c4320a4b60fe299505d5186fb501002b0f625 (patch)
tree9392fa95859c59ebfa5d0f1a27f5e39f90d56d8b
parent5da2894852546646990c6fee47c9521143176c1a (diff)
detach the kernel driver before mode switch
-rw-r--r--switch.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/switch.c b/switch.c
index 7c5cff4..15933d4 100644
--- 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 */
}