mmc: uniphier-sd: return error code if unsupported width is given
authorMasahiro Yamada <yamada.masahiro@socionext.com>
Thu, 25 Aug 2016 05:52:37 +0000 (14:52 +0900)
committerMasahiro Yamada <yamada.masahiro@socionext.com>
Sun, 28 Aug 2016 03:39:49 +0000 (12:39 +0900)
With the CONFIG_DM_MMC_OPS migration, the .set_ios callback can
return an integer now.  Return an appropriate error value rather
than sudden death by BUG().

Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
drivers/mmc/uniphier-sd.c

index b254c708577b26dca7c9404d0887e9797f34216d..40a5c85e373f2df34a60020d19a89ea2d4c7779c 100644 (file)
@@ -496,8 +496,8 @@ static int uniphier_sd_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
        return ret;
 }
 
-static void uniphier_sd_set_bus_width(struct uniphier_sd_priv *priv,
-                                     struct mmc *mmc)
+static int uniphier_sd_set_bus_width(struct uniphier_sd_priv *priv,
+                                    struct mmc *mmc)
 {
        u32 val, tmp;
 
@@ -512,14 +512,15 @@ static void uniphier_sd_set_bus_width(struct uniphier_sd_priv *priv,
                val = UNIPHIER_SD_OPTION_WIDTH_8;
                break;
        default:
-               BUG();
-               break;
+               return -EINVAL;
        }
 
        tmp = readl(priv->regbase + UNIPHIER_SD_OPTION);
        tmp &= ~UNIPHIER_SD_OPTION_WIDTH_MASK;
        tmp |= val;
        writel(tmp, priv->regbase + UNIPHIER_SD_OPTION);
+
+       return 0;
 }
 
 static void uniphier_sd_set_ddr_mode(struct uniphier_sd_priv *priv,
@@ -587,11 +588,14 @@ static int uniphier_sd_set_ios(struct udevice *dev)
 {
        struct uniphier_sd_priv *priv = dev_get_priv(dev);
        struct mmc *mmc = mmc_get_mmc_dev(dev);
+       int ret;
 
        dev_dbg(dev, "clock %uHz, DDRmode %d, width %u\n",
                mmc->clock, mmc->ddr_mode, mmc->bus_width);
 
-       uniphier_sd_set_bus_width(priv, mmc);
+       ret = uniphier_sd_set_bus_width(priv, mmc);
+       if (ret)
+               return ret;
        uniphier_sd_set_ddr_mode(priv, mmc);
        uniphier_sd_set_clk_rate(priv, mmc);