.. | .. |
---|
36 | 36 | MODULE_DESCRIPTION("Driver for Alauda-based card readers"); |
---|
37 | 37 | MODULE_AUTHOR("Daniel Drake <dsd@gentoo.org>"); |
---|
38 | 38 | MODULE_LICENSE("GPL"); |
---|
| 39 | +MODULE_IMPORT_NS(USB_STORAGE); |
---|
39 | 40 | |
---|
40 | 41 | /* |
---|
41 | 42 | * Status bytes |
---|
.. | .. |
---|
317 | 318 | rc = usb_stor_ctrl_transfer(us, us->recv_ctrl_pipe, |
---|
318 | 319 | command, 0xc0, 0, 1, data, 2); |
---|
319 | 320 | |
---|
320 | | - usb_stor_dbg(us, "Media status %02X %02X\n", data[0], data[1]); |
---|
| 321 | + if (rc == USB_STOR_XFER_GOOD) |
---|
| 322 | + usb_stor_dbg(us, "Media status %02X %02X\n", data[0], data[1]); |
---|
321 | 323 | |
---|
322 | 324 | return rc; |
---|
323 | 325 | } |
---|
.. | .. |
---|
437 | 439 | + MEDIA_INFO(us).blockshift + MEDIA_INFO(us).pageshift); |
---|
438 | 440 | MEDIA_INFO(us).pba_to_lba = kcalloc(num_zones, sizeof(u16*), GFP_NOIO); |
---|
439 | 441 | MEDIA_INFO(us).lba_to_pba = kcalloc(num_zones, sizeof(u16*), GFP_NOIO); |
---|
| 442 | + if (MEDIA_INFO(us).pba_to_lba == NULL || MEDIA_INFO(us).lba_to_pba == NULL) |
---|
| 443 | + return USB_STOR_TRANSPORT_ERROR; |
---|
440 | 444 | |
---|
441 | 445 | if (alauda_reset_media(us) != USB_STOR_XFER_GOOD) |
---|
442 | 446 | return USB_STOR_TRANSPORT_ERROR; |
---|
.. | .. |
---|
451 | 455 | static int alauda_check_media(struct us_data *us) |
---|
452 | 456 | { |
---|
453 | 457 | struct alauda_info *info = (struct alauda_info *) us->extra; |
---|
454 | | - unsigned char status[2]; |
---|
| 458 | + unsigned char *status = us->iobuf; |
---|
455 | 459 | int rc; |
---|
456 | 460 | |
---|
457 | 461 | rc = alauda_get_media_status(us, status); |
---|
| 462 | + if (rc != USB_STOR_XFER_GOOD) { |
---|
| 463 | + status[0] = 0xF0; /* Pretend there's no media */ |
---|
| 464 | + status[1] = 0; |
---|
| 465 | + } |
---|
458 | 466 | |
---|
459 | 467 | /* Check for no media or door open */ |
---|
460 | 468 | if ((status[0] & 0x80) || ((status[0] & 0x1F) == 0x10) |
---|