Hello community,

here is the log from the commit of package usb_modeswitch for openSUSE:Factory 
checked in at 2015-08-05 06:49:02
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/usb_modeswitch (Old)
 and      /work/SRC/openSUSE:Factory/.usb_modeswitch.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "usb_modeswitch"

Changes:
--------
--- /work/SRC/openSUSE:Factory/usb_modeswitch/usb_modeswitch.changes    
2015-04-27 12:59:32.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.usb_modeswitch.new/usb_modeswitch.changes       
2015-08-05 06:49:03.000000000 +0200
@@ -1,0 +2,40 @@
+Fri Jul 24 09:34:00 UTC 2015 - [email protected]
+
+- Removed unused usb_modeswitch-data.rpmlintrc
+
+- Removed changelog from documentation
+
+- Cleaned up specfile
+
+- Update to version 2.2.5
+  * Fixed bug in configuration check, possibly leading to segfault (thanks,
+    Leonid Lisovskiy); 
+  * fixed Pantech commandline parameter evaluation (was not working at all);
+  * added driver unbind step via sysfs in wrapper, getting rid of the
+    USB subsystem complaint "interface 0 claimed by usb-storage while
+    'usb_modeswitch' <does this and that>"
+- Update to version 2.2.4
+  * Fixed buggy check of USB configuration selection (possibly leading
+    to segfault), tested with Alcatel X602D;
+  * removed call to 'libusb_strerror'
+    from libusb initialization - not available in earlier libusb1 versions
+- Update to version 2.2.3
+  * Fixed problem arising with systemd version 221 (220 untested), which
+    affects starting the usb_modeswitch systemd unit from the sh script
+    (reported by Archlinux users)
+- Update to version 2.2.2, 2015/06/27
+  * Added catch for libusb init error (thanks, Henrik Gustafsson);
+  * removed global function result variable; added catch for USB configuration
+    read error (both thanks to "otila"); 
+  * fixed wrapper script where port search for symlinking modem port was
+    broken ("/dev/gsmmodem");
+  * changed PantechMode parameter to represent different targets;
+  * added global config option to disable MBIM checking and setting 
+    alltogether (request from "kai");
+  * changed udev sh script so that systemd processing takes precedence over
+    upstart;
+  * changed systemd template unit parameter to avoid escaping problems
+
+- Update the data package to version 20150627
+
+-------------------------------------------------------------------

Old:
----
  usb-modeswitch-2.2.1.tar.bz2
  usb-modeswitch-data-20150115.tar.bz2
  usb_modeswitch-data.rpmlintrc

New:
----
  usb-modeswitch-2.2.5.tar.bz2
  usb-modeswitch-data-20150627.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ usb_modeswitch.spec ++++++
--- /var/tmp/diff_new_pack.ZoquVU/_old  2015-08-05 06:49:04.000000000 +0200
+++ /var/tmp/diff_new_pack.ZoquVU/_new  2015-08-05 06:49:04.000000000 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package usb_modeswitch
 #
-# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -15,30 +15,29 @@
 # Please submit bugfixes or comments via http://bugs.opensuse.org/
 #
 
+
+%define source_name    usb-modeswitch
+%define date           20150627
+%define _udevdir %(pkg-config --variable=udevdir udev)
 Name:           usb_modeswitch
-Version:        2.2.1
+Version:        2.2.5
 Release:        0
 Summary:        A mode switching tool for controlling multiple-device USB gear
 License:        GPL-2.0+
 Group:          Hardware/Mobile
 Url:            http://www.draisberghof.de/usb_modeswitch
-%define source_name    usb-modeswitch
-%define date           20150115
 Source0:        
http://www.draisberghof.de/usb_modeswitch/%{source_name}-%{version}.tar.bz2
 Source1:        
http://www.draisberghof.de/usb_modeswitch/%{source_name}-data-%{date}.tar.bz2
 Source2:        http://www.draisberghof.de/usb_modeswitch/device_reference.txt
-Source1000:     %{name}-data.rpmlintrc
 Patch1:         usb_modeswitch-fix_fsf_address.patch
-BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 BuildRequires:  fdupes
 BuildRequires:  pkg-config
 BuildRequires:  tcl
-BuildRequires:  pkgconfig(udev)
 BuildRequires:  pkgconfig(libusb-1.0)
+BuildRequires:  pkgconfig(udev)
 Requires:       tcl >= 8.4
-Requires:       usb_modeswitch-data = %version
-
-%define _udevdir %(pkg-config --variable=udevdir udev)
+Requires:       usb_modeswitch-data = %{version}
+BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
 %description
 USB_ModeSwitch is a mode switching tool for controlling "flip flop"
@@ -66,9 +65,9 @@
 CFLAGS="%{optflags}" make
 
 %install
-%makeinstall UDEVDIR=$RPM_BUILD_ROOT%{_udevdir}
+make DESTDIR=%{buildroot} install %{?_smp_mflags} 
UDEVDIR=%{buildroot}%{_udevdir}
 cd %{source_name}-data-%{date}
-%makeinstall RULESDIR=$RPM_BUILD_ROOT%{_udevdir}/rules.d
+make DESTDIR=%{buildroot} install %{?_smp_mflags} 
RULESDIR=%{buildroot}%{_udevdir}/rules.d
 
 ### TO REMOVE ONCE IN UPSTREAM DATA PACKAGE, FIX BNC 899013 ###
 
@@ -92,15 +91,15 @@
 
 ### END SECTION TO REMOVE ###
 
-%fdupes -s $RPM_BUILD_ROOT
+%fdupes -s %{buildroot}
 
 %files
 %defattr(-,root,root,-)
-%doc README COPYING ChangeLog device_reference.txt
+%doc README COPYING device_reference.txt
 %{_sbindir}/usb_modeswitch
 %{_sbindir}/usb_modeswitch_dispatcher
 %{_udevdir}/usb_modeswitch
-/var/lib/usb_modeswitch
+%{_localstatedir}/lib/usb_modeswitch
 %config %{_sysconfdir}/usb_modeswitch.conf
 %{_mandir}/man1/usb_modeswitch.1.gz
 %{_mandir}/man1/usb_modeswitch_dispatcher.1.gz

++++++ usb-modeswitch-2.2.1.tar.bz2 -> usb-modeswitch-2.2.5.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/ChangeLog 
new/usb-modeswitch-2.2.5/ChangeLog
--- old/usb-modeswitch-2.2.1/ChangeLog  2015-01-14 21:17:44.000000000 +0100
+++ new/usb-modeswitch-2.2.5/ChangeLog  2015-07-16 22:07:59.000000000 +0200
@@ -2,6 +2,30 @@
 History of USB_ModeSwitch
 =========================
 
+Version 2.2.5, 2015/07/16
+    Fixed bug in configuration check, possibly leading to segfault (thanks,
+    Leonid Lisovskiy); fixed Pantech commandline parameter evaluation (was
+    not working at all); added driver unbind step via sysfs in wrapper,
+    getting rid of the USB subsystem complaint "interface 0 claimed by
+    usb-storage while 'usb_modeswitch' <does this and that>"
+Version 2.2.4, 2015/07/14
+    Fixed buggy check of USB configuration selection (possibly leading
+    to segfault), tested with Alcatel X602D; removed call to 'libusb_strerror'
+    from libusb initialization - not available in earlier libusb1 versions
+Version 2.2.3, 2015/06/29
+    Fixed problem arising with systemd version 221 (220 untested), which
+    affects starting the usb_modeswitch systemd unit from the sh script
+    (reported by Archlinux users)
+Version 2.2.2, 2015/06/27
+    Added catch for libusb init error (thanks, Henrik Gustafsson); removed
+    global function result variable; added catch for USB configuration
+    read error (both thanks to "otila"); fixed wrapper script where port
+    search for symlinking modem port was broken ("/dev/gsmmodem"); changed
+    PantechMode parameter to represent different targets; added global
+    config option to disable MBIM checking and setting alltogether (request
+    from "kai"); changed udev sh script so that systemd processing takes
+    precedence over upstart; changed systemd template unit parameter to
+    avoid escaping problems
 Version 2.2.1, 2015/01/15
     Fixed unreliable switching function for Cisco AM10
 Version 2.2.0, 2014/05/29
@@ -43,7 +67,7 @@
     install the matching service file; you may want to adapt it better to
     your respective system, possibly adding dependencies/targets to the
     services. Note that the udev starter script usb_modeswitch.sh also
-    checks for the existence of the service files
+    checks for the existence of the service/unit files
 Version 1.2.7, 2013/08/07
     Two new dedicated control message functions to support Pantech LTE
     (thanks to Adam Goode) and Blackberry Q10/Z10 (thanks to Daniel Mende)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/Makefile 
new/usb-modeswitch-2.2.5/Makefile
--- old/usb-modeswitch-2.2.1/Makefile   2015-01-14 21:18:01.000000000 +0100
+++ new/usb-modeswitch-2.2.5/Makefile   2015-07-16 21:45:28.000000000 +0200
@@ -1,5 +1,5 @@
 PROG        = usb_modeswitch
-VERS        = 2.2.1
+VERS        = 2.2.5
 CC          ?= gcc
 CFLAGS      += -Wall
 LIBS        = `pkg-config --libs --cflags libusb-1.0`
@@ -85,7 +85,7 @@
        install -D --mode=755 usb_modeswitch_dispatcher 
$(SBINDIR)/usb_modeswitch_dispatcher
        install -d $(DESTDIR)/var/lib/usb_modeswitch
        test -d $(UPSDIR) -a -e /sbin/initctl && install --mode=644 
usb-modeswitch-upstart.conf $(UPSDIR) || test 1
-       test -d $(SYSDIR) -a -e /usr/bin/systemctl && install --mode=644 
[email protected] $(SYSDIR) || test 1
+       test -d $(SYSDIR) -a \( -e /usr/bin/systemctl -o -e /bin/systemctl \) 
&& install --mode=644 [email protected] $(SYSDIR) || test 1
 
 install: install-script
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/README 
new/usb-modeswitch-2.2.5/README
--- old/usb-modeswitch-2.2.1/README     2014-01-28 00:17:14.000000000 +0100
+++ new/usb-modeswitch-2.2.5/README     2015-06-27 22:00:55.000000000 +0200
@@ -7,18 +7,19 @@
 What it is
 ==========
 
-USB_ModeSwitch is (surprise!) a small mode switching tool for controlling
-"flip flop" (multiple mode) USB devices.
+USB_ModeSwitch is - hardly surprising -  a mode switching tool for controlling
+USB devices with multiple "modes". Now, what does THAT mean?
 
 More and more USB devices have their MS Windows drivers onboard; when plugged
 in for the first time they act like a flash storage and offer their driver
 installation from there.
 After installation (and on every consecutive plugging) the driver switches the
-mode internally, the storage device vanishes (in most cases), and a new device
-(like an USB modem) shows up.
+mode internally by sending a certain command sequence; the storage device
+vanishes (in most cases) and a different device - like a USB modem - shows up.
+To the host, this is like unplugging one device and then plugging annother.
 
 At first this feature appeared on devices with cell phone chipsets, presumably
-because some of them were able to change the mode of their USB port anyway
+because some of them were already able to change the mode of their USB port
 from storage to communication - so why not make use of this in a modem stick?
 Modem maker "Option" calls that feature "ZeroCD (TM)" since it eliminates the
 need for shipping a separate driver carrier.
@@ -26,27 +27,33 @@
 In the beginning, nothing of this was documented in any form and there was
 hardly any Linux/Unix support available.
 On the good side, most of the known devices are working out of the box in all
-modes with the available Linux modules like "usb-storage" or serial USB 
drivers.
+modes with available Linux modules like "usb-storage" or serial USB drivers.
 That leaves only the problem of the mode-switching from storage to whatever
 the thing is supposed to do.
 
-Fortunately there are things like human intelligence, USB sniffing programs and
-"libusb". It is possible to eavesdrop the communication of the MS Windows
-driver, to isolate the command or action that does the switching, and to replay
-the same sequence in the Unix system.
-
-USB_ModeSwitch makes this process easy to handle by taking the relevant para-
-meters from a configuration file and doing all the initialization and communi-
-cation stuff, with heavy help from "libusb".
+Fortunately there are things like human smartness, USB sniffing programs and
+LibUSB. The obvious way is to eavesdrop on the communication of the MS Windows
+driver, to isolate the command or action that does the switching, and then re-
+play the same sequence in a non-Windows system.
+
+In theory, this task could also be handled on the kernel driver level, but a
+userspace program is much more flexible and can easily be disabled if access
+to the initial mode of those devices should be desired. There has been a
+principle decision by kernel developers to keep mode-switching outside of the
+kernel.
+
+So USB_ModeSwitch has evolved to make this process easy to handle by taking the
+relevant parameters from configuration files and handling all initialization
+and communication business, with essential help from "libusb".
 
-In Linux and friends it is intended to be used automatically - via udev events
+In Linux and friends it is intended to work automatically - via udev events
 and rules - and doing the mode switch without any user interaction.
-However, the core program should be as portable als libusb itself; it does not
+However, the core C program should be as portable als libusb itself; it does 
not
 rely on specific Linux features.
-It can be run as an interactive command line tool, particularly useful when 
trying
-to manage hitherto unknown devices.
+It can also be run as an interactive command line tool, particularly useful 
when
+trying to tinker with hitherto unknown devices.
 
-We have already collected a wide range of information on how to switch all
+We have already collected a wide range of information on how to mode-switch all
 sorts of devices. If you run into a new one that is unknown yet, don't despair:
 we can find out what you need to do!
 
@@ -54,6 +61,10 @@
 How to install
 ==============
 
+If you only need the core C program, just run "make". All further steps de-
+scribed below are referring to a common, fairly current Linux system where
+USB_ModeSwitch is expected to do its work automatically.
+
 !! You need the usb-modeswitch-data package from the same source as this !!
 
 If you have an earlier version installed, de-installation is recommended ("make
@@ -62,8 +73,9 @@
 
 The main prerequisite for installing from source is the development package for
 "libusb". It may be called "libusb-dev" or similar in your distribution. From
-usb_modeswitch 2.0.0 it should have an "1.x" in the name to reflect the change
-to libusb-1.
+usb_modeswitch 2.0.0 on, it should have an "1.x" in the name to reflect the 
change
+to libusb-1. There are also variants around called "libusbx" if libusb-1 is not
+available on your distribution.
 
 To install the tool set, unpack and run the install command (see below) in the
 newly created directory.
@@ -143,7 +155,8 @@
 
 
 ##########
-Important: libusb programs - like this tool - want to be run as root!
+Important: libusb programs - like this tool - want to be run with 
administrative
+privileges (as root or with sudo)!
 ##########
 
 
@@ -151,8 +164,8 @@
 Known working hardware, Troubleshooting
 =======================================
 
-Please see the homepage. Read carefully.
-For support questions use ONLY the forum.
+Please go to the homepage (see link at the top). Read carefully.
+For support questions use ONLY public posts in the forum.
 
 
 
@@ -175,8 +188,8 @@
 Whodunit
 ========
 
-Copyright 2007 - 2014 Josua Dietze (mail to "usb_admin" at the domain
-"draisberghof.de" or write a personal message through the forum to "Josh")
+Copyright 2007 - 2015 Josua Dietze (for non-support notifications write a 
personal
+message through the forum to "Josh"; everything else only in a forum thread)
 
  !!! NO SUPPORT QUESTIONS VIA E-MAIL, use the forum !!!
 
@@ -198,6 +211,9 @@
 Hexstr2bin function borrowed from:
  Jouni Malinen (http://hostap.epitest.fi/wpa_supplicant, from "common.c")
 
+Indispensable help with device research and compilation:
+ Lars Melin
+
 Code, fixes and ideas contributed by:
  Aki Makkonen
  Denis Sutter
@@ -251,4 +267,4 @@
 
 
 
-Last revised: 2014-01-28, Josua Dietze
+Last revised: 2015-06-27, Josua Dietze
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/dispatcher.c 
new/usb-modeswitch-2.2.5/dispatcher.c
--- old/usb-modeswitch-2.2.1/dispatcher.c       2015-01-14 21:16:21.000000000 
+0100
+++ new/usb-modeswitch-2.2.5/dispatcher.c       2015-06-20 15:19:19.000000000 
+0200
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2011-2015 Josua Dietze, usb_modeswitch version 2.2.1
+ * Copyright (c) 2011-2015 Josua Dietze, usb_modeswitch version 2.2.2
  * Contains code under
  * Copyright (c) 2010 Wojciech A. Koszek <[email protected]>
  * All rights reserved.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch.1 
new/usb-modeswitch-2.2.5/usb_modeswitch.1
--- old/usb-modeswitch-2.2.1/usb_modeswitch.1   2014-05-29 21:44:16.000000000 
+0200
+++ new/usb-modeswitch-2.2.5/usb_modeswitch.1   2015-06-27 00:12:45.000000000 
+0200
@@ -113,8 +113,9 @@
 Send a special control message used by Qisda devices
 .IP "\fB-E\fP \fB\-\-quanta-mode\fP         " 10
 Send a special control message used by Quanta devices
-.IP "\fB-F\fP \fB\-\-pantech-mode\fP         " 10
-Send a special control message used by Pantech devices
+.IP "\fB-F\fP \fB\-\-pantech-mode NUM\fP         " 10
+Send a special control message used by Pantech devices.
+Value NUM will be used in control message as 'wValue'
 .IP "\fB-Z\fP \fB\-\-blackberry-mode\fP         " 10
 Send a special control message used by some newer Blackberry devices
 .IP "\fB-O\fP \fB\-\-sony-mode\fP         " 10
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch.c 
new/usb-modeswitch-2.2.5/usb_modeswitch.c
--- old/usb-modeswitch-2.2.1/usb_modeswitch.c   2015-01-14 21:13:59.000000000 
+0100
+++ new/usb-modeswitch-2.2.5/usb_modeswitch.c   2015-07-16 23:31:27.000000000 
+0200
@@ -1,6 +1,6 @@
 /*
   Mode switching tool for controlling mode of 'multi-state' USB devices
-  Version 2.2.1, 2015/01/15
+  Version 2.2.5, 2015/07/16
 
   Copyright (C) 2007 - 2015 Josua Dietze (mail to "digidietze" at the domain
   of the home page; or write a personal message through the forum to "Josh".
@@ -45,7 +45,7 @@
 
 /* Recommended tab size: 4 */
 
-#define VERSION "2.2.0"
+#define VERSION "2.2.5"
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -112,15 +112,14 @@
 char *TempPP=NULL;
 
 static struct libusb_context *ctx = NULL;
-static struct libusb_device *dev;
-static struct libusb_device_handle *devh;
+static struct libusb_device *dev = NULL;
+static struct libusb_device_handle *devh = NULL;
 static struct libusb_config_descriptor *active_config = NULL;
 
 int DefaultVendor=0, DefaultProduct=0, TargetVendor=0, TargetProduct=-1, 
TargetClass=0;
 int MessageEndpoint=0, ResponseEndpoint=0, ReleaseDelay=0;
 int targetDeviceCount=0, searchMode;
 int devnum=-1, busnum=-1;
-int ret;
 
 unsigned int ModeMap = 0;
 #define DETACHONLY_MODE                0x00000001
@@ -138,6 +137,7 @@
 #define PANTECH_MODE           0x00001000
 #define HUAWEINEW_MODE         0x00002000
 
+int PantechMode=0;
 char verbose=0, show_progress=1, ResetUSB=0, CheckSuccess=0, config_read=0;
 char NeedResponse=0, NoDriverLoading=0, InquireDevice=0, sysmode=0, mbim=0;
 char StandardEject=0;
@@ -187,7 +187,7 @@
        {"mobileaction-mode",   no_argument, 0, 'A'},
        {"cisco-mode",          no_argument, 0, 'L'},
        {"blackberry-mode",             no_argument, 0, 'Z'},
-       {"pantech-mode",                no_argument, 0, 'F'},
+       {"pantech-mode",                required_argument, 0, 'F'},
        {"std-eject",                   no_argument, 0, 'K'},
        {"need-response",               no_argument, 0, 'n'},
        {"reset-usb",                   no_argument, 0, 'R'},
@@ -228,7 +228,9 @@
        ParseParamBoolMap(configFilename, QisdaMode, ModeMap, QISDA_MODE);
        ParseParamBoolMap(configFilename, QuantaMode, ModeMap, QUANTA_MODE);
        ParseParamBoolMap(configFilename, BlackberryMode, ModeMap, 
BLACKBERRY_MODE);
-       ParseParamBoolMap(configFilename, PantechMode, ModeMap, PANTECH_MODE);
+       ParseParamInt(configFilename, PantechMode);
+       if (PantechMode)
+               ModeMap |= PANTECH_MODE;
        ParseParamBool(configFilename, StandardEject);
        ParseParamBool(configFilename, NoDriverLoading);
        ParseParamHex(configFilename, MessageEndpoint);
@@ -338,7 +340,7 @@
 
        while (1)
        {
-               c = getopt_long (argc, argv, 
"hejWQDndKHJSOBEGTNALZFRItv:p:V:P:C:m:M:2:3:w:r:c:i:u:a:s:f:b:g:",
+               c = getopt_long (argc, argv, 
"hejWQDndKHJSOBEGTNALZF:RItv:p:V:P:C:m:M:2:3:w:r:c:i:u:a:s:f:b:g:",
                                        long_options, &option_index);
 
                /* Detect the end of the options. */
@@ -374,7 +376,8 @@
                        case 'A': ModeMap = ModeMap + MOBILEACTION_MODE; break;
                        case 'L': ModeMap = ModeMap + CISCO_MODE; break;
                        case 'Z': ModeMap = ModeMap + BLACKBERRY_MODE; break;
-                       case 'F': ModeMap = ModeMap + PANTECH_MODE; break;
+                       case 'F': ModeMap = ModeMap + PANTECH_MODE;
+                                               PantechMode = strtol(optarg, 
NULL, 10); break;
                        case 'c': readConfigFile(optarg); break;
                        case 't': readConfigFile("stdin"); break;
                        case 'W': verbose = 1; show_progress = 1; count--; 
break;
@@ -422,9 +425,10 @@
 
 int main(int argc, char **argv)
 {
-       int numDefaults=0, sonySuccess=0;
+       int ret=0, numDefaults=0, sonySuccess=0;
        int currentConfig=0, defaultClass=0, interfaceClass=0;
        struct libusb_device_descriptor descriptor;
+       enum libusb_error libusbError;
 
        /* Make sure we have empty strings even if not set by config */
        TargetProductList[0] = '\0';
@@ -492,7 +496,10 @@
        }
 
        /* libusb initialization */
-       libusb_init(&ctx);
+       if ((libusbError = libusb_init(&ctx)) != LIBUSB_SUCCESS) {
+               fprintf(stderr, "Error: Failed to initialize libusb. %s 
(%d)\n\n", libusb_error_name(libusbError), libusbError);
+               exit(1);
+       }
 
        if (verbose)
                libusb_set_debug(ctx, 3);
@@ -521,10 +528,12 @@
                SHOW_PROGRESS(output," Found devices in default mode (%d)\n", 
numDefaults);
        } else {
                SHOW_PROGRESS(output," No devices in default mode found. 
Nothing to do. Bye!\n\n");
+               close_all();
                exit(0);
        }
        if (dev == NULL) {
                SHOW_PROGRESS(output," No bus/device match. Is device 
connected? Abort\n\n");
+               close_all();
                exit(0);
        } else {
                if (devnum == -1) {
@@ -535,12 +544,13 @@
                libusb_open(dev, &devh);
                if (devh == NULL) {
                        SHOW_PROGRESS(output,"Error opening the device. 
Abort\n\n");
-                       exit(1);
+                       abort();
                }
        }
-       libusb_get_active_config_descriptor(dev, &active_config);
+
 
        /* Get current configuration of default device if parameter is set */
+       libusb_get_active_config_descriptor(dev, &active_config);
        if (Configuration > -1) {
                currentConfig = active_config->bConfigurationValue;
                SHOW_PROGRESS(output,"Current configuration number is %d\n", 
currentConfig);
@@ -562,30 +572,28 @@
                        MessageEndpoint = 
find_first_bulk_endpoint(LIBUSB_ENDPOINT_OUT);
                if (!ResponseEndpoint)
                        ResponseEndpoint = 
find_first_bulk_endpoint(LIBUSB_ENDPOINT_IN);
-               libusb_free_config_descriptor(active_config);
                if (!MessageEndpoint) {
                        fprintf(stderr,"Error: message endpoint not given or 
found. Abort\n\n");
-                       exit(1);
+                       abort();
                }
                if (!ResponseEndpoint) {
                        fprintf(stderr,"Error: response endpoint not given or 
found. Abort\n\n");
-                       exit(1);
+                       abort();
                }
                SHOW_PROGRESS(output,"Use endpoints 0x%02x (out) and 0x%02x 
(in)\n", MessageEndpoint, ResponseEndpoint);
-       } else
-               libusb_free_config_descriptor(active_config);
+       }
 
        if (interfaceClass == -1) {
                fprintf(stderr, "Error: Could not get class of interface %d. 
Does it exist? Abort\n\n",Interface);
-               exit(1);
+               abort();
        }
 
        if (defaultClass == 0)
                defaultClass = interfaceClass;
        else
-               if (interfaceClass == 8 && defaultClass != 8) {
-                       /* Weird device with default class other than 0 and 
differing interface class */
-                       SHOW_PROGRESS(output,"Ambiguous Class/InterfaceClass: 
0x%02x/0x08\n", defaultClass);
+               if (interfaceClass == 8 && defaultClass != 8 && defaultClass != 
0xef && defaultClass != 0xff) {
+                       /* Unexpected default class combined with differing 
interface class */
+                       SHOW_PROGRESS(output,"Bogus Class/InterfaceClass: 
0x%02x/0x08\n", defaultClass);
                        defaultClass = 8;
                }
 
@@ -593,7 +601,7 @@
                if (defaultClass != 8) {
                        fprintf(stderr, "Error: can't use storage command in 
MessageContent with interface %d;\n"
                                "       interface class is %d, expected 8. 
Abort\n\n", Interface, defaultClass);
-                       exit(1);
+                       abort();
                }
 
        if (InquireDevice && show_progress) {
@@ -621,7 +629,7 @@
         */
        if ( ModeMap & (ModeMap-1) ) {
                fprintf(output,"Multiple special modes selected; check 
configuration. Abort\n\n");
-               exit(1);
+               abort();
        }
 
        if ((strlen(MessageContent) || StandardEject) && ModeMap ) {
@@ -693,7 +701,10 @@
        }
        if(ModeMap & PANTECH_MODE) {
                detachDriver();
-               switchPantechMode();
+               if (PantechMode > 1)
+                       switchPantechMode();
+               else
+                       SHOW_PROGRESS(output,"Waiting for auto-switch of 
Pantech modem ...\n");
        }
        if(ModeMap & SONY_MODE) {
                if (CheckSuccess)
@@ -710,8 +721,8 @@
                else
                        MessageContent3[0] = '\0';
 
-               
strcpy(MessageContent,"5553424312345678000000000000061e000000000000000000000000000000");
-               
strcpy(MessageContent2,"5553424312345679000000000000061b000000020000000000000000000000");
+               
strcpy(MessageContent,"5553424387654321000000000000061e000000000000000000000000000000");
+               
strcpy(MessageContent2,"5553424397654321000000000000061b000000020000000000000000000000");
                NeedResponse = 1;
                switchSendMessage();
        } else if (ModeMap & HUAWEINEW_MODE) {
@@ -748,20 +759,21 @@
        /* No "removal" check if these are set */
        if ((Configuration > 0 || AltSetting > -1) && !ResetUSB) {
                libusb_close(devh);
-               devh = 0;
+               devh = NULL;
        }
 
        if (ResetUSB) {
                resetUSB();
-               devh = 0;
+               devh = NULL;
+       }
+
+       if (searchMode == SEARCH_BUSDEV && sysmode) {
+               printf("ok:busdev\n");
+               close_all();
+               exit(0);
        }
 
        if (CheckSuccess) {
-               if (searchMode == SEARCH_BUSDEV && sysmode) {
-                       SHOW_PROGRESS(output,"Bus/dev search active, refer 
success check to wrapper. Bye!\n\n");
-                       printf("ok:busdev\n");
-                       goto CLOSING;
-               }
                if (checkSuccess()) {
                        if (sysmode) {
                                if (NoDriverLoading)
@@ -791,11 +803,7 @@
                else
                        SHOW_PROGRESS(output,"-> Run lsusb to note any changes. 
Bye!\n\n");
        }
-CLOSING:
-       if (sysmode)
-               closelog();
-       if (devh)
-               libusb_close(devh);
+       close_all();
        exit(0);
 }
 
@@ -803,6 +811,7 @@
 /* Get descriptor strings if available (identification details) */
 void deviceDescription ()
 {
+       int ret=0;
        char* c;
        memset (imanufact, ' ', DESCR_MAX);
        memset (iproduct, ' ', DESCR_MAX);
@@ -858,7 +867,7 @@
        };
        char *command;
        char data[36];
-       int i;
+       int i, ret=0;
 
        command = malloc(31);
        if (command == NULL) {
@@ -1072,14 +1081,14 @@
 skip:
        SHOW_PROGRESS(output," Device is gone, skip any further commands\n");
        libusb_close(devh);
-       devh = 0;
+       devh = NULL;
        return 2;
 }
 
 
 int switchConfiguration ()
 {
-       int count = SWITCH_CONFIG_MAXTRIES; 
+       int ret, count = SWITCH_CONFIG_MAXTRIES;
 
        SHOW_PROGRESS(output,"Change configuration to %i ...\n", Configuration);
        while (((ret = libusb_set_configuration(devh, Configuration)) < 0) && 
--count) {
@@ -1097,9 +1106,13 @@
 
 int switchAltSetting ()
 {
-
+       int ret;
        SHOW_PROGRESS(output,"Change to alt setting %i ...\n", AltSetting);
        ret = libusb_claim_interface(devh, Interface);
+       if (ret < 0) {
+               SHOW_PROGRESS(output," Could not claim interface (error %d). 
Skip AltSetting\n", ret);
+               return 0;
+       }
        ret = libusb_set_interface_alt_setting(devh, Interface, AltSetting);
        libusb_release_interface(devh, Interface);
        if (ret < 0) {
@@ -1112,19 +1125,20 @@
 
 void switchHuaweiMode ()
 {
-
+       int ret;
        SHOW_PROGRESS(output,"Send old Huawei control message ...\n");
        ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_STANDARD | 
LIBUSB_RECIPIENT_DEVICE, \
                LIBUSB_REQUEST_SET_FEATURE, 00000001, 0, (unsigned char 
*)buffer, 0, 1000);
        if (ret != 0) {
                fprintf(stderr, "Error: Huawei control message failed (error 
%d). Abort\n\n", ret);
-               exit(1);
+               exit(0);
        }
 }
 
 
 void switchSierraMode ()
 {
+       int ret;
        SHOW_PROGRESS(output,"Send Sierra control message\n");
        ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR, 0x0b, 
00000001, 0, (unsigned char *)buffer, 0, 1000);
        if (ret == LIBUSB_ERROR_PIPE) {
@@ -1133,13 +1147,14 @@
        }
        if (ret < 0) {
                fprintf(stderr, "Error: Sierra control message failed (error 
%d). Abort\n\n", ret);
-           exit(1);
+           exit(0);
        }
 }
 
 
 void switchGCTMode ()
 {
+       int ret;
        ret = libusb_claim_interface(devh, Interface);
        if (ret != 0) {
                SHOW_PROGRESS(output," Could not claim interface (error %d). 
Skip GCT sequence\n", ret);
@@ -1157,45 +1172,49 @@
        }
        libusb_release_interface(devh, Interface);
        if (ret < 0)
-               exit(1);
+               exit(0);
 }
 
 
 void switchKobilMode() {
+       int ret;
        SHOW_PROGRESS(output,"Send Kobil control message ...\n");
        ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | 
LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN,
                        0x88, 0, 0, (unsigned char *)buffer, 8, 1000);
        if (ret < 0) {
                fprintf(stderr, "Error: Kobil control message failed (error 
%d). Abort\n\n", ret);
-               exit(1);
+               exit(0);
        }
 }
 
 
 void switchQisdaMode () {
+       int ret;
        SHOW_PROGRESS(output,"Sending Qisda control message ...\n");
        memcpy(buffer, 
"\x05\x8c\x04\x08\xa0\xee\x20\x00\x5c\x01\x04\x08\x98\xcd\xea\xbf", 16);
        ret = libusb_control_transfer(devh, 0x40, 0x04, 0, 0, (unsigned char 
*)buffer, 16, 1000);
        if (ret < 0) {
                fprintf(stderr, "Error: Qisda control message failed (error 
%d). Abort\n\n", ret);
-               exit(1);
+               exit(0);
        }
 }
 
 
 void switchQuantaMode() {
+       int ret;
        SHOW_PROGRESS(output,"Send Quanta control message ...\n");
        ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | 
LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN,
                        0xff, 0, 0, (unsigned char *)buffer, 0, 1000);
        if (ret < 0) {
                SHOW_PROGRESS(output,"Error: Quanta control message failed 
(error %d). Abort\n\n", ret);
-               exit(1);
+               exit(0);
        }
 }
 
 
 void switchBlackberryMode ()
 {
+       int ret;
        SHOW_PROGRESS(output,"Send Blackberry control message 1 ...\n");
        ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | 
LIBUSB_RECIPIENT_DEVICE | LIBUSB_ENDPOINT_IN,
                        0xb1, 0x0000, 0, (unsigned char *)buffer, 8, 1000);
@@ -1207,18 +1226,19 @@
                        0xa9, 0x000e, 0, (unsigned char *)buffer, 2, 1000);
        if (ret != 2) {
                fprintf(stderr, "Error: Blackberry control message 2 failed 
(result %d). Abort\n\n", ret);
-               exit(1);
+               exit(0);
        }
 }
 
 
 void switchPantechMode()
 {
-       SHOW_PROGRESS(output,"Send Pantech control message ...\n");
-       ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | 
LIBUSB_RECIPIENT_DEVICE, 0x70, 2, 0, (unsigned char *)buffer, 0, 1000);
+       int ret;
+       SHOW_PROGRESS(output,"Send Pantech control message, wValue %d ...\n", 
PantechMode);
+       ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | 
LIBUSB_RECIPIENT_DEVICE, 0x70, PantechMode, 0, (unsigned char *)buffer, 0, 
1000);
        if (ret < 0) {
                SHOW_PROGRESS(output," Error: Pantech control message failed 
(error %d). Abort\n\n", ret);
-               exit(1);
+               exit(0);
        }
 }
 
@@ -1237,7 +1257,7 @@
 
 void switchActionMode ()
 {
-       int i;
+       int ret, i;
        SHOW_PROGRESS(output,"Send MobileAction control sequence ...\n");
        memcpy(buffer, "\xb0\x04\x00\x00\x02\x90\x26\x86", SIZE);
        libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_CLASS + 
LIBUSB_RECIPIENT_INTERFACE, 0x09, 0x0300, 0, (unsigned char *)buffer, SIZE, 
1000);
@@ -1290,16 +1310,17 @@
 
 void switchSequansMode() {
 
+       int ret;
        SHOW_PROGRESS(output,"Send Sequans control message\n");
        ret = libusb_control_transfer(devh, LIBUSB_REQUEST_TYPE_VENDOR | 
LIBUSB_RECIPIENT_DEVICE, SQN_SET_DEVICE_MODE_REQUEST, SQN_CUSTOM_DEVICE_MODE, 
0, (unsigned char *)buffer, 0, 1000);
        if (ret < 0) {
                fprintf(stderr, "Error: Sequans request failed (error %d). 
Abort\n\n", ret);
-           exit(1);
+           exit(0);
        }
 }
 
 void switchCiscoMode() {
-       int i;
+       int ret, i;
        char* msg[11];
 
        msg[0] = 
"55534243f83bcd810002000080000afd000000030000000100000000000000";
@@ -1318,7 +1339,7 @@
        ret = libusb_claim_interface(devh, Interface);
        if (ret < 0) {
                SHOW_PROGRESS(output," Could not claim interface (error %d). 
Abort\n", ret);
-               exit(1);
+               abort();
        }
 //     libusb_clear_halt(devh, MessageEndpoint);
        if (show_progress)
@@ -1357,13 +1378,13 @@
 skip:
        SHOW_PROGRESS(output,"Device returned error %d, skip further 
commands\n", ret);
        libusb_close(devh);
-       devh = 0;
+       devh = NULL;
 }
 
 
 int switchSonyMode ()
 {
-       int i, found;
+       int ret, i, found;
        detachDriver();
 
        if (CheckSuccess) {
@@ -1374,12 +1395,12 @@
        ret = libusb_control_transfer(devh, 0xc0, 0x11, 2, 0, (unsigned char 
*)buffer, 3, 100);
        if (ret < 0) {
                fprintf(stderr, "Error: Sony control message failed (error %d). 
Abort\n\n", ret);
-               exit(1);
+               exit(0);
        } else
                SHOW_PROGRESS(output," OK, control message sent, wait for 
device to return ...\n");
 
        libusb_close(devh);
-       devh = 0;
+       devh = NULL;
 
        /* Now waiting for the device to reappear */
        devnum=-1;
@@ -1429,6 +1450,7 @@
 int detachDriver()
 {
 
+       int ret;
        // Driver already detached during SCSI inquiry ?
        if (InquireDevice == 2)
                return 1;
@@ -1462,7 +1484,7 @@
 
 int sendMessage(char* message, int count)
 {
-       int message_length;
+       int ret, message_length;
 
        if (strlen(message) % 2 != 0) {
                fprintf(stderr, "Error: MessageContent %d hex string has uneven 
length. Skipping ...\n", count);
@@ -1485,7 +1507,7 @@
 
 int checkSuccess()
 {
-       int i=0;
+       int ret, i;
        int newTargetCount, success=0;
 
        SHOW_PROGRESS(output,"\nCheck for mode switch (max. %d times, once per 
second) ...\n", CheckSuccess);
@@ -1497,7 +1519,7 @@
         */
        if ((TargetVendor || TargetClass) && devh) {
                libusb_close(devh);
-               devh = 0;
+               devh = NULL;
        }
 
        /* if target ID is not given but target class is, assign default as 
target;
@@ -1523,7 +1545,7 @@
                        if (ret < 0) {
                                SHOW_PROGRESS(output," Original device can't be 
accessed anymore. Good.\n");
                                libusb_close(devh);
-                               devh = 0;
+                               devh = NULL;
                                break;
                        }
                        if (i == CheckSuccess-1) {
@@ -1546,7 +1568,7 @@
                                libusb_open(dev, &devh);
                                deviceDescription();
                                libusb_close(devh);
-                               devh = 0;
+                               devh = NULL;
                                if (verbose) {
                                        fprintf(output,"\nFound target device 
%03d on bus %03d\n", \
                                        libusb_get_device_address(dev), 
libusb_get_bus_number(dev));
@@ -1602,7 +1624,7 @@
 
 int write_bulk(int endpoint, char *message, int length)
 {
-       ret = usb_bulk_io(devh, endpoint, message, length, 3000);
+       int ret = usb_bulk_io(devh, endpoint, message, length, 3000);
        if (ret >= 0 ) {
                SHOW_PROGRESS(output," OK, message successfully sent\n");
        } else
@@ -1616,7 +1638,7 @@
 
 int read_bulk(int endpoint, char *buffer, int length)
 {
-       ret = usb_bulk_io(devh, endpoint, buffer, length, 3000);
+       int ret = usb_bulk_io(devh, endpoint, buffer, length, 3000);
        if (ret >= 0 ) {
                SHOW_PROGRESS(output," Response successfully read (%d 
bytes).\n", ret);
        } else
@@ -1630,12 +1652,9 @@
 
 void release_usb_device(int __attribute__((unused)) dummy) {
        SHOW_PROGRESS(output,"Program cancelled by system. Bye!\n\n");
-       if (devh) {
+       if (devh)
                libusb_release_interface(devh, Interface);
-               libusb_close(devh);
-       }
-       if (sysmode)
-               closelog();
+       close_all();
        exit(0);
 
 }
@@ -1805,17 +1824,17 @@
 
 int get_current_configuration()
 {
-       int cfg;
        SHOW_PROGRESS(output,"Get the current device configuration ...\n");
-       if (active_config == NULL)
-               libusb_get_active_config_descriptor(dev, &active_config);
-
-       cfg = active_config->bConfigurationValue;
-       libusb_free_config_descriptor(active_config);
-       if (ret < 0)
-               exit(1);
-       else
-               return cfg;
+       if (active_config != NULL) {
+               libusb_free_config_descriptor(active_config);
+               active_config = NULL;
+       }
+       int ret = libusb_get_active_config_descriptor(dev, &active_config);
+       if (ret < 0) {
+               SHOW_PROGRESS(output," Determining the active configuration 
failed (error %d). Abort\n", ret);
+               abort();
+       }
+       return active_config->bConfigurationValue;
 }
 
 int get_interface_class()
@@ -1859,7 +1878,7 @@
                        }
                        if (file==NULL) {
                                fprintf(stderr, "Error: Could not find file %s. 
Abort\n\n", FileName);
-                               exit(1);
+                               abort();
                        } else {
                                token = fgets(Str, LINE_DIM-1, file);
                        }
@@ -1981,11 +2000,32 @@
        return 0;
 }
 
+void close_all()
+{
+       if (active_config)
+               libusb_free_config_descriptor(active_config);
+       if (devh)
+               libusb_close(devh);
+       // libusb_exit will crash on Raspbian 7, crude protection
+#ifndef __ARMEL__
+       libusb_exit(NULL);
+#endif
+       if (sysmode)
+               closelog();
+}
+
+void abort()
+{
+       close_all();
+       exit(1);
+}
+
+
 void printVersion()
 {
        char* version = VERSION;
        fprintf(output,"\n * usb_modeswitch: handle USB devices with multiple 
modes\n"
-               " * Version %s (C) Josua Dietze 2014\n"
+               " * Version %s (C) Josua Dietze 2015\n"
                " * Based on libusb1/libusbx\n\n"
                " ! PLEASE REPORT NEW CONFIGURATIONS !\n\n", version);
 }
@@ -2021,6 +2061,7 @@
        " -L, --cisco-mode              apply a special procedure\n"
        " -B, --qisda-mode              apply a special procedure\n"
        " -E, --quanta-mode             apply a special procedure\n"
+       " -F, --pantech-mode NUM        apply a special procedure, pass NUM 
through\n"
        " -R, --reset-usb               reset the device after all other 
actions\n"
        " -Q, --quiet                   don't show progress or error messages\n"
        " -W, --verbose                 print all settings and debug output\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch.conf 
new/usb-modeswitch-2.2.5/usb_modeswitch.conf
--- old/usb-modeswitch-2.2.1/usb_modeswitch.conf        2015-01-14 
21:18:55.000000000 +0100
+++ new/usb-modeswitch-2.2.5/usb_modeswitch.conf        2015-07-16 
23:36:39.000000000 +0200
@@ -12,6 +12,10 @@
 
 DisableSwitching=0
 
+# Disable check for MBIM module presence and configuration globally (to aid
+# special embedded environments)
+
+DisableMBIMGlobal=0
 
 # Enable logging (results in a extensive report file in /var/log, named
 # "usb_modeswitch_<interface-name>" and probably others
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch.h 
new/usb-modeswitch-2.2.5/usb_modeswitch.h
--- old/usb-modeswitch-2.2.1/usb_modeswitch.h   2015-01-14 21:14:40.000000000 
+0100
+++ new/usb-modeswitch-2.2.5/usb_modeswitch.h   2015-07-16 21:45:54.000000000 
+0200
@@ -2,7 +2,7 @@
   This file is part of usb_modeswitch, a mode switching tool for controlling
   the mode of 'multi-state' USB devices
 
-  Version 2.2.1, 2015/05/15
+  Version 2.2.5, 2015/07/16
   Copyright (C) 2007 - 2015  Josua Dietze
 
   Config file parsing stuff borrowed from Guillaume Dargaud
@@ -60,6 +60,8 @@
 int hexstr2bin(const char *hex, char *buffer, int len);
 void printVersion();
 void printHelp();
+void close_all();
+void abort();
 int readArguments(int argc, char **argv);
 void deviceDescription();
 int deviceInquire();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch.sh 
new/usb-modeswitch-2.2.5/usb_modeswitch.sh
--- old/usb-modeswitch-2.2.1/usb_modeswitch.sh  2015-01-14 21:14:51.000000000 
+0100
+++ new/usb-modeswitch-2.2.5/usb_modeswitch.sh  2015-07-16 21:46:06.000000000 
+0200
@@ -1,5 +1,5 @@
 #!/bin/sh
-# part of usb_modeswitch 2.2.1
+# part of usb_modeswitch 2.2.5
 device_in()
 {
        if [ ! -e /var/lib/usb_modeswitch/$1 ]; then
@@ -73,20 +73,23 @@
                exit 0
                ;;
 esac
-exec 1<&- 2<&- 5<&- 7<&-
 (
+IFS='/' read -r p1 p2 <<EOF
+$1
+EOF
+PATH=/bin:/sbin:/usr/bin:/usr/sbin
 count=20
 while [ $count != 0 ]; do
        if [ ! -e "/usr/sbin/usb_modeswitch_dispatcher" ]; then
                sleep 1
                count=$(($count - 1))
        else
-               if [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then
-                       exec /sbin/initctl emit --no-wait 
usb-modeswitch-upstart UMS_PARAM=$1
-               elif [ -e "/etc/systemd/system/[email protected]" ]; then
-                       exec /usr/bin/systemctl --no-block start 
usb_modeswitch@$1.service
+               if [ -e "/etc/systemd/system/[email protected]" ]; then
+                       exec systemctl --no-block start 
usb_modeswitch@$p1'_'$p2.service
+               elif [ -e "/etc/init/usb-modeswitch-upstart.conf" ]; then
+                       exec initctl emit --no-wait usb-modeswitch-upstart 
UMS_PARAM=$1
                else
-                       exec /usr/sbin/usb_modeswitch_dispatcher --switch-mode 
$1 &
+                       exec usb_modeswitch_dispatcher --switch-mode $1 &
                fi
                exit 0
        fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch.tcl 
new/usb-modeswitch-2.2.5/usb_modeswitch.tcl
--- old/usb-modeswitch-2.2.1/usb_modeswitch.tcl 2015-01-14 21:15:10.000000000 
+0100
+++ new/usb-modeswitch-2.2.5/usb_modeswitch.tcl 2015-07-16 21:46:15.000000000 
+0200
@@ -9,7 +9,7 @@
 # the mode switching program with the matching parameter
 # file from /usr/share/usb_modeswitch
 #
-# Part of usb-modeswitch-2.2.1 package
+# Part of usb-modeswitch-2.2.5 package
 # (C) Josua Dietze 2009-2015
 
 set arg0 [lindex $argv 0]
@@ -24,9 +24,10 @@
 # Setting of these switches is done in the global config
 # file (/etc/usb_modeswitch.conf) if available
 
-set flags(logging) 0
+set flags(logging) 1
 set flags(noswitching) 0
 set flags(stordelay) 0
+set flags(logwrite) 0
 
 # Execution starts at file bottom
 
@@ -35,7 +36,6 @@
 global scsi usb config match device flags setup devdir loginit
 
 set flags(config) ""
-set flags(logwrite) 0
 Log "[ParseGlobalConfig]"
 
 # The facility to add a symbolic link pointing to the
@@ -46,7 +46,7 @@
 # to udev for symlink creation
 
 # This is run once for every port of LISTED devices by
-# an udev rule
+# a udev rule
 
 if {[lindex $argv 0] == "--symlink-name"} {
        puts -nonewline [SymLinkName [lindex $argv 1]]
@@ -54,20 +54,18 @@
 }
 
 if {[lindex $argv 0] == "--switch-systemd"} {
-       set device [string trim [lindex $argv 1] "/-"]
-       set device [regsub {/} $device "-"]
-       set argList [list "" $device]
+       set argList [split [lindex $argv 1] _]
        Log "\nStarted via systemd"
 } else {
        if {[lindex $argv 0] == "--switch-upstart"} {
                Log "\nStarted via upstart"
        }
        set argList [split [lindex $argv 1] /]
-       if [string length [lindex $argList 1]] {
-               set device [lindex $argList 1]
-       } else {
-               set device "noname"
-       }
+}
+if [string length [lindex $argList 1]] {
+       set device [lindex $argList 1]
+} else {
+       set device "noname"
 }
 if {$flags(stordelay) > 0} {
        SetStorageDelay $flags(stordelay)
@@ -260,18 +258,21 @@
                        set busParam ""
                        set devParam ""
                }
-               set configBuffer [ConfigGet conffile $mconfig]
-               ParseDeviceConfig $configBuffer
+               set flags(config) [ConfigGet conffile $mconfig]
+               ParseDeviceConfig $flags(config)
                if [regexp -nocase {/[0-9a-f]+:#} $flags(config)] {
                        Log "Note: Using generic manufacturer configuration for 
\"$flags(os)\""
                }
-               if {$config(waitBefore) != ""} {
-                       Log "Delay time of $config(waitBefore) seconds"
-                       append config(waitBefore) "000"
-                       after $config(waitBefore)
+               if $flags(nombim) {
+                       set config(NoMBIMCheck) 1
+               }
+               if {$config(WaitBefore) != ""} {
+                       Log "Delay time of $config(WaitBefore) seconds"
+                       append config(WaitBefore) "000"
+                       after $config(WaitBefore)
                        Log " wait is over, start mode switch"
                }
-               if {$config(noMBIMCheck)==0 && $usb(bNumConfigurations) > 1} {
+               if {$config(NoMBIMCheck)==0 && $usb(bNumConfigurations) > 1} {
                        Log "Device may have an MBIM configuration, check 
driver ..."
                        if [CheckMBIM] {
                                Log " driver for MBIM devices is available"
@@ -282,8 +283,8 @@
                                        set cfgno [string trim $cfgno]
                                        if {$cfgno > 0} {
                                                set config(Configuration) $cfgno
-                                               set config(driverModule) ""
-                                               set configBuffer 
"Configuration=$cfgno"
+                                               set config(DriverModule) ""
+                                               set flags(config) 
"Configuration=$cfgno"
                                        } else {
                                                Log " No MBIM configuration 
found, switch to legacy modem mode"
                                        }
@@ -292,11 +293,16 @@
                                Log " no MBIM driver found, switch to legacy 
modem mode"
                        }
                }
-
+               if [PantechAutoSwitch] {
+                       Log "Waiting for Pantech auto-modeswitch"
+                       set report "ok:busdev"
+                       break
+               }
+               UnbindDriver $devdir $ifdir
                # Now we are actually switching
                if $flags(logging) {
-                       Log "Command to be run:\nusb_modeswitch -W -D -s 20 
$configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f 
\$configBuffer"
-                       set report [exec /usr/sbin/usb_modeswitch -W -D -s 20 
$configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f 
"$configBuffer" 2>@1]
+                       Log "Command to be run:\nusb_modeswitch -W -D 
$configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f 
\$flags(config)"
+                       set report [exec /usr/sbin/usb_modeswitch -W -D 
$configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f 
"$flags(config)" 2>@1]
                        Log "\nVerbose debug output of usb_modeswitch and 
libusb follows"
                        Log "(Note that some USB errors are to be expected in 
the process)"
                        Log "--------------------------------"
@@ -304,7 +310,7 @@
                        Log "--------------------------------"
                        Log "(end of usb_modeswitch output)\n"
                } else {
-                       set report [exec /usr/sbin/usb_modeswitch -Q -D -s 20 
$configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f 
"$configBuffer" 2>@1]
+                       set report [exec /usr/sbin/usb_modeswitch -Q -D 
$configParam $busParam $devParam -v $usb(idVendor) -p $usb(idProduct) -f 
"$flags(config)" 2>@1]
                }
                break
        } else {
@@ -316,6 +322,10 @@
 # done by usb_modeswitch and logged via syslog OR bus/dev
 # parameter were used; then we do check for success HERE
 
+if {$config(Configuration) != ""} {
+       set ifdir [regsub {(\d):\d+\.0} $ifdir "\\1:$config(Configuration).0"]
+}
+
 if [regexp {ok:busdev} $report] {
        if [CheckSuccess $devdir] {
                Log "Mode switching was successful, found 
$usb(idVendor):$usb(idProduct) ($usb(manufacturer): $usb(product))"
@@ -342,11 +352,13 @@
        ReadUSBAttrs $devdir $ifdir
 }
 
-# Now checking for bound drivers (only for class 0xff)
+# Checking for bound drivers if there is an interface with class 0xff
 
-if {$config(driverModule) != "" && $usb($ifdir/bInterfaceClass) != "" && 
[regexp {ok:} $report]} {
-       if {$usb($ifdir/bInterfaceClass) != "ff"} {
-               set config(driverModule) ""
+if {$config(DriverModule) != "" && [regexp {ok:} $report]} {
+       if [HasFF] {
+               AddToList link_list $usb(idVendor):$usb(idProduct)
+       } else {
+               set config(DriverModule) ""
                Log " No vendor-specific class found, skip driver check"
        }
 }
@@ -354,7 +366,7 @@
 # If module is set (it is by default), driver shall be loaded.
 # If not, then NoDriverLoading is active
 
-if {$config(driverModule) != ""} {
+if {$config(DriverModule) != ""} {
        if {[string length "$usb(idVendor)$usb(idProduct)"] < 8} {
                if {![regexp {ok:(\w{4}):(\w{4})} $report d usb(idVendor) 
usb(idProduct)]} {
                        Log "No target vendor/product ID found or given, can't 
continue. Abort"
@@ -362,11 +374,10 @@
                }
        }
        # wait for any drivers to bind automatically
-       after 1000
+       after 1500
        Log "Now check for bound driver ..."
        if {![file exists $devdir/$ifdir/driver]} {
                Log " no driver has bound to interface 0 yet"
-               AddToList link_list $usb(idVendor):$usb(idProduct)
 
                # If device is known, the sh wrapper will take care, else:
                if {[InBindList $usb(idVendor):$usb(idProduct)] == 0} {
@@ -560,6 +571,13 @@
 while {![eof $rc]} {
        gets $rc line
        if [regexp {^#} [string trim $line]] {continue}
+       if [regexp {DisableMBIMGlobal\s*=\s*([^\s]+)} $line d val] {
+               if [regexp -nocase {1|yes|true} $val] {
+                       set flags(nombim) 1
+               } else {
+                       set flags(nombim) 0
+               }
+       }
        if [regexp {DisableSwitching\s*=\s*([^\s]+)} $line d val] {
                if [regexp -nocase {1|yes|true} $val] {
                        set flags(noswitching) 1
@@ -568,6 +586,8 @@
        if [regexp {EnableLogging\s*=\s*([^\s]+)} $line d val] {
                if [regexp -nocase {1|yes|true} $val] {
                        set flags(logging) 1
+               } else {
+                       set flags(logging) 0
                }
        }
        if [regexp {SetStorageDelay\s*=\s*([^\s]+)} $line d val] {
@@ -583,51 +603,28 @@
 # end of proc {ParseGlobalConfig}
 
 
-proc ParseDeviceConfig {configContent} {
+proc ParseDeviceConfig {cfg} {
 
 global config
-set config(driverModule) ""
-set config(driverIDPath) ""
-set config(waitBefore) ""
-set config(targetVendor) ""
-set config(targetProduct) ""
-set config(targetClass) ""
+set config(DriverModule) ""
+set config(DriverIDPath) ""
+set config(WaitBefore) ""
+set config(TargetVendor) ""
+set config(TargetProduct) ""
+set config(TargetClass) ""
 set config(Configuration) ""
-set config(noMBIMCheck) 0
-set config(checkSuccess) 20
+set config(NoMBIMCheck) 0
+set config(PantechMode) 0
+set config(CheckSuccess) 20
 set loadDriver 1
 
-if [regexp -line {^[^#]*?TargetVendor.*?=.*?0x(\w+).*?$} $configContent d 
config(targetVendor)] {
-       Log "config: TargetVendor set to $config(targetVendor)"
-}
-if [regexp -line {^[^#]*?TargetProduct.*?=.*?0x(\w+).*?$} $configContent d 
config(targetProduct)] {
-       Log "config: TargetProduct set to $config(targetProduct)"
-}
-if [regexp -line {^[^#]*?TargetProductList.*?=.*?"([0-9a-fA-F,]+).*?$} 
$configContent d config(targetProduct)] {
-       Log "config: TargetProductList set to $config(targetProduct)"
-}
-if [regexp -line {^[^#]*?TargetClass.*?=.*?0x(\w+).*?$} $configContent d 
config(targetClass)] {
-       Log "config: TargetClass set to $config(targetClass)"
-}
-if [regexp -line {^[^#]*?Configuration.*?=.*?([0-9]+).*?$} $configContent d 
config(Configuration)] {
-       Log "config: Configuration (target) set to $config(Configuration)"
-}
-if [regexp -line {^[^#]*?DriverModule.*?=.*?(\w+).*?$} $configContent d 
config(driverModule)] {
-       Log "config: DriverModule set to $config(driverModule)"
-}
-if [regexp -line {^[^#]*?DriverIDPath.*?=.*?"?([/\-\w]+).*?$} $configContent d 
config(driverIDPath)] {
-       Log "config: DriverIDPath set to $config(driverIDPath)"
-}
-if [regexp -line {^[^#]*?CheckSuccess.*?=.*?([0-9]+).*?$} $configContent d 
config(checkSuccess)] {
-       Log "config: CheckSuccess set to $config(checkSuccess)"
-}
-if [regexp -line {^[^#]*?WaitBefore.*?=.*?([0-9]+).*?$} $configContent d 
config(waitBefore)] {
-       Log "config: WaitBefore set to $config(waitBefore)"
-}
-if [regexp -line {^[^#]*?NoMBIMCheck.*?=.*?([0-9]+).*?$} $configContent d 
config(noMBIMCheck)] {
-       Log "config: noMBIMCheck set to $config(noMBIMCheck)"
+foreach pname [lsort [array names config]] {
+       if [regexp -line "^\[^# \]*?$pname.*?= 
*(0x(\\w+)|\"(\[0-9a-fA-F,\]+)\"|(\[0-9\]+)) *\$" $cfg d config($pname)] {
+#              Log "config: $pname set to $config($pname)"
+       }
 }
-if [regexp -line {^[^#]*?NoDriverLoading.*?=.*?(1|yes|true).*?$} 
$configContent] {
+
+if [regexp -line {^[^#]*?NoDriverLoading.*?=.*?(1|yes|true).*?$} $cfg] {
        set loadDriver 0
        Log "config: NoDriverLoading is set to active"
 }
@@ -635,19 +632,19 @@
 # For general driver loading; TODO: add respective device names.
 # Presently only useful for HSO devices (which are recounted now)
 if $loadDriver {
-       if {$config(driverModule) == ""} {
-               set config(driverModule) "option"
-               set config(driverIDPath) "/sys/bus/usb-serial/drivers/option1"
+       if {$config(DriverModule) == ""} {
+               set config(DriverModule) "option"
+               set config(DriverIDPath) "/sys/bus/usb-serial/drivers/option1"
        } else {
-               if {$config(driverIDPath) == ""} {
-                       set config(driverIDPath) 
"/sys/bus/usb/drivers/$config(driverModule)"
+               if {$config(DriverIDPath) == ""} {
+                       set config(DriverIDPath) 
"/sys/bus/usb/drivers/$config(DriverModule)"
                }
        }
-       Log "Driver module is \"$config(driverModule)\", ID path is 
$config(driverIDPath)\n"
+       Log "Driver module is \"$config(DriverModule)\", ID path is 
$config(DriverIDPath)\n"
 } else {
        Log "Driver will not be handled by usb_modeswitch"
 }
-set config(waitBefore) [string trimleft $config(waitBefore) 0]
+set config(WaitBefore) [string trimleft $config(WaitBefore) 0]
 
 }
 # end of proc {ParseDeviceConfig}
@@ -736,7 +733,7 @@
 
 
 proc {SymLinkName} {path} {
-global device
+global device flags
 
 proc {hasInterrupt} {ifDir} {
        if {[llength [glob -nocomplain $ifDir/ttyUSB*]] == 0} {
@@ -774,16 +771,17 @@
                }
        }
 }
-
-if {![regexp {ttyUSB[0-9]+} $path myPort]} {
+if {![regexp {([0-9]+-[0-9]+[\.0-9]*:[^/]*).*(ttyUSB[0-9]+)} $path d myDev 
myPort]} {
        if $flags(logging) {
                set device [clock clicks]
+               set flags(logwrite) 1
                Log "$loginit\nThis is not a ttyUSB port. Abort"
        }
        return ""
 }
 
-set device $myPort
+set device ttyUSB_$myDev
+set flags(logwrite) 1
 Log "$loginit\nMy name is $myPort\n"
 
 if {![regexp {(.*?[0-9]+)\.([0-9]+)/ttyUSB} /sys$path d ifRoot ifNum]} {
@@ -858,15 +856,15 @@
 }
 Log "Module loader is $loader"
 
-set idfile $config(driverIDPath)/new_id
+set idfile $config(DriverIDPath)/new_id
 if {![file exists $idfile]} {
        if {$loader == ""} {
                Log "Can't do anymore without module loader; get \"modtools\"!"
                return
        }
-       Log "\nTry to load module \"$config(driverModule)\""
-       if [catch {set result [exec $loader -v $config(driverModule)]} err] {
-               Log " Running \"$loader $config(driverModule)\" gave an 
error:\n  $err"
+       Log "\nTry to load module \"$config(DriverModule)\""
+       if [catch {set result [exec $loader -v $config(DriverModule)]} err] {
+               Log " Running \"$loader $config(DriverModule)\" gave an 
error:\n  $err"
        } else {
                Log " Module was loaded successfully:\n$result"
        }
@@ -882,8 +880,8 @@
        incr i
 }
 if {$i < 50} {
-       Log "Try to add ID to driver \"$config(driverModule)\""
-       SysLog "usb_modeswitch: add device ID $vid:$pid to driver 
\"$config(driverModule)\""
+       Log "Try to add ID to driver \"$config(DriverModule)\""
+       SysLog "usb_modeswitch: add device ID $vid:$pid to driver 
\"$config(DriverModule)\""
        SysLog "usb_modeswitch: please report the device ID to the Linux USB 
developers!"
        if [catch {exec echo "$vid $pid ff" >$idfile} err] {
                Log " Error adding ID to driver:\n  $err"
@@ -893,7 +891,7 @@
 } else {
        Log " \"$idfile\" not found, check if kernel version is at least 2.6.27"
        Log "Fall back to \"usbserial\""
-       set config(driverModule) usbserial
+       set config(DriverModule) usbserial
        Log "\nTry to unload driver \"usbserial\""
        if [catch {exec $loader -r usbserial} err] {
                Log " Running \"$loader -r usbserial\" gave an error:\n  $err"
@@ -936,15 +934,6 @@
 proc {AddToList} {name id} {
 
 set listfile /var/lib/usb_modeswitch/$name
-set oldlistfile /etc/usb_modeswitch.d/bind_list
-
-if {($name == "bind_list") && [file exists $oldlistfile] && ![file exists 
$listfile]} {
-       if [catch {file rename $oldlistfile $listfile} err] {
-               Log "Error renaming the old bind list file ($err)"
-               return
-       }
-}
-
 if [file exists $listfile] {
        set rc [open $listfile r]
        set buffer [read $rc]
@@ -1000,14 +989,14 @@
 global config usb flags
 set ifdir [file tail [IfDir 0]]
 
-if {[string length $config(targetClass)] || [string length 
$config(Configuration)]} {
-       set config(targetVendor) $usb(idVendor)
-       set config(targetProduct) $usb(idProduct)
+if {[string length $config(TargetClass)] || [string length 
$config(Configuration)]} {
+       set config(TargetVendor) $usb(idVendor)
+       set config(TargetProduct) $usb(idProduct)
 }
-Log "Check success of mode switch for max. $config(checkSuccess) seconds ..."
+Log "Check success of mode switch for max. $config(CheckSuccess) seconds ..."
 
 set expected 1
-for {set i 1} {$i <= $config(checkSuccess)} {incr i} {
+for {set i 1} {$i <= $config(CheckSuccess)} {incr i} {
        after 1000
        if {![file isdirectory $devdir]} {
                Log " Wait for device file system ($i sec.) ..."
@@ -1025,23 +1014,24 @@
        if [string length $config(Configuration)] {
                if {$usb(bConfigurationValue) != $config(Configuration)} 
{continue}
        }
-       if [string length $config(targetClass)] {
-               if {![regexp $usb($ifdir/bInterfaceClass) 
$config(targetClass)]} {
+       if [string length $config(TargetClass)] {
+               if {![regexp $usb($ifdir/bInterfaceClass) 
$config(TargetClass)]} {
                        if {$config(class) != $usb($ifdir/bInterfaceClass} {
                                set expected 0
                        } else {continue}
                }
        }
-       if {![regexp $usb(idVendor) $config(targetVendor)]} {
+       if {![regexp $usb(idVendor) $config(TargetVendor)]} {
                if {![regexp $usb(idVendor) $config(vendor)]} {
                        set expected 0
                } else {continue}
        }
-       if {![regexp $usb(idProduct) $config(targetProduct)]} {
+       if {![regexp $usb(idProduct) $config(TargetProduct)]} {
                if {![regexp $usb(idProduct) $config(product)]} {
                        set expected 0
                } else {continue}
        }
+       # Arriving here means that device attributes have changed
        if $expected {
                Log " All attributes matched"
        } else {
@@ -1054,10 +1044,7 @@
        }
        break
 }
-if {$i > 20} {
-       return 0
-}
-return 1
+if {$i > 20} {return 0} else {return 1}
 
 }
 # end of proc {CheckSuccess}
@@ -1144,12 +1131,51 @@
 proc {CheckMBIM} {} {
 
 set kversion [exec uname -r]
-if [file exists /lib/modules/$kversion/kernel/drivers/net/usb/cdc_mbim.ko] 
{return 1}
+if [llength [glob -nocomplain 
/lib/modules/$kversion/kernel/drivers/net/usb/cdc_mbim*]] {return 1}
+if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1}
+return 0
+
+}
+
+proc {CheckQMI} {} {
+
+set kversion [exec uname -r]
+if [llength [glob -nocomplain 
/lib/modules/$kversion/kernel/drivers/net/usb/qmi_wwan*]] {return 1}
 if [file exists /sys/bus/usb/drivers/cdc_mbim] {return 1}
 return 0
 
 }
 
+proc {PantechAutoSwitch} {} {
+
+global config flags
+if {$config(PantechMode) == 3} {return 1}
+if {$config(PantechMode) == 1} {
+       if {"$config(vendor):$config(product)" == "10a9:6080"} {
+               set flags(config) [regsub {PantechMode *= *1} $flags(config) 
"PantechMode=2"]
+               Log " PantechMode changed to 2"
+               return 0
+       } elseif [CheckQMI] {
+               set flags(config) [regsub {PantechMode *= *1} $flags(config) 
"PantechMode=4"]
+               Log " PantechMode changed to 4"
+               return 0
+       } else {
+               return 1
+       }
+} else {return 0}
+
+}
+
+proc UnbindDriver {devdir ifdir} {
+
+set att $devdir/$ifdir/driver/unbind
+if [file exists $att] {
+       Log "Unbinding driver"
+       exec echo -n "$ifdir" > $att
+}
+
+}
+
 proc {LogAttributes} {} {
 
 global flags usb
@@ -1162,5 +1188,18 @@
 
 }
 
+proc {HasFF} {} {
+
+set i 0
+while {[set dir [IfDir $i]] != ""} {
+       set c [exec cat $dir/bInterfaceClass]
+       if {$c == "ff"} {return 1}
+       incr i
+}
+return 0
+
+}
+
+
 # The actual entry point
 Main $argv $argc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/[email protected] 
new/usb-modeswitch-2.2.5/[email protected]
--- old/usb-modeswitch-2.2.1/[email protected]    2013-08-26 
22:34:05.000000000 +0200
+++ new/usb-modeswitch-2.2.5/[email protected]    2015-06-24 
21:57:39.000000000 +0200
@@ -1,6 +1,8 @@
 [Unit]
-Description=USB_ModeSwitch
+Description=USB_ModeSwitch_%i
 
 [Service]
 Type=oneshot
-ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-systemd %I
+ExecStart=/usr/sbin/usb_modeswitch_dispatcher --switch-systemd %i
+#ExecStart=/bin/echo %i
+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-2.2.1/usb_modeswitch_dispatcher.1 
new/usb-modeswitch-2.2.5/usb_modeswitch_dispatcher.1
--- old/usb-modeswitch-2.2.1/usb_modeswitch_dispatcher.1        2013-09-01 
14:39:03.000000000 +0200
+++ new/usb-modeswitch-2.2.5/usb_modeswitch_dispatcher.1        2015-06-20 
15:25:41.000000000 +0200
@@ -1,18 +1,19 @@
 .TH "USB_MODESWITCH_DISPATCHER" "1"
 .SH "NAME"
-usb_modeswitch_dispatcher - wrapper for usb_modeswitch, not intended for 
direct invocation.
+usb_modeswitch_dispatcher - Linux wrapper for usb_modeswitch (not intended for 
direct invocation)
 .SH "SYNOPSIS"
 .PP
 \fBusb_modeswitch_dispatcher\fR
 .SH "DESCRIPTION"
 .PP
 usb_modeswitch_dispatcher will do detailed device checking and will 
subsequently
-use the usb_modeswitch binary together with the selected device config file to
-switch the mode of certain USB devices.
+use the Linux-independent usb_modeswitch binary together with the selected 
device
+config file to switch the mode of certain USB devices.
 .PP
 If no drivers are taking care of the device after the mode switch, the 
dispatcher
-will try to load and bind the "option" serial driver, in order to make the 
device
-useable.
+will try to load and bind the "option" serial driver to any USB interfaces with
+class 0xff, in order to make the device useable in case it is not recognized 
by that
+driver yet. This may or may not work.
 .PP
 This program is called by udev and is not supposed to be called directly
 by the user.

++++++ usb-modeswitch-data-20150115.tar.bz2 -> 
usb-modeswitch-data-20150627.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-data-20150115/40-usb_modeswitch.rules 
new/usb-modeswitch-data-20150627/40-usb_modeswitch.rules
--- old/usb-modeswitch-data-20150115/40-usb_modeswitch.rules    2015-01-15 
21:12:36.000000000 +0100
+++ new/usb-modeswitch-data-20150627/40-usb_modeswitch.rules    2015-06-27 
23:46:43.000000000 +0200
@@ -1,6 +1,6 @@
-# Part of usb-modeswitch-data, version 20150115
+# Part of usb-modeswitch-data, version 20150627
 #
-# Works with usb_modeswitch versions >= 2.2.0 (introduction of HuaweiNewMode)
+# Works with usb_modeswitch versions >= 2.2.2 (extension of PantechMode)
 #
 ACTION!="add|change", GOTO="modeswitch_rules_end"
 
@@ -20,8 +20,8 @@
 ACTION!="add", GOTO="modeswitch_rules_end"
 
 
-# Generic entry for all Huawei devices
-ATTRS{idVendor}=="12d1", ATTR{bInterfaceNumber}=="00", 
ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch '%b/%k'"
+# Generic entry for all Huawei devices, excluding Android phones
+ATTRS{idVendor}=="12d1", ATTRS{manufacturer}!="Android*", 
ATTR{bInterfaceNumber}=="00", ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch 
'%b/%k'"
 
 # HP LaserJet Professional P1102
 ATTR{idVendor}=="03f0", ATTR{idProduct}=="002a", RUN+="usb_modeswitch '%b/%k'"
@@ -116,13 +116,13 @@
 # Axesstel Modems (w/ initial idProduct 0x0010)
 ATTR{idVendor}=="05c6", ATTR{idProduct}=="0010", RUN+="usb_modeswitch '%b/%k'"
 
-# Prolink P2000 CDMA, Samsung SGH-Z810, Older Option devices, Vertex Wireless 
100 Series, AnyDATA devices, Bless UC165, Option GlobeTrotter GX0201, Celot 
K-300, Celot CT-680, StrongRising device, TechFaith Venus VT-18
+# Prolink P2000 CDMA, Samsung SGH-Z810, Older Option devices, Vertex Wireless 
100 Series, AnyDATA devices, Bless UC165, Celot K-300, Celot CT-680, 
StrongRising device, TechFaith Venus VT-18
 ATTR{idVendor}=="05c6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '%b/%k'"
 
 # Various USB modems
 ATTR{idVendor}=="05c6", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '%b/%k'"
 
-# D-Link DWM-162-U5, Micromax MMX 300c
+# D-Link DWM-162-U5, DWM-162 C1, Micromax MMX 300c
 ATTR{idVendor}=="05c6", ATTR{idProduct}=="2001", RUN+="usb_modeswitch '%b/%k'"
 
 # AnyDATA APE-540H
@@ -152,6 +152,9 @@
 # Dymo LabelManager
 ATTR{idVendor}=="0922", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '%b/%k'"
 
+# Dymo LabelManager 420P
+ATTR{idVendor}=="0922", ATTR{idProduct}=="1003", RUN+="usb_modeswitch '%b/%k'"
+
 # Toshiba G450
 ATTR{idVendor}=="0930", ATTR{idProduct}=="0d46", RUN+="usb_modeswitch '%b/%k'"
 
@@ -368,7 +371,7 @@
 # Mobile Action ("Smart Cable")
 ATTR{idVendor}=="0df7", ATTR{idProduct}=="0800", RUN+="usb_modeswitch '%b/%k'"
 
-# MediaTek MT6276M and others
+# MediaTek/Medion S4222 and probably others, MediaTek MT6276M and others
 ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0002", RUN+="usb_modeswitch '%b/%k'"
 
 # MediaTek Wimax USB Card
@@ -452,6 +455,9 @@
 # Hisense E910 EVDO Phone
 ATTR{idVendor}=="109b", ATTR{idProduct}=="f009", RUN+="usb_modeswitch '%b/%k'"
 
+# Pantech/Verizon UML295, Use 1 for automatic choice, 2 for RNDIS, 4 for QMI
+ATTR{idVendor}=="10a9", ATTR{idProduct}=="606f", RUN+="usb_modeswitch '%b/%k'"
+
 # Pantech LTE Modem
 ATTR{idVendor}=="10a9", ATTR{idProduct}=="6080", RUN+="usb_modeswitch '%b/%k'"
 
@@ -527,6 +533,9 @@
 # Axesstel MU130
 ATTR{idVendor}=="1726", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '%b/%k'"
 
+# Spreadtrum SC7702
+ATTR{idVendor}=="1782", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '%b/%k'"
+
 # JOA Telecom LM-700r
 ATTR{idVendor}=="198a", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '%b/%k'"
 
@@ -590,6 +599,9 @@
 # ZTE MF821D
 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0325", RUN+="usb_modeswitch '%b/%k'"
 
+# ZTE MF90 Mobile Hotspot
+ATTR{idVendor}=="19d2", ATTR{idProduct}=="0388", RUN+="usb_modeswitch '%b/%k'"
+
 # Telewell TW-LTE 4G
 ATTR{idVendor}=="19d2", ATTR{idProduct}=="0413", RUN+="usb_modeswitch '%b/%k'"
 
@@ -866,7 +878,10 @@
 # D-Link DWM-221
 ATTR{idVendor}=="2001", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '%b/%k'"
 
-# D-Link DWM-156 A8
+# D-Link DWM-221 B1
+ATTR{idVendor}=="2001", ATTR{idProduct}=="a401", RUN+="usb_modeswitch '%b/%k'"
+
+# D-Link DWM-156 A8, DWP-157 B1
 ATTR{idVendor}=="2001", ATTR{idProduct}=="a403", RUN+="usb_modeswitch '%b/%k'"
 
 # D-Link DWM-167 A1
@@ -893,7 +908,7 @@
 # Haier CE 100
 ATTR{idVendor}=="201e", ATTR{idProduct}=="2009", RUN+="usb_modeswitch '%b/%k'"
 
-# Mediatek MT6229, Micromax MMX 377G
+# Mediatek MT6229, Micromax MMX 377G, Olicard 300
 ATTR{idVendor}=="2020", ATTR{idProduct}=="0002", RUN+="usb_modeswitch '%b/%k'"
 
 # SpeedUp SU-8000
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-data-20150115/ChangeLog 
new/usb-modeswitch-data-20150627/ChangeLog
--- old/usb-modeswitch-data-20150115/ChangeLog  2015-01-15 21:07:02.000000000 
+0100
+++ new/usb-modeswitch-data-20150627/ChangeLog  2015-06-27 22:56:38.000000000 
+0200
@@ -1,3 +1,13 @@
+20150627:
+    ATTENTION: recommended use with usb-modeswitch program package version
+    >= 2.2.2 due to extended parameter PantechMode (affects 2 devices, see
+    also REFERENCE);
+    Added devices: Dymo LabelManager 420P, MediaTek/Medion S4222 and probably
+    others, Pantech/Verizon UML295, Vodafone (Huawei) R205, Vodafone (Huawei)
+    R215, Huawei E3372, Huawei E3372s-153, Huawei E5377, Huawei/Vodafone R226,
+    Spreadtrum SC7702, D-Link DWM-221 B1, ZTE MF90 Mobile Hotspot; some new
+    target IDs added to existing device configs; modified the catch-all Huawei
+    udev rule to exclude Android smartphones
 20150115:
     Added devices: Aiko 81D, Alcatel-Lucent ABS-T920, Alcatel X602D,
     Amoi H-01, Amoi H-02, D-Link DWM-157 B1, D-Link DWM-221, D-Link
@@ -122,7 +132,7 @@
     Added devices: Huawei EC156, Huawei K3770, Huawei K3771, Option iCon 461,
     Longcheer SU9800, ZTE AX226 (WiMax)
 20110619:
-       Added devices: Huawei E352, Huawei U8220, Huawei E173, D-Link DWM-156
+    Added devices: Huawei E352, Huawei U8220, Huawei E173, D-Link DWM-156
     (Variant), Cricket A605, ZTE K3806-Z, ZTE MF190 (two Variants), ZTE MF192,
     ZTE MF691, Visiontek 82GH 3G, C-motech CHU-629S (Variant), JOA Telecom
     LM-700r, HP LaserJet Professional P1102, Mobile Action Cable (migrated from
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-data-20150115/Makefile 
new/usb-modeswitch-data-20150627/Makefile
--- old/usb-modeswitch-data-20150115/Makefile   2015-01-15 21:07:22.000000000 
+0100
+++ new/usb-modeswitch-data-20150627/Makefile   2015-06-27 23:48:35.000000000 
+0200
@@ -1,5 +1,5 @@
 PROG        = usb-modeswitch-data
-VERS        = 20150115
+VERS        = 20150627
 RM          = /bin/rm -f
 PREFIX      = $(DESTDIR)/usr
 ETCDIR      = $(DESTDIR)/etc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-data-20150115/README 
new/usb-modeswitch-data-20150627/README
--- old/usb-modeswitch-data-20150115/README     2015-01-14 21:21:53.000000000 
+0100
+++ new/usb-modeswitch-data-20150627/README     2015-06-27 22:58:13.000000000 
+0200
@@ -100,6 +100,7 @@
                                on-the-fly, this is the file node to use.
                                Example: 
"/sys/bus/usb-serial/drivers/option1/new_id"
 
+See also complete parameter explanation in REFERENCE.
 
 
 Notes about specific devices:
@@ -143,4 +144,4 @@
 
 
 
-Last revised: 2015-01-15, Josua Dietze
+Last revised: 2015-06-27, Josua Dietze
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-data-20150115/REFERENCE 
new/usb-modeswitch-data-20150627/REFERENCE
--- old/usb-modeswitch-data-20150115/REFERENCE  2014-05-29 21:53:00.000000000 
+0200
+++ new/usb-modeswitch-data-20150627/REFERENCE  2015-06-27 23:56:10.000000000 
+0200
@@ -1,17 +1,17 @@
 Configuration File Reference for USB_ModeSwitch
 -----------------------------------------------
 
-Last modified: 2014-05-29
+Last modified: 2015-06-27
 
 
 
 General Rules:
 
 Numbers can be decimal or hexadecimal, Bulk message strings must be
-hexadecimal without prepended "0x". Digits 9-16 (command tag) in
-mass storage messages (starting with "55534243") are random; I set
-them to "12345678". Mind that you should make them unique if more
-than one MessageContent is used.
+hexadecimal without prepended "0x". Digits 9-16 (message tag) in
+mass storage messages (which start with "55534243") are random; I set
+them to "12345678". Not that you must make them unique if more than
+one MessageContent is used.
 
 -> ALL MISTYPED PARAMETERS AND OTHER ENTRIES ARE SILENTLY IGNORED <-
 
@@ -126,7 +126,6 @@
 * MobileActionMode <0/1>   -A
 * QisdaMode <0/1>          -B
 * QuantaMode <0/1>         -E
-* PantechMode <0/1>        -F
 * BlackberryMode <0/1>     -Z
 * CiscoMode <0/1>          -L
 
@@ -135,6 +134,20 @@
 The names are referring to the respective manufacturers.
 
 
+* PantechMode              -F <num value>
+
+Extended flag for Pantech devices offering multiple target modes. Not
+all models were confirmed to support all modes. Possible values are:
+
+    1 - Automatic choice, checks for MBIM driver availability (recomm.)
+    2 - forced RNDIS mode
+    3 - forced CDC Ether mode (internal switch, no usb_modeswitch action)
+    4 - forced MBIM mode
+
+Important: the -F parameter value for usb_modeswitch is directly used as
+wValue in the control message!
+
+
 * ResetUSB <0/1>           -R
 
 Few devices or systems need a rougher treatment. If the switching seems
@@ -198,6 +211,6 @@
 
 * NoMBIMCheck <0|1>        (no command line parameter)
 
-Disable the check for new MBIM standard devices, which is always done
-by default.
-
+Disable the check for devices providing the MBIM standard; this check
+is otherwise done by default. See /etc/usb_modeswitch.conf from the
+program package for a global setting regarding this.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/usb-modeswitch-data-20150115/gen-rules.tcl 
new/usb-modeswitch-data-20150627/gen-rules.tcl
--- old/usb-modeswitch-data-20150115/gen-rules.tcl      2014-05-29 
21:46:57.000000000 +0200
+++ new/usb-modeswitch-data-20150627/gen-rules.tcl      2015-06-27 
23:48:55.000000000 +0200
@@ -9,7 +9,7 @@
 
 
 # Default version string
-set version "20140529"
+set version "20150627"
 
 if {[lindex $argv 0] == "--set-version" && [regexp {\d\d\d\d\d\d\d\d} [lindex 
$argv 1]]} {
        set version [lindex $argv 1]
@@ -35,7 +35,7 @@
 puts -nonewline $wc {# Part of usb-modeswitch-data, version }
 puts $wc $version
 puts $wc {#
-# Works with usb_modeswitch versions >= 2.2.0 (introduction of HuaweiNewMode)
+# Works with usb_modeswitch versions >= 2.2.2 (extension of PantechMode)
 #
 ACTION!="add|change", GOTO="modeswitch_rules_end"
 
@@ -55,8 +55,8 @@
 ACTION!="add", GOTO="modeswitch_rules_end"
 
 
-# Generic entry for all Huawei devices
-ATTRS{idVendor}=="12d1", ATTR{bInterfaceNumber}=="00", 
ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch '%b/%k'"}
+# Generic entry for all Huawei devices, excluding Android phones
+ATTRS{idVendor}=="12d1", ATTRS{manufacturer}!="Android", 
ATTR{bInterfaceNumber}=="00", ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch 
'%b/%k'"}
 
 
 set vendorList ""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/05c6:2001 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/05c6:2001
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/05c6:2001 2014-03-26 
20:50:18.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/05c6:2001 2015-06-21 
17:50:14.000000000 +0200
@@ -1,4 +1,4 @@
-# D-Link DWM-162-U5, Micromax MMX 300c
+# D-Link DWM-162-U5, DWM-162 C1, Micromax MMX 300c
 TargetVendor=0x1e0e
-TargetProductList="ce16,cefe"
+TargetProductList="ce16,ce17,cefe"
 StandardEject=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/0922:1003 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/0922:1003
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/0922:1003 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/0922:1003 2015-06-21 
13:53:33.000000000 +0200
@@ -0,0 +1,5 @@
+# Dymo LabelManager 420P
+TargetVendor= 0x0922
+TargetProduct= 0x1004
+MessageContent="1b5a01"
+NoDriverLoading=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/0e8d:0002:uPr=Product 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/0e8d:0002:uPr=Product
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/0e8d:0002:uPr=Product     
1970-01-01 01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/0e8d:0002:uPr=Product     
2015-06-21 11:13:34.000000000 +0200
@@ -0,0 +1,4 @@
+# MediaTek/Medion S4222 and probably others
+TargetVendor=0x0e8d
+TargetProductList="00a1,00a2,00a5"
+MessageContent="555342431234567800000000000006f0010300000000000000000000000000"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/10a9:606f 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/10a9:606f
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/10a9:606f 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/10a9:606f 2015-06-21 
15:48:21.000000000 +0200
@@ -0,0 +1,6 @@
+# Pantech/Verizon UML295
+TargetVendor=0x10a9
+TargetProductList="6064"
+# Use 1 for automatic choice, 2 for RNDIS, 4 for QMI
+PantechMode=1
+NoDriverLoading=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:155a 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:155a
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:155a 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:155a 2015-06-21 
11:15:23.000000000 +0200
@@ -0,0 +1,4 @@
+# Vodafone (Huawei) R205
+TargetVendor=0x12d1
+TargetProduct=0x14cd
+HuaweiNewMode=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:157d 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:157d
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:157d 2014-05-29 
14:57:00.000000000 +0200
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:157d 2015-06-21 
17:18:29.000000000 +0200
@@ -1,4 +1,4 @@
-# Huawei E3331
+# Huawei E3331, E3372
 TargetVendor=0x12d1
-TargetProduct=0x14db
+TargetProductList="14db,14dc"
 HuaweiNewMode=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1582 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1582
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1582 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1582 2015-06-21 
10:20:52.000000000 +0200
@@ -0,0 +1,4 @@
+# Vodafone / Huawei R215 Router
+TargetVendor=0x12d1
+TargetProduct=0x1588
+HuaweiNewMode=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:15cd 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:15cd
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:15cd 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:15cd 2015-06-21 
17:38:16.000000000 +0200
@@ -0,0 +1,4 @@
+# Huawei E3372
+TargetVendor=0x12d1
+TargetProduct=0x1506
+HuaweiNewMode=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:15cf 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:15cf
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:15cf 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:15cf 2015-06-21 
17:45:59.000000000 +0200
@@ -0,0 +1,4 @@
+# Huawei E3372s-153
+TargetVendor=0x12d1
+TargetProduct=0x1506
+HuaweiNewMode=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1f02 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1f02
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1f02 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1f02 2015-06-21 
13:35:18.000000000 +0200
@@ -0,0 +1,5 @@
+# Huawei E5377
+TargetVendor=0x12d1
+TargetProduct=0x14dc
+HuaweiNewMode=1
+NoDriverLoading=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1f07 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1f07
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1f07 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1f07 2015-06-21 
17:17:01.000000000 +0200
@@ -0,0 +1,5 @@
+# Huawei/Vodafone R226
+TargetVendor=0x12d1
+TargetProduct=0x15bf
+HuaweiNewMode=1
+NoDriverLoading=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1f09 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1f09
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/12d1:1f09 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/12d1:1f09 2015-06-21 
18:25:48.000000000 +0200
@@ -0,0 +1,5 @@
+# Huawei/Vodafone R216
+TargetVendor=0x12d1
+TargetProduct=0x1c50
+HuaweiNewMode=1
+NoDriverLoading=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/1782:0003 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/1782:0003
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/1782:0003 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/1782:0003 2015-06-21 
17:46:43.000000000 +0200
@@ -0,0 +1,2 @@
+# Spreadtrum SC7702
+Configuration=2
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/19d2:#linux 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/19d2:#linux
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/19d2:#linux       
1970-01-01 01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/19d2:#linux       
2015-06-27 21:00:21.000000000 +0200
@@ -0,0 +1,7 @@
+# ZTE generic for Linux (fall-back for unknown products)
+
+# Uncomment the following lines to activate
+
+#TargetVendor= 0x19d2
+#StandardEject=1
+#MessageContent="55534243123456702000000080000c85010101180101010101000000000000"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/19d2:0388 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/19d2:0388
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/19d2:0388 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/19d2:0388 2015-06-27 
00:17:26.000000000 +0200
@@ -0,0 +1,4 @@
+# ZTE MF90 Mobile Hotspot
+TargetVendor=0x19d2
+TargetProduct=0x0447
+MessageContent="55534243123456782400000080000685000000240000000000000000000000"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/2001:a401 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/2001:a401
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/2001:a401 1970-01-01 
01:00:00.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/2001:a401 2015-06-21 
18:33:22.000000000 +0200
@@ -0,0 +1,7 @@
+# D-Link DWM-221 B1
+TargetVendor=0x2001
+TargetProduct=0x7e19
+#StandardEject=1
+MessageContent="5553424312345678000000000000061e000000000000000000000000000000"
+MessageContent2="5553424312345679000000000001061b000000010000000000000000000000"
+MessageContent3="5553424312345670000000000000061b000000020000000000000000000000"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/2001:a403 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/2001:a403
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/2001:a403 2015-01-14 
23:45:54.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/2001:a403 2015-06-21 
11:17:05.000000000 +0200
@@ -1,4 +1,4 @@
-# D-Link DWM-156 A8
+# D-Link DWM-156 A8, DWP-157 B1
 TargetVendor=0x2001
-TargetProduct=0x7d0b
+TargetProductList="7d0b,7d0c"
 StandardEject=1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/usb-modeswitch-data-20150115/usb_modeswitch.d/2020:0002 
new/usb-modeswitch-data-20150627/usb_modeswitch.d/2020:0002
--- old/usb-modeswitch-data-20150115/usb_modeswitch.d/2020:0002 2015-01-14 
22:18:11.000000000 +0100
+++ new/usb-modeswitch-data-20150627/usb_modeswitch.d/2020:0002 2015-06-21 
17:47:51.000000000 +0200
@@ -1,4 +1,4 @@
-# Mediatek MT6229, Micromax MMX 377G
+# Mediatek MT6229, Micromax MMX 377G, Olicard 300
 TargetVendor=0x2020
-TargetProductList="2000,4010"
+TargetProductList="2000,4000,4010"
 MessageContent="555342430820298900000000000003f0010100000000000000000000000000"


Reply via email to