USB: g_file_storage: automatically disable stalls under Atmel
authorAlan Stern <stern@rowland.harvard.edu>
Tue, 24 Feb 2009 21:19:47 +0000 (16:19 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 27 Feb 2009 22:40:50 +0000 (14:40 -0800)
This patch (as1220) automatically disables stalls when g_file_storage
finds itself running with an Atmel device controller, because the
Atmel hardware/driver isn't capable of halting bulk endpoints
correctly.

Reported-by: Stanislaw Gruszka <stf_xl@wp.pl>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/gadget/file_storage.c

index b10fa31cc9157a8f60a538ac8da42946f366efdc..1ab9dac7e12df8eec07e5ed278e48ca90cdd3bc5 100644 (file)
@@ -3879,7 +3879,11 @@ static int __init check_parameters(struct fsg_dev *fsg)
        mod_data.protocol_type = USB_SC_SCSI;
        mod_data.protocol_name = "Transparent SCSI";
 
-       if (gadget_is_sh(fsg->gadget))
+       /* Some peripheral controllers are known not to be able to
+        * halt bulk endpoints correctly.  If one of them is present,
+        * disable stalls.
+        */
+       if (gadget_is_sh(fsg->gadget) || gadget_is_at91(fsg->gadget))
                mod_data.can_stall = 0;
 
        if (mod_data.release == 0xffff) {       // Parameter wasn't set