summaryrefslogtreecommitdiff
path: root/target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch')
-rw-r--r--target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch428
1 files changed, 178 insertions, 250 deletions
diff --git a/target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch b/target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch
index 3342104..528d608 100644
--- a/target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch
+++ b/target/linux/generic-2.6/patches-2.6.23/300-add-mmc-spi-driver.patch
@@ -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 \