b43: Remove unnecessary MMIO accesses in the interrupt hotpath.
[openwrt.git] / target / linux / generic-2.6 / patches-2.6.23 / 300-add-mmc-spi-driver.patch
index 528d608..6527fce 100644 (file)
@@ -4,7 +4,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 
 --- a/drivers/mmc/host/Kconfig
 +++ b/drivers/mmc/host/Kconfig
 
 --- a/drivers/mmc/host/Kconfig
 +++ b/drivers/mmc/host/Kconfig
-@@ -100,3 +100,16 @@
+@@ -100,3 +100,16 @@ config MMC_TIFM_SD
            To compile this driver as a module, choose M here: the
          module will be called tifm_sd.
  
            To compile this driver as a module, choose M here: the
          module will be called tifm_sd.
  
@@ -23,7 +23,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 +
 --- a/drivers/mmc/host/Makefile
 +++ b/drivers/mmc/host/Makefile
 +
 --- a/drivers/mmc/host/Makefile
 +++ b/drivers/mmc/host/Makefile
-@@ -15,4 +15,5 @@
+@@ -15,4 +15,5 @@ obj-$(CONFIG_MMC_AU1X)               += au1xmmc.o
  obj-$(CONFIG_MMC_OMAP)                += omap.o
  obj-$(CONFIG_MMC_AT91)                += at91_mci.o
  obj-$(CONFIG_MMC_TIFM_SD)     += tifm_sd.o
  obj-$(CONFIG_MMC_OMAP)                += omap.o
  obj-$(CONFIG_MMC_AT91)                += at91_mci.o
  obj-$(CONFIG_MMC_TIFM_SD)     += tifm_sd.o
@@ -1497,7 +1497,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #include "bus.h"
  
  #define dev_to_mmc_card(d)    container_of(d, struct mmc_card, dev)
  #include "bus.h"
  
  #define dev_to_mmc_card(d)    container_of(d, struct mmc_card, dev)
-@@ -34,6 +35,8 @@
+@@ -34,6 +35,8 @@ static ssize_t mmc_type_show(struct devi
                return sprintf(buf, "MMC\n");
        case MMC_TYPE_SD:
                return sprintf(buf, "SD\n");
                return sprintf(buf, "MMC\n");
        case MMC_TYPE_SD:
                return sprintf(buf, "SD\n");
@@ -1506,7 +1506,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        default:
                return -EFAULT;
        }
        default:
                return -EFAULT;
        }
-@@ -55,36 +58,37 @@
+@@ -55,36 +58,37 @@ static int mmc_bus_match(struct device *
  }
  
  static int
  }
  
  static int
@@ -1562,7 +1562,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  static int mmc_bus_probe(struct device *dev)
  }
  
  static int mmc_bus_probe(struct device *dev)
-@@ -176,6 +180,11 @@
+@@ -176,6 +180,11 @@ static void mmc_release_card(struct devi
  {
        struct mmc_card *card = dev_to_mmc_card(dev);
  
  {
        struct mmc_card *card = dev_to_mmc_card(dev);
  
@@ -1574,7 +1574,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        kfree(card);
  }
  
        kfree(card);
  }
  
-@@ -221,15 +230,25 @@
+@@ -221,15 +230,25 @@ int mmc_add_card(struct mmc_card *card)
                if (mmc_card_blockaddr(card))
                        type = "SDHC";
                break;
                if (mmc_card_blockaddr(card))
                        type = "SDHC";
                break;
@@ -1604,7 +1604,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        card->dev.uevent_suppress = 1;
  
  
        card->dev.uevent_suppress = 1;
  
-@@ -261,8 +280,13 @@
+@@ -261,8 +280,13 @@ int mmc_add_card(struct mmc_card *card)
  void mmc_remove_card(struct mmc_card *card)
  {
        if (mmc_card_present(card)) {
  void mmc_remove_card(struct mmc_card *card)
  {
        if (mmc_card_present(card)) {
@@ -1659,7 +1659,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
   * Internal function. Schedule delayed work in the MMC work queue.
   */
  static int mmc_schedule_delayed_work(struct delayed_work *work,
   * Internal function. Schedule delayed work in the MMC work queue.
   */
  static int mmc_schedule_delayed_work(struct delayed_work *work,
-@@ -68,6 +79,11 @@
+@@ -68,6 +79,11 @@ void mmc_request_done(struct mmc_host *h
        struct mmc_command *cmd = mrq->cmd;
        int err = cmd->error;
  
        struct mmc_command *cmd = mrq->cmd;
        int err = cmd->error;
  
@@ -1671,7 +1671,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        if (err && cmd->retries) {
                pr_debug("%s: req failed (CMD%u): %d, retrying...\n",
                        mmc_hostname(host), cmd->opcode, err);
        if (err && cmd->retries) {
                pr_debug("%s: req failed (CMD%u): %d, retrying...\n",
                        mmc_hostname(host), cmd->opcode, err);
-@@ -76,6 +92,8 @@
+@@ -76,6 +92,8 @@ void mmc_request_done(struct mmc_host *h
                cmd->error = 0;
                host->ops->request(host, mrq);
        } else {
                cmd->error = 0;
                host->ops->request(host, mrq);
        } else {
@@ -1680,7 +1680,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
                        mmc_hostname(host), cmd->opcode, err,
                        cmd->resp[0], cmd->resp[1],
                pr_debug("%s: req done (CMD%u): %d: %08x %08x %08x %08x\n",
                        mmc_hostname(host), cmd->opcode, err,
                        cmd->resp[0], cmd->resp[1],
-@@ -118,7 +136,7 @@
+@@ -118,7 +136,7 @@ mmc_start_request(struct mmc_host *host,
                        "tsac %d ms nsac %d\n",
                        mmc_hostname(host), mrq->data->blksz,
                        mrq->data->blocks, mrq->data->flags,
                        "tsac %d ms nsac %d\n",
                        mmc_hostname(host), mrq->data->blksz,
                        mrq->data->blocks, mrq->data->flags,
@@ -1689,7 +1689,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        mrq->data->timeout_clks);
        }
  
                        mrq->data->timeout_clks);
        }
  
-@@ -130,6 +148,8 @@
+@@ -130,6 +148,8 @@ mmc_start_request(struct mmc_host *host,
  
        WARN_ON(!host->claimed);
  
  
        WARN_ON(!host->claimed);
  
@@ -1698,7 +1698,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        mrq->cmd->error = 0;
        mrq->cmd->mrq = mrq;
        if (mrq->data) {
        mrq->cmd->error = 0;
        mrq->cmd->mrq = mrq;
        if (mrq->data) {
-@@ -199,7 +219,7 @@
+@@ -199,7 +219,7 @@ int mmc_wait_for_cmd(struct mmc_host *ho
  {
        struct mmc_request mrq;
  
  {
        struct mmc_request mrq;
  
@@ -1707,7 +1707,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        memset(&mrq, 0, sizeof(struct mmc_request));
  
  
        memset(&mrq, 0, sizeof(struct mmc_request));
  
-@@ -220,17 +240,24 @@
+@@ -220,17 +240,24 @@ EXPORT_SYMBOL(mmc_wait_for_cmd);
   *    mmc_set_data_timeout - set the timeout for a data command
   *    @data: data phase for command
   *    @card: the MMC card associated with the data transfer
   *    mmc_set_data_timeout - set the timeout for a data command
   *    @data: data phase for command
   *    @card: the MMC card associated with the data transfer
@@ -1735,7 +1735,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
         * SD cards use a 100 multiplier rather than 10
         */
        mult = mmc_card_sd(card) ? 100 : 10;
         * SD cards use a 100 multiplier rather than 10
         */
        mult = mmc_card_sd(card) ? 100 : 10;
-@@ -239,7 +266,7 @@
+@@ -239,7 +266,7 @@ void mmc_set_data_timeout(struct mmc_dat
         * Scale up the multiplier (and therefore the timeout) by
         * the r2w factor for writes.
         */
         * Scale up the multiplier (and therefore the timeout) by
         * the r2w factor for writes.
         */
@@ -1744,7 +1744,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                mult <<= card->csd.r2w_factor;
  
        data->timeout_ns = card->csd.tacc_ns * mult;
                mult <<= card->csd.r2w_factor;
  
        data->timeout_ns = card->csd.tacc_ns * mult;
-@@ -255,7 +282,7 @@
+@@ -255,7 +282,7 @@ void mmc_set_data_timeout(struct mmc_dat
                timeout_us += data->timeout_clks * 1000 /
                        (card->host->ios.clock / 1000);
  
                timeout_us += data->timeout_clks * 1000 /
                        (card->host->ios.clock / 1000);
  
@@ -1753,7 +1753,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        limit_us = 250000;
                else
                        limit_us = 100000;
                        limit_us = 250000;
                else
                        limit_us = 100000;
-@@ -272,15 +299,20 @@
+@@ -272,15 +299,20 @@ void mmc_set_data_timeout(struct mmc_dat
  EXPORT_SYMBOL(mmc_set_data_timeout);
  
  /**
  EXPORT_SYMBOL(mmc_set_data_timeout);
  
  /**
@@ -1777,7 +1777,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        might_sleep();
  
  
        might_sleep();
  
-@@ -288,19 +320,24 @@
+@@ -288,19 +320,24 @@ void mmc_claim_host(struct mmc_host *hos
        spin_lock_irqsave(&host->lock, flags);
        while (1) {
                set_current_state(TASK_UNINTERRUPTIBLE);
        spin_lock_irqsave(&host->lock, flags);
        while (1) {
                set_current_state(TASK_UNINTERRUPTIBLE);
@@ -1805,7 +1805,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
  /**
   *    mmc_release_host - release a host
  
  /**
   *    mmc_release_host - release a host
-@@ -313,7 +350,7 @@
+@@ -313,7 +350,7 @@ void mmc_release_host(struct mmc_host *h
  {
        unsigned long flags;
  
  {
        unsigned long flags;
  
@@ -1814,7 +1814,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        spin_lock_irqsave(&host->lock, flags);
        host->claimed = 0;
  
        spin_lock_irqsave(&host->lock, flags);
        host->claimed = 0;
-@@ -433,19 +470,32 @@
+@@ -433,19 +470,32 @@ static void mmc_power_up(struct mmc_host
        int bit = fls(host->ocr_avail) - 1;
  
        host->ios.vdd = bit;
        int bit = fls(host->ocr_avail) - 1;
  
        host->ios.vdd = bit;
@@ -1850,7 +1850,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        mmc_delay(2);
  }
  
        mmc_delay(2);
  }
  
-@@ -453,8 +503,10 @@
+@@ -453,8 +503,10 @@ static void mmc_power_off(struct mmc_hos
  {
        host->ios.clock = 0;
        host->ios.vdd = 0;
  {
        host->ios.clock = 0;
        host->ios.vdd = 0;
@@ -1863,7 +1863,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        host->ios.power_mode = MMC_POWER_OFF;
        host->ios.bus_width = MMC_BUS_WIDTH_1;
        host->ios.timing = MMC_TIMING_LEGACY;
        host->ios.power_mode = MMC_POWER_OFF;
        host->ios.bus_width = MMC_BUS_WIDTH_1;
        host->ios.timing = MMC_TIMING_LEGACY;
-@@ -511,7 +563,7 @@
+@@ -511,7 +563,7 @@ void mmc_attach_bus(struct mmc_host *hos
        BUG_ON(!host);
        BUG_ON(!ops);
  
        BUG_ON(!host);
        BUG_ON(!ops);
  
@@ -1872,7 +1872,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        spin_lock_irqsave(&host->lock, flags);
  
  
        spin_lock_irqsave(&host->lock, flags);
  
-@@ -535,8 +587,8 @@
+@@ -535,8 +587,8 @@ void mmc_detach_bus(struct mmc_host *hos
  
        BUG_ON(!host);
  
  
        BUG_ON(!host);
  
@@ -1883,7 +1883,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        spin_lock_irqsave(&host->lock, flags);
  
  
        spin_lock_irqsave(&host->lock, flags);
  
-@@ -564,7 +616,7 @@
+@@ -564,7 +616,7 @@ void mmc_detect_change(struct mmc_host *
  #ifdef CONFIG_MMC_DEBUG
        unsigned long flags;
        spin_lock_irqsave(&host->lock, flags);
  #ifdef CONFIG_MMC_DEBUG
        unsigned long flags;
        spin_lock_irqsave(&host->lock, flags);
@@ -1892,7 +1892,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        spin_unlock_irqrestore(&host->lock, flags);
  #endif
  
        spin_unlock_irqrestore(&host->lock, flags);
  #endif
  
-@@ -597,24 +649,38 @@
+@@ -597,24 +649,38 @@ void mmc_rescan(struct work_struct *work
  
                mmc_send_if_cond(host, host->ocr_avail);
  
  
                mmc_send_if_cond(host, host->ocr_avail);
  
@@ -1944,7 +1944,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        } else {
                if (host->bus_ops->detect && !host->bus_dead)
                        host->bus_ops->detect(host);
        } else {
                if (host->bus_ops->detect && !host->bus_dead)
                        host->bus_ops->detect(host);
-@@ -725,22 +791,38 @@
+@@ -725,22 +791,38 @@ static int __init mmc_init(void)
                return -ENOMEM;
  
        ret = mmc_register_bus();
                return -ENOMEM;
  
        ret = mmc_register_bus();
@@ -1991,7 +1991,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  MODULE_LICENSE("GPL");
 --- a/drivers/mmc/core/core.h
 +++ b/drivers/mmc/core/core.h
  MODULE_LICENSE("GPL");
 --- a/drivers/mmc/core/core.h
 +++ b/drivers/mmc/core/core.h
-@@ -48,5 +48,7 @@
+@@ -48,5 +48,7 @@ void mmc_rescan(struct work_struct *work
  void mmc_start_host(struct mmc_host *host);
  void mmc_stop_host(struct mmc_host *host);
  
  void mmc_start_host(struct mmc_host *host);
  void mmc_stop_host(struct mmc_host *host);
  
@@ -2009,7 +2009,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
  #include <linux/mmc/host.h>
  
  
  #include <linux/mmc/host.h>
  
-@@ -100,6 +101,9 @@
+@@ -100,6 +101,9 @@ int mmc_add_host(struct mmc_host *host)
  {
        int err;
  
  {
        int err;
  
@@ -2019,7 +2019,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        if (!idr_pre_get(&mmc_host_idr, GFP_KERNEL))
                return -ENOMEM;
  
        if (!idr_pre_get(&mmc_host_idr, GFP_KERNEL))
                return -ENOMEM;
  
-@@ -112,6 +116,8 @@
+@@ -112,6 +116,8 @@ int mmc_add_host(struct mmc_host *host)
        snprintf(host->class_dev.bus_id, BUS_ID_SIZE,
                 "mmc%d", host->index);
  
        snprintf(host->class_dev.bus_id, BUS_ID_SIZE,
                 "mmc%d", host->index);
  
@@ -2028,7 +2028,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        err = device_add(&host->class_dev);
        if (err)
                return err;
        err = device_add(&host->class_dev);
        if (err)
                return err;
-@@ -137,6 +143,8 @@
+@@ -137,6 +143,8 @@ void mmc_remove_host(struct mmc_host *ho
  
        device_del(&host->class_dev);
  
  
        device_del(&host->class_dev);
  
@@ -2039,7 +2039,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        spin_unlock(&mmc_host_lock);
 --- a/drivers/mmc/core/mmc.c
 +++ b/drivers/mmc/core/mmc.c
        spin_unlock(&mmc_host_lock);
 --- a/drivers/mmc/core/mmc.c
 +++ b/drivers/mmc/core/mmc.c
-@@ -161,13 +161,12 @@
+@@ -161,13 +161,12 @@ static int mmc_read_ext_csd(struct mmc_c
  {
        int err;
        u8 *ext_csd;
  {
        int err;
        u8 *ext_csd;
@@ -2055,7 +2055,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        /*
         * As the ext_csd is so large and mostly unused, we don't store the
  
        /*
         * As the ext_csd is so large and mostly unused, we don't store the
-@@ -176,13 +175,19 @@
+@@ -176,13 +175,19 @@ static int mmc_read_ext_csd(struct mmc_c
        ext_csd = kmalloc(512, GFP_KERNEL);
        if (!ext_csd) {
                printk(KERN_ERR "%s: could not allocate a buffer to "
        ext_csd = kmalloc(512, GFP_KERNEL);
        if (!ext_csd) {
                printk(KERN_ERR "%s: could not allocate a buffer to "
@@ -2079,7 +2079,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                /*
                 * High capacity cards should have this "magic" size
                 * stored in their CSD.
                /*
                 * High capacity cards should have this "magic" size
                 * stored in their CSD.
-@@ -197,18 +202,30 @@
+@@ -197,18 +202,30 @@ static int mmc_read_ext_csd(struct mmc_c
                                "EXT_CSD, performance might "
                                "suffer.\n",
                                mmc_hostname(card->host));
                                "EXT_CSD, performance might "
                                "suffer.\n",
                                mmc_hostname(card->host));
@@ -2118,7 +2118,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        switch (ext_csd[EXT_CSD_CARD_TYPE]) {
        case EXT_CSD_CARD_TYPE_52 | EXT_CSD_CARD_TYPE_26:
  
        switch (ext_csd[EXT_CSD_CARD_TYPE]) {
        case EXT_CSD_CARD_TYPE_52 | EXT_CSD_CARD_TYPE_26:
-@@ -246,7 +263,7 @@
+@@ -246,7 +263,7 @@ static int mmc_init_card(struct mmc_host
        unsigned int max_dtr;
  
        BUG_ON(!host);
        unsigned int max_dtr;
  
        BUG_ON(!host);
@@ -2127,7 +2127,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        /*
         * Since we're changing the OCR value, we seem to
  
        /*
         * Since we're changing the OCR value, we seem to
-@@ -258,19 +275,33 @@
+@@ -258,19 +275,33 @@ static int mmc_init_card(struct mmc_host
  
        /* The extra bit indicates that we support high capacity */
        err = mmc_send_op_cond(host, ocr | (1 << 30), NULL);
  
        /* The extra bit indicates that we support high capacity */
        err = mmc_send_op_cond(host, ocr | (1 << 30), NULL);
@@ -2165,7 +2165,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
                card = oldcard;
        } else {
  
                card = oldcard;
        } else {
-@@ -278,8 +309,10 @@
+@@ -278,8 +309,10 @@ static int mmc_init_card(struct mmc_host
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
@@ -2177,7 +2177,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
                card->type = MMC_TYPE_MMC;
                card->rca = 1;
  
                card->type = MMC_TYPE_MMC;
                card->rca = 1;
-@@ -287,43 +320,47 @@
+@@ -287,43 +320,47 @@ static int mmc_init_card(struct mmc_host
        }
  
        /*
        }
  
        /*
@@ -2238,7 +2238,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
        }
  
                        goto free_card;
        }
  
-@@ -334,7 +371,7 @@
+@@ -334,7 +371,7 @@ static int mmc_init_card(struct mmc_host
                (host->caps & MMC_CAP_MMC_HIGHSPEED)) {
                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
                        EXT_CSD_HS_TIMING, 1);
                (host->caps & MMC_CAP_MMC_HIGHSPEED)) {
                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
                        EXT_CSD_HS_TIMING, 1);
@@ -2247,7 +2247,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
  
                mmc_card_set_highspeed(card);
                        goto free_card;
  
                mmc_card_set_highspeed(card);
-@@ -363,7 +400,7 @@
+@@ -363,7 +400,7 @@ static int mmc_init_card(struct mmc_host
                (host->caps & MMC_CAP_4_BIT_DATA)) {
                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
                        EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
                (host->caps & MMC_CAP_4_BIT_DATA)) {
                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
                        EXT_CSD_BUS_WIDTH, EXT_CSD_BUS_WIDTH_4);
@@ -2256,7 +2256,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
  
                mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
                        goto free_card;
  
                mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
-@@ -372,14 +409,14 @@
+@@ -372,14 +409,14 @@ static int mmc_init_card(struct mmc_host
        if (!oldcard)
                host->card = card;
  
        if (!oldcard)
                host->card = card;
  
@@ -2273,7 +2273,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  /*
  }
  
  /*
-@@ -413,7 +450,7 @@
+@@ -413,7 +450,7 @@ static void mmc_detect(struct mmc_host *
  
        mmc_release_host(host);
  
  
        mmc_release_host(host);
  
@@ -2282,7 +2282,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                mmc_remove(host);
  
                mmc_claim_host(host);
                mmc_remove(host);
  
                mmc_claim_host(host);
-@@ -480,7 +517,8 @@
+@@ -480,7 +517,8 @@ static void mmc_suspend(struct mmc_host 
        BUG_ON(!host->card);
  
        mmc_claim_host(host);
        BUG_ON(!host->card);
  
        mmc_claim_host(host);
@@ -2292,7 +2292,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_release_host(host);
  }
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_release_host(host);
  }
-@@ -502,7 +540,7 @@
+@@ -502,7 +540,7 @@ static void mmc_resume(struct mmc_host *
        err = mmc_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
  
        err = mmc_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
  
@@ -2301,7 +2301,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                mmc_remove(host);
  
                mmc_claim_host(host);
                mmc_remove(host);
  
                mmc_claim_host(host);
-@@ -536,11 +574,20 @@
+@@ -536,11 +574,20 @@ int mmc_attach_mmc(struct mmc_host *host
        int err;
  
        BUG_ON(!host);
        int err;
  
        BUG_ON(!host);
@@ -2323,7 +2323,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
         * Sanity check the voltages that the card claims to
         * support.
         */
         * Sanity check the voltages that the card claims to
         * support.
         */
-@@ -565,7 +612,7 @@
+@@ -565,7 +612,7 @@ int mmc_attach_mmc(struct mmc_host *host
         * Detect and init the card.
         */
        err = mmc_init_card(host, host->ocr, NULL);
         * Detect and init the card.
         */
        err = mmc_init_card(host, host->ocr, NULL);
@@ -2332,7 +2332,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                goto err;
  
        mmc_release_host(host);
                goto err;
  
        mmc_release_host(host);
-@@ -587,6 +634,6 @@
+@@ -587,6 +634,6 @@ err:
        printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
                mmc_hostname(host), err);
  
        printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
                mmc_hostname(host), err);
  
@@ -2350,7 +2350,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #include <linux/scatterlist.h>
  
  #include <linux/mmc/host.h>
  #include <linux/scatterlist.h>
  
  #include <linux/mmc/host.h>
-@@ -40,10 +39,10 @@
+@@ -40,10 +39,10 @@ static int _mmc_select_card(struct mmc_h
        }
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
        }
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
@@ -2363,7 +2363,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_select_card(struct mmc_card *card)
  }
  
  int mmc_select_card(struct mmc_card *card)
-@@ -63,23 +62,36 @@
+@@ -63,23 +62,36 @@ int mmc_go_idle(struct mmc_host *host)
        int err;
        struct mmc_command cmd;
  
        int err;
        struct mmc_command cmd;
  
@@ -2406,7 +2406,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        return err;
  }
  
        return err;
  }
-@@ -94,23 +106,33 @@
+@@ -94,23 +106,33 @@ int mmc_send_op_cond(struct mmc_host *ho
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = MMC_SEND_OP_COND;
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = MMC_SEND_OP_COND;
@@ -2446,7 +2446,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                *rocr = cmd.resp[0];
  
        return err;
                *rocr = cmd.resp[0];
  
        return err;
-@@ -131,12 +153,12 @@
+@@ -131,12 +153,12 @@ int mmc_all_send_cid(struct mmc_host *ho
        cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
        cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
@@ -2461,7 +2461,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_set_relative_addr(struct mmc_card *card)
  }
  
  int mmc_set_relative_addr(struct mmc_card *card)
-@@ -154,46 +176,52 @@
+@@ -154,46 +176,52 @@ int mmc_set_relative_addr(struct mmc_car
        cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
  
        err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
        cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
  
        err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
@@ -2530,7 +2530,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        memset(&mrq, 0, sizeof(struct mmc_request));
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        memset(&mrq, 0, sizeof(struct mmc_request));
        memset(&cmd, 0, sizeof(struct mmc_command));
-@@ -202,28 +230,117 @@
+@@ -202,28 +230,117 @@ int mmc_send_ext_csd(struct mmc_card *ca
        mrq.cmd = &cmd;
        mrq.data = &data;
  
        mrq.cmd = &cmd;
        mrq.data = &data;
  
@@ -2657,7 +2657,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value)
  }
  
  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value)
-@@ -241,13 +358,13 @@
+@@ -241,13 +358,13 @@ int mmc_switch(struct mmc_card *card, u8
                  (index << 16) |
                  (value << 8) |
                  set;
                  (index << 16) |
                  (value << 8) |
                  set;
@@ -2674,7 +2674,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_send_status(struct mmc_card *card, u32 *status)
  }
  
  int mmc_send_status(struct mmc_card *card, u32 *status)
-@@ -261,16 +378,20 @@
+@@ -261,16 +378,20 @@ int mmc_send_status(struct mmc_card *car
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = MMC_SEND_STATUS;
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = MMC_SEND_STATUS;
@@ -2701,7 +2701,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
 --- a/drivers/mmc/core/mmc_ops.h
 +++ b/drivers/mmc/core/mmc_ops.h
  
 --- a/drivers/mmc/core/mmc_ops.h
 +++ b/drivers/mmc/core/mmc_ops.h
-@@ -22,6 +22,9 @@
+@@ -22,6 +22,9 @@ int mmc_send_csd(struct mmc_card *card, 
  int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd);
  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value);
  int mmc_send_status(struct mmc_card *card, u32 *status);
  int mmc_send_ext_csd(struct mmc_card *card, u8 *ext_csd);
  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value);
  int mmc_send_status(struct mmc_card *card, u32 *status);
@@ -2713,7 +2713,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
 --- a/drivers/mmc/core/sd.c
 +++ b/drivers/mmc/core/sd.c
  
 --- a/drivers/mmc/core/sd.c
 +++ b/drivers/mmc/core/sd.c
-@@ -166,8 +166,6 @@
+@@ -166,8 +166,6 @@ static int mmc_decode_scr(struct mmc_car
        unsigned int scr_struct;
        u32 resp[4];
  
        unsigned int scr_struct;
        u32 resp[4];
  
@@ -2722,7 +2722,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        resp[3] = card->raw_scr[1];
        resp[2] = card->raw_scr[0];
  
        resp[3] = card->raw_scr[1];
        resp[2] = card->raw_scr[0];
  
-@@ -193,30 +191,38 @@
+@@ -193,30 +191,38 @@ static int mmc_read_switch(struct mmc_ca
        u8 *status;
  
        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
        u8 *status;
  
        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
@@ -2767,7 +2767,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                goto out;
        }
  
                goto out;
        }
  
-@@ -238,28 +244,28 @@
+@@ -238,28 +244,28 @@ static int mmc_switch_hs(struct mmc_card
        u8 *status;
  
        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
        u8 *status;
  
        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
@@ -2803,7 +2803,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                goto out;
  
        if ((status[16] & 0xF) != 1) {
                goto out;
  
        if ((status[16] & 0xF) != 1) {
-@@ -292,7 +298,7 @@
+@@ -292,7 +298,7 @@ static int mmc_sd_init_card(struct mmc_h
        unsigned int max_dtr;
  
        BUG_ON(!host);
        unsigned int max_dtr;
  
        BUG_ON(!host);
@@ -2812,7 +2812,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        /*
         * Since we're changing the OCR value, we seem to
  
        /*
         * Since we're changing the OCR value, we seem to
-@@ -309,23 +315,37 @@
+@@ -309,23 +315,37 @@ static int mmc_sd_init_card(struct mmc_h
         * block-addressed SDHC cards.
         */
        err = mmc_send_if_cond(host, ocr);
         * block-addressed SDHC cards.
         */
        err = mmc_send_if_cond(host, ocr);
@@ -2855,7 +2855,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
                card = oldcard;
        } else {
  
                card = oldcard;
        } else {
-@@ -333,32 +353,36 @@
+@@ -333,32 +353,36 @@ static int mmc_sd_init_card(struct mmc_h
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
@@ -2900,7 +2900,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
  
                mmc_decode_cid(card);
                        goto free_card;
  
                mmc_decode_cid(card);
-@@ -367,16 +391,18 @@
+@@ -367,16 +391,18 @@ static int mmc_sd_init_card(struct mmc_h
        /*
         * Select card, as all following commands rely on that.
         */
        /*
         * Select card, as all following commands rely on that.
         */
@@ -2923,7 +2923,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
  
                err = mmc_decode_scr(card);
                        goto free_card;
  
                err = mmc_decode_scr(card);
-@@ -387,7 +413,7 @@
+@@ -387,7 +413,7 @@ static int mmc_sd_init_card(struct mmc_h
                 * Fetch switch information from card.
                 */
                err = mmc_read_switch(card);
                 * Fetch switch information from card.
                 */
                err = mmc_read_switch(card);
@@ -2932,7 +2932,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
        }
  
                        goto free_card;
        }
  
-@@ -395,7 +421,7 @@
+@@ -395,7 +421,7 @@ static int mmc_sd_init_card(struct mmc_h
         * Attempt to change to high-speed (if supported)
         */
        err = mmc_switch_hs(card);
         * Attempt to change to high-speed (if supported)
         */
        err = mmc_switch_hs(card);
@@ -2941,7 +2941,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                goto free_card;
  
        /*
                goto free_card;
  
        /*
-@@ -418,7 +444,7 @@
+@@ -418,7 +444,7 @@ static int mmc_sd_init_card(struct mmc_h
        if ((host->caps & MMC_CAP_4_BIT_DATA) &&
                (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
                err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
        if ((host->caps & MMC_CAP_4_BIT_DATA) &&
                (card->scr.bus_widths & SD_SCR_BUS_WIDTH_4)) {
                err = mmc_app_set_bus_width(card, MMC_BUS_WIDTH_4);
@@ -2950,7 +2950,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        goto free_card;
  
                mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
                        goto free_card;
  
                mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
-@@ -442,14 +468,14 @@
+@@ -442,14 +468,14 @@ static int mmc_sd_init_card(struct mmc_h
        if (!oldcard)
                host->card = card;
  
        if (!oldcard)
                host->card = card;
  
@@ -2967,7 +2967,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  /*
  }
  
  /*
-@@ -483,7 +509,7 @@
+@@ -483,7 +509,7 @@ static void mmc_sd_detect(struct mmc_hos
  
        mmc_release_host(host);
  
  
        mmc_release_host(host);
  
@@ -2976,7 +2976,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                mmc_sd_remove(host);
  
                mmc_claim_host(host);
                mmc_sd_remove(host);
  
                mmc_claim_host(host);
-@@ -552,7 +578,8 @@
+@@ -552,7 +578,8 @@ static void mmc_sd_suspend(struct mmc_ho
        BUG_ON(!host->card);
  
        mmc_claim_host(host);
        BUG_ON(!host->card);
  
        mmc_claim_host(host);
@@ -2986,7 +2986,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_release_host(host);
  }
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_release_host(host);
  }
-@@ -574,7 +601,7 @@
+@@ -574,7 +601,7 @@ static void mmc_sd_resume(struct mmc_hos
        err = mmc_sd_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
  
        err = mmc_sd_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
  
@@ -2995,7 +2995,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                mmc_sd_remove(host);
  
                mmc_claim_host(host);
                mmc_sd_remove(host);
  
                mmc_claim_host(host);
-@@ -608,11 +635,22 @@
+@@ -608,11 +635,22 @@ int mmc_attach_sd(struct mmc_host *host,
        int err;
  
        BUG_ON(!host);
        int err;
  
        BUG_ON(!host);
@@ -3019,7 +3019,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
         * Sanity check the voltages that the card claims to
         * support.
         */
         * Sanity check the voltages that the card claims to
         * support.
         */
-@@ -644,7 +682,7 @@
+@@ -644,7 +682,7 @@ int mmc_attach_sd(struct mmc_host *host,
         * Detect and init the card.
         */
        err = mmc_sd_init_card(host, host->ocr, NULL);
         * Detect and init the card.
         */
        err = mmc_sd_init_card(host, host->ocr, NULL);
@@ -3028,7 +3028,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                goto err;
  
        mmc_release_host(host);
                goto err;
  
        mmc_release_host(host);
-@@ -666,6 +704,6 @@
+@@ -666,6 +704,6 @@ err:
        printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
                mmc_hostname(host), err);
  
        printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
                mmc_hostname(host), err);
  
@@ -3046,7 +3046,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #include <linux/scatterlist.h>
  
  #include <linux/mmc/host.h>
  #include <linux/scatterlist.h>
  
  #include <linux/mmc/host.h>
-@@ -33,21 +32,21 @@
+@@ -33,21 +32,21 @@ static int mmc_app_cmd(struct mmc_host *
  
        if (card) {
                cmd.arg = card->rca << 16;
  
        if (card) {
                cmd.arg = card->rca << 16;
@@ -3074,7 +3074,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  /**
  }
  
  /**
-@@ -73,7 +72,7 @@
+@@ -73,7 +72,7 @@ int mmc_wait_for_app_cmd(struct mmc_host
        BUG_ON(!cmd);
        BUG_ON(retries < 0);
  
        BUG_ON(!cmd);
        BUG_ON(retries < 0);
  
@@ -3083,7 +3083,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        /*
         * We have to resend MMC_APP_CMD for each attempt so
  
        /*
         * We have to resend MMC_APP_CMD for each attempt so
-@@ -83,8 +82,14 @@
+@@ -83,8 +82,14 @@ int mmc_wait_for_app_cmd(struct mmc_host
                memset(&mrq, 0, sizeof(struct mmc_request));
  
                err = mmc_app_cmd(host, card);
                memset(&mrq, 0, sizeof(struct mmc_request));
  
                err = mmc_app_cmd(host, card);
@@ -3099,7 +3099,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
                memset(&mrq, 0, sizeof(struct mmc_request));
  
  
                memset(&mrq, 0, sizeof(struct mmc_request));
  
-@@ -97,8 +102,14 @@
+@@ -97,8 +102,14 @@ int mmc_wait_for_app_cmd(struct mmc_host
                mmc_wait_for_req(host, &mrq);
  
                err = cmd->error;
                mmc_wait_for_req(host, &mrq);
  
                err = cmd->error;
@@ -3115,7 +3115,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        }
  
        return err;
        }
  
        return err;
-@@ -127,14 +138,14 @@
+@@ -127,14 +138,14 @@ int mmc_app_set_bus_width(struct mmc_car
                cmd.arg = SD_BUS_WIDTH_4;
                break;
        default:
                cmd.arg = SD_BUS_WIDTH_4;
                break;
        default:
@@ -3133,7 +3133,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
  }
  
  int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
-@@ -147,23 +158,36 @@
+@@ -147,23 +158,36 @@ int mmc_send_app_op_cond(struct mmc_host
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = SD_APP_OP_COND;
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = SD_APP_OP_COND;
@@ -3176,7 +3176,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                *rocr = cmd.resp[0];
  
        return err;
                *rocr = cmd.resp[0];
  
        return err;
-@@ -174,6 +198,7 @@
+@@ -174,6 +198,7 @@ int mmc_send_if_cond(struct mmc_host *ho
        struct mmc_command cmd;
        int err;
        static const u8 test_pattern = 0xAA;
        struct mmc_command cmd;
        int err;
        static const u8 test_pattern = 0xAA;
@@ -3184,7 +3184,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        /*
         * To support SD 2.0 cards, we must always invoke SD_SEND_IF_COND
  
        /*
         * To support SD 2.0 cards, we must always invoke SD_SEND_IF_COND
-@@ -182,16 +207,21 @@
+@@ -182,16 +207,21 @@ int mmc_send_if_cond(struct mmc_host *ho
         */
        cmd.opcode = SD_SEND_IF_COND;
        cmd.arg = ((ocr & 0xFF8000) != 0) << 8 | test_pattern;
         */
        cmd.opcode = SD_SEND_IF_COND;
        cmd.arg = ((ocr & 0xFF8000) != 0) << 8 | test_pattern;
@@ -3211,7 +3211,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca)
  }
  
  int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca)
-@@ -209,12 +239,12 @@
+@@ -209,12 +239,12 @@ int mmc_send_relative_addr(struct mmc_ho
        cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
        cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
@@ -3226,7 +3226,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_app_send_scr(struct mmc_card *card, u32 *scr)
  }
  
  int mmc_app_send_scr(struct mmc_card *card, u32 *scr)
-@@ -229,8 +259,10 @@
+@@ -229,8 +259,10 @@ int mmc_app_send_scr(struct mmc_card *ca
        BUG_ON(!card->host);
        BUG_ON(!scr);
  
        BUG_ON(!card->host);
        BUG_ON(!scr);
  
@@ -3238,7 +3238,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                return err;
  
        memset(&mrq, 0, sizeof(struct mmc_request));
                return err;
  
        memset(&mrq, 0, sizeof(struct mmc_request));
-@@ -242,7 +274,7 @@
+@@ -242,7 +274,7 @@ int mmc_app_send_scr(struct mmc_card *ca
  
        cmd.opcode = SD_APP_SEND_SCR;
        cmd.arg = 0;
  
        cmd.opcode = SD_APP_SEND_SCR;
        cmd.arg = 0;
@@ -3247,7 +3247,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        data.blksz = 8;
        data.blocks = 1;
  
        data.blksz = 8;
        data.blocks = 1;
-@@ -252,19 +284,19 @@
+@@ -252,19 +284,19 @@ int mmc_app_send_scr(struct mmc_card *ca
  
        sg_init_one(&sg, scr, 8);
  
  
        sg_init_one(&sg, scr, 8);
  
@@ -3273,7 +3273,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  }
  
  int mmc_sd_switch(struct mmc_card *card, int mode, int group,
  }
  
  int mmc_sd_switch(struct mmc_card *card, int mode, int group,
-@@ -278,6 +310,8 @@
+@@ -278,6 +310,8 @@ int mmc_sd_switch(struct mmc_card *card,
        BUG_ON(!card);
        BUG_ON(!card->host);
  
        BUG_ON(!card);
        BUG_ON(!card->host);
  
@@ -3282,7 +3282,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        mode = !!mode;
        value &= 0xF;
  
        mode = !!mode;
        value &= 0xF;
  
-@@ -292,7 +326,7 @@
+@@ -292,7 +326,7 @@ int mmc_sd_switch(struct mmc_card *card,
        cmd.arg = mode << 31 | 0x00FFFFFF;
        cmd.arg &= ~(0xF << (group * 4));
        cmd.arg |= value << (group * 4);
        cmd.arg = mode << 31 | 0x00FFFFFF;
        cmd.arg &= ~(0xF << (group * 4));
        cmd.arg |= value << (group * 4);
@@ -3291,7 +3291,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        data.blksz = 64;
        data.blocks = 1;
  
        data.blksz = 64;
        data.blocks = 1;
-@@ -302,15 +336,15 @@
+@@ -302,15 +336,15 @@ int mmc_sd_switch(struct mmc_card *card,
  
        sg_init_one(&sg, resp, 64);
  
  
        sg_init_one(&sg, resp, 64);
  
@@ -5403,7 +5403,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 +
 --- a/include/linux/mmc/card.h
 +++ b/include/linux/mmc/card.h
 +
 --- a/include/linux/mmc/card.h
 +++ b/include/linux/mmc/card.h
-@@ -55,7 +55,28 @@
+@@ -55,7 +55,28 @@ struct sd_switch_caps {
        unsigned int            hs_max_dtr;
  };
  
        unsigned int            hs_max_dtr;
  };
  
@@ -5432,7 +5432,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
  /*
   * MMC device
  
  /*
   * MMC device
-@@ -67,11 +88,13 @@
+@@ -67,11 +88,13 @@ struct mmc_card {
        unsigned int            type;           /* card type */
  #define MMC_TYPE_MMC          0               /* MMC card */
  #define MMC_TYPE_SD           1               /* SD card */
        unsigned int            type;           /* card type */
  #define MMC_TYPE_MMC          0               /* MMC card */
  #define MMC_TYPE_SD           1               /* SD card */
@@ -5446,7 +5446,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        u32                     raw_cid[4];     /* raw card CID */
        u32                     raw_csd[4];     /* raw card CSD */
        u32                     raw_scr[2];     /* raw card SCR */
        u32                     raw_cid[4];     /* raw card CID */
        u32                     raw_csd[4];     /* raw card CSD */
        u32                     raw_scr[2];     /* raw card SCR */
-@@ -80,10 +103,19 @@
+@@ -80,10 +103,19 @@ struct mmc_card {
        struct mmc_ext_csd      ext_csd;        /* mmc v4 extended card specific */
        struct sd_scr           scr;            /* extra SD information */
        struct sd_switch_caps   sw_caps;        /* switch (CMD6) caps */
        struct mmc_ext_csd      ext_csd;        /* mmc v4 extended card specific */
        struct sd_scr           scr;            /* extra SD information */
        struct sd_switch_caps   sw_caps;        /* switch (CMD6) caps */
@@ -5468,7 +5468,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #define mmc_card_readonly(c)  ((c)->state & MMC_STATE_READONLY)
 --- a/include/linux/mmc/core.h
 +++ b/include/linux/mmc/core.h
  #define mmc_card_readonly(c)  ((c)->state & MMC_STATE_READONLY)
 --- a/include/linux/mmc/core.h
 +++ b/include/linux/mmc/core.h
-@@ -25,14 +25,20 @@
+@@ -25,14 +25,20 @@ struct mmc_command {
  #define MMC_RSP_CRC   (1 << 2)                /* expect valid crc */
  #define MMC_RSP_BUSY  (1 << 3)                /* card may send busy */
  #define MMC_RSP_OPCODE        (1 << 4)                /* response contains opcode */
  #define MMC_RSP_CRC   (1 << 2)                /* expect valid crc */
  #define MMC_RSP_BUSY  (1 << 3)                /* card may send busy */
  #define MMC_RSP_OPCODE        (1 << 4)                /* response contains opcode */
@@ -5491,7 +5491,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
   * patterns of the above flags.  One additional valid pattern
   * is all zeros, which means we don't expect a response.
   */
   * patterns of the above flags.  One additional valid pattern
   * is all zeros, which means we don't expect a response.
   */
-@@ -41,12 +47,30 @@
+@@ -41,12 +47,30 @@ struct mmc_command {
  #define MMC_RSP_R1B   (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
  #define MMC_RSP_R2    (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
  #define MMC_RSP_R3    (MMC_RSP_PRESENT)
  #define MMC_RSP_R1B   (MMC_RSP_PRESENT|MMC_RSP_CRC|MMC_RSP_OPCODE|MMC_RSP_BUSY)
  #define MMC_RSP_R2    (MMC_RSP_PRESENT|MMC_RSP_136|MMC_RSP_CRC)
  #define MMC_RSP_R3    (MMC_RSP_PRESENT)
@@ -5522,7 +5522,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
   * These are the command types.
   */
  #define mmc_cmd_type(cmd)     ((cmd)->flags & MMC_CMD_MASK)
   * These are the command types.
   */
  #define mmc_cmd_type(cmd)     ((cmd)->flags & MMC_CMD_MASK)
-@@ -54,12 +78,19 @@
+@@ -54,12 +78,19 @@ struct mmc_command {
        unsigned int            retries;        /* max number of retries */
        unsigned int            error;          /* command error */
  
        unsigned int            retries;        /* max number of retries */
        unsigned int            error;          /* command error */
  
@@ -5548,7 +5548,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        struct mmc_data         *data;          /* data segment associated with cmd */
        struct mmc_request      *mrq;           /* associated request */
  
        struct mmc_data         *data;          /* data segment associated with cmd */
        struct mmc_request      *mrq;           /* associated request */
-@@ -76,7 +107,6 @@
+@@ -76,7 +107,6 @@ struct mmc_data {
  #define MMC_DATA_WRITE        (1 << 8)
  #define MMC_DATA_READ (1 << 9)
  #define MMC_DATA_STREAM       (1 << 10)
  #define MMC_DATA_WRITE        (1 << 8)
  #define MMC_DATA_READ (1 << 9)
  #define MMC_DATA_STREAM       (1 << 10)
@@ -5556,7 +5556,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        unsigned int            bytes_xfered;
  
  
        unsigned int            bytes_xfered;
  
-@@ -104,9 +134,20 @@
+@@ -104,9 +134,20 @@ extern int mmc_wait_for_cmd(struct mmc_h
  extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
        struct mmc_command *, int);
  
  extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
        struct mmc_command *, int);
  
@@ -5590,7 +5590,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #include <linux/mmc/core.h>
  
  struct mmc_ios {
  #include <linux/mmc/core.h>
  
  struct mmc_ios {
-@@ -51,6 +53,7 @@
+@@ -51,6 +53,7 @@ struct mmc_host_ops {
        void    (*request)(struct mmc_host *host, struct mmc_request *req);
        void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
        int     (*get_ro)(struct mmc_host *host);
        void    (*request)(struct mmc_host *host, struct mmc_request *req);
        void    (*set_ios)(struct mmc_host *host, struct mmc_ios *ios);
        int     (*get_ro)(struct mmc_host *host);
@@ -5598,7 +5598,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  };
  
  struct mmc_card;
  };
  
  struct mmc_card;
-@@ -87,9 +90,10 @@
+@@ -87,9 +90,10 @@ struct mmc_host {
  
  #define MMC_CAP_4_BIT_DATA    (1 << 0)        /* Can the host do 4 bit transfers */
  #define MMC_CAP_MULTIWRITE    (1 << 1)        /* Can accurately report bytes sent to card on error */
  
  #define MMC_CAP_4_BIT_DATA    (1 << 0)        /* Can the host do 4 bit transfers */
  #define MMC_CAP_MULTIWRITE    (1 << 1)        /* Can accurately report bytes sent to card on error */
@@ -5612,7 +5612,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        /* host specific block data */
        unsigned int            max_seg_size;   /* see blk_queue_max_segment_size */
  
        /* host specific block data */
        unsigned int            max_seg_size;   /* see blk_queue_max_segment_size */
-@@ -106,23 +110,30 @@
+@@ -106,23 +110,30 @@ struct mmc_host {
        struct mmc_ios          ios;            /* current io bus settings */
        u32                     ocr;            /* the current OCR setting */
  
        struct mmc_ios          ios;            /* current io bus settings */
        u32                     ocr;            /* the current OCR setting */
  
@@ -5651,7 +5651,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        unsigned long           private[0] ____cacheline_aligned;
  };
  
        unsigned long           private[0] ____cacheline_aligned;
  };
-@@ -137,6 +148,8 @@
+@@ -137,6 +148,8 @@ static inline void *mmc_priv(struct mmc_
        return (void *)host->private;
  }
  
        return (void *)host->private;
  }
  
@@ -5660,7 +5660,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #define mmc_dev(x)    ((x)->parent)
  #define mmc_classdev(x)       (&(x)->class_dev)
  #define mmc_hostname(x)       ((x)->class_dev.bus_id)
  #define mmc_dev(x)    ((x)->parent)
  #define mmc_classdev(x)       (&(x)->class_dev)
  #define mmc_hostname(x)       ((x)->class_dev.bus_id)
-@@ -147,5 +160,11 @@
+@@ -147,5 +160,11 @@ extern int mmc_resume_host(struct mmc_ho
  extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
  extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
  
  extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
  extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
  
@@ -5749,7 +5749,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  /* These are unpacked versions of the actual responses */
  
  struct _mmc_csd {
  /* These are unpacked versions of the actual responses */
  
  struct _mmc_csd {
-@@ -182,6 +207,7 @@
+@@ -182,6 +207,7 @@ struct _mmc_csd {
   */
  #define CCC_BASIC             (1<<0)  /* (0) Basic protocol functions */
                                        /* (CMD0,1,2,3,4,7,9,10,12,13,15) */
   */
  #define CCC_BASIC             (1<<0)  /* (0) Basic protocol functions */
                                        /* (CMD0,1,2,3,4,7,9,10,12,13,15) */
@@ -5757,7 +5757,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #define CCC_STREAM_READ               (1<<1)  /* (1) Stream read commands */
                                        /* (CMD11) */
  #define CCC_BLOCK_READ                (1<<2)  /* (2) Block read commands */
  #define CCC_STREAM_READ               (1<<1)  /* (1) Stream read commands */
                                        /* (CMD11) */
  #define CCC_BLOCK_READ                (1<<2)  /* (2) Block read commands */
-@@ -227,6 +253,7 @@
+@@ -227,6 +253,7 @@ struct _mmc_csd {
  #define EXT_CSD_BUS_WIDTH     183     /* R/W */
  #define EXT_CSD_HS_TIMING     185     /* R/W */
  #define EXT_CSD_CARD_TYPE     196     /* RO */
  #define EXT_CSD_BUS_WIDTH     183     /* R/W */
  #define EXT_CSD_HS_TIMING     185     /* R/W */
  #define EXT_CSD_CARD_TYPE     196     /* RO */
@@ -6117,7 +6117,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 +#endif
 --- a/include/linux/mod_devicetable.h
 +++ b/include/linux/mod_devicetable.h
 +#endif
 --- a/include/linux/mod_devicetable.h
 +++ b/include/linux/mod_devicetable.h
-@@ -22,6 +22,18 @@
+@@ -22,6 +22,18 @@ struct pci_device_id {
  };
  
  
  };
  
  
@@ -6138,7 +6138,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  #define IEEE1394_MATCH_SPECIFIER_ID   0x0004
 --- a/drivers/mmc/card/Kconfig
 +++ b/drivers/mmc/card/Kconfig
  #define IEEE1394_MATCH_SPECIFIER_ID   0x0004
 --- a/drivers/mmc/card/Kconfig
 +++ b/drivers/mmc/card/Kconfig
-@@ -32,3 +32,10 @@
+@@ -32,3 +32,10 @@ config MMC_BLOCK_BOUNCE
  
          If unsure, say Y here.
  
  
          If unsure, say Y here.
  
@@ -6151,7 +6151,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 +
 --- a/drivers/mmc/card/Makefile
 +++ b/drivers/mmc/card/Makefile
 +
 --- a/drivers/mmc/card/Makefile
 +++ b/drivers/mmc/card/Makefile
-@@ -9,3 +9,5 @@
+@@ -9,3 +9,5 @@ endif
  obj-$(CONFIG_MMC_BLOCK)               += mmc_block.o
  mmc_block-objs                        := block.o queue.o
  
  obj-$(CONFIG_MMC_BLOCK)               += mmc_block.o
  mmc_block-objs                        := block.o queue.o
  
@@ -6169,7 +6169,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
  /*
   * There is one mmc_blk_data per slot.
  
  /*
   * There is one mmc_blk_data per slot.
-@@ -80,6 +83,9 @@
+@@ -80,6 +83,9 @@ static void mmc_blk_put(struct mmc_blk_d
        mutex_lock(&open_lock);
        md->usage--;
        if (md->usage == 0) {
        mutex_lock(&open_lock);
        md->usage--;
        if (md->usage == 0) {
@@ -6179,7 +6179,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                put_disk(md->disk);
                kfree(md);
        }
                put_disk(md->disk);
                kfree(md);
        }
-@@ -151,17 +157,19 @@
+@@ -151,17 +157,19 @@ static u32 mmc_sd_num_wr_blocks(struct m
  
        cmd.opcode = MMC_APP_CMD;
        cmd.arg = card->rca << 16;
  
        cmd.opcode = MMC_APP_CMD;
        cmd.arg = card->rca << 16;
@@ -6202,7 +6202,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
        memset(&data, 0, sizeof(struct mmc_data));
  
  
        memset(&data, 0, sizeof(struct mmc_data));
  
-@@ -192,7 +200,7 @@
+@@ -192,7 +200,7 @@ static u32 mmc_sd_num_wr_blocks(struct m
  
        mmc_wait_for_req(card->host, &mrq);
  
  
        mmc_wait_for_req(card->host, &mrq);
  
@@ -6211,7 +6211,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                return (u32)-1;
  
        blocks = ntohl(blocks);
                return (u32)-1;
  
        blocks = ntohl(blocks);
-@@ -220,17 +228,15 @@
+@@ -220,17 +228,15 @@ static int mmc_blk_issue_rq(struct mmc_q
                brq.cmd.arg = req->sector;
                if (!mmc_card_blockaddr(card))
                        brq.cmd.arg <<= 9;
                brq.cmd.arg = req->sector;
                if (!mmc_card_blockaddr(card))
                        brq.cmd.arg <<= 9;
@@ -6231,7 +6231,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                /*
                 * If the host doesn't support multiple block writes, force
                 * block writes to single block. SD cards are excepted from
                /*
                 * If the host doesn't support multiple block writes, force
                 * block writes to single block. SD cards are excepted from
-@@ -243,8 +249,12 @@
+@@ -243,8 +249,12 @@ static int mmc_blk_issue_rq(struct mmc_q
                        brq.data.blocks = 1;
  
                if (brq.data.blocks > 1) {
                        brq.data.blocks = 1;
  
                if (brq.data.blocks > 1) {
@@ -6246,7 +6246,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        readcmd = MMC_READ_MULTIPLE_BLOCK;
                        writecmd = MMC_WRITE_MULTIPLE_BLOCK;
                } else {
                        readcmd = MMC_READ_MULTIPLE_BLOCK;
                        writecmd = MMC_WRITE_MULTIPLE_BLOCK;
                } else {
-@@ -261,6 +271,8 @@
+@@ -261,6 +271,8 @@ static int mmc_blk_issue_rq(struct mmc_q
                        brq.data.flags |= MMC_DATA_WRITE;
                }
  
                        brq.data.flags |= MMC_DATA_WRITE;
                }
  
@@ -6255,7 +6255,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                brq.data.sg = mq->sg;
                brq.data.sg_len = mmc_queue_map_sg(mq);
  
                brq.data.sg = mq->sg;
                brq.data.sg_len = mmc_queue_map_sg(mq);
  
-@@ -302,7 +314,7 @@
+@@ -302,7 +314,7 @@ static int mmc_blk_issue_rq(struct mmc_q
                        goto cmd_err;
                }
  
                        goto cmd_err;
                }
  
@@ -6264,7 +6264,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        do {
                                int err;
  
                        do {
                                int err;
  
-@@ -315,7 +327,13 @@
+@@ -315,7 +327,13 @@ static int mmc_blk_issue_rq(struct mmc_q
                                               req->rq_disk->disk_name, err);
                                        goto cmd_err;
                                }
                                               req->rq_disk->disk_name, err);
                                        goto cmd_err;
                                }
@@ -6279,7 +6279,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
  #if 0
                        if (cmd.resp[0] & ~0x00000900)
  
  #if 0
                        if (cmd.resp[0] & ~0x00000900)
-@@ -394,9 +412,6 @@
+@@ -394,9 +412,6 @@ static int mmc_blk_issue_rq(struct mmc_q
        return 0;
  }
  
        return 0;
  }
  
@@ -6289,7 +6289,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
  static inline int mmc_blk_readonly(struct mmc_card *card)
  {
  
  static inline int mmc_blk_readonly(struct mmc_card *card)
  {
-@@ -510,7 +525,7 @@
+@@ -510,7 +525,7 @@ mmc_blk_set_blksize(struct mmc_blk_data 
        mmc_claim_host(card->host);
        cmd.opcode = MMC_SET_BLOCKLEN;
        cmd.arg = 1 << md->block_bits;
        mmc_claim_host(card->host);
        cmd.opcode = MMC_SET_BLOCKLEN;
        cmd.arg = 1 << md->block_bits;
@@ -6298,7 +6298,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        err = mmc_wait_for_cmd(card->host, &cmd, 5);
        mmc_release_host(card->host);
  
        err = mmc_wait_for_cmd(card->host, &cmd, 5);
        mmc_release_host(card->host);
  
-@@ -562,17 +577,12 @@
+@@ -562,17 +577,12 @@ static void mmc_blk_remove(struct mmc_ca
        struct mmc_blk_data *md = mmc_get_drvdata(card);
  
        if (md) {
        struct mmc_blk_data *md = mmc_get_drvdata(card);
  
        if (md) {
@@ -6339,7 +6339,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  /*
   * Prepare a MMC request. This just filters out odd stuff.
   */
  /*
   * Prepare a MMC request. This just filters out odd stuff.
   */
-@@ -159,6 +166,7 @@
+@@ -159,6 +166,7 @@ int mmc_init_queue(struct mmc_queue *mq,
                                ret = -ENOMEM;
                                goto cleanup_queue;
                        }
                                ret = -ENOMEM;
                                goto cleanup_queue;
                        }
@@ -6347,7 +6347,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
  
                        mq->bounce_sg = kmalloc(sizeof(struct scatterlist) *
                                bouncesz / 512, GFP_KERNEL);
  
                        mq->bounce_sg = kmalloc(sizeof(struct scatterlist) *
                                bouncesz / 512, GFP_KERNEL);
-@@ -166,6 +174,7 @@
+@@ -166,6 +174,7 @@ int mmc_init_queue(struct mmc_queue *mq,
                                ret = -ENOMEM;
                                goto cleanup_queue;
                        }
                                ret = -ENOMEM;
                                goto cleanup_queue;
                        }
@@ -6355,7 +6355,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                }
        }
  #endif
                }
        }
  #endif
-@@ -183,6 +192,7 @@
+@@ -183,6 +192,7 @@ int mmc_init_queue(struct mmc_queue *mq,
                        ret = -ENOMEM;
                        goto cleanup_queue;
                }
                        ret = -ENOMEM;
                        goto cleanup_queue;
                }
@@ -6363,7 +6363,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
        }
  
        init_MUTEX(&mq->thread_sem);
        }
  
        init_MUTEX(&mq->thread_sem);
-@@ -302,12 +312,12 @@
+@@ -302,12 +312,12 @@ static void copy_sg(struct scatterlist *
                BUG_ON(dst_len == 0);
  
                if (dst_size == 0) {
                BUG_ON(dst_len == 0);
  
                if (dst_size == 0) {
@@ -6378,7 +6378,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
                        src_size = src->length;
                }
  
                        src_size = src->length;
                }
  
-@@ -353,9 +363,7 @@
+@@ -353,9 +363,7 @@ unsigned int mmc_queue_map_sg(struct mmc
                return 1;
        }
  
                return 1;
        }
  
@@ -7552,7 +7552,7 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 +MODULE_LICENSE("GPL");
 --- a/drivers/mmc/core/Makefile
 +++ b/drivers/mmc/core/Makefile
 +MODULE_LICENSE("GPL");
 --- a/drivers/mmc/core/Makefile
 +++ b/drivers/mmc/core/Makefile
-@@ -8,5 +8,7 @@
+@@ -8,5 +8,7 @@ endif
  
  obj-$(CONFIG_MMC)             += mmc_core.o
  mmc_core-y                    := core.o sysfs.o bus.o host.o \
  
  obj-$(CONFIG_MMC)             += mmc_core.o
  mmc_core-y                    := core.o sysfs.o bus.o host.o \
This page took 0.06421 seconds and 4 git commands to generate.