svn commit: r307092 - head/sys/arm/broadcom/bcm2835

Oleksandr Tymoshenko gonzo at FreeBSD.org
Wed Oct 12 03:06:07 UTC 2016


Author: gonzo
Date: Wed Oct 12 03:06:05 2016
New Revision: 307092
URL: https://svnweb.freebsd.org/changeset/base/307092

Log:
  Make BCM2835 GPIO driver compatible with upstream DT
  
  - Add compatibility string
  - Make reserverd and read-only properties optional

Modified:
  head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c

Modified: head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c
==============================================================================
--- head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c	Wed Oct 12 03:03:55 2016	(r307091)
+++ head/sys/arm/broadcom/bcm2835/bcm2835_gpio.c	Wed Oct 12 03:06:05 2016	(r307092)
@@ -82,8 +82,6 @@ static struct resource_spec bcm_gpio_res
 	{ SYS_RES_MEMORY, 0, RF_ACTIVE },
 	{ SYS_RES_IRQ, 0, RF_ACTIVE },	/* bank 0 interrupt */
 	{ SYS_RES_IRQ, 1, RF_ACTIVE },	/* bank 1 interrupt */
-	{ SYS_RES_IRQ, 2, RF_ACTIVE },	/* bank 1 interrupt (mirrored) */
-	{ SYS_RES_IRQ, 3, RF_ACTIVE },	/* bank 0-1 interrupt (united) */
 	{ -1, 0, 0 }
 };
 
@@ -159,6 +157,12 @@ enum bcm_gpio_pud {
 #define	BCM_GPIO_GPPUD(_bank)	(0x94)			/* Pin Pull up/down */
 #define	BCM_GPIO_GPPUDCLK(_bank) (0x98 + _bank * 4)	/* Pin Pull up clock */
 
+static struct ofw_compat_data compat_data[] = {
+	{"broadcom,bcm2835-gpio",	1},
+	{"brcm,bcm2835-gpio",		1},
+	{NULL,				0}
+};
+
 static struct bcm_gpio_softc *bcm_gpio_sc = NULL;
 
 #ifdef INTRNG
@@ -672,11 +676,11 @@ bcm_gpio_get_reserved_pins(struct bcm_gp
 	phandle_t gpio, node, reserved;
 	ssize_t len;
 
-	/* Get read-only pins. */
+	/* Get read-only pins if they're porvided */
 	gpio = ofw_bus_get_node(sc->sc_dev);
 	if (bcm_gpio_get_ro_pins(sc, gpio, "broadcom,read-only",
 	    "read-only") != 0)
-		return (-1);
+		return (0);
 	/* Traverse the GPIO subnodes to find the reserved pins node. */
 	reserved = 0;
 	node = OF_child(gpio);
@@ -742,7 +746,7 @@ bcm_gpio_probe(device_t dev)
 	if (!ofw_bus_status_okay(dev))
 		return (ENXIO);
 
-	if (!ofw_bus_is_compatible(dev, "broadcom,bcm2835-gpio"))
+	if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0)
 		return (ENXIO);
 
 	device_set_desc(dev, "BCM2708/2835 GPIO controller");


More information about the svn-src-all mailing list