X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=kernel%2Fdrivers%2Fpinctrl%2Fberlin%2Fberlin.c;h=46f2b4818da3ae3a1c736b172916ab000252d3a2;hb=e09b41010ba33a20a87472ee821fa407a5b8da36;hp=7f0b0f93242b7240198283896cce5276f29006f7;hpb=f93b97fd65072de626c074dbe099a1fff05ce060;p=kvmfornfv.git diff --git a/kernel/drivers/pinctrl/berlin/berlin.c b/kernel/drivers/pinctrl/berlin/berlin.c index 7f0b0f932..46f2b4818 100644 --- a/kernel/drivers/pinctrl/berlin/berlin.c +++ b/kernel/drivers/pinctrl/berlin/berlin.c @@ -3,7 +3,7 @@ * * Copyright (C) 2014 Marvell Technology Group Ltd. * - * Antoine Ténart + * Antoine Ténart * * This file is licensed under the terms of the GNU General Public * License version 2. This program is licensed "as is" without any @@ -11,6 +11,7 @@ */ #include +#include #include #include #include @@ -291,18 +292,14 @@ static struct pinctrl_desc berlin_pctrl_desc = { .owner = THIS_MODULE, }; -int berlin_pinctrl_probe(struct platform_device *pdev, - const struct berlin_pinctrl_desc *desc) +int berlin_pinctrl_probe_regmap(struct platform_device *pdev, + const struct berlin_pinctrl_desc *desc, + struct regmap *regmap) { struct device *dev = &pdev->dev; struct berlin_pinctrl *pctrl; - struct regmap *regmap; int ret; - regmap = dev_get_regmap(&pdev->dev, NULL); - if (!regmap) - return -ENODEV; - pctrl = devm_kzalloc(dev, sizeof(*pctrl), GFP_KERNEL); if (!pctrl) return -ENOMEM; @@ -320,10 +317,24 @@ int berlin_pinctrl_probe(struct platform_device *pdev, } pctrl->pctrl_dev = pinctrl_register(&berlin_pctrl_desc, dev, pctrl); - if (!pctrl->pctrl_dev) { + if (IS_ERR(pctrl->pctrl_dev)) { dev_err(dev, "failed to register pinctrl driver\n"); - return -EINVAL; + return PTR_ERR(pctrl->pctrl_dev); } return 0; } + +int berlin_pinctrl_probe(struct platform_device *pdev, + const struct berlin_pinctrl_desc *desc) +{ + struct device *dev = &pdev->dev; + struct device_node *parent_np = of_get_parent(dev->of_node); + struct regmap *regmap = syscon_node_to_regmap(parent_np); + + of_node_put(parent_np); + if (IS_ERR(regmap)) + return PTR_ERR(regmap); + + return berlin_pinctrl_probe_regmap(pdev, desc, regmap); +}