Message ID | 20220601100214.828595-6-Basavaraj.Natikar@amd.com |
---|---|
State | New |
Headers | show |
Series | Enhancements to AMD pinctrl and implementation of AMD pinmux | expand |
On Wed, Jun 01, 2022 at 03:32:13PM +0530, Basavaraj Natikar wrote: > Presently there is no way to change pinmux configuration run time. > Hence add a function to get IOMUX resource which can be used to > configure IOMUX GPIO pins run time. ... > +static void amd_get_iomux_res(struct amd_gpio *gpio_dev) > +{ > + struct pinctrl_desc *desc = &amd_pinctrl_desc; > + struct device *dev = &gpio_dev->pdev->dev; > + struct resource *res; > + int index; > + > + index = device_property_match_string(dev, "pinctrl-resource-names", "iomux"); > + if (index > 0) { > + res = platform_get_resource(gpio_dev->pdev, IORESOURCE_MEM, index); > + if (!res) { > + dev_warn(dev, "Failed to get iomux %d io resource\n", index); > + return; > + } > + > + gpio_dev->iomux_base = devm_ioremap(dev, res->start, resource_size(res)); > + if (!gpio_dev->iomux_base) { > + desc->pmxops = NULL; > + dev_warn(dev, "failed to devm_ioremap() iomux_base\n"); > + } iomux_base = devm_platform_ioremap_resource(..., index); if (IS_ERR(...)) dev_warn(); > + } else { > + desc->pmxops = NULL; > + dev_warn(dev, "failed to get iomux index\n"); > + } > +}
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c index 0645c2c24f50..c037e932d37d 100644 --- a/drivers/pinctrl/pinctrl-amd.c +++ b/drivers/pinctrl/pinctrl-amd.c @@ -963,6 +963,32 @@ static struct pinctrl_desc amd_pinctrl_desc = { .owner = THIS_MODULE, }; +static void amd_get_iomux_res(struct amd_gpio *gpio_dev) +{ + struct pinctrl_desc *desc = &amd_pinctrl_desc; + struct device *dev = &gpio_dev->pdev->dev; + struct resource *res; + int index; + + index = device_property_match_string(dev, "pinctrl-resource-names", "iomux"); + if (index > 0) { + res = platform_get_resource(gpio_dev->pdev, IORESOURCE_MEM, index); + if (!res) { + dev_warn(dev, "Failed to get iomux %d io resource\n", index); + return; + } + + gpio_dev->iomux_base = devm_ioremap(dev, res->start, resource_size(res)); + if (!gpio_dev->iomux_base) { + desc->pmxops = NULL; + dev_warn(dev, "failed to devm_ioremap() iomux_base\n"); + } + } else { + desc->pmxops = NULL; + dev_warn(dev, "failed to get iomux index\n"); + } +} + static int amd_gpio_probe(struct platform_device *pdev) { int ret = 0; @@ -1020,6 +1046,7 @@ static int amd_gpio_probe(struct platform_device *pdev) gpio_dev->ngroups = ARRAY_SIZE(kerncz_groups); amd_pinctrl_desc.name = dev_name(&pdev->dev); + amd_get_iomux_res(gpio_dev); gpio_dev->pctrl = devm_pinctrl_register(&pdev->dev, &amd_pinctrl_desc, gpio_dev); if (IS_ERR(gpio_dev->pctrl)) { diff --git a/drivers/pinctrl/pinctrl-amd.h b/drivers/pinctrl/pinctrl-amd.h index be74fb106fa7..8ab4bf422ddf 100644 --- a/drivers/pinctrl/pinctrl-amd.h +++ b/drivers/pinctrl/pinctrl-amd.h @@ -83,6 +83,7 @@ struct amd_function { struct amd_gpio { raw_spinlock_t lock; void __iomem *base; + void __iomem *iomux_base; const struct pingroup *groups; u32 ngroups;
Presently there is no way to change pinmux configuration run time. Hence add a function to get IOMUX resource which can be used to configure IOMUX GPIO pins run time. Signed-off-by: Basavaraj Natikar <Basavaraj.Natikar@amd.com> --- drivers/pinctrl/pinctrl-amd.c | 27 +++++++++++++++++++++++++++ drivers/pinctrl/pinctrl-amd.h | 1 + 2 files changed, 28 insertions(+)