Commit fcd76317 authored by Ryan Wanner's avatar Ryan Wanner Committed by Linus Walleij
Browse files

pinctrl: at91-pio4: Add configuration to userspace



Adding support for line bias flags that have been implented in gpio API.
There are functions in the gpiod library that can control line bias from
userspace this adds that functionality to this driver.

Adding .pin_config_set allows the driver's pin configuration to be
accessed from userspace. The general idea for this as been taken from
stm32, intel, and rockchip drivers that have userspace access for bias
flags.

Signed-off-by: default avatarRyan Wanner <Ryan.Wanner@microchip.com>
Tested-by: Nicolas Ferre <nicolas.ferre@microchip.com> # on sama5d27 som1 ek
Acked-by: default avatarNicolas Ferre <nicolas.ferre@microchip.com>
Tested-by: default avatarNicolas Ferre <nicolas.ferre@microchip.com>
Link: https://lore.kernel.org/r/20221007151647.98222-2-Ryan.Wanner@microchip.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent aef1bef2
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -897,6 +897,25 @@ static int atmel_conf_pin_config_group_set(struct pinctrl_dev *pctldev,
	return 0;
}

static int atmel_conf_pin_config_set(struct pinctrl_dev *pctldev,
				     unsigned pin,
				     unsigned long *configs,
				     unsigned num_configs)
{
	struct atmel_group *grp = atmel_pctl_find_group_by_pin(pctldev, pin);

	return atmel_conf_pin_config_group_set(pctldev, grp->pin, configs, num_configs);
}

static int atmel_conf_pin_config_get(struct pinctrl_dev *pctldev,
				     unsigned pin,
				     unsigned long *configs)
{
	struct atmel_group *grp = atmel_pctl_find_group_by_pin(pctldev, pin);

	return atmel_conf_pin_config_group_get(pctldev, grp->pin, configs);
}

static void atmel_conf_pin_config_dbg_show(struct pinctrl_dev *pctldev,
					   struct seq_file *s,
					   unsigned int pin_id)
@@ -944,6 +963,8 @@ static const struct pinconf_ops atmel_confops = {
	.pin_config_group_get	= atmel_conf_pin_config_group_get,
	.pin_config_group_set	= atmel_conf_pin_config_group_set,
	.pin_config_dbg_show	= atmel_conf_pin_config_dbg_show,
	.pin_config_set	        = atmel_conf_pin_config_set,
	.pin_config_get	        = atmel_conf_pin_config_get,
};

static struct pinctrl_desc atmel_pinctrl_desc = {
@@ -1134,6 +1155,7 @@ static int atmel_pinctrl_probe(struct platform_device *pdev)
	atmel_pioctrl->gpio_chip->label = dev_name(dev);
	atmel_pioctrl->gpio_chip->parent = dev;
	atmel_pioctrl->gpio_chip->names = atmel_pioctrl->group_names;
	atmel_pioctrl->gpio_chip->set_config = gpiochip_generic_config;

	atmel_pioctrl->pm_wakeup_sources = devm_kcalloc(dev,
			atmel_pioctrl->nbanks,