USB: accept 1-byte Device Status replies, fixing some b0rken devices
Some devices have a bug which causes them to send a 1-byte reply to Get-Device-Status requests instead of 2 bytes as required by the spec. This doesn't play well with autosuspend, since we look for a valid status reply to make sure the device is still present when it resumes. Without both bytes, we assume the device has been disconnected. Lack of the second byte shouldn't matter much, since the spec requires it always to be equal to 0. Hence this patch (as959) causes finish_port_resume() to accept a 1-byte reply as valid. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Acked-by: David Brownell <david-b@pacbell.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
f095137e79
commit
46dede4690
1 changed files with 2 additions and 1 deletions
|
@ -1644,9 +1644,10 @@ static int finish_port_resume(struct usb_device *udev)
|
|||
* and device drivers will know about any resume quirks.
|
||||
*/
|
||||
if (status == 0) {
|
||||
devstatus = 0;
|
||||
status = usb_get_status(udev, USB_RECIP_DEVICE, 0, &devstatus);
|
||||
if (status >= 0)
|
||||
status = (status == 2 ? 0 : -ENODEV);
|
||||
status = (status > 0 ? 0 : -ENODEV);
|
||||
}
|
||||
|
||||
if (status) {
|
||||
|
|
Loading…
Reference in a new issue