Merge branch 'mmc_pinctrl' into next
Merge an immutable pinctrl branch from Linus Walleij's tree, which enables pinctrl code consolidations for mmc. Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
This commit is contained in:
commit
4edf6f7008
@ -2645,7 +2645,7 @@ static int atmci_runtime_resume(struct device *dev)
|
||||
{
|
||||
struct atmel_mci *host = dev_get_drvdata(dev);
|
||||
|
||||
pinctrl_pm_select_default_state(dev);
|
||||
pinctrl_select_default_state(dev);
|
||||
|
||||
return clk_prepare_enable(host->mck);
|
||||
}
|
||||
|
@ -1108,7 +1108,7 @@ static int jz4740_mmc_suspend(struct device *dev)
|
||||
|
||||
static int jz4740_mmc_resume(struct device *dev)
|
||||
{
|
||||
return pinctrl_pm_select_default_state(dev);
|
||||
return pinctrl_select_default_state(dev);
|
||||
}
|
||||
|
||||
static SIMPLE_DEV_PM_OPS(jz4740_mmc_pm_ops, jz4740_mmc_suspend,
|
||||
|
@ -161,7 +161,6 @@ struct meson_host {
|
||||
bool dram_access_quirk;
|
||||
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pins_default;
|
||||
struct pinctrl_state *pins_clk_gate;
|
||||
|
||||
unsigned int bounce_buf_size;
|
||||
@ -327,7 +326,7 @@ static void meson_mmc_clk_ungate(struct meson_host *host)
|
||||
u32 cfg;
|
||||
|
||||
if (host->pins_clk_gate)
|
||||
pinctrl_select_state(host->pinctrl, host->pins_default);
|
||||
pinctrl_select_default_state(host->dev);
|
||||
|
||||
/* Make sure the clock is not stopped in the controller */
|
||||
cfg = readl(host->regs + SD_EMMC_CFG);
|
||||
@ -1101,13 +1100,6 @@ static int meson_mmc_probe(struct platform_device *pdev)
|
||||
goto free_host;
|
||||
}
|
||||
|
||||
host->pins_default = pinctrl_lookup_state(host->pinctrl,
|
||||
PINCTRL_STATE_DEFAULT);
|
||||
if (IS_ERR(host->pins_default)) {
|
||||
ret = PTR_ERR(host->pins_default);
|
||||
goto free_host;
|
||||
}
|
||||
|
||||
host->pins_clk_gate = pinctrl_lookup_state(host->pinctrl,
|
||||
"clk-gate");
|
||||
if (IS_ERR(host->pins_clk_gate)) {
|
||||
|
@ -1704,7 +1704,7 @@ static void mmci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
|
||||
if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)
|
||||
pinctrl_select_state(host->pinctrl, host->pins_opendrain);
|
||||
else
|
||||
pinctrl_select_state(host->pinctrl, host->pins_default);
|
||||
pinctrl_select_default_state(mmc_dev(mmc));
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1877,14 +1877,6 @@ static int mmci_probe(struct amba_device *dev,
|
||||
goto host_free;
|
||||
}
|
||||
|
||||
host->pins_default = pinctrl_lookup_state(host->pinctrl,
|
||||
PINCTRL_STATE_DEFAULT);
|
||||
if (IS_ERR(host->pins_default)) {
|
||||
dev_err(mmc_dev(mmc), "Can't select default pins\n");
|
||||
ret = PTR_ERR(host->pins_default);
|
||||
goto host_free;
|
||||
}
|
||||
|
||||
host->pins_opendrain = pinctrl_lookup_state(host->pinctrl,
|
||||
MMCI_PINCTRL_STATE_OPENDRAIN);
|
||||
if (IS_ERR(host->pins_opendrain)) {
|
||||
@ -2203,7 +2195,7 @@ static int mmci_runtime_resume(struct device *dev)
|
||||
struct mmci_host *host = mmc_priv(mmc);
|
||||
clk_prepare_enable(host->clk);
|
||||
mmci_restore(host);
|
||||
pinctrl_pm_select_default_state(dev);
|
||||
pinctrl_select_default_state(dev);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
@ -404,7 +404,6 @@ struct mmci_host {
|
||||
struct mmci_host_ops *ops;
|
||||
struct variant_data *variant;
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pins_default;
|
||||
struct pinctrl_state *pins_opendrain;
|
||||
|
||||
u8 hw_designer;
|
||||
|
@ -1605,12 +1605,6 @@ static int omap_hsmmc_configure_wake_irq(struct omap_hsmmc_host *host)
|
||||
ret = PTR_ERR(p);
|
||||
goto err_free_irq;
|
||||
}
|
||||
if (IS_ERR(pinctrl_lookup_state(p, PINCTRL_STATE_DEFAULT))) {
|
||||
dev_info(host->dev, "missing default pinctrl state\n");
|
||||
devm_pinctrl_put(p);
|
||||
ret = -EINVAL;
|
||||
goto err_free_irq;
|
||||
}
|
||||
|
||||
if (IS_ERR(pinctrl_lookup_state(p, PINCTRL_STATE_IDLE))) {
|
||||
dev_info(host->dev, "missing idle pinctrl state\n");
|
||||
@ -2153,14 +2147,14 @@ static int omap_hsmmc_runtime_resume(struct device *dev)
|
||||
if ((host->mmc->caps & MMC_CAP_SDIO_IRQ) &&
|
||||
(host->flags & HSMMC_SDIO_IRQ_ENABLED)) {
|
||||
|
||||
pinctrl_pm_select_default_state(host->dev);
|
||||
pinctrl_select_default_state(host->dev);
|
||||
|
||||
/* irq lost, if pinmux incorrect */
|
||||
OMAP_HSMMC_WRITE(host->base, STAT, STAT_CLEAR);
|
||||
OMAP_HSMMC_WRITE(host->base, ISE, CIRQ_EN);
|
||||
OMAP_HSMMC_WRITE(host->base, IE, CIRQ_EN);
|
||||
} else {
|
||||
pinctrl_pm_select_default_state(host->dev);
|
||||
pinctrl_select_default_state(host->dev);
|
||||
}
|
||||
spin_unlock_irqrestore(&host->irq_lock, flags);
|
||||
return 0;
|
||||
|
@ -224,7 +224,6 @@ static struct esdhc_soc_data usdhc_imx8qxp_data = {
|
||||
struct pltfm_imx_data {
|
||||
u32 scratchpad;
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pins_default;
|
||||
struct pinctrl_state *pins_100mhz;
|
||||
struct pinctrl_state *pins_200mhz;
|
||||
const struct esdhc_soc_data *socdata;
|
||||
@ -951,7 +950,6 @@ static int esdhc_change_pinstate(struct sdhci_host *host,
|
||||
dev_dbg(mmc_dev(host->mmc), "change pinctrl state for uhs %d\n", uhs);
|
||||
|
||||
if (IS_ERR(imx_data->pinctrl) ||
|
||||
IS_ERR(imx_data->pins_default) ||
|
||||
IS_ERR(imx_data->pins_100mhz) ||
|
||||
IS_ERR(imx_data->pins_200mhz))
|
||||
return -EINVAL;
|
||||
@ -968,7 +966,7 @@ static int esdhc_change_pinstate(struct sdhci_host *host,
|
||||
break;
|
||||
default:
|
||||
/* back to default state for other legacy timing */
|
||||
pinctrl = imx_data->pins_default;
|
||||
return pinctrl_select_default_state(mmc_dev(host->mmc));
|
||||
}
|
||||
|
||||
return pinctrl_select_state(imx_data->pinctrl, pinctrl);
|
||||
@ -1338,7 +1336,7 @@ sdhci_esdhc_imx_probe_dt(struct platform_device *pdev,
|
||||
|
||||
mmc_of_parse_voltage(np, &host->ocr_mask);
|
||||
|
||||
if (esdhc_is_usdhc(imx_data) && !IS_ERR(imx_data->pins_default)) {
|
||||
if (esdhc_is_usdhc(imx_data)) {
|
||||
imx_data->pins_100mhz = pinctrl_lookup_state(imx_data->pinctrl,
|
||||
ESDHC_PINCTRL_STATE_100MHZ);
|
||||
imx_data->pins_200mhz = pinctrl_lookup_state(imx_data->pinctrl,
|
||||
@ -1492,11 +1490,6 @@ static int sdhci_esdhc_imx_probe(struct platform_device *pdev)
|
||||
goto disable_ahb_clk;
|
||||
}
|
||||
|
||||
imx_data->pins_default = pinctrl_lookup_state(imx_data->pinctrl,
|
||||
PINCTRL_STATE_DEFAULT);
|
||||
if (IS_ERR(imx_data->pins_default))
|
||||
dev_warn(mmc_dev(host->mmc), "could not get default state\n");
|
||||
|
||||
if (esdhc_is_usdhc(imx_data)) {
|
||||
host->quirks2 |= SDHCI_QUIRK2_PRESET_VALUE_BROKEN;
|
||||
host->mmc->caps |= MMC_CAP_1_8V_DDR | MMC_CAP_3_3V_DDR;
|
||||
|
@ -59,7 +59,6 @@
|
||||
struct uniphier_sd_priv {
|
||||
struct tmio_mmc_data tmio_data;
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pinstate_default;
|
||||
struct pinctrl_state *pinstate_uhs;
|
||||
struct clk *clk;
|
||||
struct reset_control *rst;
|
||||
@ -500,13 +499,12 @@ static int uniphier_sd_start_signal_voltage_switch(struct mmc_host *mmc,
|
||||
{
|
||||
struct tmio_mmc_host *host = mmc_priv(mmc);
|
||||
struct uniphier_sd_priv *priv = uniphier_sd_priv(host);
|
||||
struct pinctrl_state *pinstate;
|
||||
struct pinctrl_state *pinstate = NULL;
|
||||
u32 val, tmp;
|
||||
|
||||
switch (ios->signal_voltage) {
|
||||
case MMC_SIGNAL_VOLTAGE_330:
|
||||
val = UNIPHIER_SD_VOLT_330;
|
||||
pinstate = priv->pinstate_default;
|
||||
break;
|
||||
case MMC_SIGNAL_VOLTAGE_180:
|
||||
val = UNIPHIER_SD_VOLT_180;
|
||||
@ -521,7 +519,10 @@ static int uniphier_sd_start_signal_voltage_switch(struct mmc_host *mmc,
|
||||
tmp |= FIELD_PREP(UNIPHIER_SD_VOLT_MASK, val);
|
||||
writel(tmp, host->ctl + UNIPHIER_SD_VOLT);
|
||||
|
||||
pinctrl_select_state(priv->pinctrl, pinstate);
|
||||
if (pinstate)
|
||||
pinctrl_select_state(priv->pinctrl, pinstate);
|
||||
else
|
||||
pinctrl_select_default_state(mmc_dev(mmc));
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -533,11 +534,6 @@ static int uniphier_sd_uhs_init(struct tmio_mmc_host *host,
|
||||
if (IS_ERR(priv->pinctrl))
|
||||
return PTR_ERR(priv->pinctrl);
|
||||
|
||||
priv->pinstate_default = pinctrl_lookup_state(priv->pinctrl,
|
||||
PINCTRL_STATE_DEFAULT);
|
||||
if (IS_ERR(priv->pinstate_default))
|
||||
return PTR_ERR(priv->pinstate_default);
|
||||
|
||||
priv->pinstate_uhs = pinctrl_lookup_state(priv->pinctrl, "uhs");
|
||||
if (IS_ERR(priv->pinstate_uhs))
|
||||
return PTR_ERR(priv->pinstate_uhs);
|
||||
|
@ -199,7 +199,6 @@ struct usdhi6_host {
|
||||
|
||||
/* Pin control */
|
||||
struct pinctrl *pinctrl;
|
||||
struct pinctrl_state *pins_default;
|
||||
struct pinctrl_state *pins_uhs;
|
||||
};
|
||||
|
||||
@ -1162,8 +1161,7 @@ static int usdhi6_set_pinstates(struct usdhi6_host *host, int voltage)
|
||||
host->pins_uhs);
|
||||
|
||||
default:
|
||||
return pinctrl_select_state(host->pinctrl,
|
||||
host->pins_default);
|
||||
return pinctrl_select_default_state(mmc_dev(host->mmc));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1770,17 +1768,6 @@ static int usdhi6_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
host->pins_uhs = pinctrl_lookup_state(host->pinctrl, "state_uhs");
|
||||
if (!IS_ERR(host->pins_uhs)) {
|
||||
host->pins_default = pinctrl_lookup_state(host->pinctrl,
|
||||
PINCTRL_STATE_DEFAULT);
|
||||
|
||||
if (IS_ERR(host->pins_default)) {
|
||||
dev_err(dev,
|
||||
"UHS pinctrl requires a default pin state.\n");
|
||||
ret = PTR_ERR(host->pins_default);
|
||||
goto e_free_mmc;
|
||||
}
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
host->base = devm_ioremap_resource(dev, res);
|
||||
|
@ -1535,15 +1535,8 @@ int pinctrl_init_done(struct device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
/**
|
||||
* pinctrl_pm_select_state() - select pinctrl state for PM
|
||||
* @dev: device to select default state for
|
||||
* @state: state to set
|
||||
*/
|
||||
static int pinctrl_pm_select_state(struct device *dev,
|
||||
struct pinctrl_state *state)
|
||||
static int pinctrl_select_bound_state(struct device *dev,
|
||||
struct pinctrl_state *state)
|
||||
{
|
||||
struct dev_pin_info *pins = dev->pins;
|
||||
int ret;
|
||||
@ -1557,16 +1550,28 @@ static int pinctrl_pm_select_state(struct device *dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* pinctrl_select_default_state() - select default pinctrl state
|
||||
* @dev: device to select default state for
|
||||
*/
|
||||
int pinctrl_select_default_state(struct device *dev)
|
||||
{
|
||||
if (!dev->pins)
|
||||
return 0;
|
||||
|
||||
return pinctrl_select_bound_state(dev, dev->pins->default_state);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pinctrl_select_default_state);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
/**
|
||||
* pinctrl_pm_select_default_state() - select default pinctrl state for PM
|
||||
* @dev: device to select default state for
|
||||
*/
|
||||
int pinctrl_pm_select_default_state(struct device *dev)
|
||||
{
|
||||
if (!dev->pins)
|
||||
return 0;
|
||||
|
||||
return pinctrl_pm_select_state(dev, dev->pins->default_state);
|
||||
return pinctrl_select_default_state(dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pinctrl_pm_select_default_state);
|
||||
|
||||
@ -1579,7 +1584,7 @@ int pinctrl_pm_select_sleep_state(struct device *dev)
|
||||
if (!dev->pins)
|
||||
return 0;
|
||||
|
||||
return pinctrl_pm_select_state(dev, dev->pins->sleep_state);
|
||||
return pinctrl_select_bound_state(dev, dev->pins->sleep_state);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pinctrl_pm_select_sleep_state);
|
||||
|
||||
@ -1592,7 +1597,7 @@ int pinctrl_pm_select_idle_state(struct device *dev)
|
||||
if (!dev->pins)
|
||||
return 0;
|
||||
|
||||
return pinctrl_pm_select_state(dev, dev->pins->idle_state);
|
||||
return pinctrl_select_bound_state(dev, dev->pins->idle_state);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pinctrl_pm_select_idle_state);
|
||||
#endif
|
||||
|
@ -40,6 +40,7 @@ extern int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s);
|
||||
|
||||
extern struct pinctrl * __must_check devm_pinctrl_get(struct device *dev);
|
||||
extern void devm_pinctrl_put(struct pinctrl *p);
|
||||
extern int pinctrl_select_default_state(struct device *dev);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
extern int pinctrl_pm_select_default_state(struct device *dev);
|
||||
@ -122,6 +123,11 @@ static inline void devm_pinctrl_put(struct pinctrl *p)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int pinctrl_select_default_state(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int pinctrl_pm_select_default_state(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user