[PATCH v5 4/4] mmc: sdhci: host: add new f_sdh30

Vincent Yang vincent.yang.fujitsu at gmail.com
Tue Jan 20 00:57:44 PST 2015


2015-01-20 16:43 GMT+08:00 Ulf Hansson <ulf.hansson at linaro.org>:
> On 20 January 2015 at 09:05, Vincent Yang
> <vincent.yang.fujitsu at gmail.com> wrote:
>> This patch adds new host controller driver for
>> Fujitsu SDHCI controller f_sdh30.
>>
>> Signed-off-by: Vincent Yang <Vincent.Yang at tw.fujitsu.com>
>> Signed-off-by: Andy Green <andy.green at linaro.org>
>> Signed-off-by: Tetsuya Takinishi <t.takinishi at jp.fujitsu.com>
>
> Thanks! I have applied this patchset for next, with the below minor changes.

Thanks a lot for your help and review!

Kind regards
Vincent

>
> [...]
>
>> +
>> +static int sdhci_f_sdh30_probe(struct platform_device *pdev)
>> +{
>> +       struct sdhci_host *host;
>> +       struct device *dev = &pdev->dev;
>> +       struct resource *res;
>> +       int irq, ctrl = 0, ret = 0;
>> +       struct f_sdhost_priv *priv;
>> +       u32 reg = 0;
>> +
>> +       irq = platform_get_irq(pdev, 0);
>> +       if (irq < 0) {
>> +               dev_err(dev, "%s: no irq specified\n", __func__);
>> +               return irq;
>> +       }
>> +
>> +       host = sdhci_alloc_host(dev, sizeof(struct sdhci_host) +
>> +                                               sizeof(struct f_sdhost_priv));
>> +       if (IS_ERR(host))
>> +               return PTR_ERR(host);
>> +
>> +       priv = sdhci_priv(host);
>> +       priv->dev = dev;
>> +
>> +       host->quirks = SDHCI_QUIRK_NO_ENDATTR_IN_NOPDESC |
>> +                      SDHCI_QUIRK_INVERTED_WRITE_PROTECT;
>> +       host->quirks2 = SDHCI_QUIRK2_SUPPORT_SINGLE |
>> +                       SDHCI_QUIRK2_TUNING_WORK_AROUND;
>> +
>> +       ret = mmc_of_parse(host->mmc);
>> +       if (ret)
>> +               goto err;
>> +
>> +       platform_set_drvdata(pdev, host);
>> +
>> +       sdhci_get_of_property(pdev);
>> +       host->hw_name = "f_sdh30";
>> +       host->ops = &sdhci_f_sdh30_ops;
>> +       host->irq = irq;
>> +
>> +       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> +       host->ioaddr = devm_ioremap_resource(&pdev->dev, res);
>> +       if (IS_ERR(host->ioaddr)) {
>> +               ret = PTR_ERR(host);
>> +               goto err;
>> +       }
>> +
>> +       priv->clk_iface = devm_clk_get(&pdev->dev, "iface");
>> +       if (IS_ERR(priv->clk_iface)) {
>> +               ret = PTR_ERR(priv->clk_iface);
>> +               dev_err(&pdev->dev, "iface clk setup failed (%d)\n", ret);
>
> No need to print this.
>
>> +               goto err;
>> +       }
>> +
>> +       ret = clk_prepare_enable(priv->clk_iface);
>> +       if (ret)
>> +               goto err;
>> +
>> +       priv->clk = devm_clk_get(&pdev->dev, "core");
>> +       if (IS_ERR(priv->clk)) {
>> +               ret = PTR_ERR(priv->clk);
>> +               dev_err(&pdev->dev, "core clk setup failed (%d)\n", ret);
>
> No need to print this.
>
>> +               goto err_clk;
>> +       }
>> +
>> +       ret = clk_prepare_enable(priv->clk);
>> +       if (ret)
>> +               goto err_clk;
>> +
>
> [...]
>
> Kind regards
> Uffe



More information about the linux-arm-kernel mailing list