
Hello Tobias,
On 09/21/2015 01:54 AM, Tobias Jakobi wrote:
The CD check is currently inverted. dm_gpio_get_value() returns one when a card is detected. All other values (zero when there is no card, or negative values for the internal errors) indicate failure.
If you want revert the GPIO state, please modify the phandle in device-tree and then in the code.
Signed-off-by: Tobias Jakobi tjakobi@math.uni-bielefeld.de
drivers/mmc/s5p_sdhci.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/mmc/s5p_sdhci.c b/drivers/mmc/s5p_sdhci.c index 6be3609..bc04370 100644 --- a/drivers/mmc/s5p_sdhci.c +++ b/drivers/mmc/s5p_sdhci.c @@ -102,29 +102,31 @@ struct sdhci_host sdhci_host[SDHCI_MAX_HOSTS];
static int do_sdhci_init(struct sdhci_host *host) {
- int dev_id, flag;
- int err = 0;
int dev_id, flag, ret;
flag = host->bus_width == 8 ? PINMUX_FLAG_8BIT_MODE : PINMUX_FLAG_NONE; dev_id = host->index + PERIPH_ID_SDMMC0;
if (dm_gpio_is_valid(&host->pwr_gpio)) { dm_gpio_set_value(&host->pwr_gpio, 1);
err = exynos_pinmux_config(dev_id, flag);
if (err) {
ret = exynos_pinmux_config(dev_id, flag);
if (ret) { debug("MMC not configured\n");
return err;
return ret;
} }
if (dm_gpio_is_valid(&host->cd_gpio)) {
if (dm_gpio_get_value(&host->cd_gpio))
Please don't revert this GPIO. This part of code was correct. There is another source of broken SD card detect. It's about device-tree parsing. I will send a patches today.
ret = dm_gpio_get_value(&host->cd_gpio);
if (ret != 1) {
debug("No card detected (%d)\n", ret); return -ENODEV;
}
err = exynos_pinmux_config(dev_id, flag);
if (err) {
ret = exynos_pinmux_config(dev_id, flag);
if (ret) { printf("external SD not configured\n");
return err;
} }return ret;
Best regards,