libsdhcdrivers: Fix `mmc_nth_irq()` function There was a bug in the `mmc_nth_irq()` i.e. the function would always return IRQ number only if the given index is 0. This was caused by calling sdhc_init() from sdio_init() with wrong parameters i.e. passing pointer the array of irq numbers with an offset of the initialized device index, and claiming that this array's size is 1. Currently entire irq array is exposed via `mmv_nth_irq()`. Furthermore, there is a mismatch between indexing of SDHC peripherals and the their enumeration. To avoid confusion and misconfiguration, the i.MX6 SDHC1 enum element is now set to 1.
diff --git a/libsdhcdrivers/plat_include/imx6/sdhc/plat/sdio.h b/libsdhcdrivers/plat_include/imx6/sdhc/plat/sdio.h index 972fb1f..6d21dce 100644 --- a/libsdhcdrivers/plat_include/imx6/sdhc/plat/sdio.h +++ b/libsdhcdrivers/plat_include/imx6/sdhc/plat/sdio.h
@@ -28,7 +28,7 @@ #define SDHC4_IRQ 57 enum sdio_id { - SDHC1, + SDHC1 = 1, SDHC2, SDHC3, SDHC4,
diff --git a/libsdhcdrivers/src/plat/exynos4/sdio.c b/libsdhcdrivers/src/plat/exynos4/sdio.c index 106bdf1..eb93218 100644 --- a/libsdhcdrivers/src/plat/exynos4/sdio.c +++ b/libsdhcdrivers/src/plat/exynos4/sdio.c
@@ -55,7 +55,7 @@ return -1; } - ret = sdhc_init(iobase, &_sdhc_irq_table[id], 1, io_ops, dev); + ret = sdhc_init(iobase, _sdhc_irq_table, NSDHC, io_ops, dev); if (ret) { LOG_ERROR("Failed to initialise SDHC\n"); return -1;
diff --git a/libsdhcdrivers/src/plat/imx6/sdio.c b/libsdhcdrivers/src/plat/imx6/sdio.c index a5d1b2b..b958e47 100644 --- a/libsdhcdrivers/src/plat/imx6/sdio.c +++ b/libsdhcdrivers/src/plat/imx6/sdio.c
@@ -51,7 +51,7 @@ return -1; } - ret = sdhc_init(iobase, &_sdhc_irq_table[id], 1, io_ops, dev); + ret = sdhc_init(iobase, _sdhc_irq_table, NSDHC, io_ops, dev); if (ret) { LOG_ERROR("Failed to initialise SDHC\n"); return -1;