Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mmc: dw_mmc: Factor out dw_mci_init_slot_caps

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>

authored by

Shawn Lin and committed by
Ulf Hansson
a4faa492 325501d9

+43 -30
+43 -30
drivers/mmc/host/dw_mmc.c
··· 2778 2778 return IRQ_HANDLED; 2779 2779 } 2780 2780 2781 + static int dw_mci_init_slot_caps(struct dw_mci_slot *slot) 2782 + { 2783 + struct dw_mci *host = slot->host; 2784 + const struct dw_mci_drv_data *drv_data = host->drv_data; 2785 + struct mmc_host *mmc = slot->mmc; 2786 + int ctrl_id; 2787 + 2788 + if (host->pdata->caps) 2789 + mmc->caps = host->pdata->caps; 2790 + 2791 + /* 2792 + * Support MMC_CAP_ERASE by default. 2793 + * It needs to use trim/discard/erase commands. 2794 + */ 2795 + mmc->caps |= MMC_CAP_ERASE; 2796 + 2797 + if (host->pdata->pm_caps) 2798 + mmc->pm_caps = host->pdata->pm_caps; 2799 + 2800 + if (host->dev->of_node) { 2801 + ctrl_id = of_alias_get_id(host->dev->of_node, "mshc"); 2802 + if (ctrl_id < 0) 2803 + ctrl_id = 0; 2804 + } else { 2805 + ctrl_id = to_platform_device(host->dev)->id; 2806 + } 2807 + if (drv_data && drv_data->caps) 2808 + mmc->caps |= drv_data->caps[ctrl_id]; 2809 + 2810 + if (host->pdata->caps2) 2811 + mmc->caps2 = host->pdata->caps2; 2812 + 2813 + /* Process SDIO IRQs through the sdio_irq_work. */ 2814 + if (mmc->caps & MMC_CAP_SDIO_IRQ) 2815 + mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; 2816 + 2817 + return 0; 2818 + } 2819 + 2781 2820 static int dw_mci_init_slot(struct dw_mci *host) 2782 2821 { 2783 2822 struct mmc_host *mmc; 2784 2823 struct dw_mci_slot *slot; 2785 - const struct dw_mci_drv_data *drv_data = host->drv_data; 2786 - int ctrl_id, ret; 2824 + int ret; 2787 2825 u32 freq[2]; 2788 2826 2789 2827 mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev); ··· 2855 2817 if (!mmc->ocr_avail) 2856 2818 mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34; 2857 2819 2858 - if (host->pdata->caps) 2859 - mmc->caps = host->pdata->caps; 2860 - 2861 - /* 2862 - * Support MMC_CAP_ERASE by default. 2863 - * It needs to use trim/discard/erase commands. 2864 - */ 2865 - mmc->caps |= MMC_CAP_ERASE; 2866 - 2867 - if (host->pdata->pm_caps) 2868 - mmc->pm_caps = host->pdata->pm_caps; 2869 - 2870 - if (host->dev->of_node) { 2871 - ctrl_id = of_alias_get_id(host->dev->of_node, "mshc"); 2872 - if (ctrl_id < 0) 2873 - ctrl_id = 0; 2874 - } else { 2875 - ctrl_id = to_platform_device(host->dev)->id; 2876 - } 2877 - if (drv_data && drv_data->caps) 2878 - mmc->caps |= drv_data->caps[ctrl_id]; 2879 - 2880 - if (host->pdata->caps2) 2881 - mmc->caps2 = host->pdata->caps2; 2882 - 2883 2820 ret = mmc_of_parse(mmc); 2884 2821 if (ret) 2885 2822 goto err_host_allocated; 2886 2823 2887 - /* Process SDIO IRQs through the sdio_irq_work. */ 2888 - if (mmc->caps & MMC_CAP_SDIO_IRQ) 2889 - mmc->caps2 |= MMC_CAP2_SDIO_IRQ_NOTHREAD; 2824 + ret = dw_mci_init_slot_caps(slot); 2825 + if (ret) 2826 + goto err_host_allocated; 2890 2827 2891 2828 /* Useful defaults if platform data is unset. */ 2892 2829 if (host->use_dma == TRANS_MODE_IDMAC) {