diff options
author | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-12-18 17:53:53 +0000 |
---|---|---|
committer | juhosg <juhosg@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2012-12-18 17:53:53 +0000 |
commit | 13e1228de3690c8c831b9cccbe5a34674e743362 (patch) | |
tree | 0c747bbe3b9ccb30a4e4c5e277825d9a8ba914e4 /target/linux/goldfish/patches-2.6.30/0095-mmc-Add-concept-of-an-embedded-SDIO-device.patch | |
parent | 8f54e709747e711460f8a49acdcf86841920db8b (diff) |
goldfish: R.I.P.
It is broken and it is not maintained by anyone since long time.
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34766 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/goldfish/patches-2.6.30/0095-mmc-Add-concept-of-an-embedded-SDIO-device.patch')
-rw-r--r-- | target/linux/goldfish/patches-2.6.30/0095-mmc-Add-concept-of-an-embedded-SDIO-device.patch | 274 |
1 files changed, 0 insertions, 274 deletions
diff --git a/target/linux/goldfish/patches-2.6.30/0095-mmc-Add-concept-of-an-embedded-SDIO-device.patch b/target/linux/goldfish/patches-2.6.30/0095-mmc-Add-concept-of-an-embedded-SDIO-device.patch deleted file mode 100644 index e3f0eb4811..0000000000 --- a/target/linux/goldfish/patches-2.6.30/0095-mmc-Add-concept-of-an-embedded-SDIO-device.patch +++ /dev/null @@ -1,274 +0,0 @@ -From 62d51f0d0d0b3c758b4505c3855b61288b8e90aa Mon Sep 17 00:00:00 2001 -From: San Mehat <san@android.com> -Date: Mon, 14 Apr 2008 15:22:49 -0700 -Subject: [PATCH 095/134] mmc: Add concept of an 'embedded' SDIO device. - -This is required to support chips which use SDIO for signaling/ -communication but do not implement the various card enumeration registers -as required for full SD / SDIO cards. - -mmc: sdio: Fix bug where we're freeing the CIS tables we never allocated when using EMBEDDED_SDIO -mmc: Add max_blksize to embedded SDIO data - -Signed-off-by: San Mehat <san@google.com> ---- - arch/arm/include/asm/mach/mmc.h | 10 ++++++ - drivers/mmc/core/Kconfig | 10 +++++- - drivers/mmc/core/core.c | 16 +++++++++ - drivers/mmc/core/sdio.c | 67 ++++++++++++++++++++++++++++++++------- - drivers/mmc/core/sdio_bus.c | 13 +++++++- - include/linux/mmc/host.h | 17 ++++++++++ - include/linux/mmc/sdio_func.h | 8 +++++ - 7 files changed, 127 insertions(+), 14 deletions(-) - ---- a/arch/arm/include/asm/mach/mmc.h -+++ b/arch/arm/include/asm/mach/mmc.h -@@ -5,12 +5,22 @@ - #define ASMARM_MACH_MMC_H - - #include <linux/mmc/host.h> -+#include <linux/mmc/card.h> -+#include <linux/mmc/sdio_func.h> -+ -+struct embedded_sdio_data { -+ struct sdio_cis cis; -+ struct sdio_cccr cccr; -+ struct sdio_embedded_func *funcs; -+ int num_funcs; -+}; - - struct mmc_platform_data { - unsigned int ocr_mask; /* available voltages */ - u32 (*translate_vdd)(struct device *, unsigned int); - unsigned int (*status)(struct device *); - unsigned int status_irq; -+ struct embedded_sdio_data *embedded_sdio; - int (*register_status_notify)(void (*callback)(int card_present, void *dev_id), void *dev_id); - }; - ---- a/drivers/mmc/core/Kconfig -+++ b/drivers/mmc/core/Kconfig -@@ -14,11 +14,19 @@ config MMC_UNSAFE_RESUME - This option is usually just for embedded systems which use - a MMC/SD card for rootfs. Most people should say N here. - -+config MMC_EMBEDDED_SDIO -+ boolean "MMC embedded SDIO device support (EXPERIMENTAL)" -+ depends on EXPERIMENTAL -+ help -+ If you say Y here, support will be added for embedded SDIO -+ devices which do not contain the necessary enumeration -+ support in hardware to be properly detected. -+ - config MMC_PARANOID_SD_INIT - bool "Enable paranoid SD card initialization (EXPERIMENTAL)" -+ depends on EXPERIMENTAL - help - If you say Y here, the MMC layer will be extra paranoid - about re-trying SD init requests. This can be a useful - work-around for buggy controllers and hardware. Enable - if you are experiencing issues with SD detection. -- ---- a/drivers/mmc/core/core.c -+++ b/drivers/mmc/core/core.c -@@ -1011,6 +1011,22 @@ EXPORT_SYMBOL(mmc_resume_host); - - #endif - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+void mmc_set_embedded_sdio_data(struct mmc_host *host, -+ struct sdio_cis *cis, -+ struct sdio_cccr *cccr, -+ struct sdio_embedded_func *funcs, -+ int num_funcs) -+{ -+ host->embedded_sdio_data.cis = cis; -+ host->embedded_sdio_data.cccr = cccr; -+ host->embedded_sdio_data.funcs = funcs; -+ host->embedded_sdio_data.num_funcs = num_funcs; -+} -+ -+EXPORT_SYMBOL(mmc_set_embedded_sdio_data); -+#endif -+ - static int __init mmc_init(void) - { - int ret; ---- a/drivers/mmc/core/sdio.c -+++ b/drivers/mmc/core/sdio.c -@@ -24,6 +24,10 @@ - #include "sdio_ops.h" - #include "sdio_cis.h" - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+#include <linux/mmc/sdio_ids.h> -+#endif -+ - static int sdio_read_fbr(struct sdio_func *func) - { - int ret; -@@ -314,6 +318,11 @@ int mmc_attach_sdio(struct mmc_host *hos - */ - funcs = (ocr & 0x70000000) >> 28; - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ if (host->embedded_sdio_data.funcs) -+ funcs = host->embedded_sdio_data.num_funcs; -+#endif -+ - /* - * Allocate card structure. - */ -@@ -351,17 +360,33 @@ int mmc_attach_sdio(struct mmc_host *hos - /* - * Read the common registers. - */ -- err = sdio_read_cccr(card); -- if (err) -- goto remove; - -- /* -- * Read the common CIS tuples. -- */ -- err = sdio_read_common_cis(card); -- if (err) -- goto remove; -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ if (host->embedded_sdio_data.cccr) -+ memcpy(&card->cccr, host->embedded_sdio_data.cccr, sizeof(struct sdio_cccr)); -+ else { -+#endif -+ err = sdio_read_cccr(card); -+ if (err) -+ goto remove; -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ } -+#endif - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ if (host->embedded_sdio_data.cis) -+ memcpy(&card->cis, host->embedded_sdio_data.cis, sizeof(struct sdio_cis)); -+ else { -+#endif -+ /* -+ * Read the common CIS tuples. -+ */ -+ err = sdio_read_common_cis(card); -+ if (err) -+ goto remove; -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ } -+#endif - /* - * Switch to high-speed (if supported). - */ -@@ -395,9 +420,27 @@ int mmc_attach_sdio(struct mmc_host *hos - * Initialize (but don't add) all present functions. - */ - for (i = 0;i < funcs;i++) { -- err = sdio_init_func(host->card, i + 1); -- if (err) -- goto remove; -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ if (host->embedded_sdio_data.funcs) { -+ struct sdio_func *tmp; -+ -+ tmp = sdio_alloc_func(host->card); -+ if (IS_ERR(tmp)) -+ goto remove; -+ tmp->num = (i + 1); -+ card->sdio_func[i] = tmp; -+ tmp->class = host->embedded_sdio_data.funcs[i].f_class; -+ tmp->max_blksize = host->embedded_sdio_data.funcs[i].f_maxblksize; -+ tmp->vendor = card->cis.vendor; -+ tmp->device = card->cis.device; -+ } else { -+#endif -+ err = sdio_init_func(host->card, i + 1); -+ if (err) -+ goto remove; -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ } -+#endif - } - - mmc_release_host(host); ---- a/drivers/mmc/core/sdio_bus.c -+++ b/drivers/mmc/core/sdio_bus.c -@@ -20,6 +20,10 @@ - #include "sdio_cis.h" - #include "sdio_bus.h" - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+#include <linux/mmc/host.h> -+#endif -+ - #define dev_to_sdio_func(d) container_of(d, struct sdio_func, dev) - #define to_sdio_driver(d) container_of(d, struct sdio_driver, drv) - -@@ -202,7 +206,14 @@ static void sdio_release_func(struct dev - { - struct sdio_func *func = dev_to_sdio_func(dev); - -- sdio_free_func_cis(func); -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ /* -+ * If this device is embedded then we never allocated -+ * cis tables for this func -+ */ -+ if (!func->card->host->embedded_sdio_data.funcs) -+#endif -+ sdio_free_func_cis(func); - - if (func->info) - kfree(func->info); ---- a/include/linux/mmc/host.h -+++ b/include/linux/mmc/host.h -@@ -161,6 +161,15 @@ struct mmc_host { - - struct dentry *debugfs_root; - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+ struct { -+ struct sdio_cis *cis; -+ struct sdio_cccr *cccr; -+ struct sdio_embedded_func *funcs; -+ int num_funcs; -+ } embedded_sdio_data; -+#endif -+ - unsigned long private[0] ____cacheline_aligned; - }; - -@@ -169,6 +178,14 @@ extern int mmc_add_host(struct mmc_host - extern void mmc_remove_host(struct mmc_host *); - extern void mmc_free_host(struct mmc_host *); - -+#ifdef CONFIG_MMC_EMBEDDED_SDIO -+extern void mmc_set_embedded_sdio_data(struct mmc_host *host, -+ struct sdio_cis *cis, -+ struct sdio_cccr *cccr, -+ struct sdio_embedded_func *funcs, -+ int num_funcs); -+#endif -+ - static inline void *mmc_priv(struct mmc_host *host) - { - return (void *)host->private; ---- a/include/linux/mmc/sdio_func.h -+++ b/include/linux/mmc/sdio_func.h -@@ -21,6 +21,14 @@ struct sdio_func; - typedef void (sdio_irq_handler_t)(struct sdio_func *); - - /* -+ * Structure used to hold embedded SDIO device data from platform layer -+ */ -+struct sdio_embedded_func { -+ uint8_t f_class; -+ uint32_t f_maxblksize; -+}; -+ -+/* - * SDIO function CIS tuple (unknown to the core) - */ - struct sdio_func_tuple { |