
On 2024/5/12 20:16, Jonas Karlman wrote:
Add get_pins_count(), get_pin_name() and get_pin_muxing() ops to support the pinmux status cmd.
=> pinmux dev pinctrl dev: pinctrl => pinmux status GPIO0_A0 : gpio GPIO0_A1 : func-1 GPIO0_A2 : gpio GPIO0_A3 : gpio GPIO0_A4 : func-1 GPIO0_A5 : gpio GPIO0_A6 : gpio GPIO0_A7 : func-1 GPIO0_B0 : gpio GPIO0_B1 : func-1 GPIO0_B2 : func-1 GPIO0_B3 : gpio [...]
The change to use ENOENT for unrouted pins also help hide a "Error -22" message for unrouted pins using the gpio status -a cmd.
Signed-off-by: Jonas Karlman jonas@kwiboo.se
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
.../pinctrl/rockchip/pinctrl-rockchip-core.c | 50 ++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c index 1a8eec19d268..fa24de37b443 100644 --- a/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c +++ b/drivers/pinctrl/rockchip/pinctrl-rockchip-core.c @@ -127,7 +127,7 @@ static int rockchip_get_mux(struct rockchip_pin_bank *bank, int pin)
if (bank->iomux[iomux_num].type & IOMUX_UNROUTED) { debug("pin %d is unrouted\n", pin);
return -EINVAL;
return -ENOENT;
}
if (bank->iomux[iomux_num].type & IOMUX_GPIO_ONLY)
@@ -194,6 +194,32 @@ static struct rockchip_pin_bank *rockchip_pin_to_bank(struct udevice *dev, return NULL; }
+static int rockchip_pinctrl_get_pins_count(struct udevice *dev) +{
- struct rockchip_pinctrl_priv *priv = dev_get_priv(dev);
- struct rockchip_pin_ctrl *ctrl = priv->ctrl;
- return ctrl->nr_pins;
+}
+static const char *rockchip_pinctrl_get_pin_name(struct udevice *dev,
unsigned int selector)
+{
- static char name[PINNAME_SIZE];
- struct rockchip_pin_bank *bank;
- unsigned int index;
- bank = rockchip_pin_to_bank(dev, selector);
- if (!bank)
return NULL;
- index = selector - bank->pin_base;
- snprintf(name, sizeof(name), "GPIO%u_%c%u",
bank->bank_num, 'A' + (index / 8), index % 8);
- return name;
+}
- static int rockchip_pin_to_mux(struct udevice *dev, unsigned int pin) { struct rockchip_pin_bank *bank;
@@ -222,6 +248,25 @@ static int rockchip_pinctrl_get_gpio_mux(struct udevice *dev, int banknum, return rockchip_get_mux(&ctrl->pin_banks[banknum], index); }
+static int rockchip_pinctrl_get_pin_muxing(struct udevice *dev,
unsigned int selector,
char *buf, int size)
+{
- int mux;
- mux = rockchip_pin_to_mux(dev, selector);
- if (mux == -ENOENT)
strlcpy(buf, "unrouted", size);
- else if (mux < 0)
return mux;
- else if (mux)
snprintf(buf, size, "func-%d", mux);
- else
strlcpy(buf, "gpio", size);
- return 0;
+}
- static int rockchip_verify_mux(struct rockchip_pin_bank *bank, int pin, int mux) {
@@ -571,8 +616,11 @@ static int rockchip_pinctrl_set_state(struct udevice *dev, }
const struct pinctrl_ops rockchip_pinctrl_ops = {
- .get_pins_count = rockchip_pinctrl_get_pins_count,
- .get_pin_name = rockchip_pinctrl_get_pin_name, .set_state = rockchip_pinctrl_set_state, .get_gpio_mux = rockchip_pinctrl_get_gpio_mux,
- .get_pin_muxing = rockchip_pinctrl_get_pin_muxing, .gpio_request_enable = rockchip_pinctrl_gpio_request_enable, };