Skip to content

Commit

Permalink
pinctrl: spear: spear: Convert to regmap
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Herve Codina authored and Linus Walleij committed Dec 4, 2021
1 parent 896568e commit d11db04
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 7 deletions.
10 changes: 7 additions & 3 deletions drivers/pinctrl/spear/pinctrl-spear.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down Expand Up @@ -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;
Expand Down
12 changes: 8 additions & 4 deletions drivers/pinctrl/spear/pinctrl-spear.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit d11db04

Please sign in to comment.