From: "Pali Rohár" <pali@kernel.org>
To: Stefan Roese <sr@denx.de>
Cc: Marek Behun <marek.behun@nic.cz>, u-boot@lists.denx.de
Subject: [PATCH 6/6] arm64: a37xx: pinctrl: Implement get_pins_count, get_pin_name and get_pin_muxing functions
Date: Mon, 25 Jul 2022 14:09:03 +0200 [thread overview]
Message-ID: <20220725120903.3284-7-pali@kernel.org> (raw)
In-Reply-To: <20220725120903.3284-1-pali@kernel.org>
These functions are required for 'pinmux status -a' command to print
current configuration of each MPP pin.
Signed-off-by: Pali Rohár <pali@kernel.org>
---
drivers/pinctrl/mvebu/pinctrl-armada-37xx.c | 78 +++++++++++++++++++++
1 file changed, 78 insertions(+)
diff --git a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
index 74d915950a6e..bb7a76baed1f 100644
--- a/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
+++ b/drivers/pinctrl/mvebu/pinctrl-armada-37xx.c
@@ -353,6 +353,81 @@ static int armada_37xx_pmx_gpio_disable_free(struct udevice *dev, unsigned int s
return 0;
}
+static int armada_37xx_pmx_get_pins_count(struct udevice *dev)
+{
+ struct armada_37xx_pinctrl *info = dev_get_priv(dev);
+
+ return info->data->nr_pins;
+}
+
+static const char *armada_37xx_pmx_get_pin_name(struct udevice *dev, unsigned int selector)
+{
+ struct armada_37xx_pinctrl *info = dev_get_priv(dev);
+ static char buf[sizeof("MPPx_XX")];
+
+ sprintf(buf, "MPP%c_%u", info->data->name[4], selector);
+ return buf;
+}
+
+static int armada_37xx_pmx_get_pin_muxing(struct udevice *dev, unsigned int selector,
+ char *buf, int size)
+{
+ struct armada_37xx_pinctrl *info = dev_get_priv(dev);
+ int n;
+
+ /*
+ * First check if selected pin is in some extra pin group.
+ * Function in extra pin group is active only when it is not gpio.
+ */
+ for (n = 0; n < info->data->ngroups; n++) {
+ struct armada_37xx_pin_group *grp = &info->data->groups[n];
+
+ if (selector >= grp->extra_pin && selector < grp->extra_pin + grp->extra_npins) {
+ unsigned int reg = SELECTION;
+ unsigned int mask = grp->reg_mask;
+ int f, val;
+
+ val = (readl(info->base + reg) & mask);
+
+ for (f = 0; f < NB_FUNCS && grp->funcs[f]; f++) {
+ if (grp->val[f] == val) {
+ if (strcmp(grp->funcs[f], "gpio") != 0) {
+ strlcpy(buf, grp->funcs[f], size);
+ return 0;
+ }
+ break;
+ }
+ }
+ }
+ }
+
+ /* If pin is not active in some extra pin group then check regular groups. */
+ for (n = 0; n < info->data->ngroups; n++) {
+ struct armada_37xx_pin_group *grp = &info->data->groups[n];
+
+ if (selector >= grp->start_pin && selector < grp->start_pin + grp->npins) {
+ unsigned int reg = SELECTION;
+ unsigned int mask = grp->reg_mask;
+ int f, val;
+
+ val = (readl(info->base + reg) & mask);
+
+ for (f = 0; f < NB_FUNCS && grp->funcs[f]; f++) {
+ if (grp->val[f] == val) {
+ strlcpy(buf, grp->funcs[f], size);
+ return 0;
+ }
+ }
+
+ strlcpy(buf, "unknown", size);
+ return 0;
+ }
+ }
+
+ strlcpy(buf, "unknown", size);
+ return 0;
+}
+
/**
* armada_37xx_add_function() - Add a new function to the list
* @funcs: array of function to add the new one
@@ -615,6 +690,9 @@ static int armada_37xx_gpiochip_register(struct udevice *parent,
}
static const struct pinctrl_ops armada_37xx_pinctrl_ops = {
+ .get_pins_count = armada_37xx_pmx_get_pins_count,
+ .get_pin_name = armada_37xx_pmx_get_pin_name,
+ .get_pin_muxing = armada_37xx_pmx_get_pin_muxing,
.get_groups_count = armada_37xx_pmx_get_groups_count,
.get_group_name = armada_37xx_pmx_get_group_name,
.get_functions_count = armada_37xx_pmx_get_funcs_count,
--
2.20.1
next prev parent reply other threads:[~2022-07-25 12:11 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-25 12:08 [PATCH 0/6] arm64: a37xx: pinctrl: Fix requesting GPIOs and pinmux command Pali Rohár
2022-07-25 12:08 ` [PATCH 1/6] arm64: a37xx: pinctrl: Remove unused grp->pins fields Pali Rohár
2022-07-28 6:30 ` Stefan Roese
2022-07-25 12:08 ` [PATCH 2/6] arm64: a37xx: pinctrl: Remove duplicate info->groups and info->ngroups fields Pali Rohár
2022-07-28 6:30 ` Stefan Roese
2022-07-25 12:09 ` [PATCH 3/6] arm64: a37xx: pinctrl: Mark all functions and structures as static Pali Rohár
2022-07-28 6:30 ` Stefan Roese
2022-07-25 12:09 ` [PATCH 4/6] arm64: a37xx: pinctrl: Add missing pinmuxes into the list Pali Rohár
2022-07-28 6:31 ` Stefan Roese
2022-07-25 12:09 ` [PATCH 5/6] arm64: a37xx: pinctrl: Implement gpio_request_enable for gpio functionality Pali Rohár
2022-07-28 6:32 ` Stefan Roese
2022-07-25 12:09 ` Pali Rohár [this message]
2022-07-28 6:32 ` [PATCH 6/6] arm64: a37xx: pinctrl: Implement get_pins_count, get_pin_name and get_pin_muxing functions Stefan Roese
2022-07-29 12:00 ` [PATCH 0/6] arm64: a37xx: pinctrl: Fix requesting GPIOs and pinmux command Stefan Roese
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220725120903.3284-7-pali@kernel.org \
--to=pali@kernel.org \
--cc=marek.behun@nic.cz \
--cc=sr@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.