gpio: sandbox: cleanup binding support
authorPatrick Delaunay <patrick.delaunay@st.com>
Mon, 13 Jan 2020 10:35:13 +0000 (11:35 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 17 Apr 2020 03:06:54 +0000 (23:06 -0400)
Cleanup binding support, use the generic binding by default
(test u-class gpio_xlate_offs_flags function) and add
specific binding for added value.

Signed-off-by: Patrick Delaunay <patrick.delaunay@st.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
arch/sandbox/dts/test.dts
drivers/gpio/sandbox.c
include/dt-bindings/gpio/sandbox-gpio.h [new file with mode: 0644]

index 02e37ab..f5f43eb 100644 (file)
@@ -1,5 +1,8 @@
 /dts-v1/;
 
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/gpio/sandbox-gpio.h>
+
 / {
        model = "sandbox";
        compatible = "sandbox";
                ping-expect = <0>;
                ping-add = <0>;
                u-boot,dm-pre-reloc;
-               test-gpios = <&gpio_a 1>, <&gpio_a 4>, <&gpio_b 5 0 3 2 1>,
+               test-gpios = <&gpio_a 1>, <&gpio_a 4>,
+                       <&gpio_b 5 GPIO_ACTIVE_HIGH 3 2 1>,
                        <0>, <&gpio_a 12>;
-               test2-gpios = <&gpio_a 1>, <&gpio_a 4>, <&gpio_b 6 1 3 2 1>,
-                       <&gpio_b 7 2 3 2 1>, <&gpio_b 8 4 3 2 1>,
-                       <&gpio_b 9 0xc 3 2 1>;
+               test2-gpios = <&gpio_a 1>, <&gpio_a 4>,
+                       <&gpio_b 6 GPIO_ACTIVE_LOW 3 2 1>,
+                       <&gpio_b 7 GPIO_IN 3 2 1>,
+                       <&gpio_b 8 GPIO_OUT 3 2 1>,
+                       <&gpio_b 9 (GPIO_OUT|GPIO_OUT_ACTIVE) 3 2 1>;
                int-value = <1234>;
                uint-value = <(-1234)>;
                int64-value = /bits/ 64 <0x1111222233334444>;
index 91e8e06..c2a8adc 100644 (file)
@@ -10,6 +10,7 @@
 #include <asm/gpio.h>
 #include <dm/of.h>
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/gpio/sandbox-gpio.h>
 
 /* Flags for each GPIO */
 #define GPIOF_OUTPUT   (1 << 0)        /* Currently set as an output */
@@ -136,13 +137,15 @@ static int sb_gpio_xlate(struct udevice *dev, struct gpio_desc *desc,
        desc->offset = args->args[0];
        if (args->args_count < 2)
                return 0;
-       if (args->args[1] & GPIO_ACTIVE_LOW)
-               desc->flags |= GPIOD_ACTIVE_LOW;
-       if (args->args[1] & 2)
+       /* treat generic binding with gpio uclass */
+       gpio_xlate_offs_flags(dev, desc, args);
+
+       /* sandbox test specific, not defined in gpio.h */
+       if (args->args[1] & GPIO_IN)
                desc->flags |= GPIOD_IS_IN;
-       if (args->args[1] & 4)
+       if (args->args[1] & GPIO_OUT)
                desc->flags |= GPIOD_IS_OUT;
-       if (args->args[1] & 8)
+       if (args->args[1] & GPIO_OUT_ACTIVE)
                desc->flags |= GPIOD_IS_OUT_ACTIVE;
 
        return 0;
diff --git a/include/dt-bindings/gpio/sandbox-gpio.h b/include/dt-bindings/gpio/sandbox-gpio.h
new file mode 100644 (file)
index 0000000..e4bfdb3
--- /dev/null
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * This header provides constants for binding sandbox,gpio
+ *
+ */
+#ifndef _DT_BINDINGS_GPIO_SANDBOX_GPIO_H
+#define _DT_BINDINGS_GPIO_SANDBOX_GPIO_H
+
+/*
+ * Add a specific binding for sandbox gpio.
+ * The value need to be after the generic defines of
+ * dt-bindings/gpio/gpio.h
+ */
+
+/* Bit 16 express GPIO input mode */
+#define GPIO_IN                        0x10000
+
+/* Bit 17 express GPIO output mode */
+#define GPIO_OUT               0x20000
+
+/* Bit 18 express GPIO output is active */
+#define GPIO_OUT_ACTIVE                0x40000
+
+#endif