OSDN Git Service

USB: android gadget: mass storage: Fix format issue for Vista Host
authorVelempati Chiranjeevi <c_cvelem@qualcomm.com>
Wed, 21 Oct 2009 04:23:10 +0000 (09:53 +0530)
committerBrian Swetland <swetland@google.com>
Tue, 29 Mar 2011 20:57:44 +0000 (13:57 -0700)
As part of formating the mass storage device, Host sends the INQUIRY
scsi command. As per the standard, the command length for this
command should be 6 bytes, whereas the Vista host sends 12 bytes.

When the command length of the command is not equal to the standard
length, the device sends a phase error as part of the status phase.
When the host receives a phase error, it re-enumerates, hence the
error.

If the command is INQUIRY, and the command length is 12 bytes,
treating this as a good command and not sending the phase error
to the host fixes this issue.

Signed-off-by: Velempati Chiranjeevi <c_cvelem@qualcomm.com>
Signed-off-by: Mike Lockwood <lockwood@android.com>
drivers/usb/gadget/f_mass_storage_tmp.c

index 9444d08..14fd333 100644 (file)
@@ -1740,9 +1740,10 @@ static int check_command(struct fsg_dev *fsg, int cmnd_size,
        /* Verify the length of the command itself */
        if (cmnd_size != fsg->cmnd_size) {
 
-               /* Special case workaround: MS-Windows issues REQUEST SENSE
-                * with cbw->Length == 12 (it should be 6). */
-               if (fsg->cmnd[0] == SC_REQUEST_SENSE && fsg->cmnd_size == 12)
+               /* Special case workaround: MS-Windows issues REQUEST_SENSE
+                * and INQUIRY commands with cbw->Length == 12 (it should be 6). */
+               if ((fsg->cmnd[0] == SC_REQUEST_SENSE && fsg->cmnd_size == 12)
+                || (fsg->cmnd[0] == SC_INQUIRY && fsg->cmnd_size == 12))
                        cmnd_size = fsg->cmnd_size;
                else {
                        fsg->phase_error = 1;