diff options
| author | martin <martin@NetBSD.org> | 2019-10-03 17:23:11 +0000 |
|---|---|---|
| committer | martin <martin@NetBSD.org> | 2019-10-03 17:23:11 +0000 |
| commit | 3cf6416b048f92a511c99f3c3858dff4be423bf8 (patch) | |
| tree | af21b3ae0fd2cc87c3bbf9682b48ca53724ee573 /sys | |
| parent | 9e2192404b4ff287e6bffc15ac65386c57c1b8dd (diff) | |
Pull up following revision(s) (requested by jmcneill in ticket #276):
sys/arch/arm/samsung/exynos_pinctrl.c: revision 1.14
sys/arch/arm/rockchip/rk3399_iomux.c: revision 1.6
sys/dev/fdt/fdtvar.h: revision 1.54
sys/arch/arm/broadcom/bcm2835_gpio.c: revision 1.14
sys/dev/i2c/axppmic.c: revision 1.26
sys/arch/arm/nvidia/tegra_pinmux.c: revision 1.4
sys/arch/arm/rockchip/rk3328_iomux.c: revision 1.3
sys/dev/fdt/fdt_pinctrl.c: revision 1.10
sys/arch/arm/amlogic/meson_pinctrl.c: revision 1.6
sys/dev/fdt/fdtbus.c: revision 1.30
sys/arch/arm/sunxi/sunxi_gpio.c: revision 1.27
Add support for devices with separate "init" and "default" pinctrl states.
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/arch/arm/amlogic/meson_pinctrl.c | 6 | ||||
| -rw-r--r-- | sys/arch/arm/broadcom/bcm2835_gpio.c | 6 | ||||
| -rw-r--r-- | sys/arch/arm/nvidia/tegra_pinmux.c | 6 | ||||
| -rw-r--r-- | sys/arch/arm/rockchip/rk3328_iomux.c | 6 | ||||
| -rw-r--r-- | sys/arch/arm/rockchip/rk3399_iomux.c | 6 | ||||
| -rw-r--r-- | sys/arch/arm/samsung/exynos_pinctrl.c | 6 | ||||
| -rw-r--r-- | sys/arch/arm/sunxi/sunxi_gpio.c | 6 | ||||
| -rw-r--r-- | sys/dev/fdt/fdt_pinctrl.c | 39 | ||||
| -rw-r--r-- | sys/dev/fdt/fdtbus.c | 48 | ||||
| -rw-r--r-- | sys/dev/fdt/fdtvar.h | 4 | ||||
| -rw-r--r-- | sys/dev/i2c/axppmic.c | 7 |
11 files changed, 71 insertions, 69 deletions
diff --git a/sys/arch/arm/amlogic/meson_pinctrl.c b/sys/arch/arm/amlogic/meson_pinctrl.c index 8006879204e..da5547b16d5 100644 --- a/sys/arch/arm/amlogic/meson_pinctrl.c +++ b/sys/arch/arm/amlogic/meson_pinctrl.c @@ -1,4 +1,4 @@ -/* $NetBSD: meson_pinctrl.c,v 1.5 2019/04/19 19:07:56 jmcneill Exp $ */ +/* $NetBSD: meson_pinctrl.c,v 1.5.6.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2019 Jared D. McNeill <jmcneill@invisible.ca> @@ -29,7 +29,7 @@ #include "opt_soc.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: meson_pinctrl.c,v 1.5 2019/04/19 19:07:56 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: meson_pinctrl.c,v 1.5.6.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -575,8 +575,6 @@ meson_pinctrl_attach(device_t parent, device_t self, void *aux) aprint_naive("\n"); aprint_normal(": %s\n", sc->sc_conf->name); - fdtbus_pinctrl_configure(); - meson_pinctrl_initgpio(sc); } diff --git a/sys/arch/arm/broadcom/bcm2835_gpio.c b/sys/arch/arm/broadcom/bcm2835_gpio.c index c8facad3fc5..12938f88492 100644 --- a/sys/arch/arm/broadcom/bcm2835_gpio.c +++ b/sys/arch/arm/broadcom/bcm2835_gpio.c @@ -1,4 +1,4 @@ -/* $NetBSD: bcm2835_gpio.c,v 1.12 2019/05/10 08:28:50 skrll Exp $ */ +/* $NetBSD: bcm2835_gpio.c,v 1.12.2.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2013, 2014, 2017 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.12 2019/05/10 08:28:50 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bcm2835_gpio.c,v 1.12.2.1 2019/10/03 17:23:11 martin Exp $"); /* * Driver for BCM2835 GPIO @@ -348,8 +348,6 @@ bcmgpio_attach(device_t parent, device_t self, void *aux) &bcm283x_pinctrl_funcs); } - fdtbus_pinctrl_configure(); - fdtbus_register_interrupt_controller(self, phandle, &bcmgpio_fdt_intrfuncs); diff --git a/sys/arch/arm/nvidia/tegra_pinmux.c b/sys/arch/arm/nvidia/tegra_pinmux.c index e50cb973418..57090e51be8 100644 --- a/sys/arch/arm/nvidia/tegra_pinmux.c +++ b/sys/arch/arm/nvidia/tegra_pinmux.c @@ -1,4 +1,4 @@ -/* $NetBSD: tegra_pinmux.c,v 1.2.4.1 2019/09/28 12:21:29 martin Exp $ */ +/* $NetBSD: tegra_pinmux.c,v 1.2.4.2 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2015-2017 Jared McNeill <jmcneill@invisible.ca> @@ -29,7 +29,7 @@ #include "opt_tegra.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: tegra_pinmux.c,v 1.2.4.1 2019/09/28 12:21:29 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: tegra_pinmux.c,v 1.2.4.2 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -285,8 +285,6 @@ tegra_pinmux_attach(device_t parent, device_t self, void *aux) for (child = OF_child(phandle); child; child = OF_peer(child)) fdtbus_register_pinctrl_config(self, child, &tegra_pinmux_funcs); - - fdtbus_pinctrl_configure(); } CFATTACH_DECL_NEW(tegra_pinmux, sizeof(struct tegra_pinmux_softc), diff --git a/sys/arch/arm/rockchip/rk3328_iomux.c b/sys/arch/arm/rockchip/rk3328_iomux.c index 4ac9660997d..d9947ab81db 100644 --- a/sys/arch/arm/rockchip/rk3328_iomux.c +++ b/sys/arch/arm/rockchip/rk3328_iomux.c @@ -1,4 +1,4 @@ -/* $NetBSD: rk3328_iomux.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $ */ +/* $NetBSD: rk3328_iomux.c,v 1.2.6.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2018 Jared McNeill <jmcneill@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk3328_iomux.c,v 1.2 2019/01/23 04:21:54 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk3328_iomux.c,v 1.2.6.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -308,8 +308,6 @@ rk3328_iomux_attach(device_t parent, device_t self, void *aux) } } - fdtbus_pinctrl_configure(); - for (child = OF_child(phandle); child; child = OF_peer(child)) { struct fdt_attach_args cfaa = *faa; cfaa.faa_phandle = child; diff --git a/sys/arch/arm/rockchip/rk3399_iomux.c b/sys/arch/arm/rockchip/rk3399_iomux.c index 94a61e55705..e56f5f3db6c 100644 --- a/sys/arch/arm/rockchip/rk3399_iomux.c +++ b/sys/arch/arm/rockchip/rk3399_iomux.c @@ -1,4 +1,4 @@ -/* $NetBSD: rk3399_iomux.c,v 1.4 2019/04/30 22:42:32 jmcneill Exp $ */ +/* $NetBSD: rk3399_iomux.c,v 1.4.4.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2018 Jared McNeill <jmcneill@invisible.ca> @@ -29,7 +29,7 @@ //#define RK3399_IOMUX_DEBUG #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: rk3399_iomux.c,v 1.4 2019/04/30 22:42:32 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: rk3399_iomux.c,v 1.4.4.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -482,8 +482,6 @@ rk3399_iomux_attach(device_t parent, device_t self, void *aux) } } - fdtbus_pinctrl_configure(); - for (child = OF_child(phandle); child; child = OF_peer(child)) { struct fdt_attach_args cfaa = *faa; cfaa.faa_phandle = child; diff --git a/sys/arch/arm/samsung/exynos_pinctrl.c b/sys/arch/arm/samsung/exynos_pinctrl.c index f2b1d9d3567..8af2b4ade1c 100644 --- a/sys/arch/arm/samsung/exynos_pinctrl.c +++ b/sys/arch/arm/samsung/exynos_pinctrl.c @@ -1,4 +1,4 @@ -/* $NetBSD: exynos_pinctrl.c,v 1.13 2018/07/02 23:54:52 jmcneill Exp $ */ +/* $NetBSD: exynos_pinctrl.c,v 1.13.4.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2015 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ #include "gpio.h" #include <sys/cdefs.h> -__KERNEL_RCSID(1, "$NetBSD: exynos_pinctrl.c,v 1.13 2018/07/02 23:54:52 jmcneill Exp $"); +__KERNEL_RCSID(1, "$NetBSD: exynos_pinctrl.c,v 1.13.4.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -124,8 +124,6 @@ exynos_pinctrl_attach(device_t parent, device_t self, void *aux) &exynos_pinctrl_controller_func); } } - - fdtbus_pinctrl_configure(); } static void diff --git a/sys/arch/arm/sunxi/sunxi_gpio.c b/sys/arch/arm/sunxi/sunxi_gpio.c index 76e8a65b09d..ff52f2740f2 100644 --- a/sys/arch/arm/sunxi/sunxi_gpio.c +++ b/sys/arch/arm/sunxi/sunxi_gpio.c @@ -1,4 +1,4 @@ -/* $NetBSD: sunxi_gpio.c,v 1.26 2019/06/04 19:49:43 tnn Exp $ */ +/* $NetBSD: sunxi_gpio.c,v 1.26.2.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2017 Jared McNeill <jmcneill@invisible.ca> @@ -29,7 +29,7 @@ #include "opt_soc.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sunxi_gpio.c,v 1.26 2019/06/04 19:49:43 tnn Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sunxi_gpio.c,v 1.26.2.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -1019,8 +1019,6 @@ sunxi_gpio_attach(device_t parent, device_t self, void *aux) fdtbus_register_pinctrl_config(self, child, &sunxi_pinctrl_funcs); } - fdtbus_pinctrl_configure(); - sunxi_gpio_attach_ports(sc); /* Disable all external interrupts */ diff --git a/sys/dev/fdt/fdt_pinctrl.c b/sys/dev/fdt/fdt_pinctrl.c index f40e5629a4e..c77ad36e793 100644 --- a/sys/dev/fdt/fdt_pinctrl.c +++ b/sys/dev/fdt/fdt_pinctrl.c @@ -1,4 +1,4 @@ -/* $NetBSD: fdt_pinctrl.c,v 1.8.4.1 2019/09/28 07:22:16 martin Exp $ */ +/* $NetBSD: fdt_pinctrl.c,v 1.8.4.2 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2019 Jason R. Thorpe @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdt_pinctrl.c,v 1.8.4.1 2019/09/28 07:22:16 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdt_pinctrl.c,v 1.8.4.2 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -123,42 +123,17 @@ fdtbus_pinctrl_set_config(int phandle, const char *cfgname) err = fdtbus_get_index(phandle, "pinctrl-names", cfgname, &index); if (err != 0) - return -1; + return ENOENT; return fdtbus_pinctrl_set_config_index(phandle, index); } -static void -fdtbus_pinctrl_configure_node(int phandle) +bool +fdtbus_pinctrl_has_config(int phandle, const char *cfgname) { - char buf[256]; - int child, error; - - for (child = OF_child(phandle); child; child = OF_peer(child)) { - if (!fdtbus_status_okay(child)) - continue; - - /* Configure child nodes */ - fdtbus_pinctrl_configure_node(child); - - /* - * Set default configuration for this node. This may fail if the - * pinctrl provider is missing; that's OK, we will re-configure - * when that provider attaches. - */ - fdtbus_get_path(child, buf, sizeof(buf)); - error = fdtbus_pinctrl_set_config(child, "default"); - if (error == 0) - aprint_debug("pinctrl: set default config for %s\n", buf); - else if (error != ENOENT) - aprint_debug("pinctrl: failed to set default config for %s: %d\n", buf, error); - } -} + u_int index; -void -fdtbus_pinctrl_configure(void) -{ - fdtbus_pinctrl_configure_node(OF_finddevice("/")); + return fdtbus_get_index(phandle, "pinctrl-names", cfgname, &index) == 0; } /* diff --git a/sys/dev/fdt/fdtbus.c b/sys/dev/fdt/fdtbus.c index f013646cd0f..7d120f31bfa 100644 --- a/sys/dev/fdt/fdtbus.c +++ b/sys/dev/fdt/fdtbus.c @@ -1,4 +1,4 @@ -/* $NetBSD: fdtbus.c,v 1.29 2019/05/25 19:21:34 jmcneill Exp $ */ +/* $NetBSD: fdtbus.c,v 1.29.2.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcneill@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.29 2019/05/25 19:21:34 jmcneill Exp $"); +__KERNEL_RCSID(0, "$NetBSD: fdtbus.c,v 1.29.2.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -56,6 +56,8 @@ struct fdt_node { u_int n_order; + bool n_pinctrl_init; + TAILQ_ENTRY(fdt_node) n_nodes; }; @@ -79,6 +81,8 @@ static cfdata_t fdt_scan_best(struct fdt_softc *, struct fdt_node *); static void fdt_scan(struct fdt_softc *, int); static void fdt_add_node(struct fdt_node *); static u_int fdt_get_order(int); +static void fdt_pre_attach(struct fdt_node *); +static void fdt_post_attach(struct fdt_node *); static const char * const fdtbus_compatible[] = { "simple-bus", NULL }; @@ -313,14 +317,20 @@ fdt_scan(struct fdt_softc *sc, int pass) /* * Attach the device. */ + fdt_pre_attach(node); node->n_dev = config_attach_loc(node->n_bus, cf_pass, locs, &faa, fdtbus_print); + if (node->n_dev != NULL) + fdt_post_attach(node); } else { /* * Default pass. */ + fdt_pre_attach(node); node->n_dev = config_found_sm_loc(node->n_bus, "fdt", locs, &faa, fdtbus_print, fdt_scan_submatch); + if (node->n_dev != NULL) + fdt_post_attach(node); } if (node->n_dev) { @@ -332,6 +342,40 @@ fdt_scan(struct fdt_softc *sc, int pass) } static void +fdt_pre_attach(struct fdt_node *node) +{ + const char *cfgname; + int error; + + node->n_pinctrl_init = fdtbus_pinctrl_has_config(node->n_phandle, "init"); + + cfgname = node->n_pinctrl_init ? "init" : "default"; + + aprint_debug_dev(node->n_bus, "set %s config for %s\n", cfgname, node->n_name); + + error = fdtbus_pinctrl_set_config(node->n_phandle, cfgname); + if (error != 0 && error != ENOENT) + aprint_debug_dev(node->n_bus, + "failed to set %s config on %s: %d\n", + cfgname, node->n_name, error); +} + +static void +fdt_post_attach(struct fdt_node *node) +{ + int error; + + if (node->n_pinctrl_init) { + aprint_debug_dev(node->n_bus, "set default config for %s\n", node->n_name); + error = fdtbus_pinctrl_set_config(node->n_phandle, "default"); + if (error != 0 && error != ENOENT) + aprint_debug_dev(node->n_bus, + "failed to set default config on %s: %d\n", + node->n_name, error); + } +} + +static void fdt_add_node(struct fdt_node *new_node) { struct fdt_node *node; diff --git a/sys/dev/fdt/fdtvar.h b/sys/dev/fdt/fdtvar.h index 976db090a50..a0c4b7b374e 100644 --- a/sys/dev/fdt/fdtvar.h +++ b/sys/dev/fdt/fdtvar.h @@ -1,4 +1,4 @@ -/* $NetBSD: fdtvar.h,v 1.52 2019/06/14 11:08:18 hkenken Exp $ */ +/* $NetBSD: fdtvar.h,v 1.52.2.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2015 Jared D. McNeill <jmcneill@invisible.ca> @@ -309,9 +309,9 @@ audio_dai_tag_t fdtbus_dai_acquire(int, const char *); audio_dai_tag_t fdtbus_dai_acquire_index(int, const char *, int); pwm_tag_t fdtbus_pwm_acquire(int, const char *); pwm_tag_t fdtbus_pwm_acquire_index(int, const char *, int); -void fdtbus_pinctrl_configure(void); int fdtbus_pinctrl_set_config_index(int, u_int); int fdtbus_pinctrl_set_config(int, const char *); +bool fdtbus_pinctrl_has_config(int, const char *); const char * fdtbus_pinctrl_parse_function(int); const void * fdtbus_pinctrl_parse_pins(int, int *); const char * fdtbus_pinctrl_parse_groups(int, int *); diff --git a/sys/dev/i2c/axppmic.c b/sys/dev/i2c/axppmic.c index 0a1bb64bcb7..8528dc585a6 100644 --- a/sys/dev/i2c/axppmic.c +++ b/sys/dev/i2c/axppmic.c @@ -1,4 +1,4 @@ -/* $NetBSD: axppmic.c,v 1.25 2019/07/27 16:02:27 thorpej Exp $ */ +/* $NetBSD: axppmic.c,v 1.25.2.1 2019/10/03 17:23:11 martin Exp $ */ /*- * Copyright (c) 2014-2018 Jared McNeill <jmcneill@invisible.ca> @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: axppmic.c,v 1.25 2019/07/27 16:02:27 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: axppmic.c,v 1.25.2.1 2019/10/03 17:23:11 martin Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -992,9 +992,6 @@ axppmic_attach(device_t parent, device_t self, void *aux) } } - /* Notify pinctrl drivers that regulators are available. */ - fdtbus_pinctrl_configure(); - if (c->has_battery) axppmic_attach_sensors(sc); } |
