diff options
author | jpeg729 <jpeg729@gmail.com> | 2013-06-11 17:33:20 +0200 |
---|---|---|
committer | jpeg729 <jpeg729@gmail.com> | 2013-06-21 22:18:25 +0200 |
commit | eaa90408a32181bc47bc35bfbd7017dff3a58dc6 (patch) | |
tree | dc0dfe493181ca481d395eb71b9b8062b29450b2 /drivers/usb/gadget/f_mass_storage.c | |
parent | 855d6a6c1f7c54ef073caac3f6c5f9b1ed72eb4d (diff) | |
download | kernel_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.c | 21 |
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); |