* [PATCH v7 1/3] pinctrl: use to octal permissions for debugfs files
2021-02-17 22:14 [PATCH v7 0/3] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
@ 2021-02-17 22:14 ` Drew Fustini
2021-02-17 22:14 ` [PATCH v7 2/3] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
2021-02-17 22:14 ` [PATCH v7 3/3] docs/pinctrl: document debugfs files Drew Fustini
2 siblings, 0 replies; 7+ messages in thread
From: Drew Fustini @ 2021-02-17 22:14 UTC (permalink / raw)
To: Linus Walleij, linux-gpio, linux-kernel, Tony Lindgren,
Andy Shevchenko, Alexandre Belloni, Geert Uytterhoeven,
Pantelis Antoniou, Jason Kridner, Robert Nelson, Joe Perches,
Dan Carpenter, Jonathan Corbet, linux-doc
Cc: Drew Fustini, Geert Uytterhoeven
Switch over pinctrl debugfs files to use octal permissions as they are
preferred over symbolic permissions. Refer to commit f90774e1fd27
("checkpatch: look for symbolic permissions and suggest octal instead").
Note: S_IFREG flag is added to the mode by __debugfs_create_file()
in fs/debugfs/inode.c
Suggested-by: Joe Perches <joe@perches.com>
Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Drew Fustini <drew@beagleboard.org>
---
drivers/pinctrl/core.c | 12 ++++++------
drivers/pinctrl/pinconf.c | 4 ++--
drivers/pinctrl/pinmux.c | 4 ++--
3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c
index 3663d87f51a0..07458742bc0f 100644
--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -1888,11 +1888,11 @@ static void pinctrl_init_device_debugfs(struct pinctrl_dev *pctldev)
dev_name(pctldev->dev));
return;
}
- debugfs_create_file("pins", S_IFREG | S_IRUGO,
+ debugfs_create_file("pins", 0444,
device_root, pctldev, &pinctrl_pins_fops);
- debugfs_create_file("pingroups", S_IFREG | S_IRUGO,
+ debugfs_create_file("pingroups", 0444,
device_root, pctldev, &pinctrl_groups_fops);
- debugfs_create_file("gpio-ranges", S_IFREG | S_IRUGO,
+ debugfs_create_file("gpio-ranges", 0444,
device_root, pctldev, &pinctrl_gpioranges_fops);
if (pctldev->desc->pmxops)
pinmux_init_device_debugfs(device_root, pctldev);
@@ -1914,11 +1914,11 @@ static void pinctrl_init_debugfs(void)
return;
}
- debugfs_create_file("pinctrl-devices", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinctrl-devices", 0444,
debugfs_root, NULL, &pinctrl_devices_fops);
- debugfs_create_file("pinctrl-maps", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinctrl-maps", 0444,
debugfs_root, NULL, &pinctrl_maps_fops);
- debugfs_create_file("pinctrl-handles", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinctrl-handles", 0444,
debugfs_root, NULL, &pinctrl_fops);
}
diff --git a/drivers/pinctrl/pinconf.c b/drivers/pinctrl/pinconf.c
index 02c075cc010b..d9d54065472e 100644
--- a/drivers/pinctrl/pinconf.c
+++ b/drivers/pinctrl/pinconf.c
@@ -370,9 +370,9 @@ DEFINE_SHOW_ATTRIBUTE(pinconf_groups);
void pinconf_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev)
{
- debugfs_create_file("pinconf-pins", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinconf-pins", 0444,
devroot, pctldev, &pinconf_pins_fops);
- debugfs_create_file("pinconf-groups", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinconf-groups", 0444,
devroot, pctldev, &pinconf_groups_fops);
}
diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c
index bab888fe3f8e..c651b2db0925 100644
--- a/drivers/pinctrl/pinmux.c
+++ b/drivers/pinctrl/pinmux.c
@@ -676,9 +676,9 @@ DEFINE_SHOW_ATTRIBUTE(pinmux_pins);
void pinmux_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev)
{
- debugfs_create_file("pinmux-functions", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinmux-functions", 0444,
devroot, pctldev, &pinmux_functions_fops);
- debugfs_create_file("pinmux-pins", S_IFREG | S_IRUGO,
+ debugfs_create_file("pinmux-pins", 0444,
devroot, pctldev, &pinmux_pins_fops);
}
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v7 2/3] pinctrl: pinmux: Add pinmux-select debugfs file
2021-02-17 22:14 [PATCH v7 0/3] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
2021-02-17 22:14 ` [PATCH v7 1/3] pinctrl: use to octal permissions for debugfs files Drew Fustini
@ 2021-02-17 22:14 ` Drew Fustini
2021-02-19 9:06 ` Geert Uytterhoeven
2021-02-17 22:14 ` [PATCH v7 3/3] docs/pinctrl: document debugfs files Drew Fustini
2 siblings, 1 reply; 7+ messages in thread
From: Drew Fustini @ 2021-02-17 22:14 UTC (permalink / raw)
To: Linus Walleij, linux-gpio, linux-kernel, Tony Lindgren,
Andy Shevchenko, Alexandre Belloni, Geert Uytterhoeven,
Pantelis Antoniou, Jason Kridner, Robert Nelson, Joe Perches,
Dan Carpenter, Jonathan Corbet, linux-doc
Cc: Drew Fustini
Add "pinmux-select" to debugfs which will activate a function and group:
echo "<function-name group-name>" > pinmux-select
The write operation pinmux_select() handles this by checking that the
names map to valid selectors and then calling ops->set_mux().
The existing "pinmux-functions" debugfs file lists the pin functions
registered for the pin controller. For example:
function: pinmux-uart0, groups = [ pinmux-uart0-pins ]
function: pinmux-mmc0, groups = [ pinmux-mmc0-pins ]
function: pinmux-mmc1, groups = [ pinmux-mmc1-pins ]
function: pinmux-i2c0, groups = [ pinmux-i2c0-pins ]
function: pinmux-i2c1, groups = [ pinmux-i2c1-pins ]
function: pinmux-spi1, groups = [ pinmux-spi1-pins ]
To activate function pinmux-i2c1 and group pinmux-i2c1-pins:
echo "pinmux-i2c1 pinmux-i2c1-pins" > pinmux-select
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Drew Fustini <drew@beagleboard.org>
---
drivers/pinctrl/pinmux.c | 102 +++++++++++++++++++++++++++++++++++++++
1 file changed, 102 insertions(+)
diff --git a/drivers/pinctrl/pinmux.c b/drivers/pinctrl/pinmux.c
index c651b2db0925..39770af56562 100644
--- a/drivers/pinctrl/pinmux.c
+++ b/drivers/pinctrl/pinmux.c
@@ -12,6 +12,7 @@
*/
#define pr_fmt(fmt) "pinmux core: " fmt
+#include <linux/ctype.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
@@ -673,6 +674,105 @@ void pinmux_show_setting(struct seq_file *s,
DEFINE_SHOW_ATTRIBUTE(pinmux_functions);
DEFINE_SHOW_ATTRIBUTE(pinmux_pins);
+#define PINMUX_SELECT_MAX 50
+static ssize_t pinmux_select(struct file *file, const char __user *user_buf,
+ size_t len, loff_t *ppos)
+{
+ struct seq_file *sfile = file->private_data;
+ struct pinctrl_dev *pctldev = sfile->private;
+ const struct pinmux_ops *pmxops = pctldev->desc->pmxops;
+ const char *const *groups;
+ char *buf, *fname, *gname;
+ unsigned int num_groups;
+ int fsel, gsel, ret;
+
+ if (len > PINMUX_SELECT_MAX)
+ return -ENOMEM;
+
+ buf = kzalloc(PINMUX_SELECT_MAX, GFP_KERNEL);
+ if (!buf)
+ return -ENOMEM;
+
+ ret = strncpy_from_user(buf, user_buf, PINMUX_SELECT_MAX);
+ if (ret < 0)
+ goto exit_free_buf;
+ buf[len-1] = '\0';
+
+ /* remove leading and trailing spaces of input buffer */
+ fname = strstrip(buf);
+ if (*fname == '\0') {
+ ret = -EINVAL;
+ goto exit_free_buf;
+ }
+
+ /* find a separator which is a spacelike character */
+ for (gname = fname; !isspace(*gname); gname++) {
+ if (*gname == '\0') {
+ ret = -EINVAL;
+ goto exit_free_buf;
+ }
+ }
+ *gname = '\0';
+
+ /* drop extra spaces between function and group names */
+ gname = skip_spaces(gname + 1);
+ if (*gname == '\0') {
+ ret = -EINVAL;
+ goto exit_free_buf;
+ }
+
+ ret = pinmux_func_name_to_selector(pctldev, fname);
+ if (ret < 0) {
+ dev_err(pctldev->dev, "invalid function %s in map table\n", fname);
+ goto exit_free_buf;
+ }
+ fsel = ret;
+
+ ret = pmxops->get_function_groups(pctldev, fsel, &groups, &num_groups);
+ if (ret) {
+ dev_err(pctldev->dev, "no groups for function %d (%s)", fsel, fname);
+ goto exit_free_buf;
+ }
+
+ ret = match_string(groups, num_groups, gname);
+ if (ret < 0) {
+ dev_err(pctldev->dev, "invalid group %s", gname);
+ goto exit_free_buf;
+ }
+
+ ret = pinctrl_get_group_selector(pctldev, gname);
+ if (ret < 0) {
+ dev_err(pctldev->dev, "failed to get group selector for %s", gname);
+ goto exit_free_buf;
+ }
+ gsel = ret;
+
+ ret = pmxops->set_mux(pctldev, fsel, gsel);
+ if (ret) {
+ dev_err(pctldev->dev, "set_mux() failed: %d", ret);
+ goto exit_free_buf;
+ }
+ ret = len;
+
+exit_free_buf:
+ kfree(buf);
+
+ return ret;
+}
+
+static int pinmux_select_open(struct inode *inode, struct file *file)
+{
+ return single_open(file, NULL, inode->i_private);
+}
+
+static const struct file_operations pinmux_select_ops = {
+ .owner = THIS_MODULE,
+ .open = pinmux_select_open,
+ .write = pinmux_select,
+ .llseek = no_llseek,
+ .release = single_release,
+};
+
void pinmux_init_device_debugfs(struct dentry *devroot,
struct pinctrl_dev *pctldev)
{
@@ -680,6 +780,8 @@ void pinmux_init_device_debugfs(struct dentry *devroot,
devroot, pctldev, &pinmux_functions_fops);
debugfs_create_file("pinmux-pins", 0444,
devroot, pctldev, &pinmux_pins_fops);
+ debugfs_create_file("pinmux-select", 0200,
+ devroot, pctldev, &pinmux_select_ops);
}
#endif /* CONFIG_DEBUG_FS */
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v7 2/3] pinctrl: pinmux: Add pinmux-select debugfs file
2021-02-17 22:14 ` [PATCH v7 2/3] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
@ 2021-02-19 9:06 ` Geert Uytterhoeven
2021-02-20 18:28 ` Drew Fustini
0 siblings, 1 reply; 7+ messages in thread
From: Geert Uytterhoeven @ 2021-02-19 9:06 UTC (permalink / raw)
To: Drew Fustini
Cc: Linus Walleij, open list:GPIO SUBSYSTEM,
Linux Kernel Mailing List, Tony Lindgren, Andy Shevchenko,
Alexandre Belloni, Pantelis Antoniou, Jason Kridner,
Robert Nelson, Joe Perches, Dan Carpenter, Jonathan Corbet,
open list:DOCUMENTATION
Hi Drew,
On Wed, Feb 17, 2021 at 11:15 PM Drew Fustini <drew@beagleboard.org> wrote:
> Add "pinmux-select" to debugfs which will activate a function and group:
>
> echo "<function-name group-name>" > pinmux-select
>
> The write operation pinmux_select() handles this by checking that the
> names map to valid selectors and then calling ops->set_mux().
>
> The existing "pinmux-functions" debugfs file lists the pin functions
> registered for the pin controller. For example:
>
> function: pinmux-uart0, groups = [ pinmux-uart0-pins ]
> function: pinmux-mmc0, groups = [ pinmux-mmc0-pins ]
> function: pinmux-mmc1, groups = [ pinmux-mmc1-pins ]
> function: pinmux-i2c0, groups = [ pinmux-i2c0-pins ]
> function: pinmux-i2c1, groups = [ pinmux-i2c1-pins ]
> function: pinmux-spi1, groups = [ pinmux-spi1-pins ]
>
> To activate function pinmux-i2c1 and group pinmux-i2c1-pins:
>
> echo "pinmux-i2c1 pinmux-i2c1-pins" > pinmux-select
>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Reviewed-by: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Drew Fustini <drew@beagleboard.org>
Thanks for your patch!
On R-Car M2-W, which does not use pinctrl-single, I have:
# cat pinmux-functions
...
function 14: i2c2, groups = [ i2c2 i2c2_b i2c2_c i2c2_d ]
...
function 51: ssi, groups = [ ssi0_data ssi0_data_b ssi0129_ctrl
ssi0129_ctrl_b ssi1_data ssi1_data_b ssi1_ctrl ssi1_ctrl_b ssi2_data
ssi2_ctrl ssi3_data ssi34_ctrl ssi4_data ssi4_ctrl ssi5_data ssi5_ctrl
ssi6_data ssi6_ctrl ssi7_data ssi7_data_b ssi78_ctrl ssi78_ctrl_b
ssi8_data ssi8_data_b ssi9_data ssi9_data_b ssi9_ctrl ssi9_ctrl_b ]
...
On the Koelsch board:
# cd /sys/kernel/debug/pinctrl/e6060000.pinctrl-sh-pfc/
# echo ssi ssi2_ctrl > pinmux-select # Configure i2c2 pins for ssi
# i2cdetect -y -a 2 # Fails
# echo i2c2 i2c2 > pinmux-select # Restore i2c2
# i2cdetect -y -a 2 # Works again
The order of the 2 parameters looks a bit odd to me, as the operation
configures the pins from "group" to be used for "function".
See also arch/arm/boot/dts/r8a7791-koelsch.dts
For the i2c2 example it's not that obvious, but for ssi it is.
Might feel different for pinctrl-single, and perhaps I just need to get
used to it ;-)
Anyway:
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v7 2/3] pinctrl: pinmux: Add pinmux-select debugfs file
2021-02-19 9:06 ` Geert Uytterhoeven
@ 2021-02-20 18:28 ` Drew Fustini
0 siblings, 0 replies; 7+ messages in thread
From: Drew Fustini @ 2021-02-20 18:28 UTC (permalink / raw)
To: Geert Uytterhoeven
Cc: Linus Walleij, open list:GPIO SUBSYSTEM,
Linux Kernel Mailing List, Tony Lindgren, Andy Shevchenko,
Alexandre Belloni, Pantelis Antoniou, Jason Kridner,
Robert Nelson, Joe Perches, Dan Carpenter, Jonathan Corbet,
open list:DOCUMENTATION
On Fri, Feb 19, 2021 at 10:06:51AM +0100, Geert Uytterhoeven wrote:
> Hi Drew,
>
> On Wed, Feb 17, 2021 at 11:15 PM Drew Fustini <drew@beagleboard.org> wrote:
> > Add "pinmux-select" to debugfs which will activate a function and group:
> >
> > echo "<function-name group-name>" > pinmux-select
> >
> > The write operation pinmux_select() handles this by checking that the
> > names map to valid selectors and then calling ops->set_mux().
> >
> > The existing "pinmux-functions" debugfs file lists the pin functions
> > registered for the pin controller. For example:
> >
> > function: pinmux-uart0, groups = [ pinmux-uart0-pins ]
> > function: pinmux-mmc0, groups = [ pinmux-mmc0-pins ]
> > function: pinmux-mmc1, groups = [ pinmux-mmc1-pins ]
> > function: pinmux-i2c0, groups = [ pinmux-i2c0-pins ]
> > function: pinmux-i2c1, groups = [ pinmux-i2c1-pins ]
> > function: pinmux-spi1, groups = [ pinmux-spi1-pins ]
> >
> > To activate function pinmux-i2c1 and group pinmux-i2c1-pins:
> >
> > echo "pinmux-i2c1 pinmux-i2c1-pins" > pinmux-select
> >
> > Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> > Reviewed-by: Tony Lindgren <tony@atomide.com>
> > Signed-off-by: Drew Fustini <drew@beagleboard.org>
>
> Thanks for your patch!
>
> On R-Car M2-W, which does not use pinctrl-single, I have:
>
> # cat pinmux-functions
> ...
> function 14: i2c2, groups = [ i2c2 i2c2_b i2c2_c i2c2_d ]
> ...
> function 51: ssi, groups = [ ssi0_data ssi0_data_b ssi0129_ctrl
> ssi0129_ctrl_b ssi1_data ssi1_data_b ssi1_ctrl ssi1_ctrl_b ssi2_data
> ssi2_ctrl ssi3_data ssi34_ctrl ssi4_data ssi4_ctrl ssi5_data ssi5_ctrl
> ssi6_data ssi6_ctrl ssi7_data ssi7_data_b ssi78_ctrl ssi78_ctrl_b
> ssi8_data ssi8_data_b ssi9_data ssi9_data_b ssi9_ctrl ssi9_ctrl_b ]
> ...
>
> On the Koelsch board:
>
> # cd /sys/kernel/debug/pinctrl/e6060000.pinctrl-sh-pfc/
> # echo ssi ssi2_ctrl > pinmux-select # Configure i2c2 pins for ssi
> # i2cdetect -y -a 2 # Fails
> # echo i2c2 i2c2 > pinmux-select # Restore i2c2
> # i2cdetect -y -a 2 # Works again
>
> The order of the 2 parameters looks a bit odd to me, as the operation
> configures the pins from "group" to be used for "function".
> See also arch/arm/boot/dts/r8a7791-koelsch.dts
> For the i2c2 example it's not that obvious, but for ssi it is.
> Might feel different for pinctrl-single, and perhaps I just need to get
> used to it ;-)
Thank you for comments and testing.
Regarding the order of "<function-name> <group-name>", I can change it
to "<group-name function-name>" if that seems more natural.
pinctrl-single does not actually use the group selector in pcs_set_mux()
so it essentially does not matter for pinctrl-single.
-Drew
>
> Anyway:
> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
> Tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
>
> Gr{oetje,eeting}s,
>
> Geert
>
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v7 3/3] docs/pinctrl: document debugfs files
2021-02-17 22:14 [PATCH v7 0/3] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
2021-02-17 22:14 ` [PATCH v7 1/3] pinctrl: use to octal permissions for debugfs files Drew Fustini
2021-02-17 22:14 ` [PATCH v7 2/3] pinctrl: pinmux: Add pinmux-select debugfs file Drew Fustini
@ 2021-02-17 22:14 ` Drew Fustini
2021-02-19 9:20 ` Geert Uytterhoeven
2 siblings, 1 reply; 7+ messages in thread
From: Drew Fustini @ 2021-02-17 22:14 UTC (permalink / raw)
To: Linus Walleij, linux-gpio, linux-kernel, Tony Lindgren,
Andy Shevchenko, Alexandre Belloni, Geert Uytterhoeven,
Pantelis Antoniou, Jason Kridner, Robert Nelson, Joe Perches,
Dan Carpenter, Jonathan Corbet, linux-doc
Cc: Drew Fustini
Document debugfs directories and files created for pinctrl subsystem.
Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Reviewed-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Drew Fustini <drew@beagleboard.org>
---
Documentation/driver-api/pinctl.rst | 37 +++++++++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/Documentation/driver-api/pinctl.rst b/Documentation/driver-api/pinctl.rst
index 3d2deaf48841..37bc3bd64cd8 100644
--- a/Documentation/driver-api/pinctl.rst
+++ b/Documentation/driver-api/pinctl.rst
@@ -1428,3 +1428,40 @@ on the pins defined by group B::
The above has to be done from process context. The reservation of the pins
will be done when the state is activated, so in effect one specific pin
can be used by different functions at different times on a running system.
+
+
+Debugfs files
+=============
+These files are created in ``/sys/kernel/debug/pinctrl``:
+
+- ``pinctrl-devices``: prints each pin controller device along with columns to
+ indicate support for pinmux and pinconf
+
+- ``pinctrl-handles``: iterate through the list of pin controller handles and
+ print the corresponding pinmux maps
+
+- ``pinctrl-maps``: print all pinctrl maps
+
+A sub-directory is created inside of ``/sys/kernel/debug/pinctrl`` for each pin
+controller device containing these files:
+
+- ``pins``: prints a line for each pin registered on the pin controller. The
+ pinctrl driver may add additional information such as register contents.
+
+- ``gpio-ranges``: print ranges that map gpio lines to pins on the controller
+
+- ``pingroups``: print all pin groups registered on the pin controller
+
+- ``pinconf-pins``: print pin config settings for each pin
+
+- ``pinconf-groups``: print pin config settings per pin group
+
+- ``pinmux-functions``: print each pin function along with the pin groups that
+ map to the pin function
+
+- ``pinmux-pins``: iterate through all pins and print mux owner, gpio owner
+ and if the pin is a hog
+
+- ``pinmux-select``: write to this file to activate a pin function and group::
+
+ echo "<function-name group-name>" > pinmux-select
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v7 3/3] docs/pinctrl: document debugfs files
2021-02-17 22:14 ` [PATCH v7 3/3] docs/pinctrl: document debugfs files Drew Fustini
@ 2021-02-19 9:20 ` Geert Uytterhoeven
0 siblings, 0 replies; 7+ messages in thread
From: Geert Uytterhoeven @ 2021-02-19 9:20 UTC (permalink / raw)
To: Drew Fustini
Cc: Linus Walleij, open list:GPIO SUBSYSTEM,
Linux Kernel Mailing List, Tony Lindgren, Andy Shevchenko,
Alexandre Belloni, Pantelis Antoniou, Jason Kridner,
Robert Nelson, Joe Perches, Dan Carpenter, Jonathan Corbet,
open list:DOCUMENTATION
Hi Drew,
On Wed, Feb 17, 2021 at 11:15 PM Drew Fustini <drew@beagleboard.org> wrote:
> Document debugfs directories and files created for pinctrl subsystem.
>
> Suggested-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
> Reviewed-by: Tony Lindgren <tony@atomide.com>
> Signed-off-by: Drew Fustini <drew@beagleboard.org>
Thanks for your patch!
> --- a/Documentation/driver-api/pinctl.rst
> +++ b/Documentation/driver-api/pinctl.rst
> @@ -1428,3 +1428,40 @@ on the pins defined by group B::
> The above has to be done from process context. The reservation of the pins
> will be done when the state is activated, so in effect one specific pin
> can be used by different functions at different times on a running system.
> +
> +
> +Debugfs files
> +=============
> +These files are created in ``/sys/kernel/debug/pinctrl``:
> +
> +- ``pinctrl-devices``: prints each pin controller device along with columns to
> + indicate support for pinmux and pinconf
> +
> +- ``pinctrl-handles``: iterate through the list of pin controller handles and
> + print the corresponding pinmux maps
Do you need the iterate part?
"prints each configured pin controller handle and the corresponding
pinmux maps"?
> +
> +- ``pinctrl-maps``: print all pinctrl maps
> +
> +A sub-directory is created inside of ``/sys/kernel/debug/pinctrl`` for each pin
> +controller device containing these files:
Sort the below alphabetically?
> +
> +- ``pins``: prints a line for each pin registered on the pin controller. The
> + pinctrl driver may add additional information such as register contents.
> +
> +- ``gpio-ranges``: print ranges that map gpio lines to pins on the controller
> +
> +- ``pingroups``: print all pin groups registered on the pin controller
> +
> +- ``pinconf-pins``: print pin config settings for each pin
> +
> +- ``pinconf-groups``: print pin config settings per pin group
> +
> +- ``pinmux-functions``: print each pin function along with the pin groups that
> + map to the pin function
> +
> +- ``pinmux-pins``: iterate through all pins and print mux owner, gpio owner
> + and if the pin is a hog
> +
> +- ``pinmux-select``: write to this file to activate a pin function and group::
a pin function for a group?
> +
> + echo "<function-name group-name>" > pinmux-select
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply [flat|nested] 7+ messages in thread