--- ./drivers/usb/storage/initializers.c.orig 2007-04-26 09:20:58.000000000 +0200 +++ ./drivers/usb/storage/initializers.c 2007-10-30 22:03:29.000000000 +0100 @@ -90,3 +90,14 @@ return (res ? -1 : 0); } + +/* This places the HUAWEI E220 devices in multi-port mode */ +int usb_stor_switch_ports_init(struct us_data *us) +{ + us->iobuf[0] = 0x1; + (void)usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev, 0), + USB_REQ_SET_FEATURE, USB_TYPE_STANDARD | USB_RECIP_DEVICE, + 0x01, 0x0, us->iobuf, 0x1, 1000); + return 0; +} + --- ./drivers/usb/storage/initializers.h.orig 2006-12-09 15:26:06.000000000 +0100 +++ ./drivers/usb/storage/initializers.h 2007-10-30 22:03:29.000000000 +0100 @@ -47,3 +47,6 @@ /* This function is required to activate all four slots on the UCR-61S2B * flash reader */ int usb_stor_ucr61s2b_init(struct us_data *us); + +/* This places the HUAWEI E220 devices in multi-port mode */ +int usb_stor_switch_ports_init(struct us_data *us); --- ./drivers/usb/storage/unusual_devs.h.orig 2007-10-30 19:40:17.000000000 +0100 +++ ./drivers/usb/storage/unusual_devs.h 2007-10-30 22:05:51.000000000 +0100 @@ -1463,6 +1463,16 @@ US_SC_DEVICE, US_PR_DEVICE, NULL, US_FL_IGNORE_RESIDUE ), +/* This tells the usb driver to place the HUAWEI E220 devices into multi-port mode + * Reported by fangxiaozhi + * and by linlei + */ +UNUSUAL_DEV( 0x12d1, 0x1003, 0x0000, 0x0000, + "HUAWEI", + "HUAWEI MOBILE Mass Storage", + US_SC_DEVICE, US_PR_DEVICE, usb_stor_switch_ports_init, + 0), + /* Reported by Vilius Bilinkevicius