aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/gadget/f_mass_storage.c
diff options
context:
space:
mode:
authorjpeg729 <jpeg729@gmail.com>2013-06-11 17:33:20 +0200
committerjpeg729 <jpeg729@gmail.com>2013-06-21 22:18:25 +0200
commiteaa90408a32181bc47bc35bfbd7017dff3a58dc6 (patch)
treedc0dfe493181ca481d395eb71b9b8062b29450b2 /drivers/usb/gadget/f_mass_storage.c
parent855d6a6c1f7c54ef073caac3f6c5f9b1ed72eb4d (diff)
downloadkernel_samsung_smdk4412-eaa90408a32181bc47bc35bfbd7017dff3a58dc6.zip
kernel_samsung_smdk4412-eaa90408a32181bc47bc35bfbd7017dff3a58dc6.tar.gz
kernel_samsung_smdk4412-eaa90408a32181bc47bc35bfbd7017dff3a58dc6.tar.bz2
USB: f_mass_storage: 2048 block size for cdrom devices
Enables computer Bios's to recognize the cdrom device like most other cdrom devices. This allows people to boot ISOs from their phone. Indentation corrected. Change-Id: Ia3ff20cb5b40da71da9702695d2ff974727deda8
Diffstat (limited to 'drivers/usb/gadget/f_mass_storage.c')
-rw-r--r--drivers/usb/gadget/f_mass_storage.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/usb/gadget/f_mass_storage.c b/drivers/usb/gadget/f_mass_storage.c
index ec1d520..51248e8 100644
--- a/drivers/usb/gadget/f_mass_storage.c
+++ b/drivers/usb/gadget/f_mass_storage.c
@@ -1074,7 +1074,11 @@ static int do_read(struct fsg_common *common)
curlun->sense_data = SS_LOGICAL_BLOCK_ADDRESS_OUT_OF_RANGE;
return -EINVAL;
}
- file_offset = ((loff_t) lba) << 9;
+ if (curlun->cdrom)
+ file_offset = ((loff_t) lba) << 11;
+ else
+ file_offset = ((loff_t) lba) << 9;
+
/* Carry out the file reads */
amount_left = common->data_size_from_cmnd;
@@ -1089,6 +1093,8 @@ static int do_read(struct fsg_common *common)
bh->inreq->length = 0;
return -EIO; /* No default reply */
}
+ if (curlun->cdrom)
+ amount_left <<= 2;
for (;;) {
/*
@@ -1663,7 +1669,7 @@ static int do_read_capacity(struct fsg_common *common, struct fsg_buffhd *bh)
put_unaligned_be32(curlun->num_sectors - 1, &buf[0]);
/* Max logical block */
- put_unaligned_be32(512, &buf[4]); /* Block length */
+ put_unaligned_be32(curlun->cdrom ? 2048 : 512, &buf[4]); /* Block length */
return 8;
}
@@ -1922,7 +1928,7 @@ static int do_read_format_capacities(struct fsg_common *common,
put_unaligned_be32(curlun->num_sectors, &buf[0]);
/* Number of blocks */
- put_unaligned_be32(512, &buf[4]); /* Block length */
+ put_unaligned_be32(curlun->cdrom ? 2048 : 512, &buf[4]); /* Block length */
buf[4] = 0x02; /* Current capacity */
return 12;
}
@@ -2472,16 +2478,7 @@ static int do_scsi_command(struct fsg_common *common)
common->data_size_from_cmnd =
get_unaligned_be16(&common->cmnd[7]);
reply = check_command(common, 10, DATA_DIR_TO_HOST,
-#if defined(CONFIG_USB_CDFS_SUPPORT)
-#ifdef _SUPPORT_MAC_
(0xf<<6) | (1<<1), 1,
-#else
- (7<<6) | (1<<1), 1,
-#endif
-#else
- (7<<6) | (1<<1), 1,
-#endif
-
"READ TOC");
if (reply == 0)
reply = do_read_toc(common, bh);