pinctrl: spear: spear: Convert to regmap
authorHerve Codina <herve.codina@bootlin.com>
Thu, 2 Dec 2021 09:52:50 +0000 (10:52 +0100)
committerLinus Walleij <linus.walleij@linaro.org>
Sat, 4 Dec 2021 23:32:44 +0000 (00:32 +0100)
Resources need to be shared between pinmux and plgpio.

Use regmap (syscon) to access resources to allow an
easy way to share resources.

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-2-herve.codina@bootlin.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/spear/pinctrl-spear.c
drivers/pinctrl/spear/pinctrl-spear.h

index 948f56abb9ae2b16e6f6339c38b9f0d743de6f25..e0543c1ad641e802cac3fb5f6966e02dc692fe56 100644 (file)
@@ -14,6 +14,7 @@
  */
 
 #include <linux/err.h>
+#include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
@@ -367,9 +368,12 @@ int spear_pinctrl_probe(struct platform_device *pdev,
        if (!pmx)
                return -ENOMEM;
 
-       pmx->vbase = devm_platform_ioremap_resource(pdev, 0);
-       if (IS_ERR(pmx->vbase))
-               return PTR_ERR(pmx->vbase);
+       pmx->regmap = device_node_to_regmap(np);
+       if (IS_ERR(pmx->regmap)) {
+               dev_err(&pdev->dev, "Init regmap failed (%pe).\n",
+                       pmx->regmap);
+               return PTR_ERR(pmx->regmap);
+       }
 
        pmx->dev = &pdev->dev;
        pmx->machdata = machdata;
index db029b148c87fa766eddc70c03810d496b8fce08..63a0b5ea56efd1eb13d03f7cbe7476d9b7184932 100644 (file)
@@ -15,6 +15,7 @@
 #include <linux/gpio/driver.h>
 #include <linux/io.h>
 #include <linux/pinctrl/pinctrl.h>
+#include <linux/regmap.h>
 #include <linux/types.h>
 
 struct platform_device;
@@ -172,24 +173,27 @@ struct spear_pinctrl_machdata {
  * @dev: pointer to struct dev of platform_device registered
  * @pctl: pointer to struct pinctrl_dev
  * @machdata: pointer to SoC or machine specific structure
- * @vbase: virtual base address of pinmux controller
+ * @regmap: regmap of pinmux controller
  */
 struct spear_pmx {
        struct device *dev;
        struct pinctrl_dev *pctl;
        struct spear_pinctrl_machdata *machdata;
-       void __iomem *vbase;
+       struct regmap *regmap;
 };
 
 /* exported routines */
 static inline u32 pmx_readl(struct spear_pmx *pmx, u32 reg)
 {
-       return readl_relaxed(pmx->vbase + reg);
+       u32 val;
+
+       regmap_read(pmx->regmap, reg, &val);
+       return val;
 }
 
 static inline void pmx_writel(struct spear_pmx *pmx, u32 val, u32 reg)
 {
-       writel_relaxed(val, pmx->vbase + reg);
+       regmap_write(pmx->regmap, reg, val);
 }
 
 void pmx_init_addr(struct spear_pinctrl_machdata *machdata, u16 reg);