linux/drivers/usb/storage
Paulo Afonso Graner Fessel b8d23491f1 USB: storage: recognizing and enabling Nokia 5200 cell phoes
This patch corrects the issue when one connects a Nokia 5200 cell
phone in data storage mode. If one uses an unpatched unusual_devs.h,
the following messages appear on /var/log/messages:

Dec 12 01:03:24 alberich kernel: usb 4-2: new full speed USB device
using uhci_hcd and address 3
Dec 12 01:03:25 alberich kernel: usb 4-2: configuration #1 chosen from 1 choice
Dec 12 01:03:25 alberich kernel: scsi10 : SCSI emulation for USB Mass
Storage devices
Dec 12 01:03:25 alberich kernel: usb 4-2: New USB device found,
idVendor=0421, idProduct=04bd
Dec 12 01:03:25 alberich kernel: usb 4-2: New USB device strings:
Mfr=1, Product=2, SerialNumber=3
Dec 12 01:03:25 alberich kernel: usb 4-2: Product: Nokia 5200
Dec 12 01:03:25 alberich kernel: usb 4-2: Manufacturer: Nokia
Dec 12 01:03:25 alberich kernel: usb 4-2: SerialNumber: 353930018354523
Dec 12 01:03:25 alberich kernel: usbcore: registered new interface driver ub
Dec 12 01:03:30 alberich kernel: scsi 10:0:0:0: Direct-Access
Nokia    Nokia 5200       0000 PQ: 0 AN
SI: 4
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] 3985409 512-byte
hardware sectors (2041 MB)
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Write Protect is off
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Assuming drive
cache: write through
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] 3985409 512-byte
hardware sectors (2041 MB)
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Write Protect is off
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Assuming drive
cache: write through
Dec 12 01:03:30 alberich kernel:  sdg: sdg1
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Attached SCSI removable disk
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: Attached scsi generic sg9 type 0
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Sense Key : No
Sense [current]
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Add. Sense: No
additional sense information
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Sense Key : No
Sense [current]
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Add. Sense: No
additional sense information
Dec 12 01:03:30 alberich kernel: sd 10:0:0:0: [sdg] Sense Key : No
Sense [current]

(...)

The MicroSD card in the phone remains inaccessible and finally the
cell phone turns itself off. The patch solves this problem and makes
the cell phone fully accessible:

[root@alberich kernel-linus-2.6.27.5-1mdv]# df -h
Sist. Arq.            Tam   Usad Disp  Uso% Montado em
/dev/sda6              31G  5,2G   26G  17% /
/dev/sda1              92M   27M   61M  31% /boot
/dev/mapper/homevg-homelv  240G  237G  3,5G  99% /home
/dev/sda3              21G  7,9G   13G  40% /mnt/windows
/dev/sdg1             2,0G  287M  1,7G  15% /media/disk <--------

I've found necessary to use the FL_US_CAPACITY_FIX switch, as without
it the cell phone is recognized but it went berserk when performing
low-level functions on it (a fdisk -l /dev/uba for example).

lsusb -v output follows:

Bus 004 Device 004: ID 0421:04bd Nokia Mobile Phones
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0
  bDeviceProtocol         0
  bMaxPacketSize0        64
  idVendor           0x0421 Nokia Mobile Phones
  idProduct          0x04bd
  bcdDevice            6.03
  iManufacturer           1 Nokia
  iProduct                2 Nokia 5200
  iSerial                 3 353930018354523
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           32
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0
    bmAttributes         0xc0
      Self Powered
    MaxPower              100mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass         8 Mass Storage
      bInterfaceSubClass      6 SCSI
      bInterfaceProtocol     80 Bulk (Zip)
      iInterface              0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0001
  Self Powered

Signed-off-by: Paulo Afonso Graner Fessel <pfessel@gmail.com>
Signed-off-by: Phil Dibowitz <phil@ipom.com>
Cc: stable <stable@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2009-01-07 09:59:48 -08:00
..
alauda.c USB storage: sg chaining support 2007-10-16 11:20:59 +02:00
alauda.h
cypress_atacb.c [SCSI] Let scsi_cmnd->cmnd use request->cmd buffer 2008-05-02 10:18:22 -05:00
cypress_atacb.h USB: mass storage: emulation of sat scsi_pass_thru with ATACB 2008-04-24 21:16:42 -07:00
datafab.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
datafab.h
debug.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
debug.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
dpcm.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
dpcm.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
freecom.c remove unnecessary <linux/hdreg.h> includes 2008-08-05 18:16:58 +02:00
freecom.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
initializers.c USB: support Huawei data card product IDs 2008-10-22 10:05:28 -07:00
initializers.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
isd200.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
isd200.h
jumpshot.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
jumpshot.h
karma.c USB Storage: add rio karma eject support 2006-09-27 11:58:54 -07:00
karma.h USB Storage: add rio karma eject support 2006-09-27 11:58:54 -07:00
Kconfig USB: storage: adjust comment in Kconfig 2008-11-13 14:45:03 -08:00
libusual.c usb: libusual kthread_run() called with wrong format. 2008-05-02 10:25:51 -07:00
Makefile USB Storage: Sierra: Non-configurable TRU-Install 2008-09-23 13:58:05 -07:00
onetouch.c USB: remove err() macro from more usb drivers 2008-10-17 14:41:14 -07:00
onetouch.h
protocol.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
protocol.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
scsiglue.c usb-storage: revert DMA-alignment change for Wireless USB 2008-07-21 15:16:51 -07:00
scsiglue.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
sddr09.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
sddr09.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
sddr55.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
sddr55.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
shuttle_usbat.c USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
shuttle_usbat.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
sierra_ms.c USB Storage Sierra: TRU-Install feature update 2008-08-13 17:32:51 -07:00
sierra_ms.h USB Storage Sierra: TRU-Install feature update 2008-08-13 17:32:51 -07:00
transport.c usb-storage: report underflow with no sense data 2008-10-17 14:40:54 -07:00
transport.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00
unusual_devs.h USB: storage: recognizing and enabling Nokia 5200 cell phoes 2009-01-07 09:59:48 -08:00
usb.c USB Storage: Sierra: Non-configurable TRU-Install 2008-09-23 13:58:05 -07:00
usb.h USB: remove CVS keywords 2008-07-21 15:15:55 -07:00