diff options
author | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
---|---|---|
committer | Jonathan Herman <hermanjl@cs.unc.edu> | 2013-01-17 16:15:55 -0500 |
commit | 8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch) | |
tree | a8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/mtd/maps/vmu-flash.c | |
parent | 406089d01562f1e2bf9f089fd7637009ebaad589 (diff) |
Patched in Tegra support.
Diffstat (limited to 'drivers/mtd/maps/vmu-flash.c')
-rw-r--r-- | drivers/mtd/maps/vmu-flash.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/mtd/maps/vmu-flash.c b/drivers/mtd/maps/vmu-flash.c index 6b223cfe92b..3a04b078576 100644 --- a/drivers/mtd/maps/vmu-flash.c +++ b/drivers/mtd/maps/vmu-flash.c | |||
@@ -360,6 +360,9 @@ static int vmu_flash_read(struct mtd_info *mtd, loff_t from, size_t len, | |||
360 | int index = 0, retval, partition, leftover, numblocks; | 360 | int index = 0, retval, partition, leftover, numblocks; |
361 | unsigned char cx; | 361 | unsigned char cx; |
362 | 362 | ||
363 | if (len < 1) | ||
364 | return -EIO; | ||
365 | |||
363 | mpart = mtd->priv; | 366 | mpart = mtd->priv; |
364 | mdev = mpart->mdev; | 367 | mdev = mpart->mdev; |
365 | partition = mpart->partition; | 368 | partition = mpart->partition; |
@@ -431,6 +434,11 @@ static int vmu_flash_write(struct mtd_info *mtd, loff_t to, size_t len, | |||
431 | partition = mpart->partition; | 434 | partition = mpart->partition; |
432 | card = maple_get_drvdata(mdev); | 435 | card = maple_get_drvdata(mdev); |
433 | 436 | ||
437 | /* simple sanity checks */ | ||
438 | if (len < 1) { | ||
439 | error = -EIO; | ||
440 | goto failed; | ||
441 | } | ||
434 | numblocks = card->parts[partition].numblocks; | 442 | numblocks = card->parts[partition].numblocks; |
435 | if (to + len > numblocks * card->blocklen) | 443 | if (to + len > numblocks * card->blocklen) |
436 | len = numblocks * card->blocklen - to; | 444 | len = numblocks * card->blocklen - to; |
@@ -536,9 +544,9 @@ static void vmu_queryblocks(struct mapleq *mq) | |||
536 | mtd_cur->flags = MTD_WRITEABLE|MTD_NO_ERASE; | 544 | mtd_cur->flags = MTD_WRITEABLE|MTD_NO_ERASE; |
537 | mtd_cur->size = part_cur->numblocks * card->blocklen; | 545 | mtd_cur->size = part_cur->numblocks * card->blocklen; |
538 | mtd_cur->erasesize = card->blocklen; | 546 | mtd_cur->erasesize = card->blocklen; |
539 | mtd_cur->_write = vmu_flash_write; | 547 | mtd_cur->write = vmu_flash_write; |
540 | mtd_cur->_read = vmu_flash_read; | 548 | mtd_cur->read = vmu_flash_read; |
541 | mtd_cur->_sync = vmu_flash_sync; | 549 | mtd_cur->sync = vmu_flash_sync; |
542 | mtd_cur->writesize = card->blocklen; | 550 | mtd_cur->writesize = card->blocklen; |
543 | 551 | ||
544 | mpart = kmalloc(sizeof(struct mdev_part), GFP_KERNEL); | 552 | mpart = kmalloc(sizeof(struct mdev_part), GFP_KERNEL); |
@@ -596,7 +604,7 @@ fail_name: | |||
596 | } | 604 | } |
597 | 605 | ||
598 | /* Handles very basic info about the flash, queries for details */ | 606 | /* Handles very basic info about the flash, queries for details */ |
599 | static int vmu_connect(struct maple_device *mdev) | 607 | static int __devinit vmu_connect(struct maple_device *mdev) |
600 | { | 608 | { |
601 | unsigned long test_flash_data, basic_flash_data; | 609 | unsigned long test_flash_data, basic_flash_data; |
602 | int c, error; | 610 | int c, error; |
@@ -690,7 +698,7 @@ fail_nomem: | |||
690 | return error; | 698 | return error; |
691 | } | 699 | } |
692 | 700 | ||
693 | static void vmu_disconnect(struct maple_device *mdev) | 701 | static void __devexit vmu_disconnect(struct maple_device *mdev) |
694 | { | 702 | { |
695 | struct memcard *card; | 703 | struct memcard *card; |
696 | struct mdev_part *mpart; | 704 | struct mdev_part *mpart; |
@@ -772,7 +780,7 @@ static void vmu_file_error(struct maple_device *mdev, void *recvbuf) | |||
772 | } | 780 | } |
773 | 781 | ||
774 | 782 | ||
775 | static int probe_maple_vmu(struct device *dev) | 783 | static int __devinit probe_maple_vmu(struct device *dev) |
776 | { | 784 | { |
777 | int error; | 785 | int error; |
778 | struct maple_device *mdev = to_maple_dev(dev); | 786 | struct maple_device *mdev = to_maple_dev(dev); |
@@ -789,7 +797,7 @@ static int probe_maple_vmu(struct device *dev) | |||
789 | return 0; | 797 | return 0; |
790 | } | 798 | } |
791 | 799 | ||
792 | static int remove_maple_vmu(struct device *dev) | 800 | static int __devexit remove_maple_vmu(struct device *dev) |
793 | { | 801 | { |
794 | struct maple_device *mdev = to_maple_dev(dev); | 802 | struct maple_device *mdev = to_maple_dev(dev); |
795 | 803 | ||
@@ -802,7 +810,7 @@ static struct maple_driver vmu_flash_driver = { | |||
802 | .drv = { | 810 | .drv = { |
803 | .name = "Dreamcast_visual_memory", | 811 | .name = "Dreamcast_visual_memory", |
804 | .probe = probe_maple_vmu, | 812 | .probe = probe_maple_vmu, |
805 | .remove = remove_maple_vmu, | 813 | .remove = __devexit_p(remove_maple_vmu), |
806 | }, | 814 | }, |
807 | }; | 815 | }; |
808 | 816 | ||