From 8b57e2f0814a2fd9aed1fa09d8279eaf90764560 Mon Sep 17 00:00:00 2001 From: Vincent Palatin Date: Wed, 12 Dec 2012 17:55:29 -0800 Subject: usb: properly detect empty mass storage media reader When a USB card reader is empty, it will return "Not Ready - medium not present" as Key Code Qualifier. In that situation, it's useless waiting for the full timeout since the result won't change until the user inserts a card. Signed-off-by: Vincent Palatin Signed-off-by: Vadim Bendebury Signed-off-by: Simon Glass --- common/usb_storage.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'common') diff --git a/common/usb_storage.c b/common/usb_storage.c index 2d92ee1bb3..fb322b4015 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -970,6 +970,16 @@ static int usb_test_unit_ready(ccb *srb, struct us_data *ss) return 0; } usb_request_sense(srb, ss); + /* + * Check the Key Code Qualifier, if it matches + * "Not Ready - medium not present" + * (the sense Key equals 0x2 and the ASC is 0x3a) + * return immediately as the medium being absent won't change + * unless there is a user action. + */ + if ((srb->sense_buf[2] == 0x02) && + (srb->sense_buf[12] == 0x3a)) + return -1; mdelay(100); } while (retries--); -- cgit v1.2.3