pinctrl: sandbox: Add mux information in get_pin_muxing
authorPatrick Delaunay <patrick.delaunay@st.com>
Mon, 13 Jan 2020 10:35:11 +0000 (11:35 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 17 Apr 2020 03:06:54 +0000 (23:06 -0400)
Add param information in pin information output.
This update prepare unitary test for pin configuration
in pinctrl node.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
drivers/pinctrl/pinctrl-sandbox.c

index 0786afe747fc6668cb24044f8ced3ffbff931e8e..d1a21f0f197891954900147d8c226fc170a945a1 100644 (file)
@@ -54,6 +54,10 @@ static const struct pinconf_param sandbox_conf_params[] = {
        { "input-disable", PIN_CONFIG_INPUT_ENABLE, 0 },
 };
 
+/* bitfield used to save param and value of each pin/selector */
+static unsigned int sandbox_pins_param[ARRAY_SIZE(sandbox_pins)];
+static unsigned int sandbox_pins_value[ARRAY_SIZE(sandbox_pins)];
+
 static int sandbox_get_pins_count(struct udevice *dev)
 {
        return ARRAY_SIZE(sandbox_pins);
@@ -68,8 +72,25 @@ static int sandbox_get_pin_muxing(struct udevice *dev,
                                  unsigned int selector,
                                  char *buf, int size)
 {
+       const struct pinconf_param *p;
+       int i;
+
        snprintf(buf, size, "%s", sandbox_pins_muxing[selector]);
 
+       if (sandbox_pins_param[selector]) {
+               for (i = 0, p = sandbox_conf_params;
+                    i < ARRAY_SIZE(sandbox_conf_params);
+                    i++, p++) {
+                       if ((sandbox_pins_param[selector] & BIT(p->param)) &&
+                           (!!(sandbox_pins_value[selector] & BIT(p->param)) ==
+                            p->default_value)) {
+                               strncat(buf, " ", size);
+                               strncat(buf, p->property, size);
+                       }
+               }
+       }
+       strncat(buf, ".", size);
+
        return 0;
 }
 
@@ -102,6 +123,9 @@ static int sandbox_pinmux_set(struct udevice *dev, unsigned pin_selector,
              pin_selector, sandbox_get_pin_name(dev, pin_selector),
              func_selector, sandbox_get_function_name(dev, func_selector));
 
+       sandbox_pins_param[pin_selector] = 0;
+       sandbox_pins_value[pin_selector] = 0;
+
        return 0;
 }
 
@@ -123,6 +147,12 @@ static int sandbox_pinconf_set(struct udevice *dev, unsigned pin_selector,
              pin_selector, sandbox_get_pin_name(dev, pin_selector),
              param, argument);
 
+       sandbox_pins_param[pin_selector] |= BIT(param);
+       if (argument)
+               sandbox_pins_value[pin_selector] |= BIT(param);
+       else
+               sandbox_pins_value[pin_selector] &= ~BIT(param);
+
        return 0;
 }