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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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 <[email protected]>
@@ -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);
}