mmc: use lldiv to fix arm eabi build
authorRabin Vincent <rabin@rab.in>
Sun, 5 Apr 2009 08:00:54 +0000 (13:30 +0530)
committerAndy Fleming <afleming@freescale.com>
Tue, 2 Jun 2009 22:18:56 +0000 (17:18 -0500)
The generic MMC core uses direct long long divisions, which do not build
with ARM EABI toolchains.  Use lldiv() instead, which works everywhere.

Signed-off-by: Rabin Vincent <rabin@rab.in>
drivers/mmc/mmc.c

index 70b4130..95ed21e 100644 (file)
@@ -31,6 +31,7 @@
 #include <malloc.h>
 #include <linux/list.h>
 #include <mmc.h>
+#include <div64.h>
 
 static struct list_head mmc_devices;
 static int cur_dev_num = -1;
@@ -155,8 +156,8 @@ int mmc_read(struct mmc *mmc, u64 src, uchar *dst, int size)
        char *buffer;
        int i;
        int blklen = mmc->read_bl_len;
-       int startblock = src / blklen;
-       int endblock = (src + size - 1) / blklen;
+       int startblock = lldiv(src, mmc->read_bl_len);
+       int endblock = lldiv(src + size - 1, mmc->read_bl_len);
        int err = 0;
 
        /* Make a buffer big enough to hold all the blocks we might read */
@@ -789,7 +790,7 @@ int mmc_startup(struct mmc *mmc)
        mmc->block_dev.lun = 0;
        mmc->block_dev.type = 0;
        mmc->block_dev.blksz = mmc->read_bl_len;
-       mmc->block_dev.lba = mmc->capacity/mmc->read_bl_len;
+       mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
        sprintf(mmc->block_dev.vendor,"Man %02x%02x%02x Snr %02x%02x%02x%02x",
                        mmc->cid[0], mmc->cid[1], mmc->cid[2],
                        mmc->cid[9], mmc->cid[10], mmc->cid[11], mmc->cid[12]);