diff options
Diffstat (limited to 'target/linux/sunxi/patches-3.18/200-mmc-add-sdio-function-subnode.patch')
-rw-r--r-- | target/linux/sunxi/patches-3.18/200-mmc-add-sdio-function-subnode.patch | 140 |
1 files changed, 0 insertions, 140 deletions
diff --git a/target/linux/sunxi/patches-3.18/200-mmc-add-sdio-function-subnode.patch b/target/linux/sunxi/patches-3.18/200-mmc-add-sdio-function-subnode.patch deleted file mode 100644 index dcbb3a4..0000000 --- a/target/linux/sunxi/patches-3.18/200-mmc-add-sdio-function-subnode.patch +++ /dev/null @@ -1,140 +0,0 @@ -From 8c2057afe84c074ef7cd3ee2ec8e9bed835b9e93 Mon Sep 17 00:00:00 2001 -From: Sascha Hauer <s.hauer@pengutronix.de> -Date: Wed, 21 May 2014 19:50:04 +0200 -Subject: [PATCH] mmc: Add SDIO function devicetree subnode parsing - -This adds SDIO devicetree subnode parsing to the mmc core. While -SDIO devices are runtime probable they sometimes need nonprobable -additional information on embedded systems, like an additional gpio -interrupt or a clock. This patch makes it possible to supply this -information from the devicetree. SDIO drivers will find a pointer -to the devicenode in their devices of_node pointer. - -Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> -[hdegoede@redhat.com: Misc. cleanups] -Signed-off-by: Hans de Goede <hdegoede@redhat.com> ---- - drivers/mmc/core/bus.c | 4 ++++ - drivers/mmc/core/core.c | 28 ++++++++++++++++++++++++++++ - drivers/mmc/core/core.h | 3 +++ - drivers/mmc/core/sdio_bus.c | 11 +++++++++++ - 4 files changed, 46 insertions(+) - ---- a/drivers/mmc/core/bus.c -+++ b/drivers/mmc/core/bus.c -@@ -16,6 +16,7 @@ - #include <linux/err.h> - #include <linux/slab.h> - #include <linux/stat.h> -+#include <linux/of.h> - #include <linux/pm_runtime.h> - - #include <linux/mmc/card.h> -@@ -352,6 +353,8 @@ int mmc_add_card(struct mmc_card *card) - #endif - mmc_init_context_info(card->host); - -+ card->dev.of_node = mmc_of_find_child_device(card->host, 0); -+ - ret = device_add(&card->dev); - if (ret) - return ret; -@@ -380,6 +383,7 @@ void mmc_remove_card(struct mmc_card *ca - mmc_hostname(card->host), card->rca); - } - device_del(&card->dev); -+ of_node_put(card->dev.of_node); - } - - put_device(&card->dev); ---- a/drivers/mmc/core/core.c -+++ b/drivers/mmc/core/core.c -@@ -1231,6 +1231,34 @@ EXPORT_SYMBOL(mmc_of_parse_voltage); - - #endif /* CONFIG_OF */ - -+static int mmc_of_get_func_num(struct device_node *node) -+{ -+ u32 reg; -+ int ret; -+ -+ ret = of_property_read_u32(node, "reg", ®); -+ if (ret < 0) -+ return ret; -+ -+ return reg; -+} -+ -+struct device_node *mmc_of_find_child_device(struct mmc_host *host, -+ unsigned func_num) -+{ -+ struct device_node *node; -+ -+ if (!host->parent || !host->parent->of_node) -+ return NULL; -+ -+ for_each_child_of_node(host->parent->of_node, node) { -+ if (mmc_of_get_func_num(node) == func_num) -+ return node; -+ } -+ -+ return NULL; -+} -+ - #ifdef CONFIG_REGULATOR - - /** ---- a/drivers/mmc/core/core.h -+++ b/drivers/mmc/core/core.h -@@ -32,6 +32,9 @@ struct mmc_bus_ops { - void mmc_attach_bus(struct mmc_host *host, const struct mmc_bus_ops *ops); - void mmc_detach_bus(struct mmc_host *host); - -+struct device_node *mmc_of_find_child_device(struct mmc_host *host, -+ unsigned func_num); -+ - void mmc_init_erase(struct mmc_card *card); - - void mmc_set_chip_select(struct mmc_host *host, int mode); ---- a/drivers/mmc/core/sdio_bus.c -+++ b/drivers/mmc/core/sdio_bus.c -@@ -22,7 +22,9 @@ - #include <linux/mmc/card.h> - #include <linux/mmc/host.h> - #include <linux/mmc/sdio_func.h> -+#include <linux/of.h> - -+#include "core.h" - #include "sdio_cis.h" - #include "sdio_bus.h" - -@@ -303,6 +305,13 @@ static void sdio_acpi_set_handle(struct - static inline void sdio_acpi_set_handle(struct sdio_func *func) {} - #endif - -+static void sdio_set_of_node(struct sdio_func *func) -+{ -+ struct mmc_host *host = func->card->host; -+ -+ func->dev.of_node = mmc_of_find_child_device(host, func->num); -+} -+ - /* - * Register a new SDIO function with the driver model. - */ -@@ -312,6 +321,7 @@ int sdio_add_func(struct sdio_func *func - - dev_set_name(&func->dev, "%s:%d", mmc_card_id(func->card), func->num); - -+ sdio_set_of_node(func); - sdio_acpi_set_handle(func); - ret = device_add(&func->dev); - if (ret == 0) { -@@ -335,6 +345,7 @@ void sdio_remove_func(struct sdio_func * - - dev_pm_domain_detach(&func->dev, false); - device_del(&func->dev); -+ of_node_put(func->dev.of_node); - put_device(&func->dev); - } - |