Bug 12559 - Huawei E169 doesn't work as mass storage anymore
Summary: Huawei E169 doesn't work as mass storage anymore
Status: CLOSED INVALID
Alias: None
Product: Drivers
Classification: Unclassified
Component: USB (show other bugs)
Hardware: All Linux
: P1 normal
Assignee: Greg Kroah-Hartman
URL:
Keywords:
Depends on:
Blocks: 11808
  Show dependency tree
 
Reported: 2009-01-28 02:34 UTC by kpalberg
Modified: 2009-06-23 13:19 UTC (History)
2 users (show)

See Also:
Kernel Version: 2.6.28.2
Subsystem:
Regression: Yes
Bisected commit-id:


Attachments

Description kpalberg 2009-01-28 02:34:09 UTC
Latest tested working kernel version: 2.6.27.7
Earliest tested failing kernel version: 2.6.28.2
Distribution: Debian Etch
Hardware Environment: x86
Software Environment:

Problem Description:
Huawei E169 HSDPA USB modem (ID 12d1:1001) also functions as a USB memory stick. It has a microsd memory card slot for this. This USB storage is no longer recognized. It also has a CD-ROM mass storage device for the windows drivers and this is not recognized either (doesn't matter).

Both storages used to work. The following diff is what caused the regression
and reversing it makes 2.6.28.2 work correctly:

--- linux-2.6.27.7/drivers/usb/storage/initializers.c   2008-11-21 01:02:37.000000000 +0200
+++ linux-2.6.28.2/drivers/usb/storage/initializers.c   2009-01-25 02:42:07.000000000 +0200
@@ -95,11 +95,10 @@
 {
        int result;

-       us->iobuf[0] = 0x1;
        result = usb_stor_control_msg(us, us->send_ctrl_pipe,
                                      USB_REQ_SET_FEATURE,
                                      USB_TYPE_STANDARD | USB_RECIP_DEVICE,
-                                     0x01, 0x0, us->iobuf, 0x1, 1000);
+                                     0x01, 0x0, NULL, 0x0, 1000);
        US_DEBUGP("usb_control_msg performing result is %d\n", result);
        return (result ? 0 : -1);
 }


Steps to reproduce:
Attach the stick.
Comment 1 Anonymous Emailer 2009-01-29 00:41:28 UTC
Reply-To: akpm@linux-foundation.org


(switched to email.  Please respond via emailed reply-to-all, not via the
bugzilla web interface).

On Wed, 28 Jan 2009 02:34:10 -0800 (PST) bugme-daemon@bugzilla.kernel.org wrote:

> http://bugzilla.kernel.org/show_bug.cgi?id=12559
> 
>            Summary: Huawei E169 doesn't work as mass storage anymore
>            Product: Drivers
>            Version: 2.5
>      KernelVersion: 2.6.28.2
>           Platform: All
>         OS/Version: Linux
>               Tree: Mainline
>             Status: NEW
>           Severity: normal
>           Priority: P1
>          Component: USB
>         AssignedTo: greg@kroah.com
>         ReportedBy: kpalberg@gmail.com
> 
> 
> Latest tested working kernel version: 2.6.27.7
> Earliest tested failing kernel version: 2.6.28.2

A regression.

> Distribution: Debian Etch
> Hardware Environment: x86
> Software Environment:
> 
> Problem Description:
> Huawei E169 HSDPA USB modem (ID 12d1:1001) also functions as a USB memory
> stick. It has a microsd memory card slot for this. This USB storage is no
> longer recognized. It also has a CD-ROM mass storage device for the windows
> drivers and this is not recognized either (doesn't matter).
> 
> Both storages used to work. The following diff is what caused the regression
> and reversing it makes 2.6.28.2 work correctly:
> 
> --- linux-2.6.27.7/drivers/usb/storage/initializers.c   2008-11-21
> 01:02:37.000000000 +0200
> +++ linux-2.6.28.2/drivers/usb/storage/initializers.c   2009-01-25
> 02:42:07.000000000 +0200
> @@ -95,11 +95,10 @@
>  {
>         int result;
> 
> -       us->iobuf[0] = 0x1;
>         result = usb_stor_control_msg(us, us->send_ctrl_pipe,
>                                       USB_REQ_SET_FEATURE,
>                                       USB_TYPE_STANDARD | USB_RECIP_DEVICE,
> -                                     0x01, 0x0, us->iobuf, 0x1, 1000);
> +                                     0x01, 0x0, NULL, 0x0, 1000);
>         US_DEBUGP("usb_control_msg performing result is %d\n", result);
>         return (result ? 0 : -1);
>  }
> 
> 
> Steps to reproduce:
> Attach the stick.
> 

Apparenty caused by

commit 1460e5e44cc5ecad7704f63b10dcb3a59d0e008b
Author:     fangxiaozhi <huananhu@huawei.com>
AuthorDate: Wed Oct 15 14:15:36 2008 +0800
Commit:     Greg Kroah-Hartman <gregkh@suse.de>
CommitDate: Wed Oct 22 10:05:28 2008 -0700

    USB: support Huawei data card product IDs
Comment 2 Rafael J. Wysocki 2009-02-09 15:32:27 UTC
On Monday 09 February 2009, kpalberg wrote:
> On Wed, Feb 4, 2009 at 12:58 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote:
> > The following bug entry is on the current list of known regressions
> > introduced between 2.6.27 and 2.6.28.  Please verify if it still should
> > be listed and let me know (either way).
> >
> >
> > Bug-Entry       : http://bugzilla.kernel.org/show_bug.cgi?id=12559
> > Subject         : Huawei E169 doesn't work as mass storage anymore
> > Submitter       : kpalberg <kpalberg@gmail.com>
> > Date            : 2009-01-28 02:34 (8 days old)
> 
> Yes, it should be listed. The problem still exists in 2.6.28.4.
Comment 3 Rafael J. Wysocki 2009-02-23 17:39:32 UTC
On Tuesday 24 February 2009, Greg KH wrote:
> On Mon, Feb 23, 2009 at 11:00:52PM +0100, Rafael J. Wysocki wrote:
> > Bug-Entry   : http://bugzilla.kernel.org/show_bug.cgi?id=12559
> > Subject             : Huawei E169 doesn't work as mass storage anymore
> > Submitter   : kpalberg <kpalberg@gmail.com>
> > Date                : 2009-01-28 02:34 (27 days old)
> 
> I'm pretty sure this has been tracked down to a buggy firmware in the
> device itself, and the company (Huawei) is working on updating it to
> solve the issue.
> 
> This is backed up by the fact that Huawei submitted the patch that is
> said to have broken this device :)
Comment 4 Ondrej Zary 2009-06-23 13:19:13 UTC
I have E220 and E176 devices here for testing.

E220 and E176 have the same device ID (0x1003). Both have virtual mass-storage CD-ROM with Windows software. But E176 has additional microSD card slot that acts as mass-storage disk. The usb_stor_huawei_e220_init() function does a bad thing: it disables the mass-storage on Huawei devices. The old one was buggy so it did nothing with newer devices - and that's why the microSD slot worked. The patched ("new") function (introduced in 2.6.28) is fixed and works on all devices, disabling everything mass-storage.

I think that the entire usb_stor_huawei_e220_init() function in initializers.c and all Huawei entries from unusual_devs.h should be removed. At least for E220 and E176, it does not do any good thing. The "option" module works fine without this "initialization"!

Also I don't think that we should hide the virtual CD-ROM on kernel level. It's already hidden by HAL. And AFAIK, it can be overwritten with data that can be useful even in Linux.

Note You need to log in before you can comment on or make changes to this bug.