gpio: introduce a gpio driver for SCMI
Subsystems (4)
v5 cover gpio: introduce a gpio driver for SCMI
This basically abandons my earlier attempts and goes back to Takahiro Akashi's driver. Here is the link to Takahiro's patchset:
https://lore.kernel.org/all/[email protected]/
v5: Addresses Andy's cleanups to the driver.
Adrresses Krzysztof's comments about the dt spec file. And almost all the subsystem prefixes were wrong.
v4: Addressed Andy's comments about kernel-doc
Addressed Rob's comments on the spec file
v3: Forward ported Takahiro's patches and added some fixes ups to make
it work on current kernels.
AKASHI Takahiro (3):
pinctrl: introduce pinctrl_gpio_get_config()
gpio: dt-bindings: Add bindings for pinctrl based generic gpio driver
gpio: gpio-by-pinctrl: add pinctrl based generic GPIO driver
Dan Carpenter (4):
pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE
pinctrl: scmi: Delete PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS support
pinctrl: scmi: ignore PIN_CONFIG_PERSIST_STATE
firmware: arm_scmi: Allow PINCTRL_REQUEST to return EOPNOTSUPP
.../bindings/gpio/pin-control-gpio.yaml | 59 ++++++++++ drivers/firmware/arm_scmi/pinctrl.c | 2 + drivers/gpio/Kconfig | 13 +++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-by-pinctrl.c | 101 ++++++++++++++++++ drivers/pinctrl/core.c | 31 ++++++ drivers/pinctrl/pinctrl-scmi.c | 46 +++++--- include/linux/pinctrl/consumer.h | 9 ++ 8 files changed, 249 insertions(+), 13 deletions(-) create mode 100644 Documentation/devicetree/bindings/gpio/pin-control-gpio.yaml create mode 100644 drivers/gpio/gpio-by-pinctrl.c
Signature · 1 line
2.51.0
PATCH v5 1/7 pinctrl: introduce pinctrl_gpio_get_config()
From: AKASHI Takahiro <[email protected]>
This is a counterpart of pinctrl_gpio_set_config(), which will be used to implement the ->get() interface in a GPIO driver for SCMI.
---
v5: No change
v4: Fix kernel-doc (Andy). Add r-b tags
v3: Forward port
drivers/pinctrl/core.c | 31 +++++++++++++++++++++++++++++++ include/linux/pinctrl/consumer.h | 9 +++++++++ 2 files changed, 40 insertions(+)
drivers/pinctrl/core.c +31 -0
@@ -30,6 +30,7 @@#include <linux/pinctrl/consumer.h> #include <linux/pinctrl/devinfo.h> #include <linux/pinctrl/machine.h> +#include <linux/pinctrl/pinconf.h> #include <linux/pinctrl/pinctrl.h> #include "core.h"
@@ -938,6 +939,36 @@ int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset, }EXPORT_SYMBOL_GPL (pinctrl_gpio_set_config); +/** +* pinctrl_gpio_get_config() - Get the config for a given GPIO pin +* @gc: GPIO chip structure from the GPIO subsystem +* @offset: hardware offset of the GPIO relative to the controller +* @config: the configuration to query. On success it holds the result +* Return: 0 on success, negative errno otherwise +*/ +int pinctrl_gpio_get_config (struct gpio_chip *gc,unsigned int offset,unsigned long *config) +{ +struct pinctrl_gpio_range *range; +struct pinctrl_dev *pctldev; +int ret, pin; + + ret =pinctrl_get_device_gpio_range (gc, offset, &pctldev, &range); +if (ret) +return ret; + +mutex_lock (&pctldev->mutex); + pin =gpio_to_pin (range, gc, offset); + ret =pin_config_get_for_pin (pctldev, pin, config); +mutex_unlock (&pctldev->mutex); + +if (ret) +return ret; + + *config =pinconf_to_config_argument (*config); +return 0 ; +} +EXPORT_SYMBOL_GPL (pinctrl_gpio_get_config); +static struct pinctrl_state *find_state (struct pinctrl *p,const char *name) {
include/linux/pinctrl/consumer.h +9 -0
@@ -35,6 +35,8 @@ int pinctrl_gpio_direction_output(struct gpio_chip *gc, unsigned int offset);int pinctrl_gpio_set_config (struct gpio_chip *gc,unsigned int offset,unsigned long config); +int pinctrl_gpio_get_config (struct gpio_chip *gc,unsigned int offset, +unsigned long *config);struct pinctrl *__must_check pinctrl_get (struct device *dev);void pinctrl_put (struct pinctrl *p);
@@ -101,6 +103,13 @@ pinctrl_gpio_direction_output(struct gpio_chip *gc, unsigned int offset)return 0 ; } +static inline int +pinctrl_gpio_get_config (struct gpio_chip *gc,unsigned int offset, +unsigned long *config) +{ +return 0 ; +} +static inline int pinctrl_gpio_set_config (struct gpio_chip *gc,unsigned int offset,unsigned long config)
Signature · 1 line
2.51.0
kernel test robot
build botRe: [PATCH v5 1/7] pinctrl: introduce pinctrl_gpio_get_config()
kernel test robot noticed the following build errors:
Hi Dan,
kernel test robot noticed the following build errors:
[auto build test ERROR on linusw-pinctrl/devel]
[also build test ERROR on linusw-pinctrl/for-next brgl/gpio/for-next linus/master v7.0-rc4 next-20260320] [If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Dan-Carpenter/pinctrl-introduce-pinctrl_gpio_get_config/20260321-225727 base: https://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git devel patch link: https://lore.kernel.org/r/f7a41ed017fba4a0986ffe72e06933cc1bba2406.1774087290.git.dan.carpenter%40linaro.org patch subject: [PATCH v5 1/7] pinctrl: introduce pinctrl_gpio_get_config() config: loongarch-loongson32_defconfig (https://download.01.org/0day-ci/archive/20260322/[email protected]/config) compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 4abb927bacf37f18f6359a41639a6d1b3bffffb5) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260322/[email protected]/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <[email protected]>
| Closes: https://lore.kernel.org/oe-kbuild-all/[email protected]/
All errors (new ones prefixed by >>):
>> drivers/pinctrl/core.c:961:8: error: call to undeclared function 'pin_config_get_for_pin'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
961 | ret = pin_config_get_for_pin(pctldev, pin, config);
| ^1 error generated.
vim +/pin_config_get_for_pin +961 drivers/pinctrl/core.c
941
942 /**
943 * pinctrl_gpio_get_config() - Get the config for a given GPIO pin
944 * @gc: GPIO chip structure from the GPIO subsystem
945 * @offset: hardware offset of the GPIO relative to the controller
946 * @config: the configuration to query. On success it holds the result
947 * Return: 0 on success, negative errno otherwise
948 */
949 int pinctrl_gpio_get_config(struct gpio_chip *gc, unsigned int offset, unsigned long *config)
950 {
951 struct pinctrl_gpio_range *range;
952 struct pinctrl_dev *pctldev;
953 int ret, pin;
954
955 ret = pinctrl_get_device_gpio_range(gc, offset, &pctldev, &range);
956 if (ret)
957 return ret;
958
959 mutex_lock(&pctldev->mutex);
960 pin = gpio_to_pin(range, gc, offset);
> 961 ret = pin_config_get_for_pin(pctldev, pin, config);
962 mutex_unlock(&pctldev->mutex);
963
964 if (ret)
965 return ret;
966
967 *config = pinconf_to_config_argument(*config);
968 return 0;
969 }
970 EXPORT_SYMBOL_GPL(pinctrl_gpio_get_config);
971
Signature · 2 lines
0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Re: [PATCH v5 1/7] pinctrl: introduce pinctrl_gpio_get_config()
In reply to Dan CarpenterQuoted 2 lines · Dan Carpenter
This is a counterpart of
pinctrl_gpio_set_config(), which will be used to implement the ->get() interface in a GPIO driver for SCMI.
...
drivers/pinctrl/core.c int pinctrl_gpio_set_config(struct gpio_chip *gc, unsigned int offset, · line 961
Quoted 1 line
drivers/pinctrl/core.c +1
-0+ ret =pin_config_get_for_pin (pctldev, pin, config);
Seems you need also add a stub for this for !CONFIG_GENERIC_PINCONF.
Signature · 2 lines
With Best Regards, Andy Shevchenko
PATCH v5 2/7 pinctrl: scmi: Add SCMI_PIN_INPUT_VALUE
In reply to Dan CarpenterThe PIN_CONFIG_LEVEL parameter represents the value of the pin, whether reading or writing to the pin. In SCMI, the parameter is represented by two different values SCMI_PIN_OUTPUT_VALUE for writing to a pin and SCMI_PIN_INPUT_VALUE for reading. The current code translates PIN_CONFIG_LEVEL as SCMI_PIN_OUTPUT_VALUE (writing).
Add a function to translate it to either INPUT or OUTPUT depending on whether it is called from a _get or _set() operation.
---
v5: no change
v4: add r-b tags
v3: new patch
drivers/pinctrl/pinctrl-scmi.c | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-)
drivers/pinctrl/pinctrl-scmi.c +26 -7
@@ -251,9 +251,6 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,case PIN_CONFIG_MODE_LOW_POWER : *type =SCMI_PIN_LOW_POWER_MODE ;break ; -case PIN_CONFIG_LEVEL : - *type =SCMI_PIN_OUTPUT_VALUE ; -break ;case PIN_CONFIG_OUTPUT_ENABLE : *type =SCMI_PIN_OUTPUT_MODE ;break ;
@@ -276,6 +273,28 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,return 0 ; } +static int pinctrl_scmi_map_pinconf_type_get (enum pin_config_param param, +enum scmi_pinctrl_conf_type *type) +{ +if (param ==PIN_CONFIG_LEVEL ) { + *type =SCMI_PIN_INPUT_VALUE ; +return 0 ; + } + +return pinctrl_scmi_map_pinconf_type (param, type); +} + +static int pinctrl_scmi_map_pinconf_type_set (enum pin_config_param param, +enum scmi_pinctrl_conf_type *type) +{ +if (param ==PIN_CONFIG_LEVEL ) { + *type =SCMI_PIN_OUTPUT_VALUE ; +return 0 ; + } + +return pinctrl_scmi_map_pinconf_type (param, type); +} +static int pinctrl_scmi_pinconf_get (struct pinctrl_dev *pctldev,unsigned int pin,unsigned long *config) {
@@ -290,7 +309,7 @@ static int pinctrl_scmi_pinconf_get(struct pinctrl_dev *pctldev, config_type =pinconf_to_config_param (*config); - ret =pinctrl_scmi_map_pinconf_type (config_type, &type); + ret =pinctrl_scmi_map_pinconf_type_get (config_type, &type);if (ret)return ret;
@@ -363,7 +382,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,for (i =0 ; i < num_configs; i++) { param =pinconf_to_config_param (configs[i]); - ret =pinctrl_scmi_map_pinconf_type (param, &p_config_type[i]); + ret =pinctrl_scmi_map_pinconf_type_set (param, &p_config_type[i]);if (ret) {dev_err (pmx->dev,"Error map pinconf_type %d\n" , ret); goto free_config;
@@ -405,7 +424,7 @@ static int pinctrl_scmi_pinconf_group_set(struct pinctrl_dev *pctldev,for (i =0 ; i < num_configs; i++) { param =pinconf_to_config_param (configs[i]); - ret =pinctrl_scmi_map_pinconf_type (param, &p_config_type[i]); + ret =pinctrl_scmi_map_pinconf_type_set (param, &p_config_type[i]);if (ret) {dev_err (pmx->dev,"Error map pinconf_type %d\n" , ret); goto free_config;
@@ -440,7 +459,7 @@ static int pinctrl_scmi_pinconf_group_get(struct pinctrl_dev *pctldev,return -EINVAL ; config_type =pinconf_to_config_param (*config); - ret =pinctrl_scmi_map_pinconf_type (config_type, &type); + ret =pinctrl_scmi_map_pinconf_type_get (config_type, &type);if (ret) {dev_err (pmx->dev,"Error map pinconf_type %d\n" , ret);return ret;
Signature · 1 line
2.51.0
PATCH v5 3/7 pinctrl: scmi: Delete PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS support
In reply to Dan CarpenterThe argument for PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS is supposed to be expressed in terms of ohms. But the pinctrl-scmi driver was implementing it the same as PIN_CONFIG_OUTPUT and writing either a zero or one to the pin.
The SCMI protocol doesn't have an support configuration type so just delete this code instead of replacing it.
---
Sorry, Peng Fang, I really thought that if I put CC: Peng Fan in the patch it would CC you but up to now it hasn't! I should have noticed that.
v5: fix subystem prefix
v4: add r-b tags
v3: new patch
drivers/pinctrl/pinctrl-scmi.c | 3 --- 1 file changed, 3 deletions(-)
drivers/pinctrl/pinctrl-scmi.c +0 -3
@@ -254,9 +254,6 @@ static int pinctrl_scmi_map_pinconf_type(enum pin_config_param param,case PIN_CONFIG_OUTPUT_ENABLE : *type =SCMI_PIN_OUTPUT_MODE ;break ; -case PIN_CONFIG_OUTPUT_IMPEDANCE_OHMS : - *type =SCMI_PIN_OUTPUT_VALUE ; -break ;case PIN_CONFIG_POWER_SOURCE : *type =SCMI_PIN_POWER_SOURCE ;break ;
Signature · 1 line
2.51.0
PATCH v5 4/7 pinctrl: scmi: ignore PIN_CONFIG_PERSIST_STATE
In reply to Dan CarpenterThe PIN_CONFIG_PERSIST_STATE setting ensures that the pin state persists across a sleep or controller reset. The SCMI spec does not have an equivalent command to this so just ignore it.
---
v5: fix subsystem prefix
v4: Add r-b tags
v3: No change
drivers/pinctrl/pinctrl-scmi.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-)
drivers/pinctrl/pinctrl-scmi.c +8 -4
@@ -361,7 +361,7 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,unsigned long *configs, unsigned int num_configs) { - int i, ret; + int i, cnt, ret;struct scmi_pinctrl *pmx =pinctrl_dev_get_drvdata (pctldev);enum scmi_pinctrl_conf_type config_type[SCMI_NUM_CONFIGS ];u32 config_value[SCMI_NUM_CONFIGS ];
@@ -377,17 +377,21 @@ static int pinctrl_scmi_pinconf_set(struct pinctrl_dev *pctldev,if (ret)return ret; + cnt =0 ;for (i =0 ; i < num_configs; i++) { param =pinconf_to_config_param (configs[i]); - ret =pinctrl_scmi_map_pinconf_type_set (param, &p_config_type[i]); +if (param ==PIN_CONFIG_PERSIST_STATE ) +continue ; + ret =pinctrl_scmi_map_pinconf_type_set (param, &p_config_type[cnt]);if (ret) {dev_err (pmx->dev,"Error map pinconf_type %d\n" , ret); goto free_config; } - p_config_value[i] =pinconf_to_config_argument (configs[i]); + p_config_value[cnt] =pinconf_to_config_argument (configs[i]); + cnt++; } - ret = pinctrl_ops->settings_conf (pmx->ph, pin,PIN_TYPE , num_configs, + ret = pinctrl_ops->settings_conf (pmx->ph, pin,PIN_TYPE , cnt, p_config_type, p_config_value);if (ret)dev_err (pmx->dev,"Error parsing config %d\n" , ret);
Signature · 1 line
2.51.0
PATCH v5 5/7 firmware: arm_scmi: Allow PINCTRL_REQUEST to return EOPNOTSUPP
In reply to Dan CarpenterThe SCMI protocol specification says that the PINCTRL_REQUEST and PINCTRL_RELEASE commands are optional. So if the SCMI server returns -EOPNOTSUPP, then treat that as success and continue.
---
v5: fix subsytem prefix
v4: add r-b tags
v3: new patch
drivers/firmware/arm_scmi/pinctrl.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/firmware/arm_scmi/pinctrl.c +2 -0
@@ -578,6 +578,8 @@ static int scmi_pinctrl_request_free(const struct scmi_protocol_handle *ph, tx->flags =cpu_to_le32 (type); ret = ph->xops->do_xfer (ph, t); +if (ret == -EOPNOTSUPP ) + ret =0 ; ph->xops->xfer_put (ph, t);return ret;
Signature · 1 line
2.51.0
PATCH v5 6/7 gpio: dt-bindings: Add bindings for pinctrl based generic gpio driver
In reply to Dan CarpenterFrom: AKASHI Takahiro <[email protected]>
Traditionally, firmware will provide a GPIO interface or a pin control interface. However, the SCMI protocol provides a generic pin control interface and the GPIO support is built on top of that using the normal pin control interfaces. Potentially other firmware will adopt a similar generic approach in the future.
Document how to configure the GPIO device.
---
v5: Fix subsystem prefix
Re-word the commit message
I removed all references to the driver. I also removed the reference to pin muxing because that's described in the pin control spec file.
Fix 3 vs 4 typo in the example.
v4: Changed additionalProperties: true to false.
Add gpio-line-names.
Deleted one example.
Add r-b tags
v3: Forward port and update
.../bindings/gpio/pin-control-gpio.yaml | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 Documentation/devicetree/bindings/gpio/pin-control-gpio.yaml
Documentation/devicetree/bindings/gpio/pin-control-gpio.yaml new file +59 -0
@@ -0,0 +1,59 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gpio/pin-control-gpio.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Pin control based generic GPIO controller + +description: + The pin control-based GPIO will facilitate a pin controller's ability + to drive electric lines high/low and other generic properties of a + pin controller to perform general-purpose one-bit binary I/O. + +maintainers: + - Dan Carpenter <[email protected]> + +properties: + compatible: + const: scmi-pinctrl-gpio + + gpio-controller: true + + "#gpio-cells": + const: 2 + + gpio-line-names: true + + gpio-ranges: true + + ngpios: true + +patternProperties: + "^.+-hog(-[0-9]+)?$": + type: object + + required: + - gpio-hog + +required: + - compatible + - gpio-controller + - "#gpio-cells" + - gpio-ranges + - ngpios + +additionalProperties: false + +examples: + - | + gpio { + compatible = "scmi-pinctrl-gpio"; + gpio-controller; + #gpio-cells = <2>; + ngpios = <4>; + gpio-line-names = "gpio_5_17", "gpio_5_20", "gpio_5_22", "gpio_2_1"; + gpio-ranges = <&scmi_pinctrl 0 30 4>; + pinctrl-names = "default"; + pinctrl-0 = <&keys_pins>; + };
Signature · 1 line
2.51.0
Re: [PATCH v5 6/7] gpio: dt-bindings: Add bindings for pinctrl based generic gpio driver
Quoted 11 lines · Dan Carpenter
Traditionally, firmware will provide a GPIO interface or a pin control interface. However, the SCMI protocol provides a generic pin control interface and the GPIO support is built on top of that using the normal pin control interfaces. Potentially other firmware will adopt a similar generic approach in the future.
Document how to configure the GPIO device.
Signed-off-by AKASHI Takahiro <[email protected]>Signed-off-by Dan Carpenter <[email protected]>Reviewed-by Linus Walleij <[email protected]>
Subject still did not improve. Drop driver.
A nit, subject: drop second/last, redundant "bindings". The "dt-bindings" prefix is already stating that these are bindings. See also:
https://elixir.bootlin.com/linux/v6.17-rc3/source/Documentation/devicetree/bindings/submitting-patches.rst#L18
Quoted 13 lines
Documentation/devicetree/bindings/gpio/pin-control-gpio.yaml new file +5
-0@@ -0,0 +1,59 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/gpio/pin-control-gpio.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml#
Documentation/devicetree/bindings/gpio/pin-control-gpio.yaml line 15
Quoted 10 lines
Documentation/devicetree/bindings/gpio/pin-control-gpio.yaml new file +10
-0+ +title: Pin control based generic GPIO controller + +description: + The pin control-based GPIO will facilitate a pin controller's ability + to drive electric lines high/low and other generic properties of a + pin controller to perform general-purpose one-bit binary I/O. + +maintainers: + - Dan Carpenter <[email protected]>
Typo, org.
Rest looks good, so with subject fix and above:
Best regards,
Krzysztof
Signature · 1 line
Krzysztof Kozlowski <[email protected]>
PATCH v5 7/7 gpio: gpio-by-pinctrl: add pinctrl based generic GPIO driver
In reply to Dan CarpenterFrom: AKASHI Takahiro <[email protected]>
The ARM SCMI pinctrl protocol allows GPIO access. Instead of creating a new SCMI GPIO driver, this driver is a generic GPIO driver that uses standard pinctrl interfaces.
---
v5: Clean up based on Andy's feedback:
Update Kconfig entry
Update Copyright date
Fix includes
Get rid of unused private data
Simplify pin_control_gpio_get_direction()
v4: Add r-b tags
v3: Forward port and update
drivers/gpio/Kconfig | 13 +++++ drivers/gpio/Makefile | 1 + drivers/gpio/gpio-by-pinctrl.c | 101 +++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 drivers/gpio/gpio-by-pinctrl.c
drivers/gpio/Kconfig +13 -0
@@ -246,6 +246,19 @@ config GPIO_BRCMSTB help Say yes here to enable GPIO support for Broadcom STB (BCM7XXX) SoCs. +config GPIO_BY_PINCTRL + tristate "GPIO support based on a pure pin control backend" + depends on GPIOLIB + help + Support for generic GPIO handling based on top of pin control. + Traditionally, firmware creates a GPIO interface or a pin + controller interface and we have a driver to support it. But + in SCMI, the pin control interface is generic and we can + create a simple GPIO device based on the pin control interface + without doing anything custom. + + This driver used to do GPIO over the ARM SCMI protocol. + config GPIO_CADENCE tristate "Cadence GPIO support" depends on OF_GPIO
drivers/gpio/Makefile +1 -0
@@ -51,6 +51,7 @@ obj-$(CONFIG_GPIO_BD9571MWV) += gpio-bd9571mwv.o obj-$(CONFIG_GPIO_BLZP1600) += gpio-blzp1600.o obj-$(CONFIG_GPIO_BRCMSTB) += gpio-brcmstb.o obj-$(CONFIG_GPIO_BT8XX) += gpio-bt8xx.o +obj-$(CONFIG_GPIO_BY_PINCTRL) += gpio-by-pinctrl.o obj-$(CONFIG_GPIO_CADENCE) += gpio-cadence.o obj-$(CONFIG_GPIO_CGBC) += gpio-cgbc.o obj-$(CONFIG_GPIO_CLPS711X) += gpio-clps711x.o
drivers/gpio/gpio-by-pinctrl.c new file +101 -0
101 lines not on this page · raw message
Signature · 1 line
2.51.0
Re: [PATCH v5 7/7] gpio: gpio-by-pinctrl: add pinctrl based generic GPIO driver
Quoted 3 lines · Dan Carpenter
The ARM SCMI pinctrl protocol allows GPIO access. Instead of creating a new SCMI GPIO driver, this driver is a generic GPIO driver that uses standard pinctrl interfaces.
...
drivers/gpio/gpio-by-pinctrl.c line 55
Quoted 6 lines
drivers/gpio/gpio-by-pinctrl.c new file +6
-0+static int pin_control_gpio_set (struct gpio_chip *chip,unsigned int offset, +int val) +{ +unsigned long config; + + config =PIN_CONF_PACKED (PIN_CONFIG_LEVEL , val);
No driver uses this macro directly.pinconf_to_config_packed() is.
Quoted 2 lines
(quoted diff) +2
-0+ return pinctrl_gpio_set_config(chip, offset, config); +}
Signature · 2 lines
With Best Regards, Andy Shevchenko
Bartosz Golaszewski
maintainerQuoted 10 lines · Dan Carpenter
This basically abandons my earlier attempts and goes back to Takahiro Akashi's driver. Here is the link to Takahiro's patchset:
https://lore.kernel.org/all/[email protected]/
v5: Addresses Andy's cleanups to the driver.
Adrresses Krzysztof's comments about the dt spec file. And almost all the subsystem prefixes were wrong.
Quoted 6 lines
v4: Addressed Andy's comments about kernel-doc
Addressed Rob's comments on the spec filev3: Forward ported Takahiro's patches and added some fixes ups to make
it work on current kernels.
Once ready, how should this go in? Immutable branch in pinctrl and final two patches through GPIO tree?
Bart
Linus Walleij
maintainerQuoted 11 lines · Bartosz Golaszewski
Quoted 10 lines · Dan Carpenter
This basically abandons my earlier attempts and goes back to Takahiro Akashi's driver. Here is the link to Takahiro's patchset:
https://lore.kernel.org/all/[email protected]/
v5: Addresses Andy's cleanups to the driver.
Adrresses Krzysztof's comments about the dt spec file. And almost all the subsystem prefixes were wrong.
Quoted 8 lines
Quoted 5 lines
v4: Addressed Andy's comments about kernel-doc
Addressed Rob's comments on the spec filev3: Forward ported Takahiro's patches and added some fixes ups to make
it work on current kernels.Once ready, how should this go in? Immutable branch in pinctrl and final two patches through GPIO tree?
Sounds like a plan, let's do that.
Yours,
Linus Walleij