mmc: uniphier-sd: return error code if unsupported width is given

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>
This commit is contained in:
Masahiro Yamada 2016-08-25 14:52:37 +09:00
parent 4eb008460c
commit 8be12e2839

View file

@ -496,8 +496,8 @@ static int uniphier_sd_send_cmd(struct udevice *dev, struct mmc_cmd *cmd,
return ret; return ret;
} }
static void uniphier_sd_set_bus_width(struct uniphier_sd_priv *priv, static int uniphier_sd_set_bus_width(struct uniphier_sd_priv *priv,
struct mmc *mmc) struct mmc *mmc)
{ {
u32 val, tmp; 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; val = UNIPHIER_SD_OPTION_WIDTH_8;
break; break;
default: default:
BUG(); return -EINVAL;
break;
} }
tmp = readl(priv->regbase + UNIPHIER_SD_OPTION); tmp = readl(priv->regbase + UNIPHIER_SD_OPTION);
tmp &= ~UNIPHIER_SD_OPTION_WIDTH_MASK; tmp &= ~UNIPHIER_SD_OPTION_WIDTH_MASK;
tmp |= val; tmp |= val;
writel(tmp, priv->regbase + UNIPHIER_SD_OPTION); writel(tmp, priv->regbase + UNIPHIER_SD_OPTION);
return 0;
} }
static void uniphier_sd_set_ddr_mode(struct uniphier_sd_priv *priv, 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 uniphier_sd_priv *priv = dev_get_priv(dev);
struct mmc *mmc = mmc_get_mmc_dev(dev); struct mmc *mmc = mmc_get_mmc_dev(dev);
int ret;
dev_dbg(dev, "clock %uHz, DDRmode %d, width %u\n", dev_dbg(dev, "clock %uHz, DDRmode %d, width %u\n",
mmc->clock, mmc->ddr_mode, mmc->bus_width); 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_ddr_mode(priv, mmc);
uniphier_sd_set_clk_rate(priv, mmc); uniphier_sd_set_clk_rate(priv, mmc);