refresh generic 2.6.23 patches in upstream style
[openwrt/svn-archive/archive.git] / target / linux / generic-2.6 / patches-2.6.23 / 300-add-mmc-spi-driver.patch
index 33421042ec6c8e730e52a21deb8a13e88c6ece21..528d608d964f3f22aa81e12781ec7d6ebda6c8f6 100644 (file)
@@ -2,11 +2,9 @@ This is a port of the MMC-SPI driver from 2.6.24.3
 --mb
 
 
-Index: linux-2.6.23.17/drivers/mmc/host/Kconfig
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/host/Kconfig
-+++ linux-2.6.23.17/drivers/mmc/host/Kconfig
-@@ -100,3 +100,16 @@ config MMC_TIFM_SD
+--- a/drivers/mmc/host/Kconfig
++++ b/drivers/mmc/host/Kconfig
+@@ -100,3 +100,16 @@
            To compile this driver as a module, choose M here: the
          module will be called tifm_sd.
  
@@ -23,20 +21,16 @@ Index: linux-2.6.23.17/drivers/mmc/host/Kconfig
 +
 +        If unsure, or if your system has no SPI master driver, say N.
 +
-Index: linux-2.6.23.17/drivers/mmc/host/Makefile
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/host/Makefile
-+++ linux-2.6.23.17/drivers/mmc/host/Makefile
-@@ -15,4 +15,5 @@ obj-$(CONFIG_MMC_AU1X)               += au1xmmc.o
+--- a/drivers/mmc/host/Makefile
++++ b/drivers/mmc/host/Makefile
+@@ -15,4 +15,5 @@
  obj-$(CONFIG_MMC_OMAP)                += omap.o
  obj-$(CONFIG_MMC_AT91)                += at91_mci.o
  obj-$(CONFIG_MMC_TIFM_SD)     += tifm_sd.o
 +obj-$(CONFIG_MMC_SPI)         += mmc_spi.o
  
-Index: linux-2.6.23.17/drivers/mmc/host/mmc_spi.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/host/mmc_spi.c
++++ b/drivers/mmc/host/mmc_spi.c
 @@ -0,0 +1,1419 @@
 +/*
 + * mmc_spi.c - Access SD/MMC cards through SPI master controllers
@@ -1457,10 +1451,8 @@ Index: linux-2.6.23.17/drivers/mmc/host/mmc_spi.c
 +              "Hans-Peter Nilsson, Jan Nikitenko");
 +MODULE_DESCRIPTION("SPI SD/MMC host driver");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.23.17/include/linux/spi/mmc_spi.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/include/linux/spi/mmc_spi.h
++++ b/include/linux/spi/mmc_spi.h
 @@ -0,0 +1,33 @@
 +#ifndef __LINUX_SPI_MMC_SPI_H
 +#define __LINUX_SPI_MMC_SPI_H
@@ -1495,10 +1487,8 @@ Index: linux-2.6.23.17/include/linux/spi/mmc_spi.h
 +};
 +
 +#endif /* __LINUX_SPI_MMC_SPI_H */
-Index: linux-2.6.23.17/drivers/mmc/core/bus.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/bus.c
-+++ linux-2.6.23.17/drivers/mmc/core/bus.c
+--- a/drivers/mmc/core/bus.c
++++ b/drivers/mmc/core/bus.c
 @@ -19,6 +19,7 @@
  
  #include "sysfs.h"
@@ -1507,7 +1497,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/bus.c
  #include "bus.h"
  
  #define dev_to_mmc_card(d)    container_of(d, struct mmc_card, dev)
-@@ -34,6 +35,8 @@ static ssize_t mmc_type_show(struct devi
+@@ -34,6 +35,8 @@
                return sprintf(buf, "MMC\n");
        case MMC_TYPE_SD:
                return sprintf(buf, "SD\n");
@@ -1516,7 +1506,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/bus.c
        default:
                return -EFAULT;
        }
-@@ -55,36 +58,37 @@ static int mmc_bus_match(struct device *
+@@ -55,36 +58,37 @@
  }
  
  static int
@@ -1572,7 +1562,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/bus.c
  }
  
  static int mmc_bus_probe(struct device *dev)
-@@ -176,6 +180,11 @@ static void mmc_release_card(struct devi
+@@ -176,6 +180,11 @@
  {
        struct mmc_card *card = dev_to_mmc_card(dev);
  
@@ -1584,7 +1574,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/bus.c
        kfree(card);
  }
  
-@@ -221,15 +230,25 @@ int mmc_add_card(struct mmc_card *card)
+@@ -221,15 +230,25 @@
                if (mmc_card_blockaddr(card))
                        type = "SDHC";
                break;
@@ -1614,7 +1604,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/bus.c
  
        card->dev.uevent_suppress = 1;
  
-@@ -261,8 +280,13 @@ int mmc_add_card(struct mmc_card *card)
+@@ -261,8 +280,13 @@
  void mmc_remove_card(struct mmc_card *card)
  {
        if (mmc_card_present(card)) {
@@ -1630,10 +1620,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/bus.c
  
                if (card->host->bus_ops->sysfs_remove)
                        card->host->bus_ops->sysfs_remove(card->host, card);
-Index: linux-2.6.23.17/drivers/mmc/core/core.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/core.c
-+++ linux-2.6.23.17/drivers/mmc/core/core.c
+--- a/drivers/mmc/core/core.c
++++ b/drivers/mmc/core/core.c
 @@ -18,7 +18,7 @@
  #include <linux/delay.h>
  #include <linux/pagemap.h>
@@ -1671,7 +1659,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
   * Internal function. Schedule delayed work in the MMC work queue.
   */
  static int mmc_schedule_delayed_work(struct delayed_work *work,
-@@ -68,6 +79,11 @@ void mmc_request_done(struct mmc_host *h
+@@ -68,6 +79,11 @@
        struct mmc_command *cmd = mrq->cmd;
        int err = cmd->error;
  
@@ -1683,7 +1671,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
        if (err && cmd->retries) {
                pr_debug("%s: req failed (CMD%u): %d, retrying...\n",
                        mmc_hostname(host), cmd->opcode, err);
-@@ -76,6 +92,8 @@ void mmc_request_done(struct mmc_host *h
+@@ -76,6 +92,8 @@
                cmd->error = 0;
                host->ops->request(host, mrq);
        } else {
@@ -1692,7 +1680,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
                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 @@ mmc_start_request(struct mmc_host *host,
+@@ -118,7 +136,7 @@
                        "tsac %d ms nsac %d\n",
                        mmc_hostname(host), mrq->data->blksz,
                        mrq->data->blocks, mrq->data->flags,
@@ -1701,7 +1689,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
                        mrq->data->timeout_clks);
        }
  
-@@ -130,6 +148,8 @@ mmc_start_request(struct mmc_host *host,
+@@ -130,6 +148,8 @@
  
        WARN_ON(!host->claimed);
  
@@ -1710,7 +1698,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
        mrq->cmd->error = 0;
        mrq->cmd->mrq = mrq;
        if (mrq->data) {
-@@ -199,7 +219,7 @@ int mmc_wait_for_cmd(struct mmc_host *ho
+@@ -199,7 +219,7 @@
  {
        struct mmc_request mrq;
  
@@ -1719,7 +1707,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  
        memset(&mrq, 0, sizeof(struct mmc_request));
  
-@@ -220,17 +240,24 @@ EXPORT_SYMBOL(mmc_wait_for_cmd);
+@@ -220,17 +240,24 @@
   *    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
@@ -1747,7 +1735,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
         * SD cards use a 100 multiplier rather than 10
         */
        mult = mmc_card_sd(card) ? 100 : 10;
-@@ -239,7 +266,7 @@ void mmc_set_data_timeout(struct mmc_dat
+@@ -239,7 +266,7 @@
         * Scale up the multiplier (and therefore the timeout) by
         * the r2w factor for writes.
         */
@@ -1756,7 +1744,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
                mult <<= card->csd.r2w_factor;
  
        data->timeout_ns = card->csd.tacc_ns * mult;
-@@ -255,7 +282,7 @@ void mmc_set_data_timeout(struct mmc_dat
+@@ -255,7 +282,7 @@
                timeout_us += data->timeout_clks * 1000 /
                        (card->host->ios.clock / 1000);
  
@@ -1765,7 +1753,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
                        limit_us = 250000;
                else
                        limit_us = 100000;
-@@ -272,15 +299,20 @@ void mmc_set_data_timeout(struct mmc_dat
+@@ -272,15 +299,20 @@
  EXPORT_SYMBOL(mmc_set_data_timeout);
  
  /**
@@ -1789,7 +1777,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  
        might_sleep();
  
-@@ -288,19 +320,24 @@ void mmc_claim_host(struct mmc_host *hos
+@@ -288,19 +320,24 @@
        spin_lock_irqsave(&host->lock, flags);
        while (1) {
                set_current_state(TASK_UNINTERRUPTIBLE);
@@ -1817,7 +1805,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  
  /**
   *    mmc_release_host - release a host
-@@ -313,7 +350,7 @@ void mmc_release_host(struct mmc_host *h
+@@ -313,7 +350,7 @@
  {
        unsigned long flags;
  
@@ -1826,7 +1814,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  
        spin_lock_irqsave(&host->lock, flags);
        host->claimed = 0;
-@@ -433,19 +470,32 @@ static void mmc_power_up(struct mmc_host
+@@ -433,19 +470,32 @@
        int bit = fls(host->ocr_avail) - 1;
  
        host->ios.vdd = bit;
@@ -1862,7 +1850,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
        mmc_delay(2);
  }
  
-@@ -453,8 +503,10 @@ static void mmc_power_off(struct mmc_hos
+@@ -453,8 +503,10 @@
  {
        host->ios.clock = 0;
        host->ios.vdd = 0;
@@ -1875,7 +1863,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
        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 @@ void mmc_attach_bus(struct mmc_host *hos
+@@ -511,7 +563,7 @@
        BUG_ON(!host);
        BUG_ON(!ops);
  
@@ -1884,7 +1872,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  
        spin_lock_irqsave(&host->lock, flags);
  
-@@ -535,8 +587,8 @@ void mmc_detach_bus(struct mmc_host *hos
+@@ -535,8 +587,8 @@
  
        BUG_ON(!host);
  
@@ -1895,7 +1883,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  
        spin_lock_irqsave(&host->lock, flags);
  
-@@ -564,7 +616,7 @@ void mmc_detect_change(struct mmc_host *
+@@ -564,7 +616,7 @@
  #ifdef CONFIG_MMC_DEBUG
        unsigned long flags;
        spin_lock_irqsave(&host->lock, flags);
@@ -1904,7 +1892,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
        spin_unlock_irqrestore(&host->lock, flags);
  #endif
  
-@@ -597,24 +649,38 @@ void mmc_rescan(struct work_struct *work
+@@ -597,24 +649,38 @@
  
                mmc_send_if_cond(host, host->ocr_avail);
  
@@ -1956,7 +1944,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
        } else {
                if (host->bus_ops->detect && !host->bus_dead)
                        host->bus_ops->detect(host);
-@@ -725,22 +791,38 @@ static int __init mmc_init(void)
+@@ -725,22 +791,38 @@
                return -ENOMEM;
  
        ret = mmc_register_bus();
@@ -2001,11 +1989,9 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.c
  module_exit(mmc_exit);
  
  MODULE_LICENSE("GPL");
-Index: linux-2.6.23.17/drivers/mmc/core/core.h
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/core.h
-+++ linux-2.6.23.17/drivers/mmc/core/core.h
-@@ -48,5 +48,7 @@ void mmc_rescan(struct work_struct *work
+--- a/drivers/mmc/core/core.h
++++ b/drivers/mmc/core/core.h
+@@ -48,5 +48,7 @@
  void mmc_start_host(struct mmc_host *host);
  void mmc_stop_host(struct mmc_host *host);
  
@@ -2013,10 +1999,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/core.h
 +
  #endif
  
-Index: linux-2.6.23.17/drivers/mmc/core/host.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/host.c
-+++ linux-2.6.23.17/drivers/mmc/core/host.c
+--- a/drivers/mmc/core/host.c
++++ b/drivers/mmc/core/host.c
 @@ -15,6 +15,7 @@
  #include <linux/err.h>
  #include <linux/idr.h>
@@ -2025,7 +2009,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/host.c
  
  #include <linux/mmc/host.h>
  
-@@ -100,6 +101,9 @@ int mmc_add_host(struct mmc_host *host)
+@@ -100,6 +101,9 @@
  {
        int err;
  
@@ -2035,7 +2019,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/host.c
        if (!idr_pre_get(&mmc_host_idr, GFP_KERNEL))
                return -ENOMEM;
  
-@@ -112,6 +116,8 @@ int mmc_add_host(struct mmc_host *host)
+@@ -112,6 +116,8 @@
        snprintf(host->class_dev.bus_id, BUS_ID_SIZE,
                 "mmc%d", host->index);
  
@@ -2044,7 +2028,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/host.c
        err = device_add(&host->class_dev);
        if (err)
                return err;
-@@ -137,6 +143,8 @@ void mmc_remove_host(struct mmc_host *ho
+@@ -137,6 +143,8 @@
  
        device_del(&host->class_dev);
  
@@ -2053,11 +2037,9 @@ Index: linux-2.6.23.17/drivers/mmc/core/host.c
        spin_lock(&mmc_host_lock);
        idr_remove(&mmc_host_idr, host->index);
        spin_unlock(&mmc_host_lock);
-Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/mmc.c
-+++ linux-2.6.23.17/drivers/mmc/core/mmc.c
-@@ -161,13 +161,12 @@ static int mmc_read_ext_csd(struct mmc_c
+--- a/drivers/mmc/core/mmc.c
++++ b/drivers/mmc/core/mmc.c
+@@ -161,13 +161,12 @@
  {
        int err;
        u8 *ext_csd;
@@ -2073,7 +2055,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
  
        /*
         * As the ext_csd is so large and mostly unused, we don't store the
-@@ -176,13 +175,19 @@ static int mmc_read_ext_csd(struct mmc_c
+@@ -176,13 +175,19 @@
        ext_csd = kmalloc(512, GFP_KERNEL);
        if (!ext_csd) {
                printk(KERN_ERR "%s: could not allocate a buffer to "
@@ -2097,7 +2079,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                /*
                 * High capacity cards should have this "magic" size
                 * stored in their CSD.
-@@ -197,18 +202,30 @@ static int mmc_read_ext_csd(struct mmc_c
+@@ -197,18 +202,30 @@
                                "EXT_CSD, performance might "
                                "suffer.\n",
                                mmc_hostname(card->host));
@@ -2136,7 +2118,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
  
        switch (ext_csd[EXT_CSD_CARD_TYPE]) {
        case EXT_CSD_CARD_TYPE_52 | EXT_CSD_CARD_TYPE_26:
-@@ -246,7 +263,7 @@ static int mmc_init_card(struct mmc_host
+@@ -246,7 +263,7 @@
        unsigned int max_dtr;
  
        BUG_ON(!host);
@@ -2145,7 +2127,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
  
        /*
         * Since we're changing the OCR value, we seem to
-@@ -258,19 +275,33 @@ static int mmc_init_card(struct mmc_host
+@@ -258,19 +275,33 @@
  
        /* The extra bit indicates that we support high capacity */
        err = mmc_send_op_cond(host, ocr | (1 << 30), NULL);
@@ -2183,7 +2165,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
  
                card = oldcard;
        } else {
-@@ -278,8 +309,10 @@ static int mmc_init_card(struct mmc_host
+@@ -278,8 +309,10 @@
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
@@ -2195,7 +2177,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
  
                card->type = MMC_TYPE_MMC;
                card->rca = 1;
-@@ -287,43 +320,47 @@ static int mmc_init_card(struct mmc_host
+@@ -287,43 +320,47 @@
        }
  
        /*
@@ -2256,7 +2238,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                        goto free_card;
        }
  
-@@ -334,7 +371,7 @@ static int mmc_init_card(struct mmc_host
+@@ -334,7 +371,7 @@
                (host->caps & MMC_CAP_MMC_HIGHSPEED)) {
                err = mmc_switch(card, EXT_CSD_CMD_SET_NORMAL,
                        EXT_CSD_HS_TIMING, 1);
@@ -2265,7 +2247,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                        goto free_card;
  
                mmc_card_set_highspeed(card);
-@@ -363,7 +400,7 @@ static int mmc_init_card(struct mmc_host
+@@ -363,7 +400,7 @@
                (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);
@@ -2274,7 +2256,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                        goto free_card;
  
                mmc_set_bus_width(card->host, MMC_BUS_WIDTH_4);
-@@ -372,14 +409,14 @@ static int mmc_init_card(struct mmc_host
+@@ -372,14 +409,14 @@
        if (!oldcard)
                host->card = card;
  
@@ -2291,7 +2273,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
  }
  
  /*
-@@ -413,7 +450,7 @@ static void mmc_detect(struct mmc_host *
+@@ -413,7 +450,7 @@
  
        mmc_release_host(host);
  
@@ -2300,7 +2282,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                mmc_remove(host);
  
                mmc_claim_host(host);
-@@ -480,7 +517,8 @@ static void mmc_suspend(struct mmc_host 
+@@ -480,7 +517,8 @@
        BUG_ON(!host->card);
  
        mmc_claim_host(host);
@@ -2310,7 +2292,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_release_host(host);
  }
-@@ -502,7 +540,7 @@ static void mmc_resume(struct mmc_host *
+@@ -502,7 +540,7 @@
        err = mmc_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
  
@@ -2319,7 +2301,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                mmc_remove(host);
  
                mmc_claim_host(host);
-@@ -536,11 +574,20 @@ int mmc_attach_mmc(struct mmc_host *host
+@@ -536,11 +574,20 @@
        int err;
  
        BUG_ON(!host);
@@ -2341,7 +2323,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
         * Sanity check the voltages that the card claims to
         * support.
         */
-@@ -565,7 +612,7 @@ int mmc_attach_mmc(struct mmc_host *host
+@@ -565,7 +612,7 @@
         * Detect and init the card.
         */
        err = mmc_init_card(host, host->ocr, NULL);
@@ -2350,7 +2332,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
                goto err;
  
        mmc_release_host(host);
-@@ -587,6 +634,6 @@ err:
+@@ -587,6 +634,6 @@
        printk(KERN_ERR "%s: error %d whilst initialising MMC card\n",
                mmc_hostname(host), err);
  
@@ -2358,10 +2340,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc.c
 +      return err;
  }
  
-Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/mmc_ops.c
-+++ linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
+--- a/drivers/mmc/core/mmc_ops.c
++++ b/drivers/mmc/core/mmc_ops.c
 @@ -10,7 +10,6 @@
   */
  
@@ -2370,7 +2350,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  #include <linux/scatterlist.h>
  
  #include <linux/mmc/host.h>
-@@ -40,10 +39,10 @@ static int _mmc_select_card(struct mmc_h
+@@ -40,10 +39,10 @@
        }
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
@@ -2383,7 +2363,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  }
  
  int mmc_select_card(struct mmc_card *card)
-@@ -63,23 +62,36 @@ int mmc_go_idle(struct mmc_host *host)
+@@ -63,23 +62,36 @@
        int err;
        struct mmc_command cmd;
  
@@ -2426,7 +2406,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  
        return err;
  }
-@@ -94,23 +106,33 @@ int mmc_send_op_cond(struct mmc_host *ho
+@@ -94,23 +106,33 @@
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = MMC_SEND_OP_COND;
@@ -2466,7 +2446,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
                *rocr = cmd.resp[0];
  
        return err;
-@@ -131,12 +153,12 @@ int mmc_all_send_cid(struct mmc_host *ho
+@@ -131,12 +153,12 @@
        cmd.flags = MMC_RSP_R2 | MMC_CMD_BCR;
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
@@ -2481,7 +2461,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  }
  
  int mmc_set_relative_addr(struct mmc_card *card)
-@@ -154,46 +176,52 @@ int mmc_set_relative_addr(struct mmc_car
+@@ -154,46 +176,52 @@
        cmd.flags = MMC_RSP_R1 | MMC_CMD_AC;
  
        err = mmc_wait_for_cmd(card->host, &cmd, MMC_CMD_RETRIES);
@@ -2550,7 +2530,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  
        memset(&mrq, 0, sizeof(struct mmc_request));
        memset(&cmd, 0, sizeof(struct mmc_command));
-@@ -202,28 +230,117 @@ int mmc_send_ext_csd(struct mmc_card *ca
+@@ -202,28 +230,117 @@
        mrq.cmd = &cmd;
        mrq.data = &data;
  
@@ -2677,7 +2657,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  }
  
  int mmc_switch(struct mmc_card *card, u8 set, u8 index, u8 value)
-@@ -241,13 +358,13 @@ int mmc_switch(struct mmc_card *card, u8
+@@ -241,13 +358,13 @@
                  (index << 16) |
                  (value << 8) |
                  set;
@@ -2694,7 +2674,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
  }
  
  int mmc_send_status(struct mmc_card *card, u32 *status)
-@@ -261,16 +378,20 @@ int mmc_send_status(struct mmc_card *car
+@@ -261,16 +378,20 @@
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = MMC_SEND_STATUS;
@@ -2719,11 +2699,9 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.c
 +      return 0;
  }
  
-Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.h
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/mmc_ops.h
-+++ linux-2.6.23.17/drivers/mmc/core/mmc_ops.h
-@@ -22,6 +22,9 @@ int mmc_send_csd(struct mmc_card *card, 
+--- a/drivers/mmc/core/mmc_ops.h
++++ b/drivers/mmc/core/mmc_ops.h
+@@ -22,6 +22,9 @@
  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);
@@ -2733,11 +2711,9 @@ Index: linux-2.6.23.17/drivers/mmc/core/mmc_ops.h
  
  #endif
  
-Index: linux-2.6.23.17/drivers/mmc/core/sd.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/sd.c
-+++ linux-2.6.23.17/drivers/mmc/core/sd.c
-@@ -166,8 +166,6 @@ static int mmc_decode_scr(struct mmc_car
+--- a/drivers/mmc/core/sd.c
++++ b/drivers/mmc/core/sd.c
+@@ -166,8 +166,6 @@
        unsigned int scr_struct;
        u32 resp[4];
  
@@ -2746,7 +2722,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
        resp[3] = card->raw_scr[1];
        resp[2] = card->raw_scr[0];
  
-@@ -193,30 +191,38 @@ static int mmc_read_switch(struct mmc_ca
+@@ -193,30 +191,38 @@
        u8 *status;
  
        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
@@ -2791,7 +2767,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                goto out;
        }
  
-@@ -238,28 +244,28 @@ static int mmc_switch_hs(struct mmc_card
+@@ -238,28 +244,28 @@
        u8 *status;
  
        if (card->scr.sda_vsn < SCR_SPEC_VER_1)
@@ -2827,7 +2803,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                goto out;
  
        if ((status[16] & 0xF) != 1) {
-@@ -292,7 +298,7 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -292,7 +298,7 @@
        unsigned int max_dtr;
  
        BUG_ON(!host);
@@ -2836,7 +2812,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
  
        /*
         * Since we're changing the OCR value, we seem to
-@@ -309,23 +315,37 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -309,23 +315,37 @@
         * block-addressed SDHC cards.
         */
        err = mmc_send_if_cond(host, ocr);
@@ -2879,7 +2855,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
  
                card = oldcard;
        } else {
-@@ -333,32 +353,36 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -333,32 +353,36 @@
                 * Allocate card structure.
                 */
                card = mmc_alloc_card(host);
@@ -2924,7 +2900,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                        goto free_card;
  
                mmc_decode_cid(card);
-@@ -367,16 +391,18 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -367,16 +391,18 @@
        /*
         * Select card, as all following commands rely on that.
         */
@@ -2947,7 +2923,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                        goto free_card;
  
                err = mmc_decode_scr(card);
-@@ -387,7 +413,7 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -387,7 +413,7 @@
                 * Fetch switch information from card.
                 */
                err = mmc_read_switch(card);
@@ -2956,7 +2932,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                        goto free_card;
        }
  
-@@ -395,7 +421,7 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -395,7 +421,7 @@
         * Attempt to change to high-speed (if supported)
         */
        err = mmc_switch_hs(card);
@@ -2965,7 +2941,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                goto free_card;
  
        /*
-@@ -418,7 +444,7 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -418,7 +444,7 @@
        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);
@@ -2974,7 +2950,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                        goto free_card;
  
                mmc_set_bus_width(host, MMC_BUS_WIDTH_4);
-@@ -442,14 +468,14 @@ static int mmc_sd_init_card(struct mmc_h
+@@ -442,14 +468,14 @@
        if (!oldcard)
                host->card = card;
  
@@ -2991,7 +2967,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
  }
  
  /*
-@@ -483,7 +509,7 @@ static void mmc_sd_detect(struct mmc_hos
+@@ -483,7 +509,7 @@
  
        mmc_release_host(host);
  
@@ -3000,7 +2976,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                mmc_sd_remove(host);
  
                mmc_claim_host(host);
-@@ -552,7 +578,8 @@ static void mmc_sd_suspend(struct mmc_ho
+@@ -552,7 +578,8 @@
        BUG_ON(!host->card);
  
        mmc_claim_host(host);
@@ -3010,7 +2986,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
        host->card->state &= ~MMC_STATE_HIGHSPEED;
        mmc_release_host(host);
  }
-@@ -574,7 +601,7 @@ static void mmc_sd_resume(struct mmc_hos
+@@ -574,7 +601,7 @@
        err = mmc_sd_init_card(host, host->ocr, host->card);
        mmc_release_host(host);
  
@@ -3019,7 +2995,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                mmc_sd_remove(host);
  
                mmc_claim_host(host);
-@@ -608,11 +635,22 @@ int mmc_attach_sd(struct mmc_host *host,
+@@ -608,11 +635,22 @@
        int err;
  
        BUG_ON(!host);
@@ -3043,7 +3019,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
         * Sanity check the voltages that the card claims to
         * support.
         */
-@@ -644,7 +682,7 @@ int mmc_attach_sd(struct mmc_host *host,
+@@ -644,7 +682,7 @@
         * Detect and init the card.
         */
        err = mmc_sd_init_card(host, host->ocr, NULL);
@@ -3052,7 +3028,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
                goto err;
  
        mmc_release_host(host);
-@@ -666,6 +704,6 @@ err:
+@@ -666,6 +704,6 @@
        printk(KERN_ERR "%s: error %d whilst initialising SD card\n",
                mmc_hostname(host), err);
  
@@ -3060,10 +3036,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd.c
 +      return err;
  }
  
-Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/sd_ops.c
-+++ linux-2.6.23.17/drivers/mmc/core/sd_ops.c
+--- a/drivers/mmc/core/sd_ops.c
++++ b/drivers/mmc/core/sd_ops.c
 @@ -10,7 +10,6 @@
   */
  
@@ -3072,7 +3046,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  #include <linux/scatterlist.h>
  
  #include <linux/mmc/host.h>
-@@ -33,21 +32,21 @@ static int mmc_app_cmd(struct mmc_host *
+@@ -33,21 +32,21 @@
  
        if (card) {
                cmd.arg = card->rca << 16;
@@ -3100,7 +3074,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  }
  
  /**
-@@ -73,7 +72,7 @@ int mmc_wait_for_app_cmd(struct mmc_host
+@@ -73,7 +72,7 @@
        BUG_ON(!cmd);
        BUG_ON(retries < 0);
  
@@ -3109,7 +3083,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  
        /*
         * We have to resend MMC_APP_CMD for each attempt so
-@@ -83,8 +82,14 @@ int mmc_wait_for_app_cmd(struct mmc_host
+@@ -83,8 +82,14 @@
                memset(&mrq, 0, sizeof(struct mmc_request));
  
                err = mmc_app_cmd(host, card);
@@ -3125,7 +3099,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  
                memset(&mrq, 0, sizeof(struct mmc_request));
  
-@@ -97,8 +102,14 @@ int mmc_wait_for_app_cmd(struct mmc_host
+@@ -97,8 +102,14 @@
                mmc_wait_for_req(host, &mrq);
  
                err = cmd->error;
@@ -3141,7 +3115,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
        }
  
        return err;
-@@ -127,14 +138,14 @@ int mmc_app_set_bus_width(struct mmc_car
+@@ -127,14 +138,14 @@
                cmd.arg = SD_BUS_WIDTH_4;
                break;
        default:
@@ -3159,7 +3133,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  }
  
  int mmc_send_app_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr)
-@@ -147,23 +158,36 @@ int mmc_send_app_op_cond(struct mmc_host
+@@ -147,23 +158,36 @@
        memset(&cmd, 0, sizeof(struct mmc_command));
  
        cmd.opcode = SD_APP_OP_COND;
@@ -3202,7 +3176,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
                *rocr = cmd.resp[0];
  
        return err;
-@@ -174,6 +198,7 @@ int mmc_send_if_cond(struct mmc_host *ho
+@@ -174,6 +198,7 @@
        struct mmc_command cmd;
        int err;
        static const u8 test_pattern = 0xAA;
@@ -3210,7 +3184,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  
        /*
         * To support SD 2.0 cards, we must always invoke SD_SEND_IF_COND
-@@ -182,16 +207,21 @@ int mmc_send_if_cond(struct mmc_host *ho
+@@ -182,16 +207,21 @@
         */
        cmd.opcode = SD_SEND_IF_COND;
        cmd.arg = ((ocr & 0xFF8000) != 0) << 8 | test_pattern;
@@ -3237,7 +3211,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  }
  
  int mmc_send_relative_addr(struct mmc_host *host, unsigned int *rca)
-@@ -209,12 +239,12 @@ int mmc_send_relative_addr(struct mmc_ho
+@@ -209,12 +239,12 @@
        cmd.flags = MMC_RSP_R6 | MMC_CMD_BCR;
  
        err = mmc_wait_for_cmd(host, &cmd, MMC_CMD_RETRIES);
@@ -3252,7 +3226,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  }
  
  int mmc_app_send_scr(struct mmc_card *card, u32 *scr)
-@@ -229,8 +259,10 @@ int mmc_app_send_scr(struct mmc_card *ca
+@@ -229,8 +259,10 @@
        BUG_ON(!card->host);
        BUG_ON(!scr);
  
@@ -3264,7 +3238,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
                return err;
  
        memset(&mrq, 0, sizeof(struct mmc_request));
-@@ -242,7 +274,7 @@ int mmc_app_send_scr(struct mmc_card *ca
+@@ -242,7 +274,7 @@
  
        cmd.opcode = SD_APP_SEND_SCR;
        cmd.arg = 0;
@@ -3273,7 +3247,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  
        data.blksz = 8;
        data.blocks = 1;
-@@ -252,19 +284,19 @@ int mmc_app_send_scr(struct mmc_card *ca
+@@ -252,19 +284,19 @@
  
        sg_init_one(&sg, scr, 8);
  
@@ -3299,7 +3273,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  }
  
  int mmc_sd_switch(struct mmc_card *card, int mode, int group,
-@@ -278,6 +310,8 @@ int mmc_sd_switch(struct mmc_card *card,
+@@ -278,6 +310,8 @@
        BUG_ON(!card);
        BUG_ON(!card->host);
  
@@ -3308,7 +3282,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
        mode = !!mode;
        value &= 0xF;
  
-@@ -292,7 +326,7 @@ int mmc_sd_switch(struct mmc_card *card,
+@@ -292,7 +326,7 @@
        cmd.arg = mode << 31 | 0x00FFFFFF;
        cmd.arg &= ~(0xF << (group * 4));
        cmd.arg |= value << (group * 4);
@@ -3317,7 +3291,7 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
  
        data.blksz = 64;
        data.blocks = 1;
-@@ -302,15 +336,15 @@ int mmc_sd_switch(struct mmc_card *card,
+@@ -302,15 +336,15 @@
  
        sg_init_one(&sg, resp, 64);
  
@@ -3337,10 +3311,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sd_ops.c
 +      return 0;
  }
  
-Index: linux-2.6.23.17/drivers/mmc/core/sdio.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio.c
++++ b/drivers/mmc/core/sdio.c
 @@ -0,0 +1,395 @@
 +/*
 + *  linux/drivers/mmc/sdio.c
@@ -3737,10 +3709,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio.c
 +      return err;
 +}
 +
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_bus.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_bus.c
++++ b/drivers/mmc/core/sdio_bus.c
 @@ -0,0 +1,265 @@
 +/*
 + *  linux/drivers/mmc/core/sdio_bus.c
@@ -4007,10 +3977,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_bus.c
 +      put_device(&func->dev);
 +}
 +
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_bus.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_bus.h
++++ b/drivers/mmc/core/sdio_bus.h
 @@ -0,0 +1,22 @@
 +/*
 + *  linux/drivers/mmc/core/sdio_bus.h
@@ -4034,10 +4002,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_bus.h
 +
 +#endif
 +
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_cis.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_cis.c
++++ b/drivers/mmc/core/sdio_cis.c
 @@ -0,0 +1,346 @@
 +/*
 + * linux/drivers/mmc/core/sdio_cis.c
@@ -4385,10 +4351,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_cis.c
 +      put_device(&func->card->dev);
 +}
 +
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_cis.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_cis.h
++++ b/drivers/mmc/core/sdio_cis.h
 @@ -0,0 +1,23 @@
 +/*
 + * linux/drivers/mmc/core/sdio_cis.h
@@ -4413,10 +4377,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_cis.h
 +void sdio_free_func_cis(struct sdio_func *func);
 +
 +#endif
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_io.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_io.c
++++ b/drivers/mmc/core/sdio_io.c
 @@ -0,0 +1,548 @@
 +/*
 + *  linux/drivers/mmc/core/sdio_io.c
@@ -4966,10 +4928,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_io.c
 +              *err_ret = ret;
 +}
 +EXPORT_SYMBOL_GPL(sdio_f0_writeb);
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_irq.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_irq.c
++++ b/drivers/mmc/core/sdio_irq.c
 @@ -0,0 +1,267 @@
 +/*
 + * linux/drivers/mmc/core/sdio_irq.c
@@ -5238,10 +5198,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_irq.c
 +}
 +EXPORT_SYMBOL_GPL(sdio_release_irq);
 +
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_ops.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_ops.c
++++ b/drivers/mmc/core/sdio_ops.c
 @@ -0,0 +1,175 @@
 +/*
 + *  linux/drivers/mmc/sdio_ops.c
@@ -5418,10 +5376,8 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_ops.c
 +      return 0;
 +}
 +
-Index: linux-2.6.23.17/drivers/mmc/core/sdio_ops.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/core/sdio_ops.h
++++ b/drivers/mmc/core/sdio_ops.h
 @@ -0,0 +1,22 @@
 +/*
 + *  linux/drivers/mmc/sdio_ops.c
@@ -5445,11 +5401,9 @@ Index: linux-2.6.23.17/drivers/mmc/core/sdio_ops.h
 +
 +#endif
 +
-Index: linux-2.6.23.17/include/linux/mmc/card.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mmc/card.h
-+++ linux-2.6.23.17/include/linux/mmc/card.h
-@@ -55,7 +55,28 @@ struct sd_switch_caps {
+--- a/include/linux/mmc/card.h
++++ b/include/linux/mmc/card.h
+@@ -55,7 +55,28 @@
        unsigned int            hs_max_dtr;
  };
  
@@ -5478,7 +5432,7 @@ Index: linux-2.6.23.17/include/linux/mmc/card.h
  
  /*
   * MMC device
-@@ -67,11 +88,13 @@ struct mmc_card {
+@@ -67,11 +88,13 @@
        unsigned int            type;           /* card type */
  #define MMC_TYPE_MMC          0               /* MMC card */
  #define MMC_TYPE_SD           1               /* SD card */
@@ -5492,7 +5446,7 @@ Index: linux-2.6.23.17/include/linux/mmc/card.h
        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 @@ struct mmc_card {
+@@ -80,10 +103,19 @@
        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 */
@@ -5512,11 +5466,9 @@ Index: linux-2.6.23.17/include/linux/mmc/card.h
  
  #define mmc_card_present(c)   ((c)->state & MMC_STATE_PRESENT)
  #define mmc_card_readonly(c)  ((c)->state & MMC_STATE_READONLY)
-Index: linux-2.6.23.17/include/linux/mmc/core.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mmc/core.h
-+++ linux-2.6.23.17/include/linux/mmc/core.h
-@@ -25,14 +25,20 @@ struct mmc_command {
+--- a/include/linux/mmc/core.h
++++ b/include/linux/mmc/core.h
+@@ -25,14 +25,20 @@
  #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 */
@@ -5539,7 +5491,7 @@ Index: linux-2.6.23.17/include/linux/mmc/core.h
   * patterns of the above flags.  One additional valid pattern
   * is all zeros, which means we don't expect a response.
   */
-@@ -41,12 +47,30 @@ struct mmc_command {
+@@ -41,12 +47,30 @@
  #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)
@@ -5570,7 +5522,7 @@ Index: linux-2.6.23.17/include/linux/mmc/core.h
   * These are the command types.
   */
  #define mmc_cmd_type(cmd)     ((cmd)->flags & MMC_CMD_MASK)
-@@ -54,12 +78,19 @@ struct mmc_command {
+@@ -54,12 +78,19 @@
        unsigned int            retries;        /* max number of retries */
        unsigned int            error;          /* command error */
  
@@ -5596,7 +5548,7 @@ Index: linux-2.6.23.17/include/linux/mmc/core.h
  
        struct mmc_data         *data;          /* data segment associated with cmd */
        struct mmc_request      *mrq;           /* associated request */
-@@ -76,7 +107,6 @@ struct mmc_data {
+@@ -76,7 +107,6 @@
  #define MMC_DATA_WRITE        (1 << 8)
  #define MMC_DATA_READ (1 << 9)
  #define MMC_DATA_STREAM       (1 << 10)
@@ -5604,7 +5556,7 @@ Index: linux-2.6.23.17/include/linux/mmc/core.h
  
        unsigned int            bytes_xfered;
  
-@@ -104,9 +134,20 @@ extern int mmc_wait_for_cmd(struct mmc_h
+@@ -104,9 +134,20 @@
  extern int mmc_wait_for_app_cmd(struct mmc_host *, struct mmc_card *,
        struct mmc_command *, int);
  
@@ -5627,10 +5579,8 @@ Index: linux-2.6.23.17/include/linux/mmc/core.h
 +}
 +
  #endif
-Index: linux-2.6.23.17/include/linux/mmc/host.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mmc/host.h
-+++ linux-2.6.23.17/include/linux/mmc/host.h
+--- a/include/linux/mmc/host.h
++++ b/include/linux/mmc/host.h
 @@ -10,6 +10,8 @@
  #ifndef LINUX_MMC_HOST_H
  #define LINUX_MMC_HOST_H
@@ -5640,7 +5590,7 @@ Index: linux-2.6.23.17/include/linux/mmc/host.h
  #include <linux/mmc/core.h>
  
  struct mmc_ios {
-@@ -51,6 +53,7 @@ struct mmc_host_ops {
+@@ -51,6 +53,7 @@
        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);
@@ -5648,7 +5598,7 @@ Index: linux-2.6.23.17/include/linux/mmc/host.h
  };
  
  struct mmc_card;
-@@ -87,9 +90,10 @@ struct mmc_host {
+@@ -87,9 +90,10 @@
  
  #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 */
@@ -5662,7 +5612,7 @@ Index: linux-2.6.23.17/include/linux/mmc/host.h
  
        /* host specific block data */
        unsigned int            max_seg_size;   /* see blk_queue_max_segment_size */
-@@ -106,23 +110,30 @@ struct mmc_host {
+@@ -106,23 +110,30 @@
        struct mmc_ios          ios;            /* current io bus settings */
        u32                     ocr;            /* the current OCR setting */
  
@@ -5701,7 +5651,7 @@ Index: linux-2.6.23.17/include/linux/mmc/host.h
  
        unsigned long           private[0] ____cacheline_aligned;
  };
-@@ -137,6 +148,8 @@ static inline void *mmc_priv(struct mmc_
+@@ -137,6 +148,8 @@
        return (void *)host->private;
  }
  
@@ -5710,7 +5660,7 @@ Index: linux-2.6.23.17/include/linux/mmc/host.h
  #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 @@ extern int mmc_resume_host(struct mmc_ho
+@@ -147,5 +160,11 @@
  extern void mmc_detect_change(struct mmc_host *, unsigned long delay);
  extern void mmc_request_done(struct mmc_host *, struct mmc_request *);
  
@@ -5722,10 +5672,8 @@ Index: linux-2.6.23.17/include/linux/mmc/host.h
 +
  #endif
  
-Index: linux-2.6.23.17/include/linux/mmc/mmc.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mmc/mmc.h
-+++ linux-2.6.23.17/include/linux/mmc/mmc.h
+--- a/include/linux/mmc/mmc.h
++++ b/include/linux/mmc/mmc.h
 @@ -27,7 +27,7 @@
  
  /* Standard MMC commands (4.1)           type  argument     response */
@@ -5801,7 +5749,7 @@ Index: linux-2.6.23.17/include/linux/mmc/mmc.h
  /* These are unpacked versions of the actual responses */
  
  struct _mmc_csd {
-@@ -182,6 +207,7 @@ struct _mmc_csd {
+@@ -182,6 +207,7 @@
   */
  #define CCC_BASIC             (1<<0)  /* (0) Basic protocol functions */
                                        /* (CMD0,1,2,3,4,7,9,10,12,13,15) */
@@ -5809,7 +5757,7 @@ Index: linux-2.6.23.17/include/linux/mmc/mmc.h
  #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 @@ struct _mmc_csd {
+@@ -227,6 +253,7 @@
  #define EXT_CSD_BUS_WIDTH     183     /* R/W */
  #define EXT_CSD_HS_TIMING     185     /* R/W */
  #define EXT_CSD_CARD_TYPE     196     /* RO */
@@ -5817,10 +5765,8 @@ Index: linux-2.6.23.17/include/linux/mmc/mmc.h
  #define EXT_CSD_SEC_CNT               212     /* RO, 4 bytes */
  
  /*
-Index: linux-2.6.23.17/include/linux/mmc/sdio.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/include/linux/mmc/sdio.h
++++ b/include/linux/mmc/sdio.h
 @@ -0,0 +1,159 @@
 +/*
 + *  include/linux/mmc/sdio.h
@@ -5981,10 +5927,8 @@ Index: linux-2.6.23.17/include/linux/mmc/sdio.h
 +
 +#endif
 +
-Index: linux-2.6.23.17/include/linux/mmc/sdio_func.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/include/linux/mmc/sdio_func.h
++++ b/include/linux/mmc/sdio_func.h
 @@ -0,0 +1,153 @@
 +/*
 + *  include/linux/mmc/sdio_func.h
@@ -6139,10 +6083,8 @@ Index: linux-2.6.23.17/include/linux/mmc/sdio_func.h
 +
 +#endif
 +
-Index: linux-2.6.23.17/include/linux/mmc/sdio_ids.h
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/include/linux/mmc/sdio_ids.h
++++ b/include/linux/mmc/sdio_ids.h
 @@ -0,0 +1,29 @@
 +/*
 + * SDIO Classes, Interface Types, Manufacturer IDs, etc.
@@ -6173,11 +6115,9 @@ Index: linux-2.6.23.17/include/linux/mmc/sdio_ids.h
 +#define SDIO_DEVICE_ID_MARVELL_LIBERTAS               0x9103
 +
 +#endif
-Index: linux-2.6.23.17/include/linux/mod_devicetable.h
-===================================================================
---- linux-2.6.23.17.orig/include/linux/mod_devicetable.h
-+++ linux-2.6.23.17/include/linux/mod_devicetable.h
-@@ -22,6 +22,18 @@ struct pci_device_id {
+--- a/include/linux/mod_devicetable.h
++++ b/include/linux/mod_devicetable.h
+@@ -22,6 +22,18 @@
  };
  
  
@@ -6196,11 +6136,9 @@ Index: linux-2.6.23.17/include/linux/mod_devicetable.h
  #define IEEE1394_MATCH_VENDOR_ID      0x0001
  #define IEEE1394_MATCH_MODEL_ID               0x0002
  #define IEEE1394_MATCH_SPECIFIER_ID   0x0004
-Index: linux-2.6.23.17/drivers/mmc/card/Kconfig
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/card/Kconfig
-+++ linux-2.6.23.17/drivers/mmc/card/Kconfig
-@@ -32,3 +32,10 @@ config MMC_BLOCK_BOUNCE
+--- a/drivers/mmc/card/Kconfig
++++ b/drivers/mmc/card/Kconfig
+@@ -32,3 +32,10 @@
  
          If unsure, say Y here.
  
@@ -6211,20 +6149,16 @@ Index: linux-2.6.23.17/drivers/mmc/card/Kconfig
 +        SDIO function driver for SDIO cards that implements the UART
 +        class, as well as the GPS class which appears like a UART.
 +
-Index: linux-2.6.23.17/drivers/mmc/card/Makefile
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/card/Makefile
-+++ linux-2.6.23.17/drivers/mmc/card/Makefile
-@@ -9,3 +9,5 @@ endif
+--- a/drivers/mmc/card/Makefile
++++ b/drivers/mmc/card/Makefile
+@@ -9,3 +9,5 @@
  obj-$(CONFIG_MMC_BLOCK)               += mmc_block.o
  mmc_block-objs                        := block.o queue.o
  
 +obj-$(CONFIG_SDIO_UART)               += sdio_uart.o
 +
-Index: linux-2.6.23.17/drivers/mmc/card/block.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/card/block.c
-+++ linux-2.6.23.17/drivers/mmc/card/block.c
+--- a/drivers/mmc/card/block.c
++++ b/drivers/mmc/card/block.c
 @@ -44,6 +44,9 @@
   * max 8 partitions per card
   */
@@ -6235,7 +6169,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
  
  /*
   * There is one mmc_blk_data per slot.
-@@ -80,6 +83,9 @@ static void mmc_blk_put(struct mmc_blk_d
+@@ -80,6 +83,9 @@
        mutex_lock(&open_lock);
        md->usage--;
        if (md->usage == 0) {
@@ -6245,7 +6179,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                put_disk(md->disk);
                kfree(md);
        }
-@@ -151,17 +157,19 @@ static u32 mmc_sd_num_wr_blocks(struct m
+@@ -151,17 +157,19 @@
  
        cmd.opcode = MMC_APP_CMD;
        cmd.arg = card->rca << 16;
@@ -6268,7 +6202,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
  
        memset(&data, 0, sizeof(struct mmc_data));
  
-@@ -192,7 +200,7 @@ static u32 mmc_sd_num_wr_blocks(struct m
+@@ -192,7 +200,7 @@
  
        mmc_wait_for_req(card->host, &mrq);
  
@@ -6277,7 +6211,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                return (u32)-1;
  
        blocks = ntohl(blocks);
-@@ -220,17 +228,15 @@ static int mmc_blk_issue_rq(struct mmc_q
+@@ -220,17 +228,15 @@
                brq.cmd.arg = req->sector;
                if (!mmc_card_blockaddr(card))
                        brq.cmd.arg <<= 9;
@@ -6297,7 +6231,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                /*
                 * If the host doesn't support multiple block writes, force
                 * block writes to single block. SD cards are excepted from
-@@ -243,8 +249,12 @@ static int mmc_blk_issue_rq(struct mmc_q
+@@ -243,8 +249,12 @@
                        brq.data.blocks = 1;
  
                if (brq.data.blocks > 1) {
@@ -6312,7 +6246,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                        readcmd = MMC_READ_MULTIPLE_BLOCK;
                        writecmd = MMC_WRITE_MULTIPLE_BLOCK;
                } else {
-@@ -261,6 +271,8 @@ static int mmc_blk_issue_rq(struct mmc_q
+@@ -261,6 +271,8 @@
                        brq.data.flags |= MMC_DATA_WRITE;
                }
  
@@ -6321,7 +6255,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                brq.data.sg = mq->sg;
                brq.data.sg_len = mmc_queue_map_sg(mq);
  
-@@ -302,7 +314,7 @@ static int mmc_blk_issue_rq(struct mmc_q
+@@ -302,7 +314,7 @@
                        goto cmd_err;
                }
  
@@ -6330,7 +6264,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                        do {
                                int err;
  
-@@ -315,7 +327,13 @@ static int mmc_blk_issue_rq(struct mmc_q
+@@ -315,7 +327,13 @@
                                               req->rq_disk->disk_name, err);
                                        goto cmd_err;
                                }
@@ -6345,7 +6279,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
  
  #if 0
                        if (cmd.resp[0] & ~0x00000900)
-@@ -394,9 +412,6 @@ static int mmc_blk_issue_rq(struct mmc_q
+@@ -394,9 +412,6 @@
        return 0;
  }
  
@@ -6355,7 +6289,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
  
  static inline int mmc_blk_readonly(struct mmc_card *card)
  {
-@@ -510,7 +525,7 @@ mmc_blk_set_blksize(struct mmc_blk_data 
+@@ -510,7 +525,7 @@
        mmc_claim_host(card->host);
        cmd.opcode = MMC_SET_BLOCKLEN;
        cmd.arg = 1 << md->block_bits;
@@ -6364,7 +6298,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
        err = mmc_wait_for_cmd(card->host, &cmd, 5);
        mmc_release_host(card->host);
  
-@@ -562,17 +577,12 @@ static void mmc_blk_remove(struct mmc_ca
+@@ -562,17 +577,12 @@
        struct mmc_blk_data *md = mmc_get_drvdata(card);
  
        if (md) {
@@ -6382,10 +6316,8 @@ Index: linux-2.6.23.17/drivers/mmc/card/block.c
                mmc_blk_put(md);
        }
        mmc_set_drvdata(card, NULL);
-Index: linux-2.6.23.17/drivers/mmc/card/queue.c
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/card/queue.c
-+++ linux-2.6.23.17/drivers/mmc/card/queue.c
+--- a/drivers/mmc/card/queue.c
++++ b/drivers/mmc/card/queue.c
 @@ -13,6 +13,7 @@
  #include <linux/blkdev.h>
  #include <linux/freezer.h>
@@ -6407,7 +6339,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/queue.c
  /*
   * Prepare a MMC request. This just filters out odd stuff.
   */
-@@ -159,6 +166,7 @@ int mmc_init_queue(struct mmc_queue *mq,
+@@ -159,6 +166,7 @@
                                ret = -ENOMEM;
                                goto cleanup_queue;
                        }
@@ -6415,7 +6347,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/queue.c
  
                        mq->bounce_sg = kmalloc(sizeof(struct scatterlist) *
                                bouncesz / 512, GFP_KERNEL);
-@@ -166,6 +174,7 @@ int mmc_init_queue(struct mmc_queue *mq,
+@@ -166,6 +174,7 @@
                                ret = -ENOMEM;
                                goto cleanup_queue;
                        }
@@ -6423,7 +6355,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/queue.c
                }
        }
  #endif
-@@ -183,6 +192,7 @@ int mmc_init_queue(struct mmc_queue *mq,
+@@ -183,6 +192,7 @@
                        ret = -ENOMEM;
                        goto cleanup_queue;
                }
@@ -6431,7 +6363,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/queue.c
        }
  
        init_MUTEX(&mq->thread_sem);
-@@ -302,12 +312,12 @@ static void copy_sg(struct scatterlist *
+@@ -302,12 +312,12 @@
                BUG_ON(dst_len == 0);
  
                if (dst_size == 0) {
@@ -6446,7 +6378,7 @@ Index: linux-2.6.23.17/drivers/mmc/card/queue.c
                        src_size = src->length;
                }
  
-@@ -353,9 +363,7 @@ unsigned int mmc_queue_map_sg(struct mmc
+@@ -353,9 +363,7 @@
                return 1;
        }
  
@@ -6457,10 +6389,8 @@ Index: linux-2.6.23.17/drivers/mmc/card/queue.c
  
        while (sg_len) {
                mq->sg[0].length += mq->bounce_sg[sg_len - 1].length;
-Index: linux-2.6.23.17/drivers/mmc/card/sdio_uart.c
-===================================================================
 --- /dev/null
-+++ linux-2.6.23.17/drivers/mmc/card/sdio_uart.c
++++ b/drivers/mmc/card/sdio_uart.c
 @@ -0,0 +1,1158 @@
 +/*
 + * linux/drivers/mmc/card/sdio_uart.c - SDIO UART/GPS driver
@@ -7620,11 +7550,9 @@ Index: linux-2.6.23.17/drivers/mmc/card/sdio_uart.c
 +
 +MODULE_AUTHOR("Nicolas Pitre");
 +MODULE_LICENSE("GPL");
-Index: linux-2.6.23.17/drivers/mmc/core/Makefile
-===================================================================
---- linux-2.6.23.17.orig/drivers/mmc/core/Makefile
-+++ linux-2.6.23.17/drivers/mmc/core/Makefile
-@@ -8,5 +8,7 @@ endif
+--- a/drivers/mmc/core/Makefile
++++ b/drivers/mmc/core/Makefile
+@@ -8,5 +8,7 @@
  
  obj-$(CONFIG_MMC)             += mmc_core.o
  mmc_core-y                    := core.o sysfs.o bus.o host.o \