diff mbox series

[1/2] pinctrl: at91-pio4: Add configuration to userspace

Message ID 20221007151647.98222-2-Ryan.Wanner@microchip.com
State New
Headers show
Series pinctrl:at91-pio4:add support for pullup/down | expand

Commit Message

Ryan Wanner Oct. 7, 2022, 3:16 p.m. UTC
From: Ryan Wanner <Ryan.Wanner@microchip.com>

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: Ryan Wanner <Ryan.Wanner@microchip.com>
---
 drivers/pinctrl/pinctrl-at91-pio4.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

Comments

Nicolas Ferre Oct. 10, 2022, 9:13 a.m. UTC | #1
On 07/10/2022 at 17:16, Ryan.Wanner@microchip.com wrote:
> From: Ryan Wanner <Ryan.Wanner@microchip.com>
> 
> Adding support for line bias flags that have been implented in gpio API.

Typo: implemented

> 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: Ryan Wanner <Ryan.Wanner@microchip.com>

Tested-by: Nicolas Ferre <nicolas.ferre@microchip.com> # on sama5d27 som1 ek
Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>

Thanks, best regards,
   Nicolas

> ---
>   drivers/pinctrl/pinctrl-at91-pio4.c | 22 ++++++++++++++++++++++
>   1 file changed, 22 insertions(+)
> 
> diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c
> index 517f2a6330ad..13b77f1eb6e2 100644
> --- a/drivers/pinctrl/pinctrl-at91-pio4.c
> +++ b/drivers/pinctrl/pinctrl-at91-pio4.c
> @@ -902,6 +902,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)
> @@ -949,6 +968,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 = {
> @@ -1139,6 +1160,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,
diff mbox series

Patch

diff --git a/drivers/pinctrl/pinctrl-at91-pio4.c b/drivers/pinctrl/pinctrl-at91-pio4.c
index 517f2a6330ad..13b77f1eb6e2 100644
--- a/drivers/pinctrl/pinctrl-at91-pio4.c
+++ b/drivers/pinctrl/pinctrl-at91-pio4.c
@@ -902,6 +902,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)
@@ -949,6 +968,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 = {
@@ -1139,6 +1160,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,