Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Implement subroutines for parsing out some of the generi...



details:   https://anonhg.NetBSD.org/src/rev/f3bdcaf8747f
branches:  trunk
changeset: 838588:f3bdcaf8747f
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Wed Jan 23 04:21:54 2019 +0000

description:
Implement subroutines for parsing out some of the generic properties
specified in the pinctrl bindings, and adapt Meson, Rockchip, and
Allwinner pinctrl back-ends to use them.

Ok jmcneill@

diffstat:

 sys/arch/arm/amlogic/meson_pinctrl.c |    9 +-
 sys/arch/arm/rockchip/rk3328_iomux.c |   67 ++++++-----
 sys/arch/arm/rockchip/rk3399_iomux.c |   37 +++---
 sys/arch/arm/sunxi/sunxi_gpio.c      |   32 ++---
 sys/dev/fdt/fdt_pinctrl.c            |  195 ++++++++++++++++++++++++++++++++++-
 sys/dev/fdt/fdtvar.h                 |   11 +-
 6 files changed, 276 insertions(+), 75 deletions(-)

diffs (truncated from 515 to 300 lines):

diff -r 04103bbc55cc -r f3bdcaf8747f sys/arch/arm/amlogic/meson_pinctrl.c
--- a/sys/arch/arm/amlogic/meson_pinctrl.c      Wed Jan 23 03:38:26 2019 +0000
+++ b/sys/arch/arm/amlogic/meson_pinctrl.c      Wed Jan 23 04:21:54 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: meson_pinctrl.c,v 1.1 2019/01/19 20:56:03 jmcneill Exp $ */
+/* $NetBSD: meson_pinctrl.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -29,7 +29,7 @@
 #include "opt_soc.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: meson_pinctrl.c,v 1.1 2019/01/19 20:56:03 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: meson_pinctrl.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -170,10 +170,9 @@
        if (mux == -1)
                return -1;
 
-       groups_len = OF_getproplen(mux, "groups");
-       if (groups_len <= 0)
+       groups = fdtbus_pinctrl_parse_groups(mux, &groups_len);
+       if (groups == NULL)
                return -1;
-       groups = fdtbus_get_string(mux, "groups");
 
        for (; groups_len > 0;
            groups_len -= strlen(groups) + 1, groups += strlen(groups) + 1) {
diff -r 04103bbc55cc -r f3bdcaf8747f sys/arch/arm/rockchip/rk3328_iomux.c
--- a/sys/arch/arm/rockchip/rk3328_iomux.c      Wed Jan 23 03:38:26 2019 +0000
+++ b/sys/arch/arm/rockchip/rk3328_iomux.c      Wed Jan 23 04:21:54 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3328_iomux.c,v 1.1 2018/08/12 16:48:04 jmcneill Exp $ */
+/* $NetBSD: rk3328_iomux.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk3328_iomux.c,v 1.1 2018/08/12 16:48:04 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk3328_iomux.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -190,42 +190,49 @@
 static int
 rk3328_iomux_config(struct rk3328_iomux_softc *sc, const int phandle, u_int bank, u_int idx, u_int mux)
 {
-       u_int drv;
 
-       if (of_hasprop(phandle, "bias-disable"))
+       const int bias = fdtbus_pinctrl_parse_bias(phandle, NULL);
+       switch (bias) {
+       case 0:
                rk3328_iomux_set_bias(sc, bank, idx, GRF_GPIO_P_CTL_Z);
-       else if (of_hasprop(phandle, "bias-pull-up"))
+               break;
+       case GPIO_PIN_PULLUP:
                rk3328_iomux_set_bias(sc, bank, idx, GRF_GPIO_P_CTL_PULLUP);
-       else if (of_hasprop(phandle, "bias-pull-down"))
+               break;
+       case GPIO_PIN_PULLDOWN:
                rk3328_iomux_set_bias(sc, bank, idx, GRF_GPIO_P_CTL_PULLDOWN);
+               break;
+       }
 
-       if (of_getprop_uint32(phandle, "drive-strength", &drv) == 0) {
-               switch (drv) {
-               case 2:
-                       rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_2MA);
-                       break;
-               case 4:
-                       rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_4MA);
-                       break;
-               case 8:
-                       rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_8MA);
-                       break;
-               case 12:
-                       rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_12MA);
-                       break;
-               default:
-                       aprint_error_dev(sc->sc_dev, "unsupported drive-strength %u\n", drv);
-                       return EINVAL;
-               }
+       const int drv = fdtbus_pinctrl_parse_drive_strength(phandle);
+       switch (drv) {
+       case -1:
+               break;
+       case 2:
+               rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_2MA);
+               break;
+       case 4:
+               rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_4MA);
+               break;
+       case 8:
+               rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_8MA);
+               break;
+       case 12:
+               rk3328_iomux_set_drive_strength(sc, bank, idx, GRF_GPIO_E_CTL_12MA);
+               break;
+       default:
+               aprint_error_dev(sc->sc_dev, "unsupported drive-strength %u\n", drv);
+               return EINVAL;
        }
 
 #if notyet
-       if (of_hasprop(phandle, "input-enable"))
-               rk3328_iomux_set_direction(sc, bank, idx, GPIO_PIN_INPUT, -1);
-       else if (of_hasprop(phandle, "output-high"))
-               rk3328_iomux_set_direction(sc, bank, idx, GPIO_PIN_OUTPUT, GPIO_PIN_HIGH);
-       else if (of_hasprop(phandle, "output-low"))
-               rk3328_iomux_set_direction(sc, bank, idx, GPIO_PIN_OUTPUT, GPIO_PIN_LOW);
+       int output_value;
+       const int direction =
+           fdtbus_pinctrl_parse_input_output(phandle, &output_value);
+       if (direction != -1) {
+               rk3328_iomux_set_direction(sc, bank, idx, direction,
+                   output_value);
+       }
 #endif
 
        rk3328_iomux_set_mux(sc, bank, idx, mux);
diff -r 04103bbc55cc -r f3bdcaf8747f sys/arch/arm/rockchip/rk3399_iomux.c
--- a/sys/arch/arm/rockchip/rk3399_iomux.c      Wed Jan 23 03:38:26 2019 +0000
+++ b/sys/arch/arm/rockchip/rk3399_iomux.c      Wed Jan 23 04:21:54 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_iomux.c,v 1.1 2018/08/12 16:48:05 jmcneill Exp $ */
+/* $NetBSD: rk3399_iomux.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2018 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -29,7 +29,7 @@
 //#define RK3399_IOMUX_DEBUG
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rk3399_iomux.c,v 1.1 2018/08/12 16:48:05 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rk3399_iomux.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -348,27 +348,24 @@
 static int
 rk3399_iomux_config(struct rk3399_iomux_softc *sc, const int phandle, u_int bank, u_int idx, u_int mux)
 {
-       u_int drv;
+
+       const int bias = fdtbus_pinctrl_parse_bias(phandle, NULL);
+       if (bias != -1)
+               rk3399_iomux_set_bias(sc, bank, idx, bias);
 
-       if (of_hasprop(phandle, "bias-disable"))
-               rk3399_iomux_set_bias(sc, bank, idx, 0);
-       else if (of_hasprop(phandle, "bias-pull-up"))
-               rk3399_iomux_set_bias(sc, bank, idx, GPIO_PIN_PULLUP);
-       else if (of_hasprop(phandle, "bias-pull-down"))
-               rk3399_iomux_set_bias(sc, bank, idx, GPIO_PIN_PULLDOWN);
-
-       if (of_getprop_uint32(phandle, "drive-strength", &drv) == 0) {
-               if (rk3399_iomux_set_drive_strength(sc, bank, idx, drv) != 0)
-                       return EINVAL;
-       }
+       const int drv = fdtbus_pinctrl_parse_drive_strength(phandle);
+       if (drv != -1 &&
+           rk3399_iomux_set_drive_strength(sc, bank, idx, drv) != 0)
+               return EINVAL;
 
 #if notyet
-       if (of_hasprop(phandle, "input-enable"))
-               rk3399_iomux_set_direction(sc, bank, idx, GPIO_PIN_INPUT, -1);
-       else if (of_hasprop(phandle, "output-high"))
-               rk3399_iomux_set_direction(sc, bank, idx, GPIO_PIN_OUTPUT, GPIO_PIN_HIGH);
-       else if (of_hasprop(phandle, "output-low"))
-               rk3399_iomux_set_direction(sc, bank, idx, GPIO_PIN_OUTPUT, GPIO_PIN_LOW);
+       int output_value;
+       const int direction =
+           fdtbus_pinctrl_parse_input_output(phandle, &output_value);
+       if (direction != -1) {
+               rk3399_iomux_set_direction(sc, bank, idx, direction,
+                   output_value);
+       }
 #endif
 
        rk3399_iomux_set_mux(sc, bank, idx, mux);
diff -r 04103bbc55cc -r f3bdcaf8747f sys/arch/arm/sunxi/sunxi_gpio.c
--- a/sys/arch/arm/sunxi/sunxi_gpio.c   Wed Jan 23 03:38:26 2019 +0000
+++ b/sys/arch/arm/sunxi/sunxi_gpio.c   Wed Jan 23 04:21:54 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: sunxi_gpio.c,v 1.21 2018/05/31 20:52:53 jmcneill Exp $ */
+/* $NetBSD: sunxi_gpio.c,v 1.22 2019/01/23 04:21:54 thorpej Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -29,7 +29,7 @@
 #include "opt_soc.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: sunxi_gpio.c,v 1.21 2018/05/31 20:52:53 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: sunxi_gpio.c,v 1.22 2019/01/23 04:21:54 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -582,7 +582,7 @@
 {
        const char *function;
 
-       function = fdtbus_get_string(phandle, "function");
+       function = fdtbus_pinctrl_parse_function(phandle);
        if (function != NULL)
                return function;
 
@@ -592,13 +592,12 @@
 static const char *
 sunxi_pinctrl_parse_pins(int phandle, int *pins_len)
 {
+       const char *pins;
        int len;
 
-       len = OF_getproplen(phandle, "pins");
-       if (len > 0) {
-               *pins_len = len;
-               return fdtbus_get_string(phandle, "pins");
-       }
+       pins = fdtbus_pinctrl_parse_pins(phandle, pins_len);
+       if (pins != NULL)
+               return pins;
 
        len = OF_getproplen(phandle, "allwinner,pins");
        if (len > 0) {
@@ -613,15 +612,13 @@
 sunxi_pinctrl_parse_bias(int phandle)
 {
        u_int pull;
-       int bias = -1;
+       int bias;
 
-       if (of_hasprop(phandle, "bias-disable"))
-               bias = 0;
-       else if (of_hasprop(phandle, "bias-pull-up"))
-               bias = GPIO_PIN_PULLUP;
-       else if (of_hasprop(phandle, "bias-pull-down"))
-               bias = GPIO_PIN_PULLDOWN;
-       else if (of_getprop_uint32(phandle, "allwinner,pull", &pull) == 0) {
+       bias = fdtbus_pinctrl_parse_bias(phandle, NULL);
+       if (bias != -1)
+               return bias;
+
+       if (of_getprop_uint32(phandle, "allwinner,pull", &pull) == 0) {
                switch (pull) {
                case 0:
                        bias = 0;
@@ -643,7 +640,8 @@
 {
        int val;
 
-       if (of_getprop_uint32(phandle, "drive-strength", &val) == 0)
+       val = fdtbus_pinctrl_parse_drive_strength(phandle);
+       if (val != -1)
                return val;
 
        if (of_getprop_uint32(phandle, "allwinner,drive", &val) == 0)
diff -r 04103bbc55cc -r f3bdcaf8747f sys/dev/fdt/fdt_pinctrl.c
--- a/sys/dev/fdt/fdt_pinctrl.c Wed Jan 23 03:38:26 2019 +0000
+++ b/sys/dev/fdt/fdt_pinctrl.c Wed Jan 23 04:21:54 2019 +0000
@@ -1,6 +1,7 @@
-/* $NetBSD: fdt_pinctrl.c,v 1.6 2019/01/14 12:23:53 mlelstv Exp $ */
+/* $NetBSD: fdt_pinctrl.c,v 1.7 2019/01/23 04:23:01 thorpej Exp $ */
 
 /*-
+ * Copyright (c) 2019 Jason R. Thorpe
  * Copyright (c) 2017 Jared McNeill <jmcneill%invisible.ca@localhost>
  * Copyright (c) 2015 Martin Fouts
  * All rights reserved.
@@ -28,10 +29,11 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: fdt_pinctrl.c,v 1.6 2019/01/14 12:23:53 mlelstv Exp $");
+__KERNEL_RCSID(0, "$NetBSD: fdt_pinctrl.c,v 1.7 2019/01/23 04:23:01 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
+#include <sys/gpio.h>
 #include <sys/kmem.h>
 #include <sys/queue.h>
 
@@ -166,3 +168,192 @@
 {
        fdtbus_pinctrl_configure_node(OF_finddevice("/"));
 }
+
+/*
+ * Helper routines for parsing put properties related to pinctrl bindings.
+ */
+
+/*



Home | Main Index | Thread Index | Old Index