lkml.org 
[lkml]   [2018]   [Mar]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 018/110] mmc: dw_mmc: Factor out dw_mci_init_slot_caps
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Shawn Lin <shawn.lin@rock-chips.com>

    commit a4faa4929ed3be15e2d500d2405f992f6dedc8eb upstream.

    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>
    Fixes: 800d78bfccb3 ("mmc: dw_mmc: add support for implementation specific callbacks")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/mmc/host/dw_mmc.c | 73 +++++++++++++++++++++++++++-------------------
    1 file changed, 43 insertions(+), 30 deletions(-)

    --- a/drivers/mmc/host/dw_mmc.c
    +++ b/drivers/mmc/host/dw_mmc.c
    @@ -2762,12 +2762,50 @@ static irqreturn_t dw_mci_interrupt(int
    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);
    @@ -2801,38 +2839,13 @@ static int dw_mci_init_slot(struct dw_mc
    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) {

    \
     
     \ /
      Last update: 2018-03-07 21:07    [W:4.499 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site