diff --git a/common/usb.c b/common/usb.c index b3aff89724..993d57b3bc 100644 --- a/common/usb.c +++ b/common/usb.c @@ -46,6 +46,8 @@ #define TRANSCEND_USB_VENDOR_ID 0x8564 #define TRANSCEND_USB_PRODUCT_ID 0x1000 +#define SP_USB_VENDOR_ID 0x058f +#define SP_USB_PRODUCT_ID 0x6387 static int asynch_allowed; char usb_started; /* flag for the started/stopped USB status */ @@ -1091,18 +1093,22 @@ int usb_select_config(struct usb_device *dev) le16_to_cpus(&dev->descriptor.idProduct); le16_to_cpus(&dev->descriptor.bcdDevice); - /*The Transcend device fails for get configuration length. Adding - delay about 10 micro secs to fix this.*/ - if (dev->descriptor.idVendor == TRANSCEND_USB_VENDOR_ID && - dev->descriptor.idProduct == TRANSCEND_USB_PRODUCT_ID) + /*The Transcend and Silicon-power devices fails for get configuration length. + Adding delay about 10 micro secs to fix this.*/ + if ((dev->descriptor.idVendor == TRANSCEND_USB_VENDOR_ID && + dev->descriptor.idProduct == TRANSCEND_USB_PRODUCT_ID) || + (dev->descriptor.idVendor == SP_USB_VENDOR_ID && + dev->descriptor.idProduct == SP_USB_PRODUCT_ID)) udelay(10); /* only support for one config for now */ err = usb_get_configuration_len(dev, 0); - /*The Transcend device fails for get configuration number. Adding - delay about 10 micro secs to fix this.*/ - if (dev->descriptor.idVendor == TRANSCEND_USB_VENDOR_ID && - dev->descriptor.idProduct == TRANSCEND_USB_PRODUCT_ID) + /*The Transcend and Silicon-power devices fails for get configuration number. + Adding delay about 10 micro secs to fix this.*/ + if ((dev->descriptor.idVendor == TRANSCEND_USB_VENDOR_ID && + dev->descriptor.idProduct == TRANSCEND_USB_PRODUCT_ID) || + (dev->descriptor.idVendor == SP_USB_VENDOR_ID && + dev->descriptor.idProduct == SP_USB_PRODUCT_ID)) udelay(10); if (err >= 0) {