summaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/spear
diff options
context:
space:
mode:
authorHerve Codina <herve.codina@bootlin.com>2021-12-02 10:52:52 +0100
committerLinus Walleij <linus.walleij@linaro.org>2021-12-05 00:33:11 +0100
commit1288cadce4c7c2afafd13aeed64305b7fb4e280d (patch)
treef02f0ac6bf8ff40aa5fa7b67b7d2dbe67a992081 /drivers/pinctrl/spear
parent7151cef59e83695adc79bd7c539f371dc674824b (diff)
downloadlinux-1288cadce4c7c2afafd13aeed64305b7fb4e280d.tar.bz2
pinctrl: spear: plgpio: Introduce regmap phandle
Resources need to be shared between pinmux and plgpio. Introduce regmap phandle in order to retrieve the regmap from the phandle if the property is present. This allows to retrieve an external regmap (ie the one used by pinmux if the phandle references the pinmux node) from plgpio. Signed-off-by: Herve Codina <herve.codina@bootlin.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Link: https://lore.kernel.org/r/20211202095255.165797-4-herve.codina@bootlin.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/spear')
-rw-r--r--drivers/pinctrl/spear/pinctrl-plgpio.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/pinctrl/spear/pinctrl-plgpio.c b/drivers/pinctrl/spear/pinctrl-plgpio.c
index 28538ac99eed..b36449724f3f 100644
--- a/drivers/pinctrl/spear/pinctrl-plgpio.c
+++ b/drivers/pinctrl/spear/pinctrl-plgpio.c
@@ -523,6 +523,7 @@ end:
static int plgpio_probe(struct platform_device *pdev)
{
+ struct device_node *regmap_np;
struct plgpio *plgpio;
int ret, irq;
@@ -530,11 +531,22 @@ static int plgpio_probe(struct platform_device *pdev)
if (!plgpio)
return -ENOMEM;
- plgpio->regmap = device_node_to_regmap(pdev->dev.of_node);
- if (IS_ERR(plgpio->regmap)) {
- dev_err(&pdev->dev, "Init regmap failed (%pe)\n",
- plgpio->regmap);
- return PTR_ERR(plgpio->regmap);
+ regmap_np = of_parse_phandle(pdev->dev.of_node, "regmap", 0);
+ if (regmap_np) {
+ plgpio->regmap = device_node_to_regmap(regmap_np);
+ of_node_put(regmap_np);
+ if (IS_ERR(plgpio->regmap)) {
+ dev_err(&pdev->dev, "Retrieve regmap failed (%pe)\n",
+ plgpio->regmap);
+ return PTR_ERR(plgpio->regmap);
+ }
+ } else {
+ plgpio->regmap = device_node_to_regmap(pdev->dev.of_node);
+ if (IS_ERR(plgpio->regmap)) {
+ dev_err(&pdev->dev, "Init regmap failed (%pe)\n",
+ plgpio->regmap);
+ return PTR_ERR(plgpio->regmap);
+ }
}
ret = plgpio_probe_dt(pdev, plgpio);