X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=blobdiff_plain;f=utils%2Fusb-modeswitch%2Ffiles%2Fmodeswitch.hotplug;h=8042451373b57bd13a714923fd17243127460ecd;hp=eebaf1355e46b646b94eb4440c1c64e10e68efa3;hb=d70c94d784d982eac02ad9fa91db6f5f130593cc;hpb=9cc0bb27de5c694793f5678fade787bdaa54f7fc diff --git a/utils/usb-modeswitch/files/modeswitch.hotplug b/utils/usb-modeswitch/files/modeswitch.hotplug index eebaf1355e..8042451373 100644 --- a/utils/usb-modeswitch/files/modeswitch.hotplug +++ b/utils/usb-modeswitch/files/modeswitch.hotplug @@ -92,7 +92,7 @@ if [ "$ACTION" = add ]; then [ -d "/etc/usb_modeswitch.d" ] && [ -x "$modeswitch" ] && { case "$DEVICENAME" in *-*:*.*) : ;; - *) log "Not handling $DEVICENAME"; exit 0 ;; + *) exit 0 ;; esac find_usb_attrs @@ -120,9 +120,20 @@ if [ "$ACTION" = add ]; then # If a candidate is remaining, start usb-modeswitch [ -n "$configs" ] && { log "$DEVICENAME: Selecting ${configs%% *} for mode switching" - $modeswitch -c "${configs%% *}" - } || { - log "$DEVICENAME: Device does not seem to need mode switching" + # ugly workaround, but working for all hw we got for testing + switching_done=0 + switching_tries=0 + local usb_dir="/sys/$DEVPATH" + [ -f "$usb_dir/idVendor" ] || usb_dir="${usb_dir%/*}" + while [ $switching_done -lt 1 -a $switching_tries -le 6 ]; do + $modeswitch -I -D -n -s 30 -c "${configs%% *}" + if [ $(sanitize "$usb_dir/idProduct") = $uPid ]; then + log "switching seemingly failed" + else + switching_done=1 + fi + switching_tries=$(( $switching_tries + 1 )) + done } } fi