
Hi Tobias,
exynos_mmc_init() always returns zero, so for the caller it looks like it never fails.
Correct this by returning the error code of process_nodes(). For process_nodes() do something similar and return early when do_sdhci_init() fails.
Signed-off-by: Tobias Jakobi tjakobi@math.uni-bielefeld.de
drivers/mmc/s5p_sdhci.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/mmc/s5p_sdhci.c b/drivers/mmc/s5p_sdhci.c index e9c43a9..bc2102a 100644 --- a/drivers/mmc/s5p_sdhci.c +++ b/drivers/mmc/s5p_sdhci.c @@ -187,7 +187,11 @@ static int process_nodes(const void *blob, int node_list[], int count) printf("%s: failed to decode dev %d\n", __func__, i); return -1; }
do_sdhci_init(host);
if (do_sdhci_init(host)) {
printf("%s: failed to initialize dev %d\n",
__func__, i);
return -2;
IMHO, it would be better to write this code as follows:
ret = do_sdhci_init(host); if (ret) {
printf(); return ret; } In the above code you read the exact return code from do_sdhci_init() and then you pass it to upper layer.
Returning only -2 is far less informational.
} return 0;}
} @@ -201,8 +205,6 @@ int exynos_mmc_init(const void *blob) COMPAT_SAMSUNG_EXYNOS_MMC, node_list, SDHCI_MAX_HOSTS);
- process_nodes(blob, node_list, count);
- return 0;
- return process_nodes(blob, node_list, count);
} #endif