Module Name: src Committed By: martin Date: Thu Oct 3 17:23:12 UTC 2019
Modified Files: src/sys/arch/arm/amlogic [netbsd-9]: meson_pinctrl.c src/sys/arch/arm/broadcom [netbsd-9]: bcm2835_gpio.c src/sys/arch/arm/nvidia [netbsd-9]: tegra_pinmux.c src/sys/arch/arm/rockchip [netbsd-9]: rk3328_iomux.c rk3399_iomux.c src/sys/arch/arm/samsung [netbsd-9]: exynos_pinctrl.c src/sys/arch/arm/sunxi [netbsd-9]: sunxi_gpio.c src/sys/dev/fdt [netbsd-9]: fdt_pinctrl.c fdtbus.c fdtvar.h src/sys/dev/i2c [netbsd-9]: axppmic.c Log Message: 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. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.5.6.1 src/sys/arch/arm/amlogic/meson_pinctrl.c cvs rdiff -u -r1.12 -r1.12.2.1 src/sys/arch/arm/broadcom/bcm2835_gpio.c cvs rdiff -u -r1.2.4.1 -r1.2.4.2 src/sys/arch/arm/nvidia/tegra_pinmux.c cvs rdiff -u -r1.2 -r1.2.6.1 src/sys/arch/arm/rockchip/rk3328_iomux.c cvs rdiff -u -r1.4 -r1.4.4.1 src/sys/arch/arm/rockchip/rk3399_iomux.c cvs rdiff -u -r1.13 -r1.13.4.1 src/sys/arch/arm/samsung/exynos_pinctrl.c cvs rdiff -u -r1.26 -r1.26.2.1 src/sys/arch/arm/sunxi/sunxi_gpio.c cvs rdiff -u -r1.8.4.1 -r1.8.4.2 src/sys/dev/fdt/fdt_pinctrl.c cvs rdiff -u -r1.29 -r1.29.2.1 src/sys/dev/fdt/fdtbus.c cvs rdiff -u -r1.52 -r1.52.2.1 src/sys/dev/fdt/fdtvar.h cvs rdiff -u -r1.25 -r1.25.2.1 src/sys/dev/i2c/axppmic.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/amlogic/meson_pinctrl.c diff -u src/sys/arch/arm/amlogic/meson_pinctrl.c:1.5 src/sys/arch/arm/amlogic/meson_pinctrl.c:1.5.6.1 --- src/sys/arch/arm/amlogic/meson_pinctrl.c:1.5 Fri Apr 19 19:07:56 2019 +++ src/sys/arch/arm/amlogic/meson_pinctrl.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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, de aprint_naive("\n"); aprint_normal(": %s\n", sc->sc_conf->name); - fdtbus_pinctrl_configure(); - meson_pinctrl_initgpio(sc); } Index: src/sys/arch/arm/broadcom/bcm2835_gpio.c diff -u src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.12 src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.12.2.1 --- src/sys/arch/arm/broadcom/bcm2835_gpio.c:1.12 Fri May 10 08:28:50 2019 +++ src/sys/arch/arm/broadcom/bcm2835_gpio.c Thu Oct 3 17:23:11 2019 @@ -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 &bcm283x_pinctrl_funcs); } - fdtbus_pinctrl_configure(); - fdtbus_register_interrupt_controller(self, phandle, &bcmgpio_fdt_intrfuncs); Index: src/sys/arch/arm/nvidia/tegra_pinmux.c diff -u src/sys/arch/arm/nvidia/tegra_pinmux.c:1.2.4.1 src/sys/arch/arm/nvidia/tegra_pinmux.c:1.2.4.2 --- src/sys/arch/arm/nvidia/tegra_pinmux.c:1.2.4.1 Sat Sep 28 12:21:29 2019 +++ src/sys/arch/arm/nvidia/tegra_pinmux.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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, dev 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), Index: src/sys/arch/arm/rockchip/rk3328_iomux.c diff -u src/sys/arch/arm/rockchip/rk3328_iomux.c:1.2 src/sys/arch/arm/rockchip/rk3328_iomux.c:1.2.6.1 --- src/sys/arch/arm/rockchip/rk3328_iomux.c:1.2 Wed Jan 23 04:21:54 2019 +++ src/sys/arch/arm/rockchip/rk3328_iomux.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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, dev } } - fdtbus_pinctrl_configure(); - for (child = OF_child(phandle); child; child = OF_peer(child)) { struct fdt_attach_args cfaa = *faa; cfaa.faa_phandle = child; Index: src/sys/arch/arm/rockchip/rk3399_iomux.c diff -u src/sys/arch/arm/rockchip/rk3399_iomux.c:1.4 src/sys/arch/arm/rockchip/rk3399_iomux.c:1.4.4.1 --- src/sys/arch/arm/rockchip/rk3399_iomux.c:1.4 Tue Apr 30 22:42:32 2019 +++ src/sys/arch/arm/rockchip/rk3399_iomux.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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, dev } } - fdtbus_pinctrl_configure(); - for (child = OF_child(phandle); child; child = OF_peer(child)) { struct fdt_attach_args cfaa = *faa; cfaa.faa_phandle = child; Index: src/sys/arch/arm/samsung/exynos_pinctrl.c diff -u src/sys/arch/arm/samsung/exynos_pinctrl.c:1.13 src/sys/arch/arm/samsung/exynos_pinctrl.c:1.13.4.1 --- src/sys/arch/arm/samsung/exynos_pinctrl.c:1.13 Mon Jul 2 23:54:52 2018 +++ src/sys/arch/arm/samsung/exynos_pinctrl.c Thu Oct 3 17:23:11 2019 @@ -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, d &exynos_pinctrl_controller_func); } } - - fdtbus_pinctrl_configure(); } static void Index: src/sys/arch/arm/sunxi/sunxi_gpio.c diff -u src/sys/arch/arm/sunxi/sunxi_gpio.c:1.26 src/sys/arch/arm/sunxi/sunxi_gpio.c:1.26.2.1 --- src/sys/arch/arm/sunxi/sunxi_gpio.c:1.26 Tue Jun 4 19:49:43 2019 +++ src/sys/arch/arm/sunxi/sunxi_gpio.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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, devic fdtbus_register_pinctrl_config(self, child, &sunxi_pinctrl_funcs); } - fdtbus_pinctrl_configure(); - sunxi_gpio_attach_ports(sc); /* Disable all external interrupts */ Index: src/sys/dev/fdt/fdt_pinctrl.c diff -u src/sys/dev/fdt/fdt_pinctrl.c:1.8.4.1 src/sys/dev/fdt/fdt_pinctrl.c:1.8.4.2 --- src/sys/dev/fdt/fdt_pinctrl.c:1.8.4.1 Sat Sep 28 07:22:16 2019 +++ src/sys/dev/fdt/fdt_pinctrl.c Thu Oct 3 17:23:11 2019 @@ -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, c 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; } /* Index: src/sys/dev/fdt/fdtbus.c diff -u src/sys/dev/fdt/fdtbus.c:1.29 src/sys/dev/fdt/fdtbus.c:1.29.2.1 --- src/sys/dev/fdt/fdtbus.c:1.29 Sat May 25 19:21:34 2019 +++ src/sys/dev/fdt/fdtbus.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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 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; Index: src/sys/dev/fdt/fdtvar.h diff -u src/sys/dev/fdt/fdtvar.h:1.52 src/sys/dev/fdt/fdtvar.h:1.52.2.1 --- src/sys/dev/fdt/fdtvar.h:1.52 Fri Jun 14 11:08:18 2019 +++ src/sys/dev/fdt/fdtvar.h Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@invisible.ca> @@ -309,9 +309,9 @@ audio_dai_tag_t fdtbus_dai_acquire(int, 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 *); Index: src/sys/dev/i2c/axppmic.c diff -u src/sys/dev/i2c/axppmic.c:1.25 src/sys/dev/i2c/axppmic.c:1.25.2.1 --- src/sys/dev/i2c/axppmic.c:1.25 Sat Jul 27 16:02:27 2019 +++ src/sys/dev/i2c/axppmic.c Thu Oct 3 17:23:11 2019 @@ -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 <jmcne...@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 } } - /* Notify pinctrl drivers that regulators are available. */ - fdtbus_pinctrl_configure(); - if (c->has_battery) axppmic_attach_sensors(sc); }