Message ID | 1519453043-31820-1-git-send-email-shawn.lin@rock-chips.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 24 February 2018 at 07:17, Shawn Lin <shawn.lin@rock-chips.com> wrote: > Factor out dw_mci_init_slot_caps to consolidate parsing > all differents types of capabilities from host contrllers. > No functional change intended. > > Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Thanks, applied for fixes! Should we add a stable tag as well? Kind regards Uffe > --- > > drivers/mmc/host/dw_mmc.c | 73 ++++++++++++++++++++++++++++------------------- > 1 file changed, 43 insertions(+), 30 deletions(-) > > diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c > index 88171bb..d9128a5 100644 > --- a/drivers/mmc/host/dw_mmc.c > +++ b/drivers/mmc/host/dw_mmc.c > @@ -2757,12 +2757,50 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) > return IRQ_HANDLED; > } > > +static int dw_mci_init_slot_caps(struct dw_mci_slot *slot) > +{ > + struct dw_mci *host = slot->host; > + const struct dw_mci_drv_data *drv_data = host->drv_data; > + struct mmc_host *mmc = slot->mmc; > + int ctrl_id; > + > + if (host->pdata->caps) > + mmc->caps = host->pdata->caps; > + > + /* > + * Support MMC_CAP_ERASE by default. > + * It needs to use trim/discard/erase commands. > + */ > + mmc->caps |= MMC_CAP_ERASE; > + > + if (host->pdata->pm_caps) > + mmc->pm_caps = host->pdata->pm_caps; > + > + if (host->dev->of_node) { > + ctrl_id = of_alias_get_id(host->dev->of_node, "mshc"); > + if (ctrl_id < 0) > + ctrl_id = 0; > + } else { > + ctrl_id = to_platform_device(host->dev)->id; > + } > + if (drv_data && drv_data->caps) > + mmc->caps |= drv_data->caps[ctrl_id]; > + > + if (host->pdata->caps2) > + mmc->caps2 = host->pdata->caps2; > + > + /* Process SDIO IRQs through the sdio_irq_work. */ > + if (mmc->caps & MMC_CAP_SDIO_IRQ) > + mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; > + > + return 0; > +} > + > static int dw_mci_init_slot(struct dw_mci *host) > { > struct mmc_host *mmc; > struct dw_mci_slot *slot; > - const struct dw_mci_drv_data *drv_data = host->drv_data; > - int ctrl_id, ret; > + int ret; > u32 freq[2]; > > mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev); > @@ -2796,38 +2834,13 @@ static int dw_mci_init_slot(struct dw_mci *host) > if (!mmc->ocr_avail) > mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; > > - if (host->pdata->caps) > - mmc->caps = host->pdata->caps; > - > - /* > - * Support MMC_CAP_ERASE by default. > - * It needs to use trim/discard/erase commands. > - */ > - mmc->caps |= MMC_CAP_ERASE; > - > - if (host->pdata->pm_caps) > - mmc->pm_caps = host->pdata->pm_caps; > - > - if (host->dev->of_node) { > - ctrl_id = of_alias_get_id(host->dev->of_node, "mshc"); > - if (ctrl_id < 0) > - ctrl_id = 0; > - } else { > - ctrl_id = to_platform_device(host->dev)->id; > - } > - if (drv_data && drv_data->caps) > - mmc->caps |= drv_data->caps[ctrl_id]; > - > - if (host->pdata->caps2) > - mmc->caps2 = host->pdata->caps2; > - > ret = mmc_of_parse(mmc); > if (ret) > goto err_host_allocated; > > - /* Process SDIO IRQs through the sdio_irq_work. */ > - if (mmc->caps & MMC_CAP_SDIO_IRQ) > - mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; > + ret = dw_mci_init_slot_caps(slot); > + if (ret) > + goto err_host_allocated; > > /* Useful defaults if platform data is unset. */ > if (host->use_dma == TRANS_MODE_IDMAC) { > -- > 1.9.1 > > -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/host/dw_mmc.c b/drivers/mmc/host/dw_mmc.c index 88171bb..d9128a5 100644 --- a/drivers/mmc/host/dw_mmc.c +++ b/drivers/mmc/host/dw_mmc.c @@ -2757,12 +2757,50 @@ static irqreturn_t dw_mci_interrupt(int irq, void *dev_id) return IRQ_HANDLED; } +static int dw_mci_init_slot_caps(struct dw_mci_slot *slot) +{ + struct dw_mci *host = slot->host; + const struct dw_mci_drv_data *drv_data = host->drv_data; + struct mmc_host *mmc = slot->mmc; + int ctrl_id; + + if (host->pdata->caps) + mmc->caps = host->pdata->caps; + + /* + * Support MMC_CAP_ERASE by default. + * It needs to use trim/discard/erase commands. + */ + mmc->caps |= MMC_CAP_ERASE; + + if (host->pdata->pm_caps) + mmc->pm_caps = host->pdata->pm_caps; + + if (host->dev->of_node) { + ctrl_id = of_alias_get_id(host->dev->of_node, "mshc"); + if (ctrl_id < 0) + ctrl_id = 0; + } else { + ctrl_id = to_platform_device(host->dev)->id; + } + if (drv_data && drv_data->caps) + mmc->caps |= drv_data->caps[ctrl_id]; + + if (host->pdata->caps2) + mmc->caps2 = host->pdata->caps2; + + /* Process SDIO IRQs through the sdio_irq_work. */ + if (mmc->caps & MMC_CAP_SDIO_IRQ) + mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; + + return 0; +} + static int dw_mci_init_slot(struct dw_mci *host) { struct mmc_host *mmc; struct dw_mci_slot *slot; - const struct dw_mci_drv_data *drv_data = host->drv_data; - int ctrl_id, ret; + int ret; u32 freq[2]; mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev); @@ -2796,38 +2834,13 @@ static int dw_mci_init_slot(struct dw_mci *host) if (!mmc->ocr_avail) mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; - if (host->pdata->caps) - mmc->caps = host->pdata->caps; - - /* - * Support MMC_CAP_ERASE by default. - * It needs to use trim/discard/erase commands. - */ - mmc->caps |= MMC_CAP_ERASE; - - if (host->pdata->pm_caps) - mmc->pm_caps = host->pdata->pm_caps; - - if (host->dev->of_node) { - ctrl_id = of_alias_get_id(host->dev->of_node, "mshc"); - if (ctrl_id < 0) - ctrl_id = 0; - } else { - ctrl_id = to_platform_device(host->dev)->id; - } - if (drv_data && drv_data->caps) - mmc->caps |= drv_data->caps[ctrl_id]; - - if (host->pdata->caps2) - mmc->caps2 = host->pdata->caps2; - ret = mmc_of_parse(mmc); if (ret) goto err_host_allocated; - /* Process SDIO IRQs through the sdio_irq_work. */ - if (mmc->caps & MMC_CAP_SDIO_IRQ) - mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; + ret = dw_mci_init_slot_caps(slot); + if (ret) + goto err_host_allocated; /* Useful defaults if platform data is unset. */ if (host->use_dma == TRANS_MODE_IDMAC) {
Factor out dw_mci_init_slot_caps to consolidate parsing all differents types of capabilities from host contrllers. No functional change intended. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> --- drivers/mmc/host/dw_mmc.c | 73 ++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 30 deletions(-)