On 26/06/2024 11:49, Shan-Chun Hung wrote: > Add the SDHCI driver for the MA35D1 platform. It is based upon the > SDHCI interface, but requires some extra initialization. > > +static int ma35_probe(struct platform_device *pdev) > +{ > + struct device *dev = &pdev->dev; > + struct sdhci_pltfm_host *pltfm_host; > + struct sdhci_host *host; > + struct ma35_priv *priv; > + int err; > + u32 extra, ctl; > + > + host = sdhci_pltfm_init(pdev, &sdhci_ma35_pdata, sizeof(struct ma35_priv)); > + if (IS_ERR(host)) > + return PTR_ERR(host); > + > + err = devm_add_action_or_reset(dev, ma35_sdhci_pltfm_free, pdev); > + if (err) > + return dev_err_probe(dev, err, "Failed to register sdhci_pltfm_free action\n"); > + > + /* Extra adma table cnt for cross 128M boundary handling. */ > + extra = DIV_ROUND_UP_ULL(dma_get_required_mask(dev), SZ_128M); > + extra = min(extra, SDHCI_MAX_SEGS); > + > + host->adma_table_cnt += extra; > + pltfm_host = sdhci_priv(host); > + priv = sdhci_pltfm_priv(pltfm_host); > + > + pltfm_host->clk = devm_clk_get_optional_enabled(dev, NULL); > + if (IS_ERR(pltfm_host->clk)) > + return dev_err_probe(dev, IS_ERR(pltfm_host->clk), "failed to get clk\n"); Ykes, you cannot return IS_ERR. > + > + err = mmc_of_parse(host->mmc); > + if (err) > + return err; > + > + priv->rst = devm_reset_control_get_exclusive(dev, NULL); > + if (IS_ERR(priv->rst)) > + return dev_err_probe(dev, PTR_ERR(priv->rst), "failed to get reset control\n"); > + Best regards, Krzysztof