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");
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to