diff options
Diffstat (limited to 'recipes-kernel/linux/linux-toradex-mainline-4.14/0017-mmc-read-mmc-alias-from-device-tree.patch')
-rw-r--r-- | recipes-kernel/linux/linux-toradex-mainline-4.14/0017-mmc-read-mmc-alias-from-device-tree.patch | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/recipes-kernel/linux/linux-toradex-mainline-4.14/0017-mmc-read-mmc-alias-from-device-tree.patch b/recipes-kernel/linux/linux-toradex-mainline-4.14/0017-mmc-read-mmc-alias-from-device-tree.patch new file mode 100644 index 0000000..1fdf688 --- /dev/null +++ b/recipes-kernel/linux/linux-toradex-mainline-4.14/0017-mmc-read-mmc-alias-from-device-tree.patch @@ -0,0 +1,69 @@ +From 1caa89027b94c5d52f9459890f123ebb6fb5d5a9 Mon Sep 17 00:00:00 2001 +Message-Id: <1caa89027b94c5d52f9459890f123ebb6fb5d5a9.1529072479.git.marcel.ziswiler@toradex.com> +In-Reply-To: <fb4764e8eb658d35e8fc62ae79c77e1f6e2b0ef3.1529072479.git.marcel.ziswiler@toradex.com> +References: <fb4764e8eb658d35e8fc62ae79c77e1f6e2b0ef3.1529072479.git.marcel.ziswiler@toradex.com> +From: Stefan Agner <stefan@agner.ch> +Date: Fri, 29 Apr 2016 10:32:17 -0700 +Subject: [PATCH 17/27] mmc: read mmc alias from device tree + +To get the SD/MMC host device ID, read the alias from the device +tree. + +This is useful in case a SoC has multipe SD/MMC host controllers while +the second controller should logically be the first device (e.g. if +the second controller is connected to an internal eMMC). Combined +with block device numbering using MMC/SD host device ID, this +results in predictable name assignment of the internal eMMC block +device. + +Signed-off-by: Stefan Agner <stefan@agner.ch> +Signed-off-by: Dmitry Torokhov <dtor@chromium.org> +[dianders: rebase + roll in http://crosreview.com/259916] +Signed-off-by: Douglas Anderson <dianders@chromium.org> +--- + drivers/mmc/core/host.c | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +diff --git a/drivers/mmc/core/host.c b/drivers/mmc/core/host.c +index 841b9ce01a8e..e4fdd5c0ec0b 100644 +--- a/drivers/mmc/core/host.c ++++ b/drivers/mmc/core/host.c +@@ -353,11 +353,26 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev) + { + int err; + struct mmc_host *host; ++ int id; + + host = kzalloc(sizeof(struct mmc_host) + extra, GFP_KERNEL); + if (!host) + return NULL; + ++ /* If OF aliases exist, start dynamic assignment after highest */ ++ id = of_alias_get_highest_id("mmc"); ++ id = (id < 0) ? 0 : id + 1; ++ ++ /* If this devices has OF node, maybe it has an alias */ ++ if (dev->of_node) { ++ int of_id = of_alias_get_id(dev->of_node, "mmc"); ++ ++ if (of_id < 0) ++ dev_warn(dev, "/aliases ID not available\n"); ++ else ++ id = of_id; ++ } ++ + /* scanning will be enabled when we're ready */ + host->rescan_disable = 1; + +@@ -368,7 +383,7 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev) + } + + spin_lock(&mmc_host_lock); +- err = ida_get_new(&mmc_host_ida, &host->index); ++ err = ida_get_new_above(&mmc_host_ida, id, &host->index); + spin_unlock(&mmc_host_lock); + + if (err == -EAGAIN) { +-- +2.14.4 + |