static int isd200_get_inquiry_data( struct us_data *us )
 {
        struct isd200_info *info = (struct isd200_info *)us->extra;
-       int retStatus = ISD200_GOOD;
+       int retStatus;
        u16 *id = info->id;
 
        usb_stor_dbg(us, "Entering isd200_get_inquiry_data\n");
                                isd200_fix_driveid(id);
                                isd200_dump_driveid(us, id);
 
+                               /* Prevent division by 0 in isd200_scsi_to_ata() */
+                               if (id[ATA_ID_HEADS] == 0 || id[ATA_ID_SECTORS] == 0) {
+                                       usb_stor_dbg(us, "   Invalid ATA Identify data\n");
+                                       retStatus = ISD200_ERROR;
+                                       goto Done;
+                               }
+
                                memset(&info->InquiryData, 0, sizeof(info->InquiryData));
 
                                /* Standard IDE interface only supports disks */
                }
        }
 
+ Done:
        usb_stor_dbg(us, "Leaving isd200_get_inquiry_data %08X\n", retStatus);
 
        return(retStatus);
 
 static int isd200_Initialization(struct us_data *us)
 {
+       int rc = 0;
+
        usb_stor_dbg(us, "ISD200 Initialization...\n");
 
        /* Initialize ISD200 info struct */
 
-       if (isd200_init_info(us) == ISD200_ERROR) {
+       if (isd200_init_info(us) < 0) {
                usb_stor_dbg(us, "ERROR Initializing ISD200 Info struct\n");
+               rc = -ENOMEM;
        } else {
                /* Get device specific data */
 
-               if (isd200_get_inquiry_data(us) != ISD200_GOOD)
+               if (isd200_get_inquiry_data(us) != ISD200_GOOD) {
                        usb_stor_dbg(us, "ISD200 Initialization Failure\n");
-               else
+                       rc = -EINVAL;
+               } else {
                        usb_stor_dbg(us, "ISD200 Initialization complete\n");
+               }
        }
 
-       return 0;
+       return rc;
 }